diff --git a/REUSE.toml b/REUSE.toml index 3bf323a9..e0372263 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -17,6 +17,12 @@ precedence = "aggregate" SPDX-FileCopyrightText = "2022-2024 Nextcloud translators" SPDX-License-Identifier = "AGPL-3.0-or-later" +[[annotations]] +path = ["css/**.css"] +precedence = "aggregate" +SPDX-FileCopyrightText = "2022-2026 Nextcloud GmbH and Nextcloud contributors" +SPDX-License-Identifier = "AGPL-3.0-or-later" + [[annotations]] path = [".tx/config", "composer.json", "composer.lock", "package-lock.json", "package.json", "tests/psalm-baseline.xml"] precedence = "aggregate" diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index 28adc5f7..00000000 --- a/babel.config.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors - * SPDX-License-Identifier: AGPL-3.0-or-later - */ - -const babelConfig = require('@nextcloud/babel-config') - -module.exports = babelConfig diff --git a/build-js/WebpackSPDXPlugin.js b/build-js/WebpackSPDXPlugin.js deleted file mode 100644 index 50ece67c..00000000 --- a/build-js/WebpackSPDXPlugin.js +++ /dev/null @@ -1,221 +0,0 @@ -'use strict' - -/** - * Partly inspired by https://github.com/FormidableLabs/webpack-stats-plugin - * - * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors - * SPDX-License-Identifier: MIT - */ - -const { constants } = require('node:fs') -const fs = require('node:fs/promises') -const path = require('node:path') -const webpack = require('webpack') - -class WebpackSPDXPlugin { - - #options - - /** - * @param {object} opts Parameters - * @param {Record} opts.override Override licenses for packages - */ - constructor(opts = {}) { - this.#options = { override: {}, ...opts } - } - - apply(compiler) { - compiler.hooks.thisCompilation.tap('spdx-plugin', (compilation) => { - // `processAssets` is one of the last hooks before frozen assets. - // We choose `PROCESS_ASSETS_STAGE_REPORT` which is the last possible - // stage after which to emit. - compilation.hooks.processAssets.tapPromise( - { - name: 'spdx-plugin', - stage: compilation.constructor.PROCESS_ASSETS_STAGE_REPORT, - }, - () => this.emitLicenses(compilation), - ) - }) - } - - /** - * Find the nearest package.json - * @param {string} dir Directory to start checking - */ - async #findPackage(dir) { - if (!dir || dir === '/' || dir === '.') { - return null - } - - const packageJson = `${dir}/package.json` - try { - await fs.access(packageJson, constants.F_OK) - } catch (e) { - return await this.#findPackage(path.dirname(dir)) - } - - const { private: isPrivatePacket, name } = JSON.parse(await fs.readFile(packageJson)) - // "private" is set in internal package.json which should not be resolved but the parent package.json - // Same if no name is set in package.json - if (isPrivatePacket === true || !name) { - return (await this.#findPackage(path.dirname(dir))) ?? packageJson - } - return packageJson - } - - /** - * Emit licenses found in compilation to '.license' files - * @param {webpack.Compilation} compilation Webpack compilation object - * @param {*} callback Callback for old webpack versions - */ - async emitLicenses(compilation, callback) { - const logger = compilation.getLogger('spdx-plugin') - // cache the node packages - const packageInformation = new Map() - - const warnings = new Set() - /** @type {Map>} */ - const sourceMap = new Map() - - for (const chunk of compilation.chunks) { - for (const file of chunk.files) { - if (sourceMap.has(file)) { - sourceMap.get(file).add(chunk) - } else { - sourceMap.set(file, new Set([chunk])) - } - } - } - - for (const [asset, chunks] of sourceMap.entries()) { - /** @type {Set} */ - const modules = new Set() - /** - * @param {webpack.Module} module - */ - const addModule = (module) => { - if (module && !modules.has(module)) { - modules.add(module) - for (const dep of module.dependencies) { - addModule(compilation.moduleGraph.getModule(dep)) - } - } - } - chunks.forEach((chunk) => chunk.getModules().forEach(addModule)) - - const sources = [...modules].map((module) => module.identifier()) - .map((source) => { - const skipped = [ - 'delegated', - 'external', - 'container entry', - 'ignored', - 'remote', - 'data:', - ] - // Webpack sources that we can not infer license information or that is not included (external modules) - if (skipped.some((prefix) => source.startsWith(prefix))) { - return '' - } - // Internal webpack sources - if (source.startsWith('webpack/runtime')) { - return require.resolve('webpack') - } - // Handle webpack loaders - if (source.includes('!')) { - return source.split('!').at(-1) - } - if (source.includes('|')) { - return source - .split('|') - .filter((s) => s.startsWith(path.sep)) - .at(0) - } - return source - }) - .filter((s) => !!s) - .map((s) => s.split('?', 2)[0]) - - // Skip assets without modules, these are emitted by webpack plugins - if (sources.length === 0) { - logger.warn(`Skipping ${asset} because it does not contain any source information`) - continue - } - - /** packages used by the current asset - * @type {Set} - */ - const packages = new Set() - - // packages is the list of packages used by the asset - for (const sourcePath of sources) { - const pkg = await this.#findPackage(path.dirname(sourcePath)) - if (!pkg) { - logger.warn(`No package for source found (${sourcePath})`) - continue - } - - if (!packageInformation.has(pkg)) { - // Get the information from the package - const { author: packageAuthor, name, version, license: packageLicense, licenses } = JSON.parse(await fs.readFile(pkg)) - // Handle legacy packages - let license = !packageLicense && licenses - ? licenses.map((entry) => entry.type ?? entry).join(' OR ') - : packageLicense - if (license?.includes(' ') && !license?.startsWith('(')) { - license = `(${license})` - } - // Handle both object style and string style author - const author = typeof packageAuthor === 'object' - ? `${packageAuthor.name}` + (packageAuthor.mail ? ` <${packageAuthor.mail}>` : '') - : packageAuthor ?? `${name} developers` - - packageInformation.set(pkg, { - version, - // Fallback to directory name if name is not set - name: name ?? path.basename(path.dirname(pkg)), - author, - license, - }) - } - packages.add(pkg) - } - - let output = 'This file is generated from multiple sources. Included packages:\n' - const authors = new Set() - const licenses = new Set() - for (const packageName of [...packages].sort()) { - const pkg = packageInformation.get(packageName) - const license = this.#options.override[pkg.name] ?? pkg.license - // Emit warning if not already done - if (!license && !warnings.has(pkg.name)) { - logger.warn(`Missing license information for package ${pkg.name}, you should add it to the 'override' option.`) - warnings.add(pkg.name) - } - licenses.add(license || 'unknown') - authors.add(pkg.author) - output += `- ${pkg.name}\n\t- version: ${pkg.version}\n\t- license: ${license}\n` - } - output = `\n\n${output}` - for (const author of [...authors].sort()) { - output = 'SPDX-File' + `CopyrightText: ${author}\n${output}` - } - for (const license of [...licenses].sort()) { - output = 'SPDX-Lice' + `nse-Identifier: ${license}\n${output}` - } - - compilation.emitAsset( - asset.split('?', 2)[0] + '.license', - new webpack.sources.RawSource(output), - ) - } - - if (callback) { - return callback() - } - } - -} - -module.exports = WebpackSPDXPlugin diff --git a/build-js/npm-post-build.sh b/build-js/npm-post-build.sh deleted file mode 100755 index 30d73cea..00000000 --- a/build-js/npm-post-build.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh - -# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors -# SPDX-License-Identifier: AGPL-3.0-or-later - -set -e - -# Add licenses for source maps -if [ -d "js" ]; then - for f in js/*.js; do - # If license file and source map exists copy license for the source map - if [ -f "$f.license" ] && [ -f "$f.map" ]; then - # Remove existing link - [ -e "$f.map.license" ] || [ -L "$f.map.license" ] && rm "$f.map.license" - # Create a new link - ln -s "$(basename "$f.license")" "$f.map.license" - fi - done - echo "Copying licenses for sourcemaps done" -else - echo "This script needs to be executed from the root of the repository" - exit 1 -fi diff --git a/css/be-tarask-fDfbCxDn.chunk.css b/css/be-tarask-fDfbCxDn.chunk.css new file mode 100644 index 00000000..091b7476 --- /dev/null +++ b/css/be-tarask-fDfbCxDn.chunk.css @@ -0,0 +1,4 @@ +.material-design-icon[data-v-5ca1e30f]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.checkbox-content[data-v-5ca1e30f]{display:flex;align-items:center;flex-direction:row;gap:var(--default-grid-baseline);-webkit-user-select:none;user-select:none;min-height:var(--default-clickable-area);border-radius:var(--checkbox-radio-switch--border-radius);padding:var(--default-grid-baseline) calc((var(--default-clickable-area) - var(--icon-height)) / 2);width:100%;max-width:fit-content}.checkbox-content__wrapper[data-v-5ca1e30f]{flex:1 0 0;max-width:100%}.checkbox-content__text[data-v-5ca1e30f]:empty{display:none}.checkbox-content-checkbox:not(.checkbox-content--button-variant) .checkbox-content__icon[data-v-5ca1e30f],.checkbox-content-radio:not(.checkbox-content--button-variant) .checkbox-content__icon[data-v-5ca1e30f],.checkbox-content-switch:not(.checkbox-content--button-variant) .checkbox-content__icon[data-v-5ca1e30f]{margin-block:calc((var(--default-clickable-area) - 2 * var(--default-grid-baseline) - var(--icon-height)) / 2) auto;line-height:0}.checkbox-content-checkbox:not(.checkbox-content--button-variant) .checkbox-content__icon--has-description[data-v-5ca1e30f],.checkbox-content-radio:not(.checkbox-content--button-variant) .checkbox-content__icon--has-description[data-v-5ca1e30f],.checkbox-content-switch:not(.checkbox-content--button-variant) .checkbox-content__icon--has-description[data-v-5ca1e30f]{display:flex;align-items:center;margin-block-end:0;align-self:start}.checkbox-content__icon[data-v-5ca1e30f]>*{width:var(--icon-size);height:var(--icon-height);color:var(--color-primary-element)}.checkbox-content__description[data-v-5ca1e30f]{display:block;color:var(--color-text-maxcontrast);font-weight:var(--font-weight-default, normal)}.checkbox-content--button-variant .checkbox-content__icon[data-v-5ca1e30f]:not(.checkbox-content__icon--checked)>*{color:var(--color-primary-element)}.checkbox-content--button-variant .checkbox-content__icon--checked[data-v-5ca1e30f]>*{color:var(--color-primary-element-text)}.checkbox-content--has-text[data-v-5ca1e30f]{padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2)}.checkbox-content[data-v-5ca1e30f],.checkbox-content[data-v-5ca1e30f] *{cursor:pointer;flex-shrink:0}.material-design-icon[data-v-81045d2a]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.checkbox-radio-switch[data-v-81045d2a]{--icon-size: var(--f99d0228);--icon-height: var(--v69c82152);--checkbox-radio-switch--border-radius: var(--border-radius-element);--checkbox-radio-switch--border-radius-outer: calc(var(--checkbox-radio-switch--border-radius) + 2px);display:flex;align-items:center;color:var(--color-main-text);background-color:transparent;font-size:var(--default-font-size);font-weight:var(--font-weight-element, normal);line-height:var(--default-line-height);padding:0;position:relative}.checkbox-radio-switch__input[data-v-81045d2a]{position:absolute;z-index:-1;opacity:0!important;width:var(--icon-size);height:var(--icon-size)}.checkbox-radio-switch__input:focus-visible+.checkbox-radio-switch__content[data-v-81045d2a],.checkbox-radio-switch__input[data-v-81045d2a]:focus-visible{outline:2px solid var(--color-main-text);border-color:var(--color-main-background);outline-offset:-2px}.checkbox-radio-switch--disabled .checkbox-radio-switch__content[data-v-81045d2a]{opacity:.5}.checkbox-radio-switch--disabled .checkbox-radio-switch__content[data-v-81045d2a] .checkbox-radio-switch__icon>*{color:var(--color-main-text)}.checkbox-radio-switch--disabled .checkbox-radio-switch__content.checkbox-content[data-v-81045d2a],.checkbox-radio-switch--disabled .checkbox-radio-switch__content.checkbox-content[data-v-81045d2a] *:not(a){cursor:default!important}.checkbox-radio-switch:not(.checkbox-radio-switch--disabled,.checkbox-radio-switch--checked):focus-within .checkbox-radio-switch__content[data-v-81045d2a],.checkbox-radio-switch:not(.checkbox-radio-switch--disabled,.checkbox-radio-switch--checked) .checkbox-radio-switch__content[data-v-81045d2a]:hover{background-color:var(--color-background-hover)}.checkbox-radio-switch--checked:not(.checkbox-radio-switch--disabled):focus-within .checkbox-radio-switch__content[data-v-81045d2a],.checkbox-radio-switch--checked:not(.checkbox-radio-switch--disabled) .checkbox-radio-switch__content[data-v-81045d2a]:hover{background-color:var(--color-primary-element-hover)}.checkbox-radio-switch--checked:not(.checkbox-radio-switch--button-variant):not(.checkbox-radio-switch--disabled):focus-within .checkbox-radio-switch__content[data-v-81045d2a],.checkbox-radio-switch--checked:not(.checkbox-radio-switch--button-variant):not(.checkbox-radio-switch--disabled) .checkbox-radio-switch__content[data-v-81045d2a]:hover{background-color:var(--color-primary-element-light-hover)}.checkbox-radio-switch-switch[data-v-81045d2a]:not(.checkbox-radio-switch--checked) .checkbox-radio-switch__icon>*{color:var(--color-text-maxcontrast)}.checkbox-radio-switch-switch.checkbox-radio-switch--disabled.checkbox-radio-switch--checked[data-v-81045d2a] .checkbox-radio-switch__icon>*{color:var(--color-primary-element-light)}.checkbox-radio-switch--button-variant.checkbox-radio-switch[data-v-81045d2a]{background-color:var(--color-main-background);border:2px solid var(--color-border-maxcontrast);overflow:hidden}.checkbox-radio-switch--button-variant.checkbox-radio-switch--checked[data-v-81045d2a]{font-weight:var(--font-weight-element, bold)}.checkbox-radio-switch--button-variant.checkbox-radio-switch--checked .checkbox-radio-switch__content[data-v-81045d2a]{background-color:var(--color-primary-element);color:var(--color-primary-element-text)}.checkbox-radio-switch--button-variant[data-v-81045d2a] .checkbox-radio-switch__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.checkbox-radio-switch--button-variant[data-v-81045d2a]:not(.checkbox-radio-switch--checked) .checkbox-radio-switch__icon>*{color:var(--color-main-text)}.checkbox-radio-switch--button-variant[data-v-81045d2a] .checkbox-radio-switch__icon:empty{display:none}.checkbox-radio-switch--button-variant[data-v-81045d2a]:not(.checkbox-radio-switch--button-variant-v-grouped):not(.checkbox-radio-switch--button-variant-h-grouped),.checkbox-radio-switch--button-variant .checkbox-radio-switch__content[data-v-81045d2a]{border-radius:var(--checkbox-radio-switch--border-radius)}.checkbox-radio-switch--button-variant-v-grouped .checkbox-radio-switch__content[data-v-81045d2a]{flex-basis:100%;max-width:unset}.checkbox-radio-switch--button-variant-v-grouped[data-v-81045d2a]:first-of-type{border-start-start-radius:var(--checkbox-radio-switch--border-radius-outer);border-start-end-radius:var(--checkbox-radio-switch--border-radius-outer)}.checkbox-radio-switch--button-variant-v-grouped[data-v-81045d2a]:last-of-type{border-end-start-radius:var(--checkbox-radio-switch--border-radius-outer);border-end-end-radius:var(--checkbox-radio-switch--border-radius-outer)}.checkbox-radio-switch--button-variant-v-grouped[data-v-81045d2a]:not(:last-of-type){border-bottom:0!important}.checkbox-radio-switch--button-variant-v-grouped:not(:last-of-type) .checkbox-radio-switch__content[data-v-81045d2a]{margin-bottom:2px}.checkbox-radio-switch--button-variant-v-grouped[data-v-81045d2a]:not(:first-of-type){border-top:0!important}.checkbox-radio-switch--button-variant-h-grouped[data-v-81045d2a]:first-of-type{border-start-start-radius:var(--checkbox-radio-switch--border-radius-outer);border-end-start-radius:var(--checkbox-radio-switch--border-radius-outer)}.checkbox-radio-switch--button-variant-h-grouped[data-v-81045d2a]:last-of-type{border-start-end-radius:var(--checkbox-radio-switch--border-radius-outer);border-end-end-radius:var(--checkbox-radio-switch--border-radius-outer)}.checkbox-radio-switch--button-variant-h-grouped[data-v-81045d2a]:not(:last-of-type){border-inline-end:0!important}.checkbox-radio-switch--button-variant-h-grouped:not(:last-of-type) .checkbox-radio-switch__content[data-v-81045d2a]{margin-inline-end:2px}.checkbox-radio-switch--button-variant-h-grouped[data-v-81045d2a]:not(:first-of-type){border-inline-start:0!important}.checkbox-radio-switch--button-variant-h-grouped[data-v-81045d2a] .checkbox-radio-switch__text{text-align:center;display:flex;align-items:center}.checkbox-radio-switch--button-variant-h-grouped .checkbox-radio-switch__content[data-v-81045d2a]{flex-direction:column;justify-content:center;width:100%;margin:0;gap:0}._material-design-icon_GIyb6{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._iconToggleSwitch_2xTzi{color:var(--v6bd152af);transition:color var(--animation-quick) ease}._iconToggleSwitch_2xTzi svg{height:auto!important}._iconToggleSwitch_2xTzi circle{cx:var(--v16fd8ca9);transition:cx var(--animation-quick) ease}.material-design-icon[data-v-8609a4c1]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.empty-content[data-v-8609a4c1]{display:flex;align-items:center;flex-direction:column;justify-content:center;flex-grow:1;padding:var(--default-grid-baseline)}.modal-wrapper .empty-content[data-v-8609a4c1]{margin-top:5vh;margin-bottom:5vh}.empty-content__icon[data-v-8609a4c1]{display:flex;align-items:center;justify-content:center;width:64px;height:64px;margin:0 auto 15px;opacity:.4;background-repeat:no-repeat;background-position:center;background-size:64px}.empty-content__icon[data-v-8609a4c1] svg{width:64px!important;height:64px!important;max-width:64px!important;max-height:64px!important}.empty-content__name[data-v-8609a4c1]{margin-bottom:10px;text-align:center;font-weight:var(--font-weight-heading, bold);font-size:20px;line-height:30px}.empty-content__description[data-v-8609a4c1]{color:var(--color-text-maxcontrast);text-align:center;text-wrap-style:balance}.empty-content__action[data-v-8609a4c1]{margin-top:8px}.modal-wrapper .empty-content__action[data-v-8609a4c1]{margin-top:20px;display:flex}.material-design-icon[data-v-7720ab60]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}button[data-v-7720ab60]:not(.button-vue),input[data-v-7720ab60]:not([type=range]),textarea[data-v-7720ab60]{margin:0;padding:7px 6px;cursor:text;color:var(--color-main-text);border:1px solid var(--color-border-dark);border-radius:var(--border-radius-element);outline:none;background-color:var(--color-main-background);font-size:13px}button[data-v-7720ab60]:not(.button-vue):not(:disabled):not(.primary):hover,button[data-v-7720ab60]:not(.button-vue):not(:disabled):not(.primary):focus,button:not(.button-vue):not(:disabled):not(.primary).active[data-v-7720ab60],input[data-v-7720ab60]:not([type=range]):not(:disabled):not(.primary):hover,input[data-v-7720ab60]:not([type=range]):not(:disabled):not(.primary):focus,input:not([type=range]):not(:disabled):not(.primary).active[data-v-7720ab60],textarea[data-v-7720ab60]:not(:disabled):not(.primary):hover,textarea[data-v-7720ab60]:not(:disabled):not(.primary):focus,textarea:not(:disabled):not(.primary).active[data-v-7720ab60]{border-color:var(--color-primary-element);outline:none}button[data-v-7720ab60]:not(.button-vue):not(:disabled):not(.primary):active,input[data-v-7720ab60]:not([type=range]):not(:disabled):not(.primary):active,textarea[data-v-7720ab60]:not(:disabled):not(.primary):active{color:var(--color-main-text);outline:none;background-color:var(--color-main-background)}button[data-v-7720ab60]:not(.button-vue):disabled,input[data-v-7720ab60]:not([type=range]):disabled,textarea[data-v-7720ab60]:disabled{cursor:default;opacity:.5;color:var(--color-text-maxcontrast);background-color:var(--color-background-dark)}button[data-v-7720ab60]:not(.button-vue):required,input[data-v-7720ab60]:not([type=range]):required,textarea[data-v-7720ab60]:required{box-shadow:none}button[data-v-7720ab60]:not(.button-vue):invalid,input[data-v-7720ab60]:not([type=range]):invalid,textarea[data-v-7720ab60]:invalid{border-color:var(--color-border-error, var(--color-error));box-shadow:none!important}button:not(.button-vue).primary[data-v-7720ab60],input:not([type=range]).primary[data-v-7720ab60],textarea.primary[data-v-7720ab60]{cursor:pointer;color:var(--color-primary-element-text);border-color:var(--color-primary-element);background-color:var(--color-primary-element)}button:not(.button-vue).primary[data-v-7720ab60]:not(:disabled):hover,button:not(.button-vue).primary[data-v-7720ab60]:not(:disabled):focus,button:not(.button-vue).primary[data-v-7720ab60]:not(:disabled):active,input:not([type=range]).primary[data-v-7720ab60]:not(:disabled):hover,input:not([type=range]).primary[data-v-7720ab60]:not(:disabled):focus,input:not([type=range]).primary[data-v-7720ab60]:not(:disabled):active,textarea.primary[data-v-7720ab60]:not(:disabled):hover,textarea.primary[data-v-7720ab60]:not(:disabled):focus,textarea.primary[data-v-7720ab60]:not(:disabled):active{border-color:var(--color-primary-element-light);background-color:var(--color-primary-element-light)}button:not(.button-vue).primary[data-v-7720ab60]:not(:disabled):active,input:not([type=range]).primary[data-v-7720ab60]:not(:disabled):active,textarea.primary[data-v-7720ab60]:not(:disabled):active{color:var(--color-primary-element-text-dark)}button:not(.button-vue).primary[data-v-7720ab60]:disabled,input:not([type=range]).primary[data-v-7720ab60]:disabled,textarea.primary[data-v-7720ab60]:disabled{cursor:default;color:var(--color-primary-element-text-dark);background-color:var(--color-primary-element)}li.action[data-v-7720ab60]:hover,li.action.active[data-v-7720ab60]{border-radius:6px;padding:0}li.action[data-v-7720ab60]:hover{background-color:var(--color-background-hover)}.action--disabled[data-v-7720ab60]{pointer-events:none;opacity:.5}.action--disabled[data-v-7720ab60]:hover,.action--disabled[data-v-7720ab60]:focus{cursor:default;opacity:.5}.action--disabled[data-v-7720ab60] *{opacity:1!important}.action-input[data-v-7720ab60]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-default, normal)}.action-input__icon-wrapper[data-v-7720ab60]{display:flex;align-self:flex-start;margin-top:var(--default-grid-baseline);align-items:center;justify-content:center}.action-input__icon-wrapper[data-v-7720ab60] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1}.action-input__icon-wrapper[data-v-7720ab60] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-input--tight-label .action-input__icon-wrapper[data-v-7720ab60]{margin-top:0}.action-input>span[data-v-7720ab60]{cursor:pointer;white-space:nowrap}.action-input__icon[data-v-7720ab60]{min-width:0;min-height:0;padding:calc(var(--default-clickable-area) / 2) 0 calc(var(--default-clickable-area) / 2) var(--default-clickable-area);background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px}.action-input__form[data-v-7720ab60]{display:flex;align-items:center;flex:1 1 auto;margin:4px 0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2)}.action-input__container[data-v-7720ab60]{position:relative;width:100%}.action-input__input-container[data-v-7720ab60]{display:flex}.action-input__input-container .colorpicker__trigger[data-v-7720ab60],.action-input__input-container .colorpicker__preview[data-v-7720ab60]{width:100%}.action-input__input-container .colorpicker__preview[data-v-7720ab60]{width:100%;height:36px;border-radius:var(--border-radius-element);border:2px solid var(--color-border-maxcontrast);box-shadow:none!important}.action-input__text-label[data-v-7720ab60]{padding:4px 0;display:block}.action-input__text-label--hidden[data-v-7720ab60]{position:absolute;inset-inline-start:0;width:1px;height:1px;overflow:hidden;z-index:-1;opacity:0}.action-input__datetimepicker[data-v-7720ab60]{width:100%}.action-input__datetimepicker[data-v-7720ab60] .mx-input{margin:0}.action-input__multi[data-v-7720ab60]{width:100%}li:last-child>.action-input[data-v-7720ab60]{padding-bottom:calc((var(--default-clickable-area) - 16px) / 2 - 4px)}li:first-child>.action-input[data-v-7720ab60]:not(.action-input--visible-label){padding-top:calc((var(--default-clickable-area) - 16px) / 2 - 4px)}.material-design-icon[data-v-20945aed]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}[data-theme-light][data-v-20945aed] .native-datetime-picker,[data-themes*=light][data-v-20945aed] .native-datetime-picker{color-scheme:light}[data-theme-dark][data-v-20945aed] .native-datetime-picker,[data-themes*=dark][data-v-20945aed] .native-datetime-picker{color-scheme:dark}@media(prefers-color-scheme:light){[data-theme-default][data-v-20945aed] .native-datetime-picker,[data-themes*=default][data-v-20945aed] .native-datetime-picker{color-scheme:light}}@media(prefers-color-scheme:dark){[data-theme-default][data-v-20945aed] .native-datetime-picker,[data-themes*=default][data-v-20945aed] .native-datetime-picker{color-scheme:dark}}.material-design-icon[data-v-feb04bef]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.input-field[data-v-feb04bef]{--input-border-color: var(--color-border-maxcontrast);--input-border-radius: var(--border-radius-element);--input-padding-start: var(--border-radius-element);--input-padding-end: var(--border-radius-element);position:relative;width:100%;margin-block-start:6px}.input-field--disabled[data-v-feb04bef]{opacity:.4;filter:saturate(.4)}.input-field--label-outside[data-v-feb04bef]{margin-block-start:0}.input-field--leading-icon[data-v-feb04bef]{--input-padding-start: calc(var(--default-clickable-area) - var(--default-grid-baseline))}.input-field--trailing-icon[data-v-feb04bef]{--input-padding-end: calc(var(--default-clickable-area) - var(--default-grid-baseline))}.input-field--pill[data-v-feb04bef]{--input-border-radius: var(--border-radius-pill)}.input-field__main-wrapper[data-v-feb04bef]{height:var(--default-clickable-area);padding:var(--border-width-input-focused, 2px);position:relative}.input-field__input[data-v-feb04bef]{--input-border-box-shadow-light: 0 -1px var(--input-border-color), 0 0 0 1px color-mix(in srgb, var(--input-border-color), 65% transparent);--input-border-box-shadow-dark: 0 1px var(--input-border-color), 0 0 0 1px color-mix(in srgb, var(--input-border-color), 65% transparent);--input-border-box-shadow: var(--input-border-box-shadow-light);border:none;border-radius:var(--border-radius-element);box-shadow:var(--input-border-box-shadow)}.input-field__input[data-v-feb04bef]:hover:not([disabled]){box-shadow:0 0 0 1px var(--input-border-color)}@media(prefers-color-scheme:dark){.input-field__input .input-field__input[data-v-feb04bef]{--input-border-box-shadow: var(--input-border-box-shadow-dark)}}[data-theme-dark] .input-field__input[data-v-feb04bef]{--input-border-box-shadow: var(--input-border-box-shadow-dark)}[data-theme-light] .input-field__input[data-v-feb04bef]{--input-border-box-shadow: var(--input-border-box-shadow-light)}.input-field--legacy .input-field__input[data-v-feb04bef]{box-shadow:0 0 0 1px var(--input-border-color)}.input-field--legacy .input-field__input[data-v-feb04bef]:hover:not([disabled]){box-shadow:0 0 0 2px var(--input-border-color)}.input-field__input[data-v-feb04bef]:focus-within:not([disabled]),.input-field__input[data-v-feb04bef]:active:not([disabled]){box-shadow:0 0 0 2px var(--input-border-color),0 0 0 4px var(--color-main-background)!important}.input-field__input[data-v-feb04bef]{background-color:var(--color-main-background);color:var(--color-main-text);border-radius:var(--input-border-radius);cursor:pointer;-webkit-appearance:textfield!important;-moz-appearance:textfield!important;appearance:textfield!important;font-size:var(--default-font-size);text-overflow:ellipsis;padding-block:0;padding-inline:var(--input-padding-start) var(--input-padding-end);height:100%!important;min-height:unset;width:100%}.input-field__input[data-v-feb04bef]::placeholder{color:var(--color-text-maxcontrast)}.input-field__input[data-v-feb04bef]::-webkit-search-cancel-button{display:none}.input-field__input[data-v-feb04bef]::-webkit-search-decoration,.input-field__input[data-v-feb04bef]::-webkit-search-results-button,.input-field__input[data-v-feb04bef]::-webkit-search-results-decoration,.input-field__input[data-v-feb04bef]::-ms-clear{display:none}.input-field__input[data-v-feb04bef]:active:not([disabled]),.input-field__input[data-v-feb04bef]:focus:not([disabled]){--input-border-color: var(--color-main-text)}.input-field__input:focus+.input-field__label[data-v-feb04bef],.input-field__input:hover:not(:placeholder-shown)+.input-field__label[data-v-feb04bef]{color:var(--color-main-text)}.input-field__input[data-v-feb04bef]:focus{cursor:text}.input-field__input[data-v-feb04bef]:disabled{cursor:default}.input-field__input[data-v-feb04bef]:focus-visible{box-shadow:unset!important}.input-field:not(.input-field--label-outside) .input-field__input[data-v-feb04bef]:not(:focus)::placeholder{opacity:0}.input-field__label[data-v-feb04bef]{--input-label-font-size: var(--default-font-size);font-size:var(--input-label-font-size);position:absolute;margin-inline:var(--input-padding-start) var(--input-padding-end);max-width:fit-content;inset-block-start:calc((var(--default-clickable-area) - 1lh) / 2);inset-inline:var(--border-width-input-focused, 2px);color:var(--color-text-maxcontrast);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none;transition:height var(--animation-quick),inset-block-start var(--animation-quick),font-size var(--animation-quick),color var(--animation-quick),background-color var(--animation-quick) var(--animation-slow)}.input-field__input:focus+.input-field__label[data-v-feb04bef],.input-field__input:not(:placeholder-shown)+.input-field__label[data-v-feb04bef]{--input-label-font-size: 13px;line-height:1.5;inset-block-start:calc(-1.5 * var(--input-label-font-size) / 2);font-weight:var(--font-weight-element, 500);border-radius:var(--default-grid-baseline) var(--default-grid-baseline) 0 0;background-color:var(--color-main-background);padding-inline:var(--default-grid-baseline);margin-inline:calc(var(--input-padding-start) - var(--default-grid-baseline)) calc(var(--input-padding-end) - var(--default-grid-baseline));transition:height var(--animation-quick),inset-block-start var(--animation-quick),font-size var(--animation-quick),color var(--animation-quick)}.input-field__icon[data-v-feb04bef]{position:absolute;height:var(--default-clickable-area);width:var(--default-clickable-area);display:flex;align-items:center;justify-content:center;opacity:.7;inset-block-end:0}.input-field__icon--leading[data-v-feb04bef]{inset-inline-start:0px}.input-field__icon--trailing[data-v-feb04bef]{inset-inline-end:0px}.input-field__trailing-button[data-v-feb04bef]{--button-size: calc(var(--default-clickable-area) - 2 * var(--border-width-input-focused, 2px)) !important;--button-radius: calc(var(--input-border-radius) - var(--border-width-input-focused, 2px))}.input-field__trailing-button.button-vue[data-v-feb04bef]{position:absolute;top:var(--border-width-input-focused, 2px);inset-inline-end:var(--border-width-input-focused, 2px)}.input-field__trailing-button.button-vue[data-v-feb04bef]:focus-visible{box-shadow:none!important}.input-field__helper-text-message[data-v-feb04bef]{padding-block:4px;padding-inline:var(--border-radius-element);display:flex;align-items:center;color:var(--color-text-maxcontrast);overflow-wrap:anywhere}.input-field__helper-text-message__icon[data-v-feb04bef]{margin-inline-end:8px}.input-field--error .input-field__helper-text-message[data-v-feb04bef],.input-field--error .input-field__icon--trailing[data-v-feb04bef]{color:var(--color-text-error, var(--color-error))}.input-field--error .input-field__input[data-v-feb04bef],.input-field__input[data-v-feb04bef]:user-invalid{--input-border-color: var(--color-border-error, var(--color-error)) !important}.input-field--error .input-field__input[data-v-feb04bef]:focus-visible,.input-field__input[data-v-feb04bef]:user-invalid:focus-visible{box-shadow:#f8fafc 0 0 0 2px,var(--color-primary-element) 0 0 0 4px,#0000000d 0 1px 2px}.input-field--success .input-field__input[data-v-feb04bef]{--input-border-color: var(--color-border-success, var(--color-success)) !important}.input-field--success .input-field__input[data-v-feb04bef]:focus-visible{box-shadow:#f8fafc 0 0 0 2px,var(--color-primary-element) 0 0 0 4px,#0000000d 0 1px 2px}.input-field--success .input-field__helper-text-message__icon[data-v-feb04bef]{color:var(--color-border-success, var(--color-success))}.material-design-icon[data-v-cb828737]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}[data-v-cb828737] .password-field__input--secure-text{-webkit-text-security:disc}.material-design-icon[data-v-7cec4a3e]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.vue-crumb[data-v-7cec4a3e]{background-image:none;display:inline-flex;height:var(--default-clickable-area);padding:0}.vue-crumb[data-v-7cec4a3e]:last-child{min-width:0}.vue-crumb:last-child .vue-crumb__separator[data-v-7cec4a3e]{display:none}.vue-crumb--hidden[data-v-7cec4a3e]{display:none}.vue-crumb__separator[data-v-7cec4a3e]{padding:0;color:var(--color-text-maxcontrast)}.vue-crumb.vue-crumb--hovered[data-v-7cec4a3e] .button-vue{background-color:var(--color-background-dark);color:var(--color-main-text)}.vue-crumb[data-v-7cec4a3e]:not(:last-child) .button-vue{color:var(--color-text-maxcontrast)}.vue-crumb[data-v-7cec4a3e]:not(:last-child) .button-vue:hover,.vue-crumb[data-v-7cec4a3e]:not(:last-child) .button-vue:focus{background-color:var(--color-background-dark);color:var(--color-main-text)}.vue-crumb[data-v-7cec4a3e]:not(:last-child) .button-vue__text{font-weight:var(--font-weight-element, normal)}.vue-crumb[data-v-7cec4a3e] .button-vue__text{margin:0}.vue-crumb[data-v-7cec4a3e]:not(.dropdown) .action-item{max-width:100%}.vue-crumb[data-v-7cec4a3e]:not(.dropdown) .action-item .button-vue{padding:0 4px 0 16px;max-width:100%}.vue-crumb[data-v-7cec4a3e]:not(.dropdown) .action-item .button-vue__wrapper{flex-direction:row-reverse}.vue-crumb[data-v-7cec4a3e]:not(.dropdown) .action-item.action-item--open .action-item__menutoggle{background-color:var(--color-background-dark);color:var(--color-main-text)}.material-design-icon[data-v-5a4d73af]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.breadcrumb[data-v-5a4d73af]{width:100%;flex-grow:1;display:inline-flex;align-items:center}.breadcrumb--collapsed[data-v-5a4d73af] .vue-crumb:last-child{min-width:100px}.breadcrumb nav[data-v-5a4d73af]{flex-shrink:1;min-width:0}.breadcrumb .breadcrumb__crumbs[data-v-5a4d73af]{max-width:100%}.breadcrumb .breadcrumb__crumbs[data-v-5a4d73af],.breadcrumb .breadcrumb__actions[data-v-5a4d73af]{display:inline-flex}.material-design-icon[data-v-6c2daf4e]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}li.action[data-v-6c2daf4e]:hover,li.action.active[data-v-6c2daf4e]{border-radius:6px;padding:0}li.action[data-v-6c2daf4e]:hover{background-color:var(--color-background-hover)}.action--disabled[data-v-6c2daf4e]{pointer-events:none;opacity:.5}.action--disabled[data-v-6c2daf4e]:hover,.action--disabled[data-v-6c2daf4e]:focus{cursor:default;opacity:.5}.action--disabled[data-v-6c2daf4e] *{opacity:1!important}.action-button[data-v-6c2daf4e]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2);box-sizing:border-box;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-element, normal);font-size:var(--default-font-size);line-height:var(--default-clickable-area)}.action-button>span[data-v-6c2daf4e]{cursor:pointer;white-space:nowrap}.action-button__icon[data-v-6c2daf4e]{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px;background-repeat:no-repeat}.action-button[data-v-6c2daf4e] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);align-self:flex-start;opacity:1}.action-button[data-v-6c2daf4e] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-button__longtext-wrapper[data-v-6c2daf4e],.action-button__longtext[data-v-6c2daf4e]{max-width:220px;line-height:1.6em;padding:calc((var(--default-clickable-area) - 1.6em) / 2) 0;cursor:pointer;text-align:start;overflow:hidden;text-overflow:ellipsis}.action-button__longtext[data-v-6c2daf4e]{cursor:pointer;white-space:pre-wrap!important}.action-button__name[data-v-6c2daf4e]{font-weight:var(--font-weight-heading, bold);text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:100%;display:block}.action-button__description[data-v-6c2daf4e]{display:block;white-space:pre-wrap;font-size:var(--font-size-small);font-weight:var(--font-weight-default, normal);line-height:var(--default-line-height);color:var(--color-text-maxcontrast);cursor:pointer}.action-button__menu-icon[data-v-6c2daf4e],.action-button__pressed-icon[data-v-6c2daf4e]{margin-inline:auto calc((var(--default-clickable-area) - 16px) / 2 * -1)}.action-button[data-v-6c2daf4e] *{cursor:pointer}.material-design-icon[data-v-32f01b7a]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}li.action[data-v-32f01b7a]:hover,li.action.active[data-v-32f01b7a]{border-radius:6px;padding:0}li.action[data-v-32f01b7a]:hover{background-color:var(--color-background-hover)}.action-link[data-v-32f01b7a]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2);box-sizing:border-box;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-element, normal);font-size:var(--default-font-size);line-height:var(--default-clickable-area)}.action-link>span[data-v-32f01b7a]{cursor:pointer;white-space:nowrap}.action-link__icon[data-v-32f01b7a]{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px;background-repeat:no-repeat}.action-link[data-v-32f01b7a] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);align-self:flex-start;opacity:1}.action-link[data-v-32f01b7a] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-link__longtext-wrapper[data-v-32f01b7a],.action-link__longtext[data-v-32f01b7a]{max-width:220px;line-height:1.6em;padding:calc((var(--default-clickable-area) - 1.6em) / 2) 0;cursor:pointer;text-align:start;overflow:hidden;text-overflow:ellipsis}.action-link__longtext[data-v-32f01b7a]{cursor:pointer;white-space:pre-wrap!important}.action-link__name[data-v-32f01b7a]{font-weight:var(--font-weight-heading, bold);text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:100%;display:block}.action-link__description[data-v-32f01b7a]{display:block;white-space:pre-wrap;font-size:var(--font-size-small);font-weight:var(--font-weight-default, normal);line-height:var(--default-line-height);color:var(--color-text-maxcontrast);cursor:pointer}.action-link__menu-icon[data-v-32f01b7a]{margin-inline:auto calc((var(--default-clickable-area) - 16px) / 2 * -1)}.material-design-icon[data-v-87267750]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}li.action[data-v-87267750]:hover,li.action.active[data-v-87267750]{border-radius:6px;padding:0}li.action[data-v-87267750]:hover{background-color:var(--color-background-hover)}.action-router[data-v-87267750]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2);box-sizing:border-box;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-element, normal);font-size:var(--default-font-size);line-height:var(--default-clickable-area)}.action-router>span[data-v-87267750]{cursor:pointer;white-space:nowrap}.action-router__icon[data-v-87267750]{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px;background-repeat:no-repeat}.action-router[data-v-87267750] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);align-self:flex-start;opacity:1}.action-router[data-v-87267750] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-router__longtext-wrapper[data-v-87267750],.action-router__longtext[data-v-87267750]{max-width:220px;line-height:1.6em;padding:calc((var(--default-clickable-area) - 1.6em) / 2) 0;cursor:pointer;text-align:start;overflow:hidden;text-overflow:ellipsis}.action-router__longtext[data-v-87267750]{cursor:pointer;white-space:pre-wrap!important}.action-router__name[data-v-87267750]{font-weight:var(--font-weight-heading, bold);text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:100%;display:block}.action-router__description[data-v-87267750]{display:block;white-space:pre-wrap;font-size:var(--font-size-small);font-weight:var(--font-weight-default, normal);line-height:var(--default-line-height);color:var(--color-text-maxcontrast);cursor:pointer}.action-router__menu-icon[data-v-87267750]{margin-inline:auto calc((var(--default-clickable-area) - 16px) / 2 * -1)}.action--disabled[data-v-87267750]{pointer-events:none;opacity:.5}.action--disabled[data-v-87267750]:hover,.action--disabled[data-v-87267750]:focus{cursor:default;opacity:.5}.action--disabled[data-v-87267750] *{opacity:1!important}.material-design-icon{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}/*! + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */.nc-select.v-select.select .select__helper-text{display:flex;align-items:center;margin:0;padding-block:4px;padding-inline:var(--border-radius-element);color:var(--color-text-maxcontrast);font-size:var(--default-font-size);overflow-wrap:anywhere}.nc-select.v-select.select .select__helper-text--error{color:var(--color-text-error)}.nc-select.v-select.select .select__helper-text--success{color:var(--color-text-success)}.nc-select.v-select.select .select__helper-text .select__helper-text-icon{margin-inline-end:8px}.nc-select.v-select.select,.nc-select__dropdown.vs__dropdown-menu{--vs-search-input-color: var(--color-main-text);--vs-search-input-bg: var(--color-main-background);--vs-search-input-placeholder-color: var(--color-text-maxcontrast);--vs-font-size: var(--default-font-size);--vs-line-height: var(--default-line-height);--vs-state-disabled-bg: var(--color-background-hover);--vs-state-disabled-color: var(--color-text-maxcontrast);--vs-state-disabled-controls-color: var(--color-text-maxcontrast);--vs-state-disabled-cursor: not-allowed;--vs-disabled-bg: var(--color-background-hover);--vs-disabled-color: var(--color-text-maxcontrast);--vs-disabled-cursor: not-allowed;--vs-border-color: var(--color-border-maxcontrast);--vs-border-width: var(--border-width-input, 2px) !important;--vs-border-style: solid;--vs-border-radius: var(--border-radius-element);--vs-controls-color: var(--color-main-text);--vs-selected-bg: var(--color-background-hover);--vs-selected-color: var(--color-main-text);--vs-selected-border-color: var(--vs-border-color);--vs-selected-border-style: var(--vs-border-style);--vs-selected-border-width: var(--vs-border-width);--vs-dropdown-bg: var(--color-main-background);--vs-dropdown-color: var(--color-main-text);--vs-dropdown-z-index: 9999;--vs-dropdown-box-shadow: 0px 2px 2px 0px var(--color-box-shadow);--vs-dropdown-option-padding: 8px 20px;--vs-dropdown-option--active-bg: var(--color-background-hover);--vs-dropdown-option--active-color: var(--color-main-text);--vs-dropdown-option--kb-focus-box-shadow: inset 0px 0px 0px 2px var(--vs-border-color);--vs-dropdown-option--deselect-bg: var(--color-error);--vs-dropdown-option--deselect-color: #fff;--vs-transition-duration: 0ms;--vs-actions-padding: 0 8px 0 8px}.nc-select.v-select.select{min-height:calc(var(--default-clickable-area) - 2 * var(--border-width-input, 2px));min-width:260px;margin:6px 0 var(--default-grid-baseline)}.nc-select.v-select.select.vs--open{--vs-border-width: var(--border-width-input-focused, 2px)}.nc-select.v-select.select .vs__selected{min-height:calc(var(--default-clickable-area) - 2 * var(--vs-border-width) - var(--default-grid-baseline));min-width:0;max-width:100%;margin:calc(var(--default-grid-baseline) / 2);padding-block:0;padding-inline:12px 8px;border-radius:16px!important;background:var(--color-primary-element-light);border:none}.nc-select.v-select.select .vs__search{width:100%;--input-padding-end: calc(var(--default-clickable-area) + var(--default-grid-baseline));border:none!important;margin:0!important;padding:0!important;height:auto!important}.nc-select.v-select.select .vs__selected-options:has(.vs__selected) .vs__search .input-field__input+.input-field__label{--input-label-font-size: var(--font-size-small, 13px);line-height:1.5;inset-block-start:calc(-1.5 * var(--input-label-font-size) / 2);font-weight:500;border-radius:var(--default-grid-baseline) var(--default-grid-baseline) 0 0;background-color:var(--color-main-background);padding-inline:var(--default-grid-baseline);margin-inline:calc(var(--input-padding-start) - var(--default-grid-baseline)) calc(var(--input-padding-end) - var(--default-grid-baseline));transition:height var(--animation-quick),inset-block-start var(--animation-quick),font-size var(--animation-quick),color var(--animation-quick)}.nc-select.v-select.select:not(.vs--multiple) .vs__dropdown-toggle{padding:0;overflow:visible;border:none!important;box-shadow:none!important;background:transparent}.nc-select.v-select.select .vs__dropdown-toggle{position:relative}.nc-select.v-select.select .vs__actions{position:absolute;z-index:999;inset-inline-end:0;top:50%;transform:translateY(-50%);height:100%;margin-block-start:1px;display:flex;align-items:center}.nc-select.v-select.select .vs__clear{margin-inline-end:2px}.nc-select.v-select.select.vs--open .vs__search .input-field__input{border-end-start-radius:0!important;border-end-end-radius:0!important}.nc-select.v-select.select.vs--disabled .vs__clear,.nc-select.v-select.select.vs--disabled .vs__dropdown-toggle,.nc-select.v-select.select.vs--disabled .vs__open-indicator,.nc-select.v-select.select.vs--disabled .vs__open-indicator-button,.nc-select.v-select.select.vs--disabled .vs__search,.nc-select.v-select.select.vs--disabled .vs__selected{background-color:transparent;color:var(--color-text-maxcontrast)}.nc-select.v-select.select.vs--disabled .vs__dropdown-toggle{--input-border-box-shadow-light: 0 -1px var(--color-border-dark), 0 0 0 1px color-mix(in srgb, var(--color-border-dark), 65% transparent);--input-border-box-shadow-dark: 0 1px var(--color-border-dark), 0 0 0 1px color-mix(in srgb, var(--color-border-dark), 65% transparent)}.nc-select.v-select.select.vs--disabled .vs__clear,.nc-select.v-select.select.vs--disabled .vs__deselect{display:none}.nc-select.v-select.select--no-wrap .vs__dropdown-toggle{overflow:hidden}.nc-select.v-select.select--no-wrap .vs__selected-options{flex-wrap:nowrap;overflow:auto!important;min-width:unset}.nc-select.v-select.select--no-wrap .vs__selected-options .vs__selected{min-width:unset}.nc-select.v-select.select--drop-up.vs--open .vs__search .input-field__input{border-end-start-radius:var(--border-radius-element)!important;border-end-end-radius:var(--border-radius-element)!important}.nc-select.v-select.select--drop-up.vs--open.vs--multiple .vs__dropdown-toggle{border-end-start-radius:var(--border-radius-element)!important;border-end-end-radius:var(--border-radius-element)!important;border-block-end-color:var(--color-main-text)!important}.nc-select.v-select.select .vs__selected-options{min-height:unset}.nc-select.v-select.select .vs__selected-options .vs__selected~.vs__search:has(.input-field__input[readonly]){position:absolute}.nc-select.v-select.select .vs__selected-options{padding:0;border:none;overflow:visible}.nc-select.v-select.select.vs--multiple{margin-inline:1px}.nc-select.v-select.select.vs--multiple .vs__dropdown-toggle{border:var(--border-width-input-focused, 2px) solid transparent;box-shadow:var(--input-border-box-shadow);padding-block:calc(var(--default-grid-baseline) * 1.5) 0;padding-inline:var(--default-grid-baseline) calc(var(--default-clickable-area) + var(--default-grid-baseline));overflow:visible;background:var(--color-main-background)}.nc-select.v-select.select.vs--multiple:has(.vs__clear) .vs__dropdown-toggle{padding-inline-end:calc(2 * var(--default-clickable-area))}.nc-select.v-select.select.vs--multiple.vs--open .vs__dropdown-toggle{box-shadow:none!important;border-color:var(--color-main-text);border-block-end-color:var(--color-border-maxcontrast);border-end-start-radius:0;border-end-end-radius:0;outline:2px solid var(--color-main-background)}.nc-select.v-select.select.vs--multiple .vs__search .input-field__input{box-shadow:none!important;background:transparent}.nc-select.v-select.select.vs--multiple .vs__search{width:0;flex-grow:1;min-width:0}.nc-select.v-select.select.vs--multiple.select--no-wrap .vs__dropdown-toggle{overflow:hidden}.nc-select.v-select.select.vs--multiple.select--no-wrap .vs__actions{background:linear-gradient(90deg,transparent,var(--color-main-background) 10%,var(--color-main-background) 100%);margin-block:0px;margin-inline-end:2px;border-radius:var(--border-radius-element);height:calc(100% - 6px)}.nc-select.v-select.select.vs--multiple .vs__search .input-field{margin-block-start:0}.nc-select.v-select.select.vs--multiple .vs__search .input-field__main-wrapper{height:calc(var(--default-clickable-area) - 2 * var(--vs-border-width) - var(--default-grid-baseline));margin:calc(var(--default-grid-baseline) / 2) 0}.nc-select.v-select.select.vs--multiple .select__label{position:absolute;z-index:1;inset-inline-start:var(--border-width-input-focused, 2px);top:50%;transform:translateY(-50%);font-size:var(--default-font-size);margin-inline:var(--border-radius-element);color:var(--color-text-maxcontrast);pointer-events:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - var(--clickable-area-large));transition:top var(--animation-quick),transform var(--animation-quick),font-size var(--animation-quick),font-weight var(--animation-quick),background-color var(--animation-quick) var(--animation-slow)}.nc-select.v-select.select.vs--multiple:has(.vs__selected) .select__label,.nc-select.v-select.select.vs--multiple.vs--open .select__label{--input-label-font-size: var(--font-size-small, 13px);font-size:var(--input-label-font-size);line-height:1.5;top:calc(-1.5 * var(--input-label-font-size) / 2);transform:none;font-weight:500;border-radius:var(--default-grid-baseline) var(--default-grid-baseline) 0 0;background-color:var(--color-main-background);padding-inline:var(--default-grid-baseline);margin-inline:calc(var(--border-radius-element) - var(--default-grid-baseline));transition:top var(--animation-quick),transform var(--animation-quick),font-size var(--animation-quick),font-weight var(--animation-quick),background-color var(--animation-quick)}.nc-select.v-select.select.vs--single .vs__selected-options{position:relative;flex-wrap:nowrap;min-height:var(--default-clickable-area)}.nc-select.v-select.select.vs--single .vs__selected{position:absolute;inset-block:6px 0;inset-inline-start:0;inset-inline-end:0;margin:0;z-index:2;pointer-events:none;display:flex;align-items:center;padding-block:0;padding-inline:calc(var(--border-radius-element) + var(--border-width-input-focused, 2px)) var(--input-padding-end, calc(var(--default-clickable-area) + var(--default-grid-baseline)));background:unset!important;border:none;border-radius:0;height:unset;min-height:unset;font-size:var(--default-font-size);color:var(--color-main-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nc-select.v-select.select.vs--single:has(.input-field--label-outside) .vs__selected{inset-block-start:0}.nc-select.v-select.select.vs--single:has(.vs__clear) .vs__selected{padding-inline-end:calc(2 * var(--default-clickable-area))}.nc-select.v-select.select.vs--single.vs--loading .vs__selected,.nc-select.v-select.select.vs--single.vs--open .vs__selected{color:var(--color-text-maxcontrast)}.nc-select.v-select.select.vs--single.vs--searching .vs__selected{display:none}.nc-select__dropdown.vs__dropdown-menu{border-width:var(--border-width-input-focused)!important;border-color:var(--color-main-text)!important;outline:none!important;box-shadow:-2px 0 0 var(--color-main-background),0 2px 0 var(--color-main-background),2px 0 0 var(--color-main-background),!important;padding:4px!important}.nc-select__dropdown.vs__dropdown-menu--floating{width:max-content;position:absolute;top:0;inset-inline-start:0}.nc-select__dropdown.vs__dropdown-menu--floating-placement-top{border-radius:var(--vs-border-radius)!important;border-top-style:var(--vs-border-style)!important;box-shadow:0 -2px 0 var(--color-main-background),-2px 0 0 var(--color-main-background),0 2px 0 var(--color-main-background),2px 0 0 var(--color-main-background),!important}.nc-select__dropdown.vs__dropdown-menu .vs__dropdown-option{border-radius:6px!important}.nc-select__dropdown.vs__dropdown-menu .vs__no-options{color:var(--color-text-maxcontrast)!important}.nc-select.v-select.select .vs__dropdown-toggle{--input-border-box-shadow-light: 0 -1px var(--vs-border-color), 0 0 0 1px color-mix(in srgb, var(--vs-border-color), 65% transparent);--input-border-box-shadow-dark: 0 -1px var(--vs-border-color), 0 0 0 1px color-mix(in srgb, var(--vs-border-color), 65% transparent);--input-border-box-shadow: var(--input-border-box-shadow-light);border:none;border-radius:var(--border-radius-element);box-shadow:var(--input-border-box-shadow)}.nc-select.v-select.select:not(.vs--disabled) .vs__dropdown-toggle:hover{box-shadow:0 0 0 1px var(--vs-border-color)}@media(prefers-color-scheme:dark){.nc-select.v-select.select .vs__dropdown-toggle{--input-border-box-shadow: var(--input-border-box-shadow-dark)}}[data-theme-dark] .nc-select.v-select.select .vs__dropdown-toggle{--input-border-box-shadow: var(--input-border-box-shadow-dark)}[data-theme-light] .nc-select.v-select.select .vs__dropdown-toggle{--input-border-box-shadow: var(--input-border-box-shadow-light)}.select--legacy.nc-select.v-select.select .vs__dropdown-toggle{box-shadow:0 0 0 1px var(--vs-border-color)}.select--legacy.nc-select.v-select.select .vs__dropdown-toggle:hover:not([disabled]){box-shadow:0 0 0 2px var(--vs-border-color)}:root{--vs-colors--lightest:rgba(60,60,60,.26);--vs-colors--light:rgba(60,60,60,.5);--vs-colors--dark:#333;--vs-colors--darkest:rgba(0,0,0,.15);--vs-search-input-color:inherit;--vs-search-input-bg:#fff;--vs-search-input-placeholder-color:inherit;--vs-font-size:1rem;--vs-line-height:1.4;--vs-state-disabled-bg:#f8f8f8;--vs-state-disabled-color:var(--vs-colors--light);--vs-state-disabled-controls-color:var(--vs-colors--light);--vs-state-disabled-cursor:not-allowed;--vs-border-color:var(--vs-colors--lightest);--vs-border-width:1px;--vs-border-style:solid;--vs-border-radius:4px;--vs-actions-padding:4px 6px 0 3px;--vs-controls-color:var(--vs-colors--light);--vs-controls-size:1;--vs-controls--deselect-text-shadow:0 1px 0 #fff;--vs-selected-bg:#f0f0f0;--vs-selected-color:var(--vs-colors--dark);--vs-selected-border-color:var(--vs-border-color);--vs-selected-border-style:var(--vs-border-style);--vs-selected-border-width:var(--vs-border-width);--vs-dropdown-bg:#fff;--vs-dropdown-color:inherit;--vs-dropdown-z-index:1000;--vs-dropdown-min-width:160px;--vs-dropdown-max-height:350px;--vs-dropdown-box-shadow:0px 3px 6px 0px var(--vs-colors--darkest);--vs-dropdown-option-bg:#000;--vs-dropdown-option-color:var(--vs-dropdown-color);--vs-dropdown-option-padding:3px 20px;--vs-dropdown-option--active-bg:#136cfb;--vs-dropdown-option--active-color:#fff;--vs-dropdown-option--kb-focus-box-shadow:inset 0px 0px 0px 2px #949494;--vs-dropdown-option--deselect-bg:#fb5858;--vs-dropdown-option--deselect-color:#fff;--vs-transition-timing-function:cubic-bezier(1,-.115,.975,.855);--vs-transition-duration:.15s}.v-select{font-family:inherit;position:relative}.v-select,.v-select *{box-sizing:border-box}:root{--vs-transition-timing-function:cubic-bezier(1,.5,.8,1);--vs-transition-duration:.15s}@keyframes vSelectSpinner{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.vs__fade-enter-active,.vs__fade-leave-active{pointer-events:none;transition:opacity var(--vs-transition-duration) var(--vs-transition-timing-function)}.vs__fade-enter,.vs__fade-leave-to{opacity:0}:root{--vs-disabled-bg:var(--vs-state-disabled-bg);--vs-disabled-color:var(--vs-state-disabled-color);--vs-disabled-cursor:var(--vs-state-disabled-cursor)}.vs--disabled{.vs__clear,.vs__dropdown-toggle,.vs__open-indicator,.vs__open-indicator-button,.vs__search,.vs__selected{background-color:var(--vs-disabled-bg);cursor:var(--vs-disabled-cursor)}}.v-select[dir=rtl]{.vs__actions{padding:0 3px 0 6px}.vs__clear{margin-left:6px;margin-right:0}.vs__deselect{margin-left:0;margin-right:2px}.vs__dropdown-menu{text-align:right}}.vs__dropdown-toggle{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--vs-search-input-bg);border:var(--vs-border-width) var(--vs-border-style) var(--vs-border-color);border-radius:var(--vs-border-radius);display:flex;padding:0 0 4px;white-space:normal}.vs__selected-options{display:flex;flex-basis:100%;flex-grow:1;flex-wrap:wrap;min-width:0;padding:0 2px;position:relative}.vs__actions{align-items:center;display:flex;padding:var(--vs-actions-padding)}.vs--searchable .vs__dropdown-toggle{cursor:text}.vs--unsearchable .vs__dropdown-toggle{cursor:pointer}.vs--open .vs__dropdown-toggle{border-bottom-color:transparent;border-bottom-left-radius:0;border-bottom-right-radius:0}.vs__open-indicator-button{background-color:transparent;border:0;cursor:pointer;padding:0}.vs__open-indicator{fill:var(--vs-controls-color);transform:scale(var(--vs-controls-size));transition:transform var(--vs-transition-duration) var(--vs-transition-timing-function);transition-timing-function:var(--vs-transition-timing-function)}.vs--open .vs__open-indicator{transform:rotate(180deg) scale(var(--vs-controls-size))}.vs--loading .vs__open-indicator{opacity:0}.vs__clear{background-color:transparent;border:0;cursor:pointer;fill:var(--vs-controls-color);margin-right:8px;padding:0}.vs__dropdown-menu{background:var(--vs-dropdown-bg);border:var(--vs-border-width) var(--vs-border-style) var(--vs-border-color);border-radius:0 0 var(--vs-border-radius) var(--vs-border-radius);border-top-style:none;box-shadow:var(--vs-dropdown-box-shadow);box-sizing:border-box;color:var(--vs-dropdown-color);display:block;left:0;list-style:none;margin:0;max-height:var(--vs-dropdown-max-height);min-width:var(--vs-dropdown-min-width);overflow-y:auto;padding:5px 0;position:absolute;text-align:left;top:calc(100% - var(--vs-border-width));width:100%;z-index:var(--vs-dropdown-z-index)}.vs__no-options{text-align:center}.vs__dropdown-option{clear:both;color:var(--vs-dropdown-option-color);cursor:pointer;display:block;line-height:1.42857143;padding:var(--vs-dropdown-option-padding);white-space:nowrap}.vs__dropdown-option--highlight{background:var(--vs-dropdown-option--active-bg);color:var(--vs-dropdown-option--active-color)}.vs__dropdown-option--kb-focus{box-shadow:var(--vs-dropdown-option--kb-focus-box-shadow)}.vs__dropdown-option--deselect{background:var(--vs-dropdown-option--deselect-bg);color:var(--vs-dropdown-option--deselect-color)}.vs__dropdown-option--disabled{background:var(--vs-state-disabled-bg);color:var(--vs-state-disabled-color);cursor:var(--vs-state-disabled-cursor)}.vs__selected{align-items:center;background-color:var(--vs-selected-bg);border:var(--vs-selected-border-width) var(--vs-selected-border-style) var(--vs-selected-border-color);border-radius:var(--vs-border-radius);color:var(--vs-selected-color);display:flex;line-height:var(--vs-line-height);margin:4px 2px 0;min-width:0;padding:0 .25em;z-index:0}.vs__deselect{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;cursor:pointer;display:inline-flex;fill:var(--vs-controls-color);margin-left:4px;padding:0;text-shadow:var(--vs-controls--deselect-text-shadow)}.vs--single{.vs__selected{background-color:transparent;border-color:transparent}&.vs--loading .vs__selected,&.vs--open .vs__selected{max-width:100%;opacity:.4;position:absolute}&.vs--searching .vs__selected{display:none}}.vs__search::-webkit-search-cancel-button{display:none}.vs__search::-ms-clear,.vs__search::-webkit-search-decoration,.vs__search::-webkit-search-results-button,.vs__search::-webkit-search-results-decoration{display:none}.vs__search,.vs__search:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:1px solid transparent;border-left:none;box-shadow:none;color:var(--vs-search-input-color);flex-grow:1;font-size:var(--vs-font-size);line-height:var(--vs-line-height);margin:4px 0 0;max-width:100%;outline:none;padding:0 7px;width:0;z-index:1}.vs__search::-moz-placeholder{color:var(--vs-search-input-placeholder-color)}.vs__search::placeholder{color:var(--vs-search-input-placeholder-color)}.vs--unsearchable{.vs__search{opacity:1}&:not(.vs--disabled) .vs__search{cursor:pointer}}.vs--single.vs--searching:not(.vs--open):not(.vs--loading){.vs__search{opacity:.2}}.vs__spinner{align-self:center;animation:vSelectSpinner 1.1s linear infinite;border:.9em solid hsla(0,0%,39.2%,.1);border-left-color:#3c3c3c73;font-size:5px;opacity:0;overflow:hidden;text-indent:-9999em;transform:translateZ(0) scale(var(--vs-controls--spinner-size,var(--vs-controls-size)));transition:opacity .1s}.vs__spinner,.vs__spinner:after{border-radius:50%;height:5em;transform:scale(var(--vs-controls--spinner-size,var(--vs-controls-size)));width:5em}.vs--loading .vs__spinner{opacity:1}.material-design-icon[data-v-c843f2cd]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.name-parts[data-v-c843f2cd]{display:flex;max-width:100%;min-width:0;cursor:inherit}.name-parts__first[data-v-c843f2cd]{overflow:hidden;text-overflow:ellipsis;white-space:pre}.name-parts__last[data-v-c843f2cd]{flex:0 0 auto;white-space:pre}.name-parts__first[data-v-c843f2cd],.name-parts__last[data-v-c843f2cd]{cursor:inherit}.name-parts__first strong[data-v-c843f2cd],.name-parts__last strong[data-v-c843f2cd]{font-weight:700} diff --git a/css/index-DBPTxogX.chunk.css b/css/index-DBPTxogX.chunk.css new file mode 100644 index 00000000..7ca338ac --- /dev/null +++ b/css/index-DBPTxogX.chunk.css @@ -0,0 +1 @@ +.material-design-icon[data-v-23910d95]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.vue-date-time-picker__wrapper[data-v-23910d95]{--dp-common-transition: all var(--animation-quick) ease-in;--dp-menu-padding: 6px 8px;--dp-animation-duration: var(--animation-quick);--dp-menu-appear-transition-timing: cubic-bezier(.4, 0, 1, 1);--dp-transition-timing: ease-out;--dp-action-row-transtion: all .2s ease-in;--dp-font-family: var(--font-face);--dp-border-radius: var(--border-radius-element);--dp-cell-border-radius: var(--border-radius-small);--dp-transition-length: 22px;--dp-transition-timing-general: var(--animation-quick);--dp-button-height: var(--default-clickable-area);--dp-month-year-row-height: var(--default-clickable-area);--dp-month-year-row-button-size: var(--clickable-area-small);--dp-button-icon-height: 20px;--dp-calendar-wrap-padding: 0 5px;--dp-cell-size: var(--default-clickable-area);--dp-cell-padding: 5px;--dp-common-padding: 10px;--dp-input-icon-padding: var(--default-clickable-area);--dp-input-padding: 6px 12px;--dp-menu-min-width: 260px;--dp-action-buttons-padding: 1px 6px;--dp-row-margin: 5px 0;--dp-calendar-header-cell-padding: .5rem;--dp-multi-calendars-spacing: 10px;--dp-overlay-col-padding: 3px;--dp-time-inc-dec-button-size: var(--default-clickable-area);--dp-font-size: 1rem;--dp-preview-font-size: var(--font-size-small);--dp-time-font-size: 2rem;--dp-action-button-height: var(--clickable-area-small);--dp-action-row-padding: 8px;--dp-direction: ltr}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__input_wrap{position:relative;width:100%;box-sizing:unset}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__input_wrap:focus{border-color:var(--dp-border-color-hover);outline:none}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__input_valid{box-shadow:0 0 var(--dp-border-radius) var(--dp-success-color);border-color:var(--dp-success-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__input_valid:hover{border-color:var(--dp-success-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__input_invalid{box-shadow:0 0 var(--dp-border-radius) var(--dp-danger-color);border-color:var(--dp-danger-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__input_invalid:hover{border-color:var(--dp-danger-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__input{background-color:var(--dp-background-color);border-radius:var(--dp-border-radius);font-family:var(--dp-font-family);border:1px solid var(--dp-border-color);outline:none;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%;font-size:var(--dp-font-size);line-height:calc(var(--dp-font-size) * 1.5);padding:var(--dp-input-padding);color:var(--dp-text-color);box-sizing:border-box}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__input::placeholder{opacity:.7}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__input:hover:not(.dp__input_focus){border-color:var(--dp-border-color-hover)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__input_not_clearable{padding-inline-end:var(--dp-input-not-clearable-padding)!important}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__input_reg{caret-color:#0000}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__input_focus{border-color:var(--dp-border-color-focus)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__disabled{background:var(--dp-disabled-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__disabled::placeholder{color:var(--dp-disabled-color-text)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__input_icons{display:inline-block;width:var(--dp-font-size);height:var(--dp-font-size);stroke-width:0;font-size:var(--dp-font-size);line-height:calc(var(--dp-font-size) * 1.5);padding:6px 12px;color:var(--dp-icon-color);box-sizing:content-box}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__input_icon{cursor:pointer;position:absolute;top:50%;inset-inline-start:0;transform:translateY(-50%);color:var(--dp-icon-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--clear-btn{position:absolute;top:50%;inset-inline-end:0;transform:translateY(-50%);cursor:pointer;color:var(--dp-icon-color);background:#0000;border:none;display:inline-flex;align-items:center;padding:0;margin:0}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__input_icon_pad{padding-inline-start:var(--dp-input-icon-padding)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__menu{background:var(--dp-background-color);border-radius:var(--dp-border-radius);min-width:var(--dp-menu-min-width);font-family:var(--dp-font-family);font-size:var(--dp-font-size);-webkit-user-select:none;user-select:none;border:1px solid var(--dp-menu-border-color);box-sizing:border-box}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__menu:after{box-sizing:border-box}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__menu:before{box-sizing:border-box}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__menu:focus{border:1px solid var(--dp-menu-border-color);outline:none}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--menu-wrapper{position:absolute;z-index:99999}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__menu_inner{padding:var(--dp-menu-padding)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--menu--inner-stretched{padding:6px 0}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__menu_index{z-index:99999}.vue-date-time-picker__wrapper[data-v-23910d95] .dp-menu-loading,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__menu_readonly,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__menu_disabled{position:absolute;inset:0;z-index:999999}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__menu_disabled{background:#ffffff80;cursor:not-allowed}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__menu_readonly{background:#0000;cursor:default}.vue-date-time-picker__wrapper[data-v-23910d95] .dp-menu-loading{background:#ffffff80;cursor:default}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--menu-load-container{display:flex;height:100%;width:100%;justify-content:center;align-items:center}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--menu-loader{width:48px;height:48px;border:var(--dp-loader);border-bottom-color:#0000;border-radius:50%;display:inline-block;box-sizing:border-box;animation:dp-load-rotation-23910d95 1s linear infinite;position:absolute}@keyframes dp-load-rotation-23910d95{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__arrow_top{left:var(--dp-arrow-left);top:0;height:12px;width:12px;background-color:var(--dp-background-color);position:absolute;border-inline-end:1px solid var(--dp-menu-border-color);border-top:1px solid var(--dp-menu-border-color);transform:translate(-50%,-50%) rotate(-45deg)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__arrow_bottom{left:var(--dp-arrow-left);bottom:0;height:12px;width:12px;background-color:var(--dp-background-color);position:absolute;border-inline-end:1px solid var(--dp-menu-border-color);border-bottom:1px solid var(--dp-menu-border-color);transform:translate(-50%,50%) rotate(45deg)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__action_extra{text-align:center;padding:2px 0}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--preset-dates{padding:5px;border-inline-end:1px solid var(--dp-border-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--preset-dates[data-dp-mobile],.vue-date-time-picker__wrapper[data-v-23910d95] .dp--preset-dates-collapsed{display:flex;align-self:center;border:none;overflow-x:auto;max-width:calc(var(--dp-menu-width) - var(--dp-action-row-padding) * 2)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__sidebar_left{padding:5px;border-inline-end:1px solid var(--dp-border-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__sidebar_right{padding:5px;margin-inline-end:1px solid var(--dp-border-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--preset-range{display:block;width:100%;padding:5px;text-align:left;white-space:nowrap;color:var(--dp-text-color);border-radius:var(--dp-border-radius);transition:var(--dp-common-transition)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--preset-range:hover{background-color:var(--dp-hover-color);color:var(--dp-hover-text-color);cursor:pointer}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--preset-range[data-dp-mobile]{border:1px solid var(--dp-border-color);margin:0 3px}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--preset-range[data-dp-mobile]:first-child{margin-left:0}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--preset-range[data-dp-mobile]:last-child{margin-right:0}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--preset-range-collapsed{border:1px solid var(--dp-border-color);margin:0 3px}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--preset-range-collapsed:first-child{margin-left:0}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--preset-range-collapsed:last-child{margin-right:0}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__menu_content_wrapper{display:flex}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__menu_content_wrapper[data-dp-mobile],.vue-date-time-picker__wrapper[data-v-23910d95] .dp--menu-content-wrapper-collapsed{flex-direction:column-reverse}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__calendar_header{position:relative;display:flex;justify-content:center;align-items:center;color:var(--dp-text-color);white-space:nowrap;font-weight:700}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__calendar_header_item{text-align:center;flex-grow:1;height:var(--dp-cell-size);padding:var(--dp-cell-padding);width:var(--dp-cell-size);box-sizing:border-box}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__calendar_row{display:flex;justify-content:center;align-items:center;margin:var(--dp-row-margin)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__calendar_item{text-align:center;flex-grow:1;box-sizing:border-box;color:var(--dp-text-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__calendar{position:relative}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__calendar_header_cell{border-bottom:thin solid var(--dp-border-color);padding:var(--dp-calendar-header-cell-padding)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__cell_inner{display:flex;align-items:center;text-align:center;justify-content:center;border-radius:var(--dp-cell-border-radius);height:var(--dp-cell-size);padding:var(--dp-cell-padding);width:var(--dp-cell-size);border:1px solid rgba(0,0,0,0);box-sizing:border-box;position:relative}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__cell_inner:hover{transition:all .2s}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__cell_auto_range_start,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__date_hover_start:hover,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__range_start{border-end-end-radius:0;border-start-end-radius:0}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__cell_auto_range_end,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__date_hover_end:hover,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__range_end{border-end-start-radius:0;border-start-start-radius:0}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__range_end,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__range_start,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__active_date{background:var(--dp-primary-color);color:var(--dp-primary-text-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__date_hover_end:hover,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__date_hover_start:hover,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__date_hover:hover{background:var(--dp-hover-color);color:var(--dp-hover-text-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__cell_offset{color:var(--dp-secondary-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__cell_disabled{color:var(--dp-secondary-color);cursor:not-allowed}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__range_between{background:var(--dp-range-between-dates-background-color);color:var(--dp-range-between-dates-text-color);border-radius:0;border:1px solid var(--dp-range-between-border-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__range_between_week{background:var(--dp-primary-color);color:var(--dp-primary-text-color);border-radius:0;border-top:1px solid var(--dp-primary-color);border-bottom:1px solid var(--dp-primary-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__today{border:1px solid var(--dp-primary-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__week_num{color:var(--dp-secondary-color);text-align:center}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__cell_auto_range{border-radius:0;border-top:1px dashed var(--dp-primary-color);border-bottom:1px dashed var(--dp-primary-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__cell_auto_range_start{border-start-start-radius:var(--dp-cell-border-radius);border-end-start-radius:var(--dp-cell-border-radius);border-inline-start:1px dashed var(--dp-primary-color);border-top:1px dashed var(--dp-primary-color);border-bottom:1px dashed var(--dp-primary-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__cell_auto_range_end{border-start-end-radius:var(--dp-cell-border-radius);border-end-end-radius:var(--dp-cell-border-radius);border-top:1px dashed var(--dp-primary-color);border-bottom:1px dashed var(--dp-primary-color);border-inline-end:1px dashed var(--dp-primary-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__calendar_header_separator{width:100%;height:1px;background:var(--dp-border-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__calendar_next{margin-inline-start:var(--dp-multi-calendars-spacing)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__marker_line,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__marker_dot{height:5px;background-color:var(--dp-marker-color);position:absolute;bottom:0}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__marker_dot{width:5px;border-radius:50%;left:50%;transform:translate(-50%)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__marker_line{width:100%;left:0}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__marker_tooltip{position:absolute;border-radius:var(--dp-border-radius);background-color:var(--dp-tooltip-color);padding:5px;border:1px solid var(--dp-border-color);z-index:99999;box-sizing:border-box;cursor:default}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__tooltip_content{white-space:nowrap}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__tooltip_text{display:flex;align-items:center;flex-flow:row nowrap;color:var(--dp-text-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__tooltip_mark{height:5px;width:5px;border-radius:50%;background-color:var(--dp-text-color);color:var(--dp-text-color);margin-inline-end:5px}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__arrow_bottom_tp{bottom:0;height:8px;width:8px;background-color:var(--dp-tooltip-color);position:absolute;border-inline-end:1px solid var(--dp-border-color);border-bottom:1px solid var(--dp-border-color);transform:translate(-50%,50%) rotate(45deg)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__instance_calendar{position:relative;width:100%}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__flex_display[data-dp-mobile],.vue-date-time-picker__wrapper[data-v-23910d95] .dp--flex-display-collapsed{flex-direction:column}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__cell_highlight{background-color:var(--dp-highlight-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__month_year_row{display:flex;align-items:center;height:var(--dp-month-year-row-height);color:var(--dp-text-color);box-sizing:border-box}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__inner_nav{display:flex;align-items:center;justify-content:center;cursor:pointer;height:var(--dp-month-year-row-button-size);width:var(--dp-month-year-row-button-size);color:var(--dp-icon-color);text-align:center;border-radius:50%}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__inner_nav svg{height:var(--dp-button-icon-height);width:var(--dp-button-icon-height)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__inner_nav:hover{background:var(--dp-hover-color);color:var(--dp-hover-icon-color)}.vue-date-time-picker__wrapper[data-v-23910d95] [dir=rtl] .dp__inner_nav{transform:rotate(180deg)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__inner_nav_disabled:hover,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__inner_nav_disabled{background:var(--dp-disabled-color);color:var(--dp-disabled-color-text);cursor:not-allowed}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--year-select,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__month_year_select{text-align:center;cursor:pointer;height:var(--dp-month-year-row-height);display:flex;align-items:center;justify-content:center;border-radius:var(--dp-border-radius);box-sizing:border-box;color:var(--dp-text-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--year-select:hover,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__month_year_select:hover{background:var(--dp-hover-color);color:var(--dp-hover-text-color);transition:var(--dp-common-transition)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__month_year_select{width:50%}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--year-select{width:100%}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__month_year_wrap{display:flex;flex-direction:row;width:100%}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__year_disable_select{justify-content:space-around}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--header-wrap{display:flex;width:100%;flex-direction:column}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay{width:100%;background:var(--dp-background-color);transition:opacity 1s ease-out;z-index:99999;font-family:var(--dp-font-family);color:var(--dp-text-color);box-sizing:border-box}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--overlay-absolute{position:absolute;height:100%;top:0;left:0}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--overlay-relative{position:relative}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay_container::-webkit-scrollbar-track{box-shadow:var(--dp-scroll-bar-background);background-color:var(--dp-scroll-bar-background)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay_container::-webkit-scrollbar{width:5px;background-color:var(--dp-scroll-bar-background)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay_container::-webkit-scrollbar-thumb{background-color:var(--dp-scroll-bar-color);border-radius:10px}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay:focus{border:none;outline:none}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__container_flex{display:flex}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__container_block{display:block}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay_container{flex-direction:column;overflow-y:auto;height:var(--dp-overlay-height)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_picker_overlay_container{height:100%}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay_row{padding:0;box-sizing:border-box;display:flex;margin-inline:auto;flex-wrap:wrap;max-width:100%;width:100%;align-items:center}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__flex_row{flex:1}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay_col{box-sizing:border-box;width:33%;padding:var(--dp-overlay-col-padding);white-space:nowrap}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay_cell_pad{padding:var(--dp-common-padding) 0}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay_cell_active{cursor:pointer;border-radius:var(--dp-border-radius);text-align:center;background:var(--dp-primary-color);color:var(--dp-primary-text-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay_cell{cursor:pointer;border-radius:var(--dp-border-radius);text-align:center}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay_cell:hover{background:var(--dp-hover-color);color:var(--dp-hover-text-color);transition:var(--dp-common-transition)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__cell_in_between{background:var(--dp-hover-color);color:var(--dp-hover-text-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__over_action_scroll{right:5px;box-sizing:border-box}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay_cell_disabled{cursor:not-allowed;background:var(--dp-disabled-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay_cell_disabled:hover{background:var(--dp-disabled-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay_cell_active_disabled{cursor:not-allowed;background:var(--dp-primary-disabled-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay_cell_active_disabled:hover{background:var(--dp-primary-disabled-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__btn,.vue-date-time-picker__wrapper[data-v-23910d95] .dp--qr-btn,.vue-date-time-picker__wrapper[data-v-23910d95] .dp--time-overlay-btn,.vue-date-time-picker__wrapper[data-v-23910d95] .dp--time-invalid{border:none;font:inherit;transition:var(--dp-common-transition);line-height:normal}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--year-mode-picker{display:flex;width:100%;align-items:center;justify-content:space-between;height:var(--dp-cell-size)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--tp-wrap{max-width:var(--dp-menu-min-width)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--tp-wrap[data-dp-mobile]{max-width:100%}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_input{width:100%;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;font-family:var(--dp-font-family);color:var(--dp-text-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_col_reg_block{padding:0 20px}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_col_reg_inline{padding:0 10px}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_col_reg_with_button{padding:0 15px}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_col_reg_with_button[data-compact~=true]{padding:0 5px}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_col_sec{padding:0 10px}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_col_sec_with_button{padding:0 5px}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_col_sec_with_button[data-collapsed~=true]{padding:0}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_col{text-align:center;display:flex;align-items:center;justify-content:center;flex-direction:column}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_col_block{font-size:var(--dp-time-font-size)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_display_block{padding:0 3px}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_display_inline{padding:5px}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_picker_inline_container{display:flex;width:100%;justify-content:center}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__inc_dec_button{padding:5px;margin:0;height:var(--dp-time-inc-dec-button-size);width:var(--dp-time-inc-dec-button-size);display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:50%;color:var(--dp-icon-color);box-sizing:border-box}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__inc_dec_button svg{height:var(--dp-time-inc-dec-button-size);width:var(--dp-time-inc-dec-button-size)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__inc_dec_button:hover{background:var(--dp-hover-color);color:var(--dp-hover-icon-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_display{cursor:pointer;color:var(--dp-text-color);border-radius:var(--dp-border-radius);display:flex;align-items:center;justify-content:center}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_display:hover:enabled{background:var(--dp-hover-color);color:var(--dp-hover-text-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__inc_dec_button_inline{width:100%;padding:0;height:8px;cursor:pointer;display:flex;align-items:center}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__inc_dec_button_disabled,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__inc_dec_button_disabled:hover{background:var(--dp-disabled-color);color:var(--dp-disabled-color-text);cursor:not-allowed}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__pm_am_button{background:var(--dp-primary-color);color:var(--dp-primary-text-color);border:none;padding:var(--dp-common-padding);border-radius:var(--dp-border-radius);cursor:pointer}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__pm_am_button[data-compact~=true]{padding:7px}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__tp_inline_btn_bar{width:100%;height:4px;background-color:var(--dp-secondary-color);transition:var(--dp-common-transition);border-collapse:collapse}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__tp_inline_btn_top:hover .dp__tp_btn_in_r{background-color:var(--dp-primary-color);transform:rotate(12deg) scale(1.15) translateY(-2px)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__tp_inline_btn_top:hover .dp__tp_btn_in_l,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__tp_inline_btn_bottom:hover .dp__tp_btn_in_r{background-color:var(--dp-primary-color);transform:rotate(-12deg) scale(1.15) translateY(-2px)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__tp_inline_btn_bottom:hover .dp__tp_btn_in_l{background-color:var(--dp-primary-color);transform:rotate(12deg) scale(1.15) translateY(-2px)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--time-overlay-btn{background:none}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--time-invalid{background-color:var(--dp-disabled-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__action_row{display:flex;align-items:center;width:100%;padding:var(--dp-action-row-padding);box-sizing:border-box;color:var(--dp-text-color);flex-flow:row nowrap}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__action_row svg{height:var(--dp-button-icon-height);width:auto}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__selection_preview{display:block;color:var(--dp-text-color);font-size:var(--dp-preview-font-size);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__action_buttons{display:flex;flex:0;white-space:nowrap;align-items:center;justify-content:flex-end;margin-inline-start:auto}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__action_button{display:inline-flex;align-items:center;background:#0000;border:1px solid rgba(0,0,0,0);padding:var(--dp-action-buttons-padding);line-height:var(--dp-action-button-height);margin-inline-start:3px;height:var(--dp-action-button-height);cursor:pointer;border-radius:var(--dp-border-radius);font-size:var(--dp-preview-font-size);font-family:var(--dp-font-family)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__action_cancel{color:var(--dp-text-color);border:1px solid var(--dp-border-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__action_cancel:hover{border-color:var(--dp-primary-color);transition:var(--dp-action-row-transition)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__action_buttons .dp__action_select{background:var(--dp-primary-color);color:var(--dp-primary-text-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__action_buttons .dp__action_select:hover{background:var(--dp-primary-color);transition:var(--dp-action-row-transition)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__action_buttons .dp__action_select:disabled{background:var(--dp-primary-disabled-color);cursor:not-allowed}.vue-date-time-picker__wrapper[data-v-23910d95] .dp-quarter-picker-wrap{display:flex;flex-direction:column;height:100%;min-width:var(--dp-menu-min-width)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--qr-btn-disabled{cursor:not-allowed;background:var(--dp-disabled-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--qr-btn-disabled:hover{background:var(--dp-disabled-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--qr-btn{width:100%;padding:var(--dp-common-padding)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--qr-btn:not(.dp--highlighted,.dp--qr-btn-active,.dp--qr-btn-disabled,.dp--qr-btn-between){background:none}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--qr-btn:hover:not(.dp--qr-btn-active,.dp--qr-btn-disabled){background:var(--dp-hover-color);color:var(--dp-hover-text-color);transition:var(--dp-common-transition)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--quarter-items{display:flex;flex-direction:column;flex:1;width:100%;height:100%;justify-content:space-evenly}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--qr-btn-active{background:var(--dp-primary-color);color:var(--dp-primary-text-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--qr-btn-between{background:var(--dp-hover-color);color:var(--dp-hover-text-color)}.vue-date-time-picker__wrapper[data-v-23910d95] :root{--dp-common-transition: all .1s ease-in;--dp-menu-padding: 6px 8px;--dp-animation-duration: .1s;--dp-menu-appear-transition-timing: cubic-bezier(.4, 0, 1, 1);--dp-transition-timing: ease-out;--dp-action-row-transition: all .2s ease-in;--dp-font-family: -apple-system, blinkmacsystemfont, "Segoe UI", roboto, oxygen, ubuntu, cantarell, "Open Sans", "Helvetica Neue", sans-serif;--dp-border-radius: 4px;--dp-cell-border-radius: 4px;--dp-transition-length: 22px;--dp-transition-timing-general: .1s;--dp-button-height: 35px;--dp-month-year-row-height: 35px;--dp-month-year-row-button-size: 25px;--dp-button-icon-height: 20px;--dp-calendar-wrap-padding: 0 5px;--dp-cell-size: 35px;--dp-cell-padding: 5px;--dp-common-padding: 10px;--dp-input-icon-padding: 35px;--dp-input-padding: 6px 30px 6px 12px;--dp-input-not-clearable-padding: 12px;--dp-menu-min-width: 260px;--dp-action-buttons-padding: 1px 6px;--dp-row-margin: 5px 0;--dp-calendar-header-cell-padding: .5rem;--dp-multi-calendars-spacing: 10px;--dp-overlay-col-padding: 3px;--dp-time-inc-dec-button-size: 32px;--dp-font-size: 1rem;--dp-preview-font-size: .8rem;--dp-time-font-size: 2rem;--dp-action-button-height: 22px;--dp-action-row-padding: 8px;--dp-direction: ltr}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__theme_dark{--dp-background-color: #212121;--dp-text-color: #fff;--dp-hover-color: #484848;--dp-hover-text-color: #fff;--dp-hover-icon-color: #959595;--dp-primary-color: #005cb2;--dp-primary-disabled-color: #61a8ea;--dp-primary-text-color: #fff;--dp-secondary-color: #a9a9a9;--dp-border-color: #2d2d2d;--dp-menu-border-color: #2d2d2d;--dp-border-color-hover: #aaaeb7;--dp-border-color-focus: #aaaeb7;--dp-disabled-color: #737373;--dp-disabled-color-text: #d0d0d0;--dp-scroll-bar-background: #212121;--dp-scroll-bar-color: #484848;--dp-success-color: #00701a;--dp-success-color-disabled: #428f59;--dp-icon-color: #959595;--dp-danger-color: #e53935;--dp-marker-color: #e53935;--dp-tooltip-color: #3e3e3e;--dp-highlight-color: rgb(0 92 178 / 20%);--dp-range-between-dates-background-color: var(--dp-hover-color, #484848);--dp-range-between-dates-text-color: var(--dp-hover-text-color, #fff);--dp-range-between-border-color: var(--dp-hover-color, #fff);--dp-loader: 5px solid #005cb2}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__theme_light{--dp-background-color: #fff;--dp-text-color: #212121;--dp-hover-color: #f3f3f3;--dp-hover-text-color: #212121;--dp-hover-icon-color: #959595;--dp-primary-color: #1976d2;--dp-primary-disabled-color: #6bacea;--dp-primary-text-color: #fff;--dp-secondary-color: #c0c4cc;--dp-border-color: #ddd;--dp-menu-border-color: #ddd;--dp-border-color-hover: #aaaeb7;--dp-border-color-focus: #aaaeb7;--dp-disabled-color: #f6f6f6;--dp-scroll-bar-background: #f3f3f3;--dp-scroll-bar-color: #959595;--dp-success-color: #76d275;--dp-success-color-disabled: #a3d9b1;--dp-icon-color: #959595;--dp-danger-color: #ff6f60;--dp-marker-color: #ff6f60;--dp-tooltip-color: #fafafa;--dp-disabled-color-text: #8e8e8e;--dp-highlight-color: rgb(25 118 210 / 10%);--dp-range-between-dates-background-color: var(--dp-hover-color, #f3f3f3);--dp-range-between-dates-text-color: var(--dp-hover-text-color, #212121);--dp-range-between-border-color: var(--dp-hover-color, #f3f3f3);--dp-loader: 5px solid #1976d2}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__flex{display:flex;align-items:center}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__btn{background:none}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__main{font-family:var(--dp-font-family);-webkit-user-select:none;user-select:none;box-sizing:border-box;position:relative;width:100%}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__main *{direction:var(--dp-direction, ltr)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__pointer{cursor:pointer}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__icon{stroke:currentcolor;fill:currentcolor}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__button{width:100%;text-align:center;color:var(--dp-icon-color);cursor:pointer;display:flex;align-items:center;place-content:center center;padding:var(--dp-common-padding);box-sizing:border-box;height:var(--dp-button-height)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__button.dp__overlay_action{position:absolute;bottom:0}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__button:hover{background:var(--dp-hover-color);color:var(--dp-hover-icon-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__button svg{height:var(--dp-button-icon-height);width:auto}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__button_bottom{border-bottom-left-radius:var(--dp-border-radius);border-bottom-right-radius:var(--dp-border-radius)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__flex_display{display:flex}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__flex_display_with_input{flex-direction:column;align-items:flex-start}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__relative{position:relative}.vue-date-time-picker__wrapper[data-v-23910d95] .calendar-next-enter-active,.vue-date-time-picker__wrapper[data-v-23910d95] .calendar-next-leave-active,.vue-date-time-picker__wrapper[data-v-23910d95] .calendar-prev-enter-active,.vue-date-time-picker__wrapper[data-v-23910d95] .calendar-prev-leave-active{transition:all var(--dp-transition-timing-general) ease-out}.vue-date-time-picker__wrapper[data-v-23910d95] .calendar-next-enter-from{opacity:0;transform:translate(var(--dp-transition-length))}.vue-date-time-picker__wrapper[data-v-23910d95] .calendar-next-leave-to,.vue-date-time-picker__wrapper[data-v-23910d95] .calendar-prev-enter-from{opacity:0;transform:translate(calc(var(--dp-transition-length) * -1))}.vue-date-time-picker__wrapper[data-v-23910d95] .calendar-prev-leave-to{opacity:0;transform:translate(var(--dp-transition-length))}.vue-date-time-picker__wrapper[data-v-23910d95] .dp-menu-appear-bottom-enter-active,.vue-date-time-picker__wrapper[data-v-23910d95] .dp-menu-appear-bottom-leave-active,.vue-date-time-picker__wrapper[data-v-23910d95] .dp-menu-appear-top-enter-active,.vue-date-time-picker__wrapper[data-v-23910d95] .dp-menu-appear-top-leave-active,.vue-date-time-picker__wrapper[data-v-23910d95] .dp-slide-up-enter-active,.vue-date-time-picker__wrapper[data-v-23910d95] .dp-slide-up-leave-active,.vue-date-time-picker__wrapper[data-v-23910d95] .dp-slide-down-enter-active,.vue-date-time-picker__wrapper[data-v-23910d95] .dp-slide-down-leave-active{transition:all var(--dp-animation-duration) var(--dp-transition-timing)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp-menu-appear-top-enter-from,.vue-date-time-picker__wrapper[data-v-23910d95] .dp-menu-appear-top-leave-to,.vue-date-time-picker__wrapper[data-v-23910d95] .dp-slide-down-leave-to,.vue-date-time-picker__wrapper[data-v-23910d95] .dp-slide-up-enter-from{opacity:0;transform:translateY(var(--dp-transition-length))}.vue-date-time-picker__wrapper[data-v-23910d95] .dp-menu-appear-bottom-enter-from,.vue-date-time-picker__wrapper[data-v-23910d95] .dp-menu-appear-bottom-leave-to,.vue-date-time-picker__wrapper[data-v-23910d95] .dp-slide-down-enter-from,.vue-date-time-picker__wrapper[data-v-23910d95] .dp-slide-up-leave-to{opacity:0;transform:translateY(calc(var(--dp-transition-length) * -1))}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--arrow-btn-nav{transition:var(--dp-common-transition)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--highlighted{background-color:var(--dp-highlight-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--hidden-el{visibility:hidden}.vue-date-time-picker__wrapper.vue-date-time-picker__wrapper--teleport[data-v-23910d95] .dp--menu-wrapper{z-index:100001}.vue-date-time-picker__wrapper .vue-date-time-picker--clearable[data-v-23910d95] .dp__input{padding-inline-end:var(--default-clickable-area)}.vue-date-time-picker__wrapper .vue-date-time-picker__timezone[data-v-23910d95]{min-width:unset;width:100%}.vue-date-time-picker__wrapper[data-v-23910d95] .icon-vue{opacity:1!important}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--tp-wrap,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__action_extra{padding:var(--dp-menu-padding);padding-top:0}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay.dp--overlay-absolute{padding:var(--dp-menu-padding)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__overlay.dp--overlay-absolute .dp__btn.dp__button.dp__button_bottom{inset-block-end:6px}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__btn.dp__button.dp__button_bottom,.vue-date-time-picker__wrapper[data-v-23910d95] .dp--tp-wrap .dp__button{width:100%}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__btn.dp__button.dp__overlay_action{width:calc(100% - 16px)}.vue-date-time-picker__wrapper[data-v-23910d95] input{padding-inline-start:var(--dp-input-icon-padding)!important}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__btn{margin:0}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__inner_nav{height:fit-content;width:fit-content}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__btn.dp__button.dp__button_bottom{color:var(--color-primary-element-light-text);background-color:var(--color-primary-element-light)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--header-wrap .dp__btn:not(.dp__button_bottom),.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_col .dp__btn{background-color:var(--color-main-background)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--header-wrap .dp__btn:not(.dp__button_bottom):hover,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_col .dp__btn:hover{background:var(--dp-hover-color);color:var(--dp-hover-icon-color)}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__month_year_select{flex:1}.vue-date-time-picker__wrapper[data-v-23910d95] .dp--time-overlay-btn{font-size:calc(2 * var(--default-font-size))!important}.vue-date-time-picker__wrapper[data-v-23910d95] .dp__time_input .dp__time_col_reg_block{padding:0 calc(4 * var(--default-grid-baseline))}.vue-date-time-picker__wrapper .vue-date-time-picker.dp__theme_dark[data-v-23910d95],.vue-date-time-picker__wrapper .vue-date-time-picker.dp__theme_light[data-v-23910d95],.vue-date-time-picker__wrapper[data-v-23910d95] .dp__theme_dark,.vue-date-time-picker__wrapper[data-v-23910d95] .dp__theme_light{--dp-background-color: var(--color-main-background);--dp-text-color: var(--color-main-text);--dp-hover-color: var(--color-primary-element-light-hover);--dp-hover-text-color: var(--color-primary-element-light-text);--dp-hover-icon-color: var(--color-primary-element-light-text);--dp-primary-color: var(--color-primary-element);--dp-primary-disabled-color: var(--color-primary-element-hover);--dp-primary-text-color: var(--color-primary-element-text);--dp-secondary-color: var(--color-text-maxcontrast);--dp-border-color: var(--color-border);--dp-menu-border-color: var(--color-border-dark);--dp-border-color-hover: var(--color-border-maxcontrast);--dp-border-color-focus: var(--color-border-maxcontrast);--dp-disabled-color: var(--color-background-dark);--dp-disabled-color-text: var(--color-text-maxcontrast);--dp-scroll-bar-background: var(--color-scrollbar);--dp-scroll-bar-color: var(--color-scrollbar);--dp-success-color: var(--color-success);--dp-success-color-disabled: var(--color-success-hover);--dp-icon-color: var(--color-main-text);--dp-danger-color: var(--color-error);--dp-marker-color: var(--color-text-error, var(--color-error));--dp-tooltip-color: var(--color-main-text);--dp-highlight-color: var(--color-main-text)} diff --git a/css/index-bfXBK-tQ.chunk.css b/css/index-bfXBK-tQ.chunk.css new file mode 100644 index 00000000..4c50eab3 --- /dev/null +++ b/css/index-bfXBK-tQ.chunk.css @@ -0,0 +1 @@ +.material-design-icon[data-v-fab7cffe]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.color-picker[data-v-fab7cffe]{display:flex;overflow:hidden;align-content:flex-end;flex-direction:column;justify-content:space-between;padding:var(--border-radius-element);min-width:calc(4 * var(--default-clickable-area) + 2 * var(--border-radius-element))}.color-picker--clearable[data-v-fab7cffe]{min-width:calc(5 * var(--default-clickable-area) + 2 * var(--border-radius-element))}.color-picker--advanced-fields[data-v-fab7cffe]{min-width:264px}.color-picker__clear[data-v-fab7cffe]{color:var(--color-main-text)}.color-picker__clear[data-v-fab7cffe]:hover:not(:has(:checked)){color:var(--color-text-maxcontrast)}.color-picker__simple[data-v-fab7cffe]{display:grid;grid-template-columns:repeat(auto-fit,var(--default-clickable-area));grid-auto-rows:var(--default-clickable-area)}.color-picker__simple-color-circle[data-v-fab7cffe]{display:flex;align-items:center;justify-content:center;width:calc(var(--default-clickable-area) - 10px);height:calc(var(--default-clickable-area) - 10px);min-height:calc(var(--default-clickable-area) - 10px);margin:auto;padding:0;color:#fff;border:1px solid rgba(0,0,0,.25);border-radius:50%;font-size:16px}.color-picker__simple-color-circle[data-v-fab7cffe]:focus-within{outline:2px solid var(--color-main-text)}.color-picker__simple-color-circle[data-v-fab7cffe]:hover{opacity:.6}.color-picker__simple-color-circle--active[data-v-fab7cffe]{width:calc(var(--default-clickable-area) - 6px);height:calc(var(--default-clickable-area) - 6px);min-height:calc(var(--default-clickable-area) - 6px);transition:all .1s ease-in-out;opacity:1!important}.color-picker__advanced[data-v-fab7cffe]{box-shadow:none!important}.color-picker__navigation[data-v-fab7cffe]{display:flex;flex-direction:row;gap:var(--default-grid-baseline);justify-content:space-between;margin-top:calc(2 * var(--default-grid-baseline))}[data-v-fab7cffe] .vc-chrome{width:unset;background-color:var(--color-main-background)}[data-v-fab7cffe] .vc-chrome-color-wrap{width:30px;height:30px}[data-v-fab7cffe] .vc-chrome-active-color{border-radius:17px}[data-v-fab7cffe] .vc-chrome-body{padding:14px 0 0;background-color:var(--color-main-background)}[data-v-fab7cffe] .vc-chrome-body .vc-input__input{--input-border-radius: var(--border-radius-element);--input-border-width-offset: calc(var(--border-width-input-focused, 2px) - var(--border-width-input, 2px));width:100%;height:var(--default-clickable-area);margin:0;padding-inline:calc(var(--border-radius-element) + var(--input-border-width-offset));padding-block:var(--input-border-width-offset);border:var(--border-width-input, 2px) solid var(--color-border-maxcontrast);border-radius:var(--input-border-radius);font-size:var(--default-font-size);color:var(--color-main-text);box-shadow:none}[data-v-fab7cffe] .vc-chrome-body .vc-input__input:active:not([disabled]),[data-v-fab7cffe] .vc-chrome-body .vc-input__input:hover:not([disabled]),[data-v-fab7cffe] .vc-chrome-body .vc-input__input:focus:not([disabled]){--input-border-width-offset: 0px;border-color:var(--color-main-text);border-width:var(--border-width-input-focused, 2px);box-shadow:0 0 0 2px var(--color-main-background)!important}[data-v-fab7cffe] .vc-chrome-body .vc-input__input:active:not([disabled])+.vc-input__label,[data-v-fab7cffe] .vc-chrome-body .vc-input__input:hover:not([disabled])+.vc-input__label,[data-v-fab7cffe] .vc-chrome-body .vc-input__input:focus:not([disabled])+.vc-input__label{color:var(--color-main-text)}[data-v-fab7cffe] .vc-chrome-body .vc-input__label{position:absolute;inset-inline:var(--border-width-input-focused, 2px);inset-block-start:calc(-1.5 * var(--font-size-small, 13px) / 2);max-width:fit-content;margin-inline:calc(var(--border-radius-element) - var(--default-grid-baseline));margin-block:0;padding-inline:var(--default-grid-baseline);font-family:var(--font-face);font-size:var(--font-size-small, 13px);line-height:1.5;font-weight:var(--font-weight-element, 500);color:var(--color-text-maxcontrast);background-color:var(--color-main-background);pointer-events:none}[data-v-fab7cffe] .vc-chrome-toggle-btn{display:flex;justify-content:center;align-items:center;width:var(--default-clickable-area);height:var(--default-clickable-area);margin-inline-start:6px;filter:var(--background-invert-if-dark)}[data-v-fab7cffe] .vc-chrome-toggle-icon{width:24px;height:24px;margin:0}[data-v-fab7cffe] .vc-chrome-toggle-icon-highlight{width:var(--default-clickable-area);height:var(--default-clickable-area);inset:0}[data-v-fab7cffe] .vc-chrome-saturation-wrap{border-radius:3px}[data-v-fab7cffe] .vc-chrome-saturation-circle{width:20px;height:20px}.slide-enter-from[data-v-fab7cffe]{transform:translate(-50%);opacity:0}.slide-enter-to[data-v-fab7cffe],.slide-leave-from[data-v-fab7cffe]{transform:translate(0);opacity:1}.slide-leave-to[data-v-fab7cffe]{transform:translate(-50%);opacity:0}.slide-enter-active[data-v-fab7cffe],.slide-leave-active[data-v-fab7cffe]{transition:all 50ms ease-in-out} diff --git a/css/personalSettings-i1_v3FZk.chunk.css b/css/personalSettings-i1_v3FZk.chunk.css new file mode 100644 index 00000000..9239886e --- /dev/null +++ b/css/personalSettings-i1_v3FZk.chunk.css @@ -0,0 +1,7 @@ +@charset "UTF-8";.material-design-icon[data-v-ab2ff78b]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}li.action[data-v-ab2ff78b]:hover,li.action.active[data-v-ab2ff78b]{border-radius:6px;padding:0}li.action[data-v-ab2ff78b]:hover{background-color:var(--color-background-hover)}.action--disabled[data-v-ab2ff78b]{pointer-events:none;opacity:.5}.action--disabled[data-v-ab2ff78b]:hover,.action--disabled[data-v-ab2ff78b]:focus{cursor:default;opacity:.5}.action--disabled *[data-v-ab2ff78b]{opacity:1!important}.action-button[data-v-ab2ff78b]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2);box-sizing:border-box;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-element, normal);font-size:var(--default-font-size);line-height:var(--default-clickable-area)}.action-button>span[data-v-ab2ff78b]{cursor:pointer;white-space:nowrap}.action-button__icon[data-v-ab2ff78b]{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px;background-repeat:no-repeat}.action-button[data-v-ab2ff78b] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);align-self:flex-start;opacity:1}.action-button[data-v-ab2ff78b] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-button__longtext-wrapper[data-v-ab2ff78b],.action-button__longtext[data-v-ab2ff78b]{max-width:220px;line-height:1.6em;padding:calc((var(--default-clickable-area) - 1.6em) / 2) 0;cursor:pointer;text-align:start;overflow:hidden;text-overflow:ellipsis}.action-button__longtext[data-v-ab2ff78b]{cursor:pointer;white-space:pre-wrap!important}.action-button__name[data-v-ab2ff78b]{font-weight:var(--font-weight-heading, bold);text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:100%;display:block}.action-button__description[data-v-ab2ff78b]{display:block;white-space:pre-wrap;font-size:var(--font-size-small);font-weight:var(--font-weight-default, normal);line-height:var(--default-line-height);color:var(--color-text-maxcontrast);cursor:pointer}.action-button__menu-icon[data-v-ab2ff78b],.action-button__pressed-icon[data-v-ab2ff78b]{margin-inline:auto calc((var(--default-clickable-area) - 16px) / 2 * -1)}.action-button *[data-v-ab2ff78b]{cursor:pointer}.material-design-icon[data-v-4625d649]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.icon-vue[data-v-4625d649]{--icon-size: var(--dad67fa8);display:flex;justify-content:center;align-items:center;min-width:var(--default-clickable-area);min-height:var(--default-clickable-area);opacity:1}.icon-vue--inline[data-v-4625d649]{display:inline-flex;min-width:fit-content;min-height:fit-content;vertical-align:text-bottom}.icon-vue span[data-v-4625d649]{line-height:0}.icon-vue[data-v-4625d649] svg{fill:currentColor;width:var(--icon-size, 20px);height:var(--icon-size, 20px);max-width:var(--icon-size, 20px);max-height:var(--icon-size, 20px)}.icon-vue--directional[data-v-4625d649] svg:dir(rtl){transform:scaleX(-1)}.material-design-icon[data-v-d5482fd6]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.nc-button-group-base>div[data-v-d5482fd6]{text-align:center;color:var(--color-text-maxcontrast)}.nc-button-group-base ul.nc-button-group-content[data-v-d5482fd6]{display:flex;gap:4px;justify-content:space-between}.nc-button-group-base ul.nc-button-group-content[data-v-d5482fd6] li{flex:1 1}.nc-button-group-base ul.nc-button-group-content[data-v-d5482fd6] .action-button{padding:0!important;width:100%;display:flex;justify-content:center}.nc-button-group-base ul.nc-button-group-content[data-v-d5482fd6] .action-button.action-button--active{background-color:var(--color-primary-element);border-radius:var(--border-radius-large);color:var(--color-primary-element-text)}.nc-button-group-base ul.nc-button-group-content[data-v-d5482fd6] .action-button.action-button--active:hover,.nc-button-group-base ul.nc-button-group-content[data-v-d5482fd6] .action-button.action-button--active:focus,.nc-button-group-base ul.nc-button-group-content[data-v-d5482fd6] .action-button.action-button--active:focus-within{background-color:var(--color-primary-element-hover)}.nc-button-group-base ul.nc-button-group-content[data-v-d5482fd6] .action-button .action-button__pressed-icon{display:none}.material-design-icon[data-v-7bf21eca]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-caption[data-v-7bf21eca]{color:var(--color-text-maxcontrast);line-height:var(--default-clickable-area);white-space:nowrap;text-overflow:ellipsis;box-shadow:none!important;-webkit-user-select:none;user-select:none;pointer-events:none;margin-inline-start:12px;padding-inline-end:14px;height:var(--default-clickable-area);display:flex;align-items:center}.material-design-icon[data-v-7fbb3c95]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}li.action[data-v-7fbb3c95]:hover,li.action.active[data-v-7fbb3c95]{border-radius:6px;padding:0}li.action[data-v-7fbb3c95]:hover{background-color:var(--color-background-hover)}.action--disabled[data-v-7fbb3c95]{pointer-events:none;opacity:.5}.action--disabled[data-v-7fbb3c95]:hover,.action--disabled[data-v-7fbb3c95]:focus{cursor:default;opacity:.5}.action--disabled *[data-v-7fbb3c95]{opacity:1!important}.action-checkbox[data-v-7fbb3c95]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2);box-sizing:border-box;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-element, normal);font-size:var(--default-font-size);line-height:var(--default-clickable-area)}.action-checkbox>span[data-v-7fbb3c95]{cursor:pointer;white-space:nowrap}.action-checkbox__icon[data-v-7fbb3c95]{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px;background-repeat:no-repeat}.action-checkbox[data-v-7fbb3c95] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);align-self:flex-start;opacity:1}.action-checkbox[data-v-7fbb3c95] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-checkbox__longtext-wrapper[data-v-7fbb3c95],.action-checkbox__longtext[data-v-7fbb3c95]{max-width:220px;line-height:1.6em;padding:calc((var(--default-clickable-area) - 1.6em) / 2) 0;cursor:pointer;text-align:start;overflow:hidden;text-overflow:ellipsis}.action-checkbox__longtext[data-v-7fbb3c95]{cursor:pointer;white-space:pre-wrap!important}.action-checkbox__name[data-v-7fbb3c95]{font-weight:var(--font-weight-heading, bold);text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:100%;display:block}.action-checkbox__description[data-v-7fbb3c95]{display:block;white-space:pre-wrap;font-size:var(--font-size-small);font-weight:var(--font-weight-default, normal);line-height:var(--default-line-height);color:var(--color-text-maxcontrast);cursor:pointer}.action-checkbox__menu-icon[data-v-7fbb3c95]{margin-inline:auto calc((var(--default-clickable-area) - 16px) / 2 * -1)}.action[data-v-7fbb3c95]:has(:focus-visible){outline:2px solid currentColor}.action-checkbox__icon[data-v-7fbb3c95]{color:var(--color-primary-element)}.action-checkbox__input[data-v-7fbb3c95]{width:20px;height:20px;margin:auto;position:absolute;z-index:-1;opacity:0!important}.material-design-icon[data-v-15d84b0d]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}button[data-v-15d84b0d]:not(.button-vue),input[data-v-15d84b0d]:not([type=range]),textarea[data-v-15d84b0d]{margin:0;padding:7px 6px;cursor:text;color:var(--color-text-lighter);border:1px solid var(--color-border-dark);border-radius:var(--border-radius);outline:none;background-color:var(--color-main-background);font-size:13px}button[data-v-15d84b0d]:not(.button-vue):not(:disabled):not(.primary):hover,button[data-v-15d84b0d]:not(.button-vue):not(:disabled):not(.primary):focus,button:not(.button-vue):not(:disabled):not(.primary).active[data-v-15d84b0d],input[data-v-15d84b0d]:not([type=range]):not(:disabled):not(.primary):hover,input[data-v-15d84b0d]:not([type=range]):not(:disabled):not(.primary):focus,input:not([type=range]):not(:disabled):not(.primary).active[data-v-15d84b0d],textarea[data-v-15d84b0d]:not(:disabled):not(.primary):hover,textarea[data-v-15d84b0d]:not(:disabled):not(.primary):focus,textarea:not(:disabled):not(.primary).active[data-v-15d84b0d]{border-color:var(--color-primary-element);outline:none}button[data-v-15d84b0d]:not(.button-vue):not(:disabled):not(.primary):active,input[data-v-15d84b0d]:not([type=range]):not(:disabled):not(.primary):active,textarea[data-v-15d84b0d]:not(:disabled):not(.primary):active{color:var(--color-text-light);outline:none;background-color:var(--color-main-background)}button[data-v-15d84b0d]:not(.button-vue):disabled,input[data-v-15d84b0d]:not([type=range]):disabled,textarea[data-v-15d84b0d]:disabled{cursor:default;opacity:.5;color:var(--color-text-maxcontrast);background-color:var(--color-background-dark)}button[data-v-15d84b0d]:not(.button-vue):required,input[data-v-15d84b0d]:not([type=range]):required,textarea[data-v-15d84b0d]:required{box-shadow:none}button[data-v-15d84b0d]:not(.button-vue):invalid,input[data-v-15d84b0d]:not([type=range]):invalid,textarea[data-v-15d84b0d]:invalid{border-color:var(--color-border-error, var(--color-error));box-shadow:none!important}button:not(.button-vue).primary[data-v-15d84b0d],input:not([type=range]).primary[data-v-15d84b0d],textarea.primary[data-v-15d84b0d]{cursor:pointer;color:var(--color-primary-element-text);border-color:var(--color-primary-element);background-color:var(--color-primary-element)}button:not(.button-vue).primary[data-v-15d84b0d]:not(:disabled):hover,button:not(.button-vue).primary[data-v-15d84b0d]:not(:disabled):focus,button:not(.button-vue).primary[data-v-15d84b0d]:not(:disabled):active,input:not([type=range]).primary[data-v-15d84b0d]:not(:disabled):hover,input:not([type=range]).primary[data-v-15d84b0d]:not(:disabled):focus,input:not([type=range]).primary[data-v-15d84b0d]:not(:disabled):active,textarea.primary[data-v-15d84b0d]:not(:disabled):hover,textarea.primary[data-v-15d84b0d]:not(:disabled):focus,textarea.primary[data-v-15d84b0d]:not(:disabled):active{border-color:var(--color-primary-element-light);background-color:var(--color-primary-element-light)}button:not(.button-vue).primary[data-v-15d84b0d]:not(:disabled):active,input:not([type=range]).primary[data-v-15d84b0d]:not(:disabled):active,textarea.primary[data-v-15d84b0d]:not(:disabled):active{color:var(--color-primary-element-text-dark)}button:not(.button-vue).primary[data-v-15d84b0d]:disabled,input:not([type=range]).primary[data-v-15d84b0d]:disabled,textarea.primary[data-v-15d84b0d]:disabled{cursor:default;color:var(--color-primary-element-text-dark);background-color:var(--color-primary-element)}li.action[data-v-15d84b0d]:hover,li.action.active[data-v-15d84b0d]{border-radius:6px;padding:0}li.action[data-v-15d84b0d]:hover{background-color:var(--color-background-hover)}.action--disabled[data-v-15d84b0d]{pointer-events:none;opacity:.5}.action--disabled[data-v-15d84b0d]:hover,.action--disabled[data-v-15d84b0d]:focus{cursor:default;opacity:.5}.action--disabled *[data-v-15d84b0d]{opacity:1!important}.action-input[data-v-15d84b0d]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-default, normal)}.action-input__icon-wrapper[data-v-15d84b0d]{display:flex;align-self:flex-start;margin-top:var(--default-grid-baseline);align-items:center;justify-content:center}.action-input__icon-wrapper[data-v-15d84b0d] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1}.action-input__icon-wrapper[data-v-15d84b0d] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-input--tight-label .action-input__icon-wrapper[data-v-15d84b0d]{margin-top:0}.action-input>span[data-v-15d84b0d]{cursor:pointer;white-space:nowrap}.action-input__icon[data-v-15d84b0d]{min-width:0;min-height:0;padding:calc(var(--default-clickable-area) / 2) 0 calc(var(--default-clickable-area) / 2) var(--default-clickable-area);background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px}.action-input__form[data-v-15d84b0d]{display:flex;align-items:center;flex:1 1 auto;margin:4px 0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2)}.action-input__container[data-v-15d84b0d]{position:relative;width:100%}.action-input__input-container[data-v-15d84b0d]{display:flex}.action-input__input-container .colorpicker__trigger[data-v-15d84b0d],.action-input__input-container .colorpicker__preview[data-v-15d84b0d]{width:100%}.action-input__input-container .colorpicker__preview[data-v-15d84b0d]{width:100%;height:36px;border-radius:var(--border-radius-large);border:2px solid var(--color-border-maxcontrast);box-shadow:none!important}.action-input__text-label[data-v-15d84b0d]{padding:4px 0;display:block}.action-input__text-label--hidden[data-v-15d84b0d]{position:absolute;inset-inline-start:0;width:1px;height:1px;overflow:hidden;z-index:-1;opacity:0}.action-input__datetimepicker[data-v-15d84b0d]{width:100%}.action-input__datetimepicker[data-v-15d84b0d] .mx-input{margin:0}.action-input__multi[data-v-15d84b0d]{width:100%}li:last-child>.action-input[data-v-15d84b0d]{padding-bottom:calc((var(--default-clickable-area) - 16px) / 2 - 4px)}li:first-child>.action-input[data-v-15d84b0d]:not(.action-input--visible-label){padding-top:calc((var(--default-clickable-area) - 16px) / 2 - 4px)}.material-design-icon[data-v-07e96236]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.native-datetime-picker[data-v-07e96236]{display:flex;flex-direction:column}.native-datetime-picker .native-datetime-picker--label[data-v-07e96236]{margin-block-end:2px}.native-datetime-picker .native-datetime-picker--input[data-v-07e96236]{--input-border-width-offset: calc(var(--border-width-input-focused, 2px) - var(--border-width-input, 2px));width:100%;flex:0 0 auto;margin:0;padding-inline-start:calc(var(--border-radius-large) + var(--input-border-width-offset));padding-inline-end:calc(var(--default-grid-baseline) + var(--input-border-width-offset));border:var(--border-width-input, 2px) solid var(--color-border-maxcontrast)}.native-datetime-picker .native-datetime-picker--input[data-v-07e96236]:active:not([disabled]),.native-datetime-picker .native-datetime-picker--input[data-v-07e96236]:hover:not([disabled]),.native-datetime-picker .native-datetime-picker--input[data-v-07e96236]:focus:not([disabled]),.native-datetime-picker .native-datetime-picker--input[data-v-07e96236]:focus-within:not([disabled]){border-color:var(--color-main-text);border-width:var(--border-width-input-focused, 2px);box-shadow:0 0 0 2px var(--color-main-background)!important;--input-border-width-offset: 0px}[data-theme-light] .native-datetime-picker--input[data-v-07e96236],[data-themes*=light] .native-datetime-picker--input[data-v-07e96236]{color-scheme:light}[data-theme-dark] .native-datetime-picker--input[data-v-07e96236],[data-themes*=dark] .native-datetime-picker--input[data-v-07e96236]{color-scheme:dark}@media(prefers-color-scheme:light){[data-theme-default] .native-datetime-picker--input[data-v-07e96236],[data-themes*=default] .native-datetime-picker--input[data-v-07e96236]{color-scheme:light}}@media(prefers-color-scheme:dark){[data-theme-default] .native-datetime-picker--input[data-v-07e96236],[data-themes*=default] .native-datetime-picker--input[data-v-07e96236]{color-scheme:dark}}.material-design-icon[data-v-0800cef1]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}[data-v-0800cef1] .password-field__input--secure-text{-webkit-text-security:disc}.material-design-icon[data-v-17c3f609]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.input-field[data-v-17c3f609]{--input-border-color: var(--color-border-maxcontrast);--input-border-radius: var(--border-radius-element);--input-padding-start: var(--border-radius-large);--input-padding-end: var(--border-radius-large);position:relative;width:100%;margin-block-start:6px}.input-field--disabled[data-v-17c3f609]{opacity:.4;filter:saturate(.4)}.input-field--label-outside[data-v-17c3f609]{margin-block-start:0}.input-field--leading-icon[data-v-17c3f609]{--input-padding-start: calc(var(--default-clickable-area) - var(--default-grid-baseline))}.input-field--trailing-icon[data-v-17c3f609]{--input-padding-end: calc(var(--default-clickable-area) - var(--default-grid-baseline))}.input-field--pill[data-v-17c3f609]{--input-border-radius: var(--border-radius-pill)}.input-field__main-wrapper[data-v-17c3f609]{height:var(--default-clickable-area);padding:var(--border-width-input-focused, 2px);position:relative}.input-field__input[data-v-17c3f609]{--input-border-box-shadow-light: 0 -1px var(--input-border-color), 0 0 0 1px color-mix(in srgb, var(--input-border-color), 65% transparent);--input-border-box-shadow-dark: 0 1px var(--input-border-color), 0 0 0 1px color-mix(in srgb, var(--input-border-color), 65% transparent);--input-border-box-shadow: var(--input-border-box-shadow-light);border:none;border-radius:var(--border-radius-element);box-shadow:var(--input-border-box-shadow)}.input-field__input[data-v-17c3f609]:hover:not([disabled]){box-shadow:0 0 0 1px var(--input-border-color)}@media(prefers-color-scheme:dark){.input-field__input .input-field__input[data-v-17c3f609]{--input-border-box-shadow: var(--input-border-box-shadow-dark)}}[data-theme-dark] .input-field__input[data-v-17c3f609]{--input-border-box-shadow: var(--input-border-box-shadow-dark)}[data-theme-light] .input-field__input[data-v-17c3f609]{--input-border-box-shadow: var(--input-border-box-shadow-light)}.input-field--legacy .input-field__input[data-v-17c3f609]{box-shadow:0 0 0 1px var(--input-border-color)}.input-field--legacy .input-field__input[data-v-17c3f609]:hover:not([disabled]){box-shadow:0 0 0 2px var(--input-border-color)}.input-field__input[data-v-17c3f609]:focus-within:not([disabled]),.input-field__input[data-v-17c3f609]:active:not([disabled]){box-shadow:0 0 0 2px var(--input-border-color),0 0 0 4px var(--color-main-background)!important}.input-field__input[data-v-17c3f609]{background-color:var(--color-main-background);color:var(--color-main-text);border-radius:var(--input-border-radius);cursor:pointer;-webkit-appearance:textfield!important;-moz-appearance:textfield!important;appearance:textfield!important;font-size:var(--default-font-size);text-overflow:ellipsis;padding-block:0;padding-inline:var(--input-padding-start) var(--input-padding-end);height:100%!important;min-height:unset;width:100%}.input-field__input[data-v-17c3f609]::placeholder{color:var(--color-text-maxcontrast)}.input-field__input[data-v-17c3f609]::-webkit-search-cancel-button{display:none}.input-field__input[data-v-17c3f609]::-webkit-search-decoration,.input-field__input[data-v-17c3f609]::-webkit-search-results-button,.input-field__input[data-v-17c3f609]::-webkit-search-results-decoration,.input-field__input[data-v-17c3f609]::-ms-clear{display:none}.input-field__input[data-v-17c3f609]:active:not([disabled]),.input-field__input[data-v-17c3f609]:focus:not([disabled]){--input-border-color: var(--color-main-text)}.input-field__input:focus+.input-field__label[data-v-17c3f609],.input-field__input:hover:not(:placeholder-shown)+.input-field__label[data-v-17c3f609]{color:var(--color-main-text)}.input-field__input[data-v-17c3f609]:focus{cursor:text}.input-field__input[data-v-17c3f609]:disabled{cursor:default}.input-field__input[data-v-17c3f609]:focus-visible{box-shadow:unset!important}.input-field__input--success[data-v-17c3f609]{border-color:var(--color-border-success, var(--color-success))!important}.input-field__input--success[data-v-17c3f609]:focus-visible{box-shadow:#f8fafc 0 0 0 2px,var(--color-primary-element) 0 0 0 4px,#0000000d 0 1px 2px}.input-field__input--error[data-v-17c3f609],.input-field__input[data-v-17c3f609]:user-invalid{border-color:var(--color-border-error, var(--color-error))!important}.input-field__input--error[data-v-17c3f609]:focus-visible,.input-field__input[data-v-17c3f609]:user-invalid:focus-visible{box-shadow:#f8fafc 0 0 0 2px,var(--color-primary-element) 0 0 0 4px,#0000000d 0 1px 2px}.input-field:not(.input-field--label-outside) .input-field__input[data-v-17c3f609]:not(:focus)::placeholder{opacity:0}.input-field__label[data-v-17c3f609]{--input-label-font-size: var(--default-font-size);position:absolute;margin-inline:var(--input-padding-start) var(--input-padding-end);max-width:fit-content;font-size:var(--input-label-font-size);inset-block-start:calc((var(--default-clickable-area) - 1lh) / 2);inset-inline:var(--border-width-input-focused, 2px);color:var(--color-text-maxcontrast);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none;transition:height var(--animation-quick),inset-block-start var(--animation-quick),font-size var(--animation-quick),color var(--animation-quick),background-color var(--animation-quick) var(--animation-slow)}.input-field__input:focus+.input-field__label[data-v-17c3f609],.input-field__input:not(:placeholder-shown)+.input-field__label[data-v-17c3f609]{--input-label-font-size: 13px;line-height:1.5;inset-block-start:calc(-1.5 * var(--input-label-font-size) / 2);font-weight:var(--font-weight-element, 500);border-radius:var(--default-grid-baseline) var(--default-grid-baseline) 0 0;background-color:var(--color-main-background);padding-inline:var(--default-grid-baseline);margin-inline:calc(var(--input-padding-start) - var(--default-grid-baseline)) calc(var(--input-padding-end) - var(--default-grid-baseline));transition:height var(--animation-quick),inset-block-start var(--animation-quick),font-size var(--animation-quick),color var(--animation-quick)}.input-field__icon[data-v-17c3f609]{position:absolute;height:var(--default-clickable-area);width:var(--default-clickable-area);display:flex;align-items:center;justify-content:center;opacity:.7;inset-block-end:0}.input-field__icon--leading[data-v-17c3f609]{inset-inline-start:0px}.input-field__icon--trailing[data-v-17c3f609]{inset-inline-end:0px}.input-field__trailing-button[data-v-17c3f609]{--button-size: calc(var(--default-clickable-area) - 2 * var(--border-width-input-focused, 2px)) !important;--button-radius: calc(var(--input-border-radius) - var(--border-width-input-focused, 2px))}.input-field__trailing-button.button-vue[data-v-17c3f609]{position:absolute;top:var(--border-width-input-focused, 2px);inset-inline-end:var(--border-width-input-focused, 2px)}.input-field__trailing-button.button-vue[data-v-17c3f609]:focus-visible{box-shadow:none!important}.input-field__helper-text-message[data-v-17c3f609]{padding-block:4px;padding-inline:var(--border-radius-large);display:flex;align-items:center;color:var(--color-text-maxcontrast);overflow-wrap:anywhere}.input-field__helper-text-message__icon[data-v-17c3f609]{margin-inline-end:8px}.input-field__helper-text-message--error[data-v-17c3f609]{color:var(--color-text-error, var(--color-error))}.input-field--error .input-field__input[data-v-17c3f609],.input-field__input[data-v-17c3f609]:user-invalid{--input-border-color: var(--color-border-error, var(--color-error)) !important}.input-field--error .input-field__input[data-v-17c3f609]:focus-visible,.input-field__input[data-v-17c3f609]:user-invalid:focus-visible{box-shadow:#f8fafc 0 0 0 2px,var(--color-primary-element) 0 0 0 4px,#0000000d 0 1px 2px}.input-field--success .input-field__input[data-v-17c3f609]{--input-border-color: var(--color-border-success, var(--color-success)) !important}.input-field--success .input-field__input[data-v-17c3f609]:focus-visible{box-shadow:#f8fafc 0 0 0 2px,var(--color-primary-element) 0 0 0 4px,#0000000d 0 1px 2px}.material-design-icon[data-v-29ac0caf]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.button-vue[data-v-29ac0caf]{--button-size: var(--default-clickable-area);--button-inner-size: calc(var(--button-size) - 4px);--button-radius: var(--border-radius-element, calc(var(--button-size) / 2));--button-padding-default: clamp(var(--default-grid-baseline), var(--button-radius), calc(var(--default-grid-baseline) * 4));--button-padding: var(--default-grid-baseline) var(--button-padding-default);color:var(--color-primary-element-light-text);background-color:var(--color-primary-element-light);border:1px solid var(--color-primary-element-light-hover);border-bottom-width:2px;border-radius:var(--button-radius);box-sizing:border-box;position:relative;width:fit-content;overflow:hidden;padding-block:1px 0;padding-inline:var(--button-padding);min-height:var(--button-size);min-width:var(--button-size);display:flex;align-items:center;justify-content:center;transition-property:color,border-color,background-color;transition-duration:.1s;transition-timing-function:linear;cursor:pointer;font-size:var(--default-font-size);font-weight:var(--font-weight-element, bold)}.button-vue--size-small[data-v-29ac0caf]{--button-size: var(--clickable-area-small, 24px);--button-radius: var(--border-radius)}.button-vue--size-large[data-v-29ac0caf]{--button-size: var(--clickable-area-large, 48px)}.button-vue[data-v-29ac0caf],.button-vue[data-v-29ac0caf] *{cursor:pointer}.button-vue[data-v-29ac0caf]:focus{outline:none}.button-vue[data-v-29ac0caf]:disabled{cursor:default;opacity:.5;filter:saturate(.7)}.button-vue[data-v-29ac0caf]:disabled *{cursor:default}.button-vue[data-v-29ac0caf]:hover:not(:disabled){background-color:var(--color-primary-element-light-hover)}.button-vue[data-v-29ac0caf]:active:not(:disabled){background-color:var(--color-primary-element-light)}.button-vue__wrapper[data-v-29ac0caf]{display:inline-flex;align-items:center;justify-content:center;width:100%}.button-vue--end .button-vue__wrapper[data-v-29ac0caf]{justify-content:end}.button-vue--start .button-vue__wrapper[data-v-29ac0caf]{justify-content:start}.button-vue--reverse .button-vue__wrapper[data-v-29ac0caf]{flex-direction:row-reverse}.button-vue--reverse.button-vue--icon-and-text[data-v-29ac0caf]{--button-padding: var(--button-padding-default) var(--default-grid-baseline)}.button-vue__icon[data-v-29ac0caf]{--default-clickable-area: var(--button-inner-size);height:var(--button-inner-size);width:var(--button-inner-size);min-height:var(--button-inner-size);min-width:var(--button-inner-size);display:flex;justify-content:center;align-items:center}.button-vue--size-small .button-vue__icon[data-v-29ac0caf]>*{max-height:16px;max-width:16px}.button-vue--size-small .button-vue__icon[data-v-29ac0caf] svg{height:16px;width:16px}.button-vue__text[data-v-29ac0caf]{font-weight:var(--font-weight-element, bold);margin-bottom:1px;padding:2px 0;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.button-vue--icon-only[data-v-29ac0caf]{--button-padding: clamp(var(--default-grid-baseline), var(--button-radius), calc(var(--default-grid-baseline) * 4));line-height:1;width:var(--button-size)!important}.button-vue--text-only[data-v-29ac0caf]{--button-padding: var(--button-padding-default)}.button-vue--text-only .button-vue__text[data-v-29ac0caf]{margin-inline:4px}.button-vue--wide[data-v-29ac0caf]{width:100%}.button-vue[data-v-29ac0caf]:focus-visible{outline:2px solid var(--color-main-text)!important;box-shadow:0 0 0 4px var(--color-main-background)!important}.button-vue:focus-visible.button-vue--vue-tertiary-on-primary[data-v-29ac0caf]{outline:2px solid var(--color-primary-element-text);border-radius:var(--border-radius-element, var(--border-radius));background-color:transparent}.button-vue--vue-primary[data-v-29ac0caf]{background-color:var(--color-primary-element);border-color:var(--color-primary-element-hover);color:var(--color-primary-element-text)}.button-vue--vue-primary[data-v-29ac0caf]:hover:not(:disabled){background-color:var(--color-primary-element-hover)}.button-vue--vue-primary[data-v-29ac0caf]:active{background-color:var(--color-primary-element)}.button-vue--vue-secondary[data-v-29ac0caf]{background-color:var(--color-primary-element-light);border-color:var(--color-primary-element-light-hover);color:var(--color-primary-element-light-text)}.button-vue--vue-secondary[data-v-29ac0caf]:hover:not(:disabled){color:var(--color-primary-element-light-text);background-color:var(--color-primary-element-light-hover)}.button-vue--tertiary[data-v-29ac0caf],.button-vue--vue-tertiary[data-v-29ac0caf]{background-color:transparent;border-color:transparent;color:var(--color-main-text)}.button-vue--tertiary[data-v-29ac0caf]:hover:not(:disabled),.button-vue--vue-tertiary[data-v-29ac0caf]:hover:not(:disabled){background-color:var(--color-background-hover)}.button-vue--tertiary[data-v-29ac0caf]:not(.button-vue--legacy34):hover:not(:disabled){background-color:color-mix(in srgb,var(--color-primary-element) 8%,transparent)}.button-vue--vue-tertiary-no-background[data-v-29ac0caf]:hover:not(:disabled){background-color:transparent}.button-vue--vue-tertiary-on-primary[data-v-29ac0caf]{color:var(--color-primary-element-text)}.button-vue--vue-tertiary-on-primary[data-v-29ac0caf]:hover:not(:disabled){background-color:transparent}.button-vue--vue-success[data-v-29ac0caf]{background-color:var(--color-success);border-color:var(--color-success-hover);color:var(--color-success-text)}.button-vue--vue-success[data-v-29ac0caf]:hover:not(:disabled){background-color:var(--color-success-hover)}.button-vue--vue-success[data-v-29ac0caf]:active{background-color:var(--color-success)}.button-vue--vue-warning[data-v-29ac0caf]{background-color:var(--color-warning);border-color:var(--color-warning-hover);color:var(--color-warning-text)}.button-vue--vue-warning[data-v-29ac0caf]:hover:not(:disabled){background-color:var(--color-warning-hover)}.button-vue--vue-warning[data-v-29ac0caf]:active{background-color:var(--color-warning)}.button-vue--vue-error[data-v-29ac0caf]{background-color:var(--color-error);border-color:var(--color-error-hover);color:var(--color-error-text)}.button-vue--vue-error[data-v-29ac0caf]:hover:not(:disabled){background-color:var(--color-error-hover)}.button-vue--vue-error[data-v-29ac0caf]:active{background-color:var(--color-error)}.button-vue--legacy[data-v-29ac0caf]{--button-inner-size: var(--button-size);border:none;padding-block:0}.button-vue--legacy.button-vue--vue-error[data-v-29ac0caf],.button-vue--legacy.button-vue--vue-success[data-v-29ac0caf],.button-vue--legacy.button-vue--vue-warning[data-v-29ac0caf]{color:#fff}.material-design-icon[data-v-b7a160c7]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}li.action[data-v-b7a160c7]:hover,li.action.active[data-v-b7a160c7]{border-radius:6px;padding:0}li.action[data-v-b7a160c7]:hover{background-color:var(--color-background-hover)}.action-link[data-v-b7a160c7]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2);box-sizing:border-box;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-element, normal);font-size:var(--default-font-size);line-height:var(--default-clickable-area)}.action-link>span[data-v-b7a160c7]{cursor:pointer;white-space:nowrap}.action-link__icon[data-v-b7a160c7]{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px;background-repeat:no-repeat}.action-link[data-v-b7a160c7] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);align-self:flex-start;opacity:1}.action-link[data-v-b7a160c7] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-link__longtext-wrapper[data-v-b7a160c7],.action-link__longtext[data-v-b7a160c7]{max-width:220px;line-height:1.6em;padding:calc((var(--default-clickable-area) - 1.6em) / 2) 0;cursor:pointer;text-align:start;overflow:hidden;text-overflow:ellipsis}.action-link__longtext[data-v-b7a160c7]{cursor:pointer;white-space:pre-wrap!important}.action-link__name[data-v-b7a160c7]{font-weight:var(--font-weight-heading, bold);text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:100%;display:block}.action-link__description[data-v-b7a160c7]{display:block;white-space:pre-wrap;font-size:var(--font-size-small);font-weight:var(--font-weight-default, normal);line-height:var(--default-line-height);color:var(--color-text-maxcontrast);cursor:pointer}.action-link__menu-icon[data-v-b7a160c7]{margin-inline:auto calc((var(--default-clickable-area) - 16px) / 2 * -1)}.material-design-icon[data-v-a3f0f3fe]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}li.action[data-v-a3f0f3fe]:hover,li.action.active[data-v-a3f0f3fe]{border-radius:6px;padding:0}li.action[data-v-a3f0f3fe]:hover{background-color:var(--color-background-hover)}.action--disabled[data-v-a3f0f3fe]{pointer-events:none;opacity:.5}.action--disabled[data-v-a3f0f3fe]:hover,.action--disabled[data-v-a3f0f3fe]:focus{cursor:default;opacity:.5}.action--disabled *[data-v-a3f0f3fe]{opacity:1!important}.action-radio[data-v-a3f0f3fe]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2);box-sizing:border-box;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-element, normal);font-size:var(--default-font-size);line-height:var(--default-clickable-area)}.action-radio>span[data-v-a3f0f3fe]{cursor:pointer;white-space:nowrap}.action-radio__icon[data-v-a3f0f3fe]{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px;background-repeat:no-repeat}.action-radio[data-v-a3f0f3fe] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);align-self:flex-start;opacity:1}.action-radio[data-v-a3f0f3fe] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-radio__longtext-wrapper[data-v-a3f0f3fe],.action-radio__longtext[data-v-a3f0f3fe]{max-width:220px;line-height:1.6em;padding:calc((var(--default-clickable-area) - 1.6em) / 2) 0;cursor:pointer;text-align:start;overflow:hidden;text-overflow:ellipsis}.action-radio__longtext[data-v-a3f0f3fe]{cursor:pointer;white-space:pre-wrap!important}.action-radio__name[data-v-a3f0f3fe]{font-weight:var(--font-weight-heading, bold);text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:100%;display:block}.action-radio__description[data-v-a3f0f3fe]{display:block;white-space:pre-wrap;font-size:var(--font-size-small);font-weight:var(--font-weight-default, normal);line-height:var(--default-line-height);color:var(--color-text-maxcontrast);cursor:pointer}.action-radio__menu-icon[data-v-a3f0f3fe]{margin-inline:auto calc((var(--default-clickable-area) - 16px) / 2 * -1)}.action[data-v-a3f0f3fe]:has(:focus-visible){outline:2px solid currentColor}.action-radio__icon[data-v-a3f0f3fe]{color:var(--color-primary-element)}.action-radio__input[data-v-a3f0f3fe]{width:20px;height:20px;margin:auto;position:absolute;z-index:-1;opacity:0!important}.material-design-icon[data-v-4dae1ff7]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}li.action[data-v-4dae1ff7]:hover,li.action.active[data-v-4dae1ff7]{border-radius:6px;padding:0}li.action[data-v-4dae1ff7]:hover{background-color:var(--color-background-hover)}.action-router[data-v-4dae1ff7]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2);box-sizing:border-box;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-element, normal);font-size:var(--default-font-size);line-height:var(--default-clickable-area)}.action-router>span[data-v-4dae1ff7]{cursor:pointer;white-space:nowrap}.action-router__icon[data-v-4dae1ff7]{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px;background-repeat:no-repeat}.action-router[data-v-4dae1ff7] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);align-self:flex-start;opacity:1}.action-router[data-v-4dae1ff7] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-router__longtext-wrapper[data-v-4dae1ff7],.action-router__longtext[data-v-4dae1ff7]{max-width:220px;line-height:1.6em;padding:calc((var(--default-clickable-area) - 1.6em) / 2) 0;cursor:pointer;text-align:start;overflow:hidden;text-overflow:ellipsis}.action-router__longtext[data-v-4dae1ff7]{cursor:pointer;white-space:pre-wrap!important}.action-router__name[data-v-4dae1ff7]{font-weight:var(--font-weight-heading, bold);text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:100%;display:block}.action-router__description[data-v-4dae1ff7]{display:block;white-space:pre-wrap;font-size:var(--font-size-small);font-weight:var(--font-weight-default, normal);line-height:var(--default-line-height);color:var(--color-text-maxcontrast);cursor:pointer}.action-router__menu-icon[data-v-4dae1ff7]{margin-inline:auto calc((var(--default-clickable-area) - 16px) / 2 * -1)}.action--disabled[data-v-4dae1ff7]{pointer-events:none;opacity:.5}.action--disabled[data-v-4dae1ff7]:hover,.action--disabled[data-v-4dae1ff7]:focus{cursor:default;opacity:.5}.action--disabled *[data-v-4dae1ff7]{opacity:1!important}.material-design-icon[data-v-38a26e61]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.action-items[data-v-38a26e61]{display:flex;align-items:center;gap:calc((var(--default-clickable-area) - 16px) / 2 / 2)}.action-item[data-v-38a26e61]{--open-background-color: var(--color-background-hover, $action-background-hover);position:relative;display:inline-block}.action-item.action-item--primary[data-v-38a26e61]{--open-background-color: var(--color-primary-element-hover)}.action-item.action-item--secondary[data-v-38a26e61]{--open-background-color: var(--color-primary-element-light-hover)}.action-item.action-item--error[data-v-38a26e61]{--open-background-color: var(--color-error-hover)}.action-item.action-item--warning[data-v-38a26e61]{--open-background-color: var(--color-warning-hover)}.action-item.action-item--success[data-v-38a26e61]{--open-background-color: var(--color-success-hover)}.action-item.action-item--tertiary-no-background[data-v-38a26e61]{--open-background-color: transparent}.action-item.action-item--open .action-item__menutoggle[data-v-38a26e61]{background-color:var(--open-background-color)}.action-item__menutoggle__icon[data-v-38a26e61]{width:20px;height:20px;object-fit:contain}.v-popper--theme-nc-popover-8.v-popper__popper.action-item__popper .v-popper__wrapper{border-radius:var(--border-radius-large)}.v-popper--theme-nc-popover-8.v-popper__popper.action-item__popper .v-popper__wrapper .v-popper__inner{border-radius:var(--border-radius-large);padding:4px;max-height:calc(100vh - var(--header-height));overflow:auto}._material-design-icon_AAwhR{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._ncPopover_6PjkA.v-popper--theme-nc-popover-8 .resize-observer{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;border:none;background-color:transparent;pointer-events:none;display:block;overflow:hidden;opacity:0}._ncPopover_6PjkA.v-popper--theme-nc-popover-8 .resize-observer object{display:block;position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1}._ncPopover_6PjkA.v-popper--theme-nc-popover-8.v-popper__popper{z-index:100000;top:0;left:0;display:block!important}._ncPopover_6PjkA.v-popper--theme-nc-popover-8.v-popper__popper .v-popper__wrapper{box-shadow:0 1px 10px var(--color-box-shadow);border-radius:var(--border-radius-large)}._ncPopover_6PjkA.v-popper--theme-nc-popover-8.v-popper__popper .v-popper__inner{padding:0;color:var(--color-main-text);border-radius:var(--border-radius-large);overflow:hidden;background:var(--color-main-background)}._ncPopover_6PjkA.v-popper--theme-nc-popover-8.v-popper__popper .v-popper__arrow-container{position:absolute;z-index:1;width:0;height:0;border-style:solid;border-color:transparent;border-width:10px}._ncPopover_6PjkA.v-popper--theme-nc-popover-8.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-container{bottom:-9px;border-bottom-width:0;border-top-color:var(--color-main-background)}._ncPopover_6PjkA.v-popper--theme-nc-popover-8.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-container{top:-9px;border-top-width:0;border-bottom-color:var(--color-main-background)}._ncPopover_6PjkA.v-popper--theme-nc-popover-8.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-container{left:-9px;border-left-width:0;border-right-color:var(--color-main-background)}._ncPopover_6PjkA.v-popper--theme-nc-popover-8.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-container{right:-9px;border-right-width:0;border-left-color:var(--color-main-background)}._ncPopover_6PjkA.v-popper--theme-nc-popover-8.v-popper__popper[aria-hidden=true]{visibility:hidden;transition:opacity var(--animation-quick),visibility var(--animation-quick);opacity:0}._ncPopover_6PjkA.v-popper--theme-nc-popover-8.v-popper__popper[aria-hidden=false]{visibility:visible;transition:opacity var(--animation-quick);opacity:1}.material-design-icon[data-v-3e2324b7]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.action-separator[data-v-3e2324b7]{height:0;margin:5px 10px 5px 15px;border-bottom:1px solid var(--color-border-dark);cursor:default}.material-design-icon[data-v-2fe7eb92]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}li.action[data-v-2fe7eb92]:hover,li.action.active[data-v-2fe7eb92]{border-radius:6px;padding:0}li.action[data-v-2fe7eb92]:hover{background-color:var(--color-background-hover)}.action-text[data-v-2fe7eb92]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2);box-sizing:border-box;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-element, normal);font-size:var(--default-font-size);line-height:var(--default-clickable-area)}.action-text>span[data-v-2fe7eb92]{cursor:pointer;white-space:nowrap}.action-text__icon[data-v-2fe7eb92]{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px;background-repeat:no-repeat}.action-text[data-v-2fe7eb92] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);align-self:flex-start;opacity:1}.action-text[data-v-2fe7eb92] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-text__longtext-wrapper[data-v-2fe7eb92],.action-text__longtext[data-v-2fe7eb92]{max-width:220px;line-height:1.6em;padding:calc((var(--default-clickable-area) - 1.6em) / 2) 0;cursor:pointer;text-align:start;overflow:hidden;text-overflow:ellipsis}.action-text__longtext[data-v-2fe7eb92]{cursor:pointer;white-space:pre-wrap!important}.action-text__name[data-v-2fe7eb92]{font-weight:var(--font-weight-heading, bold);text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:100%;display:block}.action-text__description[data-v-2fe7eb92]{display:block;white-space:pre-wrap;font-size:var(--font-size-small);font-weight:var(--font-weight-default, normal);line-height:var(--default-line-height);color:var(--color-text-maxcontrast);cursor:pointer}.action-text__menu-icon[data-v-2fe7eb92]{margin-inline:auto calc((var(--default-clickable-area) - 16px) / 2 * -1)}.action--disabled[data-v-2fe7eb92]{pointer-events:none;opacity:.5}.action--disabled[data-v-2fe7eb92]:hover,.action--disabled[data-v-2fe7eb92]:focus{cursor:default;opacity:.5}.action--disabled *[data-v-2fe7eb92]{opacity:1!important}.action-text[data-v-2fe7eb92],.action-text span[data-v-2fe7eb92]{cursor:default}.material-design-icon[data-v-cf6c5275]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}button[data-v-cf6c5275]:not(.button-vue),input[data-v-cf6c5275]:not([type=range]),textarea[data-v-cf6c5275]{margin:0;padding:7px 6px;cursor:text;color:var(--color-text-lighter);border:1px solid var(--color-border-dark);border-radius:var(--border-radius);outline:none;background-color:var(--color-main-background);font-size:13px}button[data-v-cf6c5275]:not(.button-vue):not(:disabled):not(.primary):hover,button[data-v-cf6c5275]:not(.button-vue):not(:disabled):not(.primary):focus,button:not(.button-vue):not(:disabled):not(.primary).active[data-v-cf6c5275],input[data-v-cf6c5275]:not([type=range]):not(:disabled):not(.primary):hover,input[data-v-cf6c5275]:not([type=range]):not(:disabled):not(.primary):focus,input:not([type=range]):not(:disabled):not(.primary).active[data-v-cf6c5275],textarea[data-v-cf6c5275]:not(:disabled):not(.primary):hover,textarea[data-v-cf6c5275]:not(:disabled):not(.primary):focus,textarea:not(:disabled):not(.primary).active[data-v-cf6c5275]{border-color:var(--color-primary-element);outline:none}button[data-v-cf6c5275]:not(.button-vue):not(:disabled):not(.primary):active,input[data-v-cf6c5275]:not([type=range]):not(:disabled):not(.primary):active,textarea[data-v-cf6c5275]:not(:disabled):not(.primary):active{color:var(--color-text-light);outline:none;background-color:var(--color-main-background)}button[data-v-cf6c5275]:not(.button-vue):disabled,input[data-v-cf6c5275]:not([type=range]):disabled,textarea[data-v-cf6c5275]:disabled{cursor:default;opacity:.5;color:var(--color-text-maxcontrast);background-color:var(--color-background-dark)}button[data-v-cf6c5275]:not(.button-vue):required,input[data-v-cf6c5275]:not([type=range]):required,textarea[data-v-cf6c5275]:required{box-shadow:none}button[data-v-cf6c5275]:not(.button-vue):invalid,input[data-v-cf6c5275]:not([type=range]):invalid,textarea[data-v-cf6c5275]:invalid{border-color:var(--color-border-error, var(--color-error));box-shadow:none!important}button:not(.button-vue).primary[data-v-cf6c5275],input:not([type=range]).primary[data-v-cf6c5275],textarea.primary[data-v-cf6c5275]{cursor:pointer;color:var(--color-primary-element-text);border-color:var(--color-primary-element);background-color:var(--color-primary-element)}button:not(.button-vue).primary[data-v-cf6c5275]:not(:disabled):hover,button:not(.button-vue).primary[data-v-cf6c5275]:not(:disabled):focus,button:not(.button-vue).primary[data-v-cf6c5275]:not(:disabled):active,input:not([type=range]).primary[data-v-cf6c5275]:not(:disabled):hover,input:not([type=range]).primary[data-v-cf6c5275]:not(:disabled):focus,input:not([type=range]).primary[data-v-cf6c5275]:not(:disabled):active,textarea.primary[data-v-cf6c5275]:not(:disabled):hover,textarea.primary[data-v-cf6c5275]:not(:disabled):focus,textarea.primary[data-v-cf6c5275]:not(:disabled):active{border-color:var(--color-primary-element-light);background-color:var(--color-primary-element-light)}button:not(.button-vue).primary[data-v-cf6c5275]:not(:disabled):active,input:not([type=range]).primary[data-v-cf6c5275]:not(:disabled):active,textarea.primary[data-v-cf6c5275]:not(:disabled):active{color:var(--color-primary-element-text-dark)}button:not(.button-vue).primary[data-v-cf6c5275]:disabled,input:not([type=range]).primary[data-v-cf6c5275]:disabled,textarea.primary[data-v-cf6c5275]:disabled{cursor:default;color:var(--color-primary-element-text-dark);background-color:var(--color-primary-element)}li.action[data-v-cf6c5275]:hover,li.action.active[data-v-cf6c5275]{border-radius:6px;padding:0}li.action[data-v-cf6c5275]:hover{background-color:var(--color-background-hover)}.action--disabled[data-v-cf6c5275]{pointer-events:none;opacity:.5}.action--disabled[data-v-cf6c5275]:hover,.action--disabled[data-v-cf6c5275]:focus{cursor:default;opacity:.5}.action--disabled *[data-v-cf6c5275]{opacity:1!important}.action-text-editable[data-v-cf6c5275]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-default, normal);line-height:var(--default-clickable-area)}.action-text-editable>span[data-v-cf6c5275]{cursor:pointer;white-space:nowrap}.action-text-editable__icon[data-v-cf6c5275]{min-width:0;min-height:0;padding:calc(var(--default-clickable-area) / 2) 0 calc(var(--default-clickable-area) / 2) var(--default-clickable-area);background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px}.action-text-editable[data-v-cf6c5275] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);align-self:flex-start;margin-top:var(--default-grid-baseline);opacity:1}.action-text-editable[data-v-cf6c5275] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-text-editable__form[data-v-cf6c5275]{display:flex;flex:1 1 auto;flex-direction:column;position:relative;margin:4px 0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2)}.action-text-editable__submit[data-v-cf6c5275]{position:absolute;inset-inline-start:0;top:auto;width:1px;height:1px;overflow:hidden;z-index:-1;opacity:0}.action-text-editable__label[data-v-cf6c5275]{display:flex;align-items:center;justify-content:center;position:absolute;inset-inline-end:calc((var(--default-clickable-area) - 16px) / 2 + 1px);bottom:1px;width:calc(var(--default-clickable-area) - 8px);height:calc(var(--default-clickable-area) - 8px);box-sizing:border-box;margin:0;padding:7px 6px;border:0;border-radius:50%;background-color:var(--color-main-background);background-clip:padding-box}.action-text-editable__label[data-v-cf6c5275],.action-text-editable__label *[data-v-cf6c5275]{cursor:pointer}.action-text-editable__textarea[data-v-cf6c5275]{flex:1 1 auto;color:inherit;border-color:var(--color-border-maxcontrast);min-height:calc(var(--default-clickable-area) * 2 - 8px);max-height:calc(var(--default-clickable-area) * 3 - 8px);min-width:calc(var(--default-clickable-area) * 4);width:100%!important;margin:0}.action-text-editable__textarea[data-v-cf6c5275]:disabled{cursor:default}.action-text-editable__textarea:not(:active):not(:hover):not(:focus):invalid+.action-text-editable__label[data-v-cf6c5275]{background-color:var(--color-error)}.action-text-editable__textarea:not(:active):not(:hover):not(:focus):not(:disabled)+.action-text-editable__label[data-v-cf6c5275]:active,.action-text-editable__textarea:not(:active):not(:hover):not(:focus):not(:disabled)+.action-text-editable__label[data-v-cf6c5275]:hover,.action-text-editable__textarea:not(:active):not(:hover):not(:focus):not(:disabled)+.action-text-editable__label[data-v-cf6c5275]:focus{background-color:var(--color-primary-element);color:var(--color-primary-element-text)}.action-text-editable__textarea:active:not(:disabled)+.action-text-editable__label[data-v-cf6c5275],.action-text-editable__textarea:hover:not(:disabled)+.action-text-editable__label[data-v-cf6c5275],.action-text-editable__textarea:focus:not(:disabled)+.action-text-editable__label[data-v-cf6c5275]{z-index:2;border-color:var(--color-primary-element);border-inline-start-color:transparent}li:last-child>.action-text-editable[data-v-cf6c5275]{margin-bottom:calc((var(--default-clickable-area) - 16px) / 2 - 4px)}li:first-child>.action-text-editable[data-v-cf6c5275]{margin-top:calc((var(--default-clickable-area) - 16px) / 2 - 4px)}.material-design-icon[data-v-d0b1a8bc]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-details-toggle[data-v-d0b1a8bc]{position:sticky;width:var(--default-clickable-area);height:var(--default-clickable-area);padding:calc((var(--default-clickable-area) - 16px) / 2);cursor:pointer;opacity:.6;transform:rotate(180deg);background-color:var(--color-main-background);z-index:2000;top:var(--app-navigation-padding);inset-inline-start:calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2)}.app-details-toggle--mobile[data-v-d0b1a8bc]{inset-inline-start:var(--app-navigation-padding)}.app-details-toggle[data-v-d0b1a8bc]:active,.app-details-toggle[data-v-d0b1a8bc]:hover,.app-details-toggle[data-v-d0b1a8bc]:focus{opacity:1}.material-design-icon[data-v-42ca73dd]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-content[data-v-42ca73dd]{position:initial;z-index:1000;flex-basis:100vw;height:100%;margin:0!important;background-color:var(--color-main-background);min-width:0}.app-content[data-v-42ca73dd]:not(.app-content--has-list){overflow:auto}.app-content-wrapper[data-v-42ca73dd]{position:relative;width:100%;height:100%}.app-content-wrapper--no-split.app-content-wrapper--show-list[data-v-42ca73dd] .app-content-list{display:flex}.app-content-wrapper--no-split.app-content-wrapper--show-list[data-v-42ca73dd] .app-content-details,.app-content-wrapper--no-split.app-content-wrapper--show-details[data-v-42ca73dd] .app-content-list{display:none}.app-content-wrapper--no-split.app-content-wrapper--show-details[data-v-42ca73dd] .app-content-details{display:block}[data-v-42ca73dd] .splitpanes.default-theme .app-content-list{max-width:none;scrollbar-width:auto}[data-v-42ca73dd] .splitpanes.default-theme .splitpanes__pane{background-color:transparent;transition:none}[data-v-42ca73dd] .splitpanes.default-theme .splitpanes__pane-list{min-width:300px;position:sticky}@media only screen and (width<1024px){[data-v-42ca73dd] .splitpanes.default-theme .splitpanes__pane-list{display:none}}[data-v-42ca73dd] .splitpanes.default-theme .splitpanes__pane-details{overflow-y:auto}@media only screen and (width<1024px){[data-v-42ca73dd] .splitpanes.default-theme .splitpanes__pane-details{min-width:100%}}[data-v-42ca73dd] .splitpanes.default-theme .splitpanes__splitter{background-color:var(--color-main-background)}[data-v-42ca73dd] .splitpanes.default-theme .splitpanes__splitter:before,[data-v-42ca73dd] .splitpanes.default-theme .splitpanes__splitter:after{background-color:var(--color-border)}[data-v-42ca73dd] .splitpanes.default-theme.splitpanes--vertical .splitpanes__splitter{border-left:1px solid var(--color-border)}[data-v-42ca73dd] .splitpanes.default-theme.splitpanes--horizontal .splitpanes__splitter{border-top:1px solid var(--color-border)}.app-content-wrapper--show-list[data-v-42ca73dd] .app-content-list{max-width:none}.app-content-wrapper__list[data-v-42ca73dd]{height:100%}.splitpanes{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;height:100%}.splitpanes--vertical{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.splitpanes--horizontal{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.splitpanes--dragging *{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.splitpanes__pane{width:100%;height:100%;overflow:hidden}.splitpanes--vertical .splitpanes__pane{-webkit-transition:width .2s ease-out;-o-transition:width .2s ease-out;transition:width .2s ease-out}.splitpanes--horizontal .splitpanes__pane{-webkit-transition:height .2s ease-out;-o-transition:height .2s ease-out;transition:height .2s ease-out}.splitpanes--dragging .splitpanes__pane{-webkit-transition:none;-o-transition:none;transition:none}.splitpanes__splitter{-ms-touch-action:none;touch-action:none}.splitpanes--vertical>.splitpanes__splitter{min-width:1px;cursor:col-resize}.splitpanes--horizontal>.splitpanes__splitter{min-height:1px;cursor:row-resize}.splitpanes.default-theme .splitpanes__pane{background-color:#f2f2f2}.splitpanes.default-theme .splitpanes__splitter{background-color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;-ms-flex-negative:0;flex-shrink:0}.splitpanes.default-theme .splitpanes__splitter:before,.splitpanes.default-theme .splitpanes__splitter:after{content:"";position:absolute;top:50%;left:50%;background-color:#00000026;-webkit-transition:background-color .3s;-o-transition:background-color .3s;transition:background-color .3s}.splitpanes.default-theme .splitpanes__splitter:hover:before,.splitpanes.default-theme .splitpanes__splitter:hover:after{background-color:#00000040}.splitpanes.default-theme .splitpanes__splitter:first-child{cursor:auto}.default-theme.splitpanes .splitpanes .splitpanes__splitter{z-index:1}.default-theme.splitpanes--vertical>.splitpanes__splitter,.default-theme .splitpanes--vertical>.splitpanes__splitter{width:7px;border-left:1px solid #eee;margin-left:-1px}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);width:1px;height:30px}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:before{margin-left:-2px}.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{margin-left:1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter,.default-theme .splitpanes--horizontal>.splitpanes__splitter{height:7px;border-top:1px solid #eee;margin-top:-1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translate(-50%);width:30px;height:1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before{margin-top:-2px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{margin-top:1px}.app-navigation,.app-content{--app-navigation-padding: calc(var(--default-grid-baseline, 4px) * 2)}.material-design-icon[data-v-632c552d]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation[data-v-632c552d]{--color-text-maxcontrast: var(--color-text-maxcontrast-background-blur, var(--color-text-maxcontrast-default));transition:transform var(--animation-quick),margin var(--animation-quick);width:300px;--app-navigation-max-width: calc(100vw - (var(--app-navigation-padding) + var(--default-clickable-area) + var(--default-grid-baseline)));max-width:var(--app-navigation-max-width);position:relative;top:0;inset-inline-start:0;padding:0;z-index:1800;height:100%;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;flex-grow:0;flex-shrink:0;background-color:transparent}.app-navigation--legacy[data-v-632c552d]{background-color:var(--color-main-background-blur, var(--color-main-background));-webkit-backdrop-filter:var(--filter-background-blur, none);backdrop-filter:var(--filter-background-blur, none)}.app-navigation--close[data-v-632c552d]{margin-inline-start:calc(-1*min(300px,var(--app-navigation-max-width)))}.app-navigation__search[data-v-632c552d]{width:100%}.app-navigation__body[data-v-632c552d]{overflow-y:scroll}.app-navigation__content>ul[data-v-632c552d]{position:relative;width:100%;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;display:flex;flex-direction:column;gap:var(--default-grid-baseline, 4px);padding:var(--app-navigation-padding)}.app-navigation .app-navigation__list[data-v-632c552d]{height:100%}.app-navigation__body--no-list[data-v-632c552d]{flex:1 1 auto;overflow:auto;height:100%}.app-navigation__content[data-v-632c552d]{height:100%;display:flex;flex-direction:column}[data-themes*=highcontrast] .app-navigation[data-v-632c552d]{border-inline-end:1px solid var(--color-border)}@media only screen and (width<1024px){.app-navigation[data-v-632c552d]{position:absolute;border-inline-end:1px solid var(--color-border);background-color:var(--color-main-background-blur, var(--color-main-background));-webkit-backdrop-filter:var(--filter-background-blur, none);backdrop-filter:var(--filter-background-blur, none)}}@media only screen and (max-width:512px){.app-navigation[data-v-632c552d]{z-index:1400}}.material-design-icon[data-v-058e6060]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-list[data-v-058e6060]{position:relative;width:100%;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;display:flex;flex-direction:column;gap:var(--default-grid-baseline, 4px);padding:var(--app-navigation-padding)}.material-design-icon[data-v-d28016dd]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-toggle-wrapper[data-v-d28016dd]{position:absolute;top:var(--app-navigation-padding);inset-inline-end:calc(0px - var(--app-navigation-padding));margin-inline-end:calc(-1 * var(--default-clickable-area))}button.app-navigation-toggle[data-v-d28016dd]{background-color:var(--color-main-background)}.material-design-icon[data-v-e6a6c621]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-caption[data-v-e6a6c621]{display:flex;justify-content:space-between}.app-navigation-caption--heading[data-v-e6a6c621]{padding:var(--app-navigation-padding)}.app-navigation-caption--heading[data-v-e6a6c621]:not(:first-child):not(:last-child){padding:0 var(--app-navigation-padding)}.app-navigation-caption__name[data-v-e6a6c621]{font-weight:var(--font-weight-heading, bold);color:var(--color-main-text);font-size:var(--default-font-size);line-height:var(--default-clickable-area);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-shadow:none!important;flex-shrink:1;padding-block:0;padding-inline:calc(var(--default-grid-baseline, 4px) * 2) 0;margin-top:0;margin-bottom:var(--default-grid-baseline)}.app-navigation-caption__actions[data-v-e6a6c621]{flex:0 0 var(--default-clickable-area)}.app-navigation-caption[data-v-e6a6c621]:not(:first-child){margin-top:calc(var(--default-clickable-area) / 2)}.material-design-icon[data-v-04a313f4]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-entry__icon-bullet[data-v-04a313f4]{display:block;padding:calc((var(--default-clickable-area) - 16px) / 2 + 1px)}.app-navigation-entry__icon-bullet div[data-v-04a313f4]{width:14px;height:14px;cursor:pointer;transition:background .1s ease-in-out;border:none;border-radius:50%}.material-design-icon[data-v-3c547cb0]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.icon-collapse[data-v-3c547cb0]{position:relative;inset-inline-end:0}.icon-collapse[data-v-3c547cb0]:hover{background-color:var(--color-background-dark)!important}.icon-collapse--active[data-v-3c547cb0]:hover{background-color:var(--color-primary-element)!important}.material-design-icon[data-v-cb63e0d5]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-entry[data-v-cb63e0d5]{position:relative;display:flex;flex-shrink:0;flex-wrap:wrap;box-sizing:border-box;width:100%;min-height:var(--default-clickable-area);transition:background-color var(--animation-quick) ease-in-out;transition:background-color .2s ease-in-out;border-radius:var(--border-radius-element, var(--border-radius-pill))}.app-navigation-entry-wrapper[data-v-cb63e0d5]{position:relative;display:flex;flex-shrink:0;flex-wrap:wrap;box-sizing:border-box;width:100%}.app-navigation-entry-wrapper.app-navigation-entry--collapsible:not(.app-navigation-entry--opened)>ul[data-v-cb63e0d5]{display:none}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-cb63e0d5]{background-color:color-mix(in srgb,var(--color-primary-element) 16%,transparent)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-cb63e0d5]:hover{background-color:color-mix(in srgb,var(--color-primary-element) 22%,transparent)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-cb63e0d5],.app-navigation-entry:not(.app-navigation-entry--legacy).active:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-cb63e0d5]{color:var(--color-main-text)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-cb63e0d5]:not(.app-navigation-entry--editing):before{content:"";position:absolute;inset-block:calc(var(--default-grid-baseline, 4px) * 2);inset-inline-start:0;width:3px;background-color:var(--color-primary-element);border-radius:999px;animation:nc-nav-stripe-in-cb63e0d5 var(--animation-quick, .2s) ease-out}.app-navigation-entry.app-navigation-entry--legacy.active[data-v-cb63e0d5]{background-color:var(--color-primary-element)!important}.app-navigation-entry.app-navigation-entry--legacy.active[data-v-cb63e0d5]:hover{background-color:var(--color-primary-element-hover)!important}.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry-link[data-v-cb63e0d5],.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry-button[data-v-cb63e0d5]{color:var(--color-primary-element-text)!important}.app-navigation-entry[data-v-cb63e0d5]:focus-within,.app-navigation-entry[data-v-cb63e0d5]:hover{background-color:var(--color-background-hover)}.app-navigation-entry[data-v-cb63e0d5]:not(.app-navigation-entry--legacy):focus-within,.app-navigation-entry[data-v-cb63e0d5]:not(.app-navigation-entry--legacy):hover{background-color:color-mix(in srgb,var(--color-primary-element) 8%,transparent)}.app-navigation-entry.active .app-navigation-entry__children[data-v-cb63e0d5],.app-navigation-entry:focus-within .app-navigation-entry__children[data-v-cb63e0d5],.app-navigation-entry:hover .app-navigation-entry__children[data-v-cb63e0d5]{background-color:var(--color-main-background)}.app-navigation-entry.active .app-navigation-entry__utils .app-navigation-entry__actions[data-v-cb63e0d5],.app-navigation-entry.app-navigation-entry--deleted .app-navigation-entry__utils .app-navigation-entry__actions[data-v-cb63e0d5],.app-navigation-entry:focus .app-navigation-entry__utils .app-navigation-entry__actions[data-v-cb63e0d5],.app-navigation-entry:focus-within .app-navigation-entry__utils .app-navigation-entry__actions[data-v-cb63e0d5],.app-navigation-entry:hover .app-navigation-entry__utils .app-navigation-entry__actions[data-v-cb63e0d5]{position:relative;opacity:1;pointer-events:auto}.app-navigation-entry .app-navigation-entry__actions[data-v-cb63e0d5]:hover .button-vue{background-color:var(--color-background-dark)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active .app-navigation-entry__actions[data-v-cb63e0d5]:hover .button-vue{background-color:var(--color-background-dark)!important}.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry__actions[data-v-cb63e0d5]:hover .button-vue{background-color:var(--color-primary-element)!important}.app-navigation-entry.app-navigation-entry--deleted>ul[data-v-cb63e0d5]{display:none}.app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-cb63e0d5],.app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-cb63e0d5]{padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2)}.app-navigation-entry .app-navigation-entry-link[data-v-cb63e0d5],.app-navigation-entry .app-navigation-entry-button[data-v-cb63e0d5]{z-index:100;display:flex;overflow:hidden;flex:1 1 0;box-sizing:border-box;min-height:var(--default-clickable-area);padding:0;white-space:nowrap;color:var(--color-main-text);font-weight:var(--font-weight-element, 500);background-repeat:no-repeat;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px 16px;line-height:var(--default-clickable-area)}.app-navigation-entry .app-navigation-entry-link .app-navigation-entry-icon[data-v-cb63e0d5],.app-navigation-entry .app-navigation-entry-button .app-navigation-entry-icon[data-v-cb63e0d5]{display:flex;align-items:center;flex:0 0 var(--default-clickable-area);justify-content:center;width:var(--default-clickable-area);height:var(--default-clickable-area);background-size:16px 16px;background-repeat:no-repeat;background-position:calc((var(--default-clickable-area) - 16px) / 2) center}.app-navigation-entry .app-navigation-entry-link .app-navigation-entry__name[data-v-cb63e0d5],.app-navigation-entry .app-navigation-entry-button .app-navigation-entry__name[data-v-cb63e0d5]{overflow:hidden;max-width:100%;white-space:nowrap;text-overflow:ellipsis;font-weight:var(--font-weight-element, normal)}.app-navigation-entry .app-navigation-entry-link .editingContainer[data-v-cb63e0d5],.app-navigation-entry .app-navigation-entry-button .editingContainer[data-v-cb63e0d5]{width:calc(100% - var(--default-clickable-area));margin:auto}.app-navigation-entry .app-navigation-entry-link[data-v-cb63e0d5]:focus-visible,.app-navigation-entry .app-navigation-entry-button[data-v-cb63e0d5]:focus-visible{box-shadow:0 0 0 4px var(--color-main-background);outline:2px solid var(--color-main-text);border-radius:var(--border-radius-element, var(--border-radius-pill))}.app-navigation-entry__children[data-v-cb63e0d5]{--app-navigation-item-child-offset: 10px;position:relative;display:flex;flex:0 1 auto;flex-direction:column;width:100%;gap:var(--default-grid-baseline, 4px);padding-inline-start:var(--app-navigation-item-child-offset)}.app-navigation-entry__children .app-navigation-entry[data-v-cb63e0d5]{display:inline-flex;flex-wrap:wrap}.app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children[data-v-cb63e0d5]{--app-navigation-item-child-offset: 0}.app-navigation-entry__deleted[data-v-cb63e0d5]{display:inline-flex;flex:1 1 0;padding-inline-start:calc(var(--default-clickable-area) - (var(--default-clickable-area) - 16px) / 2)!important}.app-navigation-entry__deleted .app-navigation-entry__deleted-description[data-v-cb63e0d5]{position:relative;overflow:hidden;flex:1 1 0;white-space:nowrap;text-overflow:ellipsis;line-height:var(--default-clickable-area)}.app-navigation-entry__utils[data-v-cb63e0d5]{display:flex;min-width:var(--default-clickable-area);align-items:center;flex:0 1 auto;justify-content:flex-end}.app-navigation-entry__utils.app-navigation-entry__utils--display-actions .action-item.app-navigation-entry__actions[data-v-cb63e0d5]{position:relative;opacity:1;pointer-events:auto}.app-navigation-entry__utils .app-navigation-entry__counter-wrapper[data-v-cb63e0d5]{margin-inline-end:calc(var(--default-grid-baseline) * 2);display:flex;align-items:center;flex:0 1 auto}.app-navigation-entry__utils .action-item.app-navigation-entry__actions[data-v-cb63e0d5]{position:absolute;opacity:0;pointer-events:none}.app-navigation-entry--editing .app-navigation-entry-edit[data-v-cb63e0d5]{z-index:250;opacity:1}.app-navigation-entry--deleted .app-navigation-entry-deleted[data-v-cb63e0d5]{z-index:250;transform:translate(0)}.app-navigation-entry--pinned[data-v-cb63e0d5]{order:2;margin-top:auto}.app-navigation-entry--pinned~.app-navigation-entry--pinned[data-v-cb63e0d5]{margin-top:0}[data-themes*=highcontrast] .app-navigation-entry[data-v-cb63e0d5]:active{background-color:var(--color-primary-element-light-hover)!important}@keyframes nc-nav-stripe-in-cb63e0d5{0%{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:1}}.material-design-icon[data-v-f9a3bb35]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-input-confirm[data-v-f9a3bb35]{flex:1 0 100%;width:100%}.app-navigation-input-confirm form[data-v-f9a3bb35]{display:flex}.app-navigation-input-confirm__input[data-v-f9a3bb35]{height:34px;flex:1 1 100%;font-size:100%!important;margin:5px 5px 5px -8px!important;padding:7px!important}.app-navigation-input-confirm__input[data-v-f9a3bb35]:active,.app-navigation-input-confirm__input[data-v-f9a3bb35]:focus,.app-navigation-input-confirm__input[data-v-f9a3bb35]:hover{outline:none;background-color:var(--color-main-background);color:var(--color-main-text);border-color:var(--color-primary-element)}.app-navigation-input-confirm:not(.app-navigation-input-confirm--legacy) form[data-v-f9a3bb35]{align-items:center;gap:5px;padding-inline-end:5px}.app-navigation-input-confirm:not(.app-navigation-input-confirm--legacy) .app-navigation-input-confirm__input[data-v-f9a3bb35]{margin-inline-end:0!important}.app-navigation-input-confirm[data-v-f9a3bb35]:not(.app-navigation-input-confirm--legacy) .button-vue{width:34px!important;min-width:34px!important;height:34px!important;flex:0 0 34px}.material-design-icon[data-v-94ff8098]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.loading-icon[data-v-94ff8098]{overflow:hidden}.loading-icon svg[data-v-94ff8098]{animation:rotate var(--animation-duration, .8s) linear infinite}.material-design-icon[data-v-6f255eb3]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-new[data-v-6f255eb3]{display:block;padding:calc(var(--default-grid-baseline, 4px) * 2)}.app-navigation-new button[data-v-6f255eb3]{width:100%}.material-design-icon[data-v-258871fd]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-entry[data-v-258871fd]{position:relative;display:flex;flex-shrink:0;flex-wrap:wrap;box-sizing:border-box;width:100%;min-height:var(--default-clickable-area);transition:background-color var(--animation-quick) ease-in-out;transition:background-color .2s ease-in-out;border-radius:var(--border-radius-element, var(--border-radius-pill))}.app-navigation-entry-wrapper[data-v-258871fd]{position:relative;display:flex;flex-shrink:0;flex-wrap:wrap;box-sizing:border-box;width:100%}.app-navigation-entry-wrapper.app-navigation-entry--collapsible:not(.app-navigation-entry--opened)>ul[data-v-258871fd]{display:none}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-258871fd]{background-color:color-mix(in srgb,var(--color-primary-element) 16%,transparent)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-258871fd]:hover{background-color:color-mix(in srgb,var(--color-primary-element) 22%,transparent)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-258871fd],.app-navigation-entry:not(.app-navigation-entry--legacy).active:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-258871fd]{color:var(--color-main-text)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-258871fd]:not(.app-navigation-entry--editing):before{content:"";position:absolute;inset-block:calc(var(--default-grid-baseline, 4px) * 2);inset-inline-start:0;width:3px;background-color:var(--color-primary-element);border-radius:999px;animation:nc-nav-stripe-in-258871fd var(--animation-quick, .2s) ease-out}.app-navigation-entry.app-navigation-entry--legacy.active[data-v-258871fd]{background-color:var(--color-primary-element)!important}.app-navigation-entry.app-navigation-entry--legacy.active[data-v-258871fd]:hover{background-color:var(--color-primary-element-hover)!important}.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry-link[data-v-258871fd],.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry-button[data-v-258871fd]{color:var(--color-primary-element-text)!important}.app-navigation-entry[data-v-258871fd]:focus-within,.app-navigation-entry[data-v-258871fd]:hover{background-color:var(--color-background-hover)}.app-navigation-entry[data-v-258871fd]:not(.app-navigation-entry--legacy):focus-within,.app-navigation-entry[data-v-258871fd]:not(.app-navigation-entry--legacy):hover{background-color:color-mix(in srgb,var(--color-primary-element) 8%,transparent)}.app-navigation-entry.active .app-navigation-entry__children[data-v-258871fd],.app-navigation-entry:focus-within .app-navigation-entry__children[data-v-258871fd],.app-navigation-entry:hover .app-navigation-entry__children[data-v-258871fd]{background-color:var(--color-main-background)}.app-navigation-entry.active .app-navigation-entry__utils .app-navigation-entry__actions[data-v-258871fd],.app-navigation-entry.app-navigation-entry--deleted .app-navigation-entry__utils .app-navigation-entry__actions[data-v-258871fd],.app-navigation-entry:focus .app-navigation-entry__utils .app-navigation-entry__actions[data-v-258871fd],.app-navigation-entry:focus-within .app-navigation-entry__utils .app-navigation-entry__actions[data-v-258871fd],.app-navigation-entry:hover .app-navigation-entry__utils .app-navigation-entry__actions[data-v-258871fd]{position:relative;opacity:1;pointer-events:auto}.app-navigation-entry .app-navigation-entry__actions[data-v-258871fd]:hover .button-vue{background-color:var(--color-background-dark)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active .app-navigation-entry__actions[data-v-258871fd]:hover .button-vue{background-color:var(--color-background-dark)!important}.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry__actions[data-v-258871fd]:hover .button-vue{background-color:var(--color-primary-element)!important}.app-navigation-entry.app-navigation-entry--deleted>ul[data-v-258871fd]{display:none}.app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-258871fd],.app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-258871fd]{padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2)}.app-navigation-entry .app-navigation-entry-link[data-v-258871fd],.app-navigation-entry .app-navigation-entry-button[data-v-258871fd]{z-index:100;display:flex;overflow:hidden;flex:1 1 0;box-sizing:border-box;min-height:var(--default-clickable-area);padding:0;white-space:nowrap;color:var(--color-main-text);font-weight:var(--font-weight-element, 500);background-repeat:no-repeat;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px 16px;line-height:var(--default-clickable-area)}.app-navigation-entry .app-navigation-entry-link .app-navigation-entry-icon[data-v-258871fd],.app-navigation-entry .app-navigation-entry-button .app-navigation-entry-icon[data-v-258871fd]{display:flex;align-items:center;flex:0 0 var(--default-clickable-area);justify-content:center;width:var(--default-clickable-area);height:var(--default-clickable-area);background-size:16px 16px;background-repeat:no-repeat;background-position:calc((var(--default-clickable-area) - 16px) / 2) center}.app-navigation-entry .app-navigation-entry-link .app-navigation-entry__name[data-v-258871fd],.app-navigation-entry .app-navigation-entry-button .app-navigation-entry__name[data-v-258871fd]{overflow:hidden;max-width:100%;white-space:nowrap;text-overflow:ellipsis;font-weight:var(--font-weight-element, normal)}.app-navigation-entry .app-navigation-entry-link .editingContainer[data-v-258871fd],.app-navigation-entry .app-navigation-entry-button .editingContainer[data-v-258871fd]{width:calc(100% - var(--default-clickable-area));margin:auto}.app-navigation-entry .app-navigation-entry-link[data-v-258871fd]:focus-visible,.app-navigation-entry .app-navigation-entry-button[data-v-258871fd]:focus-visible{box-shadow:0 0 0 4px var(--color-main-background);outline:2px solid var(--color-main-text);border-radius:var(--border-radius-element, var(--border-radius-pill))}.app-navigation-entry__children[data-v-258871fd]{--app-navigation-item-child-offset: 10px;position:relative;display:flex;flex:0 1 auto;flex-direction:column;width:100%;gap:var(--default-grid-baseline, 4px);padding-inline-start:var(--app-navigation-item-child-offset)}.app-navigation-entry__children .app-navigation-entry[data-v-258871fd]{display:inline-flex;flex-wrap:wrap}.app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children[data-v-258871fd]{--app-navigation-item-child-offset: 0}.app-navigation-entry__deleted[data-v-258871fd]{display:inline-flex;flex:1 1 0;padding-inline-start:calc(var(--default-clickable-area) - (var(--default-clickable-area) - 16px) / 2)!important}.app-navigation-entry__deleted .app-navigation-entry__deleted-description[data-v-258871fd]{position:relative;overflow:hidden;flex:1 1 0;white-space:nowrap;text-overflow:ellipsis;line-height:var(--default-clickable-area)}.app-navigation-entry__utils[data-v-258871fd]{display:flex;min-width:var(--default-clickable-area);align-items:center;flex:0 1 auto;justify-content:flex-end}.app-navigation-entry__utils.app-navigation-entry__utils--display-actions .action-item.app-navigation-entry__actions[data-v-258871fd]{position:relative;opacity:1;pointer-events:auto}.app-navigation-entry__utils .app-navigation-entry__counter-wrapper[data-v-258871fd]{margin-inline-end:calc(var(--default-grid-baseline) * 2);display:flex;align-items:center;flex:0 1 auto}.app-navigation-entry__utils .action-item.app-navigation-entry__actions[data-v-258871fd]{position:absolute;opacity:0;pointer-events:none}.app-navigation-entry--editing .app-navigation-entry-edit[data-v-258871fd]{z-index:250;opacity:1}.app-navigation-entry--deleted .app-navigation-entry-deleted[data-v-258871fd]{z-index:250;transform:translate(0)}.app-navigation-entry--pinned[data-v-258871fd]{order:2;margin-top:auto}.app-navigation-entry--pinned~.app-navigation-entry--pinned[data-v-258871fd]{margin-top:0}[data-themes*=highcontrast] .app-navigation-entry[data-v-258871fd]:active{background-color:var(--color-primary-element-light-hover)!important}@keyframes nc-nav-stripe-in-258871fd{0%{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:1}}.app-navigation-new-item__name[data-v-258871fd]{overflow:hidden;max-width:100%;white-space:nowrap;text-overflow:ellipsis;padding-inline-start:7px;font-size:14px}.newItemContainer[data-v-258871fd]{width:calc(100% - var(--default-clickable-area));margin:auto}.material-design-icon[data-v-df568544]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-search[data-v-df568544]{display:flex;gap:var(--app-navigation-padding);padding:var(--app-navigation-padding)}.app-navigation-search--has-actions .app-navigation-search__input[data-v-df568544]{flex-grow:1;z-index:3}.app-navigation-search__actions[data-v-df568544]{display:flex;gap:var(--default-grid-baseline);margin-inline-start:0;max-width:calc(2 * var(--default-clickable-area) + var(--default-grid-baseline));max-height:var(--default-clickable-area);transition:margin-inline-start var(--animation-quick)}.app-navigation-search__actions--hidden[data-v-df568544]{margin-inline-start:calc(-1 * var(--default-clickable-area))}.app-navigation-search__input[data-v-df568544]{--input-border-radius: var(--border-radius-element, var(--border-radius-pill)) !important}.material-design-icon[data-v-07bfaab0]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.mention-bubble--primary .mention-bubble__content[data-v-07bfaab0]{color:var(--color-primary-element-text);background-color:var(--color-primary-element)}.mention-bubble__wrapper[data-v-07bfaab0]{position:relative;max-width:150px;height:18px;vertical-align:text-bottom;display:inline-flex;align-items:center}.mention-bubble__content[data-v-07bfaab0]{display:inline-flex;overflow:hidden;align-items:center;max-width:100%;height:20px;-webkit-user-select:none;user-select:none;padding-inline:2px 6px;border-radius:10px;background-color:var(--color-background-dark)}.mention-bubble__icon[data-v-07bfaab0]{position:relative;width:16px;height:16px;border-radius:8px;background-color:var(--color-background-darker);background-repeat:no-repeat;background-position:center;background-size:12px}.mention-bubble__icon--with-avatar[data-v-07bfaab0]{color:inherit;background-size:cover}.mention-bubble__title[data-v-07bfaab0]{overflow:hidden;margin-inline-start:2px;white-space:nowrap;text-overflow:ellipsis}.mention-bubble__title[data-v-07bfaab0]:before{content:attr(title)}.mention-bubble__select[data-v-07bfaab0]{position:absolute;z-index:-1;inset-inline-start:-100vw;width:1px;height:1px;overflow:hidden}.material-design-icon[data-v-ddd7d69d]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}#app-settings[data-v-ddd7d69d]{margin-top:auto;padding:3px}#app-settings__header[data-v-ddd7d69d]{box-sizing:border-box;margin:0 3px 3px}#app-settings__header .settings-button[data-v-ddd7d69d]{padding-inline:0 calc((var(--default-clickable-area) - 16px) / 2)!important}#app-settings__header .settings-button[data-v-ddd7d69d] .button-vue__text{font-weight:var(--font-weight-default, normal)!important}#app-settings__content[data-v-ddd7d69d]{display:block;padding:10px;margin-bottom:-3px;max-height:300px;overflow-y:auto;box-sizing:border-box}.slide-up-leave-active[data-v-ddd7d69d],.slide-up-enter-active[data-v-ddd7d69d]{transition-duration:var(--animation-slow);transition-property:max-height,padding;overflow-y:hidden!important}.slide-up-enter[data-v-ddd7d69d],.slide-up-leave-to[data-v-ddd7d69d]{max-height:0!important;padding:0 10px!important}.app-navigation-spacer[data-v-b699c557]{flex-shrink:0;height:22px}._material-design-icon_m1Dx0{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._appSettingsDialogVersion_2lg6o{--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline));color:var(--color-text-maxcontrast);margin-block-end:calc(8 * var(--default-grid-baseline));margin-inline:var(--form-element-label-offset)}._appSettingsDialogVersion__legacy_cnkcL{margin-inline:0}.material-design-icon[data-v-d5ede33a]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-settings[data-v-d5ede33a]:not(.app-settings--legacy){--nav-tint: hsl(from var(--color-primary-element-light) h s calc(l*1.045) );--nav-tint-strong: var(--color-primary-element-light)}.app-settings[data-v-d5ede33a]:not(.app-settings--legacy) .modal-wrapper .modal-container{padding-inline-start:0!important;padding-block-start:0!important;background-color:var(--nav-tint);overflow:hidden;max-width:900px}.app-settings[data-v-d5ede33a]:not(.app-settings--legacy) .dialog__name{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(100%);white-space:nowrap;border:0}.app-settings:not(.app-settings--legacy) .app-settings__title[data-v-d5ede33a]{box-sizing:border-box;padding:calc(3 * var(--default-grid-baseline));margin:0;font-size:20px;font-weight:var(--font-weight-heading, 700)}.app-settings[data-v-d5ede33a]:not(.app-settings--legacy) .app-settings__navigation{min-width:200px;max-width:200px;flex:0 0 200px;margin-right:0!important;overflow-x:hidden;overflow-y:auto;position:relative;background-color:var(--nav-tint)}.app-settings[data-v-d5ede33a]:not(.app-settings--legacy) .app-settings__content{box-sizing:border-box;padding:calc(3 * var(--default-grid-baseline));background-color:var(--color-main-background);border-inline-start:1px solid var(--color-border-dark);border-start-start-radius:var(--border-radius-element);border-end-start-radius:var(--border-radius-element)}.app-settings:not(.app-settings--legacy) .navigation-list[data-v-d5ede33a]{height:100%;box-sizing:border-box;overflow-y:auto;padding:var(--default-grid-baseline)}.app-settings:not(.app-settings--legacy) .navigation-list__link[data-v-d5ede33a]{position:relative;display:flex;align-items:center;font-size:var(--default-font-size);font-weight:var(--font-weight-element, 500);height:var(--default-clickable-area);margin:2px 0;line-height:var(--default-clickable-area);border-radius:var(--border-radius-element, var(--border-radius-pill));padding-inline:calc(2 * var(--default-grid-baseline));cursor:pointer;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;background-color:transparent;border:none;color:var(--color-main-text)}.app-settings:not(.app-settings--legacy) .navigation-list__link[data-v-d5ede33a]:hover,.app-settings:not(.app-settings--legacy) .navigation-list__link[data-v-d5ede33a]:focus-visible{background-color:color-mix(in srgb,var(--color-primary-element) 8%,transparent)}.app-settings:not(.app-settings--legacy) .navigation-list__link[data-v-d5ede33a]:focus-visible{outline:2px solid var(--color-main-text);outline-offset:-2px}.app-settings:not(.app-settings--legacy) .navigation-list__link--active[data-v-d5ede33a]{background-color:var(--nav-tint-strong)}.app-settings:not(.app-settings--legacy) .navigation-list__link--active[data-v-d5ede33a]:hover,.app-settings:not(.app-settings--legacy) .navigation-list__link--active[data-v-d5ede33a]:focus-visible{background-color:var(--color-primary-element-light-hover)}.app-settings:not(.app-settings--legacy) .navigation-list__link--active[data-v-d5ede33a]:before{content:"";position:absolute;inset-block:var(--default-grid-baseline);inset-inline-start:0;width:3px;background-color:var(--color-primary-element);border-radius:999px}.app-settings:not(.app-settings--legacy) .navigation-list__link--icon[data-v-d5ede33a]{gap:var(--default-grid-baseline)}.app-settings:not(.app-settings--legacy) .navigation-list__link-icon[data-v-d5ede33a]{display:flex;justify-content:center;align-content:center;width:calc(var(--default-clickable-area) - 2 * var(--default-grid-baseline));max-width:calc(var(--default-clickable-area) - 2 * var(--default-grid-baseline))}[data-v-d5ede33a] .app-settings__content.app-settings__non-legacy *{box-sizing:border-box}@media only screen and (width<1024px){.app-settings[data-v-d5ede33a]:not(.app-settings--legacy) .modal-wrapper .modal-container{padding-inline-start:12px!important;padding-block-start:4px!important;background-color:var(--color-main-background)}.app-settings[data-v-d5ede33a]:not(.app-settings--legacy) .dialog__name{position:static;width:auto;height:auto;margin:0 0 12px;padding-inline-end:var(--default-clickable-area);overflow:visible;clip-path:none;white-space:normal;border:0}.app-settings[data-v-d5ede33a]:not(.app-settings--legacy) .app-settings__content{border:none;border-radius:0}}.app-settings.app-settings--legacy[data-v-d5ede33a] .app-settings__navigation{min-width:200px;margin-inline-end:calc(4 * var(--default-grid-baseline));overflow-x:hidden;overflow-y:auto;position:relative}.app-settings.app-settings--legacy[data-v-d5ede33a] .app-settings__content{padding-inline:calc(4 * var(--default-grid-baseline))}.app-settings.app-settings--legacy .navigation-list[data-v-d5ede33a]{height:100%;overflow-y:auto;padding:calc(3 * var(--default-grid-baseline))}.app-settings.app-settings--legacy .navigation-list__link[data-v-d5ede33a]{display:flex;align-content:center;font-size:16px;height:var(--default-clickable-area);margin:4px 0;line-height:var(--default-clickable-area);border-radius:var(--border-radius-element, var(--border-radius-pill));font-weight:var(--font-weight-element, bold);padding:0 calc(4 * var(--default-grid-baseline));cursor:pointer;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;background-color:transparent;border:none}.app-settings.app-settings--legacy .navigation-list__link[data-v-d5ede33a]:hover,.app-settings.app-settings--legacy .navigation-list__link[data-v-d5ede33a]:focus{background-color:var(--color-background-hover)}.app-settings.app-settings--legacy .navigation-list__link--active[data-v-d5ede33a]{background-color:var(--color-primary-element-light)!important}.app-settings.app-settings--legacy .navigation-list__link--icon[data-v-d5ede33a]{padding-inline-start:calc(2 * var(--default-grid-baseline));gap:var(--default-grid-baseline)}.app-settings.app-settings--legacy .navigation-list__link-icon[data-v-d5ede33a]{display:flex;justify-content:center;align-content:center;width:calc(var(--default-clickable-area) - 2 * var(--default-grid-baseline));max-width:calc(var(--default-clickable-area) - 2 * var(--default-grid-baseline))}@media only screen and (max-width:512px){.dialog__modal .modal-wrapper.modal-wrapper--small .modal-container{width:fit-content;height:unset;max-height:90%;position:relative;top:unset;border-radius:var(--border-radius-large)}}.material-design-icon[data-v-08c0eea7]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.dialog[data-v-08c0eea7]{height:100%;width:100%;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden}.dialog__modal[data-v-08c0eea7] .modal-wrapper .modal-container{display:flex!important;padding-block:4px 0;padding-inline:12px 0}.dialog__modal[data-v-08c0eea7] .modal-wrapper .modal-container__content{display:flex;flex-direction:column;overflow:hidden}.dialog__wrapper[data-v-08c0eea7]{display:flex;flex-direction:row;flex:1;min-height:0;overflow:hidden}.dialog__wrapper--collapsed[data-v-08c0eea7]{flex-direction:column}.dialog__navigation[data-v-08c0eea7]{display:flex;flex-shrink:0}.dialog__wrapper:not(.dialog__wrapper--collapsed) .dialog__navigation[data-v-08c0eea7]{flex-direction:column;overflow:hidden auto;height:100%;min-width:200px;margin-inline-end:20px}.dialog__wrapper.dialog__wrapper--collapsed .dialog__navigation[data-v-08c0eea7]{flex-direction:row;justify-content:space-between;overflow:auto hidden;width:100%;min-width:100%}.dialog__name[data-v-08c0eea7]{font-size:21px;text-align:center;height:fit-content;min-height:var(--default-clickable-area);line-height:var(--default-clickable-area);overflow-wrap:break-word;margin-block:0 12px}.dialog__content[data-v-08c0eea7]{flex:1;min-height:0;overflow:auto;padding-inline-end:12px}.dialog__text[data-v-08c0eea7]{padding-block-end:6px}.dialog__actions[data-v-08c0eea7]{box-sizing:border-box;display:flex;gap:6px;align-content:center;justify-content:end;width:100%;max-width:100%;padding-inline:0 12px;margin-inline:0;margin-block:0}.dialog__actions[data-v-08c0eea7]:not(:empty){margin-block:6px 12px}@media only screen and (max-width:512px){.dialog__name[data-v-08c0eea7]{text-align:start;margin-inline-end:var(--default-clickable-area)}}.material-design-icon[data-v-4b0ca9a1]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.modal-mask[data-v-4b0ca9a1]{--backdrop-color: 0, 0, 0;--icon-size: 20px;--slideshow-duration: var(--7724eff9);position:fixed;z-index:9998;top:0;inset-inline-start:0;display:block;width:100%;height:100%;background-color:rgba(var(--backdrop-color),.5)}.modal-mask--opaque[data-v-4b0ca9a1]{background-color:rgba(var(--backdrop-color),.92)}.modal-mask--light[data-v-4b0ca9a1]{--backdrop-color: 255, 255, 255}.modal-header[data-v-4b0ca9a1]{position:absolute;z-index:10001;top:0;inset-inline:0 0;display:flex!important;align-items:center;justify-content:space-between;width:100%;height:var(--header-height);overflow:hidden;transition:opacity .25s,visibility .25s}.modal-header__name[data-v-4b0ca9a1]{overflow-x:hidden;box-sizing:border-box;width:100%;padding-inline:12px 0;transition:padding ease .1s;white-space:nowrap;text-overflow:ellipsis;font-size:16px;margin-block:0}@media only screen and (min-width:1024px){.modal-header__name[data-v-4b0ca9a1]{padding-inline-start:calc(var(--header-height) * var(--125db689));text-align:center}}.modal-header .icons-menu[data-v-4b0ca9a1]{display:flex;align-items:center;justify-content:flex-end;align-self:flex-end}.modal-header .icons-menu .header-close[data-v-4b0ca9a1]{display:flex;align-items:center;justify-content:center;box-sizing:border-box;margin:calc((var(--header-height) - var(--default-clickable-area)) / 2);padding:0}.modal-header .icons-menu .play-pause-icons[data-v-4b0ca9a1]{position:relative;width:var(--header-height);height:var(--header-height);margin:0;padding:0;cursor:pointer;border:none;background-color:transparent}.modal-header .icons-menu .play-pause-icons:hover .play-pause-icons__play[data-v-4b0ca9a1],.modal-header .icons-menu .play-pause-icons:hover .play-pause-icons__pause[data-v-4b0ca9a1],.modal-header .icons-menu .play-pause-icons:focus .play-pause-icons__play[data-v-4b0ca9a1],.modal-header .icons-menu .play-pause-icons:focus .play-pause-icons__pause[data-v-4b0ca9a1]{opacity:1;border-radius:calc(var(--default-clickable-area) / 2);background-color:#7f7f7f40}.modal-header .icons-menu .play-pause-icons__play[data-v-4b0ca9a1],.modal-header .icons-menu .play-pause-icons__pause[data-v-4b0ca9a1]{box-sizing:border-box;width:var(--default-clickable-area);height:var(--default-clickable-area);margin:calc((var(--header-height) - var(--default-clickable-area)) / 2);cursor:pointer;opacity:.7}.modal-header .icons-menu[data-v-4b0ca9a1] .action-item{margin:calc((var(--header-height) - var(--default-clickable-area)) / 2)}.modal-header .icons-menu[data-v-4b0ca9a1] .action-item--single{box-sizing:border-box;width:var(--default-clickable-area);height:var(--default-clickable-area);cursor:pointer;background-position:center;background-size:22px}.modal-header .icons-menu .header-actions[data-v-4b0ca9a1] button:focus-visible{box-shadow:none!important;outline:2px solid #fff!important}.modal-header .icons-menu[data-v-4b0ca9a1] .action-item__menutoggle{padding:0}.modal-header .icons-menu[data-v-4b0ca9a1] .action-item__menutoggle span,.modal-header .icons-menu[data-v-4b0ca9a1] .action-item__menutoggle svg{width:var(--icon-size);height:var(--icon-size)}.modal-wrapper[data-v-4b0ca9a1]{--modal-header-offset: var(--header-height);display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:100%;height:100%}.modal-wrapper--no-header[data-v-4b0ca9a1]{--modal-header-offset: var(--body-container-margin)}.modal-wrapper .prev[data-v-4b0ca9a1],.modal-wrapper .next[data-v-4b0ca9a1]{z-index:10000;height:35vh;min-height:300px;position:absolute;transition:opacity .25s;color:#fff}.modal-wrapper .prev[data-v-4b0ca9a1]:focus-visible,.modal-wrapper .next[data-v-4b0ca9a1]:focus-visible{box-shadow:0 0 0 2px var(--color-primary-element-text);background-color:var(--color-box-shadow)}.modal-wrapper .prev[data-v-4b0ca9a1]{inset-inline-start:2px}.modal-wrapper .next[data-v-4b0ca9a1]{inset-inline-end:2px}.modal-wrapper .modal-container[data-v-4b0ca9a1]{position:relative;display:flex;padding:0;transition:transform .3s ease;border-radius:var(--border-radius-container, var(--border-radius-rounded));background-color:var(--color-main-background);color:var(--color-main-text);box-shadow:0 0 40px #0003}.modal-wrapper .modal-container__close[data-v-4b0ca9a1]{z-index:1;position:absolute;top:4px;inset-inline-end:var(--default-grid-baseline)}.modal-wrapper .modal-container__content[data-v-4b0ca9a1]{width:100%;min-height:52px;overflow:auto}.modal-wrapper--small>.modal-container[data-v-4b0ca9a1]{width:400px;max-width:90%;max-height:min(90%,100% - 2 * var(--header-height) - 2 * var(--body-container-margin))}.modal-wrapper--normal>.modal-container[data-v-4b0ca9a1]{max-width:90%;width:600px;max-height:min(90%,100% - 2 * var(--header-height) - 2 * var(--body-container-margin))}.modal-wrapper--large>.modal-container[data-v-4b0ca9a1]{max-width:90%;width:900px;max-height:min(90%,100% - 2 * var(--header-height) - 2 * var(--body-container-margin))}.modal-wrapper--full>.modal-container[data-v-4b0ca9a1]{width:100%;height:calc(100% - var(--modal-header-offset));position:absolute;top:var(--modal-header-offset);border-radius:0}@media only screen and ((max-width:512px)or (max-height:400px)){.modal-wrapper .modal-container[data-v-4b0ca9a1]{max-width:initial;width:100%;max-height:initial;height:calc(100% - var(--modal-header-offset));position:absolute;top:var(--modal-header-offset);border-radius:0}}.fade-enter-active[data-v-4b0ca9a1],.fade-leave-active[data-v-4b0ca9a1]{transition:opacity .25s}.fade-enter[data-v-4b0ca9a1],.fade-leave-to[data-v-4b0ca9a1]{opacity:0}.fade-visibility-enter[data-v-4b0ca9a1],.fade-visibility-leave-to[data-v-4b0ca9a1]{visibility:hidden;opacity:0}.modal-in-enter-active[data-v-4b0ca9a1],.modal-in-leave-active[data-v-4b0ca9a1],.modal-out-enter-active[data-v-4b0ca9a1],.modal-out-leave-active[data-v-4b0ca9a1]{transition:opacity .25s}.modal-in-enter[data-v-4b0ca9a1],.modal-in-leave-to[data-v-4b0ca9a1],.modal-out-enter[data-v-4b0ca9a1],.modal-out-leave-to[data-v-4b0ca9a1]{opacity:0}.modal-in-enter .modal-container[data-v-4b0ca9a1],.modal-in-leave-to .modal-container[data-v-4b0ca9a1]{transform:scale(.9)}.modal-out-enter .modal-container[data-v-4b0ca9a1],.modal-out-leave-to .modal-container[data-v-4b0ca9a1]{transform:scale(1.1)}.modal-mask .play-pause-icons .progress-ring[data-v-4b0ca9a1]{position:absolute;top:0;inset-inline-start:0;transform:rotate(-90deg)}.modal-mask .play-pause-icons .progress-ring .progress-ring__circle[data-v-4b0ca9a1]{transition:.1s stroke-dashoffset;transform-origin:50% 50%;animation:progressring-4b0ca9a1 linear var(--slideshow-duration) infinite;stroke-linecap:round;stroke-dashoffset:94.2477796077;stroke-dasharray:94.2477796077}.modal-mask .play-pause-icons--paused .icon-pause[data-v-4b0ca9a1]{animation:breath-4b0ca9a1 2s cubic-bezier(.4,0,.2,1) infinite}.modal-mask .play-pause-icons--paused .progress-ring__circle[data-v-4b0ca9a1]{animation-play-state:paused!important}@keyframes progressring-4b0ca9a1{0%{stroke-dashoffset:94.2477796077}to{stroke-dashoffset:0}}@keyframes breath-4b0ca9a1{0%{opacity:1}50%{opacity:0}to{opacity:1}}.material-design-icon[data-v-63296cf9]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-settings-section[data-v-63296cf9]{--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline));--app-settings-section-text-offset: var(--form-element-label-offset);--app-settings-section-content-gap: calc(6 * var(--default-grid-baseline));margin-block-end:calc(8 * var(--default-grid-baseline))}.app-settings-section__name[data-v-63296cf9]{margin:0;padding-inline:var(--app-settings-section-text-offset);padding-block:0;font-size:20px;font-weight:var(--font-weight-heading, bold)}.app-settings-section__description[data-v-63296cf9]{padding-inline:var(--app-settings-section-text-offset);color:var(--color-text-maxcontrast)}.app-settings-section__content[data-v-63296cf9]{margin-block-start:calc(2 * var(--default-grid-baseline));display:flex;flex-direction:column;justify-content:stretch;gap:var(--app-settings-section-content-gap)}.app-settings-section__legacy[data-v-63296cf9]{--app-settings-section-text-offset: 0;--app-settings-section-content-gap: 0}._material-design-icon_aXC4Z{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._appSettingsSectionShortcuts_e3yxm{display:flex;flex-direction:column;gap:calc(4 * var(--default-grid-baseline));box-sizing:border-box}._appSettingsSectionShortcuts_e3yxm *{box-sizing:border-box}.material-design-icon[data-v-30dd628e]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-sidebar-tabs[data-v-30dd628e]{display:flex;flex-direction:column;min-height:0;flex:1 1 100%}.app-sidebar-tabs__nav[data-v-30dd628e]{display:flex;justify-content:stretch;margin:10px 8px 0;border-bottom:1px solid var(--color-border)}.app-sidebar-tabs__nav[data-v-30dd628e]:not(.app-sidebar-tabs__nav--legacy){gap:var(--default-grid-baseline);padding-block-end:var(--default-grid-baseline)}.app-sidebar-tabs__nav[data-v-30dd628e]:not(.app-sidebar-tabs__nav--legacy) .checkbox-radio-switch--button-variant{position:relative;border:unset!important;border-radius:var(--border-radius-element)!important;background-color:var(--color-main-background);min-width:var(--default-clickable-area);transition:background-color var(--animation-quick)}.app-sidebar-tabs__nav[data-v-30dd628e]:not(.app-sidebar-tabs__nav--legacy) .checkbox-radio-switch--button-variant .checkbox-content{padding:var(--default-grid-baseline);padding-block-end:calc(var(--default-grid-baseline) * 2);border-radius:var(--border-radius-element)!important;margin:0!important}.app-sidebar-tabs__nav[data-v-30dd628e]:not(.app-sidebar-tabs__nav--legacy) .checkbox-radio-switch--button-variant .checkbox-content .checkbox-content__icon>*{color:var(--color-main-text)!important}.app-sidebar-tabs__nav[data-v-30dd628e]:not(.app-sidebar-tabs__nav--legacy) .checkbox-radio-switch--button-variant .checkbox-content__text{font-weight:var(--font-weight-element, normal)}.app-sidebar-tabs__nav[data-v-30dd628e]:not(.app-sidebar-tabs__nav--legacy) .checkbox-radio-switch--button-variant:after{content:"";position:absolute;bottom:0;left:50%;width:0;height:4px;border-radius:999px;background-color:var(--color-primary-element);opacity:0;transform:translate(-50%);transition:width var(--animation-quick),opacity var(--animation-quick)}.app-sidebar-tabs__nav[data-v-30dd628e]:not(.app-sidebar-tabs__nav--legacy) .checkbox-radio-switch--button-variant:hover{background-color:var(--color-background-hover)}.app-sidebar-tabs__nav[data-v-30dd628e]:not(.app-sidebar-tabs__nav--legacy) .checkbox-radio-switch--button-variant:focus-visible{outline:2px solid var(--color-main-text);outline-offset:2px}.app-sidebar-tabs__nav[data-v-30dd628e]:not(.app-sidebar-tabs__nav--legacy) .checkbox-radio-switch--button-variant.checkbox-radio-switch--checked{background-color:var(--color-background-hover)!important}.app-sidebar-tabs__nav[data-v-30dd628e]:not(.app-sidebar-tabs__nav--legacy) .checkbox-radio-switch--button-variant.checkbox-radio-switch--checked .checkbox-radio-switch__content{background:transparent!important;color:var(--color-main-text)!important}.app-sidebar-tabs__nav[data-v-30dd628e]:not(.app-sidebar-tabs__nav--legacy) .checkbox-radio-switch--button-variant.checkbox-radio-switch--checked:after{width:80%;opacity:1}.app-sidebar-tabs__nav[data-v-30dd628e]:not(.app-sidebar-tabs__nav--legacy) .checkbox-radio-switch--button-variant.checkbox-radio-switch--checked:hover{background-color:var(--color-background-dark)!important}.app-sidebar-tabs__nav--legacy[data-v-30dd628e] .checkbox-radio-switch--button-variant{border:unset!important;border-radius:0!important}.app-sidebar-tabs__nav--legacy[data-v-30dd628e] .checkbox-radio-switch--button-variant .checkbox-content{padding:var(--default-grid-baseline);border-radius:var(--default-grid-baseline) var(--default-grid-baseline) 0 0!important;margin:0!important;border-bottom:var(--default-grid-baseline) solid transparent!important}.app-sidebar-tabs__nav--legacy[data-v-30dd628e] .checkbox-radio-switch--button-variant .checkbox-content .checkbox-content__icon>*{color:var(--color-main-text)!important}.app-sidebar-tabs__nav--legacy[data-v-30dd628e] .checkbox-radio-switch--button-variant.checkbox-radio-switch--checked .checkbox-radio-switch__content{background:transparent!important;color:var(--color-main-text)!important;border-bottom:var(--default-grid-baseline) solid var(--color-primary-element)!important}.app-sidebar-tabs__nav--legacy[data-v-30dd628e] .checkbox-radio-switch--button-variant.checkbox-radio-switch--checked .checkbox-content__text{font-weight:var(--font-weight-element, bold)}.app-sidebar-tabs__tab[data-v-30dd628e]{flex:1 1}.app-sidebar-tabs__tab.active[data-v-30dd628e]{color:var(--color-primary-element)}.app-sidebar-tabs__tab-caption[data-v-30dd628e]{flex:0 1 100%;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:center}.app-sidebar-tabs__tab-icon[data-v-30dd628e]{display:flex;align-items:center;justify-content:center;background-size:20px}.app-sidebar-tabs__tab[data-v-30dd628e] .checkbox-radio-switch__content{max-width:unset}.app-sidebar-tabs__content[data-v-30dd628e]{position:relative;min-height:256px;height:100%}.app-sidebar-tabs__content--multiple[data-v-30dd628e]>:not(section){display:none}@property --app-sidebar-offset{syntax: ""; initial-value: 0; inherits: true;}.content{--app-sidebar-padding: calc(var(--default-grid-baseline, 4px) * 2);--app-sidebar-offset: 0;transition:--app-sidebar-offset 0ms!important}.content:has(.app-sidebar.slide-right-enter-active),.content:has(.app-sidebar.slide-right-leave-active){transition:--app-sidebar-offset var(--animation-quick)}.content:has(.app-sidebar__toggle){--app-sidebar-offset: calc(var(--app-sidebar-padding) + var(--default-clickable-area))}.material-design-icon[data-v-82f4f9ef]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-sidebar[data-v-82f4f9ef]{--app-sidebar-width: clamp(300px, 27vw, 500px);width:var(--app-sidebar-width);z-index:1500;top:0;inset-inline-end:0;display:flex;overflow-x:hidden;overflow-y:auto;flex-direction:column;flex-shrink:0;height:100%;border-inline-start:1px solid var(--color-border);background:var(--color-main-background);position:relative}.app-sidebar__toggle[data-v-82f4f9ef]{position:absolute!important;inset-block-start:var(--app-sidebar-padding);inset-inline-end:var(--app-sidebar-padding);z-index:1001}.app-sidebar .app-sidebar-header[data-v-82f4f9ef]{--app-sidebar-close-button-offset: calc(var(--default-clickable-area) + calc(var(--default-grid-baseline, 4px) * 2))}.app-sidebar .app-sidebar-header>.app-sidebar__close[data-v-82f4f9ef]{position:absolute;z-index:100;top:calc(var(--default-grid-baseline, 4px) * 2);inset-inline-end:calc(var(--default-grid-baseline, 4px) * 2);width:var(--default-clickable-area);height:var(--default-clickable-area)}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info[data-v-82f4f9ef]{flex-direction:row}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__figure[data-v-82f4f9ef]{--figure-size: calc(52px + var(--app-sidebar-padding));z-index:2;width:var(--figure-size);height:var(--figure-size);margin:calc(var(--app-sidebar-padding) / 2);border-radius:3px;flex:0 0 auto}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__desc[data-v-82f4f9ef]{padding-inline-start:0;flex:1 1 auto;min-width:0;padding-inline-end:calc(var(--default-clickable-area) + var(--app-sidebar-close-button-offset));padding-top:var(--app-sidebar-padding)}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__desc.app-sidebar-header__desc--without-actions[data-v-82f4f9ef]{padding-inline-end:var(--app-sidebar-close-button-offset)}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__desc .app-sidebar-header__tertiary-actions[data-v-82f4f9ef]{z-index:3;position:absolute;top:calc(var(--app-sidebar-padding) / 2);inset-inline-start:calc(-1 * var(--default-clickable-area));gap:0}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__desc .app-sidebar-header__menu[data-v-82f4f9ef]{top:calc(var(--default-grid-baseline, 4px) * 2);inset-inline-end:var(--app-sidebar-close-button-offset);position:absolute}.app-sidebar .app-sidebar-header:not(.app-sidebar-header--with-figure) .app-sidebar-header__menu[data-v-82f4f9ef]{position:absolute;top:calc(var(--default-grid-baseline, 4px) * 2);inset-inline-end:var(--app-sidebar-close-button-offset)}.app-sidebar .app-sidebar-header:not(.app-sidebar-header--with-figure) .app-sidebar-header__desc[data-v-82f4f9ef]{padding-inline-end:calc(var(--default-clickable-area) + var(--app-sidebar-close-button-offset))}.app-sidebar .app-sidebar-header:not(.app-sidebar-header--with-figure) .app-sidebar-header__desc.app-sidebar-header__desc--without-actions[data-v-82f4f9ef]{padding-inline-end:var(--app-sidebar-close-button-offset)}.app-sidebar .app-sidebar-header .app-sidebar-header__info[data-v-82f4f9ef]{display:flex;flex-direction:column}.app-sidebar .app-sidebar-header__figure[data-v-82f4f9ef]{width:100%;height:250px;max-height:250px;background-repeat:no-repeat;background-position:center;background-size:contain}.app-sidebar .app-sidebar-header__figure--with-action[data-v-82f4f9ef]{cursor:pointer}.app-sidebar .app-sidebar-header__desc[data-v-82f4f9ef]{position:relative;display:flex;flex-direction:row;justify-content:center;align-items:center;padding-inline:var(--app-sidebar-padding);padding-block:calc(var(--default-grid-baseline, 4px) * 2) calc(var(--app-sidebar-padding) / 2);gap:0 4px}.app-sidebar .app-sidebar-header__desc--with-tertiary-action[data-v-82f4f9ef]{padding-inline-start:6px}.app-sidebar .app-sidebar-header__desc--editable .app-sidebar-header__mainname-form[data-v-82f4f9ef],.app-sidebar .app-sidebar-header__desc--with-subname--editable .app-sidebar-header__mainname-form[data-v-82f4f9ef]{margin-top:-2px;margin-bottom:-2px}.app-sidebar .app-sidebar-header__desc--with-subname--editable .app-sidebar-header__subname[data-v-82f4f9ef]{margin-top:-2px}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__tertiary-actions[data-v-82f4f9ef]{display:flex;height:var(--default-clickable-area);width:var(--default-clickable-area);justify-content:center;flex:0 0 auto}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__tertiary-actions .app-sidebar-header__star[data-v-82f4f9ef]{box-shadow:none}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__tertiary-actions .app-sidebar-header__star[data-v-82f4f9ef]:not([aria-pressed=true]):hover{box-shadow:none;background-color:var(--color-background-hover)}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container[data-v-82f4f9ef]{flex:1 1 auto;display:flex;flex-direction:column;justify-content:center;min-width:0}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container[data-v-82f4f9ef]{display:flex;align-items:center;min-height:var(--default-clickable-area)}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__mainname[data-v-82f4f9ef]{padding:0;min-height:30px;font-size:20px;line-height:30px}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__mainname[data-v-82f4f9ef] .linkified{cursor:pointer;text-decoration:underline;margin:0}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__mainname-form[data-v-82f4f9ef]{display:flex;flex:1 1 auto;align-items:center}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__mainname-form input.app-sidebar-header__mainname-input[data-v-82f4f9ef]{flex:1 1 auto;margin:0;padding:7px;font-size:20px;font-weight:var(--font-weight-heading, bold)}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__menu[data-v-82f4f9ef]{margin-inline-start:5px}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname[data-v-82f4f9ef],.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__subname[data-v-82f4f9ef]{overflow:hidden;width:100%;margin:0;white-space:nowrap;text-overflow:ellipsis}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__subname[data-v-82f4f9ef]{color:var(--color-text-maxcontrast);font-size:var(--default-font-size);padding:0}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__subname *[data-v-82f4f9ef]{vertical-align:text-bottom}.app-sidebar .app-sidebar-header .app-sidebar-header__mainname--hidden[data-v-82f4f9ef]{position:absolute;top:0;inset-inline-start:0;margin:0;width:1px;height:1px;overflow:hidden}.app-sidebar .app-sidebar-header__description[data-v-82f4f9ef]{display:flex;align-items:center;margin:0 10px}@media only screen and (max-width:512px){.app-sidebar[data-v-82f4f9ef]{position:absolute;--app-sidebar-width: 100vw}}.slide-right-leave-active[data-v-82f4f9ef],.slide-right-enter-active[data-v-82f4f9ef]{transition-duration:var(--animation-quick);transition-property:margin-inline-end}.slide-right-enter-to[data-v-82f4f9ef],.slide-right-leave[data-v-82f4f9ef]{margin-inline-end:0}.slide-right-enter[data-v-82f4f9ef],.slide-right-leave-to[data-v-82f4f9ef]{margin-inline-end:calc(-1 * var(--app-sidebar-width))}.material-design-icon[data-v-dc2e9d6a]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.checkbox-content[data-v-dc2e9d6a]{display:flex;align-items:center;flex-direction:row;gap:var(--default-grid-baseline);-webkit-user-select:none;user-select:none;min-height:var(--default-clickable-area);border-radius:var(--checkbox-radio-switch--border-radius);padding:var(--default-grid-baseline) calc((var(--default-clickable-area) - var(--icon-height)) / 2);width:100%;max-width:fit-content}.checkbox-content__wrapper[data-v-dc2e9d6a]{flex:1 0}.checkbox-content__text[data-v-dc2e9d6a]:empty{display:none}.checkbox-content-checkbox:not(.checkbox-content--button-variant) .checkbox-content__icon[data-v-dc2e9d6a],.checkbox-content-radio:not(.checkbox-content--button-variant) .checkbox-content__icon[data-v-dc2e9d6a],.checkbox-content-switch:not(.checkbox-content--button-variant) .checkbox-content__icon[data-v-dc2e9d6a]{margin-block:calc((var(--default-clickable-area) - 2 * var(--default-grid-baseline) - var(--icon-height)) / 2) auto;line-height:0}.checkbox-content-checkbox:not(.checkbox-content--button-variant) .checkbox-content__icon--has-description[data-v-dc2e9d6a],.checkbox-content-radio:not(.checkbox-content--button-variant) .checkbox-content__icon--has-description[data-v-dc2e9d6a],.checkbox-content-switch:not(.checkbox-content--button-variant) .checkbox-content__icon--has-description[data-v-dc2e9d6a]{display:flex;align-items:center;margin-block-end:0;align-self:start}.checkbox-content__icon>*[data-v-dc2e9d6a]{width:var(--icon-size);height:var(--icon-height);color:var(--color-primary-element)}.checkbox-content__description[data-v-dc2e9d6a]{display:block;color:var(--color-text-maxcontrast);font-weight:var(--font-weight-default, normal)}.checkbox-content--button-variant .checkbox-content__icon:not(.checkbox-content__icon--checked)>*[data-v-dc2e9d6a]{color:var(--color-primary-element)}.checkbox-content--button-variant .checkbox-content__icon--checked>*[data-v-dc2e9d6a]{color:var(--color-primary-element-text)}.checkbox-content--has-text[data-v-dc2e9d6a]{padding-right:calc((var(--default-clickable-area) - 16px) / 2)}.checkbox-content[data-v-dc2e9d6a],.checkbox-content *[data-v-dc2e9d6a]{cursor:pointer;flex-shrink:0}.material-design-icon[data-v-8cf5299e]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.checkbox-radio-switch[data-v-8cf5299e]{--icon-size: var(--739f019a);--icon-height: var(--16409f00);display:flex;align-items:center;color:var(--color-main-text);background-color:transparent;box-sizing:border-box;font-size:var(--default-font-size);font-weight:var(--font-weight-element, normal);line-height:var(--default-line-height);padding:0;position:relative}.checkbox-radio-switch *[data-v-8cf5299e]{box-sizing:border-box}.checkbox-radio-switch__input[data-v-8cf5299e]{position:absolute;z-index:-1;opacity:0!important;width:var(--icon-size);height:var(--icon-size);margin:4px calc((var(--default-clickable-area) - 16px) / 2)}.checkbox-radio-switch__input:focus-visible+.checkbox-radio-switch__content[data-v-8cf5299e],.checkbox-radio-switch__input[data-v-8cf5299e]:focus-visible{outline:2px solid var(--color-main-text);border-color:var(--color-main-background);outline-offset:-2px}.checkbox-radio-switch--disabled .checkbox-radio-switch__content[data-v-8cf5299e]{opacity:.5}.checkbox-radio-switch--disabled .checkbox-radio-switch__content[data-v-8cf5299e] .checkbox-radio-switch__icon>*{color:var(--color-main-text)}.checkbox-radio-switch--disabled .checkbox-radio-switch__content.checkbox-content[data-v-8cf5299e],.checkbox-radio-switch--disabled .checkbox-radio-switch__content.checkbox-content[data-v-8cf5299e] *:not(a){cursor:default!important}.checkbox-radio-switch:not(.checkbox-radio-switch--disabled,.checkbox-radio-switch--checked):focus-within .checkbox-radio-switch__content[data-v-8cf5299e],.checkbox-radio-switch:not(.checkbox-radio-switch--disabled,.checkbox-radio-switch--checked) .checkbox-radio-switch__content[data-v-8cf5299e]:hover{background-color:var(--color-background-hover)}.checkbox-radio-switch--checked:not(.checkbox-radio-switch--disabled):focus-within .checkbox-radio-switch__content[data-v-8cf5299e],.checkbox-radio-switch--checked:not(.checkbox-radio-switch--disabled) .checkbox-radio-switch__content[data-v-8cf5299e]:hover{background-color:var(--color-primary-element-hover)}.checkbox-radio-switch--checked:not(.checkbox-radio-switch--button-variant):not(.checkbox-radio-switch--disabled):focus-within .checkbox-radio-switch__content[data-v-8cf5299e],.checkbox-radio-switch--checked:not(.checkbox-radio-switch--button-variant):not(.checkbox-radio-switch--disabled) .checkbox-radio-switch__content[data-v-8cf5299e]:hover{background-color:var(--color-primary-element-light-hover)}.checkbox-radio-switch-switch[data-v-8cf5299e]:not(.checkbox-radio-switch--checked) .checkbox-radio-switch__icon>*{color:var(--color-text-maxcontrast)}.checkbox-radio-switch-switch.checkbox-radio-switch--disabled.checkbox-radio-switch--checked[data-v-8cf5299e] .checkbox-radio-switch__icon>*{color:var(--color-primary-element-light)}.checkbox-radio-switch[data-v-8cf5299e]{--checkbox-radio-switch--border-radius: var(--border-radius-element, calc(var(--default-clickable-area) / 2));--checkbox-radio-switch--border-radius-outer: calc(var(--checkbox-radio-switch--border-radius) + 2px)}.checkbox-radio-switch--button-variant.checkbox-radio-switch[data-v-8cf5299e]{background-color:var(--color-main-background);border:2px solid var(--color-border-maxcontrast);overflow:hidden}.checkbox-radio-switch--button-variant.checkbox-radio-switch--checked[data-v-8cf5299e]{font-weight:var(--font-weight-element, bold)}.checkbox-radio-switch--button-variant.checkbox-radio-switch--checked .checkbox-radio-switch__content[data-v-8cf5299e]{background-color:var(--color-primary-element);color:var(--color-primary-element-text)}.checkbox-radio-switch--button-variant[data-v-8cf5299e] .checkbox-radio-switch__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.checkbox-radio-switch--button-variant[data-v-8cf5299e]:not(.checkbox-radio-switch--checked) .checkbox-radio-switch__icon>*{color:var(--color-main-text)}.checkbox-radio-switch--button-variant[data-v-8cf5299e] .checkbox-radio-switch__icon:empty{display:none}.checkbox-radio-switch--button-variant[data-v-8cf5299e]:not(.checkbox-radio-switch--button-variant-v-grouped):not(.checkbox-radio-switch--button-variant-h-grouped),.checkbox-radio-switch--button-variant .checkbox-radio-switch__content[data-v-8cf5299e]{border-radius:var(--checkbox-radio-switch--border-radius)}.checkbox-radio-switch--button-variant-v-grouped .checkbox-radio-switch__content[data-v-8cf5299e]{flex-basis:100%;max-width:unset}.checkbox-radio-switch--button-variant-v-grouped[data-v-8cf5299e]:first-of-type{border-start-start-radius:var(--checkbox-radio-switch--border-radius-outer);border-start-end-radius:var(--checkbox-radio-switch--border-radius-outer)}.checkbox-radio-switch--button-variant-v-grouped[data-v-8cf5299e]:last-of-type{border-end-start-radius:var(--checkbox-radio-switch--border-radius-outer);border-end-end-radius:var(--checkbox-radio-switch--border-radius-outer)}.checkbox-radio-switch--button-variant-v-grouped[data-v-8cf5299e]:not(:last-of-type){border-bottom:0!important}.checkbox-radio-switch--button-variant-v-grouped:not(:last-of-type) .checkbox-radio-switch__content[data-v-8cf5299e]{margin-bottom:2px}.checkbox-radio-switch--button-variant-v-grouped[data-v-8cf5299e]:not(:first-of-type){border-top:0!important}.checkbox-radio-switch--button-variant-h-grouped[data-v-8cf5299e]:first-of-type{border-start-start-radius:var(--checkbox-radio-switch--border-radius-outer);border-end-start-radius:var(--checkbox-radio-switch--border-radius-outer)}.checkbox-radio-switch--button-variant-h-grouped[data-v-8cf5299e]:last-of-type{border-start-end-radius:var(--checkbox-radio-switch--border-radius-outer);border-end-end-radius:var(--checkbox-radio-switch--border-radius-outer)}.checkbox-radio-switch--button-variant-h-grouped[data-v-8cf5299e]:not(:last-of-type){border-inline-end:0!important}.checkbox-radio-switch--button-variant-h-grouped:not(:last-of-type) .checkbox-radio-switch__content[data-v-8cf5299e]{margin-inline-end:2px}.checkbox-radio-switch--button-variant-h-grouped[data-v-8cf5299e]:not(:first-of-type){border-inline-start:0!important}.checkbox-radio-switch--button-variant-h-grouped[data-v-8cf5299e] .checkbox-radio-switch__text{text-align:center;display:flex;align-items:center}.checkbox-radio-switch--button-variant-h-grouped .checkbox-radio-switch__content[data-v-8cf5299e]{flex-direction:column;justify-content:center;width:100%;margin:0;gap:0}._material-design-icon_Sb2uS{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._iconToggleSwitch_l-EPW{color:var(--2d1b8583);transition:color var(--animation-quick) ease}._iconToggleSwitch_l-EPW svg{height:auto!important}._iconToggleSwitch_l-EPW circle{cx:var(--78386a55);transition:cx var(--animation-quick) ease}.material-design-icon[data-v-53618902]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.empty-content[data-v-53618902]{display:flex;align-items:center;flex-direction:column;justify-content:center;flex-grow:1;padding:var(--default-grid-baseline)}.modal-wrapper .empty-content[data-v-53618902]{margin-top:5vh;margin-bottom:5vh}.empty-content__icon[data-v-53618902]{display:flex;align-items:center;justify-content:center;width:64px;height:64px;margin:0 auto 15px;opacity:.4;background-repeat:no-repeat;background-position:center;background-size:64px}.empty-content__icon[data-v-53618902] svg{width:64px!important;height:64px!important;max-width:64px!important;max-height:64px!important}.empty-content__name[data-v-53618902]{margin-bottom:10px;text-align:center;font-weight:var(--font-weight-heading, bold);font-size:20px;line-height:30px}.empty-content__description[data-v-53618902]{color:var(--color-text-maxcontrast);text-align:center;text-wrap-style:balance}.empty-content__action[data-v-53618902]{margin-top:8px}.modal-wrapper .empty-content__action[data-v-53618902]{margin-top:20px;display:flex}.material-design-icon[data-v-bc553f62]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-sidebar__tab[data-v-bc553f62]{display:none;padding:10px;min-height:100%;max-height:100%;height:100%;overflow:auto}.app-sidebar__tab[data-v-bc553f62]:focus{border-color:var(--color-primary-element);box-shadow:0 0 .2em var(--color-primary-element);outline:0}.app-sidebar__tab--active[data-v-bc553f62]{display:block}._material-design-icon_tqInT{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._assistantButton_bQdZv{--assistant-button-color: var(--color-element-assistant, linear-gradient(238deg, #A569D3 12%, #00679E 39%, #422083 86%));--assistant-button-background-color: var(--color-background-assistant, #F6F5FF);background-image:var(--color-border-assistant, linear-gradient(125deg, #7398FE 50%, #6104A4 125%));border-radius:var(--border-radius-element);height:var(--default-clickable-area);width:fit-content;padding-inline:1px;padding-block:1px 2px}._assistantButton_disabled_K3CBI{filter:saturate(.5);opacity:.5}._assistantButton_primary_4T7-a{--assistant-button-color: white;--assistant-button-background-color: var(--color-element-assistant,linear-gradient(238deg, #A569D3 12%, #00679E 39%, #422083 86%))}._assistantButton_primary_4T7-a ._assistantButton__icon_1c7PG,._assistantButton_primary_4T7-a ._assistantButton__text_Yy3y4{color:#fff!important}._assistantButton__button_OOIZd{--button-size: calc(var(--default-clickable-area) - 3px) !important;background-color:var(--assistant-button-background-color)!important;background-image:var(--assistant-button-background-color)!important;border:none!important}._assistantButton__button_OOIZd:hover{filter:brightness(120%)}._assistantButton__text_Yy3y4{background-image:var(--assistant-button-color);color:transparent!important;background-clip:text}._material-design-icon_LtxZt{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._assistantIcon_ErmNZ{display:inline-flex;align-items:center;justify-content:center}._assistantIcon_ErmNZ:not(._assistantIcon_inline_-Xbfy){display:flex;min-height:var(--default-clickable-area);min-width:var(--default-clickable-area)}._assistantIcon__svg_hJtwe{display:inline-block;width:var(--a843d9d2);height:var(--a843d9d2);max-width:var(--a843d9d2);max-height:var(--a843d9d2)}._material-design-icon_7fn2y{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._assistantContent_M9GKq{background-image:var(--color-border-assistant, linear-gradient(125deg, #7398FE 50%, #6104A4 125%));border-radius:var(--border-radius-container);padding:2px}._assistantContent__inner_TRg9q{background-color:var(--color-background-assistant, #F6F5FF);border-radius:calc(var(--border-radius-container) - 1px);color:var(--color-main-text);padding:calc(var(--border-radius-container) - 1px);height:100%;width:100%}.material-design-icon[data-v-9d57c0d3]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.avatardiv[data-v-9d57c0d3]{position:relative;display:inline-block;width:var(--avatar-size);height:var(--avatar-size)}.avatardiv--unknown[data-v-9d57c0d3]{position:relative;background-color:var(--color-main-background);white-space:normal}.avatardiv[data-v-9d57c0d3]:not(.avatardiv--unknown){background-color:var(--color-main-background)!important;box-shadow:0 0 5px #0000000d inset}.avatardiv--with-menu[data-v-9d57c0d3]{cursor:pointer;position:relative}.avatardiv--with-legacy-menu .action-item[data-v-9d57c0d3]{position:absolute;top:0;inset-inline-start:0}.avatardiv--with-legacy-menu[data-v-9d57c0d3] .action-item__menutoggle{cursor:pointer;opacity:0}.avatardiv--with-legacy-menu[data-v-9d57c0d3]:focus-within .action-item__menutoggle,.avatardiv--with-legacy-menu[data-v-9d57c0d3]:hover .action-item__menutoggle,.avatardiv--with-legacy-menu.avatardiv--with-menu-loading[data-v-9d57c0d3] .action-item__menutoggle{opacity:1}.avatardiv--with-legacy-menu:focus-within img[data-v-9d57c0d3],.avatardiv--with-legacy-menu:hover img[data-v-9d57c0d3],.avatardiv--with-legacy-menu.avatardiv--with-menu-loading img[data-v-9d57c0d3]{opacity:.3}.avatardiv--with-legacy-menu[data-v-9d57c0d3] .action-item__menutoggle,.avatardiv--with-legacy-menu img[data-v-9d57c0d3]{transition:opacity var(--animation-quick)}.avatardiv--with-legacy-menu[data-v-9d57c0d3] .button-vue,.avatardiv--with-legacy-menu[data-v-9d57c0d3] .button-vue__icon{height:var(--avatar-size);min-height:var(--avatar-size);width:var(--avatar-size)!important;min-width:var(--avatar-size)}.avatardiv--with-legacy-menu[data-v-9d57c0d3]>.button-vue,.avatardiv--with-legacy-menu[data-v-9d57c0d3]>.action-item .button-vue{--button-radius: calc(var(--avatar-size) / 2)}.avatardiv .avatar-profile-popover[data-v-9d57c0d3]{position:absolute;inset:0;width:100%;height:100%;z-index:1}.avatardiv .avatar-profile-popover__trigger[data-v-9d57c0d3]{display:block;width:100%;height:100%;border-radius:inherit;outline:none}.avatardiv .avatardiv__initials-wrapper[data-v-9d57c0d3]{display:block;height:var(--avatar-size);width:var(--avatar-size);background-color:var(--color-main-background);border-radius:calc(var(--avatar-size) / 2)}.avatardiv .avatardiv__initials-wrapper .avatardiv__initials[data-v-9d57c0d3]{position:absolute;top:0;left:0;display:block;width:100%;text-align:center;font-weight:var(--font-weight-default, normal)}.avatardiv img[data-v-9d57c0d3]{width:100%;height:100%;object-fit:cover}.avatardiv .material-design-icon[data-v-9d57c0d3]{width:var(--avatar-size);height:var(--avatar-size)}.avatardiv .avatardiv__user-status[data-v-9d57c0d3]{--avatar-status-size-orbital: calc(var(--avatar-size) * (1 - 1 / sqrt(2)));--avatar-status-size-min: var(--font-size-small);--avatar-status-size: max(var(--avatar-status-size-orbital), var(--avatar-status-size-min));box-sizing:border-box;position:absolute;inset-inline-end:0;inset-block-end:0;height:var(--avatar-status-size);width:var(--avatar-status-size);line-height:1;font-size:calc(var(--avatar-status-size) / 1.2);background-color:var(--color-main-background);background-repeat:no-repeat;background-size:var(--avatar-status-size);background-position:center;border-radius:50%;display:flex;align-items:center;justify-content:center}.acli:hover .avatardiv .avatardiv__user-status[data-v-9d57c0d3]{border-color:var(--color-background-hover);background-color:var(--color-background-hover)}.acli.active .avatardiv .avatardiv__user-status[data-v-9d57c0d3]{border-color:var(--color-primary-element-light);background-color:var(--color-primary-element-light)}.avatardiv .avatardiv__user-status--icon[data-v-9d57c0d3]{border:none;background-color:transparent}.avatardiv .popovermenu-wrapper[data-v-9d57c0d3]{position:relative;display:inline-block}.avatar-class-icon[data-v-9d57c0d3]{display:block;border-radius:calc(var(--avatar-size) / 2);background-color:var(--color-background-darker);height:100%}._material-design-icon_GNzpp{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._externalLink_aFEAG{text-decoration:underline}._externalLink_decorated_D-MKg:after{content:" ↗"}.material-design-icon[data-v-86b73d39]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.user-status-icon[data-v-86b73d39]{--user-status-color-online: #2D7B41;--user-status-color-busy: #DB0606;--user-status-color-away: #C88800;--user-status-color-offline: #6B6B6B;display:flex;justify-content:center;align-items:center}.user-status-icon--invisible[data-v-86b73d39]{filter:var(--background-invert-if-dark)}.user-status-icon[data-v-86b73d39] svg{width:100%;height:100%}._fadeTransition_WCulI{transition:all var(--animation-quick) ease}._fadeTransitionActive_IUBx5{opacity:0;position:absolute}.material-design-icon[data-v-6e1e1ed2]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.vue-crumb[data-v-6e1e1ed2]{background-image:none;display:inline-flex;height:var(--default-clickable-area);padding:0}.vue-crumb[data-v-6e1e1ed2]:last-child{min-width:0}.vue-crumb:last-child .vue-crumb__separator[data-v-6e1e1ed2]{display:none}.vue-crumb--hidden[data-v-6e1e1ed2]{display:none}.vue-crumb__separator[data-v-6e1e1ed2]{padding:0;color:var(--color-text-maxcontrast)}.vue-crumb.vue-crumb--hovered[data-v-6e1e1ed2] .button-vue{background-color:var(--color-background-dark);color:var(--color-main-text)}.vue-crumb[data-v-6e1e1ed2]:not(:last-child) .button-vue{color:var(--color-text-maxcontrast)}.vue-crumb[data-v-6e1e1ed2]:not(:last-child) .button-vue:hover,.vue-crumb[data-v-6e1e1ed2]:not(:last-child) .button-vue:focus{background-color:var(--color-background-dark);color:var(--color-main-text)}.vue-crumb[data-v-6e1e1ed2]:not(:last-child) .button-vue__text{font-weight:var(--font-weight-element, normal)}.vue-crumb[data-v-6e1e1ed2] .button-vue__text{margin:0}.vue-crumb[data-v-6e1e1ed2]:not(.dropdown) .action-item{max-width:100%}.vue-crumb[data-v-6e1e1ed2]:not(.dropdown) .action-item .button-vue{padding:0 4px 0 16px;max-width:100%}.vue-crumb[data-v-6e1e1ed2]:not(.dropdown) .action-item .button-vue__wrapper{flex-direction:row-reverse}.vue-crumb[data-v-6e1e1ed2]:not(.dropdown) .action-item.action-item--open .action-item__menutoggle{background-color:var(--color-background-dark);color:var(--color-main-text)}.material-design-icon[data-v-8d4e090c]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.breadcrumb[data-v-8d4e090c]{width:100%;flex-grow:1;display:inline-flex;align-items:center}.breadcrumb--collapsed[data-v-8d4e090c] .vue-crumb:last-child{min-width:100px}.breadcrumb nav[data-v-8d4e090c]{flex-shrink:1;min-width:0}.breadcrumb .breadcrumb__crumbs[data-v-8d4e090c]{max-width:100%}.breadcrumb .breadcrumb__crumbs[data-v-8d4e090c],.breadcrumb .breadcrumb__actions[data-v-8d4e090c]{display:inline-flex}.material-design-icon[data-v-88468fab]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.fade-enter-active[data-v-88468fab],.fade-leave-active[data-v-88468fab]{transition:opacity .3s ease}.fade-enter[data-v-88468fab],.fade-leave-to[data-v-88468fab]{opacity:0}.linked-icons[data-v-88468fab]{display:flex}.linked-icons img[data-v-88468fab]{padding:12px;height:44px;display:block;background-repeat:no-repeat;background-position:center;opacity:.7}.linked-icons img[data-v-88468fab]:hover{opacity:1}.popovermenu[data-v-88468fab]{display:none}.popovermenu.open[data-v-88468fab]{display:block}li.collection-list-item[data-v-88468fab]{flex-wrap:wrap;height:auto;cursor:pointer;margin-bottom:0!important}li.collection-list-item .collection-avatar[data-v-88468fab]{margin-top:0}li.collection-list-item form[data-v-88468fab],li.collection-list-item .collection-item-name[data-v-88468fab]{flex-basis:10%;flex-grow:1;display:flex}li.collection-list-item .collection-item-name[data-v-88468fab]{padding:12px 9px}li.collection-list-item input[data-v-88468fab]{margin-top:4px;border-color:var(--color-border-maxcontrast)}li.collection-list-item input[type=text][data-v-88468fab]{flex-grow:1}li.collection-list-item .error[data-v-88468fab],li.collection-list-item .resource-list-details[data-v-88468fab]{flex-basis:100%;width:100%}li.collection-list-item .resource-list-details li[data-v-88468fab]{display:flex;margin-left:44px;border-radius:3px;cursor:pointer}li.collection-list-item .resource-list-details li[data-v-88468fab]:hover{background-color:var(--color-background-dark)}li.collection-list-item .resource-list-details li a[data-v-88468fab]{flex-grow:1;padding:3px;max-width:calc(100% - 30px);display:flex}li.collection-list-item .resource-list-details span[data-v-88468fab]{display:inline-block;vertical-align:top;margin-right:10px}li.collection-list-item .resource-list-details span.resource-name[data-v-88468fab]{text-overflow:ellipsis;overflow:hidden;position:relative;vertical-align:top;white-space:nowrap;flex-grow:1;padding:4px}li.collection-list-item .resource-list-details img[data-v-88468fab]{width:24px;height:24px}li.collection-list-item .resource-list-details .icon-close[data-v-88468fab]{opacity:.7}li.collection-list-item .resource-list-details .icon-close[data-v-88468fab]:hover,li.collection-list-item .resource-list-details .icon-close[data-v-88468fab]:focus{opacity:1}.should-shake[data-v-88468fab]{animation:shake-88468fab .6s 1 linear}@keyframes shake-88468fab{0%{transform:translate(15px)}20%{transform:translate(-15px)}40%{transform:translate(7px)}60%{transform:translate(-7px)}80%{transform:translate(3px)}to{transform:translate(0)}}.material-design-icon[data-v-e1b88947]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.collection-list *[data-v-e1b88947]{box-sizing:border-box}.collection-list>li[data-v-e1b88947]{display:flex;align-items:center;gap:12px}.collection-list>li>.avatar[data-v-e1b88947]{margin-top:0}#collection-select-container[data-v-e1b88947]{display:flex;flex-direction:column}.v-select span.avatar[data-v-e1b88947]{display:block;padding:16px;opacity:.7;background-repeat:no-repeat;background-position:center}.v-select span.avatar[data-v-e1b88947]:hover{opacity:1}p.hint[data-v-e1b88947]{z-index:1;margin-top:-16px;padding:8px;color:var(--color-text-maxcontrast);line-height:normal}div.avatar[data-v-e1b88947]{width:32px;height:32px;margin:30px 0 0;padding:8px;background-color:var(--color-background-dark)}.icon-projects[data-v-e1b88947]{display:block;padding:8px;background-repeat:no-repeat;background-position:center}.option__wrapper[data-v-e1b88947]{display:flex}.option__wrapper .avatar[data-v-e1b88947]{display:block;width:32px;height:32px;background-color:var(--color-background-darker)!important}.option__wrapper .option__title[data-v-e1b88947]{padding:4px}.fade-enter-active[data-v-e1b88947],.fade-leave-active[data-v-e1b88947]{transition:opacity .5s}.fade-enter[data-v-e1b88947],.fade-leave-to[data-v-e1b88947]{opacity:0}.v-select.select .select__helper-text{display:flex;align-items:center;margin:0;padding-block:4px;padding-inline:var(--border-radius-element);color:var(--color-text-maxcontrast);font-size:var(--default-font-size);overflow-wrap:anywhere}.v-select.select .select__helper-text--error{color:var(--color-error)}.v-select.select .select__helper-text--success{color:var(--color-success)}.v-select.select .select__helper-text .select__helper-text-icon{margin-inline-end:8px}body{--vs-search-input-color: var(--color-main-text);--vs-search-input-bg: var(--color-main-background);--vs-search-input-placeholder-color: var(--color-text-maxcontrast);--vs-font-size: var(--default-font-size);--vs-line-height: var(--default-line-height);--vs-state-disabled-bg: var(--color-background-hover);--vs-state-disabled-color: var(--color-text-maxcontrast);--vs-state-disabled-controls-color: var(--color-text-maxcontrast);--vs-state-disabled-cursor: not-allowed;--vs-disabled-bg: var(--color-background-hover);--vs-disabled-color: var(--color-text-maxcontrast);--vs-disabled-cursor: not-allowed;--vs-border-color: var(--color-border-maxcontrast);--vs-border-width: var(--border-width-input, 2px) !important;--vs-border-style: solid;--vs-border-radius: var(--border-radius-large);--vs-controls-color: var(--color-main-text);--vs-selected-bg: var(--color-background-hover);--vs-selected-color: var(--color-main-text);--vs-selected-border-color: var(--vs-border-color);--vs-selected-border-style: var(--vs-border-style);--vs-selected-border-width: var(--vs-border-width);--vs-dropdown-bg: var(--color-main-background);--vs-dropdown-color: var(--color-main-text);--vs-dropdown-z-index: 9999;--vs-dropdown-box-shadow: 0px 2px 2px 0px var(--color-box-shadow);--vs-dropdown-option-padding: 8px 20px;--vs-dropdown-option--active-bg: var(--color-background-hover);--vs-dropdown-option--active-color: var(--color-main-text);--vs-dropdown-option--kb-focus-box-shadow: inset 0px 0px 0px 2px var(--vs-border-color);--vs-dropdown-option--deselect-bg: var(--color-error);--vs-dropdown-option--deselect-color: #fff;--vs-transition-duration: 0ms;--vs-actions-padding: 0 8px 0 4px}.v-select.select{min-height:calc(var(--default-clickable-area) - 2 * var(--border-width-input));min-width:260px;margin:0 0 var(--default-grid-baseline)}.v-select.select.vs--open{--vs-border-width: var(--border-width-input-focused, 2px)}.v-select.select .select__label{display:block;margin-bottom:2px}.v-select.select .vs__selected{height:calc(var(--default-clickable-area) - 2 * var(--vs-border-width) - var(--default-grid-baseline));margin:calc(var(--default-grid-baseline) / 2);padding-block:0;padding-inline:12px 8px;border-radius:16px!important;background:var(--color-primary-element-light);border:none}.v-select.select.vs--open .vs__selected:first-of-type{margin-inline-start:calc(var(--default-grid-baseline) / 2 - (var(--border-width-input-focused, 2px) - var(--border-width-input, 2px)))!important}.v-select.select .vs__search{text-overflow:ellipsis;color:var(--color-main-text);min-height:unset!important;height:calc(var(--default-clickable-area) - 2 * var(--vs-border-width))!important}.v-select.select .vs__search::placeholder{color:var(--color-text-maxcontrast)}.v-select.select .vs__search,.v-select.select .vs__search:focus{margin:0}.v-select.select .vs__dropdown-toggle{position:relative;max-height:100px;padding:var(--border-width-input);overflow-y:auto}.v-select.select .vs__dropdown-toggle{position:relative}.v-select.select .vs__actions{position:sticky;top:0}.v-select.select .vs__clear{margin-right:2px}.v-select.select.vs--open .vs__dropdown-toggle{border-color:var(--color-main-text);border-bottom-color:transparent;border-bottom-left-radius:0;border-bottom-right-radius:0;border-style:solid;border-width:var(--border-width-input-focused);outline:2px solid var(--color-main-background);padding:0}.v-select.select:not(.vs--disabled,.vs--open) .vs__dropdown-toggle:active,.v-select.select:not(.vs--disabled,.vs--open) .vs__dropdown-toggle:focus-within{outline:2px solid var(--color-main-background);border-color:var(--color-main-text)}.v-select.select.vs--disabled .vs__search,.v-select.select.vs--disabled .vs__selected{color:var(--color-text-maxcontrast)}.v-select.select.vs--disabled .vs__clear,.v-select.select.vs--disabled .vs__deselect{display:none}.v-select.select--no-wrap .vs__selected-options{flex-wrap:nowrap;overflow:auto;min-width:unset}.v-select.select--no-wrap .vs__selected-options .vs__selected{min-width:unset}.v-select.select--drop-up.vs--open .vs__dropdown-toggle{border-radius:0 0 var(--vs-border-radius) var(--vs-border-radius);border-top-color:transparent;border-bottom-color:var(--color-main-text)}.v-select.select .vs__selected-options{min-height:calc(var(--default-clickable-area) - 2 * var(--vs-border-width))}.v-select.select .vs__selected-options .vs__selected~.vs__search[readonly]{position:absolute}.v-select.select .vs__selected-options{padding:0 5px}.v-select.select.vs--single.vs--loading .vs__selected,.v-select.select.vs--single.vs--open .vs__selected{max-width:100%;opacity:1;color:var(--color-text-maxcontrast)}.v-select.select.vs--single .vs__selected-options{flex-wrap:nowrap}.v-select.select.vs--single .vs__selected{background:unset!important}.vs__dropdown-toggle{--input-border-box-shadow-light: 0 -1px var(--vs-border-color), 0 0 0 1px color-mix(in srgb, var(--vs-border-color), 65% transparent);--input-border-box-shadow-dark: 0 1px var(--vs-border-color), 0 0 0 1px color-mix(in srgb, var(--vs-border-color), 65% transparent);--input-border-box-shadow: var(--input-border-box-shadow-light);border:none;border-radius:var(--border-radius-element);box-shadow:var(--input-border-box-shadow)}.vs__dropdown-toggle:hover:not([disabled]){box-shadow:0 0 0 1px var(--vs-border-color)}@media(prefers-color-scheme:dark){.vs__dropdown-toggle .vs__dropdown-toggle{--input-border-box-shadow: var(--input-border-box-shadow-dark)}}[data-theme-dark] .vs__dropdown-toggle{--input-border-box-shadow: var(--input-border-box-shadow-dark)}[data-theme-light] .vs__dropdown-toggle{--input-border-box-shadow: var(--input-border-box-shadow-light)}.select--legacy .vs__dropdown-toggle{box-shadow:0 0 0 1px var(--vs-border-color)}.select--legacy .vs__dropdown-toggle:hover:not([disabled]){box-shadow:0 0 0 2px var(--vs-border-color)}.vs__dropdown-menu{border-width:var(--border-width-input-focused)!important;border-color:var(--color-main-text)!important;outline:none!important;box-shadow:-2px 0 0 var(--color-main-background),0 2px 0 var(--color-main-background),2px 0 0 var(--color-main-background),!important;padding:4px!important}.vs__dropdown-menu--floating{width:max-content;position:absolute;top:0;left:0}.vs__dropdown-menu--floating-placement-top{border-radius:var(--vs-border-radius) var(--vs-border-radius) 0 0!important;border-top-style:var(--vs-border-style)!important;border-bottom-style:none!important;box-shadow:0 -2px 0 var(--color-main-background),-2px 0 0 var(--color-main-background),2px 0 0 var(--color-main-background),!important}.vs__dropdown-menu .vs__dropdown-option{border-radius:6px!important}.vs__dropdown-menu .vs__no-options{color:var(--color-text-lighter)!important}.user-select .vs__selected{padding-inline:0 5px!important}.material-design-icon[data-v-592b8444]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.name-parts[data-v-592b8444]{display:flex;max-width:100%;cursor:inherit}.name-parts__first[data-v-592b8444]{overflow:hidden;text-overflow:ellipsis}.name-parts__first[data-v-592b8444],.name-parts__last[data-v-592b8444]{white-space:pre;cursor:inherit}.name-parts__first strong[data-v-592b8444],.name-parts__last strong[data-v-592b8444]{font-weight:700}.material-design-icon[data-v-eff1d9a4]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.option[data-v-eff1d9a4]{display:flex;align-items:center;width:100%;height:var(--height);cursor:inherit}.option__avatar[data-v-eff1d9a4]{margin-right:var(--margin)}.option__details[data-v-eff1d9a4]{display:flex;flex:1 1;flex-direction:column;justify-content:center;min-width:0}.option__lineone[data-v-eff1d9a4]{color:var(--color-main-text)}.option__linetwo[data-v-eff1d9a4]{color:var(--color-text-maxcontrast)}.option__lineone[data-v-eff1d9a4],.option__linetwo[data-v-eff1d9a4]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;line-height:1.2}.option__lineone strong[data-v-eff1d9a4],.option__linetwo strong[data-v-eff1d9a4]{font-weight:700}.option--compact .option__lineone[data-v-eff1d9a4]{font-size:14px}.option--compact .option__linetwo[data-v-eff1d9a4]{font-size:11px;line-height:1.5;margin-top:-4px}.option__icon[data-v-eff1d9a4]{width:var(--default-clickable-area);height:var(--default-clickable-area);color:var(--color-text-maxcontrast)}.option__icon.icon[data-v-eff1d9a4]{flex:0 0 var(--default-clickable-area);opacity:.7;background-position:center;background-size:16px}.option__details[data-v-eff1d9a4],.option__lineone[data-v-eff1d9a4],.option__linetwo[data-v-eff1d9a4],.option__icon[data-v-eff1d9a4]{cursor:inherit}:host,:root{--vs-colors--lightest:rgba(60,60,60,.26);--vs-colors--light:rgba(60,60,60,.5);--vs-colors--dark:#333;--vs-colors--darkest:rgba(0,0,0,.15);--vs-search-input-color:inherit;--vs-search-input-bg:#fff;--vs-search-input-placeholder-color:inherit;--vs-font-size:1rem;--vs-line-height:1.4;--vs-state-disabled-bg:#f8f8f8;--vs-state-disabled-color:var(--vs-colors--light);--vs-state-disabled-controls-color:var(--vs-colors--light);--vs-state-disabled-cursor:not-allowed;--vs-border-color:var(--vs-colors--lightest);--vs-border-width:1px;--vs-border-style:solid;--vs-border-radius:4px;--vs-actions-padding:4px 6px 0 3px;--vs-controls-color:var(--vs-colors--light);--vs-controls-size:1;--vs-controls--deselect-text-shadow:0 1px 0 #fff;--vs-selected-bg:#f0f0f0;--vs-selected-color:var(--vs-colors--dark);--vs-selected-border-color:var(--vs-border-color);--vs-selected-border-style:var(--vs-border-style);--vs-selected-border-width:var(--vs-border-width);--vs-dropdown-bg:#fff;--vs-dropdown-color:inherit;--vs-dropdown-z-index:1000;--vs-dropdown-min-width:160px;--vs-dropdown-max-height:350px;--vs-dropdown-box-shadow:0px 3px 6px 0px var(--vs-colors--darkest);--vs-dropdown-option-bg:#000;--vs-dropdown-option-color:var(--vs-dropdown-color);--vs-dropdown-option-padding:3px 20px;--vs-dropdown-option--active-bg:#136cfb;--vs-dropdown-option--active-color:#fff;--vs-dropdown-option--kb-focus-box-shadow:inset 0px 0px 0px 2px #949494;--vs-dropdown-option--deselect-bg:#fb5858;--vs-dropdown-option--deselect-color:#fff;--vs-transition-timing-function:cubic-bezier(1,-.115,.975,.855);--vs-transition-duration:.15s}.v-select{font-family:inherit;position:relative}.v-select,.v-select *{box-sizing:border-box}:root{--vs-transition-timing-function:cubic-bezier(1,.5,.8,1);--vs-transition-duration:.15s}@-webkit-keyframes vSelectSpinner{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes vSelectSpinner{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.vs__fade-enter-active,.vs__fade-leave-active{pointer-events:none;transition:opacity var(--vs-transition-duration) var(--vs-transition-timing-function)}.vs__fade-enter,.vs__fade-leave-to{opacity:0}:root{--vs-disabled-bg:var(--vs-state-disabled-bg);--vs-disabled-color:var(--vs-state-disabled-color);--vs-disabled-cursor:var(--vs-state-disabled-cursor)}.vs--disabled .vs__clear,.vs--disabled .vs__dropdown-toggle,.vs--disabled .vs__open-indicator,.vs--disabled .vs__open-indicator-button,.vs--disabled .vs__search,.vs--disabled .vs__selected{background-color:var(--vs-disabled-bg);cursor:var(--vs-disabled-cursor)}.v-select[dir=rtl] .vs__actions{padding:0 3px 0 6px}.v-select[dir=rtl] .vs__clear{margin-left:6px;margin-right:0}.v-select[dir=rtl] .vs__deselect{margin-left:0;margin-right:2px}.v-select[dir=rtl] .vs__dropdown-menu{text-align:right}.vs__dropdown-toggle{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--vs-search-input-bg);border:var(--vs-border-width) var(--vs-border-style) var(--vs-border-color);border-radius:var(--vs-border-radius);display:flex;padding:0 0 4px;white-space:normal}.vs__selected-options{display:flex;flex-basis:100%;flex-grow:1;flex-wrap:wrap;min-width:0;padding:0 2px;position:relative}.vs__actions{align-items:center;display:flex;padding:var(--vs-actions-padding)}.vs--searchable .vs__dropdown-toggle{cursor:text}.vs--unsearchable .vs__dropdown-toggle{cursor:pointer}.vs--open .vs__dropdown-toggle{border-bottom-color:transparent;border-bottom-left-radius:0;border-bottom-right-radius:0}.vs__open-indicator-button{background-color:transparent;border:0;cursor:pointer;padding:0}.vs__open-indicator{fill:var(--vs-controls-color);transform:scale(var(--vs-controls-size));transition:transform var(--vs-transition-duration) var(--vs-transition-timing-function);transition-timing-function:var(--vs-transition-timing-function)}.vs--open .vs__open-indicator{transform:rotate(180deg) scale(var(--vs-controls-size))}.vs--loading .vs__open-indicator{opacity:0}.vs__clear{fill:var(--vs-controls-color);background-color:transparent;border:0;cursor:pointer;margin-right:8px;padding:0}.vs__dropdown-menu{background:var(--vs-dropdown-bg);border:var(--vs-border-width) var(--vs-border-style) var(--vs-border-color);border-radius:0 0 var(--vs-border-radius) var(--vs-border-radius);border-top-style:none;box-shadow:var(--vs-dropdown-box-shadow);box-sizing:border-box;color:var(--vs-dropdown-color);display:block;left:0;list-style:none;margin:0;max-height:var(--vs-dropdown-max-height);min-width:var(--vs-dropdown-min-width);overflow-y:auto;padding:5px 0;position:absolute;text-align:left;top:calc(100% - var(--vs-border-width));width:100%;z-index:var(--vs-dropdown-z-index)}.vs__no-options{text-align:center}.vs__dropdown-option{clear:both;color:var(--vs-dropdown-option-color);cursor:pointer;display:block;line-height:1.42857143;padding:var(--vs-dropdown-option-padding);white-space:nowrap}.vs__dropdown-option--highlight{background:var(--vs-dropdown-option--active-bg);color:var(--vs-dropdown-option--active-color)}.vs__dropdown-option--kb-focus{box-shadow:var(--vs-dropdown-option--kb-focus-box-shadow)}.vs__dropdown-option--deselect{background:var(--vs-dropdown-option--deselect-bg);color:var(--vs-dropdown-option--deselect-color)}.vs__dropdown-option--disabled{background:var(--vs-state-disabled-bg);color:var(--vs-state-disabled-color);cursor:var(--vs-state-disabled-cursor)}.vs__selected{align-items:center;background-color:var(--vs-selected-bg);border:var(--vs-selected-border-width) var(--vs-selected-border-style) var(--vs-selected-border-color);border-radius:var(--vs-border-radius);color:var(--vs-selected-color);display:flex;line-height:var(--vs-line-height);margin:4px 2px 0;min-width:0;padding:0 .25em;z-index:0}.vs__deselect{fill:var(--vs-controls-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;cursor:pointer;display:inline-flex;margin-left:4px;padding:0;text-shadow:var(--vs-controls--deselect-text-shadow)}.vs--single .vs__selected{background-color:transparent;border-color:transparent}.vs--single.vs--loading .vs__selected,.vs--single.vs--open .vs__selected{max-width:100%;opacity:.4;position:absolute}.vs--single.vs--searching .vs__selected{display:none}.vs__search::-webkit-search-cancel-button{display:none}.vs__search::-ms-clear,.vs__search::-webkit-search-decoration,.vs__search::-webkit-search-results-button,.vs__search::-webkit-search-results-decoration{display:none}.vs__search,.vs__search:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:1px solid transparent;border-left:none;box-shadow:none;color:var(--vs-search-input-color);flex-grow:1;font-size:var(--vs-font-size);line-height:var(--vs-line-height);margin:4px 0 0;max-width:100%;outline:none;padding:0 7px;width:0;z-index:1}.vs__search::-moz-placeholder{color:var(--vs-search-input-placeholder-color)}.vs__search:-ms-input-placeholder{color:var(--vs-search-input-placeholder-color)}.vs__search::placeholder{color:var(--vs-search-input-placeholder-color)}.vs--unsearchable .vs__search{opacity:1}.vs--unsearchable:not(.vs--disabled) .vs__search{cursor:pointer}.vs--single.vs--searching:not(.vs--open):not(.vs--loading) .vs__search{opacity:.2}.vs__spinner{align-self:center;-webkit-animation:vSelectSpinner 1.1s linear infinite;animation:vSelectSpinner 1.1s linear infinite;border:.9em solid hsla(0,0%,39%,.1);border-left-color:#3c3c3c73;font-size:5px;opacity:0;overflow:hidden;text-indent:-9999em;transform:translateZ(0) scale(var(--vs-controls--spinner-size,var(--vs-controls-size)));transition:opacity .1s}.vs__spinner,.vs__spinner:after{border-radius:50%;height:5em;transform:scale(var(--vs-controls--spinner-size,var(--vs-controls-size)));width:5em}.vs--loading .vs__spinner{opacity:1}.material-design-icon[data-v-a8b9d9f6]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.color-picker[data-v-a8b9d9f6]{display:flex;overflow:hidden;align-content:flex-end;flex-direction:column;justify-content:space-between;padding:var(--border-radius-element);min-width:calc(4 * var(--default-clickable-area) + 2 * var(--border-radius-element))}.color-picker--clearable[data-v-a8b9d9f6]{min-width:calc(5 * var(--default-clickable-area) + 2 * var(--border-radius-element))}.color-picker--advanced-fields[data-v-a8b9d9f6]{min-width:264px}.color-picker__clear[data-v-a8b9d9f6]{color:var(--color-main-text)}.color-picker__clear[data-v-a8b9d9f6]:hover:not(:has(:checked)){color:var(--color-text-maxcontrast)}.color-picker__simple[data-v-a8b9d9f6]{display:grid;grid-template-columns:repeat(auto-fit,var(--default-clickable-area));grid-auto-rows:var(--default-clickable-area)}.color-picker__simple-color-circle[data-v-a8b9d9f6]{display:flex;align-items:center;justify-content:center;width:calc(var(--default-clickable-area) - 10px);height:calc(var(--default-clickable-area) - 10px);min-height:calc(var(--default-clickable-area) - 10px);margin:auto;padding:0;color:#fff;border:1px solid rgba(0,0,0,.25);border-radius:50%;font-size:16px}.color-picker__simple-color-circle[data-v-a8b9d9f6]:focus-within{outline:2px solid var(--color-main-text)}.color-picker__simple-color-circle[data-v-a8b9d9f6]:hover{opacity:.6}.color-picker__simple-color-circle--active[data-v-a8b9d9f6]{width:calc(var(--default-clickable-area) - 6px);height:calc(var(--default-clickable-area) - 6px);min-height:calc(var(--default-clickable-area) - 6px);transition:all .1s ease-in-out;opacity:1!important}.color-picker__advanced[data-v-a8b9d9f6]{box-shadow:none!important}.color-picker__navigation[data-v-a8b9d9f6]{display:flex;flex-direction:row;gap:var(--default-grid-baseline);justify-content:space-between;margin-top:calc(2 * var(--default-grid-baseline))}[data-v-a8b9d9f6] .vc-chrome{width:unset;background-color:var(--color-main-background)}[data-v-a8b9d9f6] .vc-chrome-color-wrap{width:30px;height:30px}[data-v-a8b9d9f6] .vc-chrome-active-color{border-radius:17px}[data-v-a8b9d9f6] .vc-chrome-body{padding:14px 0 0;background-color:var(--color-main-background)}[data-v-a8b9d9f6] .vc-chrome-body .vc-input__input{--input-border-radius: var(--border-radius-element, var(--border-radius-large));--input-border-width-offset: calc(var(--border-width-input-focused, 2px) - var(--border-width-input, 2px));width:100%;height:var(--default-clickable-area);margin:0;padding-inline:calc(var(--border-radius-large) + var(--input-border-width-offset));padding-block:var(--input-border-width-offset);border:var(--border-width-input, 2px) solid var(--color-border-maxcontrast);border-radius:var(--input-border-radius);font-size:var(--default-font-size);color:var(--color-main-text);box-shadow:none}[data-v-a8b9d9f6] .vc-chrome-body .vc-input__input:active:not([disabled]),[data-v-a8b9d9f6] .vc-chrome-body .vc-input__input:hover:not([disabled]),[data-v-a8b9d9f6] .vc-chrome-body .vc-input__input:focus:not([disabled]){--input-border-width-offset: 0px;border-color:var(--color-main-text);border-width:var(--border-width-input-focused, 2px);box-shadow:0 0 0 2px var(--color-main-background)!important}[data-v-a8b9d9f6] .vc-chrome-body .vc-input__input:active:not([disabled])+.vc-input__label,[data-v-a8b9d9f6] .vc-chrome-body .vc-input__input:hover:not([disabled])+.vc-input__label,[data-v-a8b9d9f6] .vc-chrome-body .vc-input__input:focus:not([disabled])+.vc-input__label{color:var(--color-main-text)}[data-v-a8b9d9f6] .vc-chrome-body .vc-input__label{position:absolute;inset-inline:var(--border-width-input-focused, 2px);inset-block-start:calc(-1.5 * var(--font-size-small, 13px) / 2);max-width:fit-content;margin-inline:calc(var(--border-radius-large) - var(--default-grid-baseline));margin-block:0;padding-inline:var(--default-grid-baseline);font-family:var(--font-face);font-size:var(--font-size-small, 13px);line-height:1.5;font-weight:var(--font-weight-element, 500);color:var(--color-text-maxcontrast);background-color:var(--color-main-background);pointer-events:none}[data-v-a8b9d9f6] .vc-chrome-toggle-btn{display:flex;justify-content:center;align-items:center;width:var(--default-clickable-area);height:var(--default-clickable-area);margin-inline-start:6px;filter:var(--background-invert-if-dark)}[data-v-a8b9d9f6] .vc-chrome-toggle-icon{width:24px;height:24px;margin:0}[data-v-a8b9d9f6] .vc-chrome-toggle-icon-highlight{width:var(--default-clickable-area);height:var(--default-clickable-area);inset:0}[data-v-a8b9d9f6] .vc-chrome-saturation-wrap{border-radius:3px}[data-v-a8b9d9f6] .vc-chrome-saturation-circle{width:20px;height:20px}.slide-enter[data-v-a8b9d9f6]{transform:translate(-50%);opacity:0}.slide-enter-to[data-v-a8b9d9f6],.slide-leave[data-v-a8b9d9f6]{transform:translate(0);opacity:1}.slide-leave-to[data-v-a8b9d9f6]{transform:translate(-50%);opacity:0}.slide-enter-active[data-v-a8b9d9f6],.slide-leave-active[data-v-a8b9d9f6]{transition:all 50ms ease-in-out}#skip-actions.vue-skip-actions:focus-within{top:0!important;left:0!important;width:100vw;height:100vh;padding:var(--body-container-margin)!important;-webkit-backdrop-filter:brightness(50%);backdrop-filter:brightness(50%)}@media only screen and (min-width:1024px){.content:not(.content--legacy) .app-navigation:not(.app-navigation--close)~.app-content{border-inline-start:1px solid var(--color-border);border-start-start-radius:var(--body-container-radius);border-end-start-radius:var(--body-container-radius)}}.material-design-icon[data-v-0549f131]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.vue-skip-actions__container[data-v-0549f131]{background-color:var(--color-main-background);border-radius:var(--border-radius-large);padding:22px}.vue-skip-actions__headline[data-v-0549f131]{font-weight:var(--font-weight-heading, bold);font-size:20px;line-height:30px;margin-bottom:12px}.vue-skip-actions__buttons[data-v-0549f131]{display:flex;flex-wrap:wrap;gap:12px}.vue-skip-actions__buttons>*[data-v-0549f131]{flex:1 0 fit-content}.vue-skip-actions__image[data-v-0549f131]{margin-top:12px}.vue-skip-actions__image[data-v-0549f131]:dir(rtl){transform:rotateY(180deg)}.content[data-v-0549f131]{box-sizing:border-box;margin:var(--body-container-margin);margin-top:var(--header-height);display:flex;width:calc(100% - var(--body-container-margin) * 2);border-radius:var(--body-container-radius);height:var(--body-height);overflow:hidden;padding:0}.content[data-v-0549f131]:not(.content--legacy){background-color:var(--color-main-background-blur, var(--color-main-background));-webkit-backdrop-filter:var(--filter-background-blur, none);backdrop-filter:var(--filter-background-blur, none)}.content[data-v-0549f131]:not(.with-sidebar--full){position:fixed}.content[data-v-0549f131] *{box-sizing:border-box}.material-design-icon[data-v-7d9795d6]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.counter-bubble__counter[data-v-7d9795d6]{--counter-bubble-height: 22px;font-size:var(--font-size-small, 13px);overflow:hidden;width:fit-content;min-width:var(--counter-bubble-height);text-align:center;line-height:var(--counter-bubble-height);padding:0 calc(1.5 * var(--default-grid-baseline));border-radius:var(--border-radius-pill);background-color:var(--color-primary-element-light);font-weight:700;color:var(--color-primary-element-light-text)}.counter-bubble__counter .active[data-v-7d9795d6]{color:var(--color-main-background);background-color:var(--color-primary-element-light)}.counter-bubble__counter--highlighted[data-v-7d9795d6]{color:var(--color-primary-element-text);background-color:var(--color-primary-element)}.counter-bubble__counter--highlighted.active[data-v-7d9795d6]{color:var(--color-primary-element);background-color:var(--color-main-background)}.counter-bubble__counter--outlined[data-v-7d9795d6]{color:var(--color-primary-element);background:transparent;box-shadow:inset 0 0 0 2px}.counter-bubble__counter--outlined.active[data-v-7d9795d6]{color:var(--color-main-background);box-shadow:inset 0 0 0 2px}.material-design-icon[data-v-bde19bf3]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.dashboard-widget[data-v-bde19bf3] .empty-content{text-align:center;padding-top:5vh}.dashboard-widget[data-v-bde19bf3] .empty-content.half-screen{padding-top:0;margin-bottom:1vh}.more[data-v-bde19bf3]{display:block;text-align:center;color:var(--color-text-maxcontrast);line-height:60px;cursor:pointer}.more[data-v-bde19bf3]:hover,.more[data-v-bde19bf3]:focus{background-color:var(--color-background-hover);border-radius:var(--border-radius-large);color:var(--color-main-text)}.item-list__entry[data-v-bde19bf3]{display:flex;align-items:flex-start;padding:8px}.item-list__entry .item-avatar[data-v-bde19bf3]{position:relative;margin-top:auto;margin-bottom:auto;background-color:var(--color-background-dark)!important}.item-list__entry .item__details[data-v-bde19bf3]{padding-left:8px;max-height:var(--default-clickable-area);flex-grow:1;overflow:hidden;display:flex;flex-direction:column}.item-list__entry .item__details h3[data-v-bde19bf3],.item-list__entry .item__details .message[data-v-bde19bf3]{white-space:nowrap;background-color:var(--color-background-dark)}.item-list__entry .item__details h3[data-v-bde19bf3]{font-size:100%;margin:0}.item-list__entry .item__details .message[data-v-bde19bf3]{width:80%;height:15px;margin-top:5px}.material-design-icon[data-v-3c6f752d]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.item-list__entry[data-v-3c6f752d]{display:flex;align-items:center;position:relative;padding:8px}.item-list__entry[data-v-3c6f752d]:hover,.item-list__entry[data-v-3c6f752d]:focus{background-color:var(--color-background-hover);border-radius:var(--border-radius-large)}.item-list__entry .item-avatar[data-v-3c6f752d]{position:relative;margin-top:auto;margin-bottom:auto}.item-list__entry .item__details[data-v-3c6f752d]{padding-inline-start:8px;max-height:fit-content;flex-grow:1;overflow:hidden;display:flex;flex-direction:column;justify-content:center;min-height:var(--default-clickable-area)}.item-list__entry .item__details h3[data-v-3c6f752d],.item-list__entry .item__details .message[data-v-3c6f752d]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.item-list__entry .item__details .message span[data-v-3c6f752d]{width:10px;display:inline-block;margin-bottom:-3px}.item-list__entry .item__details h3[data-v-3c6f752d]{font-size:100%;margin:0}.item-list__entry .item__details .message[data-v-3c6f752d]{width:100%;color:var(--color-text-maxcontrast)}.item-list__entry .item-icon[data-v-3c6f752d]{position:relative;width:14px;height:14px;margin-top:25px;margin-inline:-10px -2px}.item-list__entry button.primary[data-v-3c6f752d]{padding:21px;margin:0}.mx-icon-left:before,.mx-icon-right:before,.mx-icon-double-left:before,.mx-icon-double-right:before,.mx-icon-double-left:after,.mx-icon-double-right:after{content:"";position:relative;top:-1px;display:inline-block;width:10px;height:10px;vertical-align:middle;border-style:solid;border-color:currentColor;border-width:2px 0 0 2px;border-radius:1px;box-sizing:border-box;transform-origin:center;transform:rotate(-45deg) scale(.7)}.mx-icon-double-left:after{left:-4px}.mx-icon-double-right:before{left:4px}.mx-icon-right:before,.mx-icon-double-right:before,.mx-icon-double-right:after{transform:rotate(135deg) scale(.7)}.mx-btn{box-sizing:border-box;line-height:1;font-size:14px;font-weight:500;padding:7px 15px;margin:0;cursor:pointer;background-color:transparent;outline:none;border:1px solid rgba(0,0,0,.1);border-radius:4px;color:#73879c;white-space:nowrap}.mx-btn:hover{border-color:#1284e7;color:#1284e7}.mx-btn:disabled,.mx-btn.disabled{color:#ccc;cursor:not-allowed}.mx-btn-text{border:0;padding:0 4px;text-align:left;line-height:inherit}.mx-scrollbar{height:100%}.mx-scrollbar:hover .mx-scrollbar-track{opacity:1}.mx-scrollbar-wrap{height:100%;overflow-x:hidden;overflow-y:auto}.mx-scrollbar-track{position:absolute;top:2px;right:2px;bottom:2px;width:6px;z-index:1;border-radius:4px;opacity:0;transition:opacity .24s ease-out}.mx-scrollbar-track .mx-scrollbar-thumb{position:absolute;width:100%;height:0;cursor:pointer;border-radius:inherit;background-color:#9093994d;transition:background-color .3s}.mx-zoom-in-down-enter-active,.mx-zoom-in-down-leave-active{opacity:1;transform:scaleY(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:center top}.mx-zoom-in-down-enter,.mx-zoom-in-down-enter-from,.mx-zoom-in-down-leave-to{opacity:0;transform:scaleY(0)}.mx-datepicker{position:relative;display:inline-block;width:210px}.mx-datepicker svg{width:1em;height:1em;vertical-align:-.15em;fill:currentColor;overflow:hidden}.mx-datepicker-range{width:320px}.mx-datepicker-inline{width:auto}.mx-input-wrapper{position:relative}.mx-input{display:inline-block;box-sizing:border-box;width:100%;height:34px;padding:6px 30px 6px 10px;font-size:14px;line-height:1.4;color:#555;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:inset 0 1px 1px #00000013}.mx-input:hover,.mx-input:focus{border-color:#409aff}.mx-input:disabled,.mx-input.disabled{color:#ccc;background-color:#f3f3f3;border-color:#ccc;cursor:not-allowed}.mx-input:focus{outline:none}.mx-input::-ms-clear{display:none}.mx-icon-calendar,.mx-icon-clear{position:absolute;top:50%;right:8px;transform:translateY(-50%);font-size:16px;line-height:1;color:#00000080;vertical-align:middle}.mx-icon-clear{cursor:pointer}.mx-icon-clear:hover{color:#000c}.mx-datepicker-main{font:14px/1.5 Helvetica Neue,Helvetica,Arial,Microsoft Yahei,sans-serif;color:#73879c;background-color:#fff;border:1px solid #e8e8e8}.mx-datepicker-popup{position:absolute;margin-top:1px;margin-bottom:1px;box-shadow:0 6px 12px #0000002d;z-index:2001}.mx-datepicker-sidebar{float:left;box-sizing:border-box;width:100px;padding:6px;overflow:auto}.mx-datepicker-sidebar+.mx-datepicker-content{margin-left:100px;border-left:1px solid #e8e8e8}.mx-datepicker-body{position:relative;-webkit-user-select:none;user-select:none}.mx-btn-shortcut{display:block;padding:0 6px;line-height:24px}.mx-range-wrapper{display:flex}@media(max-width:750px){.mx-range-wrapper{flex-direction:column}}.mx-datepicker-header{padding:6px 8px;border-bottom:1px solid #e8e8e8}.mx-datepicker-footer{padding:6px 8px;text-align:right;border-top:1px solid #e8e8e8}.mx-calendar{box-sizing:border-box;width:248px;padding:6px 12px}.mx-calendar+.mx-calendar{border-left:1px solid #e8e8e8}.mx-calendar-header,.mx-time-header{box-sizing:border-box;height:34px;line-height:34px;text-align:center;overflow:hidden}.mx-btn-icon-left,.mx-btn-icon-double-left{float:left}.mx-btn-icon-right,.mx-btn-icon-double-right{float:right}.mx-calendar-header-label{font-size:14px}.mx-calendar-decade-separator{margin:0 2px}.mx-calendar-decade-separator:after{content:"~"}.mx-calendar-content{position:relative;height:224px;box-sizing:border-box}.mx-calendar-content .cell{cursor:pointer}.mx-calendar-content .cell:hover{color:#73879c;background-color:#f3f9fe}.mx-calendar-content .cell.active{color:#fff;background-color:#1284e7}.mx-calendar-content .cell.in-range,.mx-calendar-content .cell.hover-in-range{color:#73879c;background-color:#dbedfb}.mx-calendar-content .cell.disabled{cursor:not-allowed;color:#ccc;background-color:#f3f3f3}.mx-calendar-week-mode .mx-date-row{cursor:pointer}.mx-calendar-week-mode .mx-date-row:hover{background-color:#f3f9fe}.mx-calendar-week-mode .mx-date-row.mx-active-week{background-color:#dbedfb}.mx-calendar-week-mode .mx-date-row .cell:hover,.mx-calendar-week-mode .mx-date-row .cell.active{color:inherit;background-color:transparent}.mx-week-number{opacity:.5}.mx-table{table-layout:fixed;border-collapse:separate;border-spacing:0;width:100%;height:100%;box-sizing:border-box;text-align:center}.mx-table th{padding:0;font-weight:500;vertical-align:middle}.mx-table td{padding:0;vertical-align:middle}.mx-table-date td,.mx-table-date th{height:32px;font-size:12px}.mx-table-date .today{color:#2a90e9}.mx-table-date .cell.not-current-month{color:#ccc;background:none}.mx-time{flex:1;width:224px;background:#fff}.mx-time+.mx-time{border-left:1px solid #e8e8e8}.mx-calendar-time{position:absolute;top:0;left:0;width:100%;height:100%}.mx-time-header{border-bottom:1px solid #e8e8e8}.mx-time-content{height:224px;box-sizing:border-box;overflow:hidden}.mx-time-columns{display:flex;width:100%;height:100%;overflow:hidden}.mx-time-column{flex:1;position:relative;border-left:1px solid #e8e8e8;text-align:center}.mx-time-column:first-child{border-left:0}.mx-time-column .mx-time-list{margin:0;padding:0;list-style:none}.mx-time-column .mx-time-list:after{content:"";display:block;height:192px}.mx-time-column .mx-time-item{cursor:pointer;font-size:12px;height:32px;line-height:32px}.mx-time-column .mx-time-item:hover{color:#73879c;background-color:#f3f9fe}.mx-time-column .mx-time-item.active{color:#1284e7;background-color:transparent;font-weight:700}.mx-time-column .mx-time-item.disabled{cursor:not-allowed;color:#ccc;background-color:#f3f3f3}.mx-time-option{cursor:pointer;padding:8px 10px;font-size:14px;line-height:20px}.mx-time-option:hover{color:#73879c;background-color:#f3f9fe}.mx-time-option.active{color:#1284e7;background-color:transparent;font-weight:700}.mx-time-option.disabled{cursor:not-allowed;color:#ccc;background-color:#f3f3f3}.mx-datepicker[data-v-219421f]{-webkit-user-select:none;user-select:none;color:var(--color-main-text)}.mx-datepicker[data-v-219421f] svg{fill:var(--color-main-text)}.mx-datepicker[data-v-219421f] .mx-input-wrapper .mx-input{width:100%;border:2px solid var(--color-border-maxcontrast);background-color:var(--color-main-background);background-clip:content-box}.mx-datepicker[data-v-219421f] .mx-input-wrapper .mx-input:active:not(.disabled),.mx-datepicker[data-v-219421f] .mx-input-wrapper .mx-input:hover:not(.disabled),.mx-datepicker[data-v-219421f] .mx-input-wrapper .mx-input:focus:not(.disabled){border-color:var(--color-primary-element)}.mx-datepicker[data-v-219421f] .mx-input-wrapper:disabled,.mx-datepicker[data-v-219421f] .mx-input-wrapper.disabled{cursor:not-allowed;opacity:.7}.mx-datepicker[data-v-219421f] .mx-input-wrapper .mx-icon-calendar,.mx-datepicker[data-v-219421f] .mx-input-wrapper .mx-icon-clear{color:var(--color-text-lighter)}.mx-datepicker-main{color:var(--color-main-text);border:1px solid var(--color-border);background-color:var(--color-main-background);font-family:var(--font-face)!important;line-height:1.5}.mx-datepicker-main svg{fill:var(--color-main-text)}.mx-datepicker-main.mx-datepicker-popup{z-index:2000;box-shadow:none}.mx-datepicker-main.mx-datepicker-popup .mx-datepicker-sidebar+.mx-datepicker-content{border-left:1px solid var(--color-border)}.mx-datepicker-main.show-week-number .mx-calendar{width:296px}.mx-datepicker-main .mx-datepicker-header{border-bottom:1px solid var(--color-border)}.mx-datepicker-main .mx-datepicker-footer{border-top:1px solid var(--color-border)}.mx-datepicker-main .mx-datepicker-btn-confirm{background-color:var(--color-primary-element);border-color:var(--color-primary-element);color:var(--color-primary-element-text)!important;opacity:1!important}.mx-datepicker-main .mx-datepicker-btn-confirm:hover{background-color:var(--color-primary-element-light)!important;border-color:var(--color-primary-element-light)!important}.mx-datepicker-main .mx-calendar{width:264px;padding:5px}.mx-datepicker-main .mx-calendar.mx-calendar-week-mode{width:296px}.mx-datepicker-main .mx-time+.mx-time,.mx-datepicker-main .mx-calendar+.mx-calendar{border-left:1px solid var(--color-border)}.mx-datepicker-main .mx-range-wrapper{display:flex;overflow:hidden}.mx-datepicker-main .mx-range-wrapper .mx-calendar-content .mx-table-date .cell{border-radius:var(--border-radius-small)}.mx-datepicker-main .mx-range-wrapper .mx-calendar-content .mx-table-date .cell.active{border-radius:var(--border-radius-small) 0 0 var(--border-radius-small)}.mx-datepicker-main .mx-range-wrapper .mx-calendar-content .mx-table-date .cell.in-range+.cell.active{border-radius:0 var(--border-radius-small) var(--border-radius-small) 0}.mx-datepicker-main .mx-table{text-align:center}.mx-datepicker-main .mx-table thead>tr>th{text-align:center;opacity:.5;color:var(--color-main-text)}.mx-datepicker-main .mx-table tr:focus,.mx-datepicker-main .mx-table tr:hover,.mx-datepicker-main .mx-table tr:active{background-color:transparent}.mx-datepicker-main .mx-table .cell{transition:all .1s ease-in-out;text-align:center;opacity:.7;border-radius:var(--border-radius-small);min-height:var(--clickable-area-small)!important}.mx-datepicker-main .mx-table .cell>*{cursor:pointer}.mx-datepicker-main .mx-table .cell.today{opacity:1;font-weight:700;background-color:transparent;color:var(--color-primary-element);border-radius:var(--border-radius-small)}.mx-datepicker-main .mx-table .cell.today:hover,.mx-datepicker-main .mx-table .cell.today:focus{color:var(--color-primary-element-text)}.mx-datepicker-main .mx-table .cell.in-range,.mx-datepicker-main .mx-table .cell.disabled{border-radius:var(--border-radius-small);color:var(--color-main-text);opacity:1}.mx-datepicker-main .mx-table .cell.in-range{opacity:.7}.mx-datepicker-main .mx-table .cell.not-current-month{opacity:.5;color:var(--color-text-maxcontrast)}.mx-datepicker-main .mx-table .cell.not-current-month:hover,.mx-datepicker-main .mx-table .cell.not-current-month:focus{opacity:1}.mx-datepicker-main .mx-table .cell:hover,.mx-datepicker-main .mx-table .cell:focus,.mx-datepicker-main .mx-table .cell.actived,.mx-datepicker-main .mx-table .cell.active,.mx-datepicker-main .mx-table .cell.in-range{opacity:1;color:var(--color-primary-element-text);background-color:var(--color-primary-element);font-weight:700}.mx-datepicker-main .mx-table .cell.disabled{opacity:1;color:var(--color-main-text);border-radius:var(--border-radius-small)}.mx-datepicker-main .mx-table .mx-week-number{text-align:center;opacity:.7;border-radius:50px}.mx-datepicker-main .mx-table span.mx-week-number,.mx-datepicker-main .mx-table li.mx-week-number,.mx-datepicker-main .mx-table span.cell,.mx-datepicker-main .mx-table li.cell{min-height:32px}.mx-datepicker-main .mx-table.mx-table-date thead,.mx-datepicker-main .mx-table.mx-table-date tbody,.mx-datepicker-main .mx-table.mx-table-year,.mx-datepicker-main .mx-table.mx-table-month{display:flex;flex-direction:column;justify-content:space-around}.mx-datepicker-main .mx-table.mx-table-date thead tr,.mx-datepicker-main .mx-table.mx-table-date tbody tr,.mx-datepicker-main .mx-table.mx-table-year tr,.mx-datepicker-main .mx-table.mx-table-month tr{display:inline-flex;align-items:center;flex:1 1 32px;justify-content:space-around;min-height:32px;color:var(--color-main-text)}.mx-datepicker-main .mx-table.mx-table-date thead th,.mx-datepicker-main .mx-table.mx-table-date thead td,.mx-datepicker-main .mx-table.mx-table-date tbody th,.mx-datepicker-main .mx-table.mx-table-date tbody td,.mx-datepicker-main .mx-table.mx-table-year th,.mx-datepicker-main .mx-table.mx-table-year td,.mx-datepicker-main .mx-table.mx-table-month th,.mx-datepicker-main .mx-table.mx-table-month td{display:flex;align-items:center;flex:0 1 32%;justify-content:center;min-width:32px;height:95%;min-height:32px;transition:background .1s ease-in-out;color:var(--color-main-text)}.mx-datepicker-main .mx-table.mx-table-year tr th,.mx-datepicker-main .mx-table.mx-table-year tr td{flex-basis:48%}.mx-datepicker-main .mx-table.mx-table-date tr th,.mx-datepicker-main .mx-table.mx-table-date tr td{flex-basis:32px}.mx-datepicker-main .mx-btn{min-width:32px;height:32px;margin:0 2px!important;padding:0;cursor:pointer;text-decoration:none;opacity:1;color:var(--color-main-text);border-radius:var(--border-radius-small);line-height:20px}.mx-datepicker-main .mx-btn:hover,.mx-datepicker-main .mx-btn:focus{opacity:1;color:var(--color-main-text);background-color:var(--color-background-darker)}.mx-datepicker-main .mx-calendar-header{display:inline-flex;align-items:center;justify-content:space-between;width:100%;height:var(--default-clickable-area);margin-bottom:4px}.mx-datepicker-main .mx-calendar-header button{min-width:32px;min-height:32px;margin:0;cursor:pointer;text-align:center;text-decoration:none;opacity:1;color:var(--color-main-text);border-radius:var(--border-radius-small);background-color:transparent;line-height:20px}.mx-datepicker-main .mx-calendar-header button:hover,.mx-datepicker-main .mx-calendar-header button:focus{opacity:1;color:var(--color-main-text);background-color:var(--color-background-darker)}.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-left,.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-left,.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-right,.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-right{align-items:center;justify-content:center;width:32px;padding:0}.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-left>i:after,.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-left>i:before,.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-left>i:after,.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-left>i:before,.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-right>i:after,.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-right>i:before,.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-right>i:after,.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-right>i:before{content:none}.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-left>i,.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-left>i,.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-right>i,.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-right>i{background-repeat:no-repeat;background-size:16px;background-position:center;filter:var(--background-invert-if-dark);display:inline-block;width:32px;height:32px}.mx-datepicker-main .mx-calendar-header button.mx-btn-text{line-height:initial}.mx-datepicker-main .mx-calendar-header .mx-calendar-header-label{display:flex;color:var(--color-main-text)}.mx-datepicker-main .mx-calendar-header .mx-btn-icon-double-left>i{background-image:url("data:image/svg+xml,%3c!--%20-%20SPDX-FileCopyrightText:%202020%20Google%20Inc.%20-%20SPDX-License-Identifier:%20Apache-2.0%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20fill='%23222'%3e%3cpath%20d='M18.4%207.4L17%206l-6%206%206%206%201.4-1.4-4.6-4.6%204.6-4.6m-6%200L11%206l-6%206%206%206%201.4-1.4L7.8%2012l4.6-4.6z'/%3e%3c/svg%3e")}.mx-datepicker-main .mx-calendar-header .mx-btn-icon-left>i{background-image:url("data:image/svg+xml,%3c!--%20-%20SPDX-FileCopyrightText:%202020%20Google%20Inc.%20-%20SPDX-License-Identifier:%20Apache-2.0%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20fill='%23222'%3e%3cpath%20d='M15.4%2016.6L10.8%2012l4.6-4.6L14%206l-6%206%206%206%201.4-1.4z'/%3e%3c/svg%3e")}.mx-datepicker-main .mx-calendar-header .mx-btn-icon-right>i{background-image:url("data:image/svg+xml,%3c!--%20-%20SPDX-FileCopyrightText:%202020%20Google%20Inc.%20-%20SPDX-License-Identifier:%20Apache-2.0%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20fill='%23222'%3e%3cpath%20d='M8.6%2016.6l4.6-4.6-4.6-4.6L10%206l6%206-6%206-1.4-1.4z'/%3e%3c/svg%3e")}.mx-datepicker-main .mx-calendar-header .mx-btn-icon-double-right>i{background-image:url("data:image/svg+xml,%3c!--%20-%20SPDX-FileCopyrightText:%202020%20Google%20Inc.%20-%20SPDX-License-Identifier:%20Apache-2.0%20--%3e%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20fill='%23222'%3e%3cpath%20d='M5.6%207.4L7%206l6%206-6%206-1.4-1.4%204.6-4.6-4.6-4.6m6%200L13%206l6%206-6%206-1.4-1.4%204.6-4.6-4.6-4.6z'/%3e%3c/svg%3e")}.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-right{order:2}.mx-datepicker-main .mx-calendar-header button.mx-btn-icon-double-right{order:3}.mx-datepicker-main .mx-calendar-week-mode .mx-date-row .mx-week-number{font-weight:700}.mx-datepicker-main .mx-calendar-week-mode .mx-date-row:hover,.mx-datepicker-main .mx-calendar-week-mode .mx-date-row.mx-active-week{opacity:1;border-radius:var(--border-radius-small);background-color:var(--color-background-dark)}.mx-datepicker-main .mx-calendar-week-mode .mx-date-row:hover td,.mx-datepicker-main .mx-calendar-week-mode .mx-date-row.mx-active-week td{background-color:transparent}.mx-datepicker-main .mx-calendar-week-mode .mx-date-row:hover td,.mx-datepicker-main .mx-calendar-week-mode .mx-date-row:hover td:hover,.mx-datepicker-main .mx-calendar-week-mode .mx-date-row:hover td:focus,.mx-datepicker-main .mx-calendar-week-mode .mx-date-row.mx-active-week td,.mx-datepicker-main .mx-calendar-week-mode .mx-date-row.mx-active-week td:hover,.mx-datepicker-main .mx-calendar-week-mode .mx-date-row.mx-active-week td:focus{color:inherit}.mx-datepicker-main .mx-calendar-week-mode .mx-date-row.mx-active-week{color:var(--color-primary-element-text);background-color:var(--color-primary-element)}.mx-datepicker-main .mx-calendar-week-mode .mx-date-row.mx-active-week td{opacity:.7;font-weight:400}.mx-datepicker-main .mx-time{background-color:var(--color-main-background)}.mx-datepicker-main .mx-time .mx-time-header{justify-content:center;border-bottom:1px solid var(--color-border);opacity:1!important;background-color:transparent}.mx-datepicker-main .mx-time .mx-time-column{border-left:1px solid var(--color-border)}.mx-datepicker-main .mx-time .mx-time-option.active,.mx-datepicker-main .mx-time .mx-time-item.active{background-color:var(--color-primary-element);color:var(--color-primary-element-text)}.mx-datepicker-main .mx-time .mx-time-option:hover,.mx-datepicker-main .mx-time .mx-time-item:hover{background-color:var(--color-background-hover);color:var(--color-main-text)}.mx-datepicker-main .mx-time .mx-time-option.disabled,.mx-datepicker-main .mx-time .mx-time-item.disabled{cursor:not-allowed;opacity:.5;color:var(--color-main-text)}.material-design-icon[data-v-ecb9b537]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.mx-datepicker[data-v-ecb9b537] .mx-input-wrapper .mx-input{background-clip:border-box}.datetime-picker-inline-icon[data-v-ecb9b537]{opacity:.3;border:none;background-color:transparent;border-radius:0;padding:0!important;margin:0}.datetime-picker-inline-icon--highlighted[data-v-ecb9b537]{opacity:.7}.datetime-picker-inline-icon[data-v-ecb9b537]:focus,.datetime-picker-inline-icon[data-v-ecb9b537]:hover{opacity:1}.v-popper--theme-nc-popover-8.v-popper__popper.timezone-select__popper .v-popper__wrapper{border-radius:var(--border-radius-large)}.v-popper--theme-nc-popover-8.v-popper__popper.timezone-select__popper .v-popper__wrapper .v-popper__inner{padding:4px;border-radius:var(--border-radius-large)}.v-popper--theme-nc-popover-8.v-popper__popper.timezone-select__popper .v-popper__wrapper .v-popper__inner .timezone-popover-wrapper__label{padding:4px 0 4px 14px}.v-popper--theme-nc-popover-8.v-popper__popper.timezone-select__popper .v-popper__wrapper .v-popper__inner .timezone-popover-wrapper__timezone-select.v-select.select{min-width:246px;left:-8px!important}.v-popper--theme-nc-popover-8.v-popper__popper.timezone-select__popper .v-popper__wrapper .v-popper__inner .timezone-popover-wrapper__timezone-select.v-select .vs__dropdown-toggle{border-radius:calc(var(--border-radius-large) - 4px)}.v-popper--theme-nc-popover-8.v-popper__popper.timezone-select__popper .v-popper__wrapper .v-popper__inner .timezone-popover-wrapper__timezone-select.v-select.vs--open .vs__dropdown-toggle{border-bottom-left-radius:0;border-bottom-right-radius:0}.v-popper--theme-nc-popover-8.v-popper__popper.timezone-select__popper .v-popper__wrapper .v-popper__inner .timezone-popover-wrapper__timezone-select.v-select.vs--open.select--drop-up .vs__dropdown-toggle{border-radius:0 0 calc(var(--border-radius-large) - 4px) calc(var(--border-radius-large) - 4px)}.vs__dropdown-menu--floating{z-index:100001!important}.material-design-icon[data-v-a3ed576d]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart,.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart *{box-sizing:border-box;line-height:1.15}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart{font-family:-apple-system,BlinkMacSystemFont,Helvetica Neue,sans-serif;font-size:16px;display:flex;flex-direction:column;height:420px;color:#222427;border:1px solid #d9d9d9;border-radius:5px;background:#fff}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-emoji{padding:6px;position:relative;display:inline-block;font-size:0;border:none;background:none;box-shadow:none}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-emoji span{display:inline-block}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-preview-emoji .emoji-mart-emoji span{width:38px;height:38px;font-size:32px}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-type-native{font-family:"Segoe UI Emoji",Segoe UI Symbol,Segoe UI,"Apple Color Emoji",Twemoji Mozilla,"Noto Color Emoji",EmojiOne Color,"Android Emoji";word-break:keep-all}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-type-image{background-size:6100%}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-type-image.emoji-set-apple{background-image:url(https://unpkg.com/emoji-datasource-apple@15.0.1/img/apple/sheets-256/64.png)}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-type-image.emoji-set-facebook{background-image:url(https://unpkg.com/emoji-datasource-facebook@15.0.1/img/facebook/sheets-256/64.png)}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-type-image.emoji-set-google{background-image:url(https://unpkg.com/emoji-datasource-google@15.0.1/img/google/sheets-256/64.png)}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-type-image.emoji-set-twitter{background-image:url(https://unpkg.com/emoji-datasource-twitter@15.0.1/img/twitter/sheets-256/64.png)}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-bar{border:0 solid #d9d9d9}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-bar:first-child{border-bottom-width:1px;border-top-left-radius:5px;border-top-right-radius:5px}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-bar:last-child{border-top-width:1px;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-scroll{position:relative;overflow-y:scroll;flex:1;padding:0 6px 6px;z-index:0;will-change:transform;-webkit-overflow-scrolling:touch}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-anchors{display:flex;flex-direction:row;justify-content:space-between;padding:0 6px;color:#858585;line-height:0}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-anchor{position:relative;display:block;flex:1 1 auto;text-align:center;padding:12px 4px;overflow:hidden;transition:color .1s ease-out;border:none;background:none;box-shadow:none}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-anchor:hover,.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-anchor-selected{color:#464646}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-anchor-selected .emoji-mart-anchor-bar{bottom:0}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-anchor-bar{position:absolute;bottom:-3px;left:0;width:100%;height:3px;background-color:#464646}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-anchors i{display:inline-block;width:100%;max-width:22px}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-anchors svg{fill:currentColor;max-height:18px}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .scroller{height:250px;position:relative;flex:1;padding:0 6px 6px;z-index:0;will-change:transform;-webkit-overflow-scrolling:touch}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-search{margin-top:6px;padding:0 6px}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-search input{font-size:16px;display:block;width:100%;padding:.2em .6em;border-radius:25px;border:1px solid #d9d9d9;outline:0}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-search-results{height:250px;overflow-y:scroll}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-category{position:relative}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-category .emoji-mart-emoji span{z-index:1;position:relative;text-align:center;cursor:default}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-category .emoji-mart-emoji:hover:before,.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-emoji-selected:before{z-index:0;content:"";position:absolute;top:0;left:0;width:100%;height:100%;background-color:#f4f4f4;border-radius:100%;opacity:0}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-category .emoji-mart-emoji:hover:before,.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-emoji-selected:before{opacity:1}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-category-label{position:sticky;top:0}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-static .emoji-mart-category-label{z-index:2;position:relative}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-category-label h3{display:block;font-size:16px;width:100%;font-weight:500;padding:5px 6px;background-color:#fff;background-color:#fffffff2}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-emoji{position:relative;display:inline-block;font-size:0}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-no-results{font-size:14px;text-align:center;padding-top:70px;color:#858585}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-no-results .emoji-mart-category-label{display:none}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-no-results .emoji-mart-no-results-label{margin-top:.2em}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-no-results .emoji-mart-emoji:hover:before{content:none}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-preview{position:relative;height:70px}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-preview-emoji,.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-preview-data,.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-preview-skins{position:absolute;top:50%;transform:translateY(-50%)}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-preview-emoji{left:12px}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-preview-data{left:68px;right:12px;word-break:break-all}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-preview-skins{right:30px;text-align:right}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-preview-name{font-size:14px}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-preview-shortname{font-size:12px;color:#888}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-preview-shortname+.emoji-mart-preview-shortname,.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-preview-shortname+.emoji-mart-preview-emoticon,.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-preview-emoticon+.emoji-mart-preview-emoticon{margin-left:.5em}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-preview-emoticon{font-size:11px;color:#bbb}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-title span{display:inline-block;vertical-align:middle}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-title .emoji-mart-emoji{padding:0}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-title-label{color:#999a9c;font-size:21px;font-weight:300}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-swatches{font-size:0;padding:2px 0;border:1px solid #d9d9d9;border-radius:12px;background-color:#fff}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-swatches-opened .emoji-mart-skin-swatch{width:16px;padding:0 2px}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-swatches-opened .emoji-mart-skin-swatch-selected:after{opacity:.75}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-swatch{display:inline-block;width:0;vertical-align:middle;transition-property:width,padding;transition-duration:.125s;transition-timing-function:ease-out}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-swatch:nth-child(1){transition-delay:0s}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-swatch:nth-child(2){transition-delay:.03s}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-swatch:nth-child(3){transition-delay:.06s}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-swatch:nth-child(4){transition-delay:.09s}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-swatch:nth-child(5){transition-delay:.12s}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-swatch:nth-child(6){transition-delay:.15s}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-swatch-selected{position:relative;width:16px;padding:0 2px}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-swatch-selected:after{content:"";position:absolute;top:50%;left:50%;width:4px;height:4px;margin:-2px 0 0 -2px;background-color:#fff;border-radius:100%;pointer-events:none;opacity:0;transition:opacity .2s ease-out}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin{display:inline-block;width:100%;padding-top:100%;max-width:12px;border-radius:100%}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-tone-1{background-color:#ffc93a}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-tone-2{background-color:#fadcbc}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-tone-3{background-color:#e0bb95}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-tone-4{background-color:#bf8f68}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-tone-5{background-color:#9b643d}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-skin-tone-6{background-color:#594539}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .vue-recycle-scroller{position:relative}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .vue-recycle-scroller.direction-vertical:not(.page-mode){overflow-y:auto}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .vue-recycle-scroller.direction-horizontal:not(.page-mode){overflow-x:auto}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .vue-recycle-scroller.direction-horizontal{display:flex}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .vue-recycle-scroller__slot{flex:auto 0 0}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .vue-recycle-scroller__item-wrapper{flex:1;box-sizing:border-box;overflow:hidden;position:relative}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .vue-recycle-scroller.ready .vue-recycle-scroller__item-view{position:absolute;top:0;left:0;will-change:transform}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .vue-recycle-scroller.direction-vertical .vue-recycle-scroller__item-wrapper{width:100%}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .vue-recycle-scroller.direction-horizontal .vue-recycle-scroller__item-wrapper{height:100%}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .vue-recycle-scroller.ready.direction-vertical .vue-recycle-scroller__item-view{width:100%}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .vue-recycle-scroller.ready.direction-horizontal .vue-recycle-scroller__item-view{height:100%}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .resize-observer[data-v-b329ee4c]{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;border:none;background-color:transparent;pointer-events:none;display:block;overflow:hidden;opacity:0}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .resize-observer[data-v-b329ee4c] object{display:block;position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart-search .hidden{display:none;visibility:hidden}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart{background-color:var(--color-main-background)!important;border:0;color:var(--color-main-text)!important}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart button{border:none;background:transparent;font-size:inherit}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-bar,.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-anchors,.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-search,.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-search input,.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-category,.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-category-label,.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-category-label span,.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-skin-swatches{background-color:transparent!important;border-color:var(--color-border)!important;color:inherit!important}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-anchors{padding-block:0;padding-inline:calc(2 * var(--default-grid-baseline))}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-anchor{border-radius:0;margin:0!important;padding:0!important;height:var(--clickable-area-small);min-width:var(--clickable-area-small)}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-anchor:hover{background-color:var(--color-background-hover)}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-anchor:focus-visible{outline:2px solid var(--color-primary-element)!important;outline-offset:-2px}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-anchor div{display:grid;place-content:center}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-scroll{padding-inline:calc(2 * var(--default-grid-baseline));padding-block:0 calc(2 * var(--default-grid-baseline))}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-category{display:grid;grid-template-columns:repeat(8,1fr);justify-items:stretch}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-category.emoji-mart-no-results{grid-template-columns:1fr;font-size:inherit;color:var(--color-text-maxcontrast)!important}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart div.emoji-mart-category-label{grid-column:span 8;justify-self:stretch}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart h3.emoji-mart-category-label{display:flex;align-items:center;height:var(--default-clickable-area);margin:0;padding-inline:calc(2 * var(--default-grid-baseline));padding-block:0;-webkit-user-select:none;user-select:none}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-emoji{aspect-ratio:1/1;text-align:center;margin:0!important;padding:0!important}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-emoji:hover,.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-emoji:focus-visible,.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-emoji.emoji-mart-emoji-selected{background-color:var(--color-background-hover)!important;border:none;border-radius:var(--border-radius-element, var(--border-radius-pill));box-shadow:none!important;outline:2px solid var(--color-primary-element)!important;outline-offset:-2px}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-emoji:before{display:none}.nc-emoji-picker-container[data-v-a3ed576d] .emoji-mart .emoji-mart-emoji span{cursor:pointer}.search__wrapper[data-v-a3ed576d]{display:flex;flex-direction:row;gap:var(--default-grid-baseline);align-items:end;padding-block:var(--default-grid-baseline);padding-inline:calc(2 * var(--default-grid-baseline))}.row-selected button[data-v-a3ed576d],.row-selected span[data-v-a3ed576d]{vertical-align:middle}.emoji-delete[data-v-a3ed576d]{vertical-align:top;margin-left:-21px;margin-top:-3px}._filePicker_kpj0w{display:inline-flex;align-items:center;height:var(--default-clickable-area)}._material-design-icon_gWj5X{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._ncFormBox_8SXmc{display:flex;flex-direction:column;gap:calc(1 * var(--default-grid-baseline))}._ncFormBox_8SXmc._ncFormBox_row_kw9MX{flex-direction:row}._ncFormBox__item_vN1-9{border-radius:var(--border-radius-small)!important}._ncFormBox_col_FDWmD{flex-direction:column}._ncFormBox_col_FDWmD ._ncFormBox__item_vN1-9:first-child{border-start-start-radius:var(--border-radius-element)!important;border-start-end-radius:var(--border-radius-element)!important}._ncFormBox_col_FDWmD ._ncFormBox__item_vN1-9:last-child{border-end-start-radius:var(--border-radius-element)!important;border-end-end-radius:var(--border-radius-element)!important}._ncFormBox_row_kw9MX{flex-direction:row}._ncFormBox_row_kw9MX ._ncFormBox__item_vN1-9{flex:1 1}._ncFormBox_row_kw9MX ._ncFormBox__item_vN1-9:first-child{border-start-start-radius:var(--border-radius-element)!important;border-end-start-radius:var(--border-radius-element)!important}._ncFormBox_row_kw9MX ._ncFormBox__item_vN1-9:last-child{border-end-end-radius:var(--border-radius-element)!important;border-start-end-radius:var(--border-radius-element)!important}._material-design-icon_QWbl5{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._formBoxButton_Pa5j3{background:unset;border:none;color:inherit;font-size:inherit;font-weight:inherit;text-decoration:none;text-align:inherit;line-height:inherit;padding:0;margin:0;outline:none}._material-design-icon_xGIGM{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._formBoxItem_8k9RN{--nc-form-box-item-border-width: 1px;--nc-form-box-item-min-height: 40px;--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline));--form-element-label-padding: calc(var(--form-element-label-offset) - var(--nc-form-box-item-border-width));--color-primary-element-extra-light: hsl(from var(--color-primary-element-light) h s calc(l*1.045) );--color-primary-element-extra-light-hover: hsl(from var(--color-primary-element-light-hover) h s calc(l*1.045) );position:relative;display:flex;align-items:center;gap:calc(2 * var(--default-grid-baseline));min-height:var(--nc-form-box-item-min-height);padding-inline:var(--form-element-label-padding);border:1px solid var(--color-primary-element-extra-light-hover);border-bottom-width:2px;border-radius:var(--border-radius-element);background-color:var(--color-primary-element-extra-light);color:var(--color-main-text);font-weight:var(--font-weight-element, normal);transition-property:color,border-color,background-color;transition-duration:var(--animation-quick);transition-timing-function:linear;-webkit-user-select:none;user-select:none;cursor:pointer}._formBoxItem_8k9RN *{cursor:inherit}._formBoxItem_8k9RN:has(:disabled){cursor:default;opacity:.5}._formBoxItem_8k9RN:hover:not(:has(:disabled)){color:var(--color-primary-element-light-text);background-color:var(--color-primary-element-extra-light-hover)}._formBoxItem_8k9RN:has(:focus-visible){outline:2px solid var(--color-main-text);box-shadow:0 0 0 4px var(--color-main-background)}._formBoxItem__description_4NvvC{font-weight:var(--font-weight-default, normal)}._formBoxItem_8k9RN._formBoxItem_legacy_t2lTH{--nc-form-box-item-border-width: 0px;border:none}._formBoxItem_8k9RN._formBoxItem_inverted_g6YRx ._formBoxItem__element_7ZHAo{color:var(--color-text-maxcontrast)}._formBoxItem_8k9RN._formBoxItem_inverted_g6YRx ._formBoxItem__description_4NvvC{color:inherit}._formBoxItem__content_IXcg2{flex:1;display:flex;flex-direction:column;padding-block:calc(2 * var(--default-grid-baseline));overflow-wrap:anywhere}._formBoxItem__element_7ZHAo:after{content:"";position:absolute;inset:0}._formBoxItem__description_4NvvC{color:var(--color-text-maxcontrast)}._formBoxItem__icon_g2r6e{display:flex;align-items:center;justify-content:flex-end}._material-design-icon_4zTZb{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}input._formBoxSwitch__input_jnu4g{margin:0;width:var(--default-clickable-area);position:absolute;inset-block:0;inset-inline-end:var(--form-element-label-offset);z-index:-1;opacity:0!important;height:auto;cursor:inherit}._material-design-icon_IErvu{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._formGroup_N8-xx{--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline));--form-group-content-gap: calc(2 * var(--default-grid-baseline))}._formGroup_N8-xx._formGroup_noGap_uPSBm{--form-group-content-gap: 0}._formGroup__label_jDgIk{padding-inline:var(--form-element-label-offset);font-size:var(--font-size);font-weight:var(--font-weight-heading, bold)}._formGroup__description_IvYWg{padding-inline:var(--form-element-label-offset);color:var(--color-text-maxcontrast)}._formGroup__content_W--Vi{display:flex;flex-direction:column;gap:var(--form-group-content-gap);margin-block-start:calc(2.5 * var(--default-grid-baseline))}._formGroup__content_W--Vi._formGroup__content_only_P20X4{margin-block-start:0}.material-design-icon[data-v-4979e1a8]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}#guest-content-vue[data-v-4979e1a8]{color:var(--color-main-text);background-color:var(--color-main-background);min-width:0;border-radius:var(--border-radius-large);box-shadow:0 0 10px var(--color-box-shadow);height:fit-content;padding:15px;margin:20px auto}#content:has(#guest-content-vue){overflow:auto;margin-bottom:0;height:calc(var(--body-height) + var(--body-container-margin))}.material-design-icon[data-v-f1ee5a71]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.header-menu[data-v-f1ee5a71]{position:relative;width:var(--header-height);height:var(--header-height)}.header-menu .header-menu__trigger[data-v-f1ee5a71]{--button-size: var(--header-height) !important;height:var(--header-height);opacity:.85;filter:none!important;color:var(--color-background-plain-text, var(--color-primary-text))!important}.header-menu .header-menu__trigger[data-v-f1ee5a71]:focus-visible{outline:none!important;box-shadow:none!important}.header-menu .header-menu__trigger[data-v-f1ee5a71] .button-vue__icon svg,.header-menu .header-menu__trigger[data-v-f1ee5a71] .button-vue__icon:not(:has(svg)){mask:var(--header-menu-icon-mask, none)}.header-menu--opened .header-menu__trigger[data-v-f1ee5a71],.header-menu__trigger[data-v-f1ee5a71]:hover,.header-menu__trigger[data-v-f1ee5a71]:focus,.header-menu__trigger[data-v-f1ee5a71]:active{opacity:1}@media only screen and (max-width:512px){.header-menu[data-v-f1ee5a71]{width:var(--default-clickable-area)}.header-menu .header-menu__trigger[data-v-f1ee5a71]{--button-size: var(--default-clickable-area) !important}}.material-design-icon[data-v-f00deac7]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}/*! + * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */.header-menu[data-v-f00deac7]{position:relative;width:var(--header-height);height:var(--header-height)}.header-menu .header-menu__trigger[data-v-f00deac7]{--button-size: var(--header-height) !important;height:var(--header-height);opacity:.85;filter:none!important;color:var(--color-background-plain-text, var(--color-primary-text))!important}.header-menu .header-menu__trigger[data-v-f00deac7]:focus-visible{outline:none!important;box-shadow:none!important}.header-menu .header-menu__trigger[data-v-f00deac7] .button-vue__icon svg,.header-menu .header-menu__trigger[data-v-f00deac7] .button-vue__icon:not(:has(svg)){mask:var(--header-menu-icon-mask, none)}.header-menu--opened .header-menu__trigger[data-v-f00deac7],.header-menu__trigger[data-v-f00deac7]:hover,.header-menu__trigger[data-v-f00deac7]:focus,.header-menu__trigger[data-v-f00deac7]:active{opacity:1}@media only screen and (max-width:512px){.header-menu[data-v-f00deac7]{width:var(--default-clickable-area)}.header-menu .header-menu__trigger[data-v-f00deac7]{--button-size: var(--default-clickable-area) !important}}.header-menu__wrapper[data-v-f00deac7]{position:fixed;z-index:2000;top:var(--header-height);inset-inline-end:0;box-sizing:border-box;margin:0 8px;border-radius:0 0 var(--border-radius) var(--border-radius);border-radius:var(--border-radius-large);background-color:var(--color-main-background);filter:drop-shadow(0 1px 5px var(--color-box-shadow))}.header-menu__carret[data-v-f00deac7]{position:absolute;z-index:2001;bottom:0;inset-inline-start:calc(50% - 10px);width:0;height:0;content:" ";pointer-events:none;border:10px solid transparent;border-bottom-color:var(--color-main-background)}.header-menu__content[data-v-f00deac7]{overflow:auto;width:350px;max-width:calc(100vw - 16px);min-height:calc(var(--default-clickable-area) * 1.5);max-height:calc(100vh - var(--header-height) * 2)}.header-menu__content[data-v-f00deac7] .empty-content{margin:12vh 10px}._material-design-icon_CGDwu{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._hotkey_4tWyO{--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline));display:flex;flex-direction:row-reverse;align-items:stretch;padding-inline:var(--form-element-label-offset)}._hotkey_4tWyO:first-child ._hotkey__label_oRn0Q,._hotkey_4tWyO:first-child ._hotkey__keys_RJtae{border-block-start:none}._hotkey__label_oRn0Q,._hotkey__keys_RJtae{display:flex;align-items:center;padding-block:calc(2 * var(--default-grid-baseline));border-block-start:1px solid var(--color-border)}._hotkey__label_oRn0Q{flex:1 1 200px}._hotkey__keys_RJtae{flex:1 1 auto;flex-wrap:wrap;justify-content:end;row-gap:calc(1 * var(--default-grid-baseline))}._material-design-icon_ApuGY{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._kbd_d0mOk{display:inline-flex;align-items:center;justify-content:center;min-width:var(--default-clickable-area);height:var(--default-clickable-area);padding-inline:calc(2 * var(--default-grid-baseline)) calc(2 * var(--default-grid-baseline));border:2px solid var(--color-primary-element-light);border-block-end-width:4px;border-radius:var(--border-radius-element);box-shadow:none;font-family:var(--font-family);line-height:1;white-space:nowrap}._kbd_d0mOk+._kbd_d0mOk{margin-inline-start:calc(1 * var(--default-grid-baseline))}._hotkeyList_oWjLv{--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline))}._hotkeyList__heading_Mi65o{font-weight:var(--font-weight-heading, bold);margin-inline:var(--form-element-label-offset)}.material-design-icon[data-v-9ea2f116]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.list-item__wrapper[data-v-9ea2f116]{display:flex;position:relative;width:100%;padding:2px 4px}.list-item__wrapper[data-v-9ea2f116]:first-of-type{padding-block-start:4px}.list-item__wrapper[data-v-9ea2f116]:last-of-type{padding-block-end:4px}.list-item__wrapper--active .list-item[data-v-9ea2f116],.list-item__wrapper.active .list-item[data-v-9ea2f116]{background-color:var(--color-primary-element);color:var(--color-primary-element-text)!important}.list-item__wrapper--active .list-item[data-v-9ea2f116]:hover,.list-item__wrapper--active .list-item[data-v-9ea2f116]:focus-within,.list-item__wrapper--active .list-item[data-v-9ea2f116]:has(:focus-visible),.list-item__wrapper--active .list-item[data-v-9ea2f116]:has(:active),.list-item__wrapper.active .list-item[data-v-9ea2f116]:hover,.list-item__wrapper.active .list-item[data-v-9ea2f116]:focus-within,.list-item__wrapper.active .list-item[data-v-9ea2f116]:has(:focus-visible),.list-item__wrapper.active .list-item[data-v-9ea2f116]:has(:active){background-color:var(--color-primary-element-hover)}.list-item__wrapper--active .list-item-content__name[data-v-9ea2f116],.list-item__wrapper--active .list-item-content__subname[data-v-9ea2f116],.list-item__wrapper--active .list-item-content__details[data-v-9ea2f116],.list-item__wrapper--active .list-item-details__details[data-v-9ea2f116],.list-item__wrapper.active .list-item-content__name[data-v-9ea2f116],.list-item__wrapper.active .list-item-content__subname[data-v-9ea2f116],.list-item__wrapper.active .list-item-content__details[data-v-9ea2f116],.list-item__wrapper.active .list-item-details__details[data-v-9ea2f116]{color:var(--color-primary-element-text)!important}.list-item__wrapper .list-item-content__name[data-v-9ea2f116],.list-item__wrapper .list-item-content__subname[data-v-9ea2f116],.list-item__wrapper .list-item-content__details[data-v-9ea2f116],.list-item__wrapper .list-item-details__details[data-v-9ea2f116]{white-space:nowrap;margin-block:0;margin-inline:0 auto;overflow:hidden;text-overflow:ellipsis}.list-item-content__name[data-v-9ea2f116]{min-width:100px;flex:1 1 10%;font-weight:var(--font-weight-element, 500)}.list-item-content__subname[data-v-9ea2f116]{flex:1 0;min-width:0;color:var(--color-text-maxcontrast)}.list-item-content__subname--bold[data-v-9ea2f116]{font-weight:var(--font-weight-element, 500)}.list-item[data-v-9ea2f116]{--list-item-padding: var(--default-grid-baseline);--list-item-height: 2lh;--list-item-border-radius: var(--border-radius-element, 32px);box-sizing:border-box;display:flex;position:relative;flex:0 0 auto;justify-content:flex-start;padding:var(--list-item-padding);width:100%;border-radius:var(--border-radius-element, 32px);cursor:pointer;transition:background-color var(--animation-quick) ease-in-out;list-style:none}.list-item[data-v-9ea2f116]:hover,.list-item[data-v-9ea2f116]:focus-within,.list-item[data-v-9ea2f116]:has(:active),.list-item[data-v-9ea2f116]:has(:focus-visible){background-color:var(--color-background-hover)}.list-item[data-v-9ea2f116]:has(.list-item__anchor:focus-visible){outline:2px solid var(--color-main-text);box-shadow:0 0 0 4px var(--color-main-background)}.list-item--compact[data-v-9ea2f116]{--list-item-padding: calc(.5 * var(--default-grid-baseline)) var(--default-grid-baseline)}.list-item--compact[data-v-9ea2f116]:not(:has(.list-item-content__subname)){--list-item-height: var(--default-clickable-area)}.list-item--legacy[data-v-9ea2f116]{--list-item-padding: calc(2 * var(--default-grid-baseline))}.list-item--legacy.list-item--compact[data-v-9ea2f116]{--list-item-padding: var(--default-grid-baseline) calc(2 * var(--default-grid-baseline))}.list-item--one-line[data-v-9ea2f116]{--list-item-height: var(--default-clickable-area);--list-item-border-radius: var(--border-radius-element, calc(var(--default-clickable-area) / 2));--list-item-padding: var(--default-grid-baseline)}.list-item--one-line.list-item--one-line--legacy[data-v-9ea2f116]{--list-item-padding: 2px calc((var(--list-item-height) - var(--list-item-border-radius)) / 2)}.list-item--one-line .list-item-content__main[data-v-9ea2f116]{display:flex;justify-content:start;gap:12px;min-width:0}.list-item--one-line .list-item-content__details[data-v-9ea2f116]{flex-direction:row;align-items:center;justify-content:end}.list-item--one-line .list-item-content__name[data-v-9ea2f116]{align-self:center;max-width:300px}.list-item__anchor[data-v-9ea2f116]{color:inherit;display:flex;flex:1 0 auto;align-items:center;height:var(--list-item-height);min-width:0}.list-item__anchor[data-v-9ea2f116]:focus-visible{outline:none}.list-item-content[data-v-9ea2f116]{display:flex;flex:1 0;justify-content:space-between;padding-inline-start:calc(2 * var(--default-grid-baseline));min-width:0}.list-item-content__main[data-v-9ea2f116]{flex:1 0;width:0;margin:auto 0}.list-item-content__main--oneline[data-v-9ea2f116]{display:flex}.list-item-content__details[data-v-9ea2f116]{display:flex;flex-direction:column;justify-content:end;align-items:end}.list-item-content__actions[data-v-9ea2f116],.list-item-content__extra-actions[data-v-9ea2f116]{flex:0 0 auto;align-self:center;justify-content:center;margin-inline-start:var(--default-grid-baseline)}.list-item-content__extra-actions[data-v-9ea2f116]{display:flex;align-items:center;gap:var(--default-grid-baseline)}.list-item-details__details[data-v-9ea2f116]{color:var(--color-text-maxcontrast);margin:0 9px!important;font-weight:var(--font-weight-default, normal)}.list-item-details__extra[data-v-9ea2f116]{margin:2px 4px 0;display:flex;align-items:center}.list-item-details__indicator[data-v-9ea2f116]{margin:0 5px}.list-item__extra[data-v-9ea2f116]{margin-top:var(--default-grid-baseline)}.material-design-icon[data-v-4606150f]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.notecard[data-v-4606150f]{--note-card-icon-size: 20px;--note-card-padding: calc(2 * var(--default-grid-baseline));color:var(--color-main-text)!important;background-color:var(--note-background)!important;border-inline-start:var(--default-grid-baseline) solid var(--note-theme);border-radius:var(--border-radius);margin:1rem 0;padding:var(--note-card-padding);display:flex;flex-direction:row;gap:var(--note-card-padding)}.notecard__heading[data-v-4606150f]{font-size:var(--note-card-icon-size);font-weight:var(--font-weight-heading, 600)}.notecard__icon--heading[data-v-4606150f]{font-size:var(--note-card-icon-size);margin-block:calc((1lh - 1em)/2) auto}.notecard--success[data-v-4606150f]{--note-background: var(--color-success);--note-theme: var(--color-success-text, var(--color-success))}.notecard--info[data-v-4606150f]{--note-background: var(--color-info);--note-theme: var(--color-info-text, var(--color-info))}.notecard--error[data-v-4606150f]{--note-background: var(--color-error);--note-theme: var(--color-error-text, var(--color-error))}.notecard--warning[data-v-4606150f]{--note-background: var(--color-warning);--note-theme: var(--color-warning-text, var(--color-warning))}.notecard--legacy.notecard--error[data-v-4606150f]{--note-background: rgba(var(--color-error-rgb), .1)}.notecard--legacy.notecard--info[data-v-4606150f]{--note-background: rgba(var(--color-info-rgb), .1)}.notecard--legacy.notecard--success[data-v-4606150f]{--note-background: rgba(var(--color-success-rgb), .1)}.notecard--legacy.notecard--warning[data-v-4606150f]{--note-background: rgba(var(--color-warning-rgb), .1)}.material-design-icon[data-v-b8355b88]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.profile-hover-card[data-v-b8355b88]{box-sizing:border-box;position:relative;width:560px;max-width:min(560px,90vw);min-height:300px;overflow:hidden;color:var(--color-main-text);background-color:var(--color-main-background);border-radius:var(--border-radius-large);display:flex;flex-direction:column}.profile-hover-card__profile-link[data-v-b8355b88]{color:inherit;text-decoration:none;outline-offset:2px}.profile-hover-card__profile-link:hover h2[data-v-b8355b88],.profile-hover-card__profile-link:focus-visible h2[data-v-b8355b88]{text-decoration:underline}.profile-hover-card__header[data-v-b8355b88]{display:flex;flex-shrink:0;position:relative;height:127px;background-color:var(--color-primary-element-light)}.profile-hover-card__header__edit[data-v-b8355b88]{position:absolute;inset-block-start:8px;inset-inline-end:8px;z-index:1}.profile-hover-card__header__container[data-v-b8355b88]{align-self:flex-end;display:flex;align-items:flex-end;gap:12px;width:100%;margin:8px 0;padding-inline:16px;box-sizing:border-box}.profile-hover-card__header__container__placeholder[data-v-b8355b88]{flex:0 0 180px;width:180px}.profile-hover-card__header__container__avatar[data-v-b8355b88]{flex-shrink:0}.profile-hover-card__header__container__identity[data-v-b8355b88]{display:flex;flex-direction:column;justify-content:flex-end;align-items:flex-start;gap:4px;min-width:0;flex:1;padding-inline:0}.profile-hover-card__header__container__displayname[data-v-b8355b88]{display:flex;align-items:baseline;gap:8px;min-width:0}.profile-hover-card__header__container__displayname h2[data-v-b8355b88]{font-size:24px;margin:0;overflow-wrap:anywhere}.profile-hover-card__header__container__pronouns[data-v-b8355b88]{font-size:15px;color:var(--color-text-maxcontrast)}.profile-hover-card__header__container__status[data-v-b8355b88]{min-width:0}.profile-hover-card__header__container__status-content[data-v-b8355b88]{display:flex;align-items:center;gap:8px;font-size:14px;overflow-wrap:anywhere}.profile-hover-card__body[data-v-b8355b88]{flex:1;min-height:0;background-color:var(--color-main-background)}.profile-hover-card__content[data-v-b8355b88]{display:flex;width:100%;height:100%;padding-inline:16px 16px;box-sizing:border-box}.profile-hover-card__sidebar[data-v-b8355b88]{align-self:flex-start;padding-top:8px;width:180px;min-width:180px;margin-block:-100px 0;margin-inline:0 12px}.profile-hover-card__header[data-v-b8355b88] .avatar.avatardiv,.profile-hover-card__sidebar[data-v-b8355b88] .avatar.avatardiv{text-align:center;margin:auto;display:block;padding:8px}.profile-hover-card__header[data-v-b8355b88] .avatar.avatardiv .avatardiv__user-status,.profile-hover-card__sidebar[data-v-b8355b88] .avatar.avatardiv .avatardiv__user-status{inset-inline-end:10px;bottom:10px;width:26px;height:26px;background-size:22px;border:none;background-color:var(--color-main-background);line-height:26px;font-size:16px}.profile-hover-card__blocks[data-v-b8355b88]{margin:12px 0;display:grid;gap:8px 0;min-width:0;flex:1;overflow:hidden;align-content:start}.profile-hover-card__blocks p[data-v-b8355b88],.profile-hover-card__blocks h3[data-v-b8355b88]{overflow-wrap:anywhere}.profile-hover-card__blocks-details[data-v-b8355b88]{display:flex;flex-direction:column;gap:2px 0}.profile-hover-card__blocks-details .detail[data-v-b8355b88]{display:inline-block;color:var(--color-text-maxcontrast);font-size:14px}.profile-hover-card__blocks-details .detail p .detail-icon[data-v-b8355b88]{display:inline-block;vertical-align:middle}.profile-hover-card__blocks-headline[data-v-b8355b88]{margin-inline:0;margin-block:4px 0;font-weight:700;font-size:16px}.profile-hover-card__blocks-biography[data-v-b8355b88]{overflow:hidden;font-size:14px;line-height:1.4;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:4;line-clamp:4;text-overflow:ellipsis;overflow-wrap:anywhere}.profile-hover-card__blocks-biography[data-v-b8355b88] p{margin:0}.profile-hover-card__loading[data-v-b8355b88]{display:flex;align-items:center;justify-content:center;height:100%;min-height:300px;padding:16px;color:var(--color-text-maxcontrast)}.profile-hover-card--limited[data-v-b8355b88]{min-height:0}.profile-hover-card--limited .profile-hover-card__body[data-v-b8355b88]{flex:0 0 auto}.profile-hover-card--limited .profile-hover-card__content[data-v-b8355b88]{height:auto;padding-block-end:24px}.profile-hover-card--limited .profile-hover-card__sidebar[data-v-b8355b88]{margin-block-end:0}.profile-hover-card--limited .user-actions[data-v-b8355b88]{margin-top:8px}.user-actions[data-v-b8355b88]{display:flex;flex-direction:column;gap:8px 0;margin-top:12px;max-width:180px}.user-actions__loading[data-v-b8355b88]{display:flex;justify-content:center;padding:8px 0}.user-actions__primary[data-v-b8355b88]{margin:0 auto;width:180px!important}.user-actions__primary__icon[data-v-b8355b88]{height:20px;width:20px;object-fit:contain;filter:var(--primary-invert-if-dark)}.user-actions__primary__icon-class[data-v-b8355b88]{display:block;height:20px;width:20px;background-size:20px;background-repeat:no-repeat;background-position:center;filter:var(--primary-invert-if-dark)}.user-actions__other[data-v-b8355b88]{display:flex;justify-content:center;gap:0 4px}.user-actions__other__icon[data-v-b8355b88]{height:20px;width:20px;object-fit:contain;filter:var(--background-invert-if-dark);align-self:center;margin:8px}.user-actions__other__icon-class[data-v-b8355b88]{display:block;height:20px;width:20px;margin:8px;background-size:20px;background-repeat:no-repeat;background-position:center;filter:var(--background-invert-if-dark)}@media only screen and (max-width:512px){.profile-hover-card[data-v-b8355b88]{width:min(560px,100vw - 24px);max-width:calc(100vw - 24px);height:auto;min-height:0;max-height:min(80vh,520px);overflow:auto}.profile-hover-card__header[data-v-b8355b88]{height:auto;min-height:112px}.profile-hover-card__header__container[data-v-b8355b88]{align-self:flex-end;align-items:flex-end;gap:16px;margin:12px auto;padding-inline:12px}.profile-hover-card__header__container__avatar[data-v-b8355b88]{align-self:flex-end}.profile-hover-card__header__container__identity[data-v-b8355b88]{gap:6px;padding-inline:0;justify-content:flex-end}.profile-hover-card__header__container__displayname[data-v-b8355b88]{flex-direction:column;align-items:flex-start;gap:4px}.profile-hover-card__header__container__displayname h2[data-v-b8355b88]{font-size:20px}.profile-hover-card__header__container__pronouns[data-v-b8355b88]{font-size:16px}.profile-hover-card__header__container__pronoun-separator[data-v-b8355b88]{display:none}.profile-hover-card__header__container__status-content[data-v-b8355b88]{font-size:16px}.profile-hover-card__content[data-v-b8355b88]{display:block;height:auto;padding-inline:12px;padding-block-end:12px}.profile-hover-card__sidebar[data-v-b8355b88]{margin:unset;width:auto;min-width:0;padding-top:0}.profile-hover-card__blocks[data-v-b8355b88]{width:unset;margin:0;padding:8px 4px 12px}.profile-hover-card__header[data-v-b8355b88] .avatar.avatardiv .avatardiv__user-status,.profile-hover-card__sidebar[data-v-b8355b88] .avatar.avatardiv .avatardiv__user-status{inset-inline-end:0;bottom:0}.profile-hover-card__loading[data-v-b8355b88]{min-height:200px}.profile-hover-card--limited .profile-hover-card__body[data-v-b8355b88]{display:none}.user-actions[data-v-b8355b88]{width:unset;max-width:none;margin:8px auto 0;padding:0 4px}.user-actions__primary[data-v-b8355b88]{width:100%!important;max-width:220px}.user-actions__other[data-v-b8355b88]{flex-wrap:wrap}}@media only screen and (max-width:480px){.profile-hover-card[data-v-b8355b88]{width:calc(100vw - 16px);max-width:calc(100vw - 16px);border-radius:var(--border-radius)}.profile-hover-card__header__container[data-v-b8355b88]{gap:8px;padding-inline:8px}}.material-design-icon[data-v-a50e616b]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.widgets--list[data-v-a50e616b]{width:100%;min-height:var(--default-clickable-area)}.material-design-icon[data-v-e55203a2]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.rich-text--wrapper[data-v-e55203a2]{overflow-wrap:break-word;line-height:1.5}.rich-text--wrapper .rich-text--fallback[data-v-e55203a2],.rich-text--wrapper .rich-text-component[data-v-e55203a2]{display:inline}.rich-text--wrapper-markdown[data-v-e55203a2]{tab-size:4}.rich-text--wrapper-markdown div>*[data-v-e55203a2]:first-child,.rich-text--wrapper-markdown blockquote>*[data-v-e55203a2]:first-child{margin-top:0!important}.rich-text--wrapper-markdown div>*[data-v-e55203a2]:last-child,.rich-text--wrapper-markdown blockquote>*[data-v-e55203a2]:last-child{margin-block-end:0!important}.rich-text--wrapper-markdown blockquote[data-v-e55203a2]{padding-inline-start:13px;border-inline-start:2px solid var(--color-border-dark);color:var(--color-text-lighter)}.rich-text--wrapper-markdown h1[data-v-e55203a2],.rich-text--wrapper-markdown h2[data-v-e55203a2],.rich-text--wrapper-markdown h3[data-v-e55203a2],.rich-text--wrapper-markdown h4[data-v-e55203a2],.rich-text--wrapper-markdown h5[data-v-e55203a2],.rich-text--wrapper-markdown h6[data-v-e55203a2],.rich-text--wrapper-markdown p[data-v-e55203a2],.rich-text--wrapper-markdown ul[data-v-e55203a2],.rich-text--wrapper-markdown ol[data-v-e55203a2],.rich-text--wrapper-markdown blockquote[data-v-e55203a2],.rich-text--wrapper-markdown pre[data-v-e55203a2]{margin-top:0;margin-block-end:1em}.rich-text--wrapper-markdown h1[data-v-e55203a2],.rich-text--wrapper-markdown h2[data-v-e55203a2],.rich-text--wrapper-markdown h3[data-v-e55203a2],.rich-text--wrapper-markdown h4[data-v-e55203a2],.rich-text--wrapper-markdown h5[data-v-e55203a2],.rich-text--wrapper-markdown h6[data-v-e55203a2]{font-weight:var(--font-weight-heading, bold)}.rich-text--wrapper-markdown h4[data-v-e55203a2]{font-size:20px}.rich-text--wrapper-markdown h5[data-v-e55203a2]{font-size:18px}.rich-text--wrapper-markdown h6[data-v-e55203a2]{font-size:15px}.rich-text--wrapper-markdown ul[data-v-e55203a2],.rich-text--wrapper-markdown ol[data-v-e55203a2]{padding-inline-start:4ch}.rich-text--wrapper-markdown ul[data-v-e55203a2]{list-style-type:disc}.rich-text--wrapper-markdown ul.contains-task-list[data-v-e55203a2]{list-style-type:none;padding:0}.rich-text--wrapper-markdown li.task-list-item>ul[data-v-e55203a2],.rich-text--wrapper-markdown li.task-list-item>ol[data-v-e55203a2],.rich-text--wrapper-markdown li.task-list-item>li[data-v-e55203a2],.rich-text--wrapper-markdown li.task-list-item>blockquote[data-v-e55203a2],.rich-text--wrapper-markdown li.task-list-item>pre[data-v-e55203a2]{margin-inline-start:15px;margin-block-end:0}.rich-text--wrapper-markdown pre[data-v-e55203a2]{direction:ltr}.rich-text--wrapper-markdown table[data-v-e55203a2]{border-collapse:collapse;border:2px solid var(--color-border-maxcontrast)}.rich-text--wrapper-markdown table th[data-v-e55203a2],.rich-text--wrapper-markdown table td[data-v-e55203a2]{padding:var(--default-grid-baseline);border:1px solid var(--color-border-maxcontrast)}.rich-text--wrapper-markdown table th[data-v-e55203a2]:first-child,.rich-text--wrapper-markdown table td[data-v-e55203a2]:first-child{border-inline-start:0}.rich-text--wrapper-markdown table th[data-v-e55203a2]:last-child,.rich-text--wrapper-markdown table td[data-v-e55203a2]:last-child{border-inline-end:0}.rich-text--wrapper-markdown table tr:first-child th[data-v-e55203a2]{border-top:0}.rich-text--wrapper-markdown table tr:last-child td[data-v-e55203a2]{border-block-end:0}.rich-text--wrapper-markdown .rich-text__code-block[data-v-e55203a2]:has(.hljs){color:var(--hljs-color);background:var(--hljs-background-color)}.rich-text--wrapper-markdown .hljs-doctag[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-keyword[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-meta .hljs-keyword[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-template-tag[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-template-variable[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-type[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-variable.language_[data-v-e55203a2]{color:var(--hljs-syntax-keyword-color)}.rich-text--wrapper-markdown .hljs-title[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-title.class_[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-title.class_.inherited__[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-title.function_[data-v-e55203a2]{color:var(--hljs-syntax-entity-color)}.rich-text--wrapper-markdown .hljs-attr[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-attribute[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-literal[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-meta[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-number[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-operator[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-variable[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-selector-attr[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-selector-class[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-selector-id[data-v-e55203a2]{color:var(--hljs-syntax-constant-color)}.rich-text--wrapper-markdown .hljs-regexp[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-string[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-meta .hljs-string[data-v-e55203a2]{color:var(--hljs-syntax-string-color)}.rich-text--wrapper-markdown .hljs-built_in[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-symbol[data-v-e55203a2]{color:var(--hljs-syntax-variable-color)}.rich-text--wrapper-markdown .hljs-comment[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-code[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-formula[data-v-e55203a2]{color:var(--hljs-syntax-comment-color)}.rich-text--wrapper-markdown .hljs-name[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-quote[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-selector-tag[data-v-e55203a2],.rich-text--wrapper-markdown .hljs-selector-pseudo[data-v-e55203a2]{color:var(--hljs-syntax-entity-tag-color)}.rich-text--wrapper-markdown .hljs-subst[data-v-e55203a2]{color:var(--hljs-syntax-storage-modifier-import-color)}.rich-text--wrapper-markdown .hljs-section[data-v-e55203a2]{color:var(--hljs-syntax-markup-heading-color);font-weight:var(--font-weight-heading, bold)}.rich-text--wrapper-markdown .hljs-bullet[data-v-e55203a2]{color:var(--hljs-syntax-markup-list-color)}.rich-text--wrapper-markdown .hljs-emphasis[data-v-e55203a2]{color:var(--hljs-syntax-markup-italic-color);font-style:italic}.rich-text--wrapper-markdown .hljs-strong[data-v-e55203a2]{color:var(--hljs-syntax-markup-bold-color);font-weight:700}.rich-text--wrapper-markdown .hljs-addition[data-v-e55203a2]{color:var(--hljs-syntax-markup-inserted-color);background-color:var(--hljs-syntax-markup-inserted-background-color)}.rich-text--wrapper-markdown .hljs-deletion[data-v-e55203a2]{color:var(--hljs-syntax-markup-deleted-color);background-color:var(--hljs-syntax-markup-deleted-background-color)}@media(prefers-color-scheme:light){.rich-text--wrapper-markdown[data-v-e55203a2]{--hljs-color: var(--color-main-text, #24292e);--hljs-background-color: var(--color-background-dark, #ffffff);--hljs-syntax-keyword-color: #d73a49;--hljs-syntax-entity-color: #6f42c1;--hljs-syntax-constant-color: #005cc5;--hljs-syntax-string-color: #032f62;--hljs-syntax-variable-color: #e36209;--hljs-syntax-comment-color: #6a737d;--hljs-syntax-entity-tag-color: #22863a;--hljs-syntax-storage-modifier-import-color: #24292e;--hljs-syntax-markup-heading-color: #005cc5;--hljs-syntax-markup-list-color: #735c0f;--hljs-syntax-markup-italic-color: #24292e;--hljs-syntax-markup-bold-color: #24292e;--hljs-syntax-markup-inserted-color: #22863a;--hljs-syntax-markup-inserted-background-color: #f0fff4;--hljs-syntax-markup-deleted-color: #b31d28;--hljs-syntax-markup-deleted-background-color: #ffeef0}[data-theme-dark] .rich-text--wrapper-markdown[data-v-e55203a2]{--hljs-color: var(--color-main-text, #c9d1d9);--hljs-background-color: var(--color-background-dark, #0d1117);--hljs-syntax-keyword-color: #ff7b72;--hljs-syntax-entity-color: #d2a8ff;--hljs-syntax-constant-color: #79c0ff;--hljs-syntax-string-color: #a5d6ff;--hljs-syntax-variable-color: #ffa657;--hljs-syntax-comment-color: #8b949e;--hljs-syntax-entity-tag-color: #7ee787;--hljs-syntax-storage-modifier-import-color: #c9d1d9;--hljs-syntax-markup-heading-color: #1f6feb;--hljs-syntax-markup-list-color: #f2cc60;--hljs-syntax-markup-italic-color: #c9d1d9;--hljs-syntax-markup-bold-color: #c9d1d9;--hljs-syntax-markup-inserted-color: #aff5b4;--hljs-syntax-markup-inserted-background-color: #033a16;--hljs-syntax-markup-deleted-color: #ffdcd7;--hljs-syntax-markup-deleted-background-color: #67060c}}@media(prefers-color-scheme:dark){.rich-text--wrapper-markdown[data-v-e55203a2]{--hljs-color: var(--color-main-text, #c9d1d9);--hljs-background-color: var(--color-background-dark, #0d1117);--hljs-syntax-keyword-color: #ff7b72;--hljs-syntax-entity-color: #d2a8ff;--hljs-syntax-constant-color: #79c0ff;--hljs-syntax-string-color: #a5d6ff;--hljs-syntax-variable-color: #ffa657;--hljs-syntax-comment-color: #8b949e;--hljs-syntax-entity-tag-color: #7ee787;--hljs-syntax-storage-modifier-import-color: #c9d1d9;--hljs-syntax-markup-heading-color: #1f6feb;--hljs-syntax-markup-list-color: #f2cc60;--hljs-syntax-markup-italic-color: #c9d1d9;--hljs-syntax-markup-bold-color: #c9d1d9;--hljs-syntax-markup-inserted-color: #aff5b4;--hljs-syntax-markup-inserted-background-color: #033a16;--hljs-syntax-markup-deleted-color: #ffdcd7;--hljs-syntax-markup-deleted-background-color: #67060c}[data-theme-light] .rich-text--wrapper-markdown[data-v-e55203a2]{--hljs-color: var(--color-main-text, #24292e);--hljs-background-color: var(--color-background-dark, #ffffff);--hljs-syntax-keyword-color: #d73a49;--hljs-syntax-entity-color: #6f42c1;--hljs-syntax-constant-color: #005cc5;--hljs-syntax-string-color: #032f62;--hljs-syntax-variable-color: #e36209;--hljs-syntax-comment-color: #6a737d;--hljs-syntax-entity-tag-color: #22863a;--hljs-syntax-storage-modifier-import-color: #24292e;--hljs-syntax-markup-heading-color: #005cc5;--hljs-syntax-markup-list-color: #735c0f;--hljs-syntax-markup-italic-color: #24292e;--hljs-syntax-markup-bold-color: #24292e;--hljs-syntax-markup-inserted-color: #22863a;--hljs-syntax-markup-inserted-background-color: #f0fff4;--hljs-syntax-markup-deleted-color: #b31d28;--hljs-syntax-markup-deleted-background-color: #ffeef0}}a[data-v-e55203a2]:not(.rich-text--component){text-decoration:underline}.rich-text__code-block[data-v-e55203a2]{position:relative;padding-inline-end:calc(var(--clickable-area-small) + var(--default-grid-baseline))}.rich-text__code-block pre[data-v-e55203a2]{width:100%;overflow-x:auto}.rich-text__code-block .rich-text__code-block-button[data-v-e55203a2]{position:absolute;top:var(--default-grid-baseline);inset-inline-end:var(--default-grid-baseline);opacity:0}.rich-text__code-block:hover .rich-text__code-block-button[data-v-e55203a2],.rich-text__code-block:focus-within .rich-text__code-block-button[data-v-e55203a2],.rich-text__code-block .rich-text__code-block-button[data-v-e55203a2]:focus{opacity:1}.material-design-icon[data-v-dc80bc03]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.widget-custom[data-v-dc80bc03]{width:100%;margin:auto;margin-bottom:calc(var(--default-grid-baseline, 4px) * 3);margin-top:calc(var(--default-grid-baseline, 4px) * 3);overflow:hidden;border:2px solid var(--color-border);border-radius:var(--border-radius-container);background-color:transparent;display:flex;position:relative}.widget-custom.full-width[data-v-dc80bc03]{width:var(--widget-full-width, 100%)!important;inset-inline-start:calc((var(--widget-full-width, 100%) - 100%) / 2 * -1);position:relative}.widget-custom__content[data-v-dc80bc03]{width:100%;display:flex;flex-direction:column}.widget-custom__resize-handle[data-v-dc80bc03]{position:absolute;bottom:0;inset-inline-start:0;width:100%;height:calc(var(--default-grid-baseline) * 2);border-top:1px solid var(--color-border);margin-top:-1px;cursor:row-resize;touch-action:none}.widget-custom__resize-handle[data-v-dc80bc03]:before,.widget-custom__resize-handle[data-v-dc80bc03]:after{content:"";position:absolute;top:50%;left:50%;background-color:var(--color-border);margin-top:1px;transform:translate(-50%);width:30px;height:1px}.widget-custom__resize-handle[data-v-dc80bc03]:before{margin-top:-2px}.widget-custom__resize-handle[data-v-dc80bc03]:focus-visible{outline:2px solid var(--color-primary-element);outline-offset:-4px}.widget-access[data-v-dc80bc03]{width:100%;margin:auto;margin-bottom:calc(var(--default-grid-baseline, 4px) * 3);margin-top:calc(var(--default-grid-baseline, 4px) * 3);overflow:hidden;border:2px solid var(--color-border);border-radius:var(--border-radius-container);background-color:transparent;display:flex;padding:calc(var(--default-grid-baseline, 4px) * 3)}.widget-default[data-v-dc80bc03]{width:100%;margin:auto;margin-bottom:calc(var(--default-grid-baseline, 4px) * 3);margin-top:calc(var(--default-grid-baseline, 4px) * 3);overflow:hidden;border:2px solid var(--color-border);border-radius:var(--border-radius-container);background-color:transparent;display:flex}.widget-default--compact[data-v-dc80bc03]{flex-direction:column}.widget-default--compact .widget-default--image[data-v-dc80bc03]{width:100%;height:150px}.widget-default--compact .widget-default--details[data-v-dc80bc03]{width:100%;padding-top:calc(var(--default-grid-baseline, 4px) * 2);padding-bottom:calc(var(--default-grid-baseline, 4px) * 2)}.widget-default--compact .widget-default--description[data-v-dc80bc03]{display:none}.widget-default--image[data-v-dc80bc03]{width:40%;background-position:center;background-size:cover;background-repeat:no-repeat}.widget-default--name[data-v-dc80bc03]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:var(--font-weight-heading, bold)}.widget-default--details[data-v-dc80bc03]{padding:calc(var(--default-grid-baseline, 4px) * 3);width:0;flex-grow:1}.widget-default--details p[data-v-dc80bc03]{margin:0;padding:0}.widget-default--description[data-v-dc80bc03]{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical}.widget-default--link[data-v-dc80bc03]{color:var(--color-text-maxcontrast);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.toggle-interactive[data-v-dc80bc03]{position:relative}.toggle-interactive .toggle-interactive--button[data-v-dc80bc03]{position:absolute;bottom:var(--default-grid-baseline);inset-inline-end:var(--default-grid-baseline);z-index:10000}.material-design-icon[data-v-06c9abdc]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.progress-bar[data-v-06c9abdc]{display:block;height:var(--progress-bar-height);--progress-bar-color: var(--15a054de)}.progress-bar--linear[data-v-06c9abdc]{width:100%;overflow:hidden;border:0;padding:0;background:var(--color-background-dark);border-radius:calc(var(--progress-bar-height) / 2)}.progress-bar--linear[data-v-06c9abdc]::-webkit-progress-bar{height:var(--progress-bar-height);background-color:transparent}.progress-bar--linear[data-v-06c9abdc]::-webkit-progress-value{background:var(--progress-bar-color, var(--gradient-primary-background));border-radius:calc(var(--progress-bar-height) / 2)}.progress-bar--linear[data-v-06c9abdc]::-moz-progress-bar{background:var(--progress-bar-color, var(--gradient-primary-background));border-radius:calc(var(--progress-bar-height) / 2)}.progress-bar--circular[data-v-06c9abdc]{width:var(--progress-bar-height);color:var(--progress-bar-color, var(--color-primary-element))}.progress-bar--error[data-v-06c9abdc]{color:var(--color-text-error, var(--color-error))!important}.progress-bar--error[data-v-06c9abdc]::-moz-progress-bar{background:var(--color-text-error, var(--color-error))!important}.progress-bar--error[data-v-06c9abdc]::-webkit-progress-value{background:var(--color-text-error, var(--color-error))!important}._material-design-icon_CzuIb{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._radioGroup_checkboxRadioContainer_b2yzm .checkbox-content{max-width:unset!important}._material-design-icon_jBfNc{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._radioGroupButton_9pCm8{--radio-group-button--border-radius: var(--border-radius-small);--radio-group-button--border-width: 1px;--radio-group-button--color: var(--color-primary-element-light-text);--radio-group-button--background-color: var(--color-primary-element-light);--radio-group-button--background-color-hover: var(--color-primary-element-light-hover);--radio-group-button--padding: 1px;position:relative;cursor:pointer;color:var(--radio-group-button--color);background-color:var(--radio-group-button--background-color);transition:var(--animation-quick) background-color;border:var(--radio-group-button--border-width) solid var(--radio-group-button--background-color-hover);border-bottom-width:2px;border-radius:var(--radio-group-button--border-radius);display:flex;flex-direction:row;align-items:center;justify-content:center;text-align:center;min-height:var(--default-clickable-area);padding-block:var(--radio-group-button--padding) 0;padding-inline:var(--radio-group-button--padding)}._radioGroupButton_9pCm8 *{cursor:pointer}._radioGroupButton__input_FfvzH{position:absolute;inset-block-start:0;inset-inline-start:0;width:1px;height:1px;opacity:0;pointer-events:none}._radioGroupButton_9pCm8:has(._radioGroupButton__label_kwGnK){padding-inline:calc(var(--radio-group-button--padding) + var(--border-radius-element))}._radioGroupButton_9pCm8:has(._radioGroupButton__icon_QZWbH){padding-inline-start:var(--radio-group-button--padding)}._radioGroupButton_9pCm8:hover:not(._radioGroupButton_disabled_fam5K){background-color:var(--radio-group-button--background-color-hover)}._radioGroupButton_9pCm8:focus-within{--radio-group-button--border-width: 2px;--radio-group-button--padding: 0px;border:var(--radio-group-button--border-width) solid var(--color-main-text)!important;outline:calc(var(--default-grid-baseline) / 2) var(--color-main-background)}._radioGroupButton_active_P6UzJ{--radio-group-button--color: var(--color-primary-element-text);--radio-group-button--background-color: var(--color-primary-element);--radio-group-button--background-color-hover: var(--color-primary-element-hover)}._radioGroupButton__label_kwGnK{font-weight:var(--font-weight-element, bold)}._radioGroupButton_disabled_fam5K{filter:saturate(.7);opacity:.5;cursor:default}._radioGroupButton_disabled_fam5K *{cursor:default}._radioGroupButton__icon_QZWbH{--radio-group-button--icon-size: calc(var(--default-clickable-area) - 4px);display:flex;align-items:center;justify-content:center;height:100%;width:var(--radio-group-button--icon-size)}._radioGroupButton__icon_QZWbH *{--default-clickable-area: var(--radio-group-button--icon-size)}.material-design-icon[data-v-2660b55a]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.resource[data-v-2660b55a]{display:flex;align-items:center;height:var(--default-clickable-area)}.resource__button[data-v-2660b55a]{width:100%!important;justify-content:flex-start!important;padding:0!important}.resource__button[data-v-2660b55a] .button-vue__wrapper{justify-content:flex-start!important}.resource__button[data-v-2660b55a] .button-vue__wrapper .button-vue__text{font-weight:var(--font-weight-default, normal)!important;margin-left:2px!important}.resource__icon[data-v-2660b55a]{width:32px;height:32px;background-color:var(--color-text-maxcontrast);border-radius:50%;display:flex;align-items:center;justify-content:center}.resource__icon img[data-v-2660b55a]{width:16px;height:16px;filter:var(--background-invert-if-dark)}.material-design-icon[data-v-82938a03]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.team-resources__header[data-v-82938a03]{font-weight:var(--font-weight-heading, bold);margin-bottom:6px}.related-team[data-v-82938a03]{border-radius:var(--border-radius-rounded);border:2px solid var(--color-border-dark);margin-bottom:6px}.related-team__open[data-v-82938a03]{border-color:var(--color-primary-element)}.related-team__header[data-v-82938a03]{padding:6px 24px 6px 6px;display:flex;gap:12px}.related-team__name[data-v-82938a03]{display:flex;flex-grow:1;align-items:center;gap:12px;padding:6px 12px;font-weight:var(--font-weight-heading, bold);margin:0}.related-team .related-team-provider[data-v-82938a03]{padding:6px 12px}.related-team .related-team-provider__name[data-v-82938a03]{font-weight:var(--font-weight-heading, bold);margin-bottom:3px}.related-team .related-team-provider__link[data-v-82938a03]{display:flex;gap:12px;padding:6px 12px;font-weight:var(--font-weight-heading, bold)}.related-team .related-team-resource__link[data-v-82938a03]{display:flex;gap:12px;height:var(--default-clickable-area);align-items:center;border-radius:var(--border-radius-large)}.related-team .related-team-resource__link[data-v-82938a03]:hover{background-color:var(--color-background-hover)}.related-team .related-team-resource__link[data-v-82938a03]:focus{background-color:var(--color-background-hover);outline:2px solid var(--color-primary-element)}.related-team .related-team-resource .resource__icon[data-v-82938a03]{width:var(--default-clickable-area);height:var(--default-clickable-area);display:flex;align-items:center;justify-content:center;text-align:center}.related-team .related-team-resource .resource__icon>img[data-v-82938a03]{border-radius:var(--border-radius-pill);overflow:hidden;width:32px;height:32px}.material-design-icon[data-v-3ca2fd14]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.related-resources__header h5[data-v-3ca2fd14]{font-weight:var(--font-weight-heading, bold);margin-bottom:6px}.related-resources__header p[data-v-3ca2fd14]{color:var(--color-text-maxcontrast)}.material-design-icon[data-v-ef14f1ec]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.autocomplete-result[data-v-ef14f1ec]{display:flex;align-items:center;gap:var(--default-grid-baseline);line-height:1.2;--auto-complete-result-avatar-size: var(--default-clickable-area)}.autocomplete-result__icon[data-v-ef14f1ec]{position:relative;flex:0 0 var(--default-clickable-area);width:var(--default-clickable-area);min-width:var(--default-clickable-area);height:var(--default-clickable-area);border-radius:var(--default-clickable-area);background-color:var(--color-background-darker);background-repeat:no-repeat;background-position:center;background-size:contain}.autocomplete-result__icon--with-avatar[data-v-ef14f1ec]{color:inherit;background-size:cover}.autocomplete-result__status[data-v-ef14f1ec]{--auto-complete-result-status-icon-size: clamp(14px, var(--auto-complete-result-avatar-size) * .4, 18px);--auto-complete-result-status-icon-position: calc(var(--auto-complete-result-avatar-size) / 2 * (1 - 1 / sqrt(2)) - var(--auto-complete-result-status-icon-size) / 2);box-sizing:border-box;position:absolute;inset-inline-end:var(--auto-complete-result-status-icon-position);bottom:var(--auto-complete-result-status-icon-position);height:var(--auto-complete-result-status-icon-size);width:var(--auto-complete-result-status-icon-size);border:2px solid var(--color-main-background);border-radius:50%;background-color:var(--color-main-background);font-size:calc(var(--auto-complete-result-status-icon-size) / 1.2);line-height:1.2;background-repeat:no-repeat;background-size:var(--auto-complete-result-status-icon-size);background-position:center}.autocomplete-result__status--icon[data-v-ef14f1ec]{border:none;background-color:transparent}.autocomplete-result__content[data-v-ef14f1ec]{display:flex;flex:1 1 100%;flex-direction:column;justify-content:center;min-width:0}.autocomplete-result__title[data-v-ef14f1ec],.autocomplete-result__subline[data-v-ef14f1ec]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.autocomplete-result__subline[data-v-ef14f1ec]{color:var(--color-text-maxcontrast)}.material-design-icon[data-v-0f528b8a]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.rich-contenteditable[data-v-0f528b8a]{--contenteditable-block-offset: calc(2 * var(--default-grid-baseline));--contenteditable-inline-start-offset: calc(2 * var(--default-grid-baseline));--contenteditable-inline-end-offset: calc(2 * var(--default-grid-baseline));position:relative;width:auto}.rich-contenteditable__label[data-v-0f528b8a]{position:absolute;margin-inline:14px;max-width:fit-content;inset-block-start:11px;inset-inline:0;color:var(--color-text-maxcontrast);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none;transition:height var(--animation-quick),inset-block-start var(--animation-quick),font-size var(--animation-quick),color var(--animation-quick),background-color var(--animation-quick) var(--animation-slow)}.rich-contenteditable__input:focus+.rich-contenteditable__label[data-v-0f528b8a],.rich-contenteditable__input:not(.rich-contenteditable__input--empty)+.rich-contenteditable__label[data-v-0f528b8a]{inset-block-start:-10px;line-height:1.5;font-size:13px;font-weight:var(--font-weight-element, 500);border-radius:var(--default-grid-baseline) var(--default-grid-baseline) 0 0;background-color:var(--color-main-background);padding-inline:5px;margin-inline:9px;transition:height var(--animation-quick),inset-block-start var(--animation-quick),font-size var(--animation-quick),color var(--animation-quick)}.rich-contenteditable__input[data-v-0f528b8a]{overflow-y:auto;width:auto;margin:0;padding-block:var(--contenteditable-block-offset);padding-inline:var(--contenteditable-inline-start-offset) var(--contenteditable-inline-end-offset);cursor:text;white-space:pre-wrap;overflow-wrap:break-word;color:var(--color-main-text);border:2px solid var(--color-border-maxcontrast);border-radius:var(--border-radius-large);outline:none;background-color:var(--color-main-background);font-family:var(--font-face);font-size:inherit;tab-size:4;min-height:var(--default-clickable-area);max-height:calc(var(--default-clickable-area) * 5.5)}.rich-contenteditable__input--has-label[data-v-0f528b8a]{margin-top:10px}.rich-contenteditable__input--empty[data-v-0f528b8a]:focus:before,.rich-contenteditable__input--empty[data-v-0f528b8a]:not(.rich-contenteditable__input--has-label):before{content:attr(aria-placeholder);color:var(--color-text-maxcontrast);position:absolute;width:calc(100% - var(--contenteditable-inline-start-offset) - var(--contenteditable-inline-end-offset));height:calc(100% - 2 * var(--contenteditable-block-offset));overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.rich-contenteditable__input[contenteditable=false][data-v-0f528b8a]:not(.rich-contenteditable__input--disabled){cursor:default;background-color:transparent;color:var(--color-main-text);border-color:transparent;opacity:1;border-radius:0}.rich-contenteditable__input--multiline[data-v-0f528b8a]{min-height:calc(var(--default-clickable-area) * 3);max-height:none}.rich-contenteditable__input--disabled[data-v-0f528b8a]{opacity:.5;color:var(--color-text-maxcontrast);border:2px solid var(--color-background-darker);border-radius:var(--border-radius);background-color:var(--color-background-dark)}.rich-contenteditable__input--overflow[data-v-0f528b8a],.rich-contenteditable__input--overflow[data-v-0f528b8a]:hover{border-color:var(--color-border-error, var(--color-error))!important}._material-design-icon_h1KPS{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._tribute-container_y19wi{z-index:9000;overflow:auto;position:absolute;left:-100vw;margin:var(--default-grid-baseline) 0;padding:var(--default-grid-baseline);color:var(--color-text-maxcontrast);border-radius:var(--border-radius-element, var(--border-radius));background:var(--color-main-background);box-shadow:0 1px 5px var(--color-box-shadow)}._tribute-container_y19wi,._tribute-container_y19wi *{box-sizing:border-box}._tribute-container_y19wi ul{display:flex;flex-direction:column;gap:var(--default-grid-baseline)}._tribute-container_y19wi ._tribute-container__item_HPusZ{color:var(--color-text-maxcontrast);border-radius:var(--border-radius-small, var(--border-radius));padding:var(--default-grid-baseline);cursor:pointer;min-height:var(--clickable-area-small, auto)}._tribute-container_y19wi ._tribute-container__item_HPusZ.highlight{color:var(--color-main-text);background:var(--color-background-hover)}._tribute-container_y19wi ._tribute-container__item_HPusZ.highlight,._tribute-container_y19wi ._tribute-container__item_HPusZ.highlight *{cursor:pointer}._tribute-container_y19wi._tribute-container--focus-visible_AqpWt .highlight._tribute-container__item_HPusZ{outline:2px solid var(--color-main-text)!important}._tribute-container-autocomplete_cJgfd{min-width:250px;max-width:300px;max-height:calc((var(--default-clickable-area) + 3 * var(--default-grid-baseline)) * 4.5 - 1.5 * var(--default-grid-baseline))}._tribute-container-emoji_JxYiz,._tribute-container-link_59LXD{min-width:200px;max-width:200px;max-height:calc((24px + 3 * var(--default-grid-baseline)) * 5.5 - 1.5 * var(--default-grid-baseline))}._tribute-container-emoji_JxYiz ._tribute-item_HU0z9,._tribute-container-link_59LXD ._tribute-item_HU0z9{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._tribute-container-link_59LXD{min-width:200px;max-width:300px}._tribute-container-link_59LXD ._tribute-item_HU0z9{display:flex;align-items:center}._tribute-container-link_59LXD ._tribute-item__title_ta-s8{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._tribute-container-link_59LXD ._tribute-item__icon_cDA06{margin:auto 0;width:20px;height:20px;object-fit:contain;padding-inline-end:var(--default-grid-baseline);filter:var(--background-invert-if-dark)}.material-design-icon[data-v-0547d92f],.material-design-icon[data-v-f39d58d9]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.provider-list[data-v-f39d58d9]{width:100%;min-height:400px;padding:0 16px 16px;display:flex;flex-direction:column}.provider-list--select[data-v-f39d58d9]{width:100%}.provider-list--select .provider[data-v-f39d58d9]{display:flex;align-items:center;height:28px;overflow:hidden}.provider-list--select .provider .link-icon[data-v-f39d58d9]{margin-inline-end:8px}.provider-list--select .provider .provider-icon[data-v-f39d58d9]{width:20px;height:20px;object-fit:contain;margin-inline-end:8px;filter:var(--background-invert-if-dark)}.provider-list--select .provider .option-text[data-v-f39d58d9]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.material-design-icon[data-v-be630586]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.raw-link[data-v-be630586]{width:100%;min-height:350px;display:flex;flex-direction:column;overflow-y:auto;padding:0 16px 16px}.raw-link .input-wrapper[data-v-be630586]{width:100%}.raw-link .reference-widget[data-v-be630586]{display:flex}.raw-link--empty-content .provider-icon[data-v-be630586]{width:150px;height:150px;object-fit:contain;filter:var(--background-invert-if-dark)}.raw-link--input[data-v-be630586]{width:99%}.material-design-icon[data-v-995c2758]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.result[data-v-995c2758]{display:flex;align-items:center;height:var(--default-clickable-area);overflow:hidden}.result--icon-class[data-v-995c2758],.result--image[data-v-995c2758]{width:40px;min-width:40px;height:40px;object-fit:contain}.result--icon-class.rounded[data-v-995c2758],.result--image.rounded[data-v-995c2758]{border-radius:50%}.result--content[data-v-995c2758]{display:flex;flex-direction:column;padding-inline-start:10px;overflow:hidden}.result--content--name[data-v-995c2758],.result--content--subline[data-v-995c2758]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.material-design-icon[data-v-e61f71e3]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.smart-picker-search[data-v-e61f71e3]{width:100%;display:flex;flex-direction:column;padding:0 16px 16px}.smart-picker-search.with-empty-content[data-v-e61f71e3]{min-height:400px}.smart-picker-search .provider-icon[data-v-e61f71e3]{width:150px;height:150px;object-fit:contain;filter:var(--background-invert-if-dark)}.smart-picker-search--select[data-v-e61f71e3],.smart-picker-search--select .search-result[data-v-e61f71e3]{width:100%}.smart-picker-search--select .group-name-icon[data-v-e61f71e3],.smart-picker-search--select .option-simple-icon[data-v-e61f71e3]{width:20px;height:20px;margin:0 20px 0 10px}.smart-picker-search--select .custom-option[data-v-e61f71e3]{height:var(--default-clickable-area);display:flex;align-items:center;overflow:hidden}.smart-picker-search--select .option-text[data-v-e61f71e3]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.material-design-icon[data-v-646d5538]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.reference-picker[data-v-646d5538],.reference-picker .custom-element-wrapper[data-v-646d5538],.reference-picker .custom-element-wrapper .custom-element[data-v-646d5538]{display:flex;overflow-y:auto;width:100%}.material-design-icon[data-v-00990f2a]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.reference-picker-modal[data-v-00990f2a] .modal-container{display:flex!important}.reference-picker-modal--content[data-v-00990f2a]{width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow-y:auto}.reference-picker-modal--content .close-button[data-v-00990f2a],.reference-picker-modal--content .back-button[data-v-00990f2a]{position:absolute;top:4px}.reference-picker-modal--content .back-button[data-v-00990f2a]{inset-inline-start:4px}.reference-picker-modal--content .close-button[data-v-00990f2a]{inset-inline-end:4px}.reference-picker-modal--content>h2[data-v-00990f2a]{display:flex;margin:12px 0 20px}.reference-picker-modal--content>h2 .icon[data-v-00990f2a]{margin-inline-end:8px}.nc-select-users[data-v-7f7ecbfe] .vs__selected{padding-inline:0 5px!important}.material-design-icon[data-v-9938ac79]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.input-wrapper[data-v-9938ac79]{display:flex;align-items:center;flex-wrap:wrap;width:100%;max-width:400px}.input-wrapper .action-input__label[data-v-9938ac79]{margin-right:12px}.input-wrapper[data-v-9938ac79]:disabled{cursor:default}.input-wrapper .hint[data-v-9938ac79]{color:var(--color-text-maxcontrast);margin-left:8px}.material-design-icon[data-v-9fdd9dcb]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.settings-section[data-v-9fdd9dcb]{display:block;margin-bottom:auto;padding:30px}.settings-section[data-v-9fdd9dcb]:not(:last-child){border-bottom:1px solid var(--color-border)}.settings-section--limit-width>*[data-v-9fdd9dcb]{max-width:900px}.settings-section__name[data-v-9fdd9dcb]{display:inline-flex;align-items:center;justify-content:center;font-size:20px;font-weight:var(--font-weight-heading, bold);max-width:900px;margin-top:0}.settings-section__info[data-v-9fdd9dcb]{display:flex;align-items:center;justify-content:center;width:var(--default-clickable-area);height:var(--default-clickable-area);margin:calc((var(--default-clickable-area) - 16px) / 2 * -1);margin-inline-start:0;color:var(--color-text-maxcontrast)}.settings-section__info[data-v-9fdd9dcb]:hover,.settings-section__info[data-v-9fdd9dcb]:focus,.settings-section__info[data-v-9fdd9dcb]:active{color:var(--color-main-text)}.settings-section__desc[data-v-9fdd9dcb]{margin-top:-.2em;margin-bottom:1em;color:var(--color-text-maxcontrast);max-width:900px}.material-design-icon[data-v-9d59765b]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.select-group-error[data-v-9d59765b]{color:var(--color-text-error, var(--color-error));font-size:13px;padding-inline-start:var(--border-radius-large)}.material-design-icon[data-v-70810bb3]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}/*! + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */.textarea[data-v-70810bb3]{--input-border-color: var(--color-border-maxcontrast);--input-border-width-offset: calc(var(--border-width-input-focused, 2px) - var(--border-width-input, 2px));position:relative;width:100%;border-radius:var(--border-radius-large);margin-block-start:6px;resize:vertical}.textarea--disabled[data-v-70810bb3]{opacity:.7;filter:saturate(.7)}.textarea__main-wrapper[data-v-70810bb3]{padding:var(--border-width-input-focused, 2px);position:relative}.textarea__input[data-v-70810bb3]{margin:0;padding-block:var(--border-radius-element);padding-inline:10px;width:100%;font-size:var(--default-font-size);text-overflow:ellipsis;cursor:pointer;min-height:calc(var(--default-clickable-area) * 2);min-width:calc(var(--default-clickable-area) * 2);max-width:100%;background-color:var(--color-main-background);color:var(--color-main-text);--input-border-box-shadow-light: 0 -1px var(--input-border-color), 0 0 0 1px color-mix(in srgb, var(--input-border-color), 65% transparent);--input-border-box-shadow-dark: 0 1px var(--input-border-color), 0 0 0 1px color-mix(in srgb, var(--input-border-color), 65% transparent);--input-border-box-shadow: var(--input-border-box-shadow-light);border:none;border-radius:var(--border-radius-element);box-shadow:var(--input-border-box-shadow)}.textarea__input[data-v-70810bb3]:hover:not([disabled]){box-shadow:0 0 0 1px var(--input-border-color)}@media(prefers-color-scheme:dark){.textarea__input .textarea__input[data-v-70810bb3]{--input-border-box-shadow: var(--input-border-box-shadow-dark)}}[data-theme-dark] .textarea__input[data-v-70810bb3]{--input-border-box-shadow: var(--input-border-box-shadow-dark)}[data-theme-light] .textarea__input[data-v-70810bb3]{--input-border-box-shadow: var(--input-border-box-shadow-light)}.textarea--legacy .textarea__input[data-v-70810bb3]{box-shadow:0 0 0 1px var(--input-border-color)}.textarea--legacy .textarea__input[data-v-70810bb3]:hover:not([disabled]){box-shadow:0 0 0 2px var(--input-border-color)}.textarea__input[data-v-70810bb3]:focus-within:not([disabled]),.textarea__input[data-v-70810bb3]:active:not([disabled]){box-shadow:0 0 0 2px var(--input-border-color),0 0 0 4px var(--color-main-background)!important}.textarea__input[data-v-70810bb3]:active:not([disabled]),.textarea__input[data-v-70810bb3]:focus:not([disabled]){--input-border-width-offset: 0px;--input-border-color: var(--color-main-text)}.textarea__input[data-v-70810bb3]:not(:focus,.textarea__input--label-outside)::placeholder{opacity:0}.textarea__input[data-v-70810bb3]:focus{cursor:text}.textarea__input[data-v-70810bb3]:disabled{cursor:default}.textarea__input[data-v-70810bb3]:focus-visible{box-shadow:unset!important}.textarea__input--success[data-v-70810bb3]{--input-border-color: var(--color-border-success, var(--color-success)) !important}.textarea__input--success[data-v-70810bb3]:focus-visible{box-shadow:#f8fafc 0 0 0 2px,var(--color-primary-element) 0 0 0 4px,#0000000d 0 1px 2px}.textarea__input--error[data-v-70810bb3]{--input-border-color: var(--color-border-error, var(--color-error)) !important}.textarea__input--error[data-v-70810bb3]:focus-visible{box-shadow:#f8fafc 0 0 0 2px,var(--color-primary-element) 0 0 0 4px,#0000000d 0 1px 2px}.textarea__label[data-v-70810bb3]{position:absolute;margin-inline:12px 0;max-width:fit-content;inset-block-start:11px;inset-inline:0;color:var(--color-text-maxcontrast);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none;transition:height var(--animation-quick),inset-block-start var(--animation-quick),font-size var(--animation-quick),color var(--animation-quick),background-color var(--animation-quick) var(--animation-slow)}.textarea__input:focus+.textarea__label[data-v-70810bb3],.textarea__input:not(:placeholder-shown)+.textarea__label[data-v-70810bb3]{inset-block-start:-10px;line-height:1.5;font-size:13px;font-weight:var(--font-weight-element, 500);color:var(--color-main-text);background-color:var(--color-main-background);padding-inline:4px;margin-inline-start:8px;transition:height var(--animation-quick),inset-block-start var(--animation-quick),font-size var(--animation-quick),color var(--animation-quick)}.textarea__helper-text-message[data-v-70810bb3]{padding-block:4px;display:flex;align-items:center}.textarea__helper-text-message__icon[data-v-70810bb3]{margin-inline-end:8px}.textarea__helper-text-message--error[data-v-70810bb3]{color:var(--color-error-text)}.textarea__helper-text-message--success[data-v-70810bb3]{color:var(--color-success-text)}.material-design-icon[data-v-7942d6b6]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.user-bubble__wrapper[data-v-7942d6b6]{display:inline-block;vertical-align:middle;min-width:0;max-width:100%}.user-bubble__content[data-v-7942d6b6]{display:inline-flex;max-width:100%;background-color:var(--color-background-dark)}.user-bubble__content--primary[data-v-7942d6b6]{color:var(--color-primary-element-text);background-color:var(--color-primary-element)}.user-bubble__content[data-v-7942d6b6]>:last-child{padding-inline-end:8px}.user-bubble__avatar[data-v-7942d6b6]{align-self:center}.user-bubble__name[data-v-7942d6b6]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.user-bubble__name[data-v-7942d6b6],.user-bubble__secondary[data-v-7942d6b6]{padding-block:0;padding-inline:4px 0}.v-popper--theme-tooltip.v-popper__popper{position:absolute;z-index:100000;top:0;inset-inline:auto;display:block;margin:0;padding:0;text-align:start;opacity:0;line-height:1.6;line-break:auto;filter:drop-shadow(0 1px 10px var(--color-box-shadow))}.v-popper--theme-tooltip.v-popper__popper[data-popper-placement^=top] .v-popper__arrow-container{bottom:-10px;border-bottom-width:0;border-top-color:var(--color-main-background)}.v-popper--theme-tooltip.v-popper__popper[data-popper-placement^=bottom] .v-popper__arrow-container{top:-10px;border-top-width:0;border-bottom-color:var(--color-main-background)}.v-popper--theme-tooltip.v-popper__popper[data-popper-placement^=right] .v-popper__arrow-container{inset-inline-end:100%;border-inline-start-width:0;border-inline-end-color:var(--color-main-background)}.v-popper--theme-tooltip.v-popper__popper[data-popper-placement^=left] .v-popper__arrow-container{inset-inline-start:100%;border-inline-end-width:0;border-inline-start-color:var(--color-main-background)}.v-popper--theme-tooltip.v-popper__popper[aria-hidden=true]{visibility:hidden;transition:opacity .15s,visibility .15s;opacity:0}.v-popper--theme-tooltip.v-popper__popper[aria-hidden=false]{visibility:visible;transition:opacity .15s;opacity:1}.v-popper--theme-tooltip .v-popper__inner{max-width:350px;padding:5px 8px;text-align:center;color:var(--color-main-text);border-radius:var(--border-radius);background-color:var(--color-main-background)}.v-popper--theme-tooltip .v-popper__arrow-container{position:absolute;z-index:1;width:0;height:0;margin:0;border-style:solid;border-color:transparent;border-width:10px}.material-design-icon[data-v-47ce59a3]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.button-vue[data-v-47ce59a3]{--button-size: var(--default-clickable-area);--button-inner-size: calc(var(--button-size) - 4px);--button-radius: var(--border-radius-element);--button-padding-default: calc(var(--default-grid-baseline) + var(--button-radius));--button-padding: var(--default-grid-baseline) var(--button-padding-default);color:var(--color-primary-element-light-text);background-color:var(--color-primary-element-light);border:1px solid var(--color-primary-element-light-hover);border-bottom-width:2px;border-radius:var(--button-radius);box-sizing:border-box;position:relative;width:fit-content;overflow:hidden;padding-block:1px 0;padding-inline:var(--button-padding);min-height:var(--button-size);min-width:var(--button-size);display:flex;align-items:center;justify-content:center;will-change:transform;transition-property:color,border-color,background-color,transform;transition-duration:.1s;transition-timing-function:linear;cursor:pointer;font-size:var(--default-font-size);font-weight:var(--font-weight-element, bold)}.button-vue--size-small[data-v-47ce59a3]{--button-size: var(--clickable-area-small)}.button-vue--size-large[data-v-47ce59a3]{--button-size: var(--clickable-area-large)}.button-vue[data-v-47ce59a3] *{cursor:pointer}.button-vue[data-v-47ce59a3]:focus{outline:none}.button-vue[data-v-47ce59a3]:disabled{filter:saturate(.7);opacity:.5;cursor:default}.button-vue[data-v-47ce59a3]:disabled *{cursor:default}.button-vue[data-v-47ce59a3]:hover:not(:disabled){background-color:var(--color-primary-element-light-hover)}.button-vue[data-v-47ce59a3]:active:not(:disabled){background-color:var(--color-primary-element-light);transform:scale(.985)}.button-vue__wrapper[data-v-47ce59a3]{display:inline-flex;align-items:center;justify-content:center;width:100%}.button-vue--end .button-vue__wrapper[data-v-47ce59a3]{justify-content:end}.button-vue--start .button-vue__wrapper[data-v-47ce59a3]{justify-content:start}.button-vue--reverse .button-vue__wrapper[data-v-47ce59a3]{flex-direction:row-reverse}.button-vue--reverse[data-v-47ce59a3]{--button-padding: var(--button-padding-default) var(--default-grid-baseline)}.button-vue__icon[data-v-47ce59a3]{--default-clickable-area: var(--button-inner-size);height:var(--button-inner-size);width:var(--button-inner-size);min-height:var(--button-inner-size);min-width:var(--button-inner-size);display:flex;justify-content:center;align-items:center}.button-vue__icon[data-v-47ce59a3]:empty{display:none}.button-vue--size-small .button-vue__icon[data-v-47ce59a3]>*{max-height:16px;max-width:16px}.button-vue--size-small .button-vue__icon[data-v-47ce59a3] svg{height:16px;width:16px}.button-vue__text[data-v-47ce59a3]{font-weight:var(--font-weight-element, bold);margin-bottom:1px;padding:2px 0;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.button-vue__text[data-v-47ce59a3]:empty{display:none}.button-vue[data-v-47ce59a3]:has(.button-vue__text:empty):not(.button-vue--wide){--button-padding: var(--button-radius);line-height:1;width:var(--button-size)!important}.button-vue[data-v-47ce59a3]:has(.button-vue__icon:empty){--button-padding: var(--button-padding-default)}.button-vue:has(.button-vue__icon:empty) .button-vue__text[data-v-47ce59a3]{padding-inline:var(--default-grid-baseline)}.button-vue--wide[data-v-47ce59a3]{width:100%}.button-vue[data-v-47ce59a3]:focus-visible{outline:2px solid var(--color-main-text)!important;box-shadow:0 0 0 4px var(--color-main-background)!important}.button-vue:focus-visible.button-vue--vue-tertiary-on-primary[data-v-47ce59a3]{outline:2px solid var(--color-primary-element-text);border-radius:var(--border-radius-element);background-color:transparent}.button-vue--primary[data-v-47ce59a3]{background-color:var(--color-primary-element);border-color:var(--color-primary-element-hover);color:var(--color-primary-element-text)}.button-vue--primary[data-v-47ce59a3]:hover:not(:disabled){background-color:var(--color-primary-element-hover)}.button-vue--primary[data-v-47ce59a3]:active{background-color:var(--color-primary-element)}.button-vue--secondary[data-v-47ce59a3]{background-color:var(--color-primary-element-light);border-color:var(--color-primary-element-light-hover);color:var(--color-primary-element-light-text)}.button-vue--secondary[data-v-47ce59a3]:hover:not(:disabled){color:var(--color-primary-element-light-text);background-color:var(--color-primary-element-light-hover)}.button-vue--tertiary[data-v-47ce59a3]{background-color:transparent;border-color:transparent;color:var(--color-main-text)}.button-vue--tertiary[data-v-47ce59a3]:hover:not(:disabled){background-color:var(--color-background-hover)}.button-vue--tertiary[data-v-47ce59a3]:not(.button-vue--legacy34):hover:not(:disabled){background-color:color-mix(in srgb,var(--color-primary-element) 8%,transparent)}.button-vue--tertiary-no-background[data-v-47ce59a3]:hover:not(:disabled){background-color:transparent}.button-vue--tertiary-on-primary[data-v-47ce59a3]{color:var(--color-primary-element-text)}.button-vue--tertiary-on-primary[data-v-47ce59a3]:hover:not(:disabled){background-color:transparent}.button-vue--success[data-v-47ce59a3]{border-color:var(--color-success-hover);background-color:var(--color-success);color:var(--color-success-text)}.button-vue--success[data-v-47ce59a3]:hover:not(:disabled){background-color:var(--color-success-hover)}.button-vue--success[data-v-47ce59a3]:active{background-color:var(--color-success)}.button-vue--warning[data-v-47ce59a3]{border-color:var(--color-warning-hover);background-color:var(--color-warning);color:var(--color-warning-text)}.button-vue--warning[data-v-47ce59a3]:hover:not(:disabled){background-color:var(--color-warning-hover)}.button-vue--warning[data-v-47ce59a3]:active{background-color:var(--color-warning)}.button-vue--error[data-v-47ce59a3]{border-color:var(--color-error-hover);background-color:var(--color-error);color:var(--color-error-text)}.button-vue--error[data-v-47ce59a3]:hover:not(:disabled){background-color:var(--color-error-hover)}.button-vue--error[data-v-47ce59a3]:active{background-color:var(--color-error)}.button-vue--legacy[data-v-47ce59a3]{--button-inner-size: var(--button-size);border:none;padding-block:0}.button-vue--legacy.button-vue--error[data-v-47ce59a3],.button-vue--legacy.button-vue--success[data-v-47ce59a3],.button-vue--legacy.button-vue--warning[data-v-47ce59a3]{color:#fff}.material-design-icon[data-v-aaedb1c3]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.icon-vue[data-v-aaedb1c3]{display:flex;justify-content:center;align-items:center;min-width:var(--default-clickable-area);min-height:var(--default-clickable-area);opacity:1}.icon-vue.icon-vue--inline[data-v-aaedb1c3]{display:inline-flex!important;min-width:fit-content;min-height:fit-content;vertical-align:text-bottom}.icon-vue span[data-v-aaedb1c3]{line-height:0}.icon-vue[data-v-aaedb1c3] svg{fill:currentColor;width:var(--fb515064);height:var(--fb515064);max-width:var(--fb515064);max-height:var(--fb515064)}.icon-vue--directional[data-v-aaedb1c3] svg:dir(rtl){transform:scaleX(-1)}.material-design-icon[data-v-469673da]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.loading-icon[data-v-469673da]{overflow:hidden}.loading-icon svg[data-v-469673da]{animation:rotate var(--animation-duration, .8s) linear infinite}@media only screen and (max-width:512px){.dialog__modal .modal-wrapper.modal-wrapper--small .modal-container{width:fit-content;height:unset;max-height:90%;position:relative;top:unset;border-radius:var(--border-radius-element)}}.material-design-icon[data-v-adda232f]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.dialog[data-v-adda232f]{height:100%;width:100%;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden}.dialog__modal[data-v-adda232f] .modal-wrapper .modal-container{display:flex!important;padding-block:4px 0;padding-inline:12px 0}.dialog__modal[data-v-adda232f] .modal-wrapper .modal-container__content{display:flex;flex-direction:column;overflow:hidden}.dialog__wrapper[data-v-adda232f]{display:flex;flex-direction:row;flex:1;min-height:0;overflow:hidden}.dialog__wrapper--collapsed[data-v-adda232f]{flex-direction:column}.dialog__navigation[data-v-adda232f]{display:flex;flex-shrink:0}.dialog__wrapper:not(.dialog__wrapper--collapsed) .dialog__navigation[data-v-adda232f]{flex-direction:column;overflow:hidden auto;height:100%;min-width:200px;margin-inline-end:20px}.dialog__wrapper.dialog__wrapper--collapsed .dialog__navigation[data-v-adda232f]{flex-direction:row;justify-content:space-between;overflow:auto hidden;width:100%;min-width:100%}.dialog__name[data-v-adda232f]{font-size:21px;text-align:center;height:fit-content;min-height:var(--default-clickable-area);line-height:var(--default-clickable-area);overflow-wrap:break-word;margin-block:0 12px}.dialog__content[data-v-adda232f]{flex:1;min-height:0;overflow:auto;padding-inline-end:12px}.dialog__text[data-v-adda232f]{padding-block-end:6px}.dialog__actions[data-v-adda232f]{display:flex;gap:6px;align-content:center;justify-content:end;width:100%;max-width:100%;padding-inline:0 12px;margin-inline:0;margin-block:0}.dialog__actions[data-v-adda232f]:not(:empty){margin-block:6px 12px}@media only screen and (max-width:512px){.dialog__name[data-v-adda232f]{text-align:start;margin-inline-end:var(--default-clickable-area)}}.material-design-icon[data-v-8a979e50]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.modal-mask[data-v-8a979e50]{position:fixed;z-index:9998;top:0;inset-inline-start:0;display:block;width:100%;height:100%;--backdrop-color: 0, 0, 0;background-color:rgba(var(--backdrop-color),.5)}.modal-mask[data-v-8a979e50],.modal-mask[data-v-8a979e50] *{box-sizing:border-box}.modal-mask--opaque[data-v-8a979e50]{background-color:rgba(var(--backdrop-color),.92)}.modal-mask--light[data-v-8a979e50]{--backdrop-color: 255, 255, 255}.modal-header[data-v-8a979e50]{position:absolute;z-index:10001;top:0;inset-inline:0 0;display:flex!important;align-items:center;justify-content:space-between;width:100%;height:var(--header-height);overflow:hidden;transition:opacity .25s,visibility .25s}.modal-header__name[data-v-8a979e50]{overflow-x:hidden;width:100%;padding-inline:12px 0;transition:padding ease .1s;white-space:nowrap;text-overflow:ellipsis;font-size:16px;margin-block:0}@media only screen and (min-width:1024px){.modal-header:not(.modal-header--name-start) .modal-header__name[data-v-8a979e50]{padding-inline-start:calc(var(--header-height) * var(--v56de492e));text-align:center}}.modal-header--name-start .modal-header__name[data-v-8a979e50]{text-align:start}.modal-header .icons-menu[data-v-8a979e50]{display:flex;align-items:center;justify-content:flex-end;align-self:flex-end}.modal-header .icons-menu .header-close[data-v-8a979e50]{display:flex;align-items:center;justify-content:center;margin:calc((var(--header-height) - var(--default-clickable-area)) / 2);padding:0}.modal-header .icons-menu .play-pause-icons[data-v-8a979e50]{position:relative;width:var(--header-height);height:var(--header-height);margin:0;padding:0;cursor:pointer;border:none;background-color:transparent}.modal-header .icons-menu .play-pause-icons:hover .play-pause-icons__icon[data-v-8a979e50],.modal-header .icons-menu .play-pause-icons:focus .play-pause-icons__icon[data-v-8a979e50]{opacity:1;border-radius:calc(var(--default-clickable-area) / 2);background-color:#7f7f7f40}.modal-header .icons-menu .play-pause-icons__icon[data-v-8a979e50]{width:var(--default-clickable-area);height:var(--default-clickable-area);margin:calc((var(--header-height) - var(--default-clickable-area)) / 2);cursor:pointer;opacity:.7}.modal-header .icons-menu[data-v-8a979e50] .action-item{margin:calc((var(--header-height) - var(--default-clickable-area)) / 2)}.modal-header .icons-menu[data-v-8a979e50] .action-item--single{width:var(--default-clickable-area);height:var(--default-clickable-area);cursor:pointer;background-position:center;background-size:22px}.modal-header .icons-menu .header-actions[data-v-8a979e50] button:focus-visible{box-shadow:none!important;outline:2px solid #fff!important}.modal-wrapper[data-v-8a979e50]{--modal-header-offset: var(--header-height);display:flex;align-items:center;justify-content:center;width:100%;height:100%}.modal-wrapper--no-header[data-v-8a979e50]{--modal-header-offset: var(--body-container-margin)}.modal-wrapper .prev[data-v-8a979e50],.modal-wrapper .next[data-v-8a979e50]{z-index:10000;height:35vh;min-height:300px;position:absolute;transition:opacity .25s;color:#fff}.modal-wrapper .prev[data-v-8a979e50]:focus-visible,.modal-wrapper .next[data-v-8a979e50]:focus-visible{box-shadow:0 0 0 2px var(--color-primary-element-text);background-color:var(--color-box-shadow)}.modal-wrapper .prev[data-v-8a979e50]{inset-inline-start:2px}.modal-wrapper .next[data-v-8a979e50]{inset-inline-end:2px}.modal-wrapper .modal-container[data-v-8a979e50]{position:relative;display:flex;padding:0;transition:transform .3s ease;border-radius:var(--border-radius-container);background-color:var(--color-main-background);color:var(--color-main-text);box-shadow:0 0 40px #0003;overflow:auto}.modal-wrapper .modal-container__close[data-v-8a979e50]{z-index:1;position:absolute;top:4px;inset-inline-end:var(--default-grid-baseline)}.modal-wrapper .modal-container__content[data-v-8a979e50]{width:100%;min-height:52px;overflow:auto}.modal-wrapper--small>.modal-container[data-v-8a979e50]{width:400px;max-width:90%;max-height:min(90%,100% - 2 * var(--header-height) - 2 * var(--body-container-margin))}.modal-wrapper--normal>.modal-container[data-v-8a979e50]{max-width:90%;width:600px;max-height:min(90%,100% - 2 * var(--header-height) - 2 * var(--body-container-margin))}.modal-wrapper--large>.modal-container[data-v-8a979e50]{max-width:90%;width:900px;max-height:min(90%,100% - 2 * var(--header-height) - 2 * var(--body-container-margin))}.modal-wrapper--full>.modal-container[data-v-8a979e50]{width:100%;height:calc(100% - var(--modal-header-offset));position:absolute;top:var(--modal-header-offset);border-radius:0}@media only screen and ((max-width:512px)or (max-height:400px)){.modal-wrapper .modal-container[data-v-8a979e50]{max-width:initial;width:100%;max-height:initial;height:calc(100% - var(--modal-header-offset));position:absolute;top:var(--modal-header-offset);border-radius:0}}.fade-enter-active[data-v-8a979e50],.fade-leave-active[data-v-8a979e50]{transition:opacity .25s}.fade-enter-from[data-v-8a979e50],.fade-leave-to[data-v-8a979e50]{opacity:0}.fade-visibility-enter-from[data-v-8a979e50],.fade-visibility-leave-to[data-v-8a979e50]{visibility:hidden;opacity:0}.modal-in-enter-active[data-v-8a979e50],.modal-in-leave-active[data-v-8a979e50],.modal-out-enter-active[data-v-8a979e50],.modal-out-leave-active[data-v-8a979e50]{transition:opacity .25s}.modal-in-enter-from[data-v-8a979e50],.modal-in-leave-to[data-v-8a979e50],.modal-out-enter-from[data-v-8a979e50],.modal-out-leave-to[data-v-8a979e50]{opacity:0}.modal-in-enter .modal-container[data-v-8a979e50],.modal-in-leave-to .modal-container[data-v-8a979e50]{transform:scale(.9)}.modal-out-enter .modal-container[data-v-8a979e50],.modal-out-leave-to .modal-container[data-v-8a979e50]{transform:scale(1.1)}.modal-mask .play-pause-icons[data-v-8a979e50]{--progress-ring-radius: calc(var(--default-clickable-area) / 2 + 1px);--progress-ring-circumference: calc(2 * pi * var(--progress-ring-radius))}.modal-mask .play-pause-icons .progress-ring[data-v-8a979e50]{position:absolute;top:0;inset-inline-start:0;width:100%;height:100%;transform:rotate(-90deg)}.modal-mask .play-pause-icons .progress-ring .progress-ring__circle[data-v-8a979e50]{transition:.1s stroke-dashoffset;transform-origin:50% 50%;animation:progressring-8a979e50 linear var(--v7a929c18) infinite;r:var(--progress-ring-radius);stroke-linecap:round;stroke-dashoffset:var(--progress-ring-circumference);stroke-dasharray:var(--progress-ring-circumference)}.modal-mask .play-pause-icons--paused .play-pause-icons__icon[data-v-8a979e50]{animation:breath-8a979e50 2s cubic-bezier(.4,0,.2,1) infinite}.modal-mask .play-pause-icons--paused .progress-ring__circle[data-v-8a979e50]{animation-play-state:paused!important}@keyframes progressring-8a979e50{0%{stroke-dashoffset:var(--progress-ring-circumference)}to{stroke-dashoffset:0}}@keyframes breath-8a979e50{0%{opacity:1}50%{opacity:0}to{opacity:1}}.material-design-icon[data-v-7206c1f1]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.action-items[data-v-7206c1f1]{display:flex;align-items:center;gap:calc((var(--default-clickable-area) - 16px) / 2 / 2)}.action-item[data-v-7206c1f1]{--open-background-color: var(--color-background-hover, $action-background-hover);position:relative;display:inline-block}.action-item.action-item--primary[data-v-7206c1f1]{--open-background-color: var(--color-primary-element-hover)}.action-item.action-item--secondary[data-v-7206c1f1]{--open-background-color: var(--color-primary-element-light-hover)}.action-item.action-item--error[data-v-7206c1f1]{--open-background-color: var(--color-error-hover)}.action-item.action-item--warning[data-v-7206c1f1]{--open-background-color: var(--color-warning-hover)}.action-item.action-item--success[data-v-7206c1f1]{--open-background-color: var(--color-success-hover)}.action-item.action-item--tertiary-no-background[data-v-7206c1f1]{--open-background-color: transparent}.action-item.action-item--open .action-item__menutoggle[data-v-7206c1f1]{background-color:var(--open-background-color)}.action-item.action-item--wide[data-v-7206c1f1]{width:100%}.action-item__menutoggle__icon[data-v-7206c1f1]{width:20px;height:20px;object-fit:contain}.material-design-icon{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.v-popper--theme-nc-popover-9.v-popper__popper.action-item__popper .v-popper__wrapper{border-radius:var(--border-radius-element)}.v-popper--theme-nc-popover-9.v-popper__popper.action-item__popper .v-popper__wrapper .v-popper__inner{border-radius:var(--border-radius-element);padding:4px;max-height:calc(100vh - var(--header-height));overflow:auto}._material-design-icon_YkiJ0{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._ncPopover_GqEo6.v-popper--theme-nc-popover-9,._ncPopover_GqEo6.v-popper--theme-nc-popover-9 *{box-sizing:border-box}._ncPopover_GqEo6.v-popper--theme-nc-popover-9 .resize-observer{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;border:none;background-color:transparent;pointer-events:none;display:block;overflow:hidden;opacity:0}._ncPopover_GqEo6.v-popper--theme-nc-popover-9 .resize-observer object{display:block;position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1}._ncPopover_GqEo6.v-popper--theme-nc-popover-9.v-popper__popper{z-index:100000;top:0;left:0;display:block!important}._ncPopover_GqEo6.v-popper--theme-nc-popover-9.v-popper__popper .v-popper__wrapper{box-shadow:0 1px 10px var(--color-box-shadow);border-radius:var(--border-radius-element);transition:transform var(--animation-quick)}._ncPopover_GqEo6.v-popper--theme-nc-popover-9.v-popper__popper .v-popper__inner{padding:0;color:var(--color-main-text);border-radius:var(--border-radius-element);overflow:hidden;background:var(--color-main-background)}._ncPopover_GqEo6.v-popper--theme-nc-popover-9.v-popper__popper .v-popper__arrow-container{display:none}._ncPopover_GqEo6.v-popper--theme-nc-popover-9.v-popper__popper[data-popper-placement^=top] .v-popper__wrapper{transform-origin:bottom center}._ncPopover_GqEo6.v-popper--theme-nc-popover-9.v-popper__popper[data-popper-placement^=bottom] .v-popper__wrapper{transform-origin:top center}._ncPopover_GqEo6.v-popper--theme-nc-popover-9.v-popper__popper[data-popper-placement^=right] .v-popper__wrapper{transform-origin:left center}._ncPopover_GqEo6.v-popper--theme-nc-popover-9.v-popper__popper[data-popper-placement^=left] .v-popper__wrapper{transform-origin:right center}._ncPopover_GqEo6.v-popper--theme-nc-popover-9.v-popper__popper.v-popper__popper--hidden{visibility:hidden;transition:opacity var(--animation-quick),visibility var(--animation-quick);opacity:0}._ncPopover_GqEo6.v-popper--theme-nc-popover-9.v-popper__popper.v-popper__popper--hidden .v-popper__wrapper{transform:scale(.96)}._ncPopover_GqEo6.v-popper--theme-nc-popover-9.v-popper__popper.v-popper__popper--shown{visibility:visible;transition:opacity var(--animation-quick);opacity:1}._ncPopover_GqEo6.v-popper--theme-nc-popover-9.v-popper__popper.v-popper__popper--shown .v-popper__wrapper{transform:scale(1)}.material-design-icon[data-v-6be9fa31]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.notecard[data-v-6be9fa31]{--note-card-icon-size: 20px;--note-card-padding: calc(2 * var(--default-grid-baseline));color:var(--color-main-text)!important;background-color:var(--note-background)!important;border-inline-start:var(--default-grid-baseline) solid var(--note-theme);border-radius:var(--border-radius-small);margin:1rem 0;padding:var(--note-card-padding);display:flex;flex-direction:row;gap:var(--note-card-padding)}.notecard__heading[data-v-6be9fa31]{font-size:var(--note-card-icon-size);font-weight:var(--font-weight-heading, 600)}.notecard__icon[data-v-6be9fa31]{color:var(--note-theme)}.notecard__icon--heading[data-v-6be9fa31]{font-size:var(--note-card-icon-size);margin-block:calc((1lh - 1em)/2) auto}.notecard--success[data-v-6be9fa31]{--note-background: var(--color-success);--note-theme: var(--color-success-text)}.notecard--info[data-v-6be9fa31]{--note-background: var(--color-info);--note-theme: var(--color-info-text)}.notecard--error[data-v-6be9fa31]{--note-background: var(--color-error);--note-theme: var(--color-error-text)}.notecard--warning[data-v-6be9fa31]{--note-background: var(--color-warning);--note-theme: var(--color-warning-text)}.notecard--legacy[data-v-6be9fa31]{background-color:color-mix(in srgb,var(--note-background),var(--color-main-background) 80%)!important;color:var(--color-main-text)!important}.vue-password-confirmation{display:flex;flex-direction:column;margin-inline:6px;margin-block-end:6px;gap:10px 0}.vue-password-confirmation__form{display:flex;flex-direction:column;gap:8px 0;padding:2px}.vue-password-confirmation__submit{align-self:end}.section__grid[data-v-4a31423d]{display:grid;gap:40px;grid-auto-flow:row;grid-template-columns:repeat(auto-fit,minmax(320px,400px));margin-bottom:40px}.section__grid .section__description[data-v-4a31423d]{display:inline-block;min-height:44px;margin-left:26px}.section__status[data-v-4a31423d]{display:flex;gap:0 14px}.section__status .section__loading[data-v-4a31423d]{margin-left:6px}.section__status .settings-hint[data-v-4a31423d]{margin:auto 0}.section__modal .section__icon[data-v-4a31423d]{height:40px}.section__modal .section__modal-action[data-v-4a31423d]{display:flex;flex-direction:column}.section__modal .section__modal-button[data-v-4a31423d]{margin:20px auto 0}.section__status[data-v-54770675]{display:flex;gap:0 14px;margin-top:20px}.section__status .section__loading[data-v-54770675]{margin-left:6px}.section__status .settings-hint[data-v-54770675]{margin:auto 0}.section__picker-error[data-v-54770675]{display:inline-block;margin:20px 0}.section__modal .section__icon[data-v-54770675]{height:40px}.section__modal .section__modal-action[data-v-54770675]{display:flex;flex-direction:column}.section__modal .section__modal-button[data-v-54770675]{margin:20px auto 0} diff --git a/css/user_migration-personalSettings.css b/css/user_migration-personalSettings.css new file mode 100644 index 00000000..e053b23d --- /dev/null +++ b/css/user_migration-personalSettings.css @@ -0,0 +1,2 @@ +/* extracted by css-entry-points-plugin */ +@import './personalSettings-i1_v3FZk.chunk.css'; \ No newline at end of file diff --git a/js/af-BXiFDzzM.chunk.mjs b/js/af-BXiFDzzM.chunk.mjs new file mode 100644 index 00000000..7095221f --- /dev/null +++ b/js/af-BXiFDzzM.chunk.mjs @@ -0,0 +1,3 @@ +/*! third party licenses: js/vendor.LICENSE.txt */ +import{b as o,c as t,d as r,e as u}from"./index-Cr1DLTt7.chunk.mjs";import"./user_migration-personalSettings.mjs";import"./be-tarask-CzbVxLq7.chunk.mjs";const m={lessThanXSeconds:{one:"minder as 'n sekonde",other:"minder as {{count}} sekondes"},xSeconds:{one:"1 sekonde",other:"{{count}} sekondes"},halfAMinute:"'n halwe minuut",lessThanXMinutes:{one:"minder as 'n minuut",other:"minder as {{count}} minute"},xMinutes:{one:"'n minuut",other:"{{count}} minute"},aboutXHours:{one:"ongeveer 1 uur",other:"ongeveer {{count}} ure"},xHours:{one:"1 uur",other:"{{count}} ure"},xDays:{one:"1 dag",other:"{{count}} dae"},aboutXWeeks:{one:"ongeveer 1 week",other:"ongeveer {{count}} weke"},xWeeks:{one:"1 week",other:"{{count}} weke"},aboutXMonths:{one:"ongeveer 1 maand",other:"ongeveer {{count}} maande"},xMonths:{one:"1 maand",other:"{{count}} maande"},aboutXYears:{one:"ongeveer 1 jaar",other:"ongeveer {{count}} jaar"},xYears:{one:"1 jaar",other:"{{count}} jaar"},overXYears:{one:"meer as 1 jaar",other:"meer as {{count}} jaar"},almostXYears:{one:"byna 1 jaar",other:"byna {{count}} jaar"}},s=(e,a,n)=>{let i;const d=m[e];return typeof d=="string"?i=d:a===1?i=d.one:i=d.other.replace("{{count}}",String(a)),n?.addSuffix?n.comparison&&n.comparison>0?"oor "+i:i+" gelede":i},g={full:"EEEE, d MMMM yyyy",long:"d MMMM yyyy",medium:"d MMM yyyy",short:"yyyy/MM/dd"},l={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},h={full:"{{date}} 'om' {{time}}",long:"{{date}} 'om' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},v={date:o({formats:g,defaultWidth:"full"}),time:o({formats:l,defaultWidth:"full"}),dateTime:o({formats:h,defaultWidth:"full"})},f={lastWeek:"'verlede' eeee 'om' p",yesterday:"'gister om' p",today:"'vandag om' p",tomorrow:"'môre om' p",nextWeek:"eeee 'om' p",other:"P"},c=(e,a,n,i)=>f[e],b={narrow:["vC","nC"],abbreviated:["vC","nC"],wide:["voor Christus","na Christus"]},w={narrow:["1","2","3","4"],abbreviated:["K1","K2","K3","K4"],wide:["1ste kwartaal","2de kwartaal","3de kwartaal","4de kwartaal"]},M={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],wide:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"]},y={narrow:["S","M","D","W","D","V","S"],short:["So","Ma","Di","Wo","Do","Vr","Sa"],abbreviated:["Son","Maa","Din","Woe","Don","Vry","Sat"],wide:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"]},p={narrow:{am:"vm",pm:"nm",midnight:"middernag",noon:"middaguur",morning:"oggend",afternoon:"middag",evening:"laat middag",night:"aand"},abbreviated:{am:"vm",pm:"nm",midnight:"middernag",noon:"middaguur",morning:"oggend",afternoon:"middag",evening:"laat middag",night:"aand"},wide:{am:"vm",pm:"nm",midnight:"middernag",noon:"middaguur",morning:"oggend",afternoon:"middag",evening:"laat middag",night:"aand"}},W={narrow:{am:"vm",pm:"nm",midnight:"middernag",noon:"uur die middag",morning:"uur die oggend",afternoon:"uur die middag",evening:"uur die aand",night:"uur die aand"},abbreviated:{am:"vm",pm:"nm",midnight:"middernag",noon:"uur die middag",morning:"uur die oggend",afternoon:"uur die middag",evening:"uur die aand",night:"uur die aand"},wide:{am:"vm",pm:"nm",midnight:"middernag",noon:"uur die middag",morning:"uur die oggend",afternoon:"uur die middag",evening:"uur die aand",night:"uur die aand"}},S=e=>{const a=Number(e),n=a%100;if(n<20)switch(n){case 1:case 8:return a+"ste";default:return a+"de"}return a+"ste"},D={ordinalNumber:S,era:t({values:b,defaultWidth:"wide"}),quarter:t({values:w,defaultWidth:"wide",argumentCallback:e=>e-1}),month:t({values:M,defaultWidth:"wide"}),day:t({values:y,defaultWidth:"wide"}),dayPeriod:t({values:p,defaultWidth:"wide",formattingValues:W,defaultFormattingWidth:"wide"})},k=/^(\d+)(ste|de)?/i,J=/\d+/i,P={narrow:/^([vn]\.? ?C\.?)/,abbreviated:/^([vn]\. ?C\.?)/,wide:/^((voor|na) Christus)/},A={any:[/^v/,/^n/]},C={narrow:/^[1234]/i,abbreviated:/^K[1234]/i,wide:/^[1234](st|d)e kwartaal/i},x={any:[/1/i,/2/i,/3/i,/4/i]},H={narrow:/^[jfmasond]/i,abbreviated:/^(Jan|Feb|Mrt|Apr|Mei|Jun|Jul|Aug|Sep|Okt|Nov|Dec)\.?/i,wide:/^(Januarie|Februarie|Maart|April|Mei|Junie|Julie|Augustus|September|Oktober|November|Desember)/i},N={narrow:[/^J/i,/^F/i,/^M/i,/^A/i,/^M/i,/^J/i,/^J/i,/^A/i,/^S/i,/^O/i,/^N/i,/^D/i],any:[/^Jan/i,/^Feb/i,/^Mrt/i,/^Apr/i,/^Mei/i,/^Jun/i,/^Jul/i,/^Aug/i,/^Sep/i,/^Okt/i,/^Nov/i,/^Dec/i]},V={narrow:/^[smdwv]/i,short:/^(So|Ma|Di|Wo|Do|Vr|Sa)/i,abbreviated:/^(Son|Maa|Din|Woe|Don|Vry|Sat)/i,wide:/^(Sondag|Maandag|Dinsdag|Woensdag|Donderdag|Vrydag|Saterdag)/i},j={narrow:[/^S/i,/^M/i,/^D/i,/^W/i,/^D/i,/^V/i,/^S/i],any:[/^So/i,/^Ma/i,/^Di/i,/^Wo/i,/^Do/i,/^Vr/i,/^Sa/i]},F={any:/^(vm|nm|middernag|(?:uur )?die (oggend|middag|aand))/i},O={any:{am:/^vm/i,pm:/^nm/i,midnight:/^middernag/i,noon:/^middaguur/i,morning:/oggend/i,afternoon:/middag/i,evening:/laat middag/i,night:/aand/i}},X={ordinalNumber:u({matchPattern:k,parsePattern:J,valueCallback:e=>parseInt(e,10)}),era:r({matchPatterns:P,defaultMatchWidth:"wide",parsePatterns:A,defaultParseWidth:"any"}),quarter:r({matchPatterns:C,defaultMatchWidth:"wide",parsePatterns:x,defaultParseWidth:"any",valueCallback:e=>e+1}),month:r({matchPatterns:H,defaultMatchWidth:"wide",parsePatterns:N,defaultParseWidth:"any"}),day:r({matchPatterns:V,defaultMatchWidth:"wide",parsePatterns:j,defaultParseWidth:"any"}),dayPeriod:r({matchPatterns:F,defaultMatchWidth:"any",parsePatterns:O,defaultParseWidth:"any"})},Y={code:"af",formatDistance:s,formatLong:v,formatRelative:c,localize:D,match:X,options:{weekStartsOn:0,firstWeekContainsDate:1}};export{Y as af}; +//# sourceMappingURL=af-BXiFDzzM.chunk.mjs.map diff --git a/js/af-BXiFDzzM.chunk.mjs.license b/js/af-BXiFDzzM.chunk.mjs.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/af-BXiFDzzM.chunk.mjs.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/af-BXiFDzzM.chunk.mjs.map b/js/af-BXiFDzzM.chunk.mjs.map new file mode 100644 index 00000000..386327a9 --- /dev/null +++ b/js/af-BXiFDzzM.chunk.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"af-BXiFDzzM.chunk.mjs","sources":["../node_modules/date-fns/locale/af/_lib/formatDistance.js","../node_modules/date-fns/locale/af/_lib/formatLong.js","../node_modules/date-fns/locale/af/_lib/formatRelative.js","../node_modules/date-fns/locale/af/_lib/localize.js","../node_modules/date-fns/locale/af/_lib/match.js","../node_modules/date-fns/locale/af.js"],"sourcesContent":["const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"minder as 'n sekonde\",\n other: \"minder as {{count}} sekondes\",\n },\n\n xSeconds: {\n one: \"1 sekonde\",\n other: \"{{count}} sekondes\",\n },\n\n halfAMinute: \"'n halwe minuut\",\n\n lessThanXMinutes: {\n one: \"minder as 'n minuut\",\n other: \"minder as {{count}} minute\",\n },\n\n xMinutes: {\n one: \"'n minuut\",\n other: \"{{count}} minute\",\n },\n\n aboutXHours: {\n one: \"ongeveer 1 uur\",\n other: \"ongeveer {{count}} ure\",\n },\n\n xHours: {\n one: \"1 uur\",\n other: \"{{count}} ure\",\n },\n\n xDays: {\n one: \"1 dag\",\n other: \"{{count}} dae\",\n },\n\n aboutXWeeks: {\n one: \"ongeveer 1 week\",\n other: \"ongeveer {{count}} weke\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weke\",\n },\n\n aboutXMonths: {\n one: \"ongeveer 1 maand\",\n other: \"ongeveer {{count}} maande\",\n },\n\n xMonths: {\n one: \"1 maand\",\n other: \"{{count}} maande\",\n },\n\n aboutXYears: {\n one: \"ongeveer 1 jaar\",\n other: \"ongeveer {{count}} jaar\",\n },\n\n xYears: {\n one: \"1 jaar\",\n other: \"{{count}} jaar\",\n },\n\n overXYears: {\n one: \"meer as 1 jaar\",\n other: \"meer as {{count}} jaar\",\n },\n\n almostXYears: {\n one: \"byna 1 jaar\",\n other: \"byna {{count}} jaar\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", String(count));\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"oor \" + result;\n } else {\n return result + \" gelede\";\n }\n }\n\n return result;\n};\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, d MMMM yyyy\",\n long: \"d MMMM yyyy\",\n medium: \"d MMM yyyy\",\n short: \"yyyy/MM/dd\",\n};\n\nconst timeFormats = {\n full: \"HH:mm:ss zzzz\",\n long: \"HH:mm:ss z\",\n medium: \"HH:mm:ss\",\n short: \"HH:mm\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'om' {{time}}\",\n long: \"{{date}} 'om' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'verlede' eeee 'om' p\",\n yesterday: \"'gister om' p\",\n today: \"'vandag om' p\",\n tomorrow: \"'môre om' p\",\n nextWeek: \"eeee 'om' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"vC\", \"nC\"],\n abbreviated: [\"vC\", \"nC\"],\n wide: [\"voor Christus\", \"na Christus\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"K1\", \"K2\", \"K3\", \"K4\"],\n wide: [\"1ste kwartaal\", \"2de kwartaal\", \"3de kwartaal\", \"4de kwartaal\"],\n};\n\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mrt\",\n \"Apr\",\n \"Mei\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Okt\",\n \"Nov\",\n \"Des\",\n ],\n\n wide: [\n \"Januarie\",\n \"Februarie\",\n \"Maart\",\n \"April\",\n \"Mei\",\n \"Junie\",\n \"Julie\",\n \"Augustus\",\n \"September\",\n \"Oktober\",\n \"November\",\n \"Desember\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"D\", \"W\", \"D\", \"V\", \"S\"],\n short: [\"So\", \"Ma\", \"Di\", \"Wo\", \"Do\", \"Vr\", \"Sa\"],\n abbreviated: [\"Son\", \"Maa\", \"Din\", \"Woe\", \"Don\", \"Vry\", \"Sat\"],\n wide: [\n \"Sondag\",\n \"Maandag\",\n \"Dinsdag\",\n \"Woensdag\",\n \"Donderdag\",\n \"Vrydag\",\n \"Saterdag\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"vm\",\n pm: \"nm\",\n midnight: \"middernag\",\n noon: \"middaguur\",\n morning: \"oggend\",\n afternoon: \"middag\",\n evening: \"laat middag\",\n night: \"aand\",\n },\n abbreviated: {\n am: \"vm\",\n pm: \"nm\",\n midnight: \"middernag\",\n noon: \"middaguur\",\n morning: \"oggend\",\n afternoon: \"middag\",\n evening: \"laat middag\",\n night: \"aand\",\n },\n wide: {\n am: \"vm\",\n pm: \"nm\",\n midnight: \"middernag\",\n noon: \"middaguur\",\n morning: \"oggend\",\n afternoon: \"middag\",\n evening: \"laat middag\",\n night: \"aand\",\n },\n};\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"vm\",\n pm: \"nm\",\n midnight: \"middernag\",\n noon: \"uur die middag\",\n morning: \"uur die oggend\",\n afternoon: \"uur die middag\",\n evening: \"uur die aand\",\n night: \"uur die aand\",\n },\n abbreviated: {\n am: \"vm\",\n pm: \"nm\",\n midnight: \"middernag\",\n noon: \"uur die middag\",\n morning: \"uur die oggend\",\n afternoon: \"uur die middag\",\n evening: \"uur die aand\",\n night: \"uur die aand\",\n },\n wide: {\n am: \"vm\",\n pm: \"nm\",\n midnight: \"middernag\",\n noon: \"uur die middag\",\n morning: \"uur die oggend\",\n afternoon: \"uur die middag\",\n evening: \"uur die aand\",\n night: \"uur die aand\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber) => {\n const number = Number(dirtyNumber);\n const rem100 = number % 100;\n if (rem100 < 20) {\n switch (rem100) {\n case 1:\n case 8:\n return number + \"ste\";\n default:\n return number + \"de\";\n }\n }\n return number + \"ste\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(ste|de)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^([vn]\\.? ?C\\.?)/,\n abbreviated: /^([vn]\\. ?C\\.?)/,\n wide: /^((voor|na) Christus)/,\n};\nconst parseEraPatterns = {\n any: [/^v/, /^n/],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^K[1234]/i,\n wide: /^[1234](st|d)e kwartaal/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(Jan|Feb|Mrt|Apr|Mei|Jun|Jul|Aug|Sep|Okt|Nov|Dec)\\.?/i,\n wide: /^(Januarie|Februarie|Maart|April|Mei|Junie|Julie|Augustus|September|Oktober|November|Desember)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^J/i,\n /^F/i,\n /^M/i,\n /^A/i,\n /^M/i,\n /^J/i,\n /^J/i,\n /^A/i,\n /^S/i,\n /^O/i,\n /^N/i,\n /^D/i,\n ],\n\n any: [\n /^Jan/i,\n /^Feb/i,\n /^Mrt/i,\n /^Apr/i,\n /^Mei/i,\n /^Jun/i,\n /^Jul/i,\n /^Aug/i,\n /^Sep/i,\n /^Okt/i,\n /^Nov/i,\n /^Dec/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smdwv]/i,\n short: /^(So|Ma|Di|Wo|Do|Vr|Sa)/i,\n abbreviated: /^(Son|Maa|Din|Woe|Don|Vry|Sat)/i,\n wide: /^(Sondag|Maandag|Dinsdag|Woensdag|Donderdag|Vrydag|Saterdag)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^S/i, /^M/i, /^D/i, /^W/i, /^D/i, /^V/i, /^S/i],\n any: [/^So/i, /^Ma/i, /^Di/i, /^Wo/i, /^Do/i, /^Vr/i, /^Sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n any: /^(vm|nm|middernag|(?:uur )?die (oggend|middag|aand))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^vm/i,\n pm: /^nm/i,\n midnight: /^middernag/i,\n noon: /^middaguur/i,\n morning: /oggend/i,\n afternoon: /middag/i,\n evening: /laat middag/i,\n night: /aand/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./af/_lib/formatDistance.js\";\nimport { formatLong } from \"./af/_lib/formatLong.js\";\nimport { formatRelative } from \"./af/_lib/formatRelative.js\";\nimport { localize } from \"./af/_lib/localize.js\";\nimport { match } from \"./af/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary Afrikaans locale.\n * @language Afrikaans\n * @iso-639-2 afr\n * @author Marnus Weststrate [@marnusw](https://github.com/marnusw)\n */\nexport const af = {\n code: \"af\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default af;\n"],"names":["formatDistanceLocale","formatDistance","token","count","options","result","tokenValue","dateFormats","timeFormats","dateTimeFormats","formatLong","buildFormatLongFn","formatRelativeLocale","formatRelative","_date","_baseDate","_options","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","dirtyNumber","number","rem100","localize","buildLocalizeFn","quarter","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","match","buildMatchPatternFn","value","buildMatchFn","index","af"],"mappings":";yJAAA,MAAMA,EAAuB,CAC3B,iBAAkB,CAChB,IAAK,uBACL,MAAO,8BACX,EAEE,SAAU,CACR,IAAK,YACL,MAAO,oBACX,EAEE,YAAa,kBAEb,iBAAkB,CAChB,IAAK,sBACL,MAAO,4BACX,EAEE,SAAU,CACR,IAAK,YACL,MAAO,kBACX,EAEE,YAAa,CACX,IAAK,iBACL,MAAO,wBACX,EAEE,OAAQ,CACN,IAAK,QACL,MAAO,eACX,EAEE,MAAO,CACL,IAAK,QACL,MAAO,eACX,EAEE,YAAa,CACX,IAAK,kBACL,MAAO,yBACX,EAEE,OAAQ,CACN,IAAK,SACL,MAAO,gBACX,EAEE,aAAc,CACZ,IAAK,mBACL,MAAO,2BACX,EAEE,QAAS,CACP,IAAK,UACL,MAAO,kBACX,EAEE,YAAa,CACX,IAAK,kBACL,MAAO,yBACX,EAEE,OAAQ,CACN,IAAK,SACL,MAAO,gBACX,EAEE,WAAY,CACV,IAAK,iBACL,MAAO,wBACX,EAEE,aAAc,CACZ,IAAK,cACL,MAAO,qBACX,CACA,EAEaC,EAAiB,CAACC,EAAOC,EAAOC,IAAY,CACvD,IAAIC,EAEJ,MAAMC,EAAaN,EAAqBE,CAAK,EAS7C,OARI,OAAOI,GAAe,SACxBD,EAASC,EACAH,IAAU,EACnBE,EAASC,EAAW,IAEpBD,EAASC,EAAW,MAAM,QAAQ,YAAa,OAAOH,CAAK,CAAC,EAG1DC,GAAS,UACPA,EAAQ,YAAcA,EAAQ,WAAa,EACtC,OAASC,EAETA,EAAS,UAIbA,CACT,EClGME,EAAc,CAClB,KAAM,oBACN,KAAM,cACN,OAAQ,aACR,MAAO,YACT,EAEMC,EAAc,CAClB,KAAM,gBACN,KAAM,aACN,OAAQ,WACR,MAAO,OACT,EAEMC,EAAkB,CACtB,KAAM,yBACN,KAAM,yBACN,OAAQ,qBACR,MAAO,oBACT,EAEaC,EAAa,CACxB,KAAMC,EAAkB,CACtB,QAASJ,EACT,aAAc,MAClB,CAAG,EAED,KAAMI,EAAkB,CACtB,QAASH,EACT,aAAc,MAClB,CAAG,EAED,SAAUG,EAAkB,CAC1B,QAASF,EACT,aAAc,MAClB,CAAG,CACH,ECtCMG,EAAuB,CAC3B,SAAU,wBACV,UAAW,gBACX,MAAO,gBACP,SAAU,cACV,SAAU,cACV,MAAO,GACT,EAEaC,EAAiB,CAACX,EAAOY,EAAOC,EAAWC,IACtDJ,EAAqBV,CAAK,ECRtBe,EAAY,CAChB,OAAQ,CAAC,KAAM,IAAI,EACnB,YAAa,CAAC,KAAM,IAAI,EACxB,KAAM,CAAC,gBAAiB,aAAa,CACvC,EAEMC,EAAgB,CACpB,OAAQ,CAAC,IAAK,IAAK,IAAK,GAAG,EAC3B,YAAa,CAAC,KAAM,KAAM,KAAM,IAAI,EACpC,KAAM,CAAC,gBAAiB,eAAgB,eAAgB,cAAc,CACxE,EAEMC,EAAc,CAClB,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EACnE,YAAa,CACX,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,EAEE,KAAM,CACJ,WACA,YACA,QACA,QACA,MACA,QACA,QACA,WACA,YACA,UACA,WACA,UACJ,CACA,EAEMC,EAAY,CAChB,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAC1C,MAAO,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAI,EAChD,YAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAC7D,KAAM,CACJ,SACA,UACA,UACA,WACA,YACA,SACA,UACJ,CACA,EAEMC,EAAkB,CACtB,OAAQ,CACN,GAAI,KACJ,GAAI,KACJ,SAAU,YACV,KAAM,YACN,QAAS,SACT,UAAW,SACX,QAAS,cACT,MAAO,MACX,EACE,YAAa,CACX,GAAI,KACJ,GAAI,KACJ,SAAU,YACV,KAAM,YACN,QAAS,SACT,UAAW,SACX,QAAS,cACT,MAAO,MACX,EACE,KAAM,CACJ,GAAI,KACJ,GAAI,KACJ,SAAU,YACV,KAAM,YACN,QAAS,SACT,UAAW,SACX,QAAS,cACT,MAAO,MACX,CACA,EACMC,EAA4B,CAChC,OAAQ,CACN,GAAI,KACJ,GAAI,KACJ,SAAU,YACV,KAAM,iBACN,QAAS,iBACT,UAAW,iBACX,QAAS,eACT,MAAO,cACX,EACE,YAAa,CACX,GAAI,KACJ,GAAI,KACJ,SAAU,YACV,KAAM,iBACN,QAAS,iBACT,UAAW,iBACX,QAAS,eACT,MAAO,cACX,EACE,KAAM,CACJ,GAAI,KACJ,GAAI,KACJ,SAAU,YACV,KAAM,iBACN,QAAS,iBACT,UAAW,iBACX,QAAS,eACT,MAAO,cACX,CACA,EAEMC,EAAiBC,GAAgB,CACrC,MAAMC,EAAS,OAAOD,CAAW,EAC3BE,EAASD,EAAS,IACxB,GAAIC,EAAS,GACX,OAAQA,EAAM,CACZ,IAAK,GACL,IAAK,GACH,OAAOD,EAAS,MAClB,QACE,OAAOA,EAAS,IACxB,CAEE,OAAOA,EAAS,KAClB,EAEaE,EAAW,CACtB,cAAAJ,EAEA,IAAKK,EAAgB,CACnB,OAAQX,EACR,aAAc,MAClB,CAAG,EAED,QAASW,EAAgB,CACvB,OAAQV,EACR,aAAc,OACd,iBAAmBW,GAAYA,EAAU,CAC7C,CAAG,EAED,MAAOD,EAAgB,CACrB,OAAQT,EACR,aAAc,MAClB,CAAG,EAED,IAAKS,EAAgB,CACnB,OAAQR,EACR,aAAc,MAClB,CAAG,EAED,UAAWQ,EAAgB,CACzB,OAAQP,EACR,aAAc,OACd,iBAAkBC,EAClB,uBAAwB,MAC5B,CAAG,CACH,ECzKMQ,EAA4B,mBAC5BC,EAA4B,OAE5BC,EAAmB,CACvB,OAAQ,mBACR,YAAa,kBACb,KAAM,uBACR,EACMC,EAAmB,CACvB,IAAK,CAAC,KAAM,IAAI,CAClB,EAEMC,EAAuB,CAC3B,OAAQ,WACR,YAAa,YACb,KAAM,0BACR,EACMC,EAAuB,CAC3B,IAAK,CAAC,KAAM,KAAM,KAAM,IAAI,CAC9B,EAEMC,EAAqB,CACzB,OAAQ,eACR,YAAa,yDACb,KAAM,iGACR,EACMC,EAAqB,CACzB,OAAQ,CACN,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,EAEE,IAAK,CACH,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACJ,CACA,EAEMC,EAAmB,CACvB,OAAQ,YACR,MAAO,2BACP,YAAa,kCACb,KAAM,+DACR,EACMC,EAAmB,CACvB,OAAQ,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EACxD,IAAK,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,MAAM,CAC9D,EAEMC,EAAyB,CAC7B,IAAK,uDACP,EACMC,EAAyB,CAC7B,IAAK,CACH,GAAI,OACJ,GAAI,OACJ,SAAU,cACV,KAAM,cACN,QAAS,UACT,UAAW,UACX,QAAS,eACT,MAAO,OACX,CACA,EAEaC,EAAQ,CACnB,cAAeC,EAAoB,CACjC,aAAcb,EACd,aAAcC,EACd,cAAgBa,GAAU,SAASA,EAAO,EAAE,CAChD,CAAG,EAED,IAAKC,EAAa,CAChB,cAAeb,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,QAASY,EAAa,CACpB,cAAeX,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,MACnB,cAAgBW,GAAUA,EAAQ,CACtC,CAAG,EAED,MAAOD,EAAa,CAClB,cAAeT,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,IAAKQ,EAAa,CAChB,cAAeP,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,UAAWM,EAAa,CACtB,cAAeL,EACf,kBAAmB,MACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,CACH,ECrHaM,EAAK,CAChB,KAAM,KACN,eAAgB9C,EAChB,WAAYS,EACZ,eAAgBG,EAChB,SAAUc,EACV,MAAOe,EACP,QAAS,CACP,aAAc,EACd,sBAAuB,CAC3B,CACA","x_google_ignoreList":[0,1,2,3,4,5]} \ No newline at end of file diff --git a/js/af-BXiFDzzM.chunk.mjs.map.license b/js/af-BXiFDzzM.chunk.mjs.map.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/af-BXiFDzzM.chunk.mjs.map.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/ar-3qmvQ7om.chunk.mjs b/js/ar-3qmvQ7om.chunk.mjs new file mode 100644 index 00000000..71a8847d --- /dev/null +++ b/js/ar-3qmvQ7om.chunk.mjs @@ -0,0 +1,3 @@ +/*! third party licenses: js/vendor.LICENSE.txt */ +import{b as r,c as o,d as a,e as A}from"./index-Cr1DLTt7.chunk.mjs";import"./user_migration-personalSettings.mjs";import"./be-tarask-CzbVxLq7.chunk.mjs";const d={lessThanXSeconds:{one:"أقل من ثانية",two:"أقل من ثانيتين",threeToTen:"أقل من {{count}} ثواني",other:"أقل من {{count}} ثانية"},xSeconds:{one:"ثانية واحدة",two:"ثانيتان",threeToTen:"{{count}} ثواني",other:"{{count}} ثانية"},halfAMinute:"نصف دقيقة",lessThanXMinutes:{one:"أقل من دقيقة",two:"أقل من دقيقتين",threeToTen:"أقل من {{count}} دقائق",other:"أقل من {{count}} دقيقة"},xMinutes:{one:"دقيقة واحدة",two:"دقيقتان",threeToTen:"{{count}} دقائق",other:"{{count}} دقيقة"},aboutXHours:{one:"ساعة واحدة تقريباً",two:"ساعتين تقريبا",threeToTen:"{{count}} ساعات تقريباً",other:"{{count}} ساعة تقريباً"},xHours:{one:"ساعة واحدة",two:"ساعتان",threeToTen:"{{count}} ساعات",other:"{{count}} ساعة"},xDays:{one:"يوم واحد",two:"يومان",threeToTen:"{{count}} أيام",other:"{{count}} يوم"},aboutXWeeks:{one:"أسبوع واحد تقريبا",two:"أسبوعين تقريبا",threeToTen:"{{count}} أسابيع تقريبا",other:"{{count}} أسبوعا تقريبا"},xWeeks:{one:"أسبوع واحد",two:"أسبوعان",threeToTen:"{{count}} أسابيع",other:"{{count}} أسبوعا"},aboutXMonths:{one:"شهر واحد تقريباً",two:"شهرين تقريبا",threeToTen:"{{count}} أشهر تقريبا",other:"{{count}} شهرا تقريباً"},xMonths:{one:"شهر واحد",two:"شهران",threeToTen:"{{count}} أشهر",other:"{{count}} شهرا"},aboutXYears:{one:"سنة واحدة تقريباً",two:"سنتين تقريبا",threeToTen:"{{count}} سنوات تقريباً",other:"{{count}} سنة تقريباً"},xYears:{one:"سنة واحد",two:"سنتان",threeToTen:"{{count}} سنوات",other:"{{count}} سنة"},overXYears:{one:"أكثر من سنة",two:"أكثر من سنتين",threeToTen:"أكثر من {{count}} سنوات",other:"أكثر من {{count}} سنة"},almostXYears:{one:"ما يقارب سنة واحدة",two:"ما يقارب سنتين",threeToTen:"ما يقارب {{count}} سنوات",other:"ما يقارب {{count}} سنة"}},h=(u,n,i)=>{const t=d[u];let e;return typeof t=="string"?e=t:n===1?e=t.one:n===2?e=t.two:n<=10?e=t.threeToTen.replace("{{count}}",String(n)):e=t.other.replace("{{count}}",String(n)),i?.addSuffix?i.comparison&&i.comparison>0?"خلال "+e:"منذ "+e:e},s={full:"EEEE، do MMMM y",long:"do MMMM y",medium:"d MMM y",short:"dd/MM/yyyy"},m={full:"HH:mm:ss",long:"HH:mm:ss",medium:"HH:mm:ss",short:"HH:mm"},l={full:"{{date}} 'عند الساعة' {{time}}",long:"{{date}} 'عند الساعة' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},c={date:r({formats:s,defaultWidth:"full"}),time:r({formats:m,defaultWidth:"full"}),dateTime:r({formats:l,defaultWidth:"full"})},w={lastWeek:"eeee 'الماضي عند الساعة' p",yesterday:"'الأمس عند الساعة' p",today:"'اليوم عند الساعة' p",tomorrow:"'غدا عند الساعة' p",nextWeek:"eeee 'القادم عند الساعة' p",other:"P"},F=u=>w[u],f={narrow:["ق","ب"],abbreviated:["ق.م.","ب.م."],wide:["قبل الميلاد","بعد الميلاد"]},g={narrow:["1","2","3","4"],abbreviated:["ر1","ر2","ر3","ر4"],wide:["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"]},T={narrow:["ي","ف","م","أ","م","ي","ي","أ","س","أ","ن","د"],abbreviated:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],wide:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"]},B={narrow:["ح","ن","ث","ر","خ","ج","س"],short:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],abbreviated:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],wide:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"]},b={narrow:{am:"ص",pm:"م",morning:"الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"المساء",night:"الليل",midnight:"منتصف الليل"},abbreviated:{am:"ص",pm:"م",morning:"الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"المساء",night:"الليل",midnight:"منتصف الليل"},wide:{am:"ص",pm:"م",morning:"الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"المساء",night:"الليل",midnight:"منتصف الليل"}},p={narrow:{am:"ص",pm:"م",morning:"في الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"في المساء",night:"في الليل",midnight:"منتصف الليل"},abbreviated:{am:"ص",pm:"م",morning:"في الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"في المساء",night:"في الليل",midnight:"منتصف الليل"},wide:{am:"ص",pm:"م",morning:"في الصباح",noon:"الظهر",afternoon:"بعد الظهر",evening:"في المساء",night:"في الليل",midnight:"منتصف الليل"}},y=u=>String(u),v={ordinalNumber:y,era:o({values:f,defaultWidth:"wide"}),quarter:o({values:g,defaultWidth:"wide",argumentCallback:u=>u-1}),month:o({values:T,defaultWidth:"wide"}),day:o({values:B,defaultWidth:"wide"}),dayPeriod:o({values:b,defaultWidth:"wide",formattingValues:p,defaultFormattingWidth:"wide"})},D=/^(\d+)(th|st|nd|rd)?/i,W=/\d+/i,M={narrow:/[قب]/,abbreviated:/[قب]\.م\./,wide:/(قبل|بعد) الميلاد/},P={any:[/قبل/,/بعد/]},x={narrow:/^[1234]/i,abbreviated:/ر[1234]/,wide:/الربع (الأول|الثاني|الثالث|الرابع)/},H={any:[/1/i,/2/i,/3/i,/4/i]},k={narrow:/^[أيفمسند]/,abbreviated:/^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/,wide:/^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/},C={narrow:[/^ي/i,/^ف/i,/^م/i,/^أ/i,/^م/i,/^ي/i,/^ي/i,/^أ/i,/^س/i,/^أ/i,/^ن/i,/^د/i],any:[/^يناير/i,/^فبراير/i,/^مارس/i,/^أبريل/i,/^مايو/i,/^يونيو/i,/^يوليو/i,/^أغسطس/i,/^سبتمبر/i,/^أكتوبر/i,/^نوفمبر/i,/^ديسمبر/i]},E={narrow:/^[حنثرخجس]/i,short:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,abbreviated:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,wide:/^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i},X={narrow:[/^ح/i,/^ن/i,/^ث/i,/^ر/i,/^خ/i,/^ج/i,/^س/i],wide:[/^الأحد/i,/^الاثنين/i,/^الثلاثاء/i,/^الأربعاء/i,/^الخميس/i,/^الجمعة/i,/^السبت/i],any:[/^أح/i,/^اث/i,/^ث/i,/^أر/i,/^خ/i,/^ج/i,/^س/i]},S={narrow:/^(ص|م|منتصف الليل|الظهر|بعد الظهر|في الصباح|في المساء|في الليل)/,any:/^(ص|م|منتصف الليل|الظهر|بعد الظهر|في الصباح|في المساء|في الليل)/},Y={any:{am:/^ص/,pm:/^م/,midnight:/منتصف الليل/,noon:/الظهر/,afternoon:/بعد الظهر/,morning:/في الصباح/,evening:/في المساء/,night:/في الليل/}},q={ordinalNumber:A({matchPattern:D,parsePattern:W,valueCallback:u=>parseInt(u,10)}),era:a({matchPatterns:M,defaultMatchWidth:"wide",parsePatterns:P,defaultParseWidth:"any"}),quarter:a({matchPatterns:x,defaultMatchWidth:"wide",parsePatterns:H,defaultParseWidth:"any",valueCallback:u=>u+1}),month:a({matchPatterns:k,defaultMatchWidth:"wide",parsePatterns:C,defaultParseWidth:"any"}),day:a({matchPatterns:E,defaultMatchWidth:"wide",parsePatterns:X,defaultParseWidth:"any"}),dayPeriod:a({matchPatterns:S,defaultMatchWidth:"any",parsePatterns:Y,defaultParseWidth:"any"})},O={code:"ar",formatDistance:h,formatLong:c,formatRelative:F,localize:v,match:q,options:{weekStartsOn:6,firstWeekContainsDate:1}};export{O as ar}; +//# sourceMappingURL=ar-3qmvQ7om.chunk.mjs.map diff --git a/js/ar-3qmvQ7om.chunk.mjs.license b/js/ar-3qmvQ7om.chunk.mjs.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/ar-3qmvQ7om.chunk.mjs.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/ar-3qmvQ7om.chunk.mjs.map b/js/ar-3qmvQ7om.chunk.mjs.map new file mode 100644 index 00000000..601a079b --- /dev/null +++ b/js/ar-3qmvQ7om.chunk.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"ar-3qmvQ7om.chunk.mjs","sources":["../node_modules/date-fns/locale/ar/_lib/formatDistance.js","../node_modules/date-fns/locale/ar/_lib/formatLong.js","../node_modules/date-fns/locale/ar/_lib/formatRelative.js","../node_modules/date-fns/locale/ar/_lib/localize.js","../node_modules/date-fns/locale/ar/_lib/match.js","../node_modules/date-fns/locale/ar.js"],"sourcesContent":["const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"أقل من ثانية\",\n two: \"أقل من ثانيتين\",\n threeToTen: \"أقل من {{count}} ثواني\",\n other: \"أقل من {{count}} ثانية\",\n },\n\n xSeconds: {\n one: \"ثانية واحدة\",\n two: \"ثانيتان\",\n threeToTen: \"{{count}} ثواني\",\n other: \"{{count}} ثانية\",\n },\n\n halfAMinute: \"نصف دقيقة\",\n\n lessThanXMinutes: {\n one: \"أقل من دقيقة\",\n two: \"أقل من دقيقتين\",\n threeToTen: \"أقل من {{count}} دقائق\",\n other: \"أقل من {{count}} دقيقة\",\n },\n\n xMinutes: {\n one: \"دقيقة واحدة\",\n two: \"دقيقتان\",\n threeToTen: \"{{count}} دقائق\",\n other: \"{{count}} دقيقة\",\n },\n\n aboutXHours: {\n one: \"ساعة واحدة تقريباً\",\n two: \"ساعتين تقريبا\",\n threeToTen: \"{{count}} ساعات تقريباً\",\n other: \"{{count}} ساعة تقريباً\",\n },\n\n xHours: {\n one: \"ساعة واحدة\",\n two: \"ساعتان\",\n threeToTen: \"{{count}} ساعات\",\n other: \"{{count}} ساعة\",\n },\n\n xDays: {\n one: \"يوم واحد\",\n two: \"يومان\",\n threeToTen: \"{{count}} أيام\",\n other: \"{{count}} يوم\",\n },\n\n aboutXWeeks: {\n one: \"أسبوع واحد تقريبا\",\n two: \"أسبوعين تقريبا\",\n threeToTen: \"{{count}} أسابيع تقريبا\",\n other: \"{{count}} أسبوعا تقريبا\",\n },\n\n xWeeks: {\n one: \"أسبوع واحد\",\n two: \"أسبوعان\",\n threeToTen: \"{{count}} أسابيع\",\n other: \"{{count}} أسبوعا\",\n },\n\n aboutXMonths: {\n one: \"شهر واحد تقريباً\",\n two: \"شهرين تقريبا\",\n threeToTen: \"{{count}} أشهر تقريبا\",\n other: \"{{count}} شهرا تقريباً\",\n },\n\n xMonths: {\n one: \"شهر واحد\",\n two: \"شهران\",\n threeToTen: \"{{count}} أشهر\",\n other: \"{{count}} شهرا\",\n },\n\n aboutXYears: {\n one: \"سنة واحدة تقريباً\",\n two: \"سنتين تقريبا\",\n threeToTen: \"{{count}} سنوات تقريباً\",\n other: \"{{count}} سنة تقريباً\",\n },\n\n xYears: {\n one: \"سنة واحد\",\n two: \"سنتان\",\n threeToTen: \"{{count}} سنوات\",\n other: \"{{count}} سنة\",\n },\n\n overXYears: {\n one: \"أكثر من سنة\",\n two: \"أكثر من سنتين\",\n threeToTen: \"أكثر من {{count}} سنوات\",\n other: \"أكثر من {{count}} سنة\",\n },\n\n almostXYears: {\n one: \"ما يقارب سنة واحدة\",\n two: \"ما يقارب سنتين\",\n threeToTen: \"ما يقارب {{count}} سنوات\",\n other: \"ما يقارب {{count}} سنة\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n const usageGroup = formatDistanceLocale[token];\n let result;\n if (typeof usageGroup === \"string\") {\n result = usageGroup;\n } else if (count === 1) {\n result = usageGroup.one;\n } else if (count === 2) {\n result = usageGroup.two;\n } else if (count <= 10) {\n result = usageGroup.threeToTen.replace(\"{{count}}\", String(count));\n } else {\n result = usageGroup.other.replace(\"{{count}}\", String(count));\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"خلال \" + result;\n } else {\n return \"منذ \" + result;\n }\n }\n\n return result;\n};\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE، do MMMM y\",\n long: \"do MMMM y\",\n medium: \"d MMM y\",\n short: \"dd/MM/yyyy\",\n};\n\nconst timeFormats = {\n full: \"HH:mm:ss\",\n long: \"HH:mm:ss\",\n medium: \"HH:mm:ss\",\n short: \"HH:mm\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'عند الساعة' {{time}}\",\n long: \"{{date}} 'عند الساعة' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"eeee 'الماضي عند الساعة' p\",\n yesterday: \"'الأمس عند الساعة' p\",\n today: \"'اليوم عند الساعة' p\",\n tomorrow: \"'غدا عند الساعة' p\",\n nextWeek: \"eeee 'القادم عند الساعة' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token) => formatRelativeLocale[token];\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"ق\", \"ب\"],\n abbreviated: [\"ق.م.\", \"ب.م.\"],\n wide: [\"قبل الميلاد\", \"بعد الميلاد\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"ر1\", \"ر2\", \"ر3\", \"ر4\"],\n wide: [\"الربع الأول\", \"الربع الثاني\", \"الربع الثالث\", \"الربع الرابع\"],\n};\n\nconst monthValues = {\n narrow: [\"ي\", \"ف\", \"م\", \"أ\", \"م\", \"ي\", \"ي\", \"أ\", \"س\", \"أ\", \"ن\", \"د\"],\n abbreviated: [\n \"يناير\",\n \"فبراير\",\n \"مارس\",\n \"أبريل\",\n \"مايو\",\n \"يونيو\",\n \"يوليو\",\n \"أغسطس\",\n \"سبتمبر\",\n \"أكتوبر\",\n \"نوفمبر\",\n \"ديسمبر\",\n ],\n\n wide: [\n \"يناير\",\n \"فبراير\",\n \"مارس\",\n \"أبريل\",\n \"مايو\",\n \"يونيو\",\n \"يوليو\",\n \"أغسطس\",\n \"سبتمبر\",\n \"أكتوبر\",\n \"نوفمبر\",\n \"ديسمبر\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"ح\", \"ن\", \"ث\", \"ر\", \"خ\", \"ج\", \"س\"],\n short: [\"أحد\", \"اثنين\", \"ثلاثاء\", \"أربعاء\", \"خميس\", \"جمعة\", \"سبت\"],\n abbreviated: [\"أحد\", \"اثنين\", \"ثلاثاء\", \"أربعاء\", \"خميس\", \"جمعة\", \"سبت\"],\n\n wide: [\n \"الأحد\",\n \"الاثنين\",\n \"الثلاثاء\",\n \"الأربعاء\",\n \"الخميس\",\n \"الجمعة\",\n \"السبت\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"ص\",\n pm: \"م\",\n morning: \"الصباح\",\n noon: \"الظهر\",\n afternoon: \"بعد الظهر\",\n evening: \"المساء\",\n night: \"الليل\",\n midnight: \"منتصف الليل\",\n },\n abbreviated: {\n am: \"ص\",\n pm: \"م\",\n morning: \"الصباح\",\n noon: \"الظهر\",\n afternoon: \"بعد الظهر\",\n evening: \"المساء\",\n night: \"الليل\",\n midnight: \"منتصف الليل\",\n },\n wide: {\n am: \"ص\",\n pm: \"م\",\n morning: \"الصباح\",\n noon: \"الظهر\",\n afternoon: \"بعد الظهر\",\n evening: \"المساء\",\n night: \"الليل\",\n midnight: \"منتصف الليل\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"ص\",\n pm: \"م\",\n morning: \"في الصباح\",\n noon: \"الظهر\",\n afternoon: \"بعد الظهر\",\n evening: \"في المساء\",\n night: \"في الليل\",\n midnight: \"منتصف الليل\",\n },\n abbreviated: {\n am: \"ص\",\n pm: \"م\",\n morning: \"في الصباح\",\n noon: \"الظهر\",\n afternoon: \"بعد الظهر\",\n evening: \"في المساء\",\n night: \"في الليل\",\n midnight: \"منتصف الليل\",\n },\n wide: {\n am: \"ص\",\n pm: \"م\",\n morning: \"في الصباح\",\n noon: \"الظهر\",\n afternoon: \"بعد الظهر\",\n evening: \"في المساء\",\n night: \"في الليل\",\n midnight: \"منتصف الليل\",\n },\n};\n\nconst ordinalNumber = (num) => String(num);\n\nexport const localize = {\n ordinalNumber: ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\nimport { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /[قب]/,\n abbreviated: /[قب]\\.م\\./,\n wide: /(قبل|بعد) الميلاد/,\n};\nconst parseEraPatterns = {\n any: [/قبل/, /بعد/],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /ر[1234]/,\n wide: /الربع (الأول|الثاني|الثالث|الرابع)/,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[أيفمسند]/,\n abbreviated:\n /^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/,\n wide: /^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^ي/i,\n /^ف/i,\n /^م/i,\n /^أ/i,\n /^م/i,\n /^ي/i,\n /^ي/i,\n /^أ/i,\n /^س/i,\n /^أ/i,\n /^ن/i,\n /^د/i,\n ],\n\n any: [\n /^يناير/i,\n /^فبراير/i,\n /^مارس/i,\n /^أبريل/i,\n /^مايو/i,\n /^يونيو/i,\n /^يوليو/i,\n /^أغسطس/i,\n /^سبتمبر/i,\n /^أكتوبر/i,\n /^نوفمبر/i,\n /^ديسمبر/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[حنثرخجس]/i,\n short: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,\n abbreviated: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,\n wide: /^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^ح/i, /^ن/i, /^ث/i, /^ر/i, /^خ/i, /^ج/i, /^س/i],\n wide: [\n /^الأحد/i,\n /^الاثنين/i,\n /^الثلاثاء/i,\n /^الأربعاء/i,\n /^الخميس/i,\n /^الجمعة/i,\n /^السبت/i,\n ],\n\n any: [/^أح/i, /^اث/i, /^ث/i, /^أر/i, /^خ/i, /^ج/i, /^س/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(ص|م|منتصف الليل|الظهر|بعد الظهر|في الصباح|في المساء|في الليل)/,\n any: /^(ص|م|منتصف الليل|الظهر|بعد الظهر|في الصباح|في المساء|في الليل)/,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^ص/,\n pm: /^م/,\n midnight: /منتصف الليل/,\n noon: /الظهر/,\n afternoon: /بعد الظهر/,\n morning: /في الصباح/,\n evening: /في المساء/,\n night: /في الليل/,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./ar/_lib/formatDistance.js\";\nimport { formatLong } from \"./ar/_lib/formatLong.js\";\nimport { formatRelative } from \"./ar/_lib/formatRelative.js\";\nimport { localize } from \"./ar/_lib/localize.js\";\nimport { match } from \"./ar/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary Arabic locale (Modern Standard Arabic - Al-fussha).\n * @language Modern Standard Arabic\n * @iso-639-2 ara\n * @author Abdallah Hassan [@AbdallahAHO](https://github.com/AbdallahAHO)\n * @author Koussay Haj Kacem [@essana3](https://github.com/essana3)\n */\nexport const ar = {\n code: \"ar\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 6 /* Saturday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default ar;\n"],"names":["formatDistanceLocale","formatDistance","token","count","options","usageGroup","result","dateFormats","timeFormats","dateTimeFormats","formatLong","buildFormatLongFn","formatRelativeLocale","formatRelative","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","num","localize","buildLocalizeFn","quarter","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","match","buildMatchPatternFn","value","buildMatchFn","index","ar"],"mappings":";yJAAA,MAAMA,EAAuB,CAC3B,iBAAkB,CAChB,IAAK,eACL,IAAK,iBACL,WAAY,yBACZ,MAAO,wBACX,EAEE,SAAU,CACR,IAAK,cACL,IAAK,UACL,WAAY,kBACZ,MAAO,iBACX,EAEE,YAAa,YAEb,iBAAkB,CAChB,IAAK,eACL,IAAK,iBACL,WAAY,yBACZ,MAAO,wBACX,EAEE,SAAU,CACR,IAAK,cACL,IAAK,UACL,WAAY,kBACZ,MAAO,iBACX,EAEE,YAAa,CACX,IAAK,qBACL,IAAK,gBACL,WAAY,0BACZ,MAAO,wBACX,EAEE,OAAQ,CACN,IAAK,aACL,IAAK,SACL,WAAY,kBACZ,MAAO,gBACX,EAEE,MAAO,CACL,IAAK,WACL,IAAK,QACL,WAAY,iBACZ,MAAO,eACX,EAEE,YAAa,CACX,IAAK,oBACL,IAAK,iBACL,WAAY,0BACZ,MAAO,yBACX,EAEE,OAAQ,CACN,IAAK,aACL,IAAK,UACL,WAAY,mBACZ,MAAO,kBACX,EAEE,aAAc,CACZ,IAAK,mBACL,IAAK,eACL,WAAY,wBACZ,MAAO,wBACX,EAEE,QAAS,CACP,IAAK,WACL,IAAK,QACL,WAAY,iBACZ,MAAO,gBACX,EAEE,YAAa,CACX,IAAK,oBACL,IAAK,eACL,WAAY,0BACZ,MAAO,uBACX,EAEE,OAAQ,CACN,IAAK,WACL,IAAK,QACL,WAAY,kBACZ,MAAO,eACX,EAEE,WAAY,CACV,IAAK,cACL,IAAK,gBACL,WAAY,0BACZ,MAAO,uBACX,EAEE,aAAc,CACZ,IAAK,qBACL,IAAK,iBACL,WAAY,2BACZ,MAAO,wBACX,CACA,EAEaC,EAAiB,CAACC,EAAOC,EAAOC,IAAY,CACvD,MAAMC,EAAaL,EAAqBE,CAAK,EAC7C,IAAII,EAaJ,OAZI,OAAOD,GAAe,SACxBC,EAASD,EACAF,IAAU,EACnBG,EAASD,EAAW,IACXF,IAAU,EACnBG,EAASD,EAAW,IACXF,GAAS,GAClBG,EAASD,EAAW,WAAW,QAAQ,YAAa,OAAOF,CAAK,CAAC,EAEjEG,EAASD,EAAW,MAAM,QAAQ,YAAa,OAAOF,CAAK,CAAC,EAG1DC,GAAS,UACPA,EAAQ,YAAcA,EAAQ,WAAa,EACtC,QAAUE,EAEV,OAASA,EAIbA,CACT,ECnIMC,EAAc,CAClB,KAAM,kBACN,KAAM,YACN,OAAQ,UACR,MAAO,YACT,EAEMC,EAAc,CAClB,KAAM,WACN,KAAM,WACN,OAAQ,WACR,MAAO,OACT,EAEMC,EAAkB,CACtB,KAAM,iCACN,KAAM,iCACN,OAAQ,qBACR,MAAO,oBACT,EAEaC,EAAa,CACxB,KAAMC,EAAkB,CACtB,QAASJ,EACT,aAAc,MAClB,CAAG,EAED,KAAMI,EAAkB,CACtB,QAASH,EACT,aAAc,MAClB,CAAG,EAED,SAAUG,EAAkB,CAC1B,QAASF,EACT,aAAc,MAClB,CAAG,CACH,ECtCMG,EAAuB,CAC3B,SAAU,6BACV,UAAW,uBACX,MAAO,uBACP,SAAU,qBACV,SAAU,6BACV,MAAO,GACT,EAEaC,EAAkBX,GAAUU,EAAqBV,CAAK,ECP7DY,EAAY,CAChB,OAAQ,CAAC,IAAK,GAAG,EACjB,YAAa,CAAC,OAAQ,MAAM,EAC5B,KAAM,CAAC,cAAe,aAAa,CACrC,EAEMC,EAAgB,CACpB,OAAQ,CAAC,IAAK,IAAK,IAAK,GAAG,EAC3B,YAAa,CAAC,KAAM,KAAM,KAAM,IAAI,EACpC,KAAM,CAAC,cAAe,eAAgB,eAAgB,cAAc,CACtE,EAEMC,EAAc,CAClB,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EACnE,YAAa,CACX,QACA,SACA,OACA,QACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,QACJ,EAEE,KAAM,CACJ,QACA,SACA,OACA,QACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,QACJ,CACA,EAEMC,EAAY,CAChB,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAC1C,MAAO,CAAC,MAAO,QAAS,SAAU,SAAU,OAAQ,OAAQ,KAAK,EACjE,YAAa,CAAC,MAAO,QAAS,SAAU,SAAU,OAAQ,OAAQ,KAAK,EAEvE,KAAM,CACJ,QACA,UACA,WACA,WACA,SACA,SACA,OACJ,CACA,EAEMC,EAAkB,CACtB,OAAQ,CACN,GAAI,IACJ,GAAI,IACJ,QAAS,SACT,KAAM,QACN,UAAW,YACX,QAAS,SACT,MAAO,QACP,SAAU,aACd,EACE,YAAa,CACX,GAAI,IACJ,GAAI,IACJ,QAAS,SACT,KAAM,QACN,UAAW,YACX,QAAS,SACT,MAAO,QACP,SAAU,aACd,EACE,KAAM,CACJ,GAAI,IACJ,GAAI,IACJ,QAAS,SACT,KAAM,QACN,UAAW,YACX,QAAS,SACT,MAAO,QACP,SAAU,aACd,CACA,EAEMC,EAA4B,CAChC,OAAQ,CACN,GAAI,IACJ,GAAI,IACJ,QAAS,YACT,KAAM,QACN,UAAW,YACX,QAAS,YACT,MAAO,WACP,SAAU,aACd,EACE,YAAa,CACX,GAAI,IACJ,GAAI,IACJ,QAAS,YACT,KAAM,QACN,UAAW,YACX,QAAS,YACT,MAAO,WACP,SAAU,aACd,EACE,KAAM,CACJ,GAAI,IACJ,GAAI,IACJ,QAAS,YACT,KAAM,QACN,UAAW,YACX,QAAS,YACT,MAAO,WACP,SAAU,aACd,CACA,EAEMC,EAAiBC,GAAQ,OAAOA,CAAG,EAE5BC,EAAW,CACtB,cAAeF,EAEf,IAAKG,EAAgB,CACnB,OAAQT,EACR,aAAc,MAClB,CAAG,EAED,QAASS,EAAgB,CACvB,OAAQR,EACR,aAAc,OACd,iBAAmBS,GAAYA,EAAU,CAC7C,CAAG,EAED,MAAOD,EAAgB,CACrB,OAAQP,EACR,aAAc,MAClB,CAAG,EAED,IAAKO,EAAgB,CACnB,OAAQN,EACR,aAAc,MAClB,CAAG,EAED,UAAWM,EAAgB,CACzB,OAAQL,EACR,aAAc,OACd,iBAAkBC,EAClB,uBAAwB,MAC5B,CAAG,CACH,EC9JMM,EAA4B,wBAC5BC,EAA4B,OAE5BC,EAAmB,CACvB,OAAQ,OACR,YAAa,YACb,KAAM,mBACR,EACMC,EAAmB,CACvB,IAAK,CAAC,MAAO,KAAK,CACpB,EAEMC,EAAuB,CAC3B,OAAQ,WACR,YAAa,UACb,KAAM,oCACR,EACMC,EAAuB,CAC3B,IAAK,CAAC,KAAM,KAAM,KAAM,IAAI,CAC9B,EAEMC,EAAqB,CACzB,OAAQ,aACR,YACE,gFACF,KAAM,+EACR,EACMC,EAAqB,CACzB,OAAQ,CACN,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,EAEE,IAAK,CACH,UACA,WACA,SACA,UACA,SACA,UACA,UACA,UACA,WACA,WACA,WACA,UACJ,CACA,EAEMC,EAAmB,CACvB,OAAQ,cACR,MAAO,4CACP,YAAa,4CACb,KAAM,yDACR,EACMC,EAAmB,CACvB,OAAQ,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EACxD,KAAM,CACJ,UACA,YACA,aACA,aACA,WACA,WACA,SACJ,EAEE,IAAK,CAAC,OAAQ,OAAQ,MAAO,OAAQ,MAAO,MAAO,KAAK,CAC1D,EAEMC,EAAyB,CAC7B,OAAQ,kEACR,IAAK,iEACP,EACMC,EAAyB,CAC7B,IAAK,CACH,GAAI,KACJ,GAAI,KACJ,SAAU,cACV,KAAM,QACN,UAAW,YACX,QAAS,YACT,QAAS,YACT,MAAO,UACX,CACA,EAEaC,EAAQ,CACnB,cAAeC,EAAoB,CACjC,aAAcb,EACd,aAAcC,EACd,cAAgBa,GAAU,SAASA,EAAO,EAAE,CAChD,CAAG,EAED,IAAKC,EAAa,CAChB,cAAeb,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,QAASY,EAAa,CACpB,cAAeX,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,MACnB,cAAgBW,GAAUA,EAAQ,CACtC,CAAG,EAED,MAAOD,EAAa,CAClB,cAAeT,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,IAAKQ,EAAa,CAChB,cAAeP,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,UAAWM,EAAa,CACtB,cAAeL,EACf,kBAAmB,MACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,CACH,EChIaM,EAAK,CAChB,KAAM,KACN,eAAgBzC,EAChB,WAAYS,EACZ,eAAgBG,EAChB,SAAUS,EACV,MAAOe,EACP,QAAS,CACP,aAAc,EACd,sBAAuB,CAC3B,CACA","x_google_ignoreList":[0,1,2,3,4,5]} \ No newline at end of file diff --git a/js/ar-3qmvQ7om.chunk.mjs.map.license b/js/ar-3qmvQ7om.chunk.mjs.map.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/ar-3qmvQ7om.chunk.mjs.map.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/ar-DZ-XF744e4Z.chunk.mjs b/js/ar-DZ-XF744e4Z.chunk.mjs new file mode 100644 index 00000000..4246e3a0 --- /dev/null +++ b/js/ar-DZ-XF744e4Z.chunk.mjs @@ -0,0 +1,3 @@ +/*! third party licenses: js/vendor.LICENSE.txt */ +import{b as r,c as i,d as a,e as A}from"./index-Cr1DLTt7.chunk.mjs";import"./user_migration-personalSettings.mjs";import"./be-tarask-CzbVxLq7.chunk.mjs";const d={lessThanXSeconds:{one:"أقل من ثانية واحدة",two:"أقل من ثانتين",threeToTen:"أقل من {{count}} ثواني",other:"أقل من {{count}} ثانية"},xSeconds:{one:"ثانية واحدة",two:"ثانتين",threeToTen:"{{count}} ثواني",other:"{{count}} ثانية"},halfAMinute:"نصف دقيقة",lessThanXMinutes:{one:"أقل من دقيقة",two:"أقل من دقيقتين",threeToTen:"أقل من {{count}} دقائق",other:"أقل من {{count}} دقيقة"},xMinutes:{one:"دقيقة واحدة",two:"دقيقتين",threeToTen:"{{count}} دقائق",other:"{{count}} دقيقة"},aboutXHours:{one:"ساعة واحدة تقريباً",two:"ساعتين تقريباً",threeToTen:"{{count}} ساعات تقريباً",other:"{{count}} ساعة تقريباً"},xHours:{one:"ساعة واحدة",two:"ساعتين",threeToTen:"{{count}} ساعات",other:"{{count}} ساعة"},xDays:{one:"يوم واحد",two:"يومين",threeToTen:"{{count}} أيام",other:"{{count}} يوم"},aboutXWeeks:{one:"أسبوع واحد تقريباً",two:"أسبوعين تقريباً",threeToTen:"{{count}} أسابيع تقريباً",other:"{{count}} أسبوع تقريباً"},xWeeks:{one:"أسبوع واحد",two:"أسبوعين",threeToTen:"{{count}} أسابيع",other:"{{count}} أسبوع"},aboutXMonths:{one:"شهر واحد تقريباً",two:"شهرين تقريباً",threeToTen:"{{count}} أشهر تقريباً",other:"{{count}} شهر تقريباً"},xMonths:{one:"شهر واحد",two:"شهرين",threeToTen:"{{count}} أشهر",other:"{{count}} شهر"},aboutXYears:{one:"عام واحد تقريباً",two:"عامين تقريباً",threeToTen:"{{count}} أعوام تقريباً",other:"{{count}} عام تقريباً"},xYears:{one:"عام واحد",two:"عامين",threeToTen:"{{count}} أعوام",other:"{{count}} عام"},overXYears:{one:"أكثر من عام",two:"أكثر من عامين",threeToTen:"أكثر من {{count}} أعوام",other:"أكثر من {{count}} عام"},almostXYears:{one:"عام واحد تقريباً",two:"عامين تقريباً",threeToTen:"{{count}} أعوام تقريباً",other:"{{count}} عام تقريباً"}},h=(u,n,o)=>{o=o||{};const t=d[u];let e;return typeof t=="string"?e=t:n===1?e=t.one:n===2?e=t.two:n<=10?e=t.threeToTen.replace("{{count}}",String(n)):e=t.other.replace("{{count}}",String(n)),o.addSuffix?o.comparison&&o.comparison>0?"في خلال "+e:"منذ "+e:e},s={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},m={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},c={full:"{{date}} 'عند' {{time}}",long:"{{date}} 'عند' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},l={date:r({formats:s,defaultWidth:"full"}),time:r({formats:m,defaultWidth:"full"}),dateTime:r({formats:c,defaultWidth:"full"})},B={lastWeek:"'أخر' eeee 'عند' p",yesterday:"'أمس عند' p",today:"'اليوم عند' p",tomorrow:"'غداً عند' p",nextWeek:"eeee 'عند' p",other:"P"},w=(u,n,o,t)=>B[u],g={narrow:["ق","ب"],abbreviated:["ق.م.","ب.م."],wide:["قبل الميلاد","بعد الميلاد"]},f={narrow:["1","2","3","4"],abbreviated:["ر1","ر2","ر3","ر4"],wide:["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"]},F={narrow:["ج","ف","م","أ","م","ج","ج","أ","س","أ","ن","د"],abbreviated:["جانـ","فيفـ","مارس","أفريل","مايـ","جوانـ","جويـ","أوت","سبتـ","أكتـ","نوفـ","ديسـ"],wide:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"]},T={narrow:["ح","ن","ث","ر","خ","ج","س"],short:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],abbreviated:["أحد","اثنـ","ثلا","أربـ","خميـ","جمعة","سبت"],wide:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"]},b={narrow:{am:"ص",pm:"م",midnight:"ن",noon:"ظ",morning:"صباحاً",afternoon:"بعد الظهر",evening:"مساءاً",night:"ليلاً"},abbreviated:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهر",morning:"صباحاً",afternoon:"بعد الظهر",evening:"مساءاً",night:"ليلاً"},wide:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهر",morning:"صباحاً",afternoon:"بعد الظهر",evening:"مساءاً",night:"ليلاً"}},p={narrow:{am:"ص",pm:"م",midnight:"ن",noon:"ظ",morning:"في الصباح",afternoon:"بعد الظـهر",evening:"في المساء",night:"في الليل"},abbreviated:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهر",morning:"في الصباح",afternoon:"بعد الظهر",evening:"في المساء",night:"في الليل"},wide:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهر",morning:"صباحاً",afternoon:"بعد الظـهر",evening:"في المساء",night:"في الليل"}},v=u=>String(u),y={ordinalNumber:v,era:i({values:g,defaultWidth:"wide"}),quarter:i({values:f,defaultWidth:"wide",argumentCallback:u=>Number(u)-1}),month:i({values:F,defaultWidth:"wide"}),day:i({values:T,defaultWidth:"wide"}),dayPeriod:i({values:b,defaultWidth:"wide",formattingValues:p,defaultFormattingWidth:"wide"})},D=/^(\d+)(th|st|nd|rd)?/i,W=/\d+/i,M={narrow:/^(ق|ب)/i,abbreviated:/^(ق\.?\s?م\.?|ق\.?\s?م\.?\s?|a\.?\s?d\.?|c\.?\s?)/i,wide:/^(قبل الميلاد|قبل الميلاد|بعد الميلاد|بعد الميلاد)/i},P={any:[/^قبل/i,/^بعد/i]},C={narrow:/^[1234]/i,abbreviated:/^ر[1234]/i,wide:/^الربع [1234]/i},x={any:[/1/i,/2/i,/3/i,/4/i]},E={narrow:/^[جفمأسند]/i,abbreviated:/^(جان|فيف|مار|أفر|ماي|جوا|جوي|أوت|سبت|أكت|نوف|ديس)/i,wide:/^(جانفي|فيفري|مارس|أفريل|ماي|جوان|جويلية|أوت|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/i},k={narrow:[/^ج/i,/^ف/i,/^م/i,/^أ/i,/^م/i,/^ج/i,/^ج/i,/^أ/i,/^س/i,/^أ/i,/^ن/i,/^د/i],any:[/^جان/i,/^فيف/i,/^مار/i,/^أفر/i,/^ماي/i,/^جوا/i,/^جوي/i,/^أوت/i,/^سبت/i,/^أكت/i,/^نوف/i,/^ديس/i]},X={narrow:/^[حنثرخجس]/i,short:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,abbreviated:/^(أحد|اثن|ثلا|أرب|خمي|جمعة|سبت)/i,wide:/^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i},S={narrow:[/^ح/i,/^ن/i,/^ث/i,/^ر/i,/^خ/i,/^ج/i,/^س/i],wide:[/^الأحد/i,/^الاثنين/i,/^الثلاثاء/i,/^الأربعاء/i,/^الخميس/i,/^الجمعة/i,/^السبت/i],any:[/^أح/i,/^اث/i,/^ث/i,/^أر/i,/^خ/i,/^ج/i,/^س/i]},z={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},N={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Y={ordinalNumber:A({matchPattern:D,parsePattern:W,valueCallback:u=>parseInt(u,10)}),era:a({matchPatterns:M,defaultMatchWidth:"wide",parsePatterns:P,defaultParseWidth:"any"}),quarter:a({matchPatterns:C,defaultMatchWidth:"wide",parsePatterns:x,defaultParseWidth:"any",valueCallback:u=>Number(u)+1}),month:a({matchPatterns:E,defaultMatchWidth:"wide",parsePatterns:k,defaultParseWidth:"any"}),day:a({matchPatterns:X,defaultMatchWidth:"wide",parsePatterns:S,defaultParseWidth:"any"}),dayPeriod:a({matchPatterns:z,defaultMatchWidth:"any",parsePatterns:N,defaultParseWidth:"any"})},O={code:"ar-DZ",formatDistance:h,formatLong:l,formatRelative:w,localize:y,match:Y,options:{weekStartsOn:0,firstWeekContainsDate:1}};export{O as arDZ}; +//# sourceMappingURL=ar-DZ-XF744e4Z.chunk.mjs.map diff --git a/js/ar-DZ-XF744e4Z.chunk.mjs.license b/js/ar-DZ-XF744e4Z.chunk.mjs.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/ar-DZ-XF744e4Z.chunk.mjs.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/ar-DZ-XF744e4Z.chunk.mjs.map b/js/ar-DZ-XF744e4Z.chunk.mjs.map new file mode 100644 index 00000000..9dfa69f0 --- /dev/null +++ b/js/ar-DZ-XF744e4Z.chunk.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"ar-DZ-XF744e4Z.chunk.mjs","sources":["../node_modules/date-fns/locale/ar-DZ/_lib/formatDistance.js","../node_modules/date-fns/locale/ar-DZ/_lib/formatLong.js","../node_modules/date-fns/locale/ar-DZ/_lib/formatRelative.js","../node_modules/date-fns/locale/ar-DZ/_lib/localize.js","../node_modules/date-fns/locale/ar-DZ/_lib/match.js","../node_modules/date-fns/locale/ar-DZ.js"],"sourcesContent":["const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"أقل من ثانية واحدة\",\n two: \"أقل من ثانتين\",\n threeToTen: \"أقل من {{count}} ثواني\",\n other: \"أقل من {{count}} ثانية\",\n },\n\n xSeconds: {\n one: \"ثانية واحدة\",\n two: \"ثانتين\",\n threeToTen: \"{{count}} ثواني\",\n other: \"{{count}} ثانية\",\n },\n\n halfAMinute: \"نصف دقيقة\",\n\n lessThanXMinutes: {\n one: \"أقل من دقيقة\",\n two: \"أقل من دقيقتين\",\n threeToTen: \"أقل من {{count}} دقائق\",\n other: \"أقل من {{count}} دقيقة\",\n },\n\n xMinutes: {\n one: \"دقيقة واحدة\",\n two: \"دقيقتين\",\n threeToTen: \"{{count}} دقائق\",\n other: \"{{count}} دقيقة\",\n },\n\n aboutXHours: {\n one: \"ساعة واحدة تقريباً\",\n two: \"ساعتين تقريباً\",\n threeToTen: \"{{count}} ساعات تقريباً\",\n other: \"{{count}} ساعة تقريباً\",\n },\n\n xHours: {\n one: \"ساعة واحدة\",\n two: \"ساعتين\",\n threeToTen: \"{{count}} ساعات\",\n other: \"{{count}} ساعة\",\n },\n\n xDays: {\n one: \"يوم واحد\",\n two: \"يومين\",\n threeToTen: \"{{count}} أيام\",\n other: \"{{count}} يوم\",\n },\n\n aboutXWeeks: {\n one: \"أسبوع واحد تقريباً\",\n two: \"أسبوعين تقريباً\",\n threeToTen: \"{{count}} أسابيع تقريباً\",\n other: \"{{count}} أسبوع تقريباً\",\n },\n\n xWeeks: {\n one: \"أسبوع واحد\",\n two: \"أسبوعين\",\n threeToTen: \"{{count}} أسابيع\",\n other: \"{{count}} أسبوع\",\n },\n\n aboutXMonths: {\n one: \"شهر واحد تقريباً\",\n two: \"شهرين تقريباً\",\n threeToTen: \"{{count}} أشهر تقريباً\",\n other: \"{{count}} شهر تقريباً\",\n },\n\n xMonths: {\n one: \"شهر واحد\",\n two: \"شهرين\",\n threeToTen: \"{{count}} أشهر\",\n other: \"{{count}} شهر\",\n },\n\n aboutXYears: {\n one: \"عام واحد تقريباً\",\n two: \"عامين تقريباً\",\n threeToTen: \"{{count}} أعوام تقريباً\",\n other: \"{{count}} عام تقريباً\",\n },\n\n xYears: {\n one: \"عام واحد\",\n two: \"عامين\",\n threeToTen: \"{{count}} أعوام\",\n other: \"{{count}} عام\",\n },\n\n overXYears: {\n one: \"أكثر من عام\",\n two: \"أكثر من عامين\",\n threeToTen: \"أكثر من {{count}} أعوام\",\n other: \"أكثر من {{count}} عام\",\n },\n\n almostXYears: {\n one: \"عام واحد تقريباً\",\n two: \"عامين تقريباً\",\n threeToTen: \"{{count}} أعوام تقريباً\",\n other: \"{{count}} عام تقريباً\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n options = options || {};\n\n const usageGroup = formatDistanceLocale[token];\n let result;\n if (typeof usageGroup === \"string\") {\n result = usageGroup;\n } else if (count === 1) {\n result = usageGroup.one;\n } else if (count === 2) {\n result = usageGroup.two;\n } else if (count <= 10) {\n result = usageGroup.threeToTen.replace(\"{{count}}\", String(count));\n } else {\n result = usageGroup.other.replace(\"{{count}}\", String(count));\n }\n\n if (options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"في خلال \" + result;\n } else {\n return \"منذ \" + result;\n }\n }\n\n return result;\n};\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'عند' {{time}}\",\n long: \"{{date}} 'عند' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'أخر' eeee 'عند' p\",\n yesterday: \"'أمس عند' p\",\n today: \"'اليوم عند' p\",\n tomorrow: \"'غداً عند' p\",\n nextWeek: \"eeee 'عند' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) => {\n return formatRelativeLocale[token];\n};\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"ق\", \"ب\"],\n abbreviated: [\"ق.م.\", \"ب.م.\"],\n wide: [\"قبل الميلاد\", \"بعد الميلاد\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"ر1\", \"ر2\", \"ر3\", \"ر4\"],\n wide: [\"الربع الأول\", \"الربع الثاني\", \"الربع الثالث\", \"الربع الرابع\"],\n};\n\nconst monthValues = {\n narrow: [\"ج\", \"ف\", \"م\", \"أ\", \"م\", \"ج\", \"ج\", \"أ\", \"س\", \"أ\", \"ن\", \"د\"],\n abbreviated: [\n \"جانـ\",\n \"فيفـ\",\n \"مارس\",\n \"أفريل\",\n \"مايـ\",\n \"جوانـ\",\n \"جويـ\",\n \"أوت\",\n \"سبتـ\",\n \"أكتـ\",\n \"نوفـ\",\n \"ديسـ\",\n ],\n\n wide: [\n \"جانفي\",\n \"فيفري\",\n \"مارس\",\n \"أفريل\",\n \"ماي\",\n \"جوان\",\n \"جويلية\",\n \"أوت\",\n \"سبتمبر\",\n \"أكتوبر\",\n \"نوفمبر\",\n \"ديسمبر\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"ح\", \"ن\", \"ث\", \"ر\", \"خ\", \"ج\", \"س\"],\n short: [\"أحد\", \"اثنين\", \"ثلاثاء\", \"أربعاء\", \"خميس\", \"جمعة\", \"سبت\"],\n abbreviated: [\"أحد\", \"اثنـ\", \"ثلا\", \"أربـ\", \"خميـ\", \"جمعة\", \"سبت\"],\n wide: [\n \"الأحد\",\n \"الاثنين\",\n \"الثلاثاء\",\n \"الأربعاء\",\n \"الخميس\",\n \"الجمعة\",\n \"السبت\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"ن\",\n noon: \"ظ\",\n morning: \"صباحاً\",\n afternoon: \"بعد الظهر\",\n evening: \"مساءاً\",\n night: \"ليلاً\",\n },\n abbreviated: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"نصف الليل\",\n noon: \"ظهر\",\n morning: \"صباحاً\",\n afternoon: \"بعد الظهر\",\n evening: \"مساءاً\",\n night: \"ليلاً\",\n },\n wide: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"نصف الليل\",\n noon: \"ظهر\",\n morning: \"صباحاً\",\n afternoon: \"بعد الظهر\",\n evening: \"مساءاً\",\n night: \"ليلاً\",\n },\n};\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"ن\",\n noon: \"ظ\",\n morning: \"في الصباح\",\n afternoon: \"بعد الظـهر\",\n evening: \"في المساء\",\n night: \"في الليل\",\n },\n abbreviated: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"نصف الليل\",\n noon: \"ظهر\",\n morning: \"في الصباح\",\n afternoon: \"بعد الظهر\",\n evening: \"في المساء\",\n night: \"في الليل\",\n },\n wide: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"نصف الليل\",\n noon: \"ظهر\",\n morning: \"صباحاً\",\n afternoon: \"بعد الظـهر\",\n evening: \"في المساء\",\n night: \"في الليل\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber) => {\n return String(dirtyNumber);\n};\n\nexport const localize = {\n ordinalNumber: ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => Number(quarter) - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\nimport { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(ق|ب)/i,\n abbreviated: /^(ق\\.?\\s?م\\.?|ق\\.?\\s?م\\.?\\s?|a\\.?\\s?d\\.?|c\\.?\\s?)/i,\n wide: /^(قبل الميلاد|قبل الميلاد|بعد الميلاد|بعد الميلاد)/i,\n};\nconst parseEraPatterns = {\n any: [/^قبل/i, /^بعد/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^ر[1234]/i,\n wide: /^الربع [1234]/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[جفمأسند]/i,\n abbreviated: /^(جان|فيف|مار|أفر|ماي|جوا|جوي|أوت|سبت|أكت|نوف|ديس)/i,\n wide: /^(جانفي|فيفري|مارس|أفريل|ماي|جوان|جويلية|أوت|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/i,\n};\n\nconst parseMonthPatterns = {\n narrow: [\n /^ج/i,\n /^ف/i,\n /^م/i,\n /^أ/i,\n /^م/i,\n /^ج/i,\n /^ج/i,\n /^أ/i,\n /^س/i,\n /^أ/i,\n /^ن/i,\n /^د/i,\n ],\n\n any: [\n /^جان/i,\n /^فيف/i,\n /^مار/i,\n /^أفر/i,\n /^ماي/i,\n /^جوا/i,\n /^جوي/i,\n /^أوت/i,\n /^سبت/i,\n /^أكت/i,\n /^نوف/i,\n /^ديس/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[حنثرخجس]/i,\n short: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,\n abbreviated: /^(أحد|اثن|ثلا|أرب|خمي|جمعة|سبت)/i,\n wide: /^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^ح/i, /^ن/i, /^ث/i, /^ر/i, /^خ/i, /^ج/i, /^س/i],\n wide: [\n /^الأحد/i,\n /^الاثنين/i,\n /^الثلاثاء/i,\n /^الأربعاء/i,\n /^الخميس/i,\n /^الجمعة/i,\n /^السبت/i,\n ],\n\n any: [/^أح/i, /^اث/i, /^ث/i, /^أر/i, /^خ/i, /^ج/i, /^س/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => Number(index) + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./ar-DZ/_lib/formatDistance.js\";\nimport { formatLong } from \"./ar-DZ/_lib/formatLong.js\";\nimport { formatRelative } from \"./ar-DZ/_lib/formatRelative.js\";\nimport { localize } from \"./ar-DZ/_lib/localize.js\";\nimport { match } from \"./ar-DZ/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary Arabic locale (Algerian Arabic).\n * @language Algerian Arabic\n * @iso-639-2 ara\n * @author Badreddine Boumaza [@badre429](https://github.com/badre429)\n * @author Ahmed ElShahat [@elshahat](https://github.com/elshahat)\n */\nexport const arDZ = {\n code: \"ar-DZ\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default arDZ;\n"],"names":["formatDistanceLocale","formatDistance","token","count","options","usageGroup","result","dateFormats","timeFormats","dateTimeFormats","formatLong","buildFormatLongFn","formatRelativeLocale","formatRelative","_date","_baseDate","_options","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","dirtyNumber","localize","buildLocalizeFn","quarter","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","match","buildMatchPatternFn","value","buildMatchFn","index","arDZ"],"mappings":";yJAAA,MAAMA,EAAuB,CAC3B,iBAAkB,CAChB,IAAK,qBACL,IAAK,gBACL,WAAY,yBACZ,MAAO,wBACX,EAEE,SAAU,CACR,IAAK,cACL,IAAK,SACL,WAAY,kBACZ,MAAO,iBACX,EAEE,YAAa,YAEb,iBAAkB,CAChB,IAAK,eACL,IAAK,iBACL,WAAY,yBACZ,MAAO,wBACX,EAEE,SAAU,CACR,IAAK,cACL,IAAK,UACL,WAAY,kBACZ,MAAO,iBACX,EAEE,YAAa,CACX,IAAK,qBACL,IAAK,iBACL,WAAY,0BACZ,MAAO,wBACX,EAEE,OAAQ,CACN,IAAK,aACL,IAAK,SACL,WAAY,kBACZ,MAAO,gBACX,EAEE,MAAO,CACL,IAAK,WACL,IAAK,QACL,WAAY,iBACZ,MAAO,eACX,EAEE,YAAa,CACX,IAAK,qBACL,IAAK,kBACL,WAAY,2BACZ,MAAO,yBACX,EAEE,OAAQ,CACN,IAAK,aACL,IAAK,UACL,WAAY,mBACZ,MAAO,iBACX,EAEE,aAAc,CACZ,IAAK,mBACL,IAAK,gBACL,WAAY,yBACZ,MAAO,uBACX,EAEE,QAAS,CACP,IAAK,WACL,IAAK,QACL,WAAY,iBACZ,MAAO,eACX,EAEE,YAAa,CACX,IAAK,mBACL,IAAK,gBACL,WAAY,0BACZ,MAAO,uBACX,EAEE,OAAQ,CACN,IAAK,WACL,IAAK,QACL,WAAY,kBACZ,MAAO,eACX,EAEE,WAAY,CACV,IAAK,cACL,IAAK,gBACL,WAAY,0BACZ,MAAO,uBACX,EAEE,aAAc,CACZ,IAAK,mBACL,IAAK,gBACL,WAAY,0BACZ,MAAO,uBACX,CACA,EAEaC,EAAiB,CAACC,EAAOC,EAAOC,IAAY,CACvDA,EAAUA,GAAW,CAAA,EAErB,MAAMC,EAAaL,EAAqBE,CAAK,EAC7C,IAAII,EAaJ,OAZI,OAAOD,GAAe,SACxBC,EAASD,EACAF,IAAU,EACnBG,EAASD,EAAW,IACXF,IAAU,EACnBG,EAASD,EAAW,IACXF,GAAS,GAClBG,EAASD,EAAW,WAAW,QAAQ,YAAa,OAAOF,CAAK,CAAC,EAEjEG,EAASD,EAAW,MAAM,QAAQ,YAAa,OAAOF,CAAK,CAAC,EAG1DC,EAAQ,UACNA,EAAQ,YAAcA,EAAQ,WAAa,EACtC,WAAaE,EAEb,OAASA,EAIbA,CACT,ECrIMC,EAAc,CAClB,KAAM,mBACN,KAAM,aACN,OAAQ,WACR,MAAO,YACT,EAEMC,EAAc,CAClB,KAAM,iBACN,KAAM,cACN,OAAQ,YACR,MAAO,QACT,EAEMC,EAAkB,CACtB,KAAM,0BACN,KAAM,0BACN,OAAQ,qBACR,MAAO,oBACT,EAEaC,EAAa,CACxB,KAAMC,EAAkB,CACtB,QAASJ,EACT,aAAc,MAClB,CAAG,EAED,KAAMI,EAAkB,CACtB,QAASH,EACT,aAAc,MAClB,CAAG,EAED,SAAUG,EAAkB,CAC1B,QAASF,EACT,aAAc,MAClB,CAAG,CACH,ECtCMG,EAAuB,CAC3B,SAAU,qBACV,UAAW,cACX,MAAO,gBACP,SAAU,eACV,SAAU,eACV,MAAO,GACT,EAEaC,EAAiB,CAACX,EAAOY,EAAOC,EAAWC,IAC/CJ,EAAqBV,CAAK,ECR7Be,EAAY,CAChB,OAAQ,CAAC,IAAK,GAAG,EACjB,YAAa,CAAC,OAAQ,MAAM,EAC5B,KAAM,CAAC,cAAe,aAAa,CACrC,EAEMC,EAAgB,CACpB,OAAQ,CAAC,IAAK,IAAK,IAAK,GAAG,EAC3B,YAAa,CAAC,KAAM,KAAM,KAAM,IAAI,EACpC,KAAM,CAAC,cAAe,eAAgB,eAAgB,cAAc,CACtE,EAEMC,EAAc,CAClB,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EACnE,YAAa,CACX,OACA,OACA,OACA,QACA,OACA,QACA,OACA,MACA,OACA,OACA,OACA,MACJ,EAEE,KAAM,CACJ,QACA,QACA,OACA,QACA,MACA,OACA,SACA,MACA,SACA,SACA,SACA,QACJ,CACA,EAEMC,EAAY,CAChB,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAC1C,MAAO,CAAC,MAAO,QAAS,SAAU,SAAU,OAAQ,OAAQ,KAAK,EACjE,YAAa,CAAC,MAAO,OAAQ,MAAO,OAAQ,OAAQ,OAAQ,KAAK,EACjE,KAAM,CACJ,QACA,UACA,WACA,WACA,SACA,SACA,OACJ,CACA,EAEMC,EAAkB,CACtB,OAAQ,CACN,GAAI,IACJ,GAAI,IACJ,SAAU,IACV,KAAM,IACN,QAAS,SACT,UAAW,YACX,QAAS,SACT,MAAO,OACX,EACE,YAAa,CACX,GAAI,IACJ,GAAI,IACJ,SAAU,YACV,KAAM,MACN,QAAS,SACT,UAAW,YACX,QAAS,SACT,MAAO,OACX,EACE,KAAM,CACJ,GAAI,IACJ,GAAI,IACJ,SAAU,YACV,KAAM,MACN,QAAS,SACT,UAAW,YACX,QAAS,SACT,MAAO,OACX,CACA,EACMC,EAA4B,CAChC,OAAQ,CACN,GAAI,IACJ,GAAI,IACJ,SAAU,IACV,KAAM,IACN,QAAS,YACT,UAAW,aACX,QAAS,YACT,MAAO,UACX,EACE,YAAa,CACX,GAAI,IACJ,GAAI,IACJ,SAAU,YACV,KAAM,MACN,QAAS,YACT,UAAW,YACX,QAAS,YACT,MAAO,UACX,EACE,KAAM,CACJ,GAAI,IACJ,GAAI,IACJ,SAAU,YACV,KAAM,MACN,QAAS,SACT,UAAW,aACX,QAAS,YACT,MAAO,UACX,CACA,EAEMC,EAAiBC,GACd,OAAOA,CAAW,EAGdC,EAAW,CACtB,cAAeF,EAEf,IAAKG,EAAgB,CACnB,OAAQT,EACR,aAAc,MAClB,CAAG,EAED,QAASS,EAAgB,CACvB,OAAQR,EACR,aAAc,OACd,iBAAmBS,GAAY,OAAOA,CAAO,EAAI,CACrD,CAAG,EAED,MAAOD,EAAgB,CACrB,OAAQP,EACR,aAAc,MAClB,CAAG,EAED,IAAKO,EAAgB,CACnB,OAAQN,EACR,aAAc,MAClB,CAAG,EAED,UAAWM,EAAgB,CACzB,OAAQL,EACR,aAAc,OACd,iBAAkBC,EAClB,uBAAwB,MAC5B,CAAG,CACH,EC9JMM,EAA4B,wBAC5BC,EAA4B,OAE5BC,EAAmB,CACvB,OAAQ,UACR,YAAa,qDACb,KAAM,qDACR,EACMC,EAAmB,CACvB,IAAK,CAAC,QAAS,OAAO,CACxB,EAEMC,EAAuB,CAC3B,OAAQ,WACR,YAAa,YACb,KAAM,gBACR,EACMC,EAAuB,CAC3B,IAAK,CAAC,KAAM,KAAM,KAAM,IAAI,CAC9B,EAEMC,EAAqB,CACzB,OAAQ,cACR,YAAa,sDACb,KAAM,4EACR,EAEMC,EAAqB,CACzB,OAAQ,CACN,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,EAEE,IAAK,CACH,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACJ,CACA,EAEMC,EAAmB,CACvB,OAAQ,cACR,MAAO,4CACP,YAAa,mCACb,KAAM,yDACR,EACMC,EAAmB,CACvB,OAAQ,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EACxD,KAAM,CACJ,UACA,YACA,aACA,aACA,WACA,WACA,SACJ,EAEE,IAAK,CAAC,OAAQ,OAAQ,MAAO,OAAQ,MAAO,MAAO,KAAK,CAC1D,EAEMC,EAAyB,CAC7B,OAAQ,6DACR,IAAK,gFACP,EACMC,EAAyB,CAC7B,IAAK,CACH,GAAI,MACJ,GAAI,MACJ,SAAU,OACV,KAAM,OACN,QAAS,WACT,UAAW,aACX,QAAS,WACT,MAAO,QACX,CACA,EAEaC,EAAQ,CACnB,cAAeC,EAAoB,CACjC,aAAcb,EACd,aAAcC,EACd,cAAgBa,GAAU,SAASA,EAAO,EAAE,CAChD,CAAG,EAED,IAAKC,EAAa,CAChB,cAAeb,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,QAASY,EAAa,CACpB,cAAeX,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,MACnB,cAAgBW,GAAU,OAAOA,CAAK,EAAI,CAC9C,CAAG,EAED,MAAOD,EAAa,CAClB,cAAeT,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,IAAKQ,EAAa,CAChB,cAAeP,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,UAAWM,EAAa,CACtB,cAAeL,EACf,kBAAmB,MACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,CACH,EChIaM,EAAO,CAClB,KAAM,QACN,eAAgB5C,EAChB,WAAYS,EACZ,eAAgBG,EAChB,SAAUY,EACV,MAAOe,EACP,QAAS,CACP,aAAc,EACd,sBAAuB,CAC3B,CACA","x_google_ignoreList":[0,1,2,3,4,5]} \ No newline at end of file diff --git a/js/ar-DZ-XF744e4Z.chunk.mjs.map.license b/js/ar-DZ-XF744e4Z.chunk.mjs.map.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/ar-DZ-XF744e4Z.chunk.mjs.map.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/ar-EG-Bv1NkNUl.chunk.mjs b/js/ar-EG-Bv1NkNUl.chunk.mjs new file mode 100644 index 00000000..cc61c456 --- /dev/null +++ b/js/ar-EG-Bv1NkNUl.chunk.mjs @@ -0,0 +1,3 @@ +/*! third party licenses: js/vendor.LICENSE.txt */ +import{b as A,c as o,d as a,e as i}from"./index-Cr1DLTt7.chunk.mjs";import"./user_migration-personalSettings.mjs";import"./be-tarask-CzbVxLq7.chunk.mjs";const d={lessThanXSeconds:{one:"أقل من ثانية",two:"أقل من ثانيتين",threeToTen:"أقل من {{count}} ثواني",other:"أقل من {{count}} ثانية"},xSeconds:{one:"ثانية",two:"ثانيتين",threeToTen:"{{count}} ثواني",other:"{{count}} ثانية"},halfAMinute:"نص دقيقة",lessThanXMinutes:{one:"أقل من دقيقة",two:"أقل من دقيقتين",threeToTen:"أقل من {{count}} دقايق",other:"أقل من {{count}} دقيقة"},xMinutes:{one:"دقيقة",two:"دقيقتين",threeToTen:"{{count}} دقايق",other:"{{count}} دقيقة"},aboutXHours:{one:"حوالي ساعة",two:"حوالي ساعتين",threeToTen:"حوالي {{count}} ساعات",other:"حوالي {{count}} ساعة"},xHours:{one:"ساعة",two:"ساعتين",threeToTen:"{{count}} ساعات",other:"{{count}} ساعة"},xDays:{one:"يوم",two:"يومين",threeToTen:"{{count}} أيام",other:"{{count}} يوم"},aboutXWeeks:{one:"حوالي أسبوع",two:"حوالي أسبوعين",threeToTen:"حوالي {{count}} أسابيع",other:"حوالي {{count}} أسبوع"},xWeeks:{one:"أسبوع",two:"أسبوعين",threeToTen:"{{count}} أسابيع",other:"{{count}} أسبوع"},aboutXMonths:{one:"حوالي شهر",two:"حوالي شهرين",threeToTen:"حوالي {{count}} أشهر",other:"حوالي {{count}} شهر"},xMonths:{one:"شهر",two:"شهرين",threeToTen:"{{count}} أشهر",other:"{{count}} شهر"},aboutXYears:{one:"حوالي سنة",two:"حوالي سنتين",threeToTen:"حوالي {{count}} سنين",other:"حوالي {{count}} سنة"},xYears:{one:"عام",two:"عامين",threeToTen:"{{count}} أعوام",other:"{{count}} عام"},overXYears:{one:"أكثر من سنة",two:"أكثر من سنتين",threeToTen:"أكثر من {{count}} سنين",other:"أكثر من {{count}} سنة"},almostXYears:{one:"عام تقريبًا",two:"عامين تقريبًا",threeToTen:"{{count}} أعوام تقريبًا",other:"{{count}} عام تقريبًا"}},h=(u,t,r)=>{let e;const n=d[u];return typeof n=="string"?e=n:t===1?e=n.one:t===2?e=n.two:t<=10?e=n.threeToTen.replace("{{count}}",String(t)):e=n.other.replace("{{count}}",String(t)),r?.addSuffix?r.comparison&&r.comparison>0?`في خلال ${e}`:`منذ ${e}`:e},s={full:"EEEE، do MMMM y",long:"do MMMM y",medium:"dd/MMM/y",short:"d/MM/y"},m={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},c={full:"{{date}} 'الساعة' {{time}}",long:"{{date}} 'الساعة' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},l={date:A({formats:s,defaultWidth:"full"}),time:A({formats:m,defaultWidth:"full"}),dateTime:A({formats:c,defaultWidth:"full"})},w={lastWeek:"eeee 'اللي جاي الساعة' p",yesterday:"'إمبارح الساعة' p",today:"'النهاردة الساعة' p",tomorrow:"'بكرة الساعة' p",nextWeek:"eeee 'الساعة' p",other:"P"},f=(u,t,r,e)=>w[u],g={narrow:["ق","ب"],abbreviated:["ق.م","ب.م"],wide:["قبل الميلاد","بعد الميلاد"]},B={narrow:["1","2","3","4"],abbreviated:["ر1","ر2","ر3","ر4"],wide:["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"]},T={narrow:["ي","ف","م","أ","م","ي","ي","أ","س","أ","ن","د"],abbreviated:["ينا","فبر","مارس","أبريل","مايو","يونـ","يولـ","أغسـ","سبتـ","أكتـ","نوفـ","ديسـ"],wide:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"]},b={narrow:["ح","ن","ث","ر","خ","ج","س"],short:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],abbreviated:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],wide:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"]},D={narrow:{am:"ص",pm:"م",midnight:"ن",noon:"ظ",morning:"صباحاً",afternoon:"بعد الظهر",evening:"مساءً",night:"ليلاً"},abbreviated:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهراً",morning:"صباحاً",afternoon:"بعد الظهر",evening:"مساءً",night:"ليلاً"},wide:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهراً",morning:"صباحاً",afternoon:"بعد الظهر",evening:"مساءً",night:"ليلاً"}},p={narrow:{am:"ص",pm:"م",midnight:"ن",noon:"ظ",morning:"في الصباح",afternoon:"بعد الظهر",evening:"في المساء",night:"في الليل"},abbreviated:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهراً",morning:"في الصباح",afternoon:"بعد الظهر",evening:"في المساء",night:"في الليل"},wide:{am:"ص",pm:"م",midnight:"نصف الليل",morning:"في الصباح",noon:"ظهراً",afternoon:"بعد الظهر",evening:"في المساء",night:"في الليل"}},v=(u,t)=>String(u),F={ordinalNumber:v,era:o({values:g,defaultWidth:"wide"}),quarter:o({values:B,defaultWidth:"wide",argumentCallback:u=>u-1}),month:o({values:T,defaultWidth:"wide"}),day:o({values:b,defaultWidth:"wide"}),dayPeriod:o({values:D,defaultWidth:"wide",formattingValues:p,defaultFormattingWidth:"wide"})},y=/^(\d+)/,W=/\d+/i,M={narrow:/^(ق|ب)/g,abbreviated:/^(ق.م|ب.م)/g,wide:/^(قبل الميلاد|بعد الميلاد)/g},P={any:[/^ق/g,/^ب/g]},E={narrow:/^[1234]/,abbreviated:/^ر[1234]/,wide:/^الربع (الأول|الثاني|الثالث|الرابع)/},x={wide:[/الربع الأول/,/الربع الثاني/,/الربع الثالث/,/الربع الرابع/],any:[/1/,/2/,/3/,/4/]},C={narrow:/^(ي|ف|م|أ|س|ن|د)/,abbreviated:/^(ينا|فبر|مارس|أبريل|مايو|يونـ|يولـ|أغسـ|سبتـ|أكتـ|نوفـ|ديسـ)/,wide:/^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/},k={narrow:[/^ي/,/^ف/,/^م/,/^أ/,/^م/,/^ي/,/^ي/,/^أ/,/^س/,/^أ/,/^ن/,/^د/],any:[/^ينا/,/^فبر/,/^مارس/,/^أبريل/,/^مايو/,/^يون/,/^يول/,/^أغس/,/^سبت/,/^أكت/,/^نوف/,/^ديس/]},X={narrow:/^(ح|ن|ث|ر|خ|ج|س)/,short:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/,abbreviated:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/,wide:/^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/},S={narrow:[/^ح/,/^ن/,/^ث/,/^ر/,/^خ/,/^ج/,/^س/],any:[/أحد/,/اثنين/,/ثلاثاء/,/أربعاء/,/خميس/,/جمعة/,/سبت/]},z={narrow:/^(ص|م|ن|ظ|في الصباح|بعد الظهر|في المساء|في الليل)/,abbreviated:/^(ص|م|نصف الليل|ظهراً|في الصباح|بعد الظهر|في المساء|في الليل)/,wide:/^(ص|م|نصف الليل|في الصباح|ظهراً|بعد الظهر|في المساء|في الليل)/,any:/^(ص|م|صباح|ظهر|مساء|ليل)/},Y={any:{am:/^ص/,pm:/^م/,midnight:/^ن/,noon:/^ظ/,morning:/^ص/,afternoon:/^بعد/,evening:/^م/,night:/^ل/}},q={ordinalNumber:i({matchPattern:y,parsePattern:W,valueCallback:function(u){return parseInt(u,10)}}),era:a({matchPatterns:M,defaultMatchWidth:"wide",parsePatterns:P,defaultParseWidth:"any"}),quarter:a({matchPatterns:E,defaultMatchWidth:"wide",parsePatterns:x,defaultParseWidth:"any",valueCallback:u=>u+1}),month:a({matchPatterns:C,defaultMatchWidth:"wide",parsePatterns:k,defaultParseWidth:"any"}),day:a({matchPatterns:X,defaultMatchWidth:"wide",parsePatterns:S,defaultParseWidth:"any"}),dayPeriod:a({matchPatterns:z,defaultMatchWidth:"any",parsePatterns:Y,defaultParseWidth:"any"})},L={code:"ar-EG",formatDistance:h,formatLong:l,formatRelative:f,localize:F,match:q,options:{weekStartsOn:0,firstWeekContainsDate:1}};export{L as arEG}; +//# sourceMappingURL=ar-EG-Bv1NkNUl.chunk.mjs.map diff --git a/js/ar-EG-Bv1NkNUl.chunk.mjs.license b/js/ar-EG-Bv1NkNUl.chunk.mjs.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/ar-EG-Bv1NkNUl.chunk.mjs.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/ar-EG-Bv1NkNUl.chunk.mjs.map b/js/ar-EG-Bv1NkNUl.chunk.mjs.map new file mode 100644 index 00000000..c68da7fe --- /dev/null +++ b/js/ar-EG-Bv1NkNUl.chunk.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"ar-EG-Bv1NkNUl.chunk.mjs","sources":["../node_modules/date-fns/locale/ar-EG/_lib/formatDistance.js","../node_modules/date-fns/locale/ar-EG/_lib/formatLong.js","../node_modules/date-fns/locale/ar-EG/_lib/formatRelative.js","../node_modules/date-fns/locale/ar-EG/_lib/localize.js","../node_modules/date-fns/locale/ar-EG/_lib/match.js","../node_modules/date-fns/locale/ar-EG.js"],"sourcesContent":["const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"أقل من ثانية\",\n two: \"أقل من ثانيتين\",\n threeToTen: \"أقل من {{count}} ثواني\",\n other: \"أقل من {{count}} ثانية\",\n },\n\n xSeconds: {\n one: \"ثانية\",\n two: \"ثانيتين\",\n threeToTen: \"{{count}} ثواني\",\n other: \"{{count}} ثانية\",\n },\n\n halfAMinute: \"نص دقيقة\",\n\n lessThanXMinutes: {\n one: \"أقل من دقيقة\",\n two: \"أقل من دقيقتين\",\n threeToTen: \"أقل من {{count}} دقايق\",\n other: \"أقل من {{count}} دقيقة\",\n },\n\n xMinutes: {\n one: \"دقيقة\",\n two: \"دقيقتين\",\n threeToTen: \"{{count}} دقايق\",\n other: \"{{count}} دقيقة\",\n },\n\n aboutXHours: {\n one: \"حوالي ساعة\",\n two: \"حوالي ساعتين\",\n threeToTen: \"حوالي {{count}} ساعات\",\n other: \"حوالي {{count}} ساعة\",\n },\n\n xHours: {\n one: \"ساعة\",\n two: \"ساعتين\",\n threeToTen: \"{{count}} ساعات\",\n other: \"{{count}} ساعة\",\n },\n\n xDays: {\n one: \"يوم\",\n two: \"يومين\",\n threeToTen: \"{{count}} أيام\",\n other: \"{{count}} يوم\",\n },\n\n aboutXWeeks: {\n one: \"حوالي أسبوع\",\n two: \"حوالي أسبوعين\",\n threeToTen: \"حوالي {{count}} أسابيع\",\n other: \"حوالي {{count}} أسبوع\",\n },\n\n xWeeks: {\n one: \"أسبوع\",\n two: \"أسبوعين\",\n threeToTen: \"{{count}} أسابيع\",\n other: \"{{count}} أسبوع\",\n },\n\n aboutXMonths: {\n one: \"حوالي شهر\",\n two: \"حوالي شهرين\",\n threeToTen: \"حوالي {{count}} أشهر\",\n other: \"حوالي {{count}} شهر\",\n },\n\n xMonths: {\n one: \"شهر\",\n two: \"شهرين\",\n threeToTen: \"{{count}} أشهر\",\n other: \"{{count}} شهر\",\n },\n\n aboutXYears: {\n one: \"حوالي سنة\",\n two: \"حوالي سنتين\",\n threeToTen: \"حوالي {{count}} سنين\",\n other: \"حوالي {{count}} سنة\",\n },\n\n xYears: {\n one: \"عام\",\n two: \"عامين\",\n threeToTen: \"{{count}} أعوام\",\n other: \"{{count}} عام\",\n },\n\n overXYears: {\n one: \"أكثر من سنة\",\n two: \"أكثر من سنتين\",\n threeToTen: \"أكثر من {{count}} سنين\",\n other: \"أكثر من {{count}} سنة\",\n },\n\n almostXYears: {\n one: \"عام تقريبًا\",\n two: \"عامين تقريبًا\",\n threeToTen: \"{{count}} أعوام تقريبًا\",\n other: \"{{count}} عام تقريبًا\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else if (count === 2) {\n result = tokenValue.two;\n } else if (count <= 10) {\n result = tokenValue.threeToTen.replace(\"{{count}}\", String(count));\n } else {\n result = tokenValue.other.replace(\"{{count}}\", String(count));\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return `في خلال ${result}`;\n } else {\n return `منذ ${result}`;\n }\n }\n\n return result;\n};\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE، do MMMM y\",\n long: \"do MMMM y\",\n medium: \"dd/MMM/y\",\n short: \"d/MM/y\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'الساعة' {{time}}\",\n long: \"{{date}} 'الساعة' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"eeee 'اللي جاي الساعة' p\",\n yesterday: \"'إمبارح الساعة' p\",\n today: \"'النهاردة الساعة' p\",\n tomorrow: \"'بكرة الساعة' p\",\n nextWeek: \"eeee 'الساعة' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"ق\", \"ب\"],\n abbreviated: [\"ق.م\", \"ب.م\"],\n wide: [\"قبل الميلاد\", \"بعد الميلاد\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"ر1\", \"ر2\", \"ر3\", \"ر4\"],\n wide: [\"الربع الأول\", \"الربع الثاني\", \"الربع الثالث\", \"الربع الرابع\"],\n};\n\nconst monthValues = {\n narrow: [\"ي\", \"ف\", \"م\", \"أ\", \"م\", \"ي\", \"ي\", \"أ\", \"س\", \"أ\", \"ن\", \"د\"],\n abbreviated: [\n \"ينا\",\n \"فبر\",\n \"مارس\",\n \"أبريل\",\n \"مايو\",\n \"يونـ\",\n \"يولـ\",\n \"أغسـ\",\n \"سبتـ\",\n \"أكتـ\",\n \"نوفـ\",\n \"ديسـ\",\n ],\n\n wide: [\n \"يناير\",\n \"فبراير\",\n \"مارس\",\n \"أبريل\",\n \"مايو\",\n \"يونيو\",\n \"يوليو\",\n \"أغسطس\",\n \"سبتمبر\",\n \"أكتوبر\",\n \"نوفمبر\",\n \"ديسمبر\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"ح\", \"ن\", \"ث\", \"ر\", \"خ\", \"ج\", \"س\"],\n short: [\"أحد\", \"اثنين\", \"ثلاثاء\", \"أربعاء\", \"خميس\", \"جمعة\", \"سبت\"],\n abbreviated: [\"أحد\", \"اثنين\", \"ثلاثاء\", \"أربعاء\", \"خميس\", \"جمعة\", \"سبت\"],\n\n wide: [\n \"الأحد\",\n \"الاثنين\",\n \"الثلاثاء\",\n \"الأربعاء\",\n \"الخميس\",\n \"الجمعة\",\n \"السبت\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"ن\",\n noon: \"ظ\",\n morning: \"صباحاً\",\n afternoon: \"بعد الظهر\",\n evening: \"مساءً\",\n night: \"ليلاً\",\n },\n abbreviated: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"نصف الليل\",\n noon: \"ظهراً\",\n morning: \"صباحاً\",\n afternoon: \"بعد الظهر\",\n evening: \"مساءً\",\n night: \"ليلاً\",\n },\n wide: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"نصف الليل\",\n noon: \"ظهراً\",\n morning: \"صباحاً\",\n afternoon: \"بعد الظهر\",\n evening: \"مساءً\",\n night: \"ليلاً\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"ن\",\n noon: \"ظ\",\n morning: \"في الصباح\",\n afternoon: \"بعد الظهر\",\n evening: \"في المساء\",\n night: \"في الليل\",\n },\n abbreviated: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"نصف الليل\",\n noon: \"ظهراً\",\n morning: \"في الصباح\",\n afternoon: \"بعد الظهر\",\n evening: \"في المساء\",\n night: \"في الليل\",\n },\n wide: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"نصف الليل\",\n morning: \"في الصباح\",\n noon: \"ظهراً\",\n afternoon: \"بعد الظهر\",\n evening: \"في المساء\",\n night: \"في الليل\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n return String(dirtyNumber);\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)/;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(ق|ب)/g,\n abbreviated: /^(ق.م|ب.م)/g,\n wide: /^(قبل الميلاد|بعد الميلاد)/g,\n};\nconst parseEraPatterns = {\n any: [/^ق/g, /^ب/g],\n};\nconst matchQuarterPatterns = {\n narrow: /^[1234]/,\n abbreviated: /^ر[1234]/,\n wide: /^الربع (الأول|الثاني|الثالث|الرابع)/,\n};\nconst parseQuarterPatterns = {\n wide: [/الربع الأول/, /الربع الثاني/, /الربع الثالث/, /الربع الرابع/],\n any: [/1/, /2/, /3/, /4/],\n};\n\nconst matchMonthPatterns = {\n narrow: /^(ي|ف|م|أ|س|ن|د)/,\n abbreviated: /^(ينا|فبر|مارس|أبريل|مايو|يونـ|يولـ|أغسـ|سبتـ|أكتـ|نوفـ|ديسـ)/,\n wide: /^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^ي/,\n /^ف/,\n /^م/,\n /^أ/,\n /^م/,\n /^ي/,\n /^ي/,\n /^أ/,\n /^س/,\n /^أ/,\n /^ن/,\n /^د/,\n ],\n\n any: [\n /^ينا/,\n /^فبر/,\n /^مارس/,\n /^أبريل/,\n /^مايو/,\n /^يون/,\n /^يول/,\n /^أغس/,\n /^سبت/,\n /^أكت/,\n /^نوف/,\n /^ديس/,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^(ح|ن|ث|ر|خ|ج|س)/,\n short: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/,\n abbreviated: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/,\n wide: /^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/,\n};\nconst parseDayPatterns = {\n narrow: [/^ح/, /^ن/, /^ث/, /^ر/, /^خ/, /^ج/, /^س/],\n any: [/أحد/, /اثنين/, /ثلاثاء/, /أربعاء/, /خميس/, /جمعة/, /سبت/],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(ص|م|ن|ظ|في الصباح|بعد الظهر|في المساء|في الليل)/,\n abbreviated: /^(ص|م|نصف الليل|ظهراً|في الصباح|بعد الظهر|في المساء|في الليل)/,\n wide: /^(ص|م|نصف الليل|في الصباح|ظهراً|بعد الظهر|في المساء|في الليل)/,\n any: /^(ص|م|صباح|ظهر|مساء|ليل)/,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^ص/,\n pm: /^م/,\n midnight: /^ن/,\n noon: /^ظ/,\n morning: /^ص/,\n afternoon: /^بعد/,\n evening: /^م/,\n night: /^ل/,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function (value) {\n return parseInt(value, 10);\n },\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./ar-EG/_lib/formatDistance.js\";\nimport { formatLong } from \"./ar-EG/_lib/formatLong.js\";\nimport { formatRelative } from \"./ar-EG/_lib/formatRelative.js\";\nimport { localize } from \"./ar-EG/_lib/localize.js\";\nimport { match } from \"./ar-EG/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary Arabic locale (Egypt).\n * @language Arabic\n * @iso-639-2 ara\n * @author AbdAllah AbdElFattah [@AbdAllahAbdElFattah13](https://github.com/AbdAllahAbdElFattah13)\n */\nexport const arEG = {\n code: \"ar-EG\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default arEG;\n"],"names":["formatDistanceLocale","formatDistance","token","count","options","result","tokenValue","dateFormats","timeFormats","dateTimeFormats","formatLong","buildFormatLongFn","formatRelativeLocale","formatRelative","_date","_baseDate","_options","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","dirtyNumber","localize","buildLocalizeFn","quarter","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","match","buildMatchPatternFn","value","buildMatchFn","index","arEG"],"mappings":";yJAAA,MAAMA,EAAuB,CAC3B,iBAAkB,CAChB,IAAK,eACL,IAAK,iBACL,WAAY,yBACZ,MAAO,wBACX,EAEE,SAAU,CACR,IAAK,QACL,IAAK,UACL,WAAY,kBACZ,MAAO,iBACX,EAEE,YAAa,WAEb,iBAAkB,CAChB,IAAK,eACL,IAAK,iBACL,WAAY,yBACZ,MAAO,wBACX,EAEE,SAAU,CACR,IAAK,QACL,IAAK,UACL,WAAY,kBACZ,MAAO,iBACX,EAEE,YAAa,CACX,IAAK,aACL,IAAK,eACL,WAAY,wBACZ,MAAO,sBACX,EAEE,OAAQ,CACN,IAAK,OACL,IAAK,SACL,WAAY,kBACZ,MAAO,gBACX,EAEE,MAAO,CACL,IAAK,MACL,IAAK,QACL,WAAY,iBACZ,MAAO,eACX,EAEE,YAAa,CACX,IAAK,cACL,IAAK,gBACL,WAAY,yBACZ,MAAO,uBACX,EAEE,OAAQ,CACN,IAAK,QACL,IAAK,UACL,WAAY,mBACZ,MAAO,iBACX,EAEE,aAAc,CACZ,IAAK,YACL,IAAK,cACL,WAAY,uBACZ,MAAO,qBACX,EAEE,QAAS,CACP,IAAK,MACL,IAAK,QACL,WAAY,iBACZ,MAAO,eACX,EAEE,YAAa,CACX,IAAK,YACL,IAAK,cACL,WAAY,uBACZ,MAAO,qBACX,EAEE,OAAQ,CACN,IAAK,MACL,IAAK,QACL,WAAY,kBACZ,MAAO,eACX,EAEE,WAAY,CACV,IAAK,cACL,IAAK,gBACL,WAAY,yBACZ,MAAO,uBACX,EAEE,aAAc,CACZ,IAAK,cACL,IAAK,gBACL,WAAY,0BACZ,MAAO,uBACX,CACA,EAEaC,EAAiB,CAACC,EAAOC,EAAOC,IAAY,CACvD,IAAIC,EAEJ,MAAMC,EAAaN,EAAqBE,CAAK,EAa7C,OAZI,OAAOI,GAAe,SACxBD,EAASC,EACAH,IAAU,EACnBE,EAASC,EAAW,IACXH,IAAU,EACnBE,EAASC,EAAW,IACXH,GAAS,GAClBE,EAASC,EAAW,WAAW,QAAQ,YAAa,OAAOH,CAAK,CAAC,EAEjEE,EAASC,EAAW,MAAM,QAAQ,YAAa,OAAOH,CAAK,CAAC,EAG1DC,GAAS,UACPA,EAAQ,YAAcA,EAAQ,WAAa,EACtC,WAAWC,CAAM,GAEjB,OAAOA,CAAM,GAIjBA,CACT,ECpIME,EAAc,CAClB,KAAM,kBACN,KAAM,YACN,OAAQ,WACR,MAAO,QACT,EAEMC,EAAc,CAClB,KAAM,iBACN,KAAM,cACN,OAAQ,YACR,MAAO,QACT,EAEMC,EAAkB,CACtB,KAAM,6BACN,KAAM,6BACN,OAAQ,qBACR,MAAO,oBACT,EAEaC,EAAa,CACxB,KAAMC,EAAkB,CACtB,QAASJ,EACT,aAAc,MAClB,CAAG,EAED,KAAMI,EAAkB,CACtB,QAASH,EACT,aAAc,MAClB,CAAG,EAED,SAAUG,EAAkB,CAC1B,QAASF,EACT,aAAc,MAClB,CAAG,CACH,ECtCMG,EAAuB,CAC3B,SAAU,2BACV,UAAW,oBACX,MAAO,sBACP,SAAU,kBACV,SAAU,kBACV,MAAO,GACT,EAEaC,EAAiB,CAACX,EAAOY,EAAOC,EAAWC,IACtDJ,EAAqBV,CAAK,ECRtBe,EAAY,CAChB,OAAQ,CAAC,IAAK,GAAG,EACjB,YAAa,CAAC,MAAO,KAAK,EAC1B,KAAM,CAAC,cAAe,aAAa,CACrC,EAEMC,EAAgB,CACpB,OAAQ,CAAC,IAAK,IAAK,IAAK,GAAG,EAC3B,YAAa,CAAC,KAAM,KAAM,KAAM,IAAI,EACpC,KAAM,CAAC,cAAe,eAAgB,eAAgB,cAAc,CACtE,EAEMC,EAAc,CAClB,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EACnE,YAAa,CACX,MACA,MACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACJ,EAEE,KAAM,CACJ,QACA,SACA,OACA,QACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,QACJ,CACA,EAEMC,EAAY,CAChB,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAC1C,MAAO,CAAC,MAAO,QAAS,SAAU,SAAU,OAAQ,OAAQ,KAAK,EACjE,YAAa,CAAC,MAAO,QAAS,SAAU,SAAU,OAAQ,OAAQ,KAAK,EAEvE,KAAM,CACJ,QACA,UACA,WACA,WACA,SACA,SACA,OACJ,CACA,EAEMC,EAAkB,CACtB,OAAQ,CACN,GAAI,IACJ,GAAI,IACJ,SAAU,IACV,KAAM,IACN,QAAS,SACT,UAAW,YACX,QAAS,QACT,MAAO,OACX,EACE,YAAa,CACX,GAAI,IACJ,GAAI,IACJ,SAAU,YACV,KAAM,QACN,QAAS,SACT,UAAW,YACX,QAAS,QACT,MAAO,OACX,EACE,KAAM,CACJ,GAAI,IACJ,GAAI,IACJ,SAAU,YACV,KAAM,QACN,QAAS,SACT,UAAW,YACX,QAAS,QACT,MAAO,OACX,CACA,EAEMC,EAA4B,CAChC,OAAQ,CACN,GAAI,IACJ,GAAI,IACJ,SAAU,IACV,KAAM,IACN,QAAS,YACT,UAAW,YACX,QAAS,YACT,MAAO,UACX,EACE,YAAa,CACX,GAAI,IACJ,GAAI,IACJ,SAAU,YACV,KAAM,QACN,QAAS,YACT,UAAW,YACX,QAAS,YACT,MAAO,UACX,EACE,KAAM,CACJ,GAAI,IACJ,GAAI,IACJ,SAAU,YACV,QAAS,YACT,KAAM,QACN,UAAW,YACX,QAAS,YACT,MAAO,UACX,CACA,EAEMC,EAAgB,CAACC,EAAaR,IAC3B,OAAOQ,CAAW,EAGdC,EAAW,CACtB,cAAAF,EAEA,IAAKG,EAAgB,CACnB,OAAQT,EACR,aAAc,MAClB,CAAG,EAED,QAASS,EAAgB,CACvB,OAAQR,EACR,aAAc,OACd,iBAAmBS,GAAYA,EAAU,CAC7C,CAAG,EAED,MAAOD,EAAgB,CACrB,OAAQP,EACR,aAAc,MAClB,CAAG,EAED,IAAKO,EAAgB,CACnB,OAAQN,EACR,aAAc,MAClB,CAAG,EAED,UAAWM,EAAgB,CACzB,OAAQL,EACR,aAAc,OACd,iBAAkBC,EAClB,uBAAwB,MAC5B,CAAG,CACH,EChKMM,EAA4B,SAC5BC,EAA4B,OAE5BC,EAAmB,CACvB,OAAQ,UACR,YAAa,cACb,KAAM,6BACR,EACMC,EAAmB,CACvB,IAAK,CAAC,MAAO,KAAK,CACpB,EACMC,EAAuB,CAC3B,OAAQ,UACR,YAAa,WACb,KAAM,qCACR,EACMC,EAAuB,CAC3B,KAAM,CAAC,cAAe,eAAgB,eAAgB,cAAc,EACpE,IAAK,CAAC,IAAK,IAAK,IAAK,GAAG,CAC1B,EAEMC,EAAqB,CACzB,OAAQ,mBACR,YAAa,gEACb,KAAM,+EACR,EACMC,EAAqB,CACzB,OAAQ,CACN,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACJ,EAEE,IAAK,CACH,OACA,OACA,QACA,SACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,MACJ,CACA,EAEMC,EAAmB,CACvB,OAAQ,mBACR,MAAO,2CACP,YAAa,2CACb,KAAM,wDACR,EACMC,EAAmB,CACvB,OAAQ,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAI,EACjD,IAAK,CAAC,MAAO,QAAS,SAAU,SAAU,OAAQ,OAAQ,KAAK,CACjE,EAEMC,EAAyB,CAC7B,OAAQ,oDACR,YAAa,gEACb,KAAM,gEACN,IAAK,0BACP,EACMC,EAAyB,CAC7B,IAAK,CACH,GAAI,KACJ,GAAI,KACJ,SAAU,KACV,KAAM,KACN,QAAS,KACT,UAAW,OACX,QAAS,KACT,MAAO,IACX,CACA,EAEaC,EAAQ,CACnB,cAAeC,EAAoB,CACjC,aAAcb,EACd,aAAcC,EACd,cAAe,SAAUa,EAAO,CAC9B,OAAO,SAASA,EAAO,EAAE,CAC3B,CACJ,CAAG,EAED,IAAKC,EAAa,CAChB,cAAeb,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,QAASY,EAAa,CACpB,cAAeX,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,MACnB,cAAgBW,GAAUA,EAAQ,CACtC,CAAG,EAED,MAAOD,EAAa,CAClB,cAAeT,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,IAAKQ,EAAa,CAChB,cAAeP,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,UAAWM,EAAa,CACtB,cAAeL,EACf,kBAAmB,MACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,CACH,EC1HaM,EAAO,CAClB,KAAM,QACN,eAAgB5C,EAChB,WAAYS,EACZ,eAAgBG,EAChB,SAAUY,EACV,MAAOe,EACP,QAAS,CACP,aAAc,EACd,sBAAuB,CAC3B,CACA","x_google_ignoreList":[0,1,2,3,4,5]} \ No newline at end of file diff --git a/js/ar-EG-Bv1NkNUl.chunk.mjs.map.license b/js/ar-EG-Bv1NkNUl.chunk.mjs.map.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/ar-EG-Bv1NkNUl.chunk.mjs.map.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/ar-MA-CisDbuvT.chunk.mjs b/js/ar-MA-CisDbuvT.chunk.mjs new file mode 100644 index 00000000..bc131406 --- /dev/null +++ b/js/ar-MA-CisDbuvT.chunk.mjs @@ -0,0 +1,3 @@ +/*! third party licenses: js/vendor.LICENSE.txt */ +import{b as r,c as i,d as a,e as A}from"./index-Cr1DLTt7.chunk.mjs";import"./user_migration-personalSettings.mjs";import"./be-tarask-CzbVxLq7.chunk.mjs";const d={lessThanXSeconds:{one:"أقل من ثانية واحدة",two:"أقل من ثانتين",threeToTen:"أقل من {{count}} ثواني",other:"أقل من {{count}} ثانية"},xSeconds:{one:"ثانية واحدة",two:"ثانتين",threeToTen:"{{count}} ثواني",other:"{{count}} ثانية"},halfAMinute:"نصف دقيقة",lessThanXMinutes:{one:"أقل من دقيقة",two:"أقل من دقيقتين",threeToTen:"أقل من {{count}} دقائق",other:"أقل من {{count}} دقيقة"},xMinutes:{one:"دقيقة واحدة",two:"دقيقتين",threeToTen:"{{count}} دقائق",other:"{{count}} دقيقة"},aboutXHours:{one:"ساعة واحدة تقريباً",two:"ساعتين تقريباً",threeToTen:"{{count}} ساعات تقريباً",other:"{{count}} ساعة تقريباً"},xHours:{one:"ساعة واحدة",two:"ساعتين",threeToTen:"{{count}} ساعات",other:"{{count}} ساعة"},xDays:{one:"يوم واحد",two:"يومين",threeToTen:"{{count}} أيام",other:"{{count}} يوم"},aboutXWeeks:{one:"أسبوع واحد تقريباً",two:"أسبوعين تقريباً",threeToTen:"{{count}} أسابيع تقريباً",other:"{{count}} أسبوع تقريباً"},xWeeks:{one:"أسبوع واحد",two:"أسبوعين",threeToTen:"{{count}} أسابيع",other:"{{count}} أسبوع"},aboutXMonths:{one:"شهر واحد تقريباً",two:"شهرين تقريباً",threeToTen:"{{count}} أشهر تقريباً",other:"{{count}} شهر تقريباً"},xMonths:{one:"شهر واحد",two:"شهرين",threeToTen:"{{count}} أشهر",other:"{{count}} شهر"},aboutXYears:{one:"عام واحد تقريباً",two:"عامين تقريباً",threeToTen:"{{count}} أعوام تقريباً",other:"{{count}} عام تقريباً"},xYears:{one:"عام واحد",two:"عامين",threeToTen:"{{count}} أعوام",other:"{{count}} عام"},overXYears:{one:"أكثر من عام",two:"أكثر من عامين",threeToTen:"أكثر من {{count}} أعوام",other:"أكثر من {{count}} عام"},almostXYears:{one:"عام واحد تقريباً",two:"عامين تقريباً",threeToTen:"{{count}} أعوام تقريباً",other:"{{count}} عام تقريباً"}},h=(u,n,o)=>{o=o||{};const t=d[u];let e;return typeof t=="string"?e=t:n===1?e=t.one:n===2?e=t.two:n<=10?e=t.threeToTen.replace("{{count}}",String(n)):e=t.other.replace("{{count}}",String(n)),o.addSuffix?o.comparison&&o.comparison>0?"في خلال "+e:"منذ "+e:e},s={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},m={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},c={full:"{{date}} 'عند' {{time}}",long:"{{date}} 'عند' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},l={date:r({formats:s,defaultWidth:"full"}),time:r({formats:m,defaultWidth:"full"}),dateTime:r({formats:c,defaultWidth:"full"})},B={lastWeek:"'أخر' eeee 'عند' p",yesterday:"'أمس عند' p",today:"'اليوم عند' p",tomorrow:"'غداً عند' p",nextWeek:"eeee 'عند' p",other:"P"},w=(u,n,o,t)=>B[u],g={narrow:["ق","ب"],abbreviated:["ق.م.","ب.م."],wide:["قبل الميلاد","بعد الميلاد"]},f={narrow:["1","2","3","4"],abbreviated:["ر1","ر2","ر3","ر4"],wide:["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"]},F={narrow:["ي","ف","م","أ","م","ي","ي","غ","ش","أ","ن","د"],abbreviated:["ينا","فبر","مارس","أبريل","ماي","يونـ","يولـ","غشت","شتنـ","أكتـ","نونـ","دجنـ"],wide:["يناير","فبراير","مارس","أبريل","ماي","يونيو","يوليوز","غشت","شتنبر","أكتوبر","نونبر","دجنبر"]},T={narrow:["ح","ن","ث","ر","خ","ج","س"],short:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],abbreviated:["أحد","اثنـ","ثلا","أربـ","خميـ","جمعة","سبت"],wide:["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"]},b={narrow:{am:"ص",pm:"م",midnight:"ن",noon:"ظ",morning:"صباحاً",afternoon:"بعد الظهر",evening:"مساءاً",night:"ليلاً"},abbreviated:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهر",morning:"صباحاً",afternoon:"بعد الظهر",evening:"مساءاً",night:"ليلاً"},wide:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهر",morning:"صباحاً",afternoon:"بعد الظهر",evening:"مساءاً",night:"ليلاً"}},p={narrow:{am:"ص",pm:"م",midnight:"ن",noon:"ظ",morning:"في الصباح",afternoon:"بعد الظـهر",evening:"في المساء",night:"في الليل"},abbreviated:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهر",morning:"في الصباح",afternoon:"بعد الظهر",evening:"في المساء",night:"في الليل"},wide:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهر",morning:"صباحاً",afternoon:"بعد الظـهر",evening:"في المساء",night:"في الليل"}},v=u=>String(u),y={ordinalNumber:v,era:i({values:g,defaultWidth:"wide"}),quarter:i({values:f,defaultWidth:"wide",argumentCallback:u=>Number(u)-1}),month:i({values:F,defaultWidth:"wide"}),day:i({values:T,defaultWidth:"wide"}),dayPeriod:i({values:b,defaultWidth:"wide",formattingValues:p,defaultFormattingWidth:"wide"})},D=/^(\d+)(th|st|nd|rd)?/i,M=/\d+/i,W={narrow:/^(ق|ب)/i,abbreviated:/^(ق\.?\s?م\.?|ق\.?\s?م\.?\s?|a\.?\s?d\.?|c\.?\s?)/i,wide:/^(قبل الميلاد|قبل الميلاد|بعد الميلاد|بعد الميلاد)/i},P={any:[/^قبل/i,/^بعد/i]},x={narrow:/^[1234]/i,abbreviated:/^ر[1234]/i,wide:/^الربع [1234]/i},C={any:[/1/i,/2/i,/3/i,/4/i]},E={narrow:/^[يفمأمسند]/i,abbreviated:/^(ين|ف|مار|أب|ماي|يون|يول|غش|شت|أك|ن|د)/i,wide:/^(ين|ف|مار|أب|ماي|يون|يول|غش|شت|أك|ن|د)/i},k={narrow:[/^ي/i,/^ف/i,/^م/i,/^أ/i,/^م/i,/^ي/i,/^ي/i,/^غ/i,/^ش/i,/^أ/i,/^ن/i,/^د/i],any:[/^ين/i,/^فب/i,/^مار/i,/^أب/i,/^ماي/i,/^يون/i,/^يول/i,/^غشت/i,/^ش/i,/^أك/i,/^ن/i,/^د/i]},X={narrow:/^[حنثرخجس]/i,short:/^(أحد|إثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,abbreviated:/^(أحد|إثن|ثلا|أرب|خمي|جمعة|سبت)/i,wide:/^(الأحد|الإثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i},S={narrow:[/^ح/i,/^ن/i,/^ث/i,/^ر/i,/^خ/i,/^ج/i,/^س/i],wide:[/^الأحد/i,/^الإثنين/i,/^الثلاثاء/i,/^الأربعاء/i,/^الخميس/i,/^الجمعة/i,/^السبت/i],any:[/^أح/i,/^إث/i,/^ث/i,/^أر/i,/^خ/i,/^ج/i,/^س/i]},z={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},N={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Y={ordinalNumber:A({matchPattern:D,parsePattern:M,valueCallback:u=>parseInt(u,10)}),era:a({matchPatterns:W,defaultMatchWidth:"wide",parsePatterns:P,defaultParseWidth:"any"}),quarter:a({matchPatterns:x,defaultMatchWidth:"wide",parsePatterns:C,defaultParseWidth:"any",valueCallback:u=>Number(u)+1}),month:a({matchPatterns:E,defaultMatchWidth:"wide",parsePatterns:k,defaultParseWidth:"any"}),day:a({matchPatterns:X,defaultMatchWidth:"wide",parsePatterns:S,defaultParseWidth:"any"}),dayPeriod:a({matchPatterns:z,defaultMatchWidth:"any",parsePatterns:N,defaultParseWidth:"any"})},V={code:"ar-MA",formatDistance:h,formatLong:l,formatRelative:w,localize:y,match:Y,options:{weekStartsOn:1,firstWeekContainsDate:1}};export{V as arMA}; +//# sourceMappingURL=ar-MA-CisDbuvT.chunk.mjs.map diff --git a/js/ar-MA-CisDbuvT.chunk.mjs.license b/js/ar-MA-CisDbuvT.chunk.mjs.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/ar-MA-CisDbuvT.chunk.mjs.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/ar-MA-CisDbuvT.chunk.mjs.map b/js/ar-MA-CisDbuvT.chunk.mjs.map new file mode 100644 index 00000000..76d1c28d --- /dev/null +++ b/js/ar-MA-CisDbuvT.chunk.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"ar-MA-CisDbuvT.chunk.mjs","sources":["../node_modules/date-fns/locale/ar-MA/_lib/formatDistance.js","../node_modules/date-fns/locale/ar-MA/_lib/formatLong.js","../node_modules/date-fns/locale/ar-MA/_lib/formatRelative.js","../node_modules/date-fns/locale/ar-MA/_lib/localize.js","../node_modules/date-fns/locale/ar-MA/_lib/match.js","../node_modules/date-fns/locale/ar-MA.js"],"sourcesContent":["const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"أقل من ثانية واحدة\",\n two: \"أقل من ثانتين\",\n threeToTen: \"أقل من {{count}} ثواني\",\n other: \"أقل من {{count}} ثانية\",\n },\n\n xSeconds: {\n one: \"ثانية واحدة\",\n two: \"ثانتين\",\n threeToTen: \"{{count}} ثواني\",\n other: \"{{count}} ثانية\",\n },\n\n halfAMinute: \"نصف دقيقة\",\n\n lessThanXMinutes: {\n one: \"أقل من دقيقة\",\n two: \"أقل من دقيقتين\",\n threeToTen: \"أقل من {{count}} دقائق\",\n other: \"أقل من {{count}} دقيقة\",\n },\n\n xMinutes: {\n one: \"دقيقة واحدة\",\n two: \"دقيقتين\",\n threeToTen: \"{{count}} دقائق\",\n other: \"{{count}} دقيقة\",\n },\n\n aboutXHours: {\n one: \"ساعة واحدة تقريباً\",\n two: \"ساعتين تقريباً\",\n threeToTen: \"{{count}} ساعات تقريباً\",\n other: \"{{count}} ساعة تقريباً\",\n },\n\n xHours: {\n one: \"ساعة واحدة\",\n two: \"ساعتين\",\n threeToTen: \"{{count}} ساعات\",\n other: \"{{count}} ساعة\",\n },\n\n xDays: {\n one: \"يوم واحد\",\n two: \"يومين\",\n threeToTen: \"{{count}} أيام\",\n other: \"{{count}} يوم\",\n },\n\n aboutXWeeks: {\n one: \"أسبوع واحد تقريباً\",\n two: \"أسبوعين تقريباً\",\n threeToTen: \"{{count}} أسابيع تقريباً\",\n other: \"{{count}} أسبوع تقريباً\",\n },\n\n xWeeks: {\n one: \"أسبوع واحد\",\n two: \"أسبوعين\",\n threeToTen: \"{{count}} أسابيع\",\n other: \"{{count}} أسبوع\",\n },\n\n aboutXMonths: {\n one: \"شهر واحد تقريباً\",\n two: \"شهرين تقريباً\",\n threeToTen: \"{{count}} أشهر تقريباً\",\n other: \"{{count}} شهر تقريباً\",\n },\n\n xMonths: {\n one: \"شهر واحد\",\n two: \"شهرين\",\n threeToTen: \"{{count}} أشهر\",\n other: \"{{count}} شهر\",\n },\n\n aboutXYears: {\n one: \"عام واحد تقريباً\",\n two: \"عامين تقريباً\",\n threeToTen: \"{{count}} أعوام تقريباً\",\n other: \"{{count}} عام تقريباً\",\n },\n\n xYears: {\n one: \"عام واحد\",\n two: \"عامين\",\n threeToTen: \"{{count}} أعوام\",\n other: \"{{count}} عام\",\n },\n\n overXYears: {\n one: \"أكثر من عام\",\n two: \"أكثر من عامين\",\n threeToTen: \"أكثر من {{count}} أعوام\",\n other: \"أكثر من {{count}} عام\",\n },\n\n almostXYears: {\n one: \"عام واحد تقريباً\",\n two: \"عامين تقريباً\",\n threeToTen: \"{{count}} أعوام تقريباً\",\n other: \"{{count}} عام تقريباً\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n options = options || {};\n\n const usageGroup = formatDistanceLocale[token];\n let result;\n if (typeof usageGroup === \"string\") {\n result = usageGroup;\n } else if (count === 1) {\n result = usageGroup.one;\n } else if (count === 2) {\n result = usageGroup.two;\n } else if (count <= 10) {\n result = usageGroup.threeToTen.replace(\"{{count}}\", String(count));\n } else {\n result = usageGroup.other.replace(\"{{count}}\", String(count));\n }\n\n if (options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"في خلال \" + result;\n } else {\n return \"منذ \" + result;\n }\n }\n\n return result;\n};\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'عند' {{time}}\",\n long: \"{{date}} 'عند' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'أخر' eeee 'عند' p\",\n yesterday: \"'أمس عند' p\",\n today: \"'اليوم عند' p\",\n tomorrow: \"'غداً عند' p\",\n nextWeek: \"eeee 'عند' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) => {\n return formatRelativeLocale[token];\n};\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"ق\", \"ب\"],\n abbreviated: [\"ق.م.\", \"ب.م.\"],\n wide: [\"قبل الميلاد\", \"بعد الميلاد\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"ر1\", \"ر2\", \"ر3\", \"ر4\"],\n wide: [\"الربع الأول\", \"الربع الثاني\", \"الربع الثالث\", \"الربع الرابع\"],\n};\n\nconst monthValues = {\n narrow: [\"ي\", \"ف\", \"م\", \"أ\", \"م\", \"ي\", \"ي\", \"غ\", \"ش\", \"أ\", \"ن\", \"د\"],\n abbreviated: [\n \"ينا\",\n \"فبر\",\n \"مارس\",\n \"أبريل\",\n \"ماي\",\n \"يونـ\",\n \"يولـ\",\n \"غشت\",\n \"شتنـ\",\n \"أكتـ\",\n \"نونـ\",\n \"دجنـ\",\n ],\n\n wide: [\n \"يناير\",\n \"فبراير\",\n \"مارس\",\n \"أبريل\",\n \"ماي\",\n \"يونيو\",\n \"يوليوز\",\n \"غشت\",\n \"شتنبر\",\n \"أكتوبر\",\n \"نونبر\",\n \"دجنبر\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"ح\", \"ن\", \"ث\", \"ر\", \"خ\", \"ج\", \"س\"],\n short: [\"أحد\", \"اثنين\", \"ثلاثاء\", \"أربعاء\", \"خميس\", \"جمعة\", \"سبت\"],\n abbreviated: [\"أحد\", \"اثنـ\", \"ثلا\", \"أربـ\", \"خميـ\", \"جمعة\", \"سبت\"],\n wide: [\n \"الأحد\",\n \"الإثنين\",\n \"الثلاثاء\",\n \"الأربعاء\",\n \"الخميس\",\n \"الجمعة\",\n \"السبت\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"ن\",\n noon: \"ظ\",\n morning: \"صباحاً\",\n afternoon: \"بعد الظهر\",\n evening: \"مساءاً\",\n night: \"ليلاً\",\n },\n abbreviated: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"نصف الليل\",\n noon: \"ظهر\",\n morning: \"صباحاً\",\n afternoon: \"بعد الظهر\",\n evening: \"مساءاً\",\n night: \"ليلاً\",\n },\n wide: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"نصف الليل\",\n noon: \"ظهر\",\n morning: \"صباحاً\",\n afternoon: \"بعد الظهر\",\n evening: \"مساءاً\",\n night: \"ليلاً\",\n },\n};\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"ن\",\n noon: \"ظ\",\n morning: \"في الصباح\",\n afternoon: \"بعد الظـهر\",\n evening: \"في المساء\",\n night: \"في الليل\",\n },\n abbreviated: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"نصف الليل\",\n noon: \"ظهر\",\n morning: \"في الصباح\",\n afternoon: \"بعد الظهر\",\n evening: \"في المساء\",\n night: \"في الليل\",\n },\n wide: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"نصف الليل\",\n noon: \"ظهر\",\n morning: \"صباحاً\",\n afternoon: \"بعد الظـهر\",\n evening: \"في المساء\",\n night: \"في الليل\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber) => {\n return String(dirtyNumber);\n};\n\nexport const localize = {\n ordinalNumber: ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => Number(quarter) - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\nimport { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(ق|ب)/i,\n abbreviated: /^(ق\\.?\\s?م\\.?|ق\\.?\\s?م\\.?\\s?|a\\.?\\s?d\\.?|c\\.?\\s?)/i,\n wide: /^(قبل الميلاد|قبل الميلاد|بعد الميلاد|بعد الميلاد)/i,\n};\nconst parseEraPatterns = {\n any: [/^قبل/i, /^بعد/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^ر[1234]/i,\n wide: /^الربع [1234]/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[يفمأمسند]/i,\n abbreviated: /^(ين|ف|مار|أب|ماي|يون|يول|غش|شت|أك|ن|د)/i,\n wide: /^(ين|ف|مار|أب|ماي|يون|يول|غش|شت|أك|ن|د)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^ي/i,\n /^ف/i,\n /^م/i,\n /^أ/i,\n /^م/i,\n /^ي/i,\n /^ي/i,\n /^غ/i,\n /^ش/i,\n /^أ/i,\n /^ن/i,\n /^د/i,\n ],\n\n any: [\n /^ين/i,\n /^فب/i,\n /^مار/i,\n /^أب/i,\n /^ماي/i,\n /^يون/i,\n /^يول/i,\n /^غشت/i,\n /^ش/i,\n /^أك/i,\n /^ن/i,\n /^د/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[حنثرخجس]/i,\n short: /^(أحد|إثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,\n abbreviated: /^(أحد|إثن|ثلا|أرب|خمي|جمعة|سبت)/i,\n wide: /^(الأحد|الإثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^ح/i, /^ن/i, /^ث/i, /^ر/i, /^خ/i, /^ج/i, /^س/i],\n wide: [\n /^الأحد/i,\n /^الإثنين/i,\n /^الثلاثاء/i,\n /^الأربعاء/i,\n /^الخميس/i,\n /^الجمعة/i,\n /^السبت/i,\n ],\n\n any: [/^أح/i, /^إث/i, /^ث/i, /^أر/i, /^خ/i, /^ج/i, /^س/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => Number(index) + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./ar-MA/_lib/formatDistance.js\";\nimport { formatLong } from \"./ar-MA/_lib/formatLong.js\";\nimport { formatRelative } from \"./ar-MA/_lib/formatRelative.js\";\nimport { localize } from \"./ar-MA/_lib/localize.js\";\nimport { match } from \"./ar-MA/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary Arabic locale (Moroccan Arabic).\n * @language Moroccan Arabic\n * @iso-639-2 ara\n * @author Achraf Rrami [@rramiachraf](https://github.com/rramiachraf)\n */\nexport const arMA = {\n code: \"ar-MA\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n // Monday is 1\n weekStartsOn: 1,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default arMA;\n"],"names":["formatDistanceLocale","formatDistance","token","count","options","usageGroup","result","dateFormats","timeFormats","dateTimeFormats","formatLong","buildFormatLongFn","formatRelativeLocale","formatRelative","_date","_baseDate","_options","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","dirtyNumber","localize","buildLocalizeFn","quarter","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","match","buildMatchPatternFn","value","buildMatchFn","index","arMA"],"mappings":";yJAAA,MAAMA,EAAuB,CAC3B,iBAAkB,CAChB,IAAK,qBACL,IAAK,gBACL,WAAY,yBACZ,MAAO,wBACX,EAEE,SAAU,CACR,IAAK,cACL,IAAK,SACL,WAAY,kBACZ,MAAO,iBACX,EAEE,YAAa,YAEb,iBAAkB,CAChB,IAAK,eACL,IAAK,iBACL,WAAY,yBACZ,MAAO,wBACX,EAEE,SAAU,CACR,IAAK,cACL,IAAK,UACL,WAAY,kBACZ,MAAO,iBACX,EAEE,YAAa,CACX,IAAK,qBACL,IAAK,iBACL,WAAY,0BACZ,MAAO,wBACX,EAEE,OAAQ,CACN,IAAK,aACL,IAAK,SACL,WAAY,kBACZ,MAAO,gBACX,EAEE,MAAO,CACL,IAAK,WACL,IAAK,QACL,WAAY,iBACZ,MAAO,eACX,EAEE,YAAa,CACX,IAAK,qBACL,IAAK,kBACL,WAAY,2BACZ,MAAO,yBACX,EAEE,OAAQ,CACN,IAAK,aACL,IAAK,UACL,WAAY,mBACZ,MAAO,iBACX,EAEE,aAAc,CACZ,IAAK,mBACL,IAAK,gBACL,WAAY,yBACZ,MAAO,uBACX,EAEE,QAAS,CACP,IAAK,WACL,IAAK,QACL,WAAY,iBACZ,MAAO,eACX,EAEE,YAAa,CACX,IAAK,mBACL,IAAK,gBACL,WAAY,0BACZ,MAAO,uBACX,EAEE,OAAQ,CACN,IAAK,WACL,IAAK,QACL,WAAY,kBACZ,MAAO,eACX,EAEE,WAAY,CACV,IAAK,cACL,IAAK,gBACL,WAAY,0BACZ,MAAO,uBACX,EAEE,aAAc,CACZ,IAAK,mBACL,IAAK,gBACL,WAAY,0BACZ,MAAO,uBACX,CACA,EAEaC,EAAiB,CAACC,EAAOC,EAAOC,IAAY,CACvDA,EAAUA,GAAW,CAAA,EAErB,MAAMC,EAAaL,EAAqBE,CAAK,EAC7C,IAAII,EAaJ,OAZI,OAAOD,GAAe,SACxBC,EAASD,EACAF,IAAU,EACnBG,EAASD,EAAW,IACXF,IAAU,EACnBG,EAASD,EAAW,IACXF,GAAS,GAClBG,EAASD,EAAW,WAAW,QAAQ,YAAa,OAAOF,CAAK,CAAC,EAEjEG,EAASD,EAAW,MAAM,QAAQ,YAAa,OAAOF,CAAK,CAAC,EAG1DC,EAAQ,UACNA,EAAQ,YAAcA,EAAQ,WAAa,EACtC,WAAaE,EAEb,OAASA,EAIbA,CACT,ECrIMC,EAAc,CAClB,KAAM,mBACN,KAAM,aACN,OAAQ,WACR,MAAO,YACT,EAEMC,EAAc,CAClB,KAAM,iBACN,KAAM,cACN,OAAQ,YACR,MAAO,QACT,EAEMC,EAAkB,CACtB,KAAM,0BACN,KAAM,0BACN,OAAQ,qBACR,MAAO,oBACT,EAEaC,EAAa,CACxB,KAAMC,EAAkB,CACtB,QAASJ,EACT,aAAc,MAClB,CAAG,EAED,KAAMI,EAAkB,CACtB,QAASH,EACT,aAAc,MAClB,CAAG,EAED,SAAUG,EAAkB,CAC1B,QAASF,EACT,aAAc,MAClB,CAAG,CACH,ECtCMG,EAAuB,CAC3B,SAAU,qBACV,UAAW,cACX,MAAO,gBACP,SAAU,eACV,SAAU,eACV,MAAO,GACT,EAEaC,EAAiB,CAACX,EAAOY,EAAOC,EAAWC,IAC/CJ,EAAqBV,CAAK,ECR7Be,EAAY,CAChB,OAAQ,CAAC,IAAK,GAAG,EACjB,YAAa,CAAC,OAAQ,MAAM,EAC5B,KAAM,CAAC,cAAe,aAAa,CACrC,EAEMC,EAAgB,CACpB,OAAQ,CAAC,IAAK,IAAK,IAAK,GAAG,EAC3B,YAAa,CAAC,KAAM,KAAM,KAAM,IAAI,EACpC,KAAM,CAAC,cAAe,eAAgB,eAAgB,cAAc,CACtE,EAEMC,EAAc,CAClB,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EACnE,YAAa,CACX,MACA,MACA,OACA,QACA,MACA,OACA,OACA,MACA,OACA,OACA,OACA,MACJ,EAEE,KAAM,CACJ,QACA,SACA,OACA,QACA,MACA,QACA,SACA,MACA,QACA,SACA,QACA,OACJ,CACA,EAEMC,EAAY,CAChB,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAC1C,MAAO,CAAC,MAAO,QAAS,SAAU,SAAU,OAAQ,OAAQ,KAAK,EACjE,YAAa,CAAC,MAAO,OAAQ,MAAO,OAAQ,OAAQ,OAAQ,KAAK,EACjE,KAAM,CACJ,QACA,UACA,WACA,WACA,SACA,SACA,OACJ,CACA,EAEMC,EAAkB,CACtB,OAAQ,CACN,GAAI,IACJ,GAAI,IACJ,SAAU,IACV,KAAM,IACN,QAAS,SACT,UAAW,YACX,QAAS,SACT,MAAO,OACX,EACE,YAAa,CACX,GAAI,IACJ,GAAI,IACJ,SAAU,YACV,KAAM,MACN,QAAS,SACT,UAAW,YACX,QAAS,SACT,MAAO,OACX,EACE,KAAM,CACJ,GAAI,IACJ,GAAI,IACJ,SAAU,YACV,KAAM,MACN,QAAS,SACT,UAAW,YACX,QAAS,SACT,MAAO,OACX,CACA,EACMC,EAA4B,CAChC,OAAQ,CACN,GAAI,IACJ,GAAI,IACJ,SAAU,IACV,KAAM,IACN,QAAS,YACT,UAAW,aACX,QAAS,YACT,MAAO,UACX,EACE,YAAa,CACX,GAAI,IACJ,GAAI,IACJ,SAAU,YACV,KAAM,MACN,QAAS,YACT,UAAW,YACX,QAAS,YACT,MAAO,UACX,EACE,KAAM,CACJ,GAAI,IACJ,GAAI,IACJ,SAAU,YACV,KAAM,MACN,QAAS,SACT,UAAW,aACX,QAAS,YACT,MAAO,UACX,CACA,EAEMC,EAAiBC,GACd,OAAOA,CAAW,EAGdC,EAAW,CACtB,cAAeF,EAEf,IAAKG,EAAgB,CACnB,OAAQT,EACR,aAAc,MAClB,CAAG,EAED,QAASS,EAAgB,CACvB,OAAQR,EACR,aAAc,OACd,iBAAmBS,GAAY,OAAOA,CAAO,EAAI,CACrD,CAAG,EAED,MAAOD,EAAgB,CACrB,OAAQP,EACR,aAAc,MAClB,CAAG,EAED,IAAKO,EAAgB,CACnB,OAAQN,EACR,aAAc,MAClB,CAAG,EAED,UAAWM,EAAgB,CACzB,OAAQL,EACR,aAAc,OACd,iBAAkBC,EAClB,uBAAwB,MAC5B,CAAG,CACH,EC9JMM,EAA4B,wBAC5BC,EAA4B,OAE5BC,EAAmB,CACvB,OAAQ,UACR,YAAa,qDACb,KAAM,qDACR,EACMC,EAAmB,CACvB,IAAK,CAAC,QAAS,OAAO,CACxB,EAEMC,EAAuB,CAC3B,OAAQ,WACR,YAAa,YACb,KAAM,gBACR,EACMC,EAAuB,CAC3B,IAAK,CAAC,KAAM,KAAM,KAAM,IAAI,CAC9B,EAEMC,EAAqB,CACzB,OAAQ,eACR,YAAa,2CACb,KAAM,0CACR,EACMC,EAAqB,CACzB,OAAQ,CACN,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,EAEE,IAAK,CACH,OACA,OACA,QACA,OACA,QACA,QACA,QACA,QACA,MACA,OACA,MACA,KACJ,CACA,EAEMC,EAAmB,CACvB,OAAQ,cACR,MAAO,4CACP,YAAa,mCACb,KAAM,yDACR,EACMC,EAAmB,CACvB,OAAQ,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EACxD,KAAM,CACJ,UACA,YACA,aACA,aACA,WACA,WACA,SACJ,EAEE,IAAK,CAAC,OAAQ,OAAQ,MAAO,OAAQ,MAAO,MAAO,KAAK,CAC1D,EAEMC,EAAyB,CAC7B,OAAQ,6DACR,IAAK,gFACP,EACMC,EAAyB,CAC7B,IAAK,CACH,GAAI,MACJ,GAAI,MACJ,SAAU,OACV,KAAM,OACN,QAAS,WACT,UAAW,aACX,QAAS,WACT,MAAO,QACX,CACA,EAEaC,EAAQ,CACnB,cAAeC,EAAoB,CACjC,aAAcb,EACd,aAAcC,EACd,cAAgBa,GAAU,SAASA,EAAO,EAAE,CAChD,CAAG,EAED,IAAKC,EAAa,CAChB,cAAeb,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,QAASY,EAAa,CACpB,cAAeX,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,MACnB,cAAgBW,GAAU,OAAOA,CAAK,EAAI,CAC9C,CAAG,EAED,MAAOD,EAAa,CAClB,cAAeT,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,IAAKQ,EAAa,CAChB,cAAeP,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,UAAWM,EAAa,CACtB,cAAeL,EACf,kBAAmB,MACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,CACH,EChIaM,EAAO,CAClB,KAAM,QACN,eAAgB5C,EAChB,WAAYS,EACZ,eAAgBG,EAChB,SAAUY,EACV,MAAOe,EACP,QAAS,CAEP,aAAc,EACd,sBAAuB,CAC3B,CACA","x_google_ignoreList":[0,1,2,3,4,5]} \ No newline at end of file diff --git a/js/ar-MA-CisDbuvT.chunk.mjs.map.license b/js/ar-MA-CisDbuvT.chunk.mjs.map.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/ar-MA-CisDbuvT.chunk.mjs.map.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/ar-SA-Cb6z3-HB.chunk.mjs b/js/ar-SA-Cb6z3-HB.chunk.mjs new file mode 100644 index 00000000..0bb3f486 --- /dev/null +++ b/js/ar-SA-Cb6z3-HB.chunk.mjs @@ -0,0 +1,3 @@ +/*! third party licenses: js/vendor.LICENSE.txt */ +import{b as r,c as o,d as i,e as A}from"./index-Cr1DLTt7.chunk.mjs";import"./user_migration-personalSettings.mjs";import"./be-tarask-CzbVxLq7.chunk.mjs";const d={lessThanXSeconds:{one:"أقل من ثانية واحدة",two:"أقل من ثانتين",threeToTen:"أقل من {{count}} ثواني",other:"أقل من {{count}} ثانية"},xSeconds:{one:"ثانية واحدة",two:"ثانتين",threeToTen:"{{count}} ثواني",other:"{{count}} ثانية"},halfAMinute:"نصف دقيقة",lessThanXMinutes:{one:"أقل من دقيقة",two:"أقل من دقيقتين",threeToTen:"أقل من {{count}} دقائق",other:"أقل من {{count}} دقيقة"},xMinutes:{one:"دقيقة واحدة",two:"دقيقتين",threeToTen:"{{count}} دقائق",other:"{{count}} دقيقة"},aboutXHours:{one:"ساعة واحدة تقريباً",two:"ساعتين تقريباً",threeToTen:"{{count}} ساعات تقريباً",other:"{{count}} ساعة تقريباً"},xHours:{one:"ساعة واحدة",two:"ساعتين",threeToTen:"{{count}} ساعات",other:"{{count}} ساعة"},xDays:{one:"يوم واحد",two:"يومين",threeToTen:"{{count}} أيام",other:"{{count}} يوم"},aboutXWeeks:{one:"أسبوع واحد تقريباً",two:"أسبوعين تقريباً",threeToTen:"{{count}} أسابيع تقريباً",other:"{{count}} أسبوع تقريباً"},xWeeks:{one:"أسبوع واحد",two:"أسبوعين",threeToTen:"{{count}} أسابيع",other:"{{count}} أسبوع"},aboutXMonths:{one:"شهر واحد تقريباً",two:"شهرين تقريباً",threeToTen:"{{count}} أشهر تقريباً",other:"{{count}} شهر تقريباً"},xMonths:{one:"شهر واحد",two:"شهرين",threeToTen:"{{count}} أشهر",other:"{{count}} شهر"},aboutXYears:{one:"عام واحد تقريباً",two:"عامين تقريباً",threeToTen:"{{count}} أعوام تقريباً",other:"{{count}} عام تقريباً"},xYears:{one:"عام واحد",two:"عامين",threeToTen:"{{count}} أعوام",other:"{{count}} عام"},overXYears:{one:"أكثر من عام",two:"أكثر من عامين",threeToTen:"أكثر من {{count}} أعوام",other:"أكثر من {{count}} عام"},almostXYears:{one:"عام واحد تقريباً",two:"عامين تقريباً",threeToTen:"{{count}} أعوام تقريباً",other:"{{count}} عام تقريباً"}},h=(u,t,a)=>{let e;const n=d[u];return typeof n=="string"?e=n:t===1?e=n.one:t===2?e=n.two:t<=10?e=n.threeToTen.replace("{{count}}",String(t)):e=n.other.replace("{{count}}",String(t)),a?.addSuffix?a.comparison&&a.comparison>0?"في خلال "+e:"منذ "+e:e},s={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},m={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},c={full:"{{date}} 'عند' {{time}}",long:"{{date}} 'عند' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},l={date:r({formats:s,defaultWidth:"full"}),time:r({formats:m,defaultWidth:"full"}),dateTime:r({formats:c,defaultWidth:"full"})},B={lastWeek:"'أخر' eeee 'عند' p",yesterday:"'أمس عند' p",today:"'اليوم عند' p",tomorrow:"'غداً عند' p",nextWeek:"eeee 'عند' p",other:"P"},w=(u,t,a,e)=>B[u],g={narrow:["ق","ب"],abbreviated:["ق.م.","ب.م."],wide:["قبل الميلاد","بعد الميلاد"]},f={narrow:["1","2","3","4"],abbreviated:["ر1","ر2","ر3","ر4"],wide:["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"]},F={narrow:["ي","ف","م","أ","م","ي","ي","أ","س","أ","ن","د"],abbreviated:["ينا","فبر","مارس","أبريل","مايو","يونـ","يولـ","أغسـ","سبتـ","أكتـ","نوفـ","ديسـ"],wide:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"]},T={narrow:["ح","ن","ث","ر","خ","ج","س"],short:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],abbreviated:["أحد","اثنـ","ثلا","أربـ","خميـ","جمعة","سبت"],wide:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"]},p={narrow:{am:"ص",pm:"م",midnight:"ن",noon:"ظ",morning:"صباحاً",afternoon:"بعد الظهر",evening:"مساءاً",night:"ليلاً"},abbreviated:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهر",morning:"صباحاً",afternoon:"بعد الظهر",evening:"مساءاً",night:"ليلاً"},wide:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهر",morning:"صباحاً",afternoon:"بعد الظهر",evening:"مساءاً",night:"ليلاً"}},b={narrow:{am:"ص",pm:"م",midnight:"ن",noon:"ظ",morning:"في الصباح",afternoon:"بعد الظـهر",evening:"في المساء",night:"في الليل"},abbreviated:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهر",morning:"في الصباح",afternoon:"بعد الظهر",evening:"في المساء",night:"في الليل"},wide:{am:"ص",pm:"م",midnight:"نصف الليل",noon:"ظهر",morning:"صباحاً",afternoon:"بعد الظـهر",evening:"في المساء",night:"في الليل"}},v=u=>String(u),y={ordinalNumber:v,era:o({values:g,defaultWidth:"wide"}),quarter:o({values:f,defaultWidth:"wide",argumentCallback:u=>u-1}),month:o({values:F,defaultWidth:"wide"}),day:o({values:T,defaultWidth:"wide"}),dayPeriod:o({values:p,defaultWidth:"wide",formattingValues:b,defaultFormattingWidth:"wide"})},D=/^(\d+)(th|st|nd|rd)?/i,W=/\d+/i,M={narrow:/^(ق|ب)/i,abbreviated:/^(ق\.?\s?م\.?|ق\.?\s?م\.?\s?|a\.?\s?d\.?|c\.?\s?)/i,wide:/^(قبل الميلاد|قبل الميلاد|بعد الميلاد|بعد الميلاد)/i},P={any:[/^قبل/i,/^بعد/i]},x={narrow:/^[1234]/i,abbreviated:/^ر[1234]/i,wide:/^الربع [1234]/i},E={any:[/1/i,/2/i,/3/i,/4/i]},k={narrow:/^[يفمأمسند]/i,abbreviated:/^(ين|ف|مار|أب|ماي|يون|يول|أغ|س|أك|ن|د)/i,wide:/^(ين|ف|مار|أب|ماي|يون|يول|أغ|س|أك|ن|د)/i},S={narrow:[/^ي/i,/^ف/i,/^م/i,/^أ/i,/^م/i,/^ي/i,/^ي/i,/^أ/i,/^س/i,/^أ/i,/^ن/i,/^د/i],any:[/^ين/i,/^ف/i,/^مار/i,/^أب/i,/^ماي/i,/^يون/i,/^يول/i,/^أغ/i,/^س/i,/^أك/i,/^ن/i,/^د/i]},C={narrow:/^[حنثرخجس]/i,short:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,abbreviated:/^(أحد|اثن|ثلا|أرب|خمي|جمعة|سبت)/i,wide:/^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i},X={narrow:[/^ح/i,/^ن/i,/^ث/i,/^ر/i,/^خ/i,/^ج/i,/^س/i],wide:[/^الأحد/i,/^الاثنين/i,/^الثلاثاء/i,/^الأربعاء/i,/^الخميس/i,/^الجمعة/i,/^السبت/i],any:[/^أح/i,/^اث/i,/^ث/i,/^أر/i,/^خ/i,/^ج/i,/^س/i]},z={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},Y={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},q={ordinalNumber:A({matchPattern:D,parsePattern:W,valueCallback:u=>parseInt(u,10)}),era:i({matchPatterns:M,defaultMatchWidth:"wide",parsePatterns:P,defaultParseWidth:"any"}),quarter:i({matchPatterns:x,defaultMatchWidth:"wide",parsePatterns:E,defaultParseWidth:"any",valueCallback:u=>u+1}),month:i({matchPatterns:k,defaultMatchWidth:"wide",parsePatterns:S,defaultParseWidth:"any"}),day:i({matchPatterns:C,defaultMatchWidth:"wide",parsePatterns:X,defaultParseWidth:"any"}),dayPeriod:i({matchPatterns:z,defaultMatchWidth:"any",parsePatterns:Y,defaultParseWidth:"any"})},V={code:"ar-SA",formatDistance:h,formatLong:l,formatRelative:w,localize:y,match:q,options:{weekStartsOn:0,firstWeekContainsDate:1}};export{V as arSA}; +//# sourceMappingURL=ar-SA-Cb6z3-HB.chunk.mjs.map diff --git a/js/ar-SA-Cb6z3-HB.chunk.mjs.license b/js/ar-SA-Cb6z3-HB.chunk.mjs.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/ar-SA-Cb6z3-HB.chunk.mjs.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/ar-SA-Cb6z3-HB.chunk.mjs.map b/js/ar-SA-Cb6z3-HB.chunk.mjs.map new file mode 100644 index 00000000..192fc810 --- /dev/null +++ b/js/ar-SA-Cb6z3-HB.chunk.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"ar-SA-Cb6z3-HB.chunk.mjs","sources":["../node_modules/date-fns/locale/ar-SA/_lib/formatDistance.js","../node_modules/date-fns/locale/ar-SA/_lib/formatLong.js","../node_modules/date-fns/locale/ar-SA/_lib/formatRelative.js","../node_modules/date-fns/locale/ar-SA/_lib/localize.js","../node_modules/date-fns/locale/ar-SA/_lib/match.js","../node_modules/date-fns/locale/ar-SA.js"],"sourcesContent":["const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"أقل من ثانية واحدة\",\n two: \"أقل من ثانتين\",\n threeToTen: \"أقل من {{count}} ثواني\",\n other: \"أقل من {{count}} ثانية\",\n },\n\n xSeconds: {\n one: \"ثانية واحدة\",\n two: \"ثانتين\",\n threeToTen: \"{{count}} ثواني\",\n other: \"{{count}} ثانية\",\n },\n\n halfAMinute: \"نصف دقيقة\",\n\n lessThanXMinutes: {\n one: \"أقل من دقيقة\",\n two: \"أقل من دقيقتين\",\n threeToTen: \"أقل من {{count}} دقائق\",\n other: \"أقل من {{count}} دقيقة\",\n },\n\n xMinutes: {\n one: \"دقيقة واحدة\",\n two: \"دقيقتين\",\n threeToTen: \"{{count}} دقائق\",\n other: \"{{count}} دقيقة\",\n },\n\n aboutXHours: {\n one: \"ساعة واحدة تقريباً\",\n two: \"ساعتين تقريباً\",\n threeToTen: \"{{count}} ساعات تقريباً\",\n other: \"{{count}} ساعة تقريباً\",\n },\n\n xHours: {\n one: \"ساعة واحدة\",\n two: \"ساعتين\",\n threeToTen: \"{{count}} ساعات\",\n other: \"{{count}} ساعة\",\n },\n\n xDays: {\n one: \"يوم واحد\",\n two: \"يومين\",\n threeToTen: \"{{count}} أيام\",\n other: \"{{count}} يوم\",\n },\n\n aboutXWeeks: {\n one: \"أسبوع واحد تقريباً\",\n two: \"أسبوعين تقريباً\",\n threeToTen: \"{{count}} أسابيع تقريباً\",\n other: \"{{count}} أسبوع تقريباً\",\n },\n\n xWeeks: {\n one: \"أسبوع واحد\",\n two: \"أسبوعين\",\n threeToTen: \"{{count}} أسابيع\",\n other: \"{{count}} أسبوع\",\n },\n\n aboutXMonths: {\n one: \"شهر واحد تقريباً\",\n two: \"شهرين تقريباً\",\n threeToTen: \"{{count}} أشهر تقريباً\",\n other: \"{{count}} شهر تقريباً\",\n },\n\n xMonths: {\n one: \"شهر واحد\",\n two: \"شهرين\",\n threeToTen: \"{{count}} أشهر\",\n other: \"{{count}} شهر\",\n },\n\n aboutXYears: {\n one: \"عام واحد تقريباً\",\n two: \"عامين تقريباً\",\n threeToTen: \"{{count}} أعوام تقريباً\",\n other: \"{{count}} عام تقريباً\",\n },\n\n xYears: {\n one: \"عام واحد\",\n two: \"عامين\",\n threeToTen: \"{{count}} أعوام\",\n other: \"{{count}} عام\",\n },\n\n overXYears: {\n one: \"أكثر من عام\",\n two: \"أكثر من عامين\",\n threeToTen: \"أكثر من {{count}} أعوام\",\n other: \"أكثر من {{count}} عام\",\n },\n\n almostXYears: {\n one: \"عام واحد تقريباً\",\n two: \"عامين تقريباً\",\n threeToTen: \"{{count}} أعوام تقريباً\",\n other: \"{{count}} عام تقريباً\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else if (count === 2) {\n result = tokenValue.two;\n } else if (count <= 10) {\n result = tokenValue.threeToTen.replace(\"{{count}}\", String(count));\n } else {\n result = tokenValue.other.replace(\"{{count}}\", String(count));\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"في خلال \" + result;\n } else {\n return \"منذ \" + result;\n }\n }\n\n return result;\n};\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'عند' {{time}}\",\n long: \"{{date}} 'عند' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'أخر' eeee 'عند' p\",\n yesterday: \"'أمس عند' p\",\n today: \"'اليوم عند' p\",\n tomorrow: \"'غداً عند' p\",\n nextWeek: \"eeee 'عند' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"ق\", \"ب\"],\n abbreviated: [\"ق.م.\", \"ب.م.\"],\n wide: [\"قبل الميلاد\", \"بعد الميلاد\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"ر1\", \"ر2\", \"ر3\", \"ر4\"],\n wide: [\"الربع الأول\", \"الربع الثاني\", \"الربع الثالث\", \"الربع الرابع\"],\n};\n\nconst monthValues = {\n narrow: [\"ي\", \"ف\", \"م\", \"أ\", \"م\", \"ي\", \"ي\", \"أ\", \"س\", \"أ\", \"ن\", \"د\"],\n abbreviated: [\n \"ينا\",\n \"فبر\",\n \"مارس\",\n \"أبريل\",\n \"مايو\",\n \"يونـ\",\n \"يولـ\",\n \"أغسـ\",\n \"سبتـ\",\n \"أكتـ\",\n \"نوفـ\",\n \"ديسـ\",\n ],\n\n wide: [\n \"يناير\",\n \"فبراير\",\n \"مارس\",\n \"أبريل\",\n \"مايو\",\n \"يونيو\",\n \"يوليو\",\n \"أغسطس\",\n \"سبتمبر\",\n \"أكتوبر\",\n \"نوفمبر\",\n \"ديسمبر\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"ح\", \"ن\", \"ث\", \"ر\", \"خ\", \"ج\", \"س\"],\n short: [\"أحد\", \"اثنين\", \"ثلاثاء\", \"أربعاء\", \"خميس\", \"جمعة\", \"سبت\"],\n abbreviated: [\"أحد\", \"اثنـ\", \"ثلا\", \"أربـ\", \"خميـ\", \"جمعة\", \"سبت\"],\n wide: [\n \"الأحد\",\n \"الاثنين\",\n \"الثلاثاء\",\n \"الأربعاء\",\n \"الخميس\",\n \"الجمعة\",\n \"السبت\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"ن\",\n noon: \"ظ\",\n morning: \"صباحاً\",\n afternoon: \"بعد الظهر\",\n evening: \"مساءاً\",\n night: \"ليلاً\",\n },\n abbreviated: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"نصف الليل\",\n noon: \"ظهر\",\n morning: \"صباحاً\",\n afternoon: \"بعد الظهر\",\n evening: \"مساءاً\",\n night: \"ليلاً\",\n },\n wide: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"نصف الليل\",\n noon: \"ظهر\",\n morning: \"صباحاً\",\n afternoon: \"بعد الظهر\",\n evening: \"مساءاً\",\n night: \"ليلاً\",\n },\n};\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"ن\",\n noon: \"ظ\",\n morning: \"في الصباح\",\n afternoon: \"بعد الظـهر\",\n evening: \"في المساء\",\n night: \"في الليل\",\n },\n abbreviated: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"نصف الليل\",\n noon: \"ظهر\",\n morning: \"في الصباح\",\n afternoon: \"بعد الظهر\",\n evening: \"في المساء\",\n night: \"في الليل\",\n },\n wide: {\n am: \"ص\",\n pm: \"م\",\n midnight: \"نصف الليل\",\n noon: \"ظهر\",\n morning: \"صباحاً\",\n afternoon: \"بعد الظـهر\",\n evening: \"في المساء\",\n night: \"في الليل\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber) => {\n return String(dirtyNumber);\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(ق|ب)/i,\n abbreviated: /^(ق\\.?\\s?م\\.?|ق\\.?\\s?م\\.?\\s?|a\\.?\\s?d\\.?|c\\.?\\s?)/i,\n wide: /^(قبل الميلاد|قبل الميلاد|بعد الميلاد|بعد الميلاد)/i,\n};\nconst parseEraPatterns = {\n any: [/^قبل/i, /^بعد/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^ر[1234]/i,\n wide: /^الربع [1234]/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[يفمأمسند]/i,\n abbreviated: /^(ين|ف|مار|أب|ماي|يون|يول|أغ|س|أك|ن|د)/i,\n wide: /^(ين|ف|مار|أب|ماي|يون|يول|أغ|س|أك|ن|د)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^ي/i,\n /^ف/i,\n /^م/i,\n /^أ/i,\n /^م/i,\n /^ي/i,\n /^ي/i,\n /^أ/i,\n /^س/i,\n /^أ/i,\n /^ن/i,\n /^د/i,\n ],\n\n any: [\n /^ين/i,\n /^ف/i,\n /^مار/i,\n /^أب/i,\n /^ماي/i,\n /^يون/i,\n /^يول/i,\n /^أغ/i,\n /^س/i,\n /^أك/i,\n /^ن/i,\n /^د/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[حنثرخجس]/i,\n short: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,\n abbreviated: /^(أحد|اثن|ثلا|أرب|خمي|جمعة|سبت)/i,\n wide: /^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^ح/i, /^ن/i, /^ث/i, /^ر/i, /^خ/i, /^ج/i, /^س/i],\n wide: [\n /^الأحد/i,\n /^الاثنين/i,\n /^الثلاثاء/i,\n /^الأربعاء/i,\n /^الخميس/i,\n /^الجمعة/i,\n /^السبت/i,\n ],\n\n any: [/^أح/i, /^اث/i, /^ث/i, /^أر/i, /^خ/i, /^ج/i, /^س/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./ar-SA/_lib/formatDistance.js\";\nimport { formatLong } from \"./ar-SA/_lib/formatLong.js\";\nimport { formatRelative } from \"./ar-SA/_lib/formatRelative.js\";\nimport { localize } from \"./ar-SA/_lib/localize.js\";\nimport { match } from \"./ar-SA/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary Arabic locale (Sauid Arabic).\n * @language Arabic\n * @iso-639-2 ara\n * @author Dhaifallah Alwadani [@dalwadani](https://github.com/dalwadani)\n */\nexport const arSA = {\n code: \"ar-SA\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default arSA;\n"],"names":["formatDistanceLocale","formatDistance","token","count","options","result","tokenValue","dateFormats","timeFormats","dateTimeFormats","formatLong","buildFormatLongFn","formatRelativeLocale","formatRelative","_date","_baseDate","_options","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","dirtyNumber","localize","buildLocalizeFn","quarter","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","match","buildMatchPatternFn","value","buildMatchFn","index","arSA"],"mappings":";yJAAA,MAAMA,EAAuB,CAC3B,iBAAkB,CAChB,IAAK,qBACL,IAAK,gBACL,WAAY,yBACZ,MAAO,wBACX,EAEE,SAAU,CACR,IAAK,cACL,IAAK,SACL,WAAY,kBACZ,MAAO,iBACX,EAEE,YAAa,YAEb,iBAAkB,CAChB,IAAK,eACL,IAAK,iBACL,WAAY,yBACZ,MAAO,wBACX,EAEE,SAAU,CACR,IAAK,cACL,IAAK,UACL,WAAY,kBACZ,MAAO,iBACX,EAEE,YAAa,CACX,IAAK,qBACL,IAAK,iBACL,WAAY,0BACZ,MAAO,wBACX,EAEE,OAAQ,CACN,IAAK,aACL,IAAK,SACL,WAAY,kBACZ,MAAO,gBACX,EAEE,MAAO,CACL,IAAK,WACL,IAAK,QACL,WAAY,iBACZ,MAAO,eACX,EAEE,YAAa,CACX,IAAK,qBACL,IAAK,kBACL,WAAY,2BACZ,MAAO,yBACX,EAEE,OAAQ,CACN,IAAK,aACL,IAAK,UACL,WAAY,mBACZ,MAAO,iBACX,EAEE,aAAc,CACZ,IAAK,mBACL,IAAK,gBACL,WAAY,yBACZ,MAAO,uBACX,EAEE,QAAS,CACP,IAAK,WACL,IAAK,QACL,WAAY,iBACZ,MAAO,eACX,EAEE,YAAa,CACX,IAAK,mBACL,IAAK,gBACL,WAAY,0BACZ,MAAO,uBACX,EAEE,OAAQ,CACN,IAAK,WACL,IAAK,QACL,WAAY,kBACZ,MAAO,eACX,EAEE,WAAY,CACV,IAAK,cACL,IAAK,gBACL,WAAY,0BACZ,MAAO,uBACX,EAEE,aAAc,CACZ,IAAK,mBACL,IAAK,gBACL,WAAY,0BACZ,MAAO,uBACX,CACA,EAEaC,EAAiB,CAACC,EAAOC,EAAOC,IAAY,CACvD,IAAIC,EAEJ,MAAMC,EAAaN,EAAqBE,CAAK,EAa7C,OAZI,OAAOI,GAAe,SACxBD,EAASC,EACAH,IAAU,EACnBE,EAASC,EAAW,IACXH,IAAU,EACnBE,EAASC,EAAW,IACXH,GAAS,GAClBE,EAASC,EAAW,WAAW,QAAQ,YAAa,OAAOH,CAAK,CAAC,EAEjEE,EAASC,EAAW,MAAM,QAAQ,YAAa,OAAOH,CAAK,CAAC,EAG1DC,GAAS,UACPA,EAAQ,YAAcA,EAAQ,WAAa,EACtC,WAAaC,EAEb,OAASA,EAIbA,CACT,ECpIME,EAAc,CAClB,KAAM,mBACN,KAAM,aACN,OAAQ,WACR,MAAO,YACT,EAEMC,EAAc,CAClB,KAAM,iBACN,KAAM,cACN,OAAQ,YACR,MAAO,QACT,EAEMC,EAAkB,CACtB,KAAM,0BACN,KAAM,0BACN,OAAQ,qBACR,MAAO,oBACT,EAEaC,EAAa,CACxB,KAAMC,EAAkB,CACtB,QAASJ,EACT,aAAc,MAClB,CAAG,EAED,KAAMI,EAAkB,CACtB,QAASH,EACT,aAAc,MAClB,CAAG,EAED,SAAUG,EAAkB,CAC1B,QAASF,EACT,aAAc,MAClB,CAAG,CACH,ECtCMG,EAAuB,CAC3B,SAAU,qBACV,UAAW,cACX,MAAO,gBACP,SAAU,eACV,SAAU,eACV,MAAO,GACT,EAEaC,EAAiB,CAACX,EAAOY,EAAOC,EAAWC,IACtDJ,EAAqBV,CAAK,ECRtBe,EAAY,CAChB,OAAQ,CAAC,IAAK,GAAG,EACjB,YAAa,CAAC,OAAQ,MAAM,EAC5B,KAAM,CAAC,cAAe,aAAa,CACrC,EAEMC,EAAgB,CACpB,OAAQ,CAAC,IAAK,IAAK,IAAK,GAAG,EAC3B,YAAa,CAAC,KAAM,KAAM,KAAM,IAAI,EACpC,KAAM,CAAC,cAAe,eAAgB,eAAgB,cAAc,CACtE,EAEMC,EAAc,CAClB,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EACnE,YAAa,CACX,MACA,MACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACJ,EAEE,KAAM,CACJ,QACA,SACA,OACA,QACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,QACJ,CACA,EAEMC,EAAY,CAChB,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAC1C,MAAO,CAAC,MAAO,QAAS,SAAU,SAAU,OAAQ,OAAQ,KAAK,EACjE,YAAa,CAAC,MAAO,OAAQ,MAAO,OAAQ,OAAQ,OAAQ,KAAK,EACjE,KAAM,CACJ,QACA,UACA,WACA,WACA,SACA,SACA,OACJ,CACA,EAEMC,EAAkB,CACtB,OAAQ,CACN,GAAI,IACJ,GAAI,IACJ,SAAU,IACV,KAAM,IACN,QAAS,SACT,UAAW,YACX,QAAS,SACT,MAAO,OACX,EACE,YAAa,CACX,GAAI,IACJ,GAAI,IACJ,SAAU,YACV,KAAM,MACN,QAAS,SACT,UAAW,YACX,QAAS,SACT,MAAO,OACX,EACE,KAAM,CACJ,GAAI,IACJ,GAAI,IACJ,SAAU,YACV,KAAM,MACN,QAAS,SACT,UAAW,YACX,QAAS,SACT,MAAO,OACX,CACA,EACMC,EAA4B,CAChC,OAAQ,CACN,GAAI,IACJ,GAAI,IACJ,SAAU,IACV,KAAM,IACN,QAAS,YACT,UAAW,aACX,QAAS,YACT,MAAO,UACX,EACE,YAAa,CACX,GAAI,IACJ,GAAI,IACJ,SAAU,YACV,KAAM,MACN,QAAS,YACT,UAAW,YACX,QAAS,YACT,MAAO,UACX,EACE,KAAM,CACJ,GAAI,IACJ,GAAI,IACJ,SAAU,YACV,KAAM,MACN,QAAS,SACT,UAAW,aACX,QAAS,YACT,MAAO,UACX,CACA,EAEMC,EAAiBC,GACd,OAAOA,CAAW,EAGdC,EAAW,CACtB,cAAAF,EAEA,IAAKG,EAAgB,CACnB,OAAQT,EACR,aAAc,MAClB,CAAG,EAED,QAASS,EAAgB,CACvB,OAAQR,EACR,aAAc,OACd,iBAAmBS,GAAYA,EAAU,CAC7C,CAAG,EAED,MAAOD,EAAgB,CACrB,OAAQP,EACR,aAAc,MAClB,CAAG,EAED,IAAKO,EAAgB,CACnB,OAAQN,EACR,aAAc,MAClB,CAAG,EAED,UAAWM,EAAgB,CACzB,OAAQL,EACR,aAAc,OACd,iBAAkBC,EAClB,uBAAwB,MAC5B,CAAG,CACH,EC9JMM,EAA4B,wBAC5BC,EAA4B,OAE5BC,EAAmB,CACvB,OAAQ,UACR,YAAa,qDACb,KAAM,qDACR,EACMC,EAAmB,CACvB,IAAK,CAAC,QAAS,OAAO,CACxB,EAEMC,EAAuB,CAC3B,OAAQ,WACR,YAAa,YACb,KAAM,gBACR,EACMC,EAAuB,CAC3B,IAAK,CAAC,KAAM,KAAM,KAAM,IAAI,CAC9B,EAEMC,EAAqB,CACzB,OAAQ,eACR,YAAa,0CACb,KAAM,yCACR,EACMC,EAAqB,CACzB,OAAQ,CACN,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,EAEE,IAAK,CACH,OACA,MACA,QACA,OACA,QACA,QACA,QACA,OACA,MACA,OACA,MACA,KACJ,CACA,EAEMC,EAAmB,CACvB,OAAQ,cACR,MAAO,4CACP,YAAa,mCACb,KAAM,yDACR,EACMC,EAAmB,CACvB,OAAQ,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EACxD,KAAM,CACJ,UACA,YACA,aACA,aACA,WACA,WACA,SACJ,EAEE,IAAK,CAAC,OAAQ,OAAQ,MAAO,OAAQ,MAAO,MAAO,KAAK,CAC1D,EAEMC,EAAyB,CAC7B,OAAQ,6DACR,IAAK,gFACP,EACMC,EAAyB,CAC7B,IAAK,CACH,GAAI,MACJ,GAAI,MACJ,SAAU,OACV,KAAM,OACN,QAAS,WACT,UAAW,aACX,QAAS,WACT,MAAO,QACX,CACA,EAEaC,EAAQ,CACnB,cAAeC,EAAoB,CACjC,aAAcb,EACd,aAAcC,EACd,cAAgBa,GAAU,SAASA,EAAO,EAAE,CAChD,CAAG,EAED,IAAKC,EAAa,CAChB,cAAeb,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,QAASY,EAAa,CACpB,cAAeX,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,MACnB,cAAgBW,GAAUA,EAAQ,CACtC,CAAG,EAED,MAAOD,EAAa,CAClB,cAAeT,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,IAAKQ,EAAa,CAChB,cAAeP,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,UAAWM,EAAa,CACtB,cAAeL,EACf,kBAAmB,MACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,CACH,EChIaM,EAAO,CAClB,KAAM,QACN,eAAgB5C,EAChB,WAAYS,EACZ,eAAgBG,EAChB,SAAUY,EACV,MAAOe,EACP,QAAS,CACP,aAAc,EACd,sBAAuB,CAC3B,CACA","x_google_ignoreList":[0,1,2,3,4,5]} \ No newline at end of file diff --git a/js/ar-SA-Cb6z3-HB.chunk.mjs.map.license b/js/ar-SA-Cb6z3-HB.chunk.mjs.map.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/ar-SA-Cb6z3-HB.chunk.mjs.map.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/ar-TN-DkotlBtK.chunk.mjs b/js/ar-TN-DkotlBtK.chunk.mjs new file mode 100644 index 00000000..e253962b --- /dev/null +++ b/js/ar-TN-DkotlBtK.chunk.mjs @@ -0,0 +1,3 @@ +/*! third party licenses: js/vendor.LICENSE.txt */ +import{b as r,c as o,d as a,e as A}from"./index-Cr1DLTt7.chunk.mjs";import"./user_migration-personalSettings.mjs";import"./be-tarask-CzbVxLq7.chunk.mjs";const d={lessThanXSeconds:{one:"أقل من ثانية",two:"أقل من زوز ثواني",threeToTen:"أقل من {{count}} ثواني",other:"أقل من {{count}} ثانية"},xSeconds:{one:"ثانية",two:"زوز ثواني",threeToTen:"{{count}} ثواني",other:"{{count}} ثانية"},halfAMinute:"نص دقيقة",lessThanXMinutes:{one:"أقل من دقيقة",two:"أقل من دقيقتين",threeToTen:"أقل من {{count}} دقايق",other:"أقل من {{count}} دقيقة"},xMinutes:{one:"دقيقة",two:"دقيقتين",threeToTen:"{{count}} دقايق",other:"{{count}} دقيقة"},aboutXHours:{one:"ساعة تقريب",two:"ساعتين تقريب",threeToTen:"{{count}} سوايع تقريب",other:"{{count}} ساعة تقريب"},xHours:{one:"ساعة",two:"ساعتين",threeToTen:"{{count}} سوايع",other:"{{count}} ساعة"},xDays:{one:"نهار",two:"نهارين",threeToTen:"{{count}} أيام",other:"{{count}} يوم"},aboutXWeeks:{one:"جمعة تقريب",two:"جمعتين تقريب",threeToTen:"{{count}} جماع تقريب",other:"{{count}} جمعة تقريب"},xWeeks:{one:"جمعة",two:"جمعتين",threeToTen:"{{count}} جماع",other:"{{count}} جمعة"},aboutXMonths:{one:"شهر تقريب",two:"شهرين تقريب",threeToTen:"{{count}} أشهرة تقريب",other:"{{count}} شهر تقريب"},xMonths:{one:"شهر",two:"شهرين",threeToTen:"{{count}} أشهرة",other:"{{count}} شهر"},aboutXYears:{one:"عام تقريب",two:"عامين تقريب",threeToTen:"{{count}} أعوام تقريب",other:"{{count}} عام تقريب"},xYears:{one:"عام",two:"عامين",threeToTen:"{{count}} أعوام",other:"{{count}} عام"},overXYears:{one:"أكثر من عام",two:"أكثر من عامين",threeToTen:"أكثر من {{count}} أعوام",other:"أكثر من {{count}} عام"},almostXYears:{one:"عام تقريب",two:"عامين تقريب",threeToTen:"{{count}} أعوام تقريب",other:"{{count}} عام تقريب"}},h=(u,n,i)=>{const t=d[u];let e;return typeof t=="string"?e=t:n===1?e=t.one:n===2?e=t.two:n<=10?e=t.threeToTen.replace("{{count}}",String(n)):e=t.other.replace("{{count}}",String(n)),i?.addSuffix?i.comparison&&i.comparison>0?"في "+e:"عندو "+e:e},s={full:"EEEE، do MMMM y",long:"do MMMM y",medium:"d MMM y",short:"dd/MM/yyyy"},m={full:"HH:mm:ss",long:"HH:mm:ss",medium:"HH:mm:ss",short:"HH:mm"},l={full:"{{date}} 'مع' {{time}}",long:"{{date}} 'مع' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},c={date:r({formats:s,defaultWidth:"full"}),time:r({formats:m,defaultWidth:"full"}),dateTime:r({formats:l,defaultWidth:"full"})},w={lastWeek:"eeee 'إلي فات مع' p",yesterday:"'البارح مع' p",today:"'اليوم مع' p",tomorrow:"'غدوة مع' p",nextWeek:"eeee 'الجمعة الجاية مع' p 'نهار'",other:"P"},f=u=>w[u],g={narrow:["ق","ب"],abbreviated:["ق.م.","ب.م."],wide:["قبل الميلاد","بعد الميلاد"]},T={narrow:["1","2","3","4"],abbreviated:["ر1","ر2","ر3","ر4"],wide:["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"]},b={narrow:["د","ن","أ","س","أ","ج","ج","م","أ","م","ف","ج"],abbreviated:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],wide:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"]},p={narrow:["ح","ن","ث","ر","خ","ج","س"],short:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],abbreviated:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],wide:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"]},y={narrow:{am:"ص",pm:"ع",morning:"الصباح",noon:"القايلة",afternoon:"بعد القايلة",evening:"العشية",night:"الليل",midnight:"نص الليل"},abbreviated:{am:"ص",pm:"ع",morning:"الصباح",noon:"القايلة",afternoon:"بعد القايلة",evening:"العشية",night:"الليل",midnight:"نص الليل"},wide:{am:"ص",pm:"ع",morning:"الصباح",noon:"القايلة",afternoon:"بعد القايلة",evening:"العشية",night:"الليل",midnight:"نص الليل"}},C={narrow:{am:"ص",pm:"ع",morning:"في الصباح",noon:"في القايلة",afternoon:"بعد القايلة",evening:"في العشية",night:"في الليل",midnight:"نص الليل"},abbreviated:{am:"ص",pm:"ع",morning:"في الصباح",noon:"في القايلة",afternoon:"بعد القايلة",evening:"في العشية",night:"في الليل",midnight:"نص الليل"},wide:{am:"ص",pm:"ع",morning:"في الصباح",noon:"في القايلة",afternoon:"بعد القايلة",evening:"في العشية",night:"في الليل",midnight:"نص الليل"}},v=u=>String(u),F={ordinalNumber:v,era:o({values:g,defaultWidth:"wide"}),quarter:o({values:T,defaultWidth:"wide",argumentCallback:u=>u-1}),month:o({values:b,defaultWidth:"wide"}),day:o({values:p,defaultWidth:"wide"}),dayPeriod:o({values:y,defaultWidth:"wide",formattingValues:C,defaultFormattingWidth:"wide"})},B=/^(\d+)(th|st|nd|rd)?/i,W=/\d+/i,M={narrow:/[قب]/,abbreviated:/[قب]\.م\./,wide:/(قبل|بعد) الميلاد/},P={any:[/قبل/,/بعد/]},D={narrow:/^[1234]/i,abbreviated:/ر[1234]/,wide:/الربع (الأول|الثاني|الثالث|الرابع)/},x={any:[/1/i,/2/i,/3/i,/4/i]},H={narrow:/^[جفمأسند]/,abbreviated:/^(جانفي|فيفري|مارس|أفريل|ماي|جوان|جويلية|أوت|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/,wide:/^(جانفي|فيفري|مارس|أفريل|ماي|جوان|جويلية|أوت|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/},k={narrow:[/^ج/i,/^ف/i,/^م/i,/^أ/i,/^م/i,/^ج/i,/^ج/i,/^أ/i,/^س/i,/^أ/i,/^ن/i,/^د/i],any:[/^جانفي/i,/^فيفري/i,/^مارس/i,/^أفريل/i,/^ماي/i,/^جوان/i,/^جويلية/i,/^أوت/i,/^سبتمبر/i,/^أكتوبر/i,/^نوفمبر/i,/^ديسمبر/i]},E={narrow:/^[حنثرخجس]/i,short:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,abbreviated:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,wide:/^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i},X={narrow:[/^ح/i,/^ن/i,/^ث/i,/^ر/i,/^خ/i,/^ج/i,/^س/i],wide:[/^الأحد/i,/^الاثنين/i,/^الثلاثاء/i,/^الأربعاء/i,/^الخميس/i,/^الجمعة/i,/^السبت/i],any:[/^أح/i,/^اث/i,/^ث/i,/^أر/i,/^خ/i,/^ج/i,/^س/i]},S={narrow:/^(ص|ع|ن ل|ل|(في|مع) (صباح|قايلة|عشية|ليل))/,any:/^([صع]|نص الليل|قايلة|(في|مع) (صباح|قايلة|عشية|ليل))/},N={any:{am:/^ص/,pm:/^ع/,midnight:/نص الليل/,noon:/قايلة/,afternoon:/بعد القايلة/,morning:/صباح/,evening:/عشية/,night:/ليل/}},Y={ordinalNumber:A({matchPattern:B,parsePattern:W,valueCallback:u=>parseInt(u,10)}),era:a({matchPatterns:M,defaultMatchWidth:"wide",parsePatterns:P,defaultParseWidth:"any"}),quarter:a({matchPatterns:D,defaultMatchWidth:"wide",parsePatterns:x,defaultParseWidth:"any",valueCallback:u=>u+1}),month:a({matchPatterns:H,defaultMatchWidth:"wide",parsePatterns:k,defaultParseWidth:"any"}),day:a({matchPatterns:E,defaultMatchWidth:"wide",parsePatterns:X,defaultParseWidth:"any"}),dayPeriod:a({matchPatterns:S,defaultMatchWidth:"any",parsePatterns:N,defaultParseWidth:"any"})},O={code:"ar-TN",formatDistance:h,formatLong:c,formatRelative:f,localize:F,match:Y,options:{weekStartsOn:1,firstWeekContainsDate:1}};export{O as arTN}; +//# sourceMappingURL=ar-TN-DkotlBtK.chunk.mjs.map diff --git a/js/ar-TN-DkotlBtK.chunk.mjs.license b/js/ar-TN-DkotlBtK.chunk.mjs.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/ar-TN-DkotlBtK.chunk.mjs.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/ar-TN-DkotlBtK.chunk.mjs.map b/js/ar-TN-DkotlBtK.chunk.mjs.map new file mode 100644 index 00000000..dbc47a8d --- /dev/null +++ b/js/ar-TN-DkotlBtK.chunk.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"ar-TN-DkotlBtK.chunk.mjs","sources":["../node_modules/date-fns/locale/ar-TN/_lib/formatDistance.js","../node_modules/date-fns/locale/ar-TN/_lib/formatLong.js","../node_modules/date-fns/locale/ar-TN/_lib/formatRelative.js","../node_modules/date-fns/locale/ar-TN/_lib/localize.js","../node_modules/date-fns/locale/ar-TN/_lib/match.js","../node_modules/date-fns/locale/ar-TN.js"],"sourcesContent":["const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"أقل من ثانية\",\n two: \"أقل من زوز ثواني\",\n threeToTen: \"أقل من {{count}} ثواني\",\n other: \"أقل من {{count}} ثانية\",\n },\n\n xSeconds: {\n one: \"ثانية\",\n two: \"زوز ثواني\",\n threeToTen: \"{{count}} ثواني\",\n other: \"{{count}} ثانية\",\n },\n\n halfAMinute: \"نص دقيقة\",\n\n lessThanXMinutes: {\n one: \"أقل من دقيقة\",\n two: \"أقل من دقيقتين\",\n threeToTen: \"أقل من {{count}} دقايق\",\n other: \"أقل من {{count}} دقيقة\",\n },\n\n xMinutes: {\n one: \"دقيقة\",\n two: \"دقيقتين\",\n threeToTen: \"{{count}} دقايق\",\n other: \"{{count}} دقيقة\",\n },\n\n aboutXHours: {\n one: \"ساعة تقريب\",\n two: \"ساعتين تقريب\",\n threeToTen: \"{{count}} سوايع تقريب\",\n other: \"{{count}} ساعة تقريب\",\n },\n\n xHours: {\n one: \"ساعة\",\n two: \"ساعتين\",\n threeToTen: \"{{count}} سوايع\",\n other: \"{{count}} ساعة\",\n },\n\n xDays: {\n one: \"نهار\",\n two: \"نهارين\",\n threeToTen: \"{{count}} أيام\",\n other: \"{{count}} يوم\",\n },\n\n aboutXWeeks: {\n one: \"جمعة تقريب\",\n two: \"جمعتين تقريب\",\n threeToTen: \"{{count}} جماع تقريب\",\n other: \"{{count}} جمعة تقريب\",\n },\n\n xWeeks: {\n one: \"جمعة\",\n two: \"جمعتين\",\n threeToTen: \"{{count}} جماع\",\n other: \"{{count}} جمعة\",\n },\n\n aboutXMonths: {\n one: \"شهر تقريب\",\n two: \"شهرين تقريب\",\n threeToTen: \"{{count}} أشهرة تقريب\",\n other: \"{{count}} شهر تقريب\",\n },\n\n xMonths: {\n one: \"شهر\",\n two: \"شهرين\",\n threeToTen: \"{{count}} أشهرة\",\n other: \"{{count}} شهر\",\n },\n\n aboutXYears: {\n one: \"عام تقريب\",\n two: \"عامين تقريب\",\n threeToTen: \"{{count}} أعوام تقريب\",\n other: \"{{count}} عام تقريب\",\n },\n\n xYears: {\n one: \"عام\",\n two: \"عامين\",\n threeToTen: \"{{count}} أعوام\",\n other: \"{{count}} عام\",\n },\n\n overXYears: {\n one: \"أكثر من عام\",\n two: \"أكثر من عامين\",\n threeToTen: \"أكثر من {{count}} أعوام\",\n other: \"أكثر من {{count}} عام\",\n },\n\n almostXYears: {\n one: \"عام تقريب\",\n two: \"عامين تقريب\",\n threeToTen: \"{{count}} أعوام تقريب\",\n other: \"{{count}} عام تقريب\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n const usageGroup = formatDistanceLocale[token];\n let result;\n if (typeof usageGroup === \"string\") {\n result = usageGroup;\n } else if (count === 1) {\n result = usageGroup.one;\n } else if (count === 2) {\n result = usageGroup.two;\n } else if (count <= 10) {\n result = usageGroup.threeToTen.replace(\"{{count}}\", String(count));\n } else {\n result = usageGroup.other.replace(\"{{count}}\", String(count));\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"في \" + result;\n } else {\n return \"عندو \" + result;\n }\n }\n\n return result;\n};\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE، do MMMM y\",\n long: \"do MMMM y\",\n medium: \"d MMM y\",\n short: \"dd/MM/yyyy\",\n};\n\nconst timeFormats = {\n full: \"HH:mm:ss\",\n long: \"HH:mm:ss\",\n medium: \"HH:mm:ss\",\n short: \"HH:mm\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'مع' {{time}}\",\n long: \"{{date}} 'مع' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"eeee 'إلي فات مع' p\",\n yesterday: \"'البارح مع' p\",\n today: \"'اليوم مع' p\",\n tomorrow: \"'غدوة مع' p\",\n nextWeek: \"eeee 'الجمعة الجاية مع' p 'نهار'\",\n other: \"P\",\n};\n\nexport const formatRelative = (token) => formatRelativeLocale[token];\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"ق\", \"ب\"],\n abbreviated: [\"ق.م.\", \"ب.م.\"],\n wide: [\"قبل الميلاد\", \"بعد الميلاد\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"ر1\", \"ر2\", \"ر3\", \"ر4\"],\n wide: [\"الربع الأول\", \"الربع الثاني\", \"الربع الثالث\", \"الربع الرابع\"],\n};\n\nconst monthValues = {\n narrow: [\"د\", \"ن\", \"أ\", \"س\", \"أ\", \"ج\", \"ج\", \"م\", \"أ\", \"م\", \"ف\", \"ج\"],\n abbreviated: [\n \"جانفي\",\n \"فيفري\",\n \"مارس\",\n \"أفريل\",\n \"ماي\",\n \"جوان\",\n \"جويلية\",\n \"أوت\",\n \"سبتمبر\",\n \"أكتوبر\",\n \"نوفمبر\",\n \"ديسمبر\",\n ],\n\n wide: [\n \"جانفي\",\n \"فيفري\",\n \"مارس\",\n \"أفريل\",\n \"ماي\",\n \"جوان\",\n \"جويلية\",\n \"أوت\",\n \"سبتمبر\",\n \"أكتوبر\",\n \"نوفمبر\",\n \"ديسمبر\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"ح\", \"ن\", \"ث\", \"ر\", \"خ\", \"ج\", \"س\"],\n short: [\"أحد\", \"اثنين\", \"ثلاثاء\", \"أربعاء\", \"خميس\", \"جمعة\", \"سبت\"],\n abbreviated: [\"أحد\", \"اثنين\", \"ثلاثاء\", \"أربعاء\", \"خميس\", \"جمعة\", \"سبت\"],\n\n wide: [\n \"الأحد\",\n \"الاثنين\",\n \"الثلاثاء\",\n \"الأربعاء\",\n \"الخميس\",\n \"الجمعة\",\n \"السبت\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"ص\",\n pm: \"ع\",\n morning: \"الصباح\",\n noon: \"القايلة\",\n afternoon: \"بعد القايلة\",\n evening: \"العشية\",\n night: \"الليل\",\n midnight: \"نص الليل\",\n },\n abbreviated: {\n am: \"ص\",\n pm: \"ع\",\n morning: \"الصباح\",\n noon: \"القايلة\",\n afternoon: \"بعد القايلة\",\n evening: \"العشية\",\n night: \"الليل\",\n midnight: \"نص الليل\",\n },\n wide: {\n am: \"ص\",\n pm: \"ع\",\n morning: \"الصباح\",\n noon: \"القايلة\",\n afternoon: \"بعد القايلة\",\n evening: \"العشية\",\n night: \"الليل\",\n midnight: \"نص الليل\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"ص\",\n pm: \"ع\",\n morning: \"في الصباح\",\n noon: \"في القايلة\",\n afternoon: \"بعد القايلة\",\n evening: \"في العشية\",\n night: \"في الليل\",\n midnight: \"نص الليل\",\n },\n abbreviated: {\n am: \"ص\",\n pm: \"ع\",\n morning: \"في الصباح\",\n noon: \"في القايلة\",\n afternoon: \"بعد القايلة\",\n evening: \"في العشية\",\n night: \"في الليل\",\n midnight: \"نص الليل\",\n },\n wide: {\n am: \"ص\",\n pm: \"ع\",\n morning: \"في الصباح\",\n noon: \"في القايلة\",\n afternoon: \"بعد القايلة\",\n evening: \"في العشية\",\n night: \"في الليل\",\n midnight: \"نص الليل\",\n },\n};\n\nconst ordinalNumber = (num) => String(num);\n\nexport const localize = {\n ordinalNumber: ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\nimport { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /[قب]/,\n abbreviated: /[قب]\\.م\\./,\n wide: /(قبل|بعد) الميلاد/,\n};\nconst parseEraPatterns = {\n any: [/قبل/, /بعد/],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /ر[1234]/,\n wide: /الربع (الأول|الثاني|الثالث|الرابع)/,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[جفمأسند]/,\n abbreviated:\n /^(جانفي|فيفري|مارس|أفريل|ماي|جوان|جويلية|أوت|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/,\n wide: /^(جانفي|فيفري|مارس|أفريل|ماي|جوان|جويلية|أوت|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^ج/i,\n /^ف/i,\n /^م/i,\n /^أ/i,\n /^م/i,\n /^ج/i,\n /^ج/i,\n /^أ/i,\n /^س/i,\n /^أ/i,\n /^ن/i,\n /^د/i,\n ],\n\n any: [\n /^جانفي/i,\n /^فيفري/i,\n /^مارس/i,\n /^أفريل/i,\n /^ماي/i,\n /^جوان/i,\n /^جويلية/i,\n /^أوت/i,\n /^سبتمبر/i,\n /^أكتوبر/i,\n /^نوفمبر/i,\n /^ديسمبر/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[حنثرخجس]/i,\n short: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,\n abbreviated: /^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,\n wide: /^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^ح/i, /^ن/i, /^ث/i, /^ر/i, /^خ/i, /^ج/i, /^س/i],\n wide: [\n /^الأحد/i,\n /^الاثنين/i,\n /^الثلاثاء/i,\n /^الأربعاء/i,\n /^الخميس/i,\n /^الجمعة/i,\n /^السبت/i,\n ],\n\n any: [/^أح/i, /^اث/i, /^ث/i, /^أر/i, /^خ/i, /^ج/i, /^س/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(ص|ع|ن ل|ل|(في|مع) (صباح|قايلة|عشية|ليل))/,\n any: /^([صع]|نص الليل|قايلة|(في|مع) (صباح|قايلة|عشية|ليل))/,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^ص/,\n pm: /^ع/,\n midnight: /نص الليل/,\n noon: /قايلة/,\n afternoon: /بعد القايلة/,\n morning: /صباح/,\n evening: /عشية/,\n night: /ليل/,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./ar-TN/_lib/formatDistance.js\";\nimport { formatLong } from \"./ar-TN/_lib/formatLong.js\";\nimport { formatRelative } from \"./ar-TN/_lib/formatRelative.js\";\nimport { localize } from \"./ar-TN/_lib/localize.js\";\nimport { match } from \"./ar-TN/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary Arabic locale (Tunisian Arabic).\n * @language Arabic\n * @iso-639-2 ara\n * @author Koussay Haj Kacem [@essana3](https://github.com/essana3)\n */\nexport const arTN = {\n code: \"ar-TN\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1 /* Monday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default arTN;\n"],"names":["formatDistanceLocale","formatDistance","token","count","options","usageGroup","result","dateFormats","timeFormats","dateTimeFormats","formatLong","buildFormatLongFn","formatRelativeLocale","formatRelative","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","num","localize","buildLocalizeFn","quarter","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","match","buildMatchPatternFn","value","buildMatchFn","index","arTN"],"mappings":";yJAAA,MAAMA,EAAuB,CAC3B,iBAAkB,CAChB,IAAK,eACL,IAAK,mBACL,WAAY,yBACZ,MAAO,wBACX,EAEE,SAAU,CACR,IAAK,QACL,IAAK,YACL,WAAY,kBACZ,MAAO,iBACX,EAEE,YAAa,WAEb,iBAAkB,CAChB,IAAK,eACL,IAAK,iBACL,WAAY,yBACZ,MAAO,wBACX,EAEE,SAAU,CACR,IAAK,QACL,IAAK,UACL,WAAY,kBACZ,MAAO,iBACX,EAEE,YAAa,CACX,IAAK,aACL,IAAK,eACL,WAAY,wBACZ,MAAO,sBACX,EAEE,OAAQ,CACN,IAAK,OACL,IAAK,SACL,WAAY,kBACZ,MAAO,gBACX,EAEE,MAAO,CACL,IAAK,OACL,IAAK,SACL,WAAY,iBACZ,MAAO,eACX,EAEE,YAAa,CACX,IAAK,aACL,IAAK,eACL,WAAY,uBACZ,MAAO,sBACX,EAEE,OAAQ,CACN,IAAK,OACL,IAAK,SACL,WAAY,iBACZ,MAAO,gBACX,EAEE,aAAc,CACZ,IAAK,YACL,IAAK,cACL,WAAY,wBACZ,MAAO,qBACX,EAEE,QAAS,CACP,IAAK,MACL,IAAK,QACL,WAAY,kBACZ,MAAO,eACX,EAEE,YAAa,CACX,IAAK,YACL,IAAK,cACL,WAAY,wBACZ,MAAO,qBACX,EAEE,OAAQ,CACN,IAAK,MACL,IAAK,QACL,WAAY,kBACZ,MAAO,eACX,EAEE,WAAY,CACV,IAAK,cACL,IAAK,gBACL,WAAY,0BACZ,MAAO,uBACX,EAEE,aAAc,CACZ,IAAK,YACL,IAAK,cACL,WAAY,wBACZ,MAAO,qBACX,CACA,EAEaC,EAAiB,CAACC,EAAOC,EAAOC,IAAY,CACvD,MAAMC,EAAaL,EAAqBE,CAAK,EAC7C,IAAII,EAaJ,OAZI,OAAOD,GAAe,SACxBC,EAASD,EACAF,IAAU,EACnBG,EAASD,EAAW,IACXF,IAAU,EACnBG,EAASD,EAAW,IACXF,GAAS,GAClBG,EAASD,EAAW,WAAW,QAAQ,YAAa,OAAOF,CAAK,CAAC,EAEjEG,EAASD,EAAW,MAAM,QAAQ,YAAa,OAAOF,CAAK,CAAC,EAG1DC,GAAS,UACPA,EAAQ,YAAcA,EAAQ,WAAa,EACtC,MAAQE,EAER,QAAUA,EAIdA,CACT,ECnIMC,EAAc,CAClB,KAAM,kBACN,KAAM,YACN,OAAQ,UACR,MAAO,YACT,EAEMC,EAAc,CAClB,KAAM,WACN,KAAM,WACN,OAAQ,WACR,MAAO,OACT,EAEMC,EAAkB,CACtB,KAAM,yBACN,KAAM,yBACN,OAAQ,qBACR,MAAO,oBACT,EAEaC,EAAa,CACxB,KAAMC,EAAkB,CACtB,QAASJ,EACT,aAAc,MAClB,CAAG,EAED,KAAMI,EAAkB,CACtB,QAASH,EACT,aAAc,MAClB,CAAG,EAED,SAAUG,EAAkB,CAC1B,QAASF,EACT,aAAc,MAClB,CAAG,CACH,ECtCMG,EAAuB,CAC3B,SAAU,sBACV,UAAW,gBACX,MAAO,eACP,SAAU,cACV,SAAU,mCACV,MAAO,GACT,EAEaC,EAAkBX,GAAUU,EAAqBV,CAAK,ECP7DY,EAAY,CAChB,OAAQ,CAAC,IAAK,GAAG,EACjB,YAAa,CAAC,OAAQ,MAAM,EAC5B,KAAM,CAAC,cAAe,aAAa,CACrC,EAEMC,EAAgB,CACpB,OAAQ,CAAC,IAAK,IAAK,IAAK,GAAG,EAC3B,YAAa,CAAC,KAAM,KAAM,KAAM,IAAI,EACpC,KAAM,CAAC,cAAe,eAAgB,eAAgB,cAAc,CACtE,EAEMC,EAAc,CAClB,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EACnE,YAAa,CACX,QACA,QACA,OACA,QACA,MACA,OACA,SACA,MACA,SACA,SACA,SACA,QACJ,EAEE,KAAM,CACJ,QACA,QACA,OACA,QACA,MACA,OACA,SACA,MACA,SACA,SACA,SACA,QACJ,CACA,EAEMC,EAAY,CAChB,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAC1C,MAAO,CAAC,MAAO,QAAS,SAAU,SAAU,OAAQ,OAAQ,KAAK,EACjE,YAAa,CAAC,MAAO,QAAS,SAAU,SAAU,OAAQ,OAAQ,KAAK,EAEvE,KAAM,CACJ,QACA,UACA,WACA,WACA,SACA,SACA,OACJ,CACA,EAEMC,EAAkB,CACtB,OAAQ,CACN,GAAI,IACJ,GAAI,IACJ,QAAS,SACT,KAAM,UACN,UAAW,cACX,QAAS,SACT,MAAO,QACP,SAAU,UACd,EACE,YAAa,CACX,GAAI,IACJ,GAAI,IACJ,QAAS,SACT,KAAM,UACN,UAAW,cACX,QAAS,SACT,MAAO,QACP,SAAU,UACd,EACE,KAAM,CACJ,GAAI,IACJ,GAAI,IACJ,QAAS,SACT,KAAM,UACN,UAAW,cACX,QAAS,SACT,MAAO,QACP,SAAU,UACd,CACA,EAEMC,EAA4B,CAChC,OAAQ,CACN,GAAI,IACJ,GAAI,IACJ,QAAS,YACT,KAAM,aACN,UAAW,cACX,QAAS,YACT,MAAO,WACP,SAAU,UACd,EACE,YAAa,CACX,GAAI,IACJ,GAAI,IACJ,QAAS,YACT,KAAM,aACN,UAAW,cACX,QAAS,YACT,MAAO,WACP,SAAU,UACd,EACE,KAAM,CACJ,GAAI,IACJ,GAAI,IACJ,QAAS,YACT,KAAM,aACN,UAAW,cACX,QAAS,YACT,MAAO,WACP,SAAU,UACd,CACA,EAEMC,EAAiBC,GAAQ,OAAOA,CAAG,EAE5BC,EAAW,CACtB,cAAeF,EAEf,IAAKG,EAAgB,CACnB,OAAQT,EACR,aAAc,MAClB,CAAG,EAED,QAASS,EAAgB,CACvB,OAAQR,EACR,aAAc,OACd,iBAAmBS,GAAYA,EAAU,CAC7C,CAAG,EAED,MAAOD,EAAgB,CACrB,OAAQP,EACR,aAAc,MAClB,CAAG,EAED,IAAKO,EAAgB,CACnB,OAAQN,EACR,aAAc,MAClB,CAAG,EAED,UAAWM,EAAgB,CACzB,OAAQL,EACR,aAAc,OACd,iBAAkBC,EAClB,uBAAwB,MAC5B,CAAG,CACH,EC9JMM,EAA4B,wBAC5BC,EAA4B,OAE5BC,EAAmB,CACvB,OAAQ,OACR,YAAa,YACb,KAAM,mBACR,EACMC,EAAmB,CACvB,IAAK,CAAC,MAAO,KAAK,CACpB,EAEMC,EAAuB,CAC3B,OAAQ,WACR,YAAa,UACb,KAAM,oCACR,EACMC,EAAuB,CAC3B,IAAK,CAAC,KAAM,KAAM,KAAM,IAAI,CAC9B,EAEMC,EAAqB,CACzB,OAAQ,aACR,YACE,4EACF,KAAM,2EACR,EACMC,EAAqB,CACzB,OAAQ,CACN,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,EAEE,IAAK,CACH,UACA,UACA,SACA,UACA,QACA,SACA,WACA,QACA,WACA,WACA,WACA,UACJ,CACA,EAEMC,EAAmB,CACvB,OAAQ,cACR,MAAO,4CACP,YAAa,4CACb,KAAM,yDACR,EACMC,EAAmB,CACvB,OAAQ,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EACxD,KAAM,CACJ,UACA,YACA,aACA,aACA,WACA,WACA,SACJ,EAEE,IAAK,CAAC,OAAQ,OAAQ,MAAO,OAAQ,MAAO,MAAO,KAAK,CAC1D,EAEMC,EAAyB,CAC7B,OAAQ,6CACR,IAAK,sDACP,EACMC,EAAyB,CAC7B,IAAK,CACH,GAAI,KACJ,GAAI,KACJ,SAAU,WACV,KAAM,QACN,UAAW,cACX,QAAS,OACT,QAAS,OACT,MAAO,KACX,CACA,EAEaC,EAAQ,CACnB,cAAeC,EAAoB,CACjC,aAAcb,EACd,aAAcC,EACd,cAAgBa,GAAU,SAASA,EAAO,EAAE,CAChD,CAAG,EAED,IAAKC,EAAa,CAChB,cAAeb,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,QAASY,EAAa,CACpB,cAAeX,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,MACnB,cAAgBW,GAAUA,EAAQ,CACtC,CAAG,EAED,MAAOD,EAAa,CAClB,cAAeT,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,IAAKQ,EAAa,CAChB,cAAeP,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,UAAWM,EAAa,CACtB,cAAeL,EACf,kBAAmB,MACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,CACH,ECjIaM,EAAO,CAClB,KAAM,QACN,eAAgBzC,EAChB,WAAYS,EACZ,eAAgBG,EAChB,SAAUS,EACV,MAAOe,EACP,QAAS,CACP,aAAc,EACd,sBAAuB,CAC3B,CACA","x_google_ignoreList":[0,1,2,3,4,5]} \ No newline at end of file diff --git a/js/ar-TN-DkotlBtK.chunk.mjs.map.license b/js/ar-TN-DkotlBtK.chunk.mjs.map.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/ar-TN-DkotlBtK.chunk.mjs.map.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/az-DinC2iyY.chunk.mjs b/js/az-DinC2iyY.chunk.mjs new file mode 100644 index 00000000..c3b7da21 --- /dev/null +++ b/js/az-DinC2iyY.chunk.mjs @@ -0,0 +1,3 @@ +/*! third party licenses: js/vendor.LICENSE.txt */ +import{b as d,c as t,d as r,e as m}from"./index-Cr1DLTt7.chunk.mjs";import"./user_migration-personalSettings.mjs";import"./be-tarask-CzbVxLq7.chunk.mjs";const s={lessThanXSeconds:{one:"bir saniyədən az",other:"{{count}} bir saniyədən az"},xSeconds:{one:"1 saniyə",other:"{{count}} saniyə"},halfAMinute:"yarım dəqiqə",lessThanXMinutes:{one:"bir dəqiqədən az",other:"{{count}} bir dəqiqədən az"},xMinutes:{one:"bir dəqiqə",other:"{{count}} dəqiqə"},aboutXHours:{one:"təxminən 1 saat",other:"təxminən {{count}} saat"},xHours:{one:"1 saat",other:"{{count}} saat"},xDays:{one:"1 gün",other:"{{count}} gün"},aboutXWeeks:{one:"təxminən 1 həftə",other:"təxminən {{count}} həftə"},xWeeks:{one:"1 həftə",other:"{{count}} həftə"},aboutXMonths:{one:"təxminən 1 ay",other:"təxminən {{count}} ay"},xMonths:{one:"1 ay",other:"{{count}} ay"},aboutXYears:{one:"təxminən 1 il",other:"təxminən {{count}} il"},xYears:{one:"1 il",other:"{{count}} il"},overXYears:{one:"1 ildən çox",other:"{{count}} ildən çox"},almostXYears:{one:"demək olar ki 1 il",other:"demək olar ki {{count}} il"}},c=(a,n,e)=>{let i;const o=s[a];return typeof o=="string"?i=o:n===1?i=o.one:i=o.other.replace("{{count}}",String(n)),e?.addSuffix?e.comparison&&e.comparison>0?i+" sonra":i+" əvvəl":i},l={full:"EEEE, do MMMM y 'il'",long:"do MMMM y 'il'",medium:"d MMM y 'il'",short:"dd.MM.yyyy"},$={full:"H:mm:ss zzzz",long:"H:mm:ss z",medium:"H:mm:ss",short:"H:mm"},h={full:"{{date}} {{time}} - 'də'",long:"{{date}} {{time}} - 'də'",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},g={date:d({formats:l,defaultWidth:"full"}),time:d({formats:$,defaultWidth:"full"}),dateTime:d({formats:h,defaultWidth:"full"})},x={lastWeek:"'sonuncu' eeee p -'də'",yesterday:"'dünən' p -'də'",today:"'bugün' p -'də'",tomorrow:"'sabah' p -'də'",nextWeek:"eeee p -'də'",other:"P"},y=(a,n,e,i)=>x[a],b={narrow:["e.ə","b.e"],abbreviated:["e.ə","b.e"],wide:["eramızdan əvvəl","bizim era"]},C={narrow:["1","2","3","4"],abbreviated:["K1","K2","K3","K4"],wide:["1ci kvartal","2ci kvartal","3cü kvartal","4cü kvartal"]},v={narrow:["Y","F","M","A","M","İ","İ","A","S","O","N","D"],abbreviated:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],wide:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"]},f={narrow:["B.","B.e","Ç.a","Ç.","C.a","C.","Ş."],short:["B.","B.e","Ç.a","Ç.","C.a","C.","Ş."],abbreviated:["Baz","Baz.e","Çər.a","Çər","Cüm.a","Cüm","Şə"],wide:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"]},F={narrow:{am:"am",pm:"pm",midnight:"gecəyarı",noon:"gün",morning:"səhər",afternoon:"gündüz",evening:"axşam",night:"gecə"},abbreviated:{am:"AM",pm:"PM",midnight:"gecəyarı",noon:"gün",morning:"səhər",afternoon:"gündüz",evening:"axşam",night:"gecə"},wide:{am:"a.m.",pm:"p.m.",midnight:"gecəyarı",noon:"gün",morning:"səhər",afternoon:"gündüz",evening:"axşam",night:"gecə"}},M={narrow:{am:"a",pm:"p",midnight:"gecəyarı",noon:"gün",morning:"səhər",afternoon:"gündüz",evening:"axşam",night:"gecə"},abbreviated:{am:"AM",pm:"PM",midnight:"gecəyarı",noon:"gün",morning:"səhər",afternoon:"gündüz",evening:"axşam",night:"gecə"},wide:{am:"a.m.",pm:"p.m.",midnight:"gecəyarı",noon:"gün",morning:"səhər",afternoon:"gündüz",evening:"axşam",night:"gecə"}},u={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"},p=a=>{if(a===0)return a+"-ıncı";const n=a%10,e=a%100-n,i=a>=100?100:null;return u[n]?u[n]:u[e]?u[e]:i!==null?u[i]:""},w=(a,n)=>{const e=Number(a),i=p(e);return e+i},z={ordinalNumber:w,era:t({values:b,defaultWidth:"wide"}),quarter:t({values:C,defaultWidth:"wide",argumentCallback:a=>a-1}),month:t({values:v,defaultWidth:"wide"}),day:t({values:f,defaultWidth:"wide"}),dayPeriod:t({values:F,defaultWidth:"wide",formattingValues:M,defaultFormattingWidth:"wide"})},k=/^(\d+)(-?(ci|inci|nci|uncu|üncü|ncı))?/i,W=/\d+/i,B={narrow:/^(b|a)$/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)$/i,wide:/^(bizim eradan əvvəl|bizim era)$/i},P={any:[/^b$/i,/^(a|c)$/i]},A={narrow:/^[1234]$/i,abbreviated:/^K[1234]$/i,wide:/^[1234](ci)? kvartal$/i},q={any:[/1/i,/2/i,/3/i,/4/i]},S={narrow:/^[(?-i)yfmaisond]$/i,abbreviated:/^(Yan|Fev|Mar|Apr|May|İyun|İyul|Avq|Sen|Okt|Noy|Dek)$/i,wide:/^(Yanvar|Fevral|Mart|Aprel|May|İyun|İyul|Avgust|Sentyabr|Oktyabr|Noyabr|Dekabr)$/i},Y={narrow:[/^[(?-i)y]$/i,/^[(?-i)f]$/i,/^[(?-i)m]$/i,/^[(?-i)a]$/i,/^[(?-i)m]$/i,/^[(?-i)i]$/i,/^[(?-i)i]$/i,/^[(?-i)a]$/i,/^[(?-i)s]$/i,/^[(?-i)o]$/i,/^[(?-i)n]$/i,/^[(?-i)d]$/i],abbreviated:[/^Yan$/i,/^Fev$/i,/^Mar$/i,/^Apr$/i,/^May$/i,/^İyun$/i,/^İyul$/i,/^Avg$/i,/^Sen$/i,/^Okt$/i,/^Noy$/i,/^Dek$/i],wide:[/^Yanvar$/i,/^Fevral$/i,/^Mart$/i,/^Aprel$/i,/^May$/i,/^İyun$/i,/^İyul$/i,/^Avgust$/i,/^Sentyabr$/i,/^Oktyabr$/i,/^Noyabr$/i,/^Dekabr$/i]},D={narrow:/^(B\.|B\.e|Ç\.a|Ç\.|C\.a|C\.|Ş\.)$/i,short:/^(B\.|B\.e|Ç\.a|Ç\.|C\.a|C\.|Ş\.)$/i,abbreviated:/^(Baz\.e|Çər|Çər\.a|Cüm|Cüm\.a|Şə)$/i,wide:/^(Bazar|Bazar ertəsi|Çərşənbə axşamı|Çərşənbə|Cümə axşamı|Cümə|Şənbə)$/i},E={narrow:[/^B\.$/i,/^B\.e$/i,/^Ç\.a$/i,/^Ç\.$/i,/^C\.a$/i,/^C\.$/i,/^Ş\.$/i],abbreviated:[/^Baz$/i,/^Baz\.e$/i,/^Çər\.a$/i,/^Çər$/i,/^Cüm\.a$/i,/^Cüm$/i,/^Şə$/i],wide:[/^Bazar$/i,/^Bazar ertəsi$/i,/^Çərşənbə axşamı$/i,/^Çərşənbə$/i,/^Cümə axşamı$/i,/^Cümə$/i,/^Şənbə$/i],any:[/^B\.$/i,/^B\.e$/i,/^Ç\.a$/i,/^Ç\.$/i,/^C\.a$/i,/^C\.$/i,/^Ş\.$/i]},N={narrow:/^(a|p|gecəyarı|gün|səhər|gündüz|axşam|gecə)$/i,any:/^(am|pm|a\.m\.|p\.m\.|AM|PM|gecəyarı|gün|səhər|gündüz|axşam|gecə)$/i},O={any:{am:/^a$/i,pm:/^p$/i,midnight:/^gecəyarı$/i,noon:/^gün$/i,morning:/səhər$/i,afternoon:/gündüz$/i,evening:/axşam$/i,night:/gecə$/i}},X={ordinalNumber:m({matchPattern:k,parsePattern:W,valueCallback:a=>parseInt(a,10)}),era:r({matchPatterns:B,defaultMatchWidth:"wide",parsePatterns:P,defaultParseWidth:"any"}),quarter:r({matchPatterns:A,defaultMatchWidth:"wide",parsePatterns:q,defaultParseWidth:"any",valueCallback:a=>a+1}),month:r({matchPatterns:S,defaultMatchWidth:"wide",parsePatterns:Y,defaultParseWidth:"narrow"}),day:r({matchPatterns:D,defaultMatchWidth:"wide",parsePatterns:E,defaultParseWidth:"any"}),dayPeriod:r({matchPatterns:N,defaultMatchWidth:"any",parsePatterns:O,defaultParseWidth:"any"})},L={code:"az",formatDistance:c,formatLong:g,formatRelative:y,localize:z,match:X,options:{weekStartsOn:1,firstWeekContainsDate:1}};export{L as az}; +//# sourceMappingURL=az-DinC2iyY.chunk.mjs.map diff --git a/js/az-DinC2iyY.chunk.mjs.license b/js/az-DinC2iyY.chunk.mjs.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/az-DinC2iyY.chunk.mjs.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/az-DinC2iyY.chunk.mjs.map b/js/az-DinC2iyY.chunk.mjs.map new file mode 100644 index 00000000..1118eab2 --- /dev/null +++ b/js/az-DinC2iyY.chunk.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"az-DinC2iyY.chunk.mjs","sources":["../node_modules/date-fns/locale/az/_lib/formatDistance.js","../node_modules/date-fns/locale/az/_lib/formatLong.js","../node_modules/date-fns/locale/az/_lib/formatRelative.js","../node_modules/date-fns/locale/az/_lib/localize.js","../node_modules/date-fns/locale/az/_lib/match.js","../node_modules/date-fns/locale/az.js"],"sourcesContent":["const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"bir saniyədən az\",\n other: \"{{count}} bir saniyədən az\",\n },\n\n xSeconds: {\n one: \"1 saniyə\",\n other: \"{{count}} saniyə\",\n },\n\n halfAMinute: \"yarım dəqiqə\",\n\n lessThanXMinutes: {\n one: \"bir dəqiqədən az\",\n other: \"{{count}} bir dəqiqədən az\",\n },\n\n xMinutes: {\n one: \"bir dəqiqə\",\n other: \"{{count}} dəqiqə\",\n },\n\n aboutXHours: {\n one: \"təxminən 1 saat\",\n other: \"təxminən {{count}} saat\",\n },\n\n xHours: {\n one: \"1 saat\",\n other: \"{{count}} saat\",\n },\n\n xDays: {\n one: \"1 gün\",\n other: \"{{count}} gün\",\n },\n\n aboutXWeeks: {\n one: \"təxminən 1 həftə\",\n other: \"təxminən {{count}} həftə\",\n },\n\n xWeeks: {\n one: \"1 həftə\",\n other: \"{{count}} həftə\",\n },\n\n aboutXMonths: {\n one: \"təxminən 1 ay\",\n other: \"təxminən {{count}} ay\",\n },\n\n xMonths: {\n one: \"1 ay\",\n other: \"{{count}} ay\",\n },\n\n aboutXYears: {\n one: \"təxminən 1 il\",\n other: \"təxminən {{count}} il\",\n },\n\n xYears: {\n one: \"1 il\",\n other: \"{{count}} il\",\n },\n\n overXYears: {\n one: \"1 ildən çox\",\n other: \"{{count}} ildən çox\",\n },\n\n almostXYears: {\n one: \"demək olar ki 1 il\",\n other: \"demək olar ki {{count}} il\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", String(count));\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return result + \" sonra\";\n } else {\n return result + \" əvvəl\";\n }\n }\n\n return result;\n};\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, do MMMM y 'il'\",\n long: \"do MMMM y 'il'\",\n medium: \"d MMM y 'il'\",\n short: \"dd.MM.yyyy\",\n};\n\nconst timeFormats = {\n full: \"H:mm:ss zzzz\",\n long: \"H:mm:ss z\",\n medium: \"H:mm:ss\",\n short: \"H:mm\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} {{time}} - 'də'\",\n long: \"{{date}} {{time}} - 'də'\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'sonuncu' eeee p -'də'\",\n yesterday: \"'dünən' p -'də'\",\n today: \"'bugün' p -'də'\",\n tomorrow: \"'sabah' p -'də'\",\n nextWeek: \"eeee p -'də'\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"e.ə\", \"b.e\"],\n abbreviated: [\"e.ə\", \"b.e\"],\n wide: [\"eramızdan əvvəl\", \"bizim era\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"K1\", \"K2\", \"K3\", \"K4\"],\n wide: [\"1ci kvartal\", \"2ci kvartal\", \"3cü kvartal\", \"4cü kvartal\"],\n};\nconst monthValues = {\n narrow: [\"Y\", \"F\", \"M\", \"A\", \"M\", \"İ\", \"İ\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Yan\",\n \"Fev\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"İyun\",\n \"İyul\",\n \"Avq\",\n \"Sen\",\n \"Okt\",\n \"Noy\",\n \"Dek\",\n ],\n\n wide: [\n \"Yanvar\",\n \"Fevral\",\n \"Mart\",\n \"Aprel\",\n \"May\",\n \"İyun\",\n \"İyul\",\n \"Avqust\",\n \"Sentyabr\",\n \"Oktyabr\",\n \"Noyabr\",\n \"Dekabr\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"B.\", \"B.e\", \"Ç.a\", \"Ç.\", \"C.a\", \"C.\", \"Ş.\"],\n short: [\"B.\", \"B.e\", \"Ç.a\", \"Ç.\", \"C.a\", \"C.\", \"Ş.\"],\n abbreviated: [\"Baz\", \"Baz.e\", \"Çər.a\", \"Çər\", \"Cüm.a\", \"Cüm\", \"Şə\"],\n wide: [\n \"Bazar\",\n \"Bazar ertəsi\",\n \"Çərşənbə axşamı\",\n \"Çərşənbə\",\n \"Cümə axşamı\",\n \"Cümə\",\n \"Şənbə\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"am\",\n pm: \"pm\",\n midnight: \"gecəyarı\",\n noon: \"gün\",\n morning: \"səhər\",\n afternoon: \"gündüz\",\n evening: \"axşam\",\n night: \"gecə\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"gecəyarı\",\n noon: \"gün\",\n morning: \"səhər\",\n afternoon: \"gündüz\",\n evening: \"axşam\",\n night: \"gecə\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"gecəyarı\",\n noon: \"gün\",\n morning: \"səhər\",\n afternoon: \"gündüz\",\n evening: \"axşam\",\n night: \"gecə\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"gecəyarı\",\n noon: \"gün\",\n morning: \"səhər\",\n afternoon: \"gündüz\",\n evening: \"axşam\",\n night: \"gecə\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"gecəyarı\",\n noon: \"gün\",\n morning: \"səhər\",\n afternoon: \"gündüz\",\n evening: \"axşam\",\n night: \"gecə\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"gecəyarı\",\n noon: \"gün\",\n morning: \"səhər\",\n afternoon: \"gündüz\",\n evening: \"axşam\",\n night: \"gecə\",\n },\n};\n\nconst suffixes = {\n 1: \"-inci\",\n 5: \"-inci\",\n 8: \"-inci\",\n 70: \"-inci\",\n 80: \"-inci\",\n 2: \"-nci\",\n 7: \"-nci\",\n 20: \"-nci\",\n 50: \"-nci\",\n 3: \"-üncü\",\n 4: \"-üncü\",\n 100: \"-üncü\",\n 6: \"-ncı\",\n 9: \"-uncu\",\n 10: \"-uncu\",\n 30: \"-uncu\",\n 60: \"-ıncı\",\n 90: \"-ıncı\",\n};\n\nconst getSuffix = (number) => {\n if (number === 0) {\n // special case for zero\n return number + \"-ıncı\";\n }\n\n const a = number % 10;\n const b = (number % 100) - a;\n const c = number >= 100 ? 100 : null;\n\n if (suffixes[a]) {\n return suffixes[a];\n } else if (suffixes[b]) {\n return suffixes[b];\n } else if (c !== null) {\n return suffixes[c];\n }\n return \"\";\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n const suffix = getSuffix(number);\n\n return number + suffix;\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(-?(ci|inci|nci|uncu|üncü|ncı))?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)$/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)$/i,\n wide: /^(bizim eradan əvvəl|bizim era)$/i,\n};\nconst parseEraPatterns = {\n any: [/^b$/i, /^(a|c)$/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]$/i,\n abbreviated: /^K[1234]$/i,\n wide: /^[1234](ci)? kvartal$/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[(?-i)yfmaisond]$/i,\n abbreviated: /^(Yan|Fev|Mar|Apr|May|İyun|İyul|Avq|Sen|Okt|Noy|Dek)$/i,\n wide: /^(Yanvar|Fevral|Mart|Aprel|May|İyun|İyul|Avgust|Sentyabr|Oktyabr|Noyabr|Dekabr)$/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^[(?-i)y]$/i,\n /^[(?-i)f]$/i,\n /^[(?-i)m]$/i,\n /^[(?-i)a]$/i,\n /^[(?-i)m]$/i,\n /^[(?-i)i]$/i,\n /^[(?-i)i]$/i,\n /^[(?-i)a]$/i,\n /^[(?-i)s]$/i,\n /^[(?-i)o]$/i,\n /^[(?-i)n]$/i,\n /^[(?-i)d]$/i,\n ],\n\n abbreviated: [\n /^Yan$/i,\n /^Fev$/i,\n /^Mar$/i,\n /^Apr$/i,\n /^May$/i,\n /^İyun$/i,\n /^İyul$/i,\n /^Avg$/i,\n /^Sen$/i,\n /^Okt$/i,\n /^Noy$/i,\n /^Dek$/i,\n ],\n\n wide: [\n /^Yanvar$/i,\n /^Fevral$/i,\n /^Mart$/i,\n /^Aprel$/i,\n /^May$/i,\n /^İyun$/i,\n /^İyul$/i,\n /^Avgust$/i,\n /^Sentyabr$/i,\n /^Oktyabr$/i,\n /^Noyabr$/i,\n /^Dekabr$/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^(B\\.|B\\.e|Ç\\.a|Ç\\.|C\\.a|C\\.|Ş\\.)$/i,\n short: /^(B\\.|B\\.e|Ç\\.a|Ç\\.|C\\.a|C\\.|Ş\\.)$/i,\n abbreviated: /^(Baz\\.e|Çər|Çər\\.a|Cüm|Cüm\\.a|Şə)$/i,\n wide: /^(Bazar|Bazar ertəsi|Çərşənbə axşamı|Çərşənbə|Cümə axşamı|Cümə|Şənbə)$/i,\n};\nconst parseDayPatterns = {\n narrow: [\n /^B\\.$/i,\n /^B\\.e$/i,\n /^Ç\\.a$/i,\n /^Ç\\.$/i,\n /^C\\.a$/i,\n /^C\\.$/i,\n /^Ş\\.$/i,\n ],\n\n abbreviated: [\n /^Baz$/i,\n /^Baz\\.e$/i,\n /^Çər\\.a$/i,\n /^Çər$/i,\n /^Cüm\\.a$/i,\n /^Cüm$/i,\n /^Şə$/i,\n ],\n\n wide: [\n /^Bazar$/i,\n /^Bazar ertəsi$/i,\n /^Çərşənbə axşamı$/i,\n /^Çərşənbə$/i,\n /^Cümə axşamı$/i,\n /^Cümə$/i,\n /^Şənbə$/i,\n ],\n\n any: [\n /^B\\.$/i,\n /^B\\.e$/i,\n /^Ç\\.a$/i,\n /^Ç\\.$/i,\n /^C\\.a$/i,\n /^C\\.$/i,\n /^Ş\\.$/i,\n ],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|gecəyarı|gün|səhər|gündüz|axşam|gecə)$/i,\n any: /^(am|pm|a\\.m\\.|p\\.m\\.|AM|PM|gecəyarı|gün|səhər|gündüz|axşam|gecə)$/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a$/i,\n pm: /^p$/i,\n midnight: /^gecəyarı$/i,\n noon: /^gün$/i,\n morning: /səhər$/i,\n afternoon: /gündüz$/i,\n evening: /axşam$/i,\n night: /gecə$/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"narrow\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./az/_lib/formatDistance.js\";\nimport { formatLong } from \"./az/_lib/formatLong.js\";\nimport { formatRelative } from \"./az/_lib/formatRelative.js\";\nimport { localize } from \"./az/_lib/localize.js\";\nimport { match } from \"./az/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary Azerbaijani locale.\n * @language Azerbaijani\n * @iso-639-2 aze\n */\n\nexport const az = {\n code: \"az\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default az;\n"],"names":["formatDistanceLocale","formatDistance","token","count","options","result","tokenValue","dateFormats","timeFormats","dateTimeFormats","formatLong","buildFormatLongFn","formatRelativeLocale","formatRelative","_date","_baseDate","_options","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","suffixes","getSuffix","number","a","b","c","ordinalNumber","dirtyNumber","suffix","localize","buildLocalizeFn","quarter","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","match","buildMatchPatternFn","value","buildMatchFn","index","az"],"mappings":";yJAAA,MAAMA,EAAuB,CAC3B,iBAAkB,CAChB,IAAK,mBACL,MAAO,4BACX,EAEE,SAAU,CACR,IAAK,WACL,MAAO,kBACX,EAEE,YAAa,eAEb,iBAAkB,CAChB,IAAK,mBACL,MAAO,4BACX,EAEE,SAAU,CACR,IAAK,aACL,MAAO,kBACX,EAEE,YAAa,CACX,IAAK,kBACL,MAAO,yBACX,EAEE,OAAQ,CACN,IAAK,SACL,MAAO,gBACX,EAEE,MAAO,CACL,IAAK,QACL,MAAO,eACX,EAEE,YAAa,CACX,IAAK,mBACL,MAAO,0BACX,EAEE,OAAQ,CACN,IAAK,UACL,MAAO,iBACX,EAEE,aAAc,CACZ,IAAK,gBACL,MAAO,uBACX,EAEE,QAAS,CACP,IAAK,OACL,MAAO,cACX,EAEE,YAAa,CACX,IAAK,gBACL,MAAO,uBACX,EAEE,OAAQ,CACN,IAAK,OACL,MAAO,cACX,EAEE,WAAY,CACV,IAAK,cACL,MAAO,qBACX,EAEE,aAAc,CACZ,IAAK,qBACL,MAAO,4BACX,CACA,EAEaC,EAAiB,CAACC,EAAOC,EAAOC,IAAY,CACvD,IAAIC,EAEJ,MAAMC,EAAaN,EAAqBE,CAAK,EAS7C,OARI,OAAOI,GAAe,SACxBD,EAASC,EACAH,IAAU,EACnBE,EAASC,EAAW,IAEpBD,EAASC,EAAW,MAAM,QAAQ,YAAa,OAAOH,CAAK,CAAC,EAG1DC,GAAS,UACPA,EAAQ,YAAcA,EAAQ,WAAa,EACtCC,EAAS,SAETA,EAAS,SAIbA,CACT,EClGME,EAAc,CAClB,KAAM,uBACN,KAAM,iBACN,OAAQ,eACR,MAAO,YACT,EAEMC,EAAc,CAClB,KAAM,eACN,KAAM,YACN,OAAQ,UACR,MAAO,MACT,EAEMC,EAAkB,CACtB,KAAM,2BACN,KAAM,2BACN,OAAQ,qBACR,MAAO,oBACT,EAEaC,EAAa,CACxB,KAAMC,EAAkB,CACtB,QAASJ,EACT,aAAc,MAClB,CAAG,EAED,KAAMI,EAAkB,CACtB,QAASH,EACT,aAAc,MAClB,CAAG,EAED,SAAUG,EAAkB,CAC1B,QAASF,EACT,aAAc,MAClB,CAAG,CACH,ECtCMG,EAAuB,CAC3B,SAAU,yBACV,UAAW,kBACX,MAAO,kBACP,SAAU,kBACV,SAAU,eACV,MAAO,GACT,EAEaC,EAAiB,CAACX,EAAOY,EAAOC,EAAWC,IACtDJ,EAAqBV,CAAK,ECRtBe,EAAY,CAChB,OAAQ,CAAC,MAAO,KAAK,EACrB,YAAa,CAAC,MAAO,KAAK,EAC1B,KAAM,CAAC,kBAAmB,WAAW,CACvC,EAEMC,EAAgB,CACpB,OAAQ,CAAC,IAAK,IAAK,IAAK,GAAG,EAC3B,YAAa,CAAC,KAAM,KAAM,KAAM,IAAI,EACpC,KAAM,CAAC,cAAe,cAAe,cAAe,aAAa,CACnE,EACMC,EAAc,CAClB,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EACnE,YAAa,CACX,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,KACJ,EAEE,KAAM,CACJ,SACA,SACA,OACA,QACA,MACA,OACA,OACA,SACA,WACA,UACA,SACA,QACJ,CACA,EAEMC,EAAY,CAChB,OAAQ,CAAC,KAAM,MAAO,MAAO,KAAM,MAAO,KAAM,IAAI,EACpD,MAAO,CAAC,KAAM,MAAO,MAAO,KAAM,MAAO,KAAM,IAAI,EACnD,YAAa,CAAC,MAAO,QAAS,QAAS,MAAO,QAAS,MAAO,IAAI,EAClE,KAAM,CACJ,QACA,eACA,kBACA,WACA,cACA,OACA,OACJ,CACA,EAEMC,EAAkB,CACtB,OAAQ,CACN,GAAI,KACJ,GAAI,KACJ,SAAU,WACV,KAAM,MACN,QAAS,QACT,UAAW,SACX,QAAS,QACT,MAAO,MACX,EACE,YAAa,CACX,GAAI,KACJ,GAAI,KACJ,SAAU,WACV,KAAM,MACN,QAAS,QACT,UAAW,SACX,QAAS,QACT,MAAO,MACX,EACE,KAAM,CACJ,GAAI,OACJ,GAAI,OACJ,SAAU,WACV,KAAM,MACN,QAAS,QACT,UAAW,SACX,QAAS,QACT,MAAO,MACX,CACA,EAEMC,EAA4B,CAChC,OAAQ,CACN,GAAI,IACJ,GAAI,IACJ,SAAU,WACV,KAAM,MACN,QAAS,QACT,UAAW,SACX,QAAS,QACT,MAAO,MACX,EACE,YAAa,CACX,GAAI,KACJ,GAAI,KACJ,SAAU,WACV,KAAM,MACN,QAAS,QACT,UAAW,SACX,QAAS,QACT,MAAO,MACX,EACE,KAAM,CACJ,GAAI,OACJ,GAAI,OACJ,SAAU,WACV,KAAM,MACN,QAAS,QACT,UAAW,SACX,QAAS,QACT,MAAO,MACX,CACA,EAEMC,EAAW,CACf,EAAG,QACH,EAAG,QACH,EAAG,QACH,GAAI,QACJ,GAAI,QACJ,EAAG,OACH,EAAG,OACH,GAAI,OACJ,GAAI,OACJ,EAAG,QACH,EAAG,QACH,IAAK,QACL,EAAG,OACH,EAAG,QACH,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,OACN,EAEMC,EAAaC,GAAW,CAC5B,GAAIA,IAAW,EAEb,OAAOA,EAAS,QAGlB,MAAMC,EAAID,EAAS,GACbE,EAAKF,EAAS,IAAOC,EACrBE,EAAIH,GAAU,IAAM,IAAM,KAEhC,OAAIF,EAASG,CAAC,EACLH,EAASG,CAAC,EACRH,EAASI,CAAC,EACZJ,EAASI,CAAC,EACRC,IAAM,KACRL,EAASK,CAAC,EAEZ,EACT,EAEMC,EAAgB,CAACC,EAAad,IAAa,CAC/C,MAAMS,EAAS,OAAOK,CAAW,EAC3BC,EAASP,EAAUC,CAAM,EAE/B,OAAOA,EAASM,CAClB,EAEaC,EAAW,CACtB,cAAAH,EAEA,IAAKI,EAAgB,CACnB,OAAQhB,EACR,aAAc,MAClB,CAAG,EAED,QAASgB,EAAgB,CACvB,OAAQf,EACR,aAAc,OACd,iBAAmBgB,GAAYA,EAAU,CAC7C,CAAG,EAED,MAAOD,EAAgB,CACrB,OAAQd,EACR,aAAc,MAClB,CAAG,EAED,IAAKc,EAAgB,CACnB,OAAQb,EACR,aAAc,MAClB,CAAG,EAED,UAAWa,EAAgB,CACzB,OAAQZ,EACR,aAAc,OACd,iBAAkBC,EAClB,uBAAwB,MAC5B,CAAG,CACH,EC1MMa,EAA4B,0CAC5BC,EAA4B,OAE5BC,EAAmB,CACvB,OAAQ,WACR,YAAa,8DACb,KAAM,mCACR,EACMC,EAAmB,CACvB,IAAK,CAAC,OAAQ,UAAU,CAC1B,EAEMC,EAAuB,CAC3B,OAAQ,YACR,YAAa,aACb,KAAM,wBACR,EACMC,EAAuB,CAC3B,IAAK,CAAC,KAAM,KAAM,KAAM,IAAI,CAC9B,EAEMC,EAAqB,CACzB,OAAQ,sBACR,YAAa,yDACb,KAAM,mFACR,EACMC,EAAqB,CACzB,OAAQ,CACN,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,aACJ,EAEE,YAAa,CACX,SACA,SACA,SACA,SACA,SACA,UACA,UACA,SACA,SACA,SACA,SACA,QACJ,EAEE,KAAM,CACJ,YACA,YACA,UACA,WACA,SACA,UACA,UACA,YACA,cACA,aACA,YACA,WACJ,CACA,EAEMC,EAAmB,CACvB,OAAQ,sCACR,MAAO,sCACP,YAAa,uCACb,KAAM,yEACR,EACMC,EAAmB,CACvB,OAAQ,CACN,SACA,UACA,UACA,SACA,UACA,SACA,QACJ,EAEE,YAAa,CACX,SACA,YACA,YACA,SACA,YACA,SACA,OACJ,EAEE,KAAM,CACJ,WACA,kBACA,qBACA,cACA,iBACA,UACA,UACJ,EAEE,IAAK,CACH,SACA,UACA,UACA,SACA,UACA,SACA,QACJ,CACA,EAEMC,EAAyB,CAC7B,OAAQ,gDACR,IAAK,qEACP,EACMC,EAAyB,CAC7B,IAAK,CACH,GAAI,OACJ,GAAI,OACJ,SAAU,cACV,KAAM,SACN,QAAS,UACT,UAAW,WACX,QAAS,UACT,MAAO,QACX,CACA,EAEaC,EAAQ,CACnB,cAAeC,EAAoB,CACjC,aAAcb,EACd,aAAcC,EACd,cAAgBa,GAAU,SAASA,EAAO,EAAE,CAChD,CAAG,EAED,IAAKC,EAAa,CAChB,cAAeb,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,QAASY,EAAa,CACpB,cAAeX,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,MACnB,cAAgBW,GAAUA,EAAQ,CACtC,CAAG,EAED,MAAOD,EAAa,CAClB,cAAeT,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,QACvB,CAAG,EAED,IAAKQ,EAAa,CAChB,cAAeP,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,UAAWM,EAAa,CACtB,cAAeL,EACf,kBAAmB,MACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,CACH,EC1KaM,EAAK,CAChB,KAAM,KACN,eAAgBnD,EAChB,WAAYS,EACZ,eAAgBG,EAChB,SAAUmB,EACV,MAAOe,EACP,QAAS,CACP,aAAc,EACd,sBAAuB,CAC3B,CACA","x_google_ignoreList":[0,1,2,3,4,5]} \ No newline at end of file diff --git a/js/az-DinC2iyY.chunk.mjs.map.license b/js/az-DinC2iyY.chunk.mjs.map.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/az-DinC2iyY.chunk.mjs.map.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/be-CW5fta_H.chunk.mjs b/js/be-CW5fta_H.chunk.mjs new file mode 100644 index 00000000..ff694fdc --- /dev/null +++ b/js/be-CW5fta_H.chunk.mjs @@ -0,0 +1,3 @@ +/*! third party licenses: js/vendor.LICENSE.txt */ +import{b as D,t as B,c as r,d as o,e as g}from"./index-Cr1DLTt7.chunk.mjs";import{i as c}from"./isSameWeek-DEBA-plP.chunk.mjs";import"./user_migration-personalSettings.mjs";import"./be-tarask-CzbVxLq7.chunk.mjs";function l(u,i){if(u.one!==void 0&&i===1)return u.one;const n=i%10,t=i%100;return n===1&&t!==11?u.singularNominative.replace("{{count}}",String(i)):n>=2&&n<=4&&(t<10||t>20)?u.singularGenitive.replace("{{count}}",String(i)):u.pluralGenitive.replace("{{count}}",String(i))}function e(u){return(i,n)=>n&&n.addSuffix?n.comparison&&n.comparison>0?u.future?l(u.future,i):"праз "+l(u.regular,i):u.past?l(u.past,i):l(u.regular,i)+" таму":l(u.regular,i)}const v=(u,i)=>i&&i.addSuffix?i.comparison&&i.comparison>0?"праз паўхвіліны":"паўхвіліны таму":"паўхвіліны",d={lessThanXSeconds:e({regular:{one:"менш за секунду",singularNominative:"менш за {{count}} секунду",singularGenitive:"менш за {{count}} секунды",pluralGenitive:"менш за {{count}} секунд"},future:{one:"менш, чым праз секунду",singularNominative:"менш, чым праз {{count}} секунду",singularGenitive:"менш, чым праз {{count}} секунды",pluralGenitive:"менш, чым праз {{count}} секунд"}}),xSeconds:e({regular:{singularNominative:"{{count}} секунда",singularGenitive:"{{count}} секунды",pluralGenitive:"{{count}} секунд"},past:{singularNominative:"{{count}} секунду таму",singularGenitive:"{{count}} секунды таму",pluralGenitive:"{{count}} секунд таму"},future:{singularNominative:"праз {{count}} секунду",singularGenitive:"праз {{count}} секунды",pluralGenitive:"праз {{count}} секунд"}}),halfAMinute:v,lessThanXMinutes:e({regular:{one:"менш за хвіліну",singularNominative:"менш за {{count}} хвіліну",singularGenitive:"менш за {{count}} хвіліны",pluralGenitive:"менш за {{count}} хвілін"},future:{one:"менш, чым праз хвіліну",singularNominative:"менш, чым праз {{count}} хвіліну",singularGenitive:"менш, чым праз {{count}} хвіліны",pluralGenitive:"менш, чым праз {{count}} хвілін"}}),xMinutes:e({regular:{singularNominative:"{{count}} хвіліна",singularGenitive:"{{count}} хвіліны",pluralGenitive:"{{count}} хвілін"},past:{singularNominative:"{{count}} хвіліну таму",singularGenitive:"{{count}} хвіліны таму",pluralGenitive:"{{count}} хвілін таму"},future:{singularNominative:"праз {{count}} хвіліну",singularGenitive:"праз {{count}} хвіліны",pluralGenitive:"праз {{count}} хвілін"}}),aboutXHours:e({regular:{singularNominative:"каля {{count}} гадзіны",singularGenitive:"каля {{count}} гадзін",pluralGenitive:"каля {{count}} гадзін"},future:{singularNominative:"прыблізна праз {{count}} гадзіну",singularGenitive:"прыблізна праз {{count}} гадзіны",pluralGenitive:"прыблізна праз {{count}} гадзін"}}),xHours:e({regular:{singularNominative:"{{count}} гадзіна",singularGenitive:"{{count}} гадзіны",pluralGenitive:"{{count}} гадзін"},past:{singularNominative:"{{count}} гадзіну таму",singularGenitive:"{{count}} гадзіны таму",pluralGenitive:"{{count}} гадзін таму"},future:{singularNominative:"праз {{count}} гадзіну",singularGenitive:"праз {{count}} гадзіны",pluralGenitive:"праз {{count}} гадзін"}}),xDays:e({regular:{singularNominative:"{{count}} дзень",singularGenitive:"{{count}} дні",pluralGenitive:"{{count}} дзён"}}),aboutXWeeks:e({regular:{singularNominative:"каля {{count}} тыдні",singularGenitive:"каля {{count}} тыдняў",pluralGenitive:"каля {{count}} тыдняў"},future:{singularNominative:"прыблізна праз {{count}} тыдзень",singularGenitive:"прыблізна праз {{count}} тыдні",pluralGenitive:"прыблізна праз {{count}} тыдняў"}}),xWeeks:e({regular:{singularNominative:"{{count}} тыдзень",singularGenitive:"{{count}} тыдні",pluralGenitive:"{{count}} тыдняў"}}),aboutXMonths:e({regular:{singularNominative:"каля {{count}} месяца",singularGenitive:"каля {{count}} месяцаў",pluralGenitive:"каля {{count}} месяцаў"},future:{singularNominative:"прыблізна праз {{count}} месяц",singularGenitive:"прыблізна праз {{count}} месяцы",pluralGenitive:"прыблізна праз {{count}} месяцаў"}}),xMonths:e({regular:{singularNominative:"{{count}} месяц",singularGenitive:"{{count}} месяцы",pluralGenitive:"{{count}} месяцаў"}}),aboutXYears:e({regular:{singularNominative:"каля {{count}} года",singularGenitive:"каля {{count}} гадоў",pluralGenitive:"каля {{count}} гадоў"},future:{singularNominative:"прыблізна праз {{count}} год",singularGenitive:"прыблізна праз {{count}} гады",pluralGenitive:"прыблізна праз {{count}} гадоў"}}),xYears:e({regular:{singularNominative:"{{count}} год",singularGenitive:"{{count}} гады",pluralGenitive:"{{count}} гадоў"}}),overXYears:e({regular:{singularNominative:"больш за {{count}} год",singularGenitive:"больш за {{count}} гады",pluralGenitive:"больш за {{count}} гадоў"},future:{singularNominative:"больш, чым праз {{count}} год",singularGenitive:"больш, чым праз {{count}} гады",pluralGenitive:"больш, чым праз {{count}} гадоў"}}),almostXYears:e({regular:{singularNominative:"амаль {{count}} год",singularGenitive:"амаль {{count}} гады",pluralGenitive:"амаль {{count}} гадоў"},future:{singularNominative:"амаль праз {{count}} год",singularGenitive:"амаль праз {{count}} гады",pluralGenitive:"амаль праз {{count}} гадоў"}})},m=(u,i,n)=>(n=n||{},d[u](i,n)),E={full:"EEEE, d MMMM y 'г.'",long:"d MMMM y 'г.'",medium:"d MMM y 'г.'",short:"dd.MM.y"},C={full:"H:mm:ss zzzz",long:"H:mm:ss z",medium:"H:mm:ss",short:"H:mm"},p={any:"{{date}}, {{time}}"},f={date:D({formats:E,defaultWidth:"full"}),time:D({formats:C,defaultWidth:"full"}),dateTime:D({formats:p,defaultWidth:"any"})},s=["нядзелю","панядзелак","аўторак","сераду","чацвер","пятніцу","суботу"];function A(u){const i=s[u];switch(u){case 0:case 3:case 5:case 6:return"'у мінулую "+i+" а' p";case 1:case 2:case 4:return"'у мінулы "+i+" а' p"}}function F(u){return"'у "+s[u]+" а' p"}function h(u){const i=s[u];switch(u){case 0:case 3:case 5:case 6:return"'у наступную "+i+" а' p";case 1:case 2:case 4:return"'у наступны "+i+" а' p"}}const G=(u,i,n)=>{const t=B(u),a=t.getDay();return c(t,i,n)?F(a):A(a)},w=(u,i,n)=>{const t=B(u),a=t.getDay();return c(t,i,n)?F(a):h(a)},b={lastWeek:G,yesterday:"'учора а' p",today:"'сёння а' p",tomorrow:"'заўтра а' p",nextWeek:w,other:"P"},N=(u,i,n,t)=>{const a=b[u];return typeof a=="function"?a(i,n,t):a},y={narrow:["да н.э.","н.э."],abbreviated:["да н. э.","н. э."],wide:["да нашай эры","нашай эры"]},W={narrow:["1","2","3","4"],abbreviated:["1-ы кв.","2-і кв.","3-і кв.","4-ы кв."],wide:["1-ы квартал","2-і квартал","3-і квартал","4-ы квартал"]},M={narrow:["С","Л","С","К","М","Ч","Л","Ж","В","К","Л","С"],abbreviated:["студз.","лют.","сак.","крас.","май","чэрв.","ліп.","жн.","вер.","кастр.","ліст.","снеж."],wide:["студзень","люты","сакавік","красавік","май","чэрвень","ліпень","жнівень","верасень","кастрычнік","лістапад","снежань"]},P={narrow:["С","Л","С","К","М","Ч","Л","Ж","В","К","Л","С"],abbreviated:["студз.","лют.","сак.","крас.","мая","чэрв.","ліп.","жн.","вер.","кастр.","ліст.","снеж."],wide:["студзеня","лютага","сакавіка","красавіка","мая","чэрвеня","ліпеня","жніўня","верасня","кастрычніка","лістапада","снежня"]},x={narrow:["Н","П","А","С","Ч","П","С"],short:["нд","пн","аў","ср","чц","пт","сб"],abbreviated:["нядз","пан","аўт","сер","чац","пят","суб"],wide:["нядзеля","панядзелак","аўторак","серада","чацвер","пятніца","субота"]},k={narrow:{am:"ДП",pm:"ПП",midnight:"поўн.",noon:"поўд.",morning:"ран.",afternoon:"дзень",evening:"веч.",night:"ноч"},abbreviated:{am:"ДП",pm:"ПП",midnight:"поўн.",noon:"поўд.",morning:"ран.",afternoon:"дзень",evening:"веч.",night:"ноч"},wide:{am:"ДП",pm:"ПП",midnight:"поўнач",noon:"поўдзень",morning:"раніца",afternoon:"дзень",evening:"вечар",night:"ноч"}},S={narrow:{am:"ДП",pm:"ПП",midnight:"поўн.",noon:"поўд.",morning:"ран.",afternoon:"дня",evening:"веч.",night:"ночы"},abbreviated:{am:"ДП",pm:"ПП",midnight:"поўн.",noon:"поўд.",morning:"ран.",afternoon:"дня",evening:"веч.",night:"ночы"},wide:{am:"ДП",pm:"ПП",midnight:"поўнач",noon:"поўдзень",morning:"раніцы",afternoon:"дня",evening:"вечара",night:"ночы"}},X=(u,i)=>{const n=String(i?.unit),t=Number(u);let a;return n==="date"?a="-га":n==="hour"||n==="minute"||n==="second"?a="-я":a=(t%10===2||t%10===3)&&t%100!==12&&t%100!==13?"-і":"-ы",t+a},z={ordinalNumber:X,era:r({values:y,defaultWidth:"wide"}),quarter:r({values:W,defaultWidth:"wide",argumentCallback:u=>u-1}),month:r({values:M,defaultWidth:"wide",formattingValues:P,defaultFormattingWidth:"wide"}),day:r({values:x,defaultWidth:"wide"}),dayPeriod:r({values:k,defaultWidth:"any",formattingValues:S,defaultFormattingWidth:"wide"})},H=/^(\d+)(-?(е|я|га|і|ы|ае|ая|яя|шы|гі|ці|ты|мы))?/i,Y=/\d+/i,T={narrow:/^((да )?н\.?\s?э\.?)/i,abbreviated:/^((да )?н\.?\s?э\.?)/i,wide:/^(да нашай эры|нашай эры|наша эра)/i},q={any:[/^д/i,/^н/i]},V={narrow:/^[1234]/i,abbreviated:/^[1234](-?[ыі]?)? кв.?/i,wide:/^[1234](-?[ыі]?)? квартал/i},I={any:[/1/i,/2/i,/3/i,/4/i]},L={narrow:/^[слкмчжв]/i,abbreviated:/^(студз|лют|сак|крас|ма[йя]|чэрв|ліп|жн|вер|кастр|ліст|снеж)\.?/i,wide:/^(студзен[ья]|лют(ы|ага)|сакавіка?|красавіка?|ма[йя]|чэрвен[ья]|ліпен[ья]|жні(вень|ўня)|верас(ень|ня)|кастрычніка?|лістапада?|снеж(ань|ня))/i},O={narrow:[/^с/i,/^л/i,/^с/i,/^к/i,/^м/i,/^ч/i,/^л/i,/^ж/i,/^в/i,/^к/i,/^л/i,/^с/i],any:[/^ст/i,/^лю/i,/^са/i,/^кр/i,/^ма/i,/^ч/i,/^ліп/i,/^ж/i,/^в/i,/^ка/i,/^ліс/i,/^сн/i]},R={narrow:/^[нпасч]/i,short:/^(нд|ня|пн|па|аў|ат|ср|се|чц|ча|пт|пя|сб|су)\.?/i,abbreviated:/^(нядз?|ндз|пнд|пан|аўт|срд|сер|чцв|чац|птн|пят|суб).?/i,wide:/^(нядзел[яі]|панядзел(ак|ка)|аўтор(ак|ка)|серад[аы]|чацв(ер|ярга)|пятніц[аы]|субот[аы])/i},_={narrow:[/^н/i,/^п/i,/^а/i,/^с/i,/^ч/i,/^п/i,/^с/i],any:[/^н/i,/^п[ан]/i,/^а/i,/^с[ер]/i,/^ч/i,/^п[ят]/i,/^с[уб]/i]},j={narrow:/^([дп]п|поўн\.?|поўд\.?|ран\.?|дзень|дня|веч\.?|ночы?)/i,abbreviated:/^([дп]п|поўн\.?|поўд\.?|ран\.?|дзень|дня|веч\.?|ночы?)/i,wide:/^([дп]п|поўнач|поўдзень|раніц[аы]|дзень|дня|вечара?|ночы?)/i},J={any:{am:/^дп/i,pm:/^пп/i,midnight:/^поўн/i,noon:/^поўд/i,morning:/^р/i,afternoon:/^д[зн]/i,evening:/^в/i,night:/^н/i}},K={ordinalNumber:g({matchPattern:H,parsePattern:Y,valueCallback:u=>parseInt(u,10)}),era:o({matchPatterns:T,defaultMatchWidth:"wide",parsePatterns:q,defaultParseWidth:"any"}),quarter:o({matchPatterns:V,defaultMatchWidth:"wide",parsePatterns:I,defaultParseWidth:"any",valueCallback:u=>u+1}),month:o({matchPatterns:L,defaultMatchWidth:"wide",parsePatterns:O,defaultParseWidth:"any"}),day:o({matchPatterns:R,defaultMatchWidth:"wide",parsePatterns:_,defaultParseWidth:"any"}),dayPeriod:o({matchPatterns:j,defaultMatchWidth:"wide",parsePatterns:J,defaultParseWidth:"any"})},u4={code:"be",formatDistance:m,formatLong:f,formatRelative:N,localize:z,match:K,options:{weekStartsOn:1,firstWeekContainsDate:1}};export{u4 as be}; +//# sourceMappingURL=be-CW5fta_H.chunk.mjs.map diff --git a/js/be-CW5fta_H.chunk.mjs.license b/js/be-CW5fta_H.chunk.mjs.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/be-CW5fta_H.chunk.mjs.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/be-CW5fta_H.chunk.mjs.map b/js/be-CW5fta_H.chunk.mjs.map new file mode 100644 index 00000000..e7b396db --- /dev/null +++ b/js/be-CW5fta_H.chunk.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"be-CW5fta_H.chunk.mjs","sources":["../node_modules/date-fns/locale/be/_lib/formatDistance.js","../node_modules/date-fns/locale/be/_lib/formatLong.js","../node_modules/date-fns/locale/be/_lib/formatRelative.js","../node_modules/date-fns/locale/be/_lib/localize.js","../node_modules/date-fns/locale/be/_lib/match.js","../node_modules/date-fns/locale/be.js"],"sourcesContent":["function declension(scheme, count) {\n // scheme for count=1 exists\n if (scheme.one !== undefined && count === 1) {\n return scheme.one;\n }\n\n const rem10 = count % 10;\n const rem100 = count % 100;\n\n // 1, 21, 31, ...\n if (rem10 === 1 && rem100 !== 11) {\n return scheme.singularNominative.replace(\"{{count}}\", String(count));\n\n // 2, 3, 4, 22, 23, 24, 32 ...\n } else if (rem10 >= 2 && rem10 <= 4 && (rem100 < 10 || rem100 > 20)) {\n return scheme.singularGenitive.replace(\"{{count}}\", String(count));\n\n // 5, 6, 7, 8, 9, 10, 11, ...\n } else {\n return scheme.pluralGenitive.replace(\"{{count}}\", String(count));\n }\n}\n\nfunction buildLocalizeTokenFn(scheme) {\n return (count, options) => {\n if (options && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n if (scheme.future) {\n return declension(scheme.future, count);\n } else {\n return \"праз \" + declension(scheme.regular, count);\n }\n } else {\n if (scheme.past) {\n return declension(scheme.past, count);\n } else {\n return declension(scheme.regular, count) + \" таму\";\n }\n }\n } else {\n return declension(scheme.regular, count);\n }\n };\n}\n\nconst halfAMinute = (_, options) => {\n if (options && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"праз паўхвіліны\";\n } else {\n return \"паўхвіліны таму\";\n }\n }\n\n return \"паўхвіліны\";\n};\n\nconst formatDistanceLocale = {\n lessThanXSeconds: buildLocalizeTokenFn({\n regular: {\n one: \"менш за секунду\",\n singularNominative: \"менш за {{count}} секунду\",\n singularGenitive: \"менш за {{count}} секунды\",\n pluralGenitive: \"менш за {{count}} секунд\",\n },\n future: {\n one: \"менш, чым праз секунду\",\n singularNominative: \"менш, чым праз {{count}} секунду\",\n singularGenitive: \"менш, чым праз {{count}} секунды\",\n pluralGenitive: \"менш, чым праз {{count}} секунд\",\n },\n }),\n\n xSeconds: buildLocalizeTokenFn({\n regular: {\n singularNominative: \"{{count}} секунда\",\n singularGenitive: \"{{count}} секунды\",\n pluralGenitive: \"{{count}} секунд\",\n },\n past: {\n singularNominative: \"{{count}} секунду таму\",\n singularGenitive: \"{{count}} секунды таму\",\n pluralGenitive: \"{{count}} секунд таму\",\n },\n future: {\n singularNominative: \"праз {{count}} секунду\",\n singularGenitive: \"праз {{count}} секунды\",\n pluralGenitive: \"праз {{count}} секунд\",\n },\n }),\n\n halfAMinute: halfAMinute,\n\n lessThanXMinutes: buildLocalizeTokenFn({\n regular: {\n one: \"менш за хвіліну\",\n singularNominative: \"менш за {{count}} хвіліну\",\n singularGenitive: \"менш за {{count}} хвіліны\",\n pluralGenitive: \"менш за {{count}} хвілін\",\n },\n future: {\n one: \"менш, чым праз хвіліну\",\n singularNominative: \"менш, чым праз {{count}} хвіліну\",\n singularGenitive: \"менш, чым праз {{count}} хвіліны\",\n pluralGenitive: \"менш, чым праз {{count}} хвілін\",\n },\n }),\n\n xMinutes: buildLocalizeTokenFn({\n regular: {\n singularNominative: \"{{count}} хвіліна\",\n singularGenitive: \"{{count}} хвіліны\",\n pluralGenitive: \"{{count}} хвілін\",\n },\n past: {\n singularNominative: \"{{count}} хвіліну таму\",\n singularGenitive: \"{{count}} хвіліны таму\",\n pluralGenitive: \"{{count}} хвілін таму\",\n },\n future: {\n singularNominative: \"праз {{count}} хвіліну\",\n singularGenitive: \"праз {{count}} хвіліны\",\n pluralGenitive: \"праз {{count}} хвілін\",\n },\n }),\n\n aboutXHours: buildLocalizeTokenFn({\n regular: {\n singularNominative: \"каля {{count}} гадзіны\",\n singularGenitive: \"каля {{count}} гадзін\",\n pluralGenitive: \"каля {{count}} гадзін\",\n },\n future: {\n singularNominative: \"прыблізна праз {{count}} гадзіну\",\n singularGenitive: \"прыблізна праз {{count}} гадзіны\",\n pluralGenitive: \"прыблізна праз {{count}} гадзін\",\n },\n }),\n\n xHours: buildLocalizeTokenFn({\n regular: {\n singularNominative: \"{{count}} гадзіна\",\n singularGenitive: \"{{count}} гадзіны\",\n pluralGenitive: \"{{count}} гадзін\",\n },\n past: {\n singularNominative: \"{{count}} гадзіну таму\",\n singularGenitive: \"{{count}} гадзіны таму\",\n pluralGenitive: \"{{count}} гадзін таму\",\n },\n future: {\n singularNominative: \"праз {{count}} гадзіну\",\n singularGenitive: \"праз {{count}} гадзіны\",\n pluralGenitive: \"праз {{count}} гадзін\",\n },\n }),\n\n xDays: buildLocalizeTokenFn({\n regular: {\n singularNominative: \"{{count}} дзень\",\n singularGenitive: \"{{count}} дні\",\n pluralGenitive: \"{{count}} дзён\",\n },\n }),\n\n aboutXWeeks: buildLocalizeTokenFn({\n regular: {\n singularNominative: \"каля {{count}} тыдні\",\n singularGenitive: \"каля {{count}} тыдняў\",\n pluralGenitive: \"каля {{count}} тыдняў\",\n },\n future: {\n singularNominative: \"прыблізна праз {{count}} тыдзень\",\n singularGenitive: \"прыблізна праз {{count}} тыдні\",\n pluralGenitive: \"прыблізна праз {{count}} тыдняў\",\n },\n }),\n\n xWeeks: buildLocalizeTokenFn({\n regular: {\n singularNominative: \"{{count}} тыдзень\",\n singularGenitive: \"{{count}} тыдні\",\n pluralGenitive: \"{{count}} тыдняў\",\n },\n }),\n\n aboutXMonths: buildLocalizeTokenFn({\n regular: {\n singularNominative: \"каля {{count}} месяца\",\n singularGenitive: \"каля {{count}} месяцаў\",\n pluralGenitive: \"каля {{count}} месяцаў\",\n },\n future: {\n singularNominative: \"прыблізна праз {{count}} месяц\",\n singularGenitive: \"прыблізна праз {{count}} месяцы\",\n pluralGenitive: \"прыблізна праз {{count}} месяцаў\",\n },\n }),\n\n xMonths: buildLocalizeTokenFn({\n regular: {\n singularNominative: \"{{count}} месяц\",\n singularGenitive: \"{{count}} месяцы\",\n pluralGenitive: \"{{count}} месяцаў\",\n },\n }),\n\n aboutXYears: buildLocalizeTokenFn({\n regular: {\n singularNominative: \"каля {{count}} года\",\n singularGenitive: \"каля {{count}} гадоў\",\n pluralGenitive: \"каля {{count}} гадоў\",\n },\n future: {\n singularNominative: \"прыблізна праз {{count}} год\",\n singularGenitive: \"прыблізна праз {{count}} гады\",\n pluralGenitive: \"прыблізна праз {{count}} гадоў\",\n },\n }),\n\n xYears: buildLocalizeTokenFn({\n regular: {\n singularNominative: \"{{count}} год\",\n singularGenitive: \"{{count}} гады\",\n pluralGenitive: \"{{count}} гадоў\",\n },\n }),\n\n overXYears: buildLocalizeTokenFn({\n regular: {\n singularNominative: \"больш за {{count}} год\",\n singularGenitive: \"больш за {{count}} гады\",\n pluralGenitive: \"больш за {{count}} гадоў\",\n },\n future: {\n singularNominative: \"больш, чым праз {{count}} год\",\n singularGenitive: \"больш, чым праз {{count}} гады\",\n pluralGenitive: \"больш, чым праз {{count}} гадоў\",\n },\n }),\n\n almostXYears: buildLocalizeTokenFn({\n regular: {\n singularNominative: \"амаль {{count}} год\",\n singularGenitive: \"амаль {{count}} гады\",\n pluralGenitive: \"амаль {{count}} гадоў\",\n },\n future: {\n singularNominative: \"амаль праз {{count}} год\",\n singularGenitive: \"амаль праз {{count}} гады\",\n pluralGenitive: \"амаль праз {{count}} гадоў\",\n },\n }),\n};\n\nexport const formatDistance = (token, count, options) => {\n options = options || {};\n return formatDistanceLocale[token](count, options);\n};\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, d MMMM y 'г.'\",\n long: \"d MMMM y 'г.'\",\n medium: \"d MMM y 'г.'\",\n short: \"dd.MM.y\",\n};\n\nconst timeFormats = {\n full: \"H:mm:ss zzzz\",\n long: \"H:mm:ss z\",\n medium: \"H:mm:ss\",\n short: \"H:mm\",\n};\n\nconst dateTimeFormats = {\n any: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"any\",\n }),\n};\n","import { isSameWeek } from \"../../../isSameWeek.js\";\nimport { toDate } from \"../../../toDate.js\";\n\nconst accusativeWeekdays = [\n \"нядзелю\",\n \"панядзелак\",\n \"аўторак\",\n \"сераду\",\n \"чацвер\",\n \"пятніцу\",\n \"суботу\",\n];\n\nfunction lastWeek(day) {\n const weekday = accusativeWeekdays[day];\n\n switch (day) {\n case 0:\n case 3:\n case 5:\n case 6:\n return \"'у мінулую \" + weekday + \" а' p\";\n case 1:\n case 2:\n case 4:\n return \"'у мінулы \" + weekday + \" а' p\";\n }\n}\n\nfunction thisWeek(day) {\n const weekday = accusativeWeekdays[day];\n\n return \"'у \" + weekday + \" а' p\";\n}\n\nfunction nextWeek(day) {\n const weekday = accusativeWeekdays[day];\n\n switch (day) {\n case 0:\n case 3:\n case 5:\n case 6:\n return \"'у наступную \" + weekday + \" а' p\";\n case 1:\n case 2:\n case 4:\n return \"'у наступны \" + weekday + \" а' p\";\n }\n}\n\nconst lastWeekFormat = (dirtyDate, baseDate, options) => {\n const date = toDate(dirtyDate);\n const day = date.getDay();\n if (isSameWeek(date, baseDate, options)) {\n return thisWeek(day);\n } else {\n return lastWeek(day);\n }\n};\n\nconst nextWeekFormat = (dirtyDate, baseDate, options) => {\n const date = toDate(dirtyDate);\n const day = date.getDay();\n if (isSameWeek(date, baseDate, options)) {\n return thisWeek(day);\n } else {\n return nextWeek(day);\n }\n};\n\nconst formatRelativeLocale = {\n lastWeek: lastWeekFormat,\n yesterday: \"'учора а' p\",\n today: \"'сёння а' p\",\n tomorrow: \"'заўтра а' p\",\n nextWeek: nextWeekFormat,\n other: \"P\",\n};\n\nexport const formatRelative = (token, date, baseDate, options) => {\n const format = formatRelativeLocale[token];\n\n if (typeof format === \"function\") {\n return format(date, baseDate, options);\n }\n\n return format;\n};\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"да н.э.\", \"н.э.\"],\n abbreviated: [\"да н. э.\", \"н. э.\"],\n wide: [\"да нашай эры\", \"нашай эры\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"1-ы кв.\", \"2-і кв.\", \"3-і кв.\", \"4-ы кв.\"],\n wide: [\"1-ы квартал\", \"2-і квартал\", \"3-і квартал\", \"4-ы квартал\"],\n};\n\nconst monthValues = {\n narrow: [\"С\", \"Л\", \"С\", \"К\", \"М\", \"Ч\", \"Л\", \"Ж\", \"В\", \"К\", \"Л\", \"С\"],\n abbreviated: [\n \"студз.\",\n \"лют.\",\n \"сак.\",\n \"крас.\",\n \"май\",\n \"чэрв.\",\n \"ліп.\",\n \"жн.\",\n \"вер.\",\n \"кастр.\",\n \"ліст.\",\n \"снеж.\",\n ],\n\n wide: [\n \"студзень\",\n \"люты\",\n \"сакавік\",\n \"красавік\",\n \"май\",\n \"чэрвень\",\n \"ліпень\",\n \"жнівень\",\n \"верасень\",\n \"кастрычнік\",\n \"лістапад\",\n \"снежань\",\n ],\n};\nconst formattingMonthValues = {\n narrow: [\"С\", \"Л\", \"С\", \"К\", \"М\", \"Ч\", \"Л\", \"Ж\", \"В\", \"К\", \"Л\", \"С\"],\n abbreviated: [\n \"студз.\",\n \"лют.\",\n \"сак.\",\n \"крас.\",\n \"мая\",\n \"чэрв.\",\n \"ліп.\",\n \"жн.\",\n \"вер.\",\n \"кастр.\",\n \"ліст.\",\n \"снеж.\",\n ],\n\n wide: [\n \"студзеня\",\n \"лютага\",\n \"сакавіка\",\n \"красавіка\",\n \"мая\",\n \"чэрвеня\",\n \"ліпеня\",\n \"жніўня\",\n \"верасня\",\n \"кастрычніка\",\n \"лістапада\",\n \"снежня\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"Н\", \"П\", \"А\", \"С\", \"Ч\", \"П\", \"С\"],\n short: [\"нд\", \"пн\", \"аў\", \"ср\", \"чц\", \"пт\", \"сб\"],\n abbreviated: [\"нядз\", \"пан\", \"аўт\", \"сер\", \"чац\", \"пят\", \"суб\"],\n wide: [\n \"нядзеля\",\n \"панядзелак\",\n \"аўторак\",\n \"серада\",\n \"чацвер\",\n \"пятніца\",\n \"субота\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"ДП\",\n pm: \"ПП\",\n midnight: \"поўн.\",\n noon: \"поўд.\",\n morning: \"ран.\",\n afternoon: \"дзень\",\n evening: \"веч.\",\n night: \"ноч\",\n },\n abbreviated: {\n am: \"ДП\",\n pm: \"ПП\",\n midnight: \"поўн.\",\n noon: \"поўд.\",\n morning: \"ран.\",\n afternoon: \"дзень\",\n evening: \"веч.\",\n night: \"ноч\",\n },\n wide: {\n am: \"ДП\",\n pm: \"ПП\",\n midnight: \"поўнач\",\n noon: \"поўдзень\",\n morning: \"раніца\",\n afternoon: \"дзень\",\n evening: \"вечар\",\n night: \"ноч\",\n },\n};\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"ДП\",\n pm: \"ПП\",\n midnight: \"поўн.\",\n noon: \"поўд.\",\n morning: \"ран.\",\n afternoon: \"дня\",\n evening: \"веч.\",\n night: \"ночы\",\n },\n abbreviated: {\n am: \"ДП\",\n pm: \"ПП\",\n midnight: \"поўн.\",\n noon: \"поўд.\",\n morning: \"ран.\",\n afternoon: \"дня\",\n evening: \"веч.\",\n night: \"ночы\",\n },\n wide: {\n am: \"ДП\",\n pm: \"ПП\",\n midnight: \"поўнач\",\n noon: \"поўдзень\",\n morning: \"раніцы\",\n afternoon: \"дня\",\n evening: \"вечара\",\n night: \"ночы\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, options) => {\n const unit = String(options?.unit);\n const number = Number(dirtyNumber);\n let suffix;\n\n /** Though it's an incorrect ordinal form of a date we use it here for consistency with other similar locales (ru, uk)\n * For date-month combinations should be used `d` formatter.\n * Correct: `d MMMM` (4 верасня)\n * Incorrect: `do MMMM` (4-га верасня)\n *\n * But following the consistency leads to mistakes for literal uses of `do` formatter (ordinal day of month).\n * So for phrase \"5th day of month\" (`do дзень месяца`)\n * library will produce: `5-га дзень месяца`\n * but correct spelling should be: `5-ы дзень месяца`\n *\n * So I guess there should be a stand-alone and a formatting version of \"day of month\" formatters\n */\n if (unit === \"date\") {\n suffix = \"-га\";\n } else if (unit === \"hour\" || unit === \"minute\" || unit === \"second\") {\n suffix = \"-я\";\n } else {\n suffix =\n (number % 10 === 2 || number % 10 === 3) &&\n number % 100 !== 12 &&\n number % 100 !== 13\n ? \"-і\"\n : \"-ы\";\n }\n\n return number + suffix;\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n formattingValues: formattingMonthValues,\n defaultFormattingWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"any\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern =\n /^(\\d+)(-?(е|я|га|і|ы|ае|ая|яя|шы|гі|ці|ты|мы))?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^((да )?н\\.?\\s?э\\.?)/i,\n abbreviated: /^((да )?н\\.?\\s?э\\.?)/i,\n wide: /^(да нашай эры|нашай эры|наша эра)/i,\n};\nconst parseEraPatterns = {\n any: [/^д/i, /^н/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^[1234](-?[ыі]?)? кв.?/i,\n wide: /^[1234](-?[ыі]?)? квартал/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[слкмчжв]/i,\n abbreviated:\n /^(студз|лют|сак|крас|ма[йя]|чэрв|ліп|жн|вер|кастр|ліст|снеж)\\.?/i,\n wide: /^(студзен[ья]|лют(ы|ага)|сакавіка?|красавіка?|ма[йя]|чэрвен[ья]|ліпен[ья]|жні(вень|ўня)|верас(ень|ня)|кастрычніка?|лістапада?|снеж(ань|ня))/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^с/i,\n /^л/i,\n /^с/i,\n /^к/i,\n /^м/i,\n /^ч/i,\n /^л/i,\n /^ж/i,\n /^в/i,\n /^к/i,\n /^л/i,\n /^с/i,\n ],\n\n any: [\n /^ст/i,\n /^лю/i,\n /^са/i,\n /^кр/i,\n /^ма/i,\n /^ч/i,\n /^ліп/i,\n /^ж/i,\n /^в/i,\n /^ка/i,\n /^ліс/i,\n /^сн/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[нпасч]/i,\n short: /^(нд|ня|пн|па|аў|ат|ср|се|чц|ча|пт|пя|сб|су)\\.?/i,\n abbreviated: /^(нядз?|ндз|пнд|пан|аўт|срд|сер|чцв|чац|птн|пят|суб).?/i,\n wide: /^(нядзел[яі]|панядзел(ак|ка)|аўтор(ак|ка)|серад[аы]|чацв(ер|ярга)|пятніц[аы]|субот[аы])/i,\n};\nconst parseDayPatterns = {\n narrow: [/^н/i, /^п/i, /^а/i, /^с/i, /^ч/i, /^п/i, /^с/i],\n any: [/^н/i, /^п[ан]/i, /^а/i, /^с[ер]/i, /^ч/i, /^п[ят]/i, /^с[уб]/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^([дп]п|поўн\\.?|поўд\\.?|ран\\.?|дзень|дня|веч\\.?|ночы?)/i,\n abbreviated: /^([дп]п|поўн\\.?|поўд\\.?|ран\\.?|дзень|дня|веч\\.?|ночы?)/i,\n wide: /^([дп]п|поўнач|поўдзень|раніц[аы]|дзень|дня|вечара?|ночы?)/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^дп/i,\n pm: /^пп/i,\n midnight: /^поўн/i,\n noon: /^поўд/i,\n morning: /^р/i,\n afternoon: /^д[зн]/i,\n evening: /^в/i,\n night: /^н/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./be/_lib/formatDistance.js\";\nimport { formatLong } from \"./be/_lib/formatLong.js\";\nimport { formatRelative } from \"./be/_lib/formatRelative.js\";\nimport { localize } from \"./be/_lib/localize.js\";\nimport { match } from \"./be/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary Belarusian locale.\n * @language Belarusian\n * @iso-639-2 bel\n * @author Kiryl Anokhin [@alyrik](https://github.com/alyrik)\n * @author Martin Wind [@arvigeus](https://github.com/mawi12345)\n */\nexport const be = {\n code: \"be\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1 /* Monday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default be;\n"],"names":["declension","scheme","count","rem10","rem100","buildLocalizeTokenFn","options","halfAMinute","_","formatDistanceLocale","formatDistance","token","dateFormats","timeFormats","dateTimeFormats","formatLong","buildFormatLongFn","accusativeWeekdays","lastWeek","day","weekday","thisWeek","nextWeek","lastWeekFormat","dirtyDate","baseDate","date","toDate","isSameWeek","nextWeekFormat","formatRelativeLocale","formatRelative","format","eraValues","quarterValues","monthValues","formattingMonthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","dirtyNumber","unit","number","suffix","localize","buildLocalizeFn","quarter","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","match","buildMatchPatternFn","value","buildMatchFn","index","be"],"mappings":";oNAAA,SAASA,EAAWC,EAAQC,EAAO,CAEjC,GAAID,EAAO,MAAQ,QAAaC,IAAU,EACxC,OAAOD,EAAO,IAGhB,MAAME,EAAQD,EAAQ,GAChBE,EAASF,EAAQ,IAGvB,OAAIC,IAAU,GAAKC,IAAW,GACrBH,EAAO,mBAAmB,QAAQ,YAAa,OAAOC,CAAK,CAAC,EAG1DC,GAAS,GAAKA,GAAS,IAAMC,EAAS,IAAMA,EAAS,IACvDH,EAAO,iBAAiB,QAAQ,YAAa,OAAOC,CAAK,CAAC,EAI1DD,EAAO,eAAe,QAAQ,YAAa,OAAOC,CAAK,CAAC,CAEnE,CAEA,SAASG,EAAqBJ,EAAQ,CACpC,MAAO,CAACC,EAAOI,IACTA,GAAWA,EAAQ,UACjBA,EAAQ,YAAcA,EAAQ,WAAa,EACzCL,EAAO,OACFD,EAAWC,EAAO,OAAQC,CAAK,EAE/B,QAAUF,EAAWC,EAAO,QAASC,CAAK,EAG/CD,EAAO,KACFD,EAAWC,EAAO,KAAMC,CAAK,EAE7BF,EAAWC,EAAO,QAASC,CAAK,EAAI,QAIxCF,EAAWC,EAAO,QAASC,CAAK,CAG7C,CAEA,MAAMK,EAAc,CAACC,EAAGF,IAClBA,GAAWA,EAAQ,UACjBA,EAAQ,YAAcA,EAAQ,WAAa,EACtC,kBAEA,kBAIJ,aAGHG,EAAuB,CAC3B,iBAAkBJ,EAAqB,CACrC,QAAS,CACP,IAAK,kBACL,mBAAoB,4BACpB,iBAAkB,4BAClB,eAAgB,0BACtB,EACI,OAAQ,CACN,IAAK,yBACL,mBAAoB,mCACpB,iBAAkB,mCAClB,eAAgB,iCACtB,CACA,CAAG,EAED,SAAUA,EAAqB,CAC7B,QAAS,CACP,mBAAoB,oBACpB,iBAAkB,oBAClB,eAAgB,kBACtB,EACI,KAAM,CACJ,mBAAoB,yBACpB,iBAAkB,yBAClB,eAAgB,uBACtB,EACI,OAAQ,CACN,mBAAoB,yBACpB,iBAAkB,yBAClB,eAAgB,uBACtB,CACA,CAAG,EAED,YAAaE,EAEb,iBAAkBF,EAAqB,CACrC,QAAS,CACP,IAAK,kBACL,mBAAoB,4BACpB,iBAAkB,4BAClB,eAAgB,0BACtB,EACI,OAAQ,CACN,IAAK,yBACL,mBAAoB,mCACpB,iBAAkB,mCAClB,eAAgB,iCACtB,CACA,CAAG,EAED,SAAUA,EAAqB,CAC7B,QAAS,CACP,mBAAoB,oBACpB,iBAAkB,oBAClB,eAAgB,kBACtB,EACI,KAAM,CACJ,mBAAoB,yBACpB,iBAAkB,yBAClB,eAAgB,uBACtB,EACI,OAAQ,CACN,mBAAoB,yBACpB,iBAAkB,yBAClB,eAAgB,uBACtB,CACA,CAAG,EAED,YAAaA,EAAqB,CAChC,QAAS,CACP,mBAAoB,yBACpB,iBAAkB,wBAClB,eAAgB,uBACtB,EACI,OAAQ,CACN,mBAAoB,mCACpB,iBAAkB,mCAClB,eAAgB,iCACtB,CACA,CAAG,EAED,OAAQA,EAAqB,CAC3B,QAAS,CACP,mBAAoB,oBACpB,iBAAkB,oBAClB,eAAgB,kBACtB,EACI,KAAM,CACJ,mBAAoB,yBACpB,iBAAkB,yBAClB,eAAgB,uBACtB,EACI,OAAQ,CACN,mBAAoB,yBACpB,iBAAkB,yBAClB,eAAgB,uBACtB,CACA,CAAG,EAED,MAAOA,EAAqB,CAC1B,QAAS,CACP,mBAAoB,kBACpB,iBAAkB,gBAClB,eAAgB,gBACtB,CACA,CAAG,EAED,YAAaA,EAAqB,CAChC,QAAS,CACP,mBAAoB,uBACpB,iBAAkB,wBAClB,eAAgB,uBACtB,EACI,OAAQ,CACN,mBAAoB,mCACpB,iBAAkB,iCAClB,eAAgB,iCACtB,CACA,CAAG,EAED,OAAQA,EAAqB,CAC3B,QAAS,CACP,mBAAoB,oBACpB,iBAAkB,kBAClB,eAAgB,kBACtB,CACA,CAAG,EAED,aAAcA,EAAqB,CACjC,QAAS,CACP,mBAAoB,wBACpB,iBAAkB,yBAClB,eAAgB,wBACtB,EACI,OAAQ,CACN,mBAAoB,iCACpB,iBAAkB,kCAClB,eAAgB,kCACtB,CACA,CAAG,EAED,QAASA,EAAqB,CAC5B,QAAS,CACP,mBAAoB,kBACpB,iBAAkB,mBAClB,eAAgB,mBACtB,CACA,CAAG,EAED,YAAaA,EAAqB,CAChC,QAAS,CACP,mBAAoB,sBACpB,iBAAkB,uBAClB,eAAgB,sBACtB,EACI,OAAQ,CACN,mBAAoB,+BACpB,iBAAkB,gCAClB,eAAgB,gCACtB,CACA,CAAG,EAED,OAAQA,EAAqB,CAC3B,QAAS,CACP,mBAAoB,gBACpB,iBAAkB,iBAClB,eAAgB,iBACtB,CACA,CAAG,EAED,WAAYA,EAAqB,CAC/B,QAAS,CACP,mBAAoB,yBACpB,iBAAkB,0BAClB,eAAgB,0BACtB,EACI,OAAQ,CACN,mBAAoB,gCACpB,iBAAkB,iCAClB,eAAgB,iCACtB,CACA,CAAG,EAED,aAAcA,EAAqB,CACjC,QAAS,CACP,mBAAoB,sBACpB,iBAAkB,uBAClB,eAAgB,uBACtB,EACI,OAAQ,CACN,mBAAoB,2BACpB,iBAAkB,4BAClB,eAAgB,4BACtB,CACA,CAAG,CACH,EAEaK,EAAiB,CAACC,EAAOT,EAAOI,KAC3CA,EAAUA,GAAW,CAAA,EACdG,EAAqBE,CAAK,EAAET,EAAOI,CAAO,GC/P7CM,EAAc,CAClB,KAAM,sBACN,KAAM,gBACN,OAAQ,eACR,MAAO,SACT,EAEMC,EAAc,CAClB,KAAM,eACN,KAAM,YACN,OAAQ,UACR,MAAO,MACT,EAEMC,EAAkB,CACtB,IAAK,oBACP,EAEaC,EAAa,CACxB,KAAMC,EAAkB,CACtB,QAASJ,EACT,aAAc,MAClB,CAAG,EAED,KAAMI,EAAkB,CACtB,QAASH,EACT,aAAc,MAClB,CAAG,EAED,SAAUG,EAAkB,CAC1B,QAASF,EACT,aAAc,KAClB,CAAG,CACH,EChCMG,EAAqB,CACzB,UACA,aACA,UACA,SACA,SACA,UACA,QACF,EAEA,SAASC,EAASC,EAAK,CACrB,MAAMC,EAAUH,EAAmBE,CAAG,EAEtC,OAAQA,EAAG,CACT,IAAK,GACL,OACA,IAAK,GACL,IAAK,GACH,MAAO,cAAgBC,EAAU,QACnC,IAAK,GACL,IAAK,GACL,OACE,MAAO,aAAeA,EAAU,OACtC,CACA,CAEA,SAASC,EAASF,EAAK,CAGrB,MAAO,MAFSF,EAAmBE,CAAG,EAEb,OAC3B,CAEA,SAASG,EAASH,EAAK,CACrB,MAAMC,EAAUH,EAAmBE,CAAG,EAEtC,OAAQA,EAAG,CACT,OACA,IAAK,GACL,IAAK,GACL,IAAK,GACH,MAAO,gBAAkBC,EAAU,QACrC,IAAK,GACL,OACA,IAAK,GACH,MAAO,eAAiBA,EAAU,OACxC,CACA,CAEA,MAAMG,EAAiB,CAACC,EAAWC,EAAUnB,IAAY,CACvD,MAAMoB,EAAOC,EAAOH,CAAS,EACvBL,EAAMO,EAAK,OAAM,EACvB,OAAIE,EAAWF,EAAMD,EAAUnB,CAAO,EAC7Be,EAASF,CAAG,EAEZD,EAASC,CAAG,CAEvB,EAEMU,EAAiB,CAACL,EAAWC,EAAUnB,IAAY,CACvD,MAAMoB,EAAOC,EAAOH,CAAS,EACvBL,EAAMO,EAAK,OAAM,EACvB,OAAIE,EAAWF,EAAMD,EAAUnB,CAAO,EAC7Be,EAASF,CAAG,EAEZG,EAASH,CAAG,CAEvB,EAEMW,EAAuB,CAC3B,SAAUP,EACV,UAAW,cACX,MAAO,cACP,SAAU,eACV,SAAUM,EACV,MAAO,GACT,EAEaE,EAAiB,CAACpB,EAAOe,EAAMD,EAAUnB,IAAY,CAChE,MAAM0B,EAASF,EAAqBnB,CAAK,EAEzC,OAAI,OAAOqB,GAAW,WACbA,EAAON,EAAMD,EAAUnB,CAAO,EAGhC0B,CACT,ECtFMC,EAAY,CAChB,OAAQ,CAAC,UAAW,MAAM,EAC1B,YAAa,CAAC,WAAY,OAAO,EACjC,KAAM,CAAC,eAAgB,WAAW,CACpC,EAEMC,EAAgB,CACpB,OAAQ,CAAC,IAAK,IAAK,IAAK,GAAG,EAC3B,YAAa,CAAC,UAAW,UAAW,UAAW,SAAS,EACxD,KAAM,CAAC,cAAe,cAAe,cAAe,aAAa,CACnE,EAEMC,EAAc,CAClB,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EACnE,YAAa,CACX,SACA,OACA,OACA,QACA,MACA,QACA,OACA,MACA,OACA,SACA,QACA,OACJ,EAEE,KAAM,CACJ,WACA,OACA,UACA,WACA,MACA,UACA,SACA,UACA,WACA,aACA,WACA,SACJ,CACA,EACMC,EAAwB,CAC5B,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EACnE,YAAa,CACX,SACA,OACA,OACA,QACA,MACA,QACA,OACA,MACA,OACA,SACA,QACA,OACJ,EAEE,KAAM,CACJ,WACA,SACA,WACA,YACA,MACA,UACA,SACA,SACA,UACA,cACA,YACA,QACJ,CACA,EAEMC,EAAY,CAChB,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAC1C,MAAO,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAI,EAChD,YAAa,CAAC,OAAQ,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAC9D,KAAM,CACJ,UACA,aACA,UACA,SACA,SACA,UACA,QACJ,CACA,EAEMC,EAAkB,CACtB,OAAQ,CACN,GAAI,KACJ,GAAI,KACJ,SAAU,QACV,KAAM,QACN,QAAS,OACT,UAAW,QACX,QAAS,OACT,MAAO,KACX,EACE,YAAa,CACX,GAAI,KACJ,GAAI,KACJ,SAAU,QACV,KAAM,QACN,QAAS,OACT,UAAW,QACX,QAAS,OACT,MAAO,KACX,EACE,KAAM,CACJ,GAAI,KACJ,GAAI,KACJ,SAAU,SACV,KAAM,WACN,QAAS,SACT,UAAW,QACX,QAAS,QACT,MAAO,KACX,CACA,EACMC,EAA4B,CAChC,OAAQ,CACN,GAAI,KACJ,GAAI,KACJ,SAAU,QACV,KAAM,QACN,QAAS,OACT,UAAW,MACX,QAAS,OACT,MAAO,MACX,EACE,YAAa,CACX,GAAI,KACJ,GAAI,KACJ,SAAU,QACV,KAAM,QACN,QAAS,OACT,UAAW,MACX,QAAS,OACT,MAAO,MACX,EACE,KAAM,CACJ,GAAI,KACJ,GAAI,KACJ,SAAU,SACV,KAAM,WACN,QAAS,SACT,UAAW,MACX,QAAS,SACT,MAAO,MACX,CACA,EAEMC,EAAgB,CAACC,EAAanC,IAAY,CAC9C,MAAMoC,EAAO,OAAOpC,GAAS,IAAI,EAC3BqC,EAAS,OAAOF,CAAW,EACjC,IAAIG,EAcJ,OAAIF,IAAS,OACXE,EAAS,MACAF,IAAS,QAAUA,IAAS,UAAYA,IAAS,SAC1DE,EAAS,KAETA,GACGD,EAAS,KAAO,GAAKA,EAAS,KAAO,IACtCA,EAAS,MAAQ,IACjBA,EAAS,MAAQ,GACb,KACA,KAGDA,EAASC,CAClB,EAEaC,EAAW,CACtB,cAAAL,EAEA,IAAKM,EAAgB,CACnB,OAAQb,EACR,aAAc,MAClB,CAAG,EAED,QAASa,EAAgB,CACvB,OAAQZ,EACR,aAAc,OACd,iBAAmBa,GAAYA,EAAU,CAC7C,CAAG,EAED,MAAOD,EAAgB,CACrB,OAAQX,EACR,aAAc,OACd,iBAAkBC,EAClB,uBAAwB,MAC5B,CAAG,EAED,IAAKU,EAAgB,CACnB,OAAQT,EACR,aAAc,MAClB,CAAG,EAED,UAAWS,EAAgB,CACzB,OAAQR,EACR,aAAc,MACd,iBAAkBC,EAClB,uBAAwB,MAC5B,CAAG,CACH,EC7NMS,EACJ,mDACIC,EAA4B,OAE5BC,EAAmB,CACvB,OAAQ,wBACR,YAAa,wBACb,KAAM,qCACR,EACMC,EAAmB,CACvB,IAAK,CAAC,MAAO,KAAK,CACpB,EAEMC,EAAuB,CAC3B,OAAQ,WACR,YAAa,0BACb,KAAM,4BACR,EACMC,EAAuB,CAC3B,IAAK,CAAC,KAAM,KAAM,KAAM,IAAI,CAC9B,EAEMC,EAAqB,CACzB,OAAQ,cACR,YACE,mEACF,KAAM,8IACR,EACMC,EAAqB,CACzB,OAAQ,CACN,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACJ,EAEE,IAAK,CACH,OACA,OACA,OACA,OACA,OACA,MACA,QACA,MACA,MACA,OACA,QACA,MACJ,CACA,EAEMC,EAAmB,CACvB,OAAQ,YACR,MAAO,mDACP,YAAa,0DACb,KAAM,0FACR,EACMC,EAAmB,CACvB,OAAQ,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EACxD,IAAK,CAAC,MAAO,UAAW,MAAO,UAAW,MAAO,UAAW,SAAS,CACvE,EAEMC,EAAyB,CAC7B,OAAQ,0DACR,YAAa,0DACb,KAAM,6DACR,EACMC,EAAyB,CAC7B,IAAK,CACH,GAAI,OACJ,GAAI,OACJ,SAAU,SACV,KAAM,SACN,QAAS,MACT,UAAW,UACX,QAAS,MACT,MAAO,KACX,CACA,EAEaC,EAAQ,CACnB,cAAeC,EAAoB,CACjC,aAAcb,EACd,aAAcC,EACd,cAAgBa,GAAU,SAASA,EAAO,EAAE,CAChD,CAAG,EAED,IAAKC,EAAa,CAChB,cAAeb,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,QAASY,EAAa,CACpB,cAAeX,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,MACnB,cAAgBW,GAAUA,EAAQ,CACtC,CAAG,EAED,MAAOD,EAAa,CAClB,cAAeT,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,IAAKQ,EAAa,CAChB,cAAeP,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,EAED,UAAWM,EAAa,CACtB,cAAeL,EACf,kBAAmB,OACnB,cAAeC,EACf,kBAAmB,KACvB,CAAG,CACH,ECxHaM,GAAK,CAChB,KAAM,KACN,eAAgBvD,EAChB,WAAYK,EACZ,eAAgBgB,EAChB,SAAUc,EACV,MAAOe,EACP,QAAS,CACP,aAAc,EACd,sBAAuB,CAC3B,CACA","x_google_ignoreList":[0,1,2,3,4,5]} \ No newline at end of file diff --git a/js/be-CW5fta_H.chunk.mjs.map.license b/js/be-CW5fta_H.chunk.mjs.map.license new file mode 100644 index 00000000..9ba6cea6 --- /dev/null +++ b/js/be-CW5fta_H.chunk.mjs.map.license @@ -0,0 +1,7 @@ +SPDX-License-Identifier: MIT +SPDX-FileCopyrightText: date-fns developers + +This file is generated from multiple sources. Included packages: +- date-fns + - version: 4.4.0 + - license: MIT diff --git a/js/be-tarask-CzbVxLq7.chunk.mjs b/js/be-tarask-CzbVxLq7.chunk.mjs new file mode 100644 index 00000000..0f4196cc --- /dev/null +++ b/js/be-tarask-CzbVxLq7.chunk.mjs @@ -0,0 +1,104 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=[window.OC.filePath('user_migration', '', 'js/index-lRX2_WBG.chunk.mjs'),window.OC.filePath('user_migration', '', 'js/user_migration-personalSettings.mjs'),window.OC.filePath('user_migration', '', 'css/personalSettings-i1_v3FZk.chunk.css'),window.OC.filePath('user_migration', '', 'css/index-bfXBK-tQ.chunk.css'),window.OC.filePath('user_migration', '', 'js/index-Cr1DLTt7.chunk.mjs'),window.OC.filePath('user_migration', '', 'css/index-DBPTxogX.chunk.css')])))=>i.map(i=>d[i]); +/*! third party licenses: js/vendor.LICENSE.txt */ +import{_ as H,k as st,u as It,P as ls,ae as ie,as as cs,l as Nt,o as x,e as P,m as D,a as E,t as L,p as N,Y as ee,W as V,at as Ee,d as z,c as k,C as M,f as O,F as $t,q as Mt,au as us,av as ds,H as Tt,J as B,I as K,aw as Ve,ax as Ie,ay as ii,N as kt,az as hs,i as ae,aA as ps,h as ft,r as J,b as R,V as le,B as mt,Q as ce,aB as si,aC as Ne,aD as ur,aE as fs,aF as oi,aG as dr,aH as ms,ac as ai,aI as Mn,aJ as gs,aK as ys,$ as Re,aL as bs,ad as vs,a3 as _e,aM as Rn,a5 as ws,w as Me,g as kn,y as ne,s as Fe,aN as Sn,aO as Cn,aP as xs,ap as _s,an as li,aQ as ks,U as ze,aR as Fn,aS as Ss,K as Cs,aT as Es,aU as Ns,aV as $s,aW as As,aX as Ts,aY as Os,aZ as Ps,n as se,a2 as Vt,a_ as nn,ar as rn,a$ as zn,b0 as Ls,b1 as Un,aj as Is,b2 as hr,a0 as At,b3 as js,b4 as Bs,b5 as Ds,b6 as Vs,D as wt,E as xt,aa as Ms,T as Rs,b7 as pr,b8 as Fs,b9 as zs,ba as Us,bb as Ws,bc as qs,bd as Hs,be as Gs,bf as Je,bg as Ks,bh as Zs,bi as Xs,bj as Oe,bk as Ys,bl as gt,bm as F,bn as En,bo as Js,bp as $e,bq as Wn,br as ci,S as Qs,bs as to,bt as eo,bu as no,R as ro,bv as io,bw as so,bx as oo,by as fr,bz as ao,bA as lo}from"./user_migration-personalSettings.mjs";const co=["id","textContent"],uo=["aria-label","aria-labelledby"],ho={class:"dialog__text"},po={class:"dialog__actions"},fo=st({__name:"NcDialog",props:Tt({name:{},message:{default:""},additionalTrapElements:{default:()=>[]},container:{default:"body"},size:{default:"small"},buttons:{default:()=>[]},isForm:{type:Boolean},noClose:{type:Boolean},closeOnClickOutside:{type:Boolean},outTransition:{type:Boolean},navigationAriaLabel:{default:""},navigationAriaLabelledby:{default:""},contentClasses:{default:""},dialogClasses:{default:""},navigationClasses:{default:""}},{open:{type:Boolean,default:!0},openModifiers:{}}),emits:Tt(["closing","reset","submit"],["update:open"]),setup(n,{emit:t}){const e=It(n,"open"),r=n,i=t,s=ls(),o=ie("wrapper"),{width:a}=cs(o,{width:900,height:0}),u=B(()=>a.value<876),l=B(()=>s?.navigation!==void 0),c=Nt(),h=B(()=>r.navigationAriaLabel||void 0),d=B(()=>{if(!r.navigationAriaLabel)return r.navigationAriaLabelledby||c}),m=ie("dialogElement"),g=B(()=>r.isForm&&!l.value?"form":"div"),p=B(()=>g.value!=="form"?{}:{submit(w){w.preventDefault(),i("submit",w)},reset(w){w.preventDefault(),i("reset",w)}}),f=K(!0);function y(w,S){w.type==="submit"&&g.value==="form"&&"reportValidity"in m.value&&!m.value.reportValidity()||(b(S),window.setTimeout(()=>v(),300))}function b(w){f.value=!1,i("closing",w)}function v(){f.value=!0,e.value=!1}const _=B(()=>({noClose:r.noClose,container:r.container===void 0?"body":r.container,labelId:c,size:r.size,show:e.value&&f.value,outTransition:r.outTransition,closeOnClickOutside:r.closeOnClickOutside,additionalTrapElements:r.additionalTrapElements}));return(w,S)=>e.value?(x(),P(N(ds),V({key:0,class:"dialog__modal",disableSwipe:""},_.value,{onClose:v,"onUpdate:show":S[0]||(S[0]=C=>b())}),{default:D(()=>[E("h2",{id:N(c),class:"dialog__name",textContent:L(n.name)},null,8,co),(x(),P(ee(g.value),V({ref:"dialogElement",class:["dialog",n.dialogClasses]},Ee(p.value)),{default:D(()=>[E("div",{ref:"wrapper",class:z(["dialog__wrapper",[{"dialog__wrapper--collapsed":u.value}]])},[l.value?(x(),k("nav",{key:0,class:z(["dialog__navigation",n.navigationClasses]),"aria-label":h.value,"aria-labelledby":d.value},[M(w.$slots,"navigation",{isCollapsed:u.value},void 0,!0)],10,uo)):O("",!0),E("div",{class:z(["dialog__content",n.contentClasses])},[M(w.$slots,"default",{},()=>[E("p",ho,L(n.message),1)],!0)],2)],2),E("div",po,[M(w.$slots,"actions",{},()=>[(x(!0),k($t,null,Mt(n.buttons,(C,T)=>(x(),P(N(us),V({key:T},{ref_for:!0},C,{onClick:(I,A)=>y(C,A)}),null,16,["onClick"]))),128))],!0)])]),_:3},16,["class"]))]),_:3},16)):O("",!0)}}),mo=H(fo,[["__scopeId","data-v-adda232f"]]);var sn={},go={2(n){function t(i,s,o){i instanceof RegExp&&(i=e(i,o)),s instanceof RegExp&&(s=e(s,o));var a=r(i,s,o);return a&&{start:a[0],end:a[1],pre:o.slice(0,a[0]),body:o.slice(a[0]+i.length,a[1]),post:o.slice(a[1]+s.length)}}function e(i,s){var o=s.match(i);return o?o[0]:null}function r(i,s,o){var a,u,l,c,h,d=o.indexOf(i),m=o.indexOf(s,d+1),g=d;if(d>=0&&m>0){for(a=[],l=o.length;g>=0&&!h;)g==d?(a.push(g),d=o.indexOf(i,g+1)):a.length==1?h=[a.pop(),m]:((u=a.pop())=0?d:m;a.length&&(h=[l,c])}return h}n.exports=t,t.range=r},101(n,t,e){var r;n=e.nmd(n),(function(){var i=(n&&n.exports,typeof Ie=="object"&&Ie);i.global!==i&&i.window;var s=function(c){this.message=c};(s.prototype=new Error).name="InvalidCharacterError";var o=function(c){throw new s(c)},a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",u=/[\t\n\f\r ]/g,l={encode:function(c){c=String(c),/[^\0-\xFF]/.test(c)&&o("The string to be encoded contains characters outside of the Latin1 range.");for(var h,d,m,g,p=c.length%3,f="",y=-1,b=c.length-p;++y>18&63)+a.charAt(g>>12&63)+a.charAt(g>>6&63)+a.charAt(63&g);return p==2?(h=c.charCodeAt(y)<<8,d=c.charCodeAt(++y),f+=a.charAt((g=h+d)>>10)+a.charAt(g>>4&63)+a.charAt(g<<2&63)+"="):p==1&&(g=c.charCodeAt(y),f+=a.charAt(g>>2)+a.charAt(g<<4&63)+"=="),f},decode:function(c){var h=(c=String(c).replace(u,"")).length;h%4==0&&(h=(c=c.replace(/==?$/,"")).length),(h%4==1||/[^+a-zA-Z0-9/]/.test(c))&&o("Invalid character: the string to be decoded is not correctly encoded.");for(var d,m,g=0,p="",f=-1;++f>(-2*g&6)));return p},version:"1.0.0"};(r=function(){return l}.call(t,e,t,n))===void 0||(n.exports=r)})()},172(n,t){t.d=function(e){if(!e)return 0;for(var r=(e=e.toString()).length,i=e.length;i--;){var s=e.charCodeAt(i);56320<=s&&s<=57343&&i--,127>>32-i},rotr:function(r,i){return r<<32-i|r>>>i},endian:function(r){if(r.constructor==Number)return 16711935&e.rotl(r,8)|4278255360&e.rotl(r,24);for(var i=0;i0;r--)i.push(Math.floor(256*Math.random()));return i},bytesToWords:function(r){for(var i=[],s=0,o=0;s>>5]|=r[s]<<24-o%32;return i},wordsToBytes:function(r){for(var i=[],s=0;s<32*r.length;s+=8)i.push(r[s>>>5]>>>24-s%32&255);return i},bytesToHex:function(r){for(var i=[],s=0;s>>4).toString(16)),i.push((15&r[s]).toString(16));return i.join("")},hexToBytes:function(r){for(var i=[],s=0;s>>6*(3-a)&63)):i.push("=");return i.join("")},base64ToBytes:function(r){r=r.replace(/[^A-Z0-9+\/]/gi,"");for(var i=[],s=0,o=0;s>>6-2*o);return i}},n.exports=e},135(n){function t(e){return!!e.constructor&&typeof e.constructor.isBuffer=="function"&&e.constructor.isBuffer(e)}n.exports=function(e){return e!=null&&(t(e)||(function(r){return typeof r.readFloatLE=="function"&&typeof r.slice=="function"&&t(r.slice(0,0))})(e)||!!e._isBuffer)}},542(n,t,e){(function(){var r=e(298),i=e(526).utf8,s=e(135),o=e(526).bin,a=function(u,l){u.constructor==String?u=l&&l.encoding==="binary"?o.stringToBytes(u):i.stringToBytes(u):s(u)?u=Array.prototype.slice.call(u,0):Array.isArray(u)||u.constructor===Uint8Array||(u=u.toString());for(var c=r.bytesToWords(u),h=8*u.length,d=1732584193,m=-271733879,g=-1732584194,p=271733878,f=0;f>>24)|4278255360&(c[f]<<24|c[f]>>>8);c[h>>>5]|=128<>>9<<4)]=h;var y=a._ff,b=a._gg,v=a._hh,_=a._ii;for(f=0;f>>0,m=m+S>>>0,g=g+C>>>0,p=p+T>>>0}return r.endian([d,m,g,p])};a._ff=function(u,l,c,h,d,m,g){var p=u+(l&c|~l&h)+(d>>>0)+g;return(p<>>32-m)+l},a._gg=function(u,l,c,h,d,m,g){var p=u+(l&h|c&~h)+(d>>>0)+g;return(p<>>32-m)+l},a._hh=function(u,l,c,h,d,m,g){var p=u+(l^c^h)+(d>>>0)+g;return(p<>>32-m)+l},a._ii=function(u,l,c,h,d,m,g){var p=u+(c^(l|~h))+(d>>>0)+g;return(p<>>32-m)+l},a._blocksize=16,a._digestsize=16,n.exports=function(u,l){if(u==null)throw new Error("Illegal argument "+u);var c=r.wordsToBytes(a(u,l));return l&&l.asBytes?c:l&&l.asString?o.bytesToString(c):r.bytesToHex(c)}})()},285(n,t,e){var r=e(2);n.exports=function(v,_){if(!v)return[];var w=(_=_||{}).max==null?1e5:_.max,S=_.maxLength==null?4e6:_.maxLength;return v.substr(0,2)==="{}"&&(v="\\{\\}"+v.substr(2)),b((function(C){return C.split("\\\\").join(i).split("\\{").join(s).split("\\}").join(o).split("\\,").join(a).split("\\.").join(u)})(v),w,S,!0).map(c)};var i="\0SLASH"+Math.random()+"\0",s="\0OPEN"+Math.random()+"\0",o="\0CLOSE"+Math.random()+"\0",a="\0COMMA"+Math.random()+"\0",u="\0PERIOD"+Math.random()+"\0";function l(v){return parseInt(v,10)==v?parseInt(v,10):v.charCodeAt(0)}function c(v){return v.split(i).join("\\").split(s).join("{").split(o).join("}").split(a).join(",").split(u).join(".")}function h(v){if(!v)return[""];var _=[],w=r("{","}",v);if(!w)return v.split(",");var S=w.pre,C=w.body,T=w.post,I=S.split(",");I[I.length-1]+="{"+C+"}";var A=h(T);return T.length&&(I[I.length-1]+=A.shift(),I.push.apply(I,A)),_.push.apply(_,I),_}function d(v){return"{"+v+"}"}function m(v){return/^-?0\d/.test(v)}function g(v,_){return v<=_}function p(v,_){return v>=_}function f(v,_,w,S,C,T){for(var I=[],A=0,j=0;j=S)return I;var $=v[j]+_+w[U];if(!T||$){if(A+$.length>C)return I;I.push($),A+=$.length}}return I}function y(v,_,w,S){var C=v.split(/\.\./),T=[];if(C[0]===void 0||C[1]===void 0)return T;var I=l(C[0]),A=l(C[1]),j=Math.max(C[0].length,C[1].length),U=C.length===3&&C[2]!==void 0?Math.max(Math.abs(l(C[2])),1):1,$=g;A0){var Ot=new Array(ut+1).join("0");W=St<0?"-"+Ot+W.slice(1):Ot+W}}if(yt+W.length>S)break;T.push(W),yt+=W.length}return T}function b(v,_,w,S){for(var C=[""],T=!1,I=!0;;){const G=r("{","}",v);if(!G)return f(C,v,[""],_,w,T);const Zt=G.pre;if(/\$$/.test(Zt)){if(C=f(C,Zt+"{"+G.body+"}",[""],_,w,T&&!G.post.length),I=!1,!G.post.length)break;v=G.post}else{var A,j=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(G.body),U=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(G.body),$=j||U,zt=G.body.indexOf(",")>=0;if(!$&&!zt){if(G.post.match(/,(?!,).*\}/)){v=G.pre+"{"+G.body+o+G.post,S=!0;continue}return f(C,Zt+"{"+G.body+"}"+G.post,[""],_,w,T)}if(I&&(T=S&&!$,I=!1),$)A=y(G.body,U,_,w);else{var yt=h(G.body);if(yt.length===1&&yt[0]!==void 0&&(yt=b(yt[0],_,w,!1).map(d)).length===1){if(C=f(C,Zt+yt[0],[""],_,w,T&&!G.post.length),!G.post.length)break;v=G.post;continue}for(var St=T&&!G.post.length&&!Zt,W=0;St&&W=_||ut+Le.length>w)break t;A.push(Le),ut+=Le.length}}}if(C=f(C,Zt,A,_,w,T&&!G.post.length),!G.post.length)break;v=G.post}}return C}},829(n){function t(l){return t=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(c){return typeof c}:function(c){return c&&typeof Symbol=="function"&&c.constructor===Symbol&&c!==Symbol.prototype?"symbol":typeof c},t(l)}function e(l){var c=typeof Map=="function"?new Map:void 0;return e=function(h){if(h===null||(d=h,Function.toString.call(d).indexOf("[native code]")===-1))return h;var d;if(typeof h!="function")throw new TypeError("Super expression must either be null or a function");if(c!==void 0){if(c.has(h))return c.get(h);c.set(h,m)}function m(){return r(h,arguments,s(this).constructor)}return m.prototype=Object.create(h.prototype,{constructor:{value:m,enumerable:!1,writable:!0,configurable:!0}}),i(m,h)},e(l)}function r(l,c,h){return r=(function(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch{return!1}})()?Reflect.construct:function(d,m,g){var p=[null];p.push.apply(p,m);var f=new(Function.bind.apply(d,p));return g&&i(f,g.prototype),f},r.apply(null,arguments)}function i(l,c){return i=Object.setPrototypeOf||function(h,d){return h.__proto__=d,h},i(l,c)}function s(l){return s=Object.setPrototypeOf?Object.getPrototypeOf:function(c){return c.__proto__||Object.getPrototypeOf(c)},s(l)}var o=(function(l){function c(h){var d;return(function(m,g){if(!(m instanceof g))throw new TypeError("Cannot call a class as a function")})(this,c),(d=(function(m,g){return!g||t(g)!=="object"&&typeof g!="function"?(function(p){if(p===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return p})(m):g})(this,s(c).call(this,h))).name="ObjectPrototypeMutationError",d}return(function(h,d){if(typeof d!="function"&&d!==null)throw new TypeError("Super expression must either be null or a function");h.prototype=Object.create(d&&d.prototype,{constructor:{value:h,writable:!0,configurable:!0}}),d&&i(h,d)})(c,l),c})(e(Error));function a(l,c){for(var h=arguments.length>2&&arguments[2]!==void 0?arguments[2]:function(){},d=c.split("."),m=d.length,g=function(y){var b=d[y];if(!l)return{v:void 0};if(b==="+"){if(Array.isArray(l))return{v:l.map((function(_,w){var S=d.slice(y+1);return S.length>0?a(_,S.join("."),h):h(l,w,d,y)}))};var v=d.slice(0,y).join(".");throw new Error("Object at wildcard (".concat(v,") is not an array"))}l=h(l,b,d,y)},p=0;p2&&arguments[2]!==void 0?arguments[2]:{};if(t(l)!="object"||l===null||c===void 0)return!1;if(typeof c=="number")return c in l;try{var d=!1;return a(l,c,(function(m,g,p,f){if(!u(p,f))return m&&m[g];d=h.own?m.hasOwnProperty(g):g in m})),d}catch{return!1}},hasOwn:function(l,c,h){return this.has(l,c,h||{own:!0})},isIn:function(l,c,h){var d=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};if(t(l)!="object"||l===null||c===void 0)return!1;try{var m=!1,g=!1;return a(l,c,(function(p,f,y,b){return m=m||p===h||!!p&&p[f]===h,g=u(y,b)&&t(p)==="object"&&f in p,p&&p[f]})),d.validPath?m&&g:m}catch{return!1}},ObjectPrototypeMutationError:o}},47(n,t,e){var r=e(410),i=function(l){return typeof l=="string"};function s(l,c){for(var h=[],d=0;d=-1&&!c;h--){var d=h>=0?arguments[h]:Ve.cwd();if(!i(d))throw new TypeError("Arguments to path.resolve must be strings");d&&(l=d+"/"+l,c=d.charAt(0)==="/")}return(c?"/":"")+(l=s(l.split("/"),!c).join("/"))||"."},a.normalize=function(l){var c=a.isAbsolute(l),h=l.substr(-1)==="/";return(l=s(l.split("/"),!c).join("/"))||c||(l="."),l&&h&&(l+="/"),(c?"/":"")+l},a.isAbsolute=function(l){return l.charAt(0)==="/"},a.join=function(){for(var l="",c=0;c=0&&b[_]==="";_--);return v>_?[]:b.slice(v,_+1)}l=a.resolve(l).substr(1),c=a.resolve(c).substr(1);for(var d=h(l.split("/")),m=h(c.split("/")),g=Math.min(d.length,m.length),p=g,f=0;f=2&&(_=_.slice(2)):p(S)?_=w[4]:S?C&&(_=_.slice(2)):I>=2&&p(v.protocol)&&(_=w[4]),{protocol:S,slashes:C||p(S),slashesCount:I,rest:_}}function y(b,v,_){if(b=(b=h(b)).replace(o,""),!(this instanceof y))return new y(b,v,_);var w,S,C,T,I,A,j=d.slice(),U=typeof v,$=this,zt=0;for(U!=="object"&&U!=="string"&&(_=v,v=null),_&&typeof _!="function"&&(_=i.parse),w=!(S=f(b||"",v=g(v))).protocol&&!S.slashes,$.slashes=S.slashes||w&&v.slashes,$.protocol=S.protocol||v.protocol||"",b=S.rest,(S.protocol==="file:"&&(S.slashesCount!==2||c.test(b))||!S.slashes&&(S.protocol||S.slashesCount<2||!p($.protocol)))&&(j[3]=[/(.*)/,"pathname"]);zt{var t=n&&n.__esModule?()=>n.default:()=>n;return q.d(t,{a:t}),t},q.d=(n,t)=>{for(var e in t)q.o(t,e)&&!q.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:t[e]})},q.o=(n,t)=>Object.prototype.hasOwnProperty.call(n,t),q.nmd=n=>(n.paths=[],n.children||(n.children=[]),n);var yo=q(737),bo=q.n(yo);function on(n){if(!Nn(n))throw new Error("Parameter was not an error")}function Nn(n){return!!n&&typeof n=="object"&&(t=n,Object.prototype.toString.call(t)==="[object Error]")||n instanceof Error;var t}class ct extends Error{constructor(t,e){const r=[...arguments],{options:i,shortMessage:s}=(function(a){let u,l="";if(a.length===0)u={};else if(Nn(a[0]))u={cause:a[0]},l=a.slice(1).join(" ")||"";else if(a[0]&&typeof a[0]=="object")u=Object.assign({},a[0]),l=a.slice(1).join(" ")||"";else{if(typeof a[0]!="string")throw new Error("Invalid arguments passed to Layerr");u={},l=l=a.join(" ")||""}return{options:u,shortMessage:l}})(r);let o=s;if(i.cause&&(o=`${o}: ${i.cause.message}`),super(o),this.message=o,i.name&&typeof i.name=="string"?this.name=i.name:this.name="Layerr",i.cause&&Object.defineProperty(this,"_cause",{value:i.cause}),Object.defineProperty(this,"_info",{value:{}}),i.info&&typeof i.info=="object"&&Object.assign(this._info,i.info),Error.captureStackTrace){const a=i.constructorOpt||this.constructor;Error.captureStackTrace(this,a)}}static cause(t){return on(t),t._cause&&Nn(t._cause)?t._cause:null}static fullStack(t){on(t);const e=ct.cause(t);return e?`${t.stack} +caused by: ${ct.fullStack(e)}`:t.stack??""}static info(t){on(t);const e={},r=ct.cause(t);return r&&Object.assign(e,ct.info(r)),t._info&&Object.assign(e,t._info),e}toString(){let t=this.name||this.constructor.name||this.constructor.prototype.name;return this.message&&(t=`${t}: ${this.message}`),t}}var vo=q(47),Ue=q.n(vo);const gr="__PATH_SEPARATOR_POSIX__",yr="__PATH_SEPARATOR_WINDOWS__";function Z(n){try{const t=n.replace(/\//g,gr).replace(/\\\\/g,yr);return encodeURIComponent(t).split(yr).join("\\\\").split(gr).join("/")}catch(t){throw new ct(t,"Failed encoding path")}}function br(n){return n.startsWith("/")?n:"/"+n}function Ae(n){let t=n;return t[0]!=="/"&&(t="/"+t),/^.+\/$/.test(t)&&(t=t.substr(0,t.length-1)),t}function wo(n){let t=new(bo())(n).pathname;return t.length<=0&&(t="/"),Ae(t)}function X(...n){return(function(){return(function(t){var e=[];if(t.length===0)return"";if(typeof t[0]!="string")throw new TypeError("Url must be a string. Received "+t[0]);if(t[0].match(/^[^/:]+:\/*$/)&&t.length>1){var r=t.shift();t[0]=r+t[0]}t[0].match(/^file:\/\/\//)?t[0]=t[0].replace(/^([^/:]+):\/*/,"$1:///"):t[0]=t[0].replace(/^([^/:]+):\/*/,"$1://");for(var i=0;i0&&(s=s.replace(/^[\/]+/,"")),s=i0?"?":"")+a.join("&")})(typeof arguments[0]=="object"?arguments[0]:[].slice.call(arguments))})(n.reduce(((t,e,r)=>((r===0||e!=="/"||e==="/"&&t[t.length-1]!=="/")&&t.push(e),t)),[]))}var xo=q(542),he=q.n(xo);function vr(n,t){const e=n.url.replace("//",""),r=e.indexOf("/")==-1?"/":e.slice(e.indexOf("/")),i=n.method?n.method.toUpperCase():"GET",s=!!/(^|,)\s*auth\s*($|,)/.test(t.qop)&&"auth",o=`00000000${t.nc}`.slice(-8),a=(function(d,m,g,p,f,y,b){const v=b||he()(`${m}:${g}:${p}`);return d&&d.toLowerCase()==="md5-sess"?he()(`${v}:${f}:${y}`):v})(t.algorithm,t.username,t.realm,t.password,t.nonce,t.cnonce,t.ha1),u=he()(`${i}:${r}`),l=s?he()(`${a}:${t.nonce}:${o}:${t.cnonce}:${s}:${u}`):he()(`${a}:${t.nonce}:${u}`),c={username:t.username,realm:t.realm,nonce:t.nonce,uri:r,qop:s,response:l,nc:o,cnonce:t.cnonce,algorithm:t.algorithm,opaque:t.opaque},h=[];for(const d in c)c[d]&&(d==="qop"||d==="nc"||d==="algorithm"?h.push(`${d}=${c[d]}`):h.push(`${d}="${c[d]}"`));return`Digest ${h.join(", ")}`}function ui(n){return(n.headers&&n.headers.get("www-authenticate")||"").split(/\s/)[0].toLowerCase()==="digest"}var _o=q(101),di=q.n(_o);function wr(n){return di().decode(n)}function xr(n,t){var e;return`Basic ${e=`${n}:${t}`,di().encode(e)}`}let pt=(function(n){return n.Auto="auto",n.Digest="digest",n.None="none",n.Password="password",n.Token="token",n})({}),Rt=(function(n){return n.DataTypeNoLength="data-type-no-length",n.InvalidAuthType="invalid-auth-type",n.InvalidOutputFormat="invalid-output-format",n.LinkUnsupportedAuthType="link-unsupported-auth",n.InvalidUpdateRange="invalid-update-range",n.NotSupported="not-supported",n})({});function hi(n,t,e,r,i){switch(n.authType){case pt.Auto:t&&e&&(n.headers.Authorization=xr(t,e));break;case pt.Digest:n.digest=(function(o,a,u){return{username:o,password:a,ha1:u,nc:0,algorithm:"md5",hasDigestAuth:!1}})(t,e,i);break;case pt.None:break;case pt.Password:n.headers.Authorization=xr(t,e);break;case pt.Token:n.headers.Authorization=`${(s=r).token_type} ${s.access_token}`;break;default:throw new ct({info:{code:Rt.InvalidAuthType}},`Invalid auth type: ${n.authType}`)}var s}q(345),q(800);const _r=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:typeof window<"u"?window:globalThis,ko=_r.fetch.bind(_r),kr="@@HOTPATCHER",So=()=>{};function an(n){return{original:n,methods:[n],final:!1}}class Co{constructor(){this._configuration={registry:{},getEmptyAction:"null"},this.__type__=kr}get configuration(){return this._configuration}get getEmptyAction(){return this.configuration.getEmptyAction}set getEmptyAction(t){this.configuration.getEmptyAction=t}control(t,e=!1){if(!t||t.__type__!==kr)throw new Error("Failed taking control of target HotPatcher instance: Invalid type or object");return Object.keys(t.configuration.registry).forEach((r=>{this.configuration.registry.hasOwnProperty(r)?e&&(this.configuration.registry[r]=Object.assign({},t.configuration.registry[r])):this.configuration.registry[r]=Object.assign({},t.configuration.registry[r])})),t._configuration=this.configuration,this}execute(t,...e){return(this.get(t)||So)(...e)}get(t){const e=this.configuration.registry[t];if(!e)switch(this.getEmptyAction){case"null":return null;case"throw":throw new Error(`Failed handling method request: No method provided for override: ${t}`);default:throw new Error(`Failed handling request which resulted in an empty method: Invalid empty-action specified: ${this.getEmptyAction}`)}return(function(...r){if(r.length===0)throw new Error("Failed creating sequence: No functions provided");return function(...i){let s=i;const o=this;for(;r.length>0;)s=[r.shift().apply(o,s)];return s[0]}})(...e.methods)}isPatched(t){return!!this.configuration.registry[t]}patch(t,e,r={}){const{chain:i=!1}=r;if(this.configuration.registry[t]&&this.configuration.registry[t].final)throw new Error(`Failed patching '${t}': Method marked as being final`);if(typeof e!="function")throw new Error(`Failed patching '${t}': Provided method is not a function`);if(i)this.configuration.registry[t]?this.configuration.registry[t].methods.push(e):this.configuration.registry[t]=an(e);else if(this.isPatched(t)){const{original:s}=this.configuration.registry[t];this.configuration.registry[t]=Object.assign(an(e),{original:s})}else this.configuration.registry[t]=an(e);return this}patchInline(t,e,...r){return this.isPatched(t)||this.patch(t,e),this.execute(t,...r)}plugin(t,...e){return e.forEach((r=>{this.patch(t,r,{chain:!0})})),this}restore(t){if(!this.isPatched(t))throw new Error(`Failed restoring method: No method present for key: ${t}`);if(typeof this.configuration.registry[t].original!="function")throw new Error(`Failed restoring method: Original method not found or of invalid type for key: ${t}`);return this.configuration.registry[t].methods=[this.configuration.registry[t].original],this}setFinal(t){if(!this.configuration.registry.hasOwnProperty(t))throw new Error(`Failed marking '${t}' as final: No method found for key`);return this.configuration.registry[t].final=!0,this}}let ln=null;function pi(){return ln||(ln=new Co),ln}function We(n){return(function(t){if(typeof t!="object"||t===null||Object.prototype.toString.call(t)!="[object Object]")return!1;if(Object.getPrototypeOf(t)===null)return!0;let e=t;for(;Object.getPrototypeOf(e)!==null;)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(t)===e})(n)?Object.assign({},n):Object.setPrototypeOf(Object.assign({},n),Object.getPrototypeOf(n))}function Sr(...n){let t=null,e=[...n];for(;e.length>0;){const r=e.shift();t=t?fi(t,r):We(r)}return t}function fi(n,t){const e=We(n);return Object.keys(t).forEach((r=>{e.hasOwnProperty(r)?Array.isArray(t[r])?e[r]=Array.isArray(e[r])?[...e[r],...t[r]]:[...t[r]]:typeof t[r]=="object"&&t[r]?e[r]=typeof e[r]=="object"&&e[r]?fi(e[r],t[r]):We(t[r]):e[r]=t[r]:e[r]=t[r]})),e}function Eo(n){const t={};return n.forEach(((e,r)=>{t[r]=e})),t}function $n(...n){if(n.length===0)return{};const t={};return n.reduce(((e,r)=>(Object.keys(r).forEach((i=>{const s=i.toLowerCase();t.hasOwnProperty(s)?e[t[s]]=r[i]:(t[s]=i,e[i]=r[i])})),e)),{})}q(805);const No=typeof ArrayBuffer=="function",{toString:$o}=Object.prototype;function mi(n){return No&&(n instanceof ArrayBuffer||$o.call(n)==="[object ArrayBuffer]")}function gi(n){return n!=null&&n.constructor!=null&&typeof n.constructor.isBuffer=="function"&&n.constructor.isBuffer(n)}function qn(n){return function(){for(var t=[],e=0;et.patchInline("fetch",ko,e.url,(function(r){let i={};const s={method:r.method};if(r.headers&&(i=$n(i,r.headers)),r.data!==void 0){const[o,a]=(function(u){if(typeof u=="string")return[u,{}];if(gi(u))return[u,{}];if(mi(u))return[u,{}];if(u&&typeof u=="object")return[JSON.stringify(u),{"content-type":"application/json"}];throw new Error("Unable to convert request body: Unexpected body type: "+typeof u)})(r.data);s.body=o,i=$n(i,a)}return r.signal&&(s.signal=r.signal),r.withCredentials&&(s.credentials="include"),s.headers=i,s})(e))),n)}var To=q(285);const He=n=>{if(typeof n!="string")throw new TypeError("invalid pattern");if(n.length>65536)throw new TypeError("pattern is too long")},Oo={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},pe=n=>n.replace(/[[\]\\-]/g,"\\$&"),Cr=n=>n.join(""),Po=(n,t)=>{const e=t;if(n.charAt(e)!=="[")throw new Error("not in a brace expression");const r=[],i=[];let s=e+1,o=!1,a=!1,u=!1,l=!1,c=e,h="";t:for(;sh?r.push(pe(h)+"-"+pe(p)):p===h&&r.push(pe(p)),h="",s++):n.startsWith("-]",s+1)?(r.push(pe(p+"-")),s+=2):n.startsWith("-",s+1)?(h=p,s+=2):(r.push(pe(p)),s++)}else u=!0,s++}else l=!0,s++}if(ct?n.replace(/\[([^\/\\])\]/g,"$1"):n.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1");var ht;const Lo=new Set(["!","?","+","*","@"]),Tn=n=>Lo.has(n),Er=n=>Tn(n.type),Io=new Map([["!",["@"]],["?",["?","@"]],["@",["@"]],["*",["*","+","?","@"]],["+",["+","@"]]]),jo=new Map([["!",["?"]],["@",["?"]],["+",["?","*"]]]),Bo=new Map([["!",["?","@"]],["?",["?","@"]],["@",["?","@"]],["*",["*","+","?","@"]],["+",["+","@","?","*"]]]),Nr=new Map([["!",new Map([["!","@"]])],["?",new Map([["*","*"],["+","*"]])],["@",new Map([["!","!"],["?","?"],["@","@"],["*","*"],["+","+"]])],["+",new Map([["?","*"],["*","*"]])]]),cn="(?!\\.)",Do=new Set(["[","."]),Vo=new Set(["..","."]),Mo=new Set("().*{}+?[]^$\\!"),Hn="[^/]",$r=Hn+"*?",Ar=Hn+"+?";class Gn{type;#n;#e;#r=!1;#t=[];#i;#p;#h;#f=!1;#l;#c;#u=!1;constructor(t,e,r={}){this.type=t,t&&(this.#e=!0),this.#i=e,this.#n=this.#i?this.#i.#n:this,this.#l=this.#n===this?r:this.#n.#l,this.#h=this.#n===this?[]:this.#n.#h,t!=="!"||this.#n.#f||this.#h.push(this),this.#p=this.#i?this.#i.#t.length:0}get hasMagic(){if(this.#e!==void 0)return this.#e;for(const t of this.#t)if(typeof t!="string"&&(t.type||t.hasMagic))return this.#e=!0;return this.#e}toString(){return this.#c!==void 0?this.#c:this.type?this.#c=this.type+"("+this.#t.map((t=>String(t))).join("|")+")":this.#c=this.#t.map((t=>String(t))).join("")}#d(){if(this!==this.#n)throw new Error("should only call on root");if(this.#f)return this;let t;for(this.toString(),this.#f=!0;t=this.#h.pop();){if(t.type!=="!")continue;let e=t,r=e.#i;for(;r;){for(let i=e.#p+1;!r.type&&itypeof e=="string"?e:e.toJSON())):[this.type,...this.#t.map((e=>e.toJSON()))];return this.isStart()&&!this.type&&t.unshift([]),this.isEnd()&&(this===this.#n||this.#n.#f&&this.#i?.type==="!")&&t.push({}),t}isStart(){if(this.#n===this)return!0;if(!this.#i?.isStart())return!1;if(this.#p===0)return!0;const t=this.#i;for(let e=0;e{const[m,g,p,f]=typeof d=="string"?ht.#E(d,this.#e,u):d.toRegExpSource(t);return this.#e=this.#e||p,this.#r=this.#r||f,m})).join("");let c="";if(this.isStart()&&typeof this.#t[0]=="string"&&(this.#t.length!==1||!Vo.has(this.#t[0]))){const d=Do,m=e&&d.has(l.charAt(0))||l.startsWith("\\.")&&d.has(l.charAt(2))||l.startsWith("\\.\\.")&&d.has(l.charAt(4)),g=!e&&!t&&d.has(l.charAt(0));c=m?"(?!(?:^|/)\\.\\.?(?:$|/))":g?cn:""}let h="";return this.isEnd()&&this.#n.#f&&this.#i?.type==="!"&&(h="(?:$|\\/)"),[c+l+h,ve(l),this.#e=!!this.#e,this.#r]}const r=this.type==="*"||this.type==="+",i=this.type==="!"?"(?:(?!(?:":"(?:";let s=this.#k(e);if(this.isStart()&&this.isEnd()&&!s&&this.type!=="!"){const u=this.toString(),l=this;return l.#t=[u],l.type=null,l.#e=void 0,[u,ve(this.toString()),!1,!1]}let o=!r||t||e?"":this.#k(!0);o===s&&(o=""),o&&(s=`(?:${s})(?:${o})*?`);let a="";return a=this.type==="!"&&this.#u?(this.isStart()&&!e?cn:"")+Ar:i+s+(this.type==="!"?"))"+(!this.isStart()||e||t?"":cn)+$r+")":this.type==="@"?")":this.type==="?"?")?":this.type==="+"&&o?")":this.type==="*"&&o?")?":`)${this.type}`),[a,ve(s),this.#e=!!this.#e,this.#r]}#k(t){return this.#t.map((e=>{if(typeof e=="string")throw new Error("string type in extglob ast??");const[r,i,s,o]=e.toRegExpSource(t);return this.#r=this.#r||o,r})).filter((e=>!(this.isStart()&&this.isEnd()&&!e))).join("|")}static#E(t,e,r=!1){let i=!1,s="",o=!1,a=!1;for(let u=0;u(He(t),!(!e.nocomment&&t.charAt(0)==="#")&&new Ge(t,e).match(n)),Ro=/^\*+([^+@!?\*\[\(]*)$/,Fo=n=>t=>!t.startsWith(".")&&t.endsWith(n),zo=n=>t=>t.endsWith(n),Uo=n=>(n=n.toLowerCase(),t=>!t.startsWith(".")&&t.toLowerCase().endsWith(n)),Wo=n=>(n=n.toLowerCase(),t=>t.toLowerCase().endsWith(n)),qo=/^\*+\.\*+$/,Ho=n=>!n.startsWith(".")&&n.includes("."),Go=n=>n!=="."&&n!==".."&&n.includes("."),Ko=/^\.\*+$/,Zo=n=>n!=="."&&n!==".."&&n.startsWith("."),Xo=/^\*+$/,Yo=n=>n.length!==0&&!n.startsWith("."),Jo=n=>n.length!==0&&n!=="."&&n!=="..",Qo=/^\?+([^+@!?\*\[\(]*)?$/,ta=([n,t=""])=>{const e=bi([n]);return t?(t=t.toLowerCase(),r=>e(r)&&r.toLowerCase().endsWith(t)):e},ea=([n,t=""])=>{const e=vi([n]);return t?(t=t.toLowerCase(),r=>e(r)&&r.toLowerCase().endsWith(t)):e},na=([n,t=""])=>{const e=vi([n]);return t?r=>e(r)&&r.endsWith(t):e},ra=([n,t=""])=>{const e=bi([n]);return t?r=>e(r)&&r.endsWith(t):e},bi=([n])=>{const t=n.length;return e=>e.length===t&&!e.startsWith(".")},vi=([n])=>{const t=n.length;return e=>e.length===t&&e!=="."&&e!==".."},wi=typeof Ve=="object"&&Ve?typeof sn=="object"&&sn&&sn.__MINIMATCH_TESTING_PLATFORM__||Ve.platform:"posix";it.sep=wi==="win32"?"\\":"/";const rt=Symbol("globstar **");it.GLOBSTAR=rt,it.filter=(n,t={})=>e=>it(e,n,t);const Ct=(n,t={})=>Object.assign({},n,t);it.defaults=n=>{if(!n||typeof n!="object"||!Object.keys(n).length)return it;const t=it;return Object.assign(((e,r,i={})=>t(e,r,Ct(n,i))),{Minimatch:class extends t.Minimatch{constructor(e,r={}){super(e,Ct(n,r))}static defaults(e){return t.defaults(Ct(n,e)).Minimatch}},AST:class extends t.AST{constructor(e,r,i={}){super(e,r,Ct(n,i))}static fromGlob(e,r={}){return t.AST.fromGlob(e,Ct(n,r))}},unescape:(e,r={})=>t.unescape(e,Ct(n,r)),escape:(e,r={})=>t.escape(e,Ct(n,r)),filter:(e,r={})=>t.filter(e,Ct(n,r)),defaults:e=>t.defaults(Ct(n,e)),makeRe:(e,r={})=>t.makeRe(e,Ct(n,r)),braceExpand:(e,r={})=>t.braceExpand(e,Ct(n,r)),match:(e,r,i={})=>t.match(e,r,Ct(n,i)),sep:t.sep,GLOBSTAR:rt})};const xi=(n,t={})=>(He(n),t.nobrace||!/\{(?:(?!\{).)*\}/.test(n)?[n]:To(n));it.braceExpand=xi,it.makeRe=(n,t={})=>new Ge(n,t).makeRe(),it.match=(n,t,e={})=>{const r=new Ge(t,e);return n=n.filter((i=>r.match(i))),r.options.nonull&&!n.length&&n.push(t),n};const Tr=/[?*]|[+@!]\(.*?\)|\[|\]/;class Ge{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;maxGlobstarRecursion;regexp;constructor(t,e={}){He(t),e=e||{},this.options=e,this.maxGlobstarRecursion=e.maxGlobstarRecursion??200,this.pattern=t,this.platform=e.platform||wi,this.isWindows=this.platform==="win32",this.windowsPathsNoEscape=!!e.windowsPathsNoEscape||e.allowWindowsEscape===!1,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.preserveMultipleSlashes=!!e.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!e.nonegate,this.comment=!1,this.empty=!1,this.partial=!!e.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=e.windowsNoMagicRoot!==void 0?e.windowsNoMagicRoot:!(!this.isWindows||!this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(const t of this.set)for(const e of t)if(typeof e!="string")return!0;return!1}debug(...t){}make(){const t=this.pattern,e=this.options;if(!e.nocomment&&t.charAt(0)==="#")return void(this.comment=!0);if(!t)return void(this.empty=!0);this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],e.debug&&(this.debug=(...s)=>console.error(...s)),this.debug(this.pattern,this.globSet);const r=this.globSet.map((s=>this.slashSplit(s)));this.globParts=this.preprocess(r),this.debug(this.pattern,this.globParts);let i=this.globParts.map(((s,o,a)=>{if(this.isWindows&&this.windowsNoMagicRoot){const u=!(s[0]!==""||s[1]!==""||s[2]!=="?"&&Tr.test(s[2])||Tr.test(s[3])),l=/^[a-z]:/i.test(s[0]);if(u)return[...s.slice(0,4),...s.slice(4).map((c=>this.parse(c)))];if(l)return[s[0],...s.slice(1).map((c=>this.parse(c)))]}return s.map((u=>this.parse(u)))}));if(this.debug(this.pattern,i),this.set=i.filter((s=>s.indexOf(!1)===-1)),this.isWindows)for(let s=0;s=2?(t=this.firstPhasePreProcess(t),t=this.secondPhasePreProcess(t)):t=e>=1?this.levelOneOptimize(t):this.adjascentGlobstarOptimize(t),t}adjascentGlobstarOptimize(t){return t.map((e=>{let r=-1;for(;(r=e.indexOf("**",r+1))!==-1;){let i=r;for(;e[i+1]==="**";)i++;i!==r&&e.splice(r,i-r)}return e}))}levelOneOptimize(t){return t.map((e=>(e=e.reduce(((r,i)=>{const s=r[r.length-1];return i==="**"&&s==="**"?r:i===".."&&s&&s!==".."&&s!=="."&&s!=="**"?(r.pop(),r):(r.push(i),r)}),[])).length===0?[""]:e))}levelTwoFileOptimize(t){Array.isArray(t)||(t=this.slashSplit(t));let e=!1;do{if(e=!1,!this.preserveMultipleSlashes){for(let i=1;ii&&r.splice(i+1,o-i);let a=r[i+1];const u=r[i+2],l=r[i+3];if(a!==".."||!u||u==="."||u===".."||!l||l==="."||l==="..")continue;e=!0,r.splice(i,1);const c=r.slice(0);c[i]="**",t.push(c),i--}if(!this.preserveMultipleSlashes){for(let o=1;oe.length))}partsMatch(t,e,r=!1){let i=0,s=0,o=[],a="";for(;i=2&&(t=this.levelTwoFileOptimize(t)),e.includes(rt)?this.#n(t,e,r,i,s):this.#r(t,e,r,i,s)}#n(t,e,r,i,s){const o=e.indexOf(rt,s),a=e.lastIndexOf(rt),[u,l,c]=r?[e.slice(s,o),e.slice(o+1),[]]:[e.slice(s,o),e.slice(o+1,a),e.slice(a+1)];if(u.length){const b=t.slice(i,i+u.length);if(!this.#r(b,u,r,0,0))return!1;i+=u.length}let h=0;if(c.length){if(c.length+i>t.length)return!1;let b=t.length-c.length;if(this.#r(t,c,r,b,0))h=c.length;else{if(t[t.length-1]!==""||i+c.length===t.length||(b--,!this.#r(t,c,r,b,0)))return!1;h=c.length+1}}if(!l.length){let b=!!h;for(let v=i;v{const l=u.map((c=>{if(c instanceof RegExp)for(const h of c.flags.split(""))i.add(h);return typeof c=="string"?c.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"):c===rt?rt:c._src}));return l.forEach(((c,h)=>{const d=l[h+1],m=l[h-1];c===rt&&m!==rt&&(m===void 0?d!==void 0&&d!==rt?l[h+1]="(?:\\/|"+r+"\\/)?"+d:l[h]=r:d===void 0?l[h-1]=m+"(?:\\/|"+r+")?":d!==rt&&(l[h-1]=m+"(?:\\/|\\/"+r+"\\/)"+d,l[h+1]=rt))})),l.filter((c=>c!==rt)).join("/")})).join("|");const[o,a]=t.length>1?["(?:",")"]:["",""];s="^"+o+s+a+"$",this.negate&&(s="^(?!"+s+").+$");try{this.regexp=new RegExp(s,[...i].join(""))}catch{this.regexp=!1}return this.regexp}slashSplit(t){return this.preserveMultipleSlashes?t.split("/"):this.isWindows&&/^\/\/[^\/]+/.test(t)?["",...t.split(/\/+/)]:t.split(/\/+/)}match(t,e=this.partial){if(this.debug("match",t,this.pattern),this.comment)return!1;if(this.empty)return t==="";if(t==="/"&&e)return!0;const r=this.options;this.isWindows&&(t=t.split("\\").join("/"));const i=this.slashSplit(t);this.debug(this.pattern,"split",i);const s=this.set;this.debug(this.pattern,"set",s);let o=i[i.length-1];if(!o)for(let a=i.length-2;!o&&a>=0;a--)o=i[a];for(let a=0;a=400)throw Kn(t);return t}function ue(n,t,e=!1){return e?{data:t,headers:n.headers?Eo(n.headers):{},status:n.status,statusText:n.statusText}:t}it.AST=Gn,it.Minimatch=Ge,it.escape=(n,{windowsPathsNoEscape:t=!1}={})=>t?n.replace(/[?*()[\]]/g,"[$&]"):n.replace(/[?*()[\]\\]/g,"\\$&"),it.unescape=ve;const ia=(Or=function(n,t,e,r={}){const i=tt({url:X(n.remoteURL,Z(t)),method:"COPY",headers:{Destination:X(n.remoteURL,Z(e)),Overwrite:r.overwrite===!1?"F":"T",Depth:r.shallow?"0":"infinity"}},n,r);return o=function(a){et(n,a)},(s=Q(i,n))&&s.then||(s=Promise.resolve(s)),o?s.then(o):s;var s,o},function(){for(var n=[],t=0;tZn.includes(n)?"__"+n:n,oa={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0,unicode:!1},tagValueProcessor:function(n,t){return t},attributeValueProcessor:function(n,t){return t},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,entityDecoder:null,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(n,t,e){return n},captureMetaData:!1,maxNestedTags:100,strictReservedNames:!0,jPath:!0,onDangerousProperty:Si};function aa(n,t){if(typeof n!="string")return;const e=n.toLowerCase();if(Zn.some((r=>e===r.toLowerCase())))throw new Error(`[SECURITY] Invalid ${t}: "${n}" is a reserved JavaScript keyword that could cause prototype pollution`);if(ki.some((r=>e===r.toLowerCase())))throw new Error(`[SECURITY] Invalid ${t}: "${n}" is a reserved JavaScript keyword that could cause prototype pollution`)}function Ci(n,t){return typeof n=="boolean"?{enabled:n,maxEntitySize:1e4,maxExpansionDepth:1e4,maxTotalExpansions:1/0,maxExpandedLength:1e5,maxEntityCount:1e3,allowedTags:null,tagFilter:null,appliesTo:"all"}:typeof n=="object"&&n!==null?{enabled:n.enabled!==!1,maxEntitySize:Math.max(1,n.maxEntitySize??1e4),maxExpansionDepth:Math.max(1,n.maxExpansionDepth??1e4),maxTotalExpansions:Math.max(1,n.maxTotalExpansions??1/0),maxExpandedLength:Math.max(1,n.maxExpandedLength??1e5),maxEntityCount:Math.max(1,n.maxEntityCount??1e3),allowedTags:n.allowedTags??null,tagFilter:n.tagFilter??null,appliesTo:n.appliesTo??"all"}:Ci(!0)}const la=function(n){const t=Object.assign({},oa,n),e=[{value:t.attributeNamePrefix,name:"attributeNamePrefix"},{value:t.attributesGroupName,name:"attributesGroupName"},{value:t.textNodeName,name:"textNodeName"},{value:t.cdataPropName,name:"cdataPropName"},{value:t.commentPropName,name:"commentPropName"}];for(const{value:r,name:i}of e)r&&aa(r,i);return t.onDangerousProperty===null&&(t.onDangerousProperty=Si),t.processEntities=Ci(t.processEntities,t.htmlEntities),t.unpairedTagsSet=new Set(t.unpairedTags),t.stopNodes&&Array.isArray(t.stopNodes)&&(t.stopNodes=t.stopNodes.map((r=>typeof r=="string"&&r.startsWith("*.")?".."+r.substring(2):r))),t};let Xt;Xt=typeof Symbol!="function"?"@@xmlMetadata":Symbol("XML Node Metadata");class Bt{constructor(t){this.tagname=t,this.child=[],this[":@"]=Object.create(null)}add(t,e){t==="__proto__"&&(t="#__proto__"),this.child.push({[t]:e})}addChild(t,e){t.tagname==="__proto__"&&(t.tagname="#__proto__"),t[":@"]&&Object.keys(t[":@"]).length>0?this.child.push({[t.tagname]:t.child,":@":t[":@"]}):this.child.push({[t.tagname]:t.child}),this.addStartIndex(e)}addStartIndex(t){t!==void 0&&(this.child[this.child.length-1][Xt]={startIndex:t})}addEndIndex(t){const e=this.child[this.child.length-1];e!==void 0&&e[Xt]!==void 0&&e[Xt].endIndex===void 0&&(e[Xt].endIndex=t)}static getMetaDataSymbol(){return Xt}}const Lr=":A-Za-z_À-ÖØ-öø-˿Ͱ-ͽͿ-҆҈-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�",Ei=":A-Za-z_À-˿Ͱ-ͽͿ-҆҈-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",ca=Ei+"\\-\\.\\d·̀-ͯ҇‿-⁀",Xn=(n,t,e="")=>{const r=`[${n.replace(":","")}][${t.replace(":","")}]*`;return{name:new RegExp(`^[${n}][${t}]*$`,e),ncName:new RegExp(`^${r}$`,e),qName:new RegExp(`^${r}(?::${r})?$`,e),nmToken:new RegExp(`^[${t}]+$`,e),nmTokens:new RegExp(`^[${t}]+(?:\\s+[${t}]+)*$`,e)}},ua=Xn(Lr,Lr+"\\-\\.\\d·̀-ͯ‿-⁀"),da=Xn(Ei,ca,"u"),Ir=":A-Za-z_",ha=Xn(Ir,Ir+"\\-\\.\\d"),Ni=(n="1.0",t=!1)=>t?ha:n==="1.1"?da:ua,$i=(n,{xmlVersion:t="1.0",asciiOnly:e=!1}={})=>Ni(t,e).qName.test(n),jr=["name","ncName","qName","nmToken","nmTokens"],Ai=(n,{xmlVersion:t="1.0",asciiOnly:e=!1,maxCacheSize:r=2048}={})=>{if(!jr.includes(n))throw new TypeError(`Unknown production "${n}". Must be one of: ${jr.join(", ")}`);const i=Ni(t,e)[n];let s=new Map;const o=a=>{const u=s.get(a);if(u!==void 0)return u;const l=i.test(a);return s.size{s=new Map},o};class pa{constructor(t,e){this.suppressValidationErr=!t,this.options=t,this.xmlVersion=e||1}setXmlVersion(t=1){this.xmlVersion=t}readDocType(t,e){const r=Object.create(null);let i=0;if(t[e+3]!=="O"||t[e+4]!=="C"||t[e+5]!=="T"||t[e+6]!=="Y"||t[e+7]!=="P"||t[e+8]!=="E")throw new Error("Invalid Tag instead of DOCTYPE");{e+=9;let s=1,o=!1,a=!1,u=null,l="";for(;e"){if(a?t[e-1]==="-"&&t[e-2]==="-"&&(a=!1,s--):s--,s===0)break}else t[e]==="["?o=!0:l+=t[e];else{if(o&&Wt(t,"!ENTITY",e)){let c,h;if(e+=7,[c,h,e]=this.readEntityExp(t,e+1,this.suppressValidationErr),h.indexOf("&")===-1){if(this.options.enabled!==!1&&this.options.maxEntityCount!=null&&i>=this.options.maxEntityCount)throw new Error(`Entity count (${i+1}) exceeds maximum allowed (${this.options.maxEntityCount})`);r[c]=h,i++}}else if(o&&Wt(t,"!ELEMENT",e)){e+=8;const{index:c}=this.readElementExp(t,e+1);e=c}else if(o&&Wt(t,"!ATTLIST",e))e+=8;else if(o&&Wt(t,"!NOTATION",e)){e+=9;const{index:c}=this.readNotationExp(t,e+1,this.suppressValidationErr);e=c}else{if(!Wt(t,"!--",e))throw new Error("Invalid DOCTYPE");a=!0}s++,l=""}else u=t[e],l+=t[e];else t[e]===u&&(u=null),l+=t[e];if(u!==null||s!==0)throw new Error("Unclosed DOCTYPE")}return{entities:r,i:e}}readEntityExp(t,e){const r=e=dt(t,e);for(;ethis.options.maxEntitySize)throw new Error(`Entity "${i}" size (${s.length}) exceeds maximum allowed size (${this.options.maxEntitySize})`);return[i,s,--e]}readNotationExp(t,e){const r=e=dt(t,e);for(;e{for(;t=48&&u<=57||u===45)){if(u=55296&&u<=56319){if(a+1=56320&&l<=57343){const c=65536+(u-55296<<10)+(l-56320);if(On.has(c)){s=a;break}}}}else if(Pn[u-we]!==255||je.has(u)){s=a;break}}}if(s===-1)return r;const o=[];s>0&&o.push(r.slice(0,s));for(let a=s;a=48&&u<=57||u===45){o.push(r[a]);continue}if(u=55296&&u<=56319){if(a+1=56320&&c<=57343){const h=65536+(u-55296<<10)+(c-56320),d=On.get(h);if(d!==void 0){o.push(String.fromCharCode(d+48)),a++;continue}}}o.push(r[a]);continue}if(je.has(u)){o.push("-");continue}const l=Pn[u-we];o.push(l!==255?String.fromCharCode(l+48):r[a])}return o.join("")})(e),e==="0"))return 0;if(t.hex&&ma.test(e))return un(e,16);if(t.binary&&ga.test(e))return un(e,2);if(t.octal&&ya.test(e))return un(e,8);if(isFinite(e)){if(e.includes("e")||e.includes("E"))return(function(r,i,s){if(!s.eNotation)return r;const o=i.match(xa);if(o){let a=o[1]||"";const u=o[3].indexOf("e")===-1?"E":"e",l=o[2],c=a?r[l.length+1]===u:r[l.length]===u;return l.length>1&&c?r:(l.length!==1||!o[3].startsWith(`.${u}`)&&o[3][0]!==u)&&l.length>0?s.leadingZeros&&!c?(i=(o[1]||"")+o[3],Number(i)):r:Number(i)}return r})(n,e,t);{const r=ba.exec(e);if(r){const i=r[1]||"",s=r[2];let o=(function(u){if(u&&u.indexOf(".")!==-1){let l=u.length;for(;l>0&&u.charCodeAt(l-1)===48;)l--;return(u=u.slice(0,l))==="."?u="0":u[0]==="."?u="0"+u:u[u.length-1]==="."&&(u=u.substring(0,u.length-1)),u}return u})(r[3]);const a=i?n[s.length+1]===".":n[s.length]===".";if(!t.leadingZeros&&(s.length>1||s.length===1&&!a))return n;{const u=Number(e),l=String(u);if(u===0)return u;if(l.search(/[eE]/)!==-1)return t.eNotation?u:n;if(e.indexOf(".")!==-1)return l==="0"||l===o||l===`${i}${o}`?u:n;let c=s?o:e;return s?c===l||i+c===l?u:n:c===l||c===i+l?u:n}}return n}}return(function(r,i,s){const o=i===1/0;switch(s.infinity.toLowerCase()){case"null":return null;case"infinity":return i;case"string":return o?"Infinity":"-Infinity";default:return r}})(n,Number(e),t)}const xa=/^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;function un(n,t){const e=n.trim();if(t!==2&&t!==8||(n=e.substring(2)),parseInt)return parseInt(n,t);if(Number.parseInt)return Number.parseInt(n,t);if(window&&window.parseInt)return window.parseInt(n,t);throw new Error("parseInt, Number.parseInt, window.parseInt are not supported")}class _a{constructor(t){this._matcher=t}get separator(){return this._matcher.separator}getCurrentTag(){const t=this._matcher.path;return t.length>0?t[t.length-1].tag:void 0}getCurrentNamespace(){const t=this._matcher.path;return t.length>0?t[t.length-1].namespace:void 0}getAttrValue(t){const e=this._matcher.path;if(e.length!==0)return e[e.length-1].values?.[t]}hasAttr(t){const e=this._matcher.path;if(e.length===0)return!1;const r=e[e.length-1];return r.values!==void 0&&t in r.values}getAnyParentAttr(t){return this._matcher.getAnyParentAttr(t)}hasAnyParentAttr(t){return this._matcher.hasAnyParentAttr(t)}getPosition(){const t=this._matcher.path;return t.length===0?-1:t[t.length-1].position??0}getCounter(){const t=this._matcher.path;return t.length===0?-1:t[t.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this._matcher.path.length}toString(t,e=!0){return this._matcher.toString(t,e)}toArray(){return this._matcher.path.map((t=>t.tag))}matches(t){return this._matcher.matches(t)}matchesAny(t){return t.matchesAny(this._matcher)}}class Yn{constructor(t={}){this.separator=t.separator||".",this.path=[],this.siblingStacks=[],this._pathStringCache=null,this._view=new _a(this),this._keptAttrs=[]}push(t,e=null,r=null,i=null){this._pathStringCache=null,this.path.length>0&&(this.path[this.path.length-1].values=void 0);const s=this.path.length;let o=this.siblingStacks[s];o||(o={counts:new Map,total:0},this.siblingStacks[s]=o);const a=r?`${r}:${t}`:t,u=o.counts.get(a)||0,l=o.total;o.counts.set(a,u+1),o.total++;const c={tag:t,position:l,counter:u};r!=null&&(c.namespace=r),e!=null&&(c.values=e),this.path.push(c);const h=this.path.length,d=i!==null?i.keep:null;if(d!=null&&d.length>0&&e)for(let m=0;mthis.path.length+1&&(this.siblingStacks.length=this.path.length+1);const e=this.path.length+1;for(;this._keptAttrs.length>0&&this._keptAttrs[this._keptAttrs.length-1].depth>=e;)this._keptAttrs.pop();return t}updateCurrent(t){if(this.path.length>0){const e=this.path[this.path.length-1];t!=null&&(e.values=t)}}getCurrentTag(){return this.path.length>0?this.path[this.path.length-1].tag:void 0}getCurrentNamespace(){return this.path.length>0?this.path[this.path.length-1].namespace:void 0}getAttrValue(t){if(this.path.length!==0)return this.path[this.path.length-1].values?.[t]}hasAttr(t){if(this.path.length===0)return!1;const e=this.path[this.path.length-1];return e.values!==void 0&&t in e.values}getAnyParentAttr(t){const e=this._keptAttrs;for(let r=e.length-1;r>=0;r--)if(e[r].name===t)return e[r].value}hasAnyParentAttr(t){const e=this._keptAttrs;for(let r=e.length-1;r>=0;r--)if(e[r].name===t)return!0;return!1}getPosition(){return this.path.length===0?-1:this.path[this.path.length-1].position??0}getCounter(){return this.path.length===0?-1:this.path[this.path.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this.path.length}toString(t,e=!0){const r=t||this.separator;if(r===this.separator&&e===!0){if(this._pathStringCache!==null)return this._pathStringCache;const i=this.path.map((s=>s.namespace?`${s.namespace}:${s.tag}`:s.tag)).join(r);return this._pathStringCache=i,i}return this.path.map((i=>e&&i.namespace?`${i.namespace}:${i.tag}`:i.tag)).join(r)}toArray(){return this.path.map((t=>t.tag))}reset(){this._pathStringCache=null,this.path=[],this.siblingStacks=[],this._keptAttrs=[]}matches(t){const e=t.segments;return e.length!==0&&(t.hasDeepWildcard()?this._matchWithDeepWildcard(e):this._matchSimple(e))}_matchSimple(t){if(this.path.length!==t.length)return!1;for(let e=0;e=0&&e>=0;){const i=t[r];if(i.type==="deep-wildcard"){if(r--,r<0)return!0;const s=t[r];let o=!1;for(let a=e;a>=0;a--)if(this._matchSegment(s,this.path[a],a===this.path.length-1)){e=a-1,r--,o=!0;break}if(!o)return!1}else{if(!this._matchSegment(i,this.path[e],e===this.path.length-1))return!1;e--,r--}}return r<0}_matchSegment(t,e,r){if(t.tag!=="*"&&t.tag!==e.tag||t.namespace!==void 0&&t.namespace!=="*"&&t.namespace!==e.namespace||t.attrName!==void 0&&(!r||!e.values||!(t.attrName in e.values)||t.attrValue!==void 0&&String(e.values[t.attrName])!==String(t.attrValue)))return!1;if(t.position!==void 0){if(!r)return!1;const i=e.counter??0;if(t.position==="first"&&i!==0||t.position==="odd"&&i%2!=1||t.position==="even"&&i%2!=0||t.position==="nth"&&i!==t.positionValue)return!1}return!0}matchesAny(t){return t.matchesAny(this)}snapshot(){return{path:this.path.map((t=>({...t}))),siblingStacks:this.siblingStacks.map((t=>t&&{counts:new Map(t.counts),total:t.total})),keptAttrs:this._keptAttrs.map((t=>({...t})))}}restore(t){this._pathStringCache=null,this.path=t.path.map((e=>({...e}))),this.siblingStacks=t.siblingStacks.map((e=>e&&{counts:new Map(e.counts),total:e.total})),this._keptAttrs=(t.keptAttrs||[]).map((e=>({...e})))}readOnly(){return this._view}}class oe{constructor(t,e={},r){this.pattern=t,this.separator=e.separator||".",this.segments=this._parse(t),this.data=r,this._hasDeepWildcard=this.segments.some((i=>i.type==="deep-wildcard")),this._hasAttributeCondition=this.segments.some((i=>i.attrName!==void 0)),this._hasPositionSelector=this.segments.some((i=>i.position!==void 0))}_parse(t){const e=[];let r=0,i="";for(;r",lt:"<",quot:'"'},Ca={nbsp:" ",copy:"©",reg:"®",trade:"™",mdash:"—",ndash:"–",hellip:"…",laquo:"«",raquo:"»",lsquo:"‘",rsquo:"’",ldquo:"“",rdquo:"”",bull:"•",para:"¶",sect:"§",deg:"°",frac12:"½",frac14:"¼",frac34:"¾"},Ke=Object.freeze({ALLOW:"allow",BLOCK:"block",THROW:"throw"}),Ea=new Set("!?\\\\/[]$%{}^&*()<>|+");function Br(n){if(n[0]==="#")throw new Error(`[EntityReplacer] Invalid character '#' in entity name: "${n}"`);for(const t of n)if(Ea.has(t))throw new Error(`[EntityReplacer] Invalid character '${t}' in entity name: "${n}"`);return n}function me(...n){const t=Object.create(null);for(const e of n)if(e)for(const r of Object.keys(e)){const i=e[r];if(typeof i=="string")t[r]=i;else if(i&&typeof i=="object"&&i.val!==void 0){const s=i.val;typeof s=="string"&&(t[r]=s)}}return t}const qt="external",Be="base",dn="all",bt=Object.freeze({allow:0,leave:1,remove:2,throw:3}),Na=new Set([9,10,13]);class Oi{constructor(t={}){var e;this._limit=t.limit||{},this._maxTotalExpansions=this._limit.maxTotalExpansions||0,this._maxExpandedLength=this._limit.maxExpandedLength||0,this._postCheck=typeof t.postCheck=="function"?t.postCheck:i=>i,this._limitTiers=(e=this._limit.applyLimitsTo??qt)&&e!==qt?e===dn?new Set([dn]):e===Be?new Set([Be]):Array.isArray(e)?new Set(e):new Set([qt]):new Set([qt]),this._numericAllowed=t.numericAllowed??!0,this._baseMap=me(Ti,t.namedEntities||null),this._externalMap=Object.create(null),this._inputMap=Object.create(null),this._totalExpansions=0,this._expandedLength=0,this._removeSet=new Set(t.remove&&Array.isArray(t.remove)?t.remove:[]),this._leaveSet=new Set(t.leave&&Array.isArray(t.leave)?t.leave:[]);const r=(function(i){if(!i)return{xmlVersion:1,onLevel:bt.allow,nullLevel:bt.remove};const s=i.xmlVersion===1.1?1.1:1,o=bt[i.onNCR]??bt.allow,a=bt[i.nullNCR]??bt.remove;return{xmlVersion:s,onLevel:o,nullLevel:Math.max(a,bt.remove)}})(t.ncr);this._ncrXmlVersion=r.xmlVersion,this._ncrOnLevel=r.onLevel,this._ncrNullLevel=r.nullLevel,this._onExternalEntity=typeof t.onExternalEntity=="function"?t.onExternalEntity:null,this._onInputEntity=typeof t.onInputEntity=="function"?t.onInputEntity:null}_applyRegistrationHook(t,e,r,i){if(!t)return!0;const s=t(e,r);if(s===Ke.BLOCK)return!1;if(s===Ke.THROW)throw new Error(`[EntityDecoder] Registration of ${i} entity "&${e};" was rejected by hook`);return!0}setExternalEntities(t){if(t)for(const i of Object.keys(t))Br(i);if(!this._onExternalEntity)return void(this._externalMap=me(t));const e=me(t),r=Object.create(null);for(const[i,s]of Object.entries(e))this._applyRegistrationHook(this._onExternalEntity,i,s,"external")&&(r[i]=s);this._externalMap=r}addExternalEntity(t,e){Br(t),typeof e=="string"&&e.indexOf("&")===-1&&this._applyRegistrationHook(this._onExternalEntity,t,e,"external")&&(this._externalMap[t]=e)}addInputEntities(t){if(this._totalExpansions=0,this._expandedLength=0,!this._onInputEntity)return void(this._inputMap=me(t));const e=me(t),r=Object.create(null);for(const[i,s]of Object.entries(e))this._applyRegistrationHook(this._onInputEntity,i,s,"input")&&(r[i]=s);this._inputMap=r}reset(){return this._inputMap=Object.create(null),this._totalExpansions=0,this._expandedLength=0,this}setXmlVersion(t){this._ncrXmlVersion=t===1.1?1.1:1}decode(t){if(typeof t!="string"||t.length===0||t.indexOf("&")===-1)return t;const e=t,r=[],i=t.length;let s=0,o=0;const a=this._maxTotalExpansions>0,u=this._maxExpandedLength>0,l=a||u;for(;o=i||t.charCodeAt(h)!==59){o++;continue}const d=t.slice(o+1,h);if(d.length===0){o++;continue}let m,g;if(this._removeSet.has(d))m="",g===void 0&&(g=qt);else{if(this._leaveSet.has(d)){o++;continue}if(d.charCodeAt(0)===35){const p=this._resolveNCR(d);if(p===void 0){o++;continue}m=p,g=Be}else{const p=this._resolveName(d);m=p?.value,g=p?.tier}}if(m!==void 0){if(o>s&&r.push(t.slice(s,o)),r.push(m),s=h+1,o=s,l&&this._tierCounts(g)){if(a&&(this._totalExpansions++,this._totalExpansions>this._maxTotalExpansions))throw new Error(`[EntityReplacer] Entity expansion count limit exceeded: ${this._totalExpansions} > ${this._maxTotalExpansions}`);if(u){const p=m.length-(d.length+2);if(p>0&&(this._expandedLength+=p,this._expandedLength>this._maxExpandedLength))throw new Error(`[EntityReplacer] Expanded content length limit exceeded: ${this._expandedLength} > ${this._maxExpandedLength}`)}}}else o++}s=55296&&t<=57343||this._ncrXmlVersion===1&&t>=1&&t<=31&&!Na.has(t)?bt.remove:-1}_applyNCRAction(t,e,r){switch(t){case bt.allow:return String.fromCodePoint(r);case bt.remove:return"";case bt.leave:return;case bt.throw:throw new Error(`[EntityDecoder] Prohibited numeric character reference &${e}; (U+${r.toString(16).toUpperCase().padStart(4,"0")})`);default:return String.fromCodePoint(r)}}_resolveNCR(t){const e=t.charCodeAt(1);let r;if(r=e===120||e===88?parseInt(t.slice(2),16):parseInt(t.slice(1),10),Number.isNaN(r)||r<0||r>1114111)return;const i=this._classifyNCR(r);if(!this._numericAllowed&&i/]/i},{id:"html-script-close",description:"<\/script closing tag",pattern:/<\/script[\s>]/i},{id:"html-javascript-protocol",description:"javascript: URI scheme (with optional whitespace/encoding)",pattern:/j[\t\n\r ]*a[\t\n\r ]*v[\t\n\r ]*a[\t\n\r ]*s[\t\n\r ]*c[\t\n\r ]*r[\t\n\r ]*i[\t\n\r ]*p[\t\n\r ]*t[\t\n\r ]*:/i},{id:"html-vbscript-protocol",description:"vbscript: URI scheme",pattern:/vbscript[\t\n\r ]*:/i},{id:"html-data-html",description:"data:text/html URI — can execute scripts in browsers",pattern:/data[\t\n\r ]*:[\t\n\r ]*text\/html/i},{id:"html-data-xhtml",description:"data:application/xhtml+xml URI",pattern:/data[\t\n\r ]*:[\t\n\r ]*application\/xhtml/i},{id:"html-data-svg",description:"data:image/svg+xml URI — can execute scripts",pattern:/data[\t\n\r ]*:[\t\n\r ]*image\/svg\+xml/i},{id:"html-inline-event-handler",description:"Inline event handler attributes: onclick=, onerror=, onload=, etc.",pattern:/\bon\w{1,30}\s*=/i},{id:"html-entity-obfuscated-script",description:"HTML-entity-encoded \n * ^\n * ```\n *\n * @type {State}\n */\n function continuationRawTagOpen(code) {\n if (code === 47) {\n effects.consume(code);\n buffer = '';\n return continuationRawEndTag;\n }\n return continuation(code);\n }\n\n /**\n * In raw continuation, after ` | \n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function continuationRawEndTag(code) {\n if (code === 62) {\n const name = buffer.toLowerCase();\n if (htmlRawNames.includes(name)) {\n effects.consume(code);\n return continuationClose;\n }\n return continuation(code);\n }\n if (asciiAlpha(code) && buffer.length < 8) {\n // Always the case.\n effects.consume(code);\n buffer += String.fromCharCode(code);\n return continuationRawEndTag;\n }\n return continuation(code);\n }\n\n /**\n * In cdata continuation, after `]`, expecting `]>`.\n *\n * ```markdown\n * > | &<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationCdataInside(code) {\n if (code === 93) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n return continuation(code);\n }\n\n /**\n * In declaration or instruction continuation, at `>`.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | &<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationDeclarationInside(code) {\n if (code === 62) {\n effects.consume(code);\n return continuationClose;\n }\n\n // More dashes.\n if (code === 45 && marker === 2) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n return continuation(code);\n }\n\n /**\n * In closed continuation: everything we get until the eol/eof is part of it.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuationClose(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"htmlFlowData\");\n return continuationAfter(code);\n }\n effects.consume(code);\n return continuationClose;\n }\n\n /**\n * Done.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuationAfter(code) {\n effects.exit(\"htmlFlow\");\n // // Feel free to interrupt.\n // tokenizer.interrupt = false\n // // No longer concrete.\n // tokenizer.concrete = false\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n return start;\n\n /**\n * Before eol, expecting blank line.\n *\n * ```markdown\n * > |
\n * ^\n * |\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return effects.attempt(blankLine, ok, nok);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { nonLazyContinuation } from './partial-non-lazy-continuation.js';\n\n/** @type {Construct} */\nexport const codeFenced = {\n concrete: true,\n name: 'codeFenced',\n tokenize: tokenizeCodeFenced\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n const self = this;\n /** @type {Construct} */\n const closeStart = {\n partial: true,\n tokenize: tokenizeCloseStart\n };\n let initialPrefix = 0;\n let sizeOpen = 0;\n /** @type {NonNullable} */\n let marker;\n return start;\n\n /**\n * Start of code.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse whitespace like `markdown-rs`.\n return beforeSequenceOpen(code);\n }\n\n /**\n * In opening fence, after prefix, at sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeSequenceOpen(code) {\n const tail = self.events[self.events.length - 1];\n initialPrefix = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n marker = code;\n effects.enter(\"codeFenced\");\n effects.enter(\"codeFencedFence\");\n effects.enter(\"codeFencedFenceSequence\");\n return sequenceOpen(code);\n }\n\n /**\n * In opening fence sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === marker) {\n sizeOpen++;\n effects.consume(code);\n return sequenceOpen;\n }\n if (sizeOpen < 3) {\n return nok(code);\n }\n effects.exit(\"codeFencedFenceSequence\");\n return markdownSpace(code) ? factorySpace(effects, infoBefore, \"whitespace\")(code) : infoBefore(code);\n }\n\n /**\n * In opening fence, after the sequence (and optional whitespace), before info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function infoBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFencedFence\");\n return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n }\n effects.enter(\"codeFencedFenceInfo\");\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return info(code);\n }\n\n /**\n * In info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function info(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceInfo\");\n return infoBefore(code);\n }\n if (markdownSpace(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceInfo\");\n return factorySpace(effects, metaBefore, \"whitespace\")(code);\n }\n if (code === 96 && code === marker) {\n return nok(code);\n }\n effects.consume(code);\n return info;\n }\n\n /**\n * In opening fence, after info and whitespace, before meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function metaBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n return infoBefore(code);\n }\n effects.enter(\"codeFencedFenceMeta\");\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return meta(code);\n }\n\n /**\n * In meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function meta(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceMeta\");\n return infoBefore(code);\n }\n if (code === 96 && code === marker) {\n return nok(code);\n }\n effects.consume(code);\n return meta;\n }\n\n /**\n * At eol/eof in code, before a non-lazy closing fence or content.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function atNonLazyBreak(code) {\n return effects.attempt(closeStart, after, contentBefore)(code);\n }\n\n /**\n * Before code content, not a closing fence, at eol.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentBefore(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return contentStart;\n }\n\n /**\n * Before code content, not a closing fence.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentStart(code) {\n return initialPrefix > 0 && markdownSpace(code) ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialPrefix + 1)(code) : beforeContentChunk(code);\n }\n\n /**\n * Before code content, after optional prefix.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeContentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n }\n effects.enter(\"codeFlowValue\");\n return contentChunk(code);\n }\n\n /**\n * In code content.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^^^^^^^^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFlowValue\");\n return beforeContentChunk(code);\n }\n effects.consume(code);\n return contentChunk;\n }\n\n /**\n * After code.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n effects.exit(\"codeFenced\");\n return ok(code);\n }\n\n /**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\n function tokenizeCloseStart(effects, ok, nok) {\n let size = 0;\n return startBefore;\n\n /**\n *\n *\n * @type {State}\n */\n function startBefore(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return start;\n }\n\n /**\n * Before closing fence, at optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Always populated by defaults.\n\n // To do: `enter` here or in next state?\n effects.enter(\"codeFencedFence\");\n return markdownSpace(code) ? factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : beforeSequenceClose(code);\n }\n\n /**\n * In closing fence, after optional whitespace, at sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeSequenceClose(code) {\n if (code === marker) {\n effects.enter(\"codeFencedFenceSequence\");\n return sequenceClose(code);\n }\n return nok(code);\n }\n\n /**\n * In closing fence sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n if (code === marker) {\n size++;\n effects.consume(code);\n return sequenceClose;\n }\n if (size >= sizeOpen) {\n effects.exit(\"codeFencedFenceSequence\");\n return markdownSpace(code) ? factorySpace(effects, sequenceCloseAfter, \"whitespace\")(code) : sequenceCloseAfter(code);\n }\n return nok(code);\n }\n\n /**\n * After closing fence sequence, after optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceCloseAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFencedFence\");\n return ok(code);\n }\n return nok(code);\n }\n }\n}","/// \n\n/* global document */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string | false}\n */\nexport function decodeNamedCharacterReference(value) {\n const characterReference = '&' + value + ';'\n element.innerHTML = characterReference\n const character = element.textContent\n\n // Some named character references do not require the closing semicolon\n // (`¬`, for instance), which leads to situations where parsing the assumed\n // named reference of `¬it;` will result in the string `¬it;`.\n // When we encounter a trailing semicolon after parsing, and the character\n // reference to decode was not a semicolon (`;`), we can assume that the\n // matching was not complete.\n if (\n character.charCodeAt(character.length - 1) === 59 /* `;` */ &&\n value !== 'semi'\n ) {\n return false\n }\n\n // If the decoded string is equal to the input, the character reference was\n // not valid.\n return character === characterReference ? false : character\n}\n","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterReference = {\n name: 'characterReference',\n tokenize: tokenizeCharacterReference\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n const self = this;\n let size = 0;\n /** @type {number} */\n let max;\n /** @type {(code: Code) => boolean} */\n let test;\n return start;\n\n /**\n * Start of character reference.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"characterReference\");\n effects.enter(\"characterReferenceMarker\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarker\");\n return open;\n }\n\n /**\n * After `&`, at `#` for numeric references or alphanumeric for named\n * references.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 35) {\n effects.enter(\"characterReferenceMarkerNumeric\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarkerNumeric\");\n return numeric;\n }\n effects.enter(\"characterReferenceValue\");\n max = 31;\n test = asciiAlphanumeric;\n return value(code);\n }\n\n /**\n * After `#`, at `x` for hexadecimals or digit for decimals.\n *\n * ```markdown\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function numeric(code) {\n if (code === 88 || code === 120) {\n effects.enter(\"characterReferenceMarkerHexadecimal\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarkerHexadecimal\");\n effects.enter(\"characterReferenceValue\");\n max = 6;\n test = asciiHexDigit;\n return value;\n }\n effects.enter(\"characterReferenceValue\");\n max = 7;\n test = asciiDigit;\n return value(code);\n }\n\n /**\n * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n *\n * The character reference kind defines what and how many characters are\n * allowed.\n *\n * ```markdown\n * > | a&b\n * ^^^\n * > | a{b\n * ^^^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function value(code) {\n if (code === 59 && size) {\n const token = effects.exit(\"characterReferenceValue\");\n if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\n return nok(code);\n }\n\n // To do: `markdown-rs` uses a different name:\n // `CharacterReferenceMarkerSemi`.\n effects.enter(\"characterReferenceMarker\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarker\");\n effects.exit(\"characterReference\");\n return ok;\n }\n if (test(code) && size++ < max) {\n effects.consume(code);\n return value;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiPunctuation } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterEscape = {\n name: 'characterEscape',\n tokenize: tokenizeCharacterEscape\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n return start;\n\n /**\n * Start of character escape.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"characterEscape\");\n effects.enter(\"escapeMarker\");\n effects.consume(code);\n effects.exit(\"escapeMarker\");\n return inside;\n }\n\n /**\n * After `\\`, at punctuation.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // ASCII punctuation.\n if (asciiPunctuation(code)) {\n effects.enter(\"characterEscapeValue\");\n effects.consume(code);\n effects.exit(\"characterEscapeValue\");\n effects.exit(\"characterEscape\");\n return ok;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const lineEnding = {\n name: 'lineEnding',\n tokenize: tokenizeLineEnding\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n return start;\n\n /** @type {State} */\n function start(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return factorySpace(effects, ok, \"linePrefix\");\n }\n}","/**\n * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types'\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs\n * List of constructs, optionally with `resolveAll`s.\n * @param {Array} events\n * List of events.\n * @param {TokenizeContext} context\n * Context used by `tokenize`.\n * @returns {Array}\n * Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n /** @type {Array} */\n const called = []\n let index = -1\n\n while (++index < constructs.length) {\n const resolve = constructs[index].resolveAll\n\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context)\n called.push(resolve)\n }\n }\n\n return events\n}\n","/**\n * @import {\n * Construct,\n * Event,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const labelEnd = {\n name: 'labelEnd',\n resolveAll: resolveAllLabelEnd,\n resolveTo: resolveToLabelEnd,\n tokenize: tokenizeLabelEnd\n};\n\n/** @type {Construct} */\nconst resourceConstruct = {\n tokenize: tokenizeResource\n};\n/** @type {Construct} */\nconst referenceFullConstruct = {\n tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n tokenize: tokenizeReferenceCollapsed\n};\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n let index = -1;\n /** @type {Array} */\n const newEvents = [];\n while (++index < events.length) {\n const token = events[index][1];\n newEvents.push(events[index]);\n if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n // Remove the marker.\n const offset = token.type === \"labelImage\" ? 4 : 2;\n token.type = \"data\";\n index += offset;\n }\n }\n\n // If the events are equal, we don't have to copy newEvents to events\n if (events.length !== newEvents.length) {\n splice(events, 0, events.length, newEvents);\n }\n return events;\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n let index = events.length;\n let offset = 0;\n /** @type {number | undefined} */\n let open;\n /** @type {number | undefined} */\n let close;\n /** @type {Array} */\n let media;\n\n // Find an opening.\n while (index--) {\n const token = events[index][1];\n if (open) {\n // If we see another link, or inactive link label, we’ve been here before.\n if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n break;\n }\n\n // Mark other link openings as inactive, as we can’t have links in\n // links.\n if (events[index][0] === 'enter' && token.type === \"labelLink\") {\n token._inactive = true;\n }\n } else if (close) {\n if (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\n open = index;\n if (token.type !== \"labelLink\") {\n offset = 2;\n break;\n }\n }\n } else if (token.type === \"labelEnd\") {\n close = index;\n }\n }\n const group = {\n type: events[open][1].type === \"labelLink\" ? \"link\" : \"image\",\n start: {\n ...events[open][1].start\n },\n end: {\n ...events[events.length - 1][1].end\n }\n };\n const label = {\n type: \"label\",\n start: {\n ...events[open][1].start\n },\n end: {\n ...events[close][1].end\n }\n };\n const text = {\n type: \"labelText\",\n start: {\n ...events[open + offset + 2][1].end\n },\n end: {\n ...events[close - 2][1].start\n }\n };\n media = [['enter', group, context], ['enter', label, context]];\n\n // Opening marker.\n media = push(media, events.slice(open + 1, open + offset + 3));\n\n // Text open.\n media = push(media, [['enter', text, context]]);\n\n // Always populated by defaults.\n\n // Between.\n media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n // Text close, marker close, label close.\n media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\n\n // Reference, resource, or so.\n media = push(media, events.slice(close + 1));\n\n // Media close.\n media = push(media, [['exit', group, context]]);\n splice(events, open, events.length, media);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n const self = this;\n const labelStarts = self._labelStarts;\n /** @type {Token} */\n let labelStart;\n /** @type {boolean} */\n let defined;\n if (labelStarts) {\n // Discard ones that failed to close,\n // they’re not needed anymore.\n while (labelStarts.length > 0 && labelStarts[labelStarts.length - 1]._balanced) {\n labelStarts.pop();\n }\n labelStart = labelStarts[labelStarts.length - 1];\n }\n return start;\n\n /**\n * Start of label end.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // If there is not an okay opening.\n if (!labelStart) {\n return nok(code);\n }\n\n // If the corresponding label (link) start is marked as inactive,\n // it means we’d be wrapping a link, like this:\n //\n // ```markdown\n // > | a [b [c](d) e](f) g.\n // ^\n // ```\n //\n // We can’t have that, so it’s just balanced brackets.\n if (labelStart._inactive) {\n return labelEndNok(code);\n }\n defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })));\n effects.enter(\"labelEnd\");\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelEnd\");\n return after;\n }\n\n /**\n * After `]`.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n // an extension.\n\n // Resource (`[asd](fgh)`)?\n if (code === 40) {\n return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n }\n\n // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n if (code === 91) {\n return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n }\n\n // Shortcut (`[asd]`) reference?\n return defined ? labelEndOk(code) : labelEndNok(code);\n }\n\n /**\n * After `]`, at `[`, but not at a full reference.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceNotFull(code) {\n return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n }\n\n /**\n * Done, we found something.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndOk(code) {\n // Note: `markdown-rs` does a bunch of stuff here.\n // This label start is now used up: discard it so it’s never found again.\n\n labelStarts.pop();\n return ok(code);\n }\n\n /**\n * Done, it’s nothing.\n *\n * There was an okay opening, but we didn’t match anything.\n *\n * ```markdown\n * > | [a](b c\n * ^\n * > | [a][b c\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndNok(code) {\n labelStart._balanced = true;\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n return resourceStart;\n\n /**\n * At a resource.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceStart(code) {\n effects.enter(\"resource\");\n effects.enter(\"resourceMarker\");\n effects.consume(code);\n effects.exit(\"resourceMarker\");\n return resourceBefore;\n }\n\n /**\n * In resource, after `(`, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBefore(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n }\n\n /**\n * In resource, after optional whitespace, at `)` or a destination.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceOpen(code) {\n if (code === 41) {\n return resourceEnd(code);\n }\n return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(code);\n }\n\n /**\n * In resource, after destination, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n }\n\n /**\n * At invalid destination.\n *\n * ```markdown\n * > | [a](<<) b\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationMissing(code) {\n return nok(code);\n }\n\n /**\n * In resource, after destination and whitespace, at `(` or title.\n *\n * ```markdown\n * > | [a](b ) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBetween(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(code);\n }\n return resourceEnd(code);\n }\n\n /**\n * In resource, after title, at optional whitespace.\n *\n * ```markdown\n * > | [a](b \"c\") d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceTitleAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n }\n\n /**\n * In resource, at `)`.\n *\n * ```markdown\n * > | [a](b) d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceEnd(code) {\n if (code === 41) {\n effects.enter(\"resourceMarker\");\n effects.consume(code);\n effects.exit(\"resourceMarker\");\n effects.exit(\"resource\");\n return ok;\n }\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n const self = this;\n return referenceFull;\n\n /**\n * In a reference (full), at the `[`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFull(code) {\n return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(code);\n }\n\n /**\n * In a reference (full), after `]`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullAfter(code) {\n return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n }\n\n /**\n * In reference (full) that was missing.\n *\n * ```markdown\n * > | [a][b d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullMissing(code) {\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n return referenceCollapsedStart;\n\n /**\n * In reference (collapsed), at `[`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedStart(code) {\n // We only attempt a collapsed label if there’s a `[`.\n\n effects.enter(\"reference\");\n effects.enter(\"referenceMarker\");\n effects.consume(code);\n effects.exit(\"referenceMarker\");\n return referenceCollapsedOpen;\n }\n\n /**\n * In reference (collapsed), at `]`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedOpen(code) {\n if (code === 93) {\n effects.enter(\"referenceMarker\");\n effects.consume(code);\n effects.exit(\"referenceMarker\");\n effects.exit(\"reference\");\n return ok;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * Token,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n name: 'labelStartImage',\n resolveAll: labelEnd.resolveAll,\n tokenize: tokenizeLabelStartImage\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n const self = this;\n /** @type {Token} */\n let labelImage;\n return start;\n\n /**\n * Start of label (image) start.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"labelImage\");\n effects.enter(\"labelImageMarker\");\n effects.consume(code);\n effects.exit(\"labelImageMarker\");\n return open;\n }\n\n /**\n * After `!`, at `[`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 91) {\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n labelImage = effects.exit(\"labelImage\");\n return after;\n }\n return nok(code);\n }\n\n /**\n * After `![`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * This is needed in because, when GFM footnotes are enabled, images never\n * form when started with a `^`.\n * Instead, links form:\n *\n * ```markdown\n * ![^a](b)\n *\n * ![^a][b]\n *\n * [b]: c\n * ```\n *\n * ```html\n *

!^a

\n *

!^a

\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // To do: use a new field to do this, this is still needed for\n // `micromark-extension-gfm-footnote`, but the `label-start-link`\n // behavior isn’t.\n // Hidden footnotes hook.\n /* c8 ignore next 6 */\n if (code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs) {\n return nok(code);\n }\n self._labelStarts = self._labelStarts || [];\n self._labelStarts.push(labelImage);\n return ok(code);\n }\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\nimport { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n * Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n * Group.\n */\nexport function classifyCharacter(code) {\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return 1;\n }\n if (unicodePunctuation(code)) {\n return 2;\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * Event,\n * Point,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { push, splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const attention = {\n name: 'attention',\n resolveAll: resolveAllAttention,\n tokenize: tokenizeAttention\n};\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n let index = -1;\n /** @type {Array} */\n let nextEvents;\n\n // Walk through all events.\n //\n // Note: performance of this is fine on an mb of normal markdown, but it’s\n // a bottleneck for malicious stuff.\n while (++index < events.length) {\n // Find a token that can close.\n if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\n let open = index;\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open &&\n // If the markers are the same:\n context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n // If the opening can close or the closing can open,\n // and the close size *is not* a multiple of three,\n // but the sum of the opening and closing size *is* multiple of three,\n // then don’t match.\n if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n continue;\n }\n\n // Number of markers to use from the sequence.\n const use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n const start = {\n ...events[open][1].end\n };\n const end = {\n ...events[index][1].start\n };\n movePoint(start, -use);\n movePoint(end, use);\n const openingSequence = {\n type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n start,\n end: {\n ...events[open][1].end\n }\n };\n const closingSequence = {\n type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n start: {\n ...events[index][1].start\n },\n end\n };\n const text = {\n type: use > 1 ? \"strongText\" : \"emphasisText\",\n start: {\n ...events[open][1].end\n },\n end: {\n ...events[index][1].start\n }\n };\n const group = {\n type: use > 1 ? \"strong\" : \"emphasis\",\n start: {\n ...openingSequence.start\n },\n end: {\n ...closingSequence.end\n }\n };\n events[open][1].end = {\n ...openingSequence.start\n };\n events[index][1].start = {\n ...closingSequence.end\n };\n nextEvents = [];\n\n // If there are more markers in the opening, add them before.\n if (events[open][1].end.offset - events[open][1].start.offset) {\n nextEvents = push(nextEvents, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n }\n\n // Opening.\n nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]);\n\n // Always populated by defaults.\n\n // Between.\n nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context));\n\n // Closing.\n nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]);\n\n /** @type {number} */\n let offset = 0;\n\n // If there are more markers in the closing, add them after.\n if (events[index][1].end.offset - events[index][1].start.offset) {\n offset = 2;\n nextEvents = push(nextEvents, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\n }\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - offset - 2;\n break;\n }\n }\n }\n }\n\n // Remove remaining sequences.\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === 'attentionSequence') {\n events[index][1].type = 'data';\n }\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n const previous = this.previous;\n const before = classifyCharacter(previous);\n\n /** @type {NonNullable} */\n let marker;\n return start;\n\n /**\n * Before a sequence.\n *\n * ```markdown\n * > | **\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n marker = code;\n effects.enter('attentionSequence');\n return inside(code);\n }\n\n /**\n * In a sequence.\n *\n * ```markdown\n * > | **\n * ^^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker) {\n effects.consume(code);\n return inside;\n }\n const token = effects.exit('attentionSequence');\n\n // To do: next major: move this to resolver, just like `markdown-rs`.\n const after = classifyCharacter(code);\n\n // Always populated by defaults.\n\n // Note: `*` and `_` are in `attentionMarkers` through core.\n // They are excluded here as the loosening is meant for markers registered\n // by *other* constructs (such as GFM strikethrough’s `~`).\n const open = !after || after === 2 && before || attentionMarkers.includes(code) && code !== 42 && code !== 95;\n const close = !before || before === 2 && after || attentionMarkers.includes(previous) && previous !== 42 && previous !== 95;\n token._open = Boolean(marker === 42 ? open : open && (before || !close));\n token._close = Boolean(marker === 42 ? close : close && (after || !open));\n return ok(code);\n }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * Point.\n * @param {number} offset\n * Amount to move.\n * @returns {undefined}\n * Nothing.\n */\nfunction movePoint(point, offset) {\n point.column += offset;\n point.offset += offset;\n point._bufferIndex += offset;\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\nexport const autolink = {\n name: 'autolink',\n tokenize: tokenizeAutolink\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n let size = 0;\n return start;\n\n /**\n * Start of an autolink.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"autolink\");\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.enter(\"autolinkProtocol\");\n return open;\n }\n\n /**\n * After `<`, at protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (asciiAlpha(code)) {\n effects.consume(code);\n return schemeOrEmailAtext;\n }\n if (code === 64) {\n return nok(code);\n }\n return emailAtext(code);\n }\n\n /**\n * At second byte of protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeOrEmailAtext(code) {\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n // Count the previous alphabetical from `open` too.\n size = 1;\n return schemeInsideOrEmailAtext(code);\n }\n return emailAtext(code);\n }\n\n /**\n * In ambiguous protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeInsideOrEmailAtext(code) {\n if (code === 58) {\n effects.consume(code);\n size = 0;\n return urlInside;\n }\n\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\n effects.consume(code);\n return schemeInsideOrEmailAtext;\n }\n size = 0;\n return emailAtext(code);\n }\n\n /**\n * After protocol, in URL.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function urlInside(code) {\n if (code === 62) {\n effects.exit(\"autolinkProtocol\");\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.exit(\"autolink\");\n return ok;\n }\n\n // ASCII control, space, or `<`.\n if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n return nok(code);\n }\n effects.consume(code);\n return urlInside;\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function emailAtext(code) {\n if (code === 64) {\n effects.consume(code);\n return emailAtSignOrDot;\n }\n if (asciiAtext(code)) {\n effects.consume(code);\n return emailAtext;\n }\n return nok(code);\n }\n\n /**\n * In label, after at-sign or dot.\n *\n * ```markdown\n * > | ab\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function emailAtSignOrDot(code) {\n return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);\n }\n\n /**\n * In label, where `.` and `>` are allowed.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function emailLabel(code) {\n if (code === 46) {\n effects.consume(code);\n size = 0;\n return emailAtSignOrDot;\n }\n if (code === 62) {\n // Exit, then change the token type.\n effects.exit(\"autolinkProtocol\").type = \"autolinkEmail\";\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.exit(\"autolink\");\n return ok;\n }\n return emailValue(code);\n }\n\n /**\n * In label, where `.` and `>` are *not* allowed.\n *\n * Though, this is also used in `emailLabel` to parse other values.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function emailValue(code) {\n // ASCII alphanumeric or `-`.\n if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n const next = code === 45 ? emailValue : emailLabel;\n effects.consume(code);\n return next;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n name: 'htmlText',\n tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n const self = this;\n /** @type {NonNullable | undefined} */\n let marker;\n /** @type {number} */\n let index;\n /** @type {State} */\n let returnState;\n return start;\n\n /**\n * Start of HTML (text).\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"htmlText\");\n effects.enter(\"htmlTextData\");\n effects.consume(code);\n return open;\n }\n\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | a c\n * ^\n * > | a c\n * ^\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 33) {\n effects.consume(code);\n return declarationOpen;\n }\n if (code === 47) {\n effects.consume(code);\n return tagCloseStart;\n }\n if (code === 63) {\n effects.consume(code);\n return instruction;\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagOpen;\n }\n return nok(code);\n }\n\n /**\n * After ` | a c\n * ^\n * > | a c\n * ^\n * > | a &<]]> c\n * ^\n * ```\n *\n * @type {State}\n */\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code);\n return commentOpenInside;\n }\n if (code === 91) {\n effects.consume(code);\n index = 0;\n return cdataOpenInside;\n }\n if (asciiAlpha(code)) {\n effects.consume(code);\n return declaration;\n }\n return nok(code);\n }\n\n /**\n * In a comment, after ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n return nok(code);\n }\n\n /**\n * In comment.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function comment(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 45) {\n effects.consume(code);\n return commentClose;\n }\n if (markdownLineEnding(code)) {\n returnState = comment;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return comment;\n }\n\n /**\n * In comment, after `-`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentClose(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n return comment(code);\n }\n\n /**\n * In comment, after `--`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentEnd(code) {\n return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n }\n\n /**\n * After ` | a &<]]> b\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function cdataOpenInside(code) {\n const value = \"CDATA[\";\n if (code === value.charCodeAt(index++)) {\n effects.consume(code);\n return index === value.length ? cdata : cdataOpenInside;\n }\n return nok(code);\n }\n\n /**\n * In CDATA.\n *\n * ```markdown\n * > | a &<]]> b\n * ^^^\n * ```\n *\n * @type {State}\n */\n function cdata(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 93) {\n effects.consume(code);\n return cdataClose;\n }\n if (markdownLineEnding(code)) {\n returnState = cdata;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return cdata;\n }\n\n /**\n * In CDATA, after `]`, at another `]`.\n *\n * ```markdown\n * > | a &<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataClose(code) {\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n return cdata(code);\n }\n\n /**\n * In CDATA, after `]]`, at `>`.\n *\n * ```markdown\n * > | a &<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataEnd(code) {\n if (code === 62) {\n return end(code);\n }\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n return cdata(code);\n }\n\n /**\n * In declaration.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function declaration(code) {\n if (code === null || code === 62) {\n return end(code);\n }\n if (markdownLineEnding(code)) {\n returnState = declaration;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return declaration;\n }\n\n /**\n * In instruction.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function instruction(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 63) {\n effects.consume(code);\n return instructionClose;\n }\n if (markdownLineEnding(code)) {\n returnState = instruction;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return instruction;\n }\n\n /**\n * In instruction, after `?`, at `>`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function instructionClose(code) {\n return code === 62 ? end(code) : instruction(code);\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseStart(code) {\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagClose;\n }\n return nok(code);\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagClose(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagClose;\n }\n return tagCloseBetween(code);\n }\n\n /**\n * In closing tag, after tag name.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseBetween(code) {\n if (markdownLineEnding(code)) {\n returnState = tagCloseBetween;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagCloseBetween;\n }\n return end(code);\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpen(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpen;\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n return nok(code);\n }\n\n /**\n * In opening tag, after tag name.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenBetween(code) {\n if (code === 47) {\n effects.consume(code);\n return end;\n }\n\n // ASCII alphabetical and `:` and `_`.\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenBetween;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenBetween;\n }\n return end(code);\n }\n\n /**\n * In attribute name.\n *\n * ```markdown\n * > | a d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeName(code) {\n // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n return tagOpenAttributeNameAfter(code);\n }\n\n /**\n * After attribute name, before initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | a d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeNameAfter;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeNameAfter;\n }\n return tagOpenBetween(code);\n }\n\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueBefore(code) {\n if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n return nok(code);\n }\n if (code === 34 || code === 39) {\n effects.consume(code);\n marker = code;\n return tagOpenAttributeValueQuoted;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueBefore;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuoted(code) {\n if (code === marker) {\n effects.consume(code);\n marker = undefined;\n return tagOpenAttributeValueQuotedAfter;\n }\n if (code === null) {\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueQuoted;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return tagOpenAttributeValueQuoted;\n }\n\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueUnquoted(code) {\n if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n return nok(code);\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n\n /**\n * After double or single quoted attribute value, before whitespace or the end\n * of the tag.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n return nok(code);\n }\n\n /**\n * In certain circumstances of a tag where only an `>` is allowed.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function end(code) {\n if (code === 62) {\n effects.consume(code);\n effects.exit(\"htmlTextData\");\n effects.exit(\"htmlText\");\n return ok;\n }\n return nok(code);\n }\n\n /**\n * At eol.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * > | a \n * ```\n *\n * @type {State}\n */\n function lineEndingBefore(code) {\n effects.exit(\"htmlTextData\");\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return lineEndingAfter;\n }\n\n /**\n * After eol, at optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a \n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfter(code) {\n // Always populated by defaults.\n\n return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n }\n\n /**\n * After eol, after optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a \n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfterPrefix(code) {\n effects.enter(\"htmlTextData\");\n return returnState(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * Token,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n name: 'labelStartLink',\n resolveAll: labelEnd.resolveAll,\n tokenize: tokenizeLabelStartLink\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n const self = this;\n /** @type {Token} */\n let labelLink;\n return start;\n\n /**\n * Start of label (link) start.\n *\n * ```markdown\n * > | a [b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"labelLink\");\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n labelLink = effects.exit(\"labelLink\");\n return after;\n }\n\n /** @type {State} */\n function after(code) {\n // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n // remove.\n // Hidden footnotes hook.\n /* c8 ignore next 6 */\n if (code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs) {\n return nok(code);\n }\n self._labelStarts = self._labelStarts || [];\n self._labelStarts.push(labelLink);\n return ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const hardBreakEscape = {\n name: 'hardBreakEscape',\n tokenize: tokenizeHardBreakEscape\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n return start;\n\n /**\n * Start of a hard break (escape).\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"hardBreakEscape\");\n effects.consume(code);\n return after;\n }\n\n /**\n * After `\\`, at eol.\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (markdownLineEnding(code)) {\n effects.exit(\"hardBreakEscape\");\n return ok(code);\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * Previous,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeText = {\n name: 'codeText',\n previous,\n resolve: resolveCodeText,\n tokenize: tokenizeCodeText\n};\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n let tailExitIndex = events.length - 4;\n let headEnterIndex = 3;\n /** @type {number} */\n let index;\n /** @type {number | undefined} */\n let enter;\n\n // If we start and end with an EOL or a space.\n if ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\n index = headEnterIndex;\n\n // And we have data.\n while (++index < tailExitIndex) {\n if (events[index][1].type === \"codeTextData\") {\n // Then we have padding.\n events[headEnterIndex][1].type = \"codeTextPadding\";\n events[tailExitIndex][1].type = \"codeTextPadding\";\n headEnterIndex += 2;\n tailExitIndex -= 2;\n break;\n }\n }\n }\n\n // Merge adjacent spaces and data.\n index = headEnterIndex - 1;\n tailExitIndex++;\n while (++index <= tailExitIndex) {\n if (enter === undefined) {\n if (index !== tailExitIndex && events[index][1].type !== \"lineEnding\") {\n enter = index;\n }\n } else if (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\n events[enter][1].type = \"codeTextData\";\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end;\n events.splice(enter + 2, index - enter - 2);\n tailExitIndex -= index - enter - 2;\n index = enter + 2;\n }\n enter = undefined;\n }\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Previous}\n */\nfunction previous(code) {\n // If there is a previous code, there will always be a tail.\n return code !== 96 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n const self = this;\n let sizeOpen = 0;\n /** @type {number} */\n let size;\n /** @type {Token} */\n let token;\n return start;\n\n /**\n * Start of code (text).\n *\n * ```markdown\n * > | `a`\n * ^\n * > | \\`a`\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"codeText\");\n effects.enter(\"codeTextSequence\");\n return sequenceOpen(code);\n }\n\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === 96) {\n effects.consume(code);\n sizeOpen++;\n return sequenceOpen;\n }\n effects.exit(\"codeTextSequence\");\n return between(code);\n }\n\n /**\n * Between something and something else.\n *\n * ```markdown\n * > | `a`\n * ^^\n * ```\n *\n * @type {State}\n */\n function between(code) {\n // EOF.\n if (code === null) {\n return nok(code);\n }\n\n // To do: next major: don’t do spaces in resolve, but when compiling,\n // like `markdown-rs`.\n // Tabs don’t work, and virtual spaces don’t make sense.\n if (code === 32) {\n effects.enter('space');\n effects.consume(code);\n effects.exit('space');\n return between;\n }\n\n // Closing fence? Could also be data.\n if (code === 96) {\n token = effects.enter(\"codeTextSequence\");\n size = 0;\n return sequenceClose(code);\n }\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return between;\n }\n\n // Data.\n effects.enter(\"codeTextData\");\n return data(code);\n }\n\n /**\n * In data.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function data(code) {\n if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\n effects.exit(\"codeTextData\");\n return between(code);\n }\n effects.consume(code);\n return data;\n }\n\n /**\n * In closing sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n // More.\n if (code === 96) {\n effects.consume(code);\n size++;\n return sequenceClose;\n }\n\n // Done!\n if (size === sizeOpen) {\n effects.exit(\"codeTextSequence\");\n effects.exit(\"codeText\");\n return ok(code);\n }\n\n // More or less accents: mark as data.\n token.type = \"codeTextData\";\n return data(code);\n }\n}","/**\n * @import {Extension} from 'micromark-util-types'\n */\n\nimport { attention, autolink, blockQuote, characterEscape, characterReference, codeFenced, codeIndented, codeText, definition, hardBreakEscape, headingAtx, htmlFlow, htmlText, labelEnd, labelStartImage, labelStartLink, lineEnding, list, setextUnderline, thematicBreak } from 'micromark-core-commonmark';\nimport { resolver as resolveText } from './initialize/text.js';\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n [42]: list,\n [43]: list,\n [45]: list,\n [48]: list,\n [49]: list,\n [50]: list,\n [51]: list,\n [52]: list,\n [53]: list,\n [54]: list,\n [55]: list,\n [56]: list,\n [57]: list,\n [62]: blockQuote\n};\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n [91]: definition\n};\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n [-2]: codeIndented,\n [-1]: codeIndented,\n [32]: codeIndented\n};\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n [35]: headingAtx,\n [42]: thematicBreak,\n [45]: [setextUnderline, thematicBreak],\n [60]: htmlFlow,\n [61]: setextUnderline,\n [95]: thematicBreak,\n [96]: codeFenced,\n [126]: codeFenced\n};\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n [38]: characterReference,\n [92]: characterEscape\n};\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n [-5]: lineEnding,\n [-4]: lineEnding,\n [-3]: lineEnding,\n [33]: labelStartImage,\n [38]: characterReference,\n [42]: attention,\n [60]: [autolink, htmlText],\n [91]: labelStartLink,\n [92]: [hardBreakEscape, characterEscape],\n [93]: labelEnd,\n [95]: attention,\n [96]: codeText\n};\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n null: [attention, resolveText]\n};\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n null: [42, 95]\n};\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n null: []\n};","/**\n * @import {\n * Chunk,\n * Code,\n * ConstructRecord,\n * Construct,\n * Effects,\n * InitialConstruct,\n * ParseContext,\n * Point,\n * State,\n * TokenizeContext,\n * Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @callback Restore\n * Restore the state.\n * @returns {undefined}\n * Nothing.\n *\n * @typedef Info\n * Info.\n * @property {Restore} restore\n * Restore.\n * @property {number} from\n * From.\n *\n * @callback ReturnHandle\n * Handle a successful run.\n * @param {Construct} construct\n * Construct.\n * @param {Info} info\n * Info.\n * @returns {undefined}\n * Nothing.\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * Parser.\n * @param {InitialConstruct} initialize\n * Construct.\n * @param {Omit | undefined} [from]\n * Point (optional).\n * @returns {TokenizeContext}\n * Context.\n */\nexport function createTokenizer(parser, initialize, from) {\n /** @type {Point} */\n let point = {\n _bufferIndex: -1,\n _index: 0,\n line: from && from.line || 1,\n column: from && from.column || 1,\n offset: from && from.offset || 0\n };\n /** @type {Record} */\n const columnStart = {};\n /** @type {Array} */\n const resolveAllConstructs = [];\n /** @type {Array} */\n let chunks = [];\n /** @type {Array} */\n let stack = [];\n /** @type {boolean | undefined} */\n let consumed = true;\n\n /**\n * Tools used for tokenizing.\n *\n * @type {Effects}\n */\n const effects = {\n attempt: constructFactory(onsuccessfulconstruct),\n check: constructFactory(onsuccessfulcheck),\n consume,\n enter,\n exit,\n interrupt: constructFactory(onsuccessfulcheck, {\n interrupt: true\n })\n };\n\n /**\n * State and tools for resolving and serializing.\n *\n * @type {TokenizeContext}\n */\n const context = {\n code: null,\n containerState: {},\n defineSkip,\n events: [],\n now,\n parser,\n previous: null,\n sliceSerialize,\n sliceStream,\n write\n };\n\n /**\n * The state function.\n *\n * @type {State | undefined}\n */\n let state = initialize.tokenize.call(context, effects);\n\n /**\n * Track which character we expect to be consumed, to catch bugs.\n *\n * @type {Code}\n */\n let expectedCode;\n if (initialize.resolveAll) {\n resolveAllConstructs.push(initialize);\n }\n return context;\n\n /** @type {TokenizeContext['write']} */\n function write(slice) {\n chunks = push(chunks, slice);\n main();\n\n // Exit if we’re not done, resolve might change stuff.\n if (chunks[chunks.length - 1] !== null) {\n return [];\n }\n addResult(initialize, 0);\n\n // Otherwise, resolve, and exit.\n context.events = resolveAll(resolveAllConstructs, context.events, context);\n return context.events;\n }\n\n //\n // Tools.\n //\n\n /** @type {TokenizeContext['sliceSerialize']} */\n function sliceSerialize(token, expandTabs) {\n return serializeChunks(sliceStream(token), expandTabs);\n }\n\n /** @type {TokenizeContext['sliceStream']} */\n function sliceStream(token) {\n return sliceChunks(chunks, token);\n }\n\n /** @type {TokenizeContext['now']} */\n function now() {\n // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n const {\n _bufferIndex,\n _index,\n line,\n column,\n offset\n } = point;\n return {\n _bufferIndex,\n _index,\n line,\n column,\n offset\n };\n }\n\n /** @type {TokenizeContext['defineSkip']} */\n function defineSkip(value) {\n columnStart[value.line] = value.column;\n accountForPotentialSkip();\n }\n\n //\n // State management.\n //\n\n /**\n * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n * `consume`).\n * Here is where we walk through the chunks, which either include strings of\n * several characters, or numerical character codes.\n * The reason to do this in a loop instead of a call is so the stack can\n * drain.\n *\n * @returns {undefined}\n * Nothing.\n */\n function main() {\n while (point._index < chunks.length) {\n const chunk = chunks[point._index];\n\n // If we’re in a buffer chunk, loop through it.\n if (typeof chunk === 'string') {\n const chunkIndex = point._index;\n if (point._bufferIndex < 0) {\n point._bufferIndex = 0;\n }\n while (point._index === chunkIndex && point._bufferIndex < chunk.length) {\n go(chunk.charCodeAt(point._bufferIndex));\n }\n } else {\n go(chunk);\n }\n }\n }\n\n /**\n * Deal with one code.\n *\n * @param {Code} code\n * Code.\n * @returns {undefined}\n * Nothing.\n */\n function go(code) {\n consumed = undefined;\n expectedCode = code;\n state = state(code);\n }\n\n /** @type {Effects['consume']} */\n function consume(code) {\n if (markdownLineEnding(code)) {\n point.line++;\n point.column = 1;\n point.offset += code === -3 ? 2 : 1;\n accountForPotentialSkip();\n } else if (code !== -1) {\n point.column++;\n point.offset++;\n }\n\n // Not in a string chunk.\n if (point._bufferIndex < 0) {\n point._index++;\n } else {\n point._bufferIndex++;\n\n // At end of string chunk.\n if (point._bufferIndex ===\n // Points w/ non-negative `_bufferIndex` reference\n // strings.\n /** @type {string} */\n chunks[point._index].length) {\n point._bufferIndex = -1;\n point._index++;\n }\n }\n\n // Expose the previous character.\n context.previous = code;\n\n // Mark as consumed.\n consumed = true;\n }\n\n /** @type {Effects['enter']} */\n function enter(type, fields) {\n /** @type {Token} */\n // @ts-expect-error Patch instead of assign required fields to help GC.\n const token = fields || {};\n token.type = type;\n token.start = now();\n context.events.push(['enter', token, context]);\n stack.push(token);\n return token;\n }\n\n /** @type {Effects['exit']} */\n function exit(type) {\n const token = stack.pop();\n token.end = now();\n context.events.push(['exit', token, context]);\n return token;\n }\n\n /**\n * Use results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulconstruct(construct, info) {\n addResult(construct, info.from);\n }\n\n /**\n * Discard results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulcheck(_, info) {\n info.restore();\n }\n\n /**\n * Factory to attempt/check/interrupt.\n *\n * @param {ReturnHandle} onreturn\n * Callback.\n * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n * Fields.\n */\n function constructFactory(onreturn, fields) {\n return hook;\n\n /**\n * Handle either an object mapping codes to constructs, a list of\n * constructs, or a single construct.\n *\n * @param {Array | ConstructRecord | Construct} constructs\n * Constructs.\n * @param {State} returnState\n * State.\n * @param {State | undefined} [bogusState]\n * State.\n * @returns {State}\n * State.\n */\n function hook(constructs, returnState, bogusState) {\n /** @type {ReadonlyArray} */\n let listOfConstructs;\n /** @type {number} */\n let constructIndex;\n /** @type {Construct} */\n let currentConstruct;\n /** @type {Info} */\n let info;\n return Array.isArray(constructs) ? /* c8 ignore next 1 */\n handleListOfConstructs(constructs) : 'tokenize' in constructs ?\n // Looks like a construct.\n handleListOfConstructs([(/** @type {Construct} */constructs)]) : handleMapOfConstructs(constructs);\n\n /**\n * Handle a list of construct.\n *\n * @param {ConstructRecord} map\n * Constructs.\n * @returns {State}\n * State.\n */\n function handleMapOfConstructs(map) {\n return start;\n\n /** @type {State} */\n function start(code) {\n const left = code !== null && map[code];\n const all = code !== null && map.null;\n const list = [\n // To do: add more extension tests.\n /* c8 ignore next 2 */\n ...(Array.isArray(left) ? left : left ? [left] : []), ...(Array.isArray(all) ? all : all ? [all] : [])];\n return handleListOfConstructs(list)(code);\n }\n }\n\n /**\n * Handle a list of construct.\n *\n * @param {ReadonlyArray} list\n * Constructs.\n * @returns {State}\n * State.\n */\n function handleListOfConstructs(list) {\n listOfConstructs = list;\n constructIndex = 0;\n if (list.length === 0) {\n return bogusState;\n }\n return handleConstruct(list[constructIndex]);\n }\n\n /**\n * Handle a single construct.\n *\n * @param {Construct} construct\n * Construct.\n * @returns {State}\n * State.\n */\n function handleConstruct(construct) {\n return start;\n\n /** @type {State} */\n function start(code) {\n // To do: not needed to store if there is no bogus state, probably?\n // Currently doesn’t work because `inspect` in document does a check\n // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n // by not storing.\n info = store();\n currentConstruct = construct;\n if (!construct.partial) {\n context.currentConstruct = construct;\n }\n\n // Always populated by defaults.\n\n if (construct.name && context.parser.constructs.disable.null.includes(construct.name)) {\n return nok(code);\n }\n return construct.tokenize.call(\n // If we do have fields, create an object w/ `context` as its\n // prototype.\n // This allows a “live binding”, which is needed for `interrupt`.\n fields ? Object.assign(Object.create(context), fields) : context, effects, ok, nok)(code);\n }\n }\n\n /** @type {State} */\n function ok(code) {\n consumed = true;\n onreturn(currentConstruct, info);\n return returnState;\n }\n\n /** @type {State} */\n function nok(code) {\n consumed = true;\n info.restore();\n if (++constructIndex < listOfConstructs.length) {\n return handleConstruct(listOfConstructs[constructIndex]);\n }\n return bogusState;\n }\n }\n }\n\n /**\n * @param {Construct} construct\n * Construct.\n * @param {number} from\n * From.\n * @returns {undefined}\n * Nothing.\n */\n function addResult(construct, from) {\n if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n resolveAllConstructs.push(construct);\n }\n if (construct.resolve) {\n splice(context.events, from, context.events.length - from, construct.resolve(context.events.slice(from), context));\n }\n if (construct.resolveTo) {\n context.events = construct.resolveTo(context.events, context);\n }\n }\n\n /**\n * Store state.\n *\n * @returns {Info}\n * Info.\n */\n function store() {\n const startPoint = now();\n const startPrevious = context.previous;\n const startCurrentConstruct = context.currentConstruct;\n const startEventsIndex = context.events.length;\n const startStack = Array.from(stack);\n return {\n from: startEventsIndex,\n restore\n };\n\n /**\n * Restore state.\n *\n * @returns {undefined}\n * Nothing.\n */\n function restore() {\n point = startPoint;\n context.previous = startPrevious;\n context.currentConstruct = startCurrentConstruct;\n context.events.length = startEventsIndex;\n stack = startStack;\n accountForPotentialSkip();\n }\n }\n\n /**\n * Move the current point a bit forward in the line when it’s on a column\n * skip.\n *\n * @returns {undefined}\n * Nothing.\n */\n function accountForPotentialSkip() {\n if (point.line in columnStart && point.column < 2) {\n point.column = columnStart[point.line];\n point.offset += columnStart[point.line] - 1;\n }\n }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {ReadonlyArray} chunks\n * Chunks.\n * @param {Pick} token\n * Token.\n * @returns {Array}\n * Chunks.\n */\nfunction sliceChunks(chunks, token) {\n const startIndex = token.start._index;\n const startBufferIndex = token.start._bufferIndex;\n const endIndex = token.end._index;\n const endBufferIndex = token.end._bufferIndex;\n /** @type {Array} */\n let view;\n if (startIndex === endIndex) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)];\n } else {\n view = chunks.slice(startIndex, endIndex);\n if (startBufferIndex > -1) {\n const head = view[0];\n if (typeof head === 'string') {\n view[0] = head.slice(startBufferIndex);\n /* c8 ignore next 4 -- used to be used, no longer */\n } else {\n view.shift();\n }\n }\n if (endBufferIndex > 0) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view.push(chunks[endIndex].slice(0, endBufferIndex));\n }\n }\n return view;\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {ReadonlyArray} chunks\n * Chunks.\n * @param {boolean | undefined} [expandTabs=false]\n * Whether to expand tabs (default: `false`).\n * @returns {string}\n * Result.\n */\nfunction serializeChunks(chunks, expandTabs) {\n let index = -1;\n /** @type {Array} */\n const result = [];\n /** @type {boolean | undefined} */\n let atTab;\n while (++index < chunks.length) {\n const chunk = chunks[index];\n /** @type {string} */\n let value;\n if (typeof chunk === 'string') {\n value = chunk;\n } else {\n switch (chunk) {\n case -5:\n {\n value = \"\\r\";\n break;\n }\n case -4:\n {\n value = \"\\n\";\n break;\n }\n case -3:\n {\n value = \"\\r\" + \"\\n\";\n break;\n }\n case -2:\n {\n value = expandTabs ? \" \" : \"\\t\";\n break;\n }\n case -1:\n {\n if (!expandTabs && atTab) {\n continue;\n }\n value = \" \";\n break;\n }\n default:\n {\n // Currently only replacement character.\n value = String.fromCharCode(chunk);\n }\n }\n }\n atTab = chunk === -2;\n result.push(value);\n }\n return result.join('');\n}","/**\n * @import {\n * Create,\n * FullNormalizedExtension,\n * InitialConstruct,\n * ParseContext,\n * ParseOptions\n * } from 'micromark-util-types'\n */\n\nimport { combineExtensions } from 'micromark-util-combine-extensions';\nimport { content } from './initialize/content.js';\nimport { document } from './initialize/document.js';\nimport { flow } from './initialize/flow.js';\nimport { string, text } from './initialize/text.js';\nimport * as defaultConstructs from './constructs.js';\nimport { createTokenizer } from './create-tokenizer.js';\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n * Configuration (optional).\n * @returns {ParseContext}\n * Parser.\n */\nexport function parse(options) {\n const settings = options || {};\n const constructs = /** @type {FullNormalizedExtension} */\n combineExtensions([defaultConstructs, ...(settings.extensions || [])]);\n\n /** @type {ParseContext} */\n const parser = {\n constructs,\n content: create(content),\n defined: [],\n document: create(document),\n flow: create(flow),\n lazy: {},\n string: create(string),\n text: create(text)\n };\n return parser;\n\n /**\n * @param {InitialConstruct} initial\n * Construct to start with.\n * @returns {Create}\n * Create a tokenizer.\n */\n function create(initial) {\n return creator;\n /** @type {Create} */\n function creator(from) {\n return createTokenizer(parser, initial, from);\n }\n }\n}","/**\n * @import {Chunk, Code, Encoding, Value} from 'micromark-util-types'\n */\n\n/**\n * @callback Preprocessor\n * Preprocess a value.\n * @param {Value} value\n * Value.\n * @param {Encoding | null | undefined} [encoding]\n * Encoding when `value` is a typed array (optional).\n * @param {boolean | null | undefined} [end=false]\n * Whether this is the last chunk (default: `false`).\n * @returns {Array}\n * Chunks.\n */\n\nconst search = /[\\0\\t\\n\\r]/g;\n\n/**\n * @returns {Preprocessor}\n * Preprocess a value.\n */\nexport function preprocess() {\n let column = 1;\n let buffer = '';\n /** @type {boolean | undefined} */\n let start = true;\n /** @type {boolean | undefined} */\n let atCarriageReturn;\n return preprocessor;\n\n /** @type {Preprocessor} */\n // eslint-disable-next-line complexity\n function preprocessor(value, encoding, end) {\n value = buffer + (typeof value === 'string' ? value.toString() : new TextDecoder(encoding || undefined).decode(value));\n\n /** @type {Array} */\n const chunks = [];\n let startPosition = 0;\n buffer = '';\n if (start) {\n // To do: `markdown-rs` actually parses BOMs (byte order mark).\n if (value.charCodeAt(0) === 65279) {\n startPosition++;\n }\n start = undefined;\n }\n while (startPosition < value.length) {\n search.lastIndex = startPosition;\n const match = search.exec(value);\n const endPosition = match && match.index !== undefined ? match.index : value.length;\n const code = value.charCodeAt(endPosition);\n if (!match) {\n buffer = value.slice(startPosition);\n break;\n }\n if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n chunks.push(-3);\n atCarriageReturn = undefined;\n } else {\n if (atCarriageReturn) {\n chunks.push(-5);\n atCarriageReturn = undefined;\n }\n if (startPosition < endPosition) {\n chunks.push(value.slice(startPosition, endPosition));\n column += endPosition - startPosition;\n }\n switch (code) {\n case 0:\n {\n chunks.push(65533);\n column++;\n break;\n }\n case 9:\n {\n const next = Math.ceil(column / 4) * 4;\n chunks.push(-2);\n while (column++ < next) {\n chunks.push(-1);\n }\n break;\n }\n case 10:\n {\n chunks.push(-4);\n column = 1;\n break;\n }\n default:\n {\n atCarriageReturn = true;\n column = 1;\n }\n }\n }\n startPosition = endPosition + 1;\n }\n if (end) {\n if (atCarriageReturn) {\n chunks.push(-5);\n }\n if (buffer) {\n chunks.push(buffer);\n }\n chunks.push(null);\n }\n return chunks;\n }\n}","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n * Value to decode.\n * @param {number} base\n * Numeric base.\n * @returns {string}\n * Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n const code = Number.parseInt(value, base);\n if (\n // C0 except for HT, LF, FF, CR, space.\n code < 9 || code === 11 || code > 13 && code < 32 ||\n // Control character (DEL) of C0, and C1 controls.\n code > 126 && code < 160 ||\n // Lone high surrogates and low surrogates.\n code > 55_295 && code < 57_344 ||\n // Noncharacters.\n code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n // Out of range\n code > 1_114_111) {\n return \"\\uFFFD\";\n }\n return String.fromCodePoint(code);\n}","import { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nconst characterEscapeOrReference = /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n * Value to decode.\n * @returns {string}\n * Decoded value.\n */\nexport function decodeString(value) {\n return value.replace(characterEscapeOrReference, decode);\n}\n\n/**\n * @param {string} $0\n * Match.\n * @param {string} $1\n * Character escape.\n * @param {string} $2\n * Character reference.\n * @returns {string}\n * Decoded value\n */\nfunction decode($0, $1, $2) {\n if ($1) {\n // Escape.\n return $1;\n }\n\n // Reference.\n const head = $2.charCodeAt(0);\n if (head === 35) {\n const head = $2.charCodeAt(1);\n const hex = head === 120 || head === 88;\n return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10);\n }\n return decodeNamedCharacterReference($2) || $0;\n}","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n * Node, position, or point.\n * @returns {string}\n * Pretty printed positional info of a node (`string`).\n *\n * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n * or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n * column, `s` for `start`, and `e` for end.\n * An empty string (`''`) is returned if the given value is neither `node`,\n * `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if ('position' in value || 'type' in value) {\n return position(value.position)\n }\n\n // Position.\n if ('start' in value || 'end' in value) {\n return position(value)\n }\n\n // Point.\n if ('line' in value || 'column' in value) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @import {\n * Break,\n * Blockquote,\n * Code,\n * Definition,\n * Emphasis,\n * Heading,\n * Html,\n * Image,\n * InlineCode,\n * Link,\n * ListItem,\n * List,\n * Nodes,\n * Paragraph,\n * PhrasingContent,\n * ReferenceType,\n * Root,\n * Strong,\n * Text,\n * ThematicBreak\n * } from 'mdast'\n * @import {\n * Encoding,\n * Event,\n * Token,\n * Value\n * } from 'micromark-util-types'\n * @import {Point} from 'unist'\n * @import {\n * CompileContext,\n * CompileData,\n * Config,\n * Extension,\n * Handle,\n * OnEnterError,\n * Options\n * } from './types.js'\n */\n\nimport { toString } from 'mdast-util-to-string';\nimport { parse, postprocess, preprocess } from 'micromark';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nimport { decodeString } from 'micromark-util-decode-string';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { stringifyPosition } from 'unist-util-stringify-position';\nconst own = {}.hasOwnProperty;\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n * Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n * Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {Root}\n * mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n if (encoding && typeof encoding === 'object') {\n options = encoding;\n encoding = undefined;\n }\n return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n /** @type {Config} */\n const config = {\n afterExit: [],\n beforeEnter: [],\n transforms: [],\n canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n enter: {\n autolink: opener(link),\n autolinkProtocol: onenterdata,\n autolinkEmail: onenterdata,\n atxHeading: opener(heading),\n blockQuote: opener(blockQuote),\n characterEscape: onenterdata,\n characterReference: onenterdata,\n codeFenced: opener(codeFlow),\n codeFencedFenceInfo: buffer,\n codeFencedFenceMeta: buffer,\n codeIndented: opener(codeFlow, buffer),\n codeText: opener(codeText, buffer),\n codeTextData: onenterdata,\n data: onenterdata,\n codeFlowValue: onenterdata,\n definition: opener(definition),\n definitionDestinationString: buffer,\n definitionLabelString: buffer,\n definitionTitleString: buffer,\n emphasis: opener(emphasis),\n hardBreakEscape: opener(hardBreak),\n hardBreakTrailing: opener(hardBreak),\n htmlFlow: opener(html, buffer),\n htmlFlowData: onenterdata,\n htmlText: opener(html, buffer),\n htmlTextData: onenterdata,\n image: opener(image),\n label: buffer,\n link: opener(link),\n listItem: opener(listItem),\n listItemValue: onenterlistitemvalue,\n listOrdered: opener(list, onenterlistordered),\n listUnordered: opener(list),\n paragraph: opener(paragraph),\n reference: onenterreference,\n referenceString: buffer,\n resourceDestinationString: buffer,\n resourceTitleString: buffer,\n setextHeading: opener(heading),\n strong: opener(strong),\n thematicBreak: opener(thematicBreak)\n },\n exit: {\n atxHeading: closer(),\n atxHeadingSequence: onexitatxheadingsequence,\n autolink: closer(),\n autolinkEmail: onexitautolinkemail,\n autolinkProtocol: onexitautolinkprotocol,\n blockQuote: closer(),\n characterEscapeValue: onexitdata,\n characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n characterReferenceValue: onexitcharacterreferencevalue,\n characterReference: onexitcharacterreference,\n codeFenced: closer(onexitcodefenced),\n codeFencedFence: onexitcodefencedfence,\n codeFencedFenceInfo: onexitcodefencedfenceinfo,\n codeFencedFenceMeta: onexitcodefencedfencemeta,\n codeFlowValue: onexitdata,\n codeIndented: closer(onexitcodeindented),\n codeText: closer(onexitcodetext),\n codeTextData: onexitdata,\n data: onexitdata,\n definition: closer(),\n definitionDestinationString: onexitdefinitiondestinationstring,\n definitionLabelString: onexitdefinitionlabelstring,\n definitionTitleString: onexitdefinitiontitlestring,\n emphasis: closer(),\n hardBreakEscape: closer(onexithardbreak),\n hardBreakTrailing: closer(onexithardbreak),\n htmlFlow: closer(onexithtmlflow),\n htmlFlowData: onexitdata,\n htmlText: closer(onexithtmltext),\n htmlTextData: onexitdata,\n image: closer(onexitimage),\n label: onexitlabel,\n labelText: onexitlabeltext,\n lineEnding: onexitlineending,\n link: closer(onexitlink),\n listItem: closer(),\n listOrdered: closer(),\n listUnordered: closer(),\n paragraph: closer(),\n referenceString: onexitreferencestring,\n resourceDestinationString: onexitresourcedestinationstring,\n resourceTitleString: onexitresourcetitlestring,\n resource: onexitresource,\n setextHeading: closer(onexitsetextheading),\n setextHeadingLineSequence: onexitsetextheadinglinesequence,\n setextHeadingText: onexitsetextheadingtext,\n strong: closer(),\n thematicBreak: closer()\n }\n };\n configure(config, (options || {}).mdastExtensions || []);\n\n /** @type {CompileData} */\n const data = {};\n return compile;\n\n /**\n * Turn micromark events into an mdast tree.\n *\n * @param {Array} events\n * Events.\n * @returns {Root}\n * mdast tree.\n */\n function compile(events) {\n /** @type {Root} */\n let tree = {\n type: 'root',\n children: [],\n position: undefined\n };\n /** @type {Omit} */\n const context = {\n stack: [tree],\n tokenStack: [],\n config,\n enter,\n exit,\n buffer,\n resume,\n data\n };\n /** @type {Array} */\n const listStack = [];\n /** @type {Array} */\n const prepared = [];\n let index = -1;\n\n // Add `listItem` tokens and infer spread.\n // Each list is prepared while it is last in `prepared`, so nothing shifts.\n while (++index < events.length) {\n prepared.push(events[index]);\n if (events[index][1].type === \"listOrdered\" || events[index][1].type === \"listUnordered\") {\n if (events[index][0] === 'enter') {\n listStack.push(prepared.length - 1);\n } else {\n const tail = listStack.pop();\n prepareList(prepared, tail);\n }\n }\n }\n events = prepared;\n index = -1;\n while (++index < events.length) {\n const handler = config[events[index][0]];\n if (events[index][0] === 'enter' && config.beforeEnter.length > 0) {\n callListeners(config.beforeEnter, {\n ...context,\n sliceSerialize: events[index][2].sliceSerialize\n }, events[index][1]);\n }\n if (own.call(handler, events[index][1].type)) {\n // Note: spread first, V8 has optimizations for object shape cloning.\n handler[events[index][1].type].call({\n ...context,\n sliceSerialize: events[index][2].sliceSerialize\n }, events[index][1]);\n }\n if (events[index][0] === 'exit' && config.afterExit.length > 0) {\n callListeners(config.afterExit, {\n ...context,\n sliceSerialize: events[index][2].sliceSerialize\n }, events[index][1]);\n }\n }\n\n // Handle tokens still being open.\n if (context.tokenStack.length > 0) {\n const tail = context.tokenStack[context.tokenStack.length - 1];\n const handler = tail[1] || defaultOnError;\n handler.call(context, undefined, tail[0]);\n }\n\n // Figure out `root` position.\n tree.position = {\n start: point(events.length > 0 ? events[0][1].start : {\n line: 1,\n column: 1,\n offset: 0\n }),\n end: point(events.length > 0 ? events[events.length - 2][1].end : {\n line: 1,\n column: 1,\n offset: 0\n })\n };\n\n // Call transforms.\n index = -1;\n while (++index < config.transforms.length) {\n tree = config.transforms[index](tree) || tree;\n }\n return tree;\n }\n\n /**\n * @param {Array} listeners\n * Listeners.\n * @param {CompileContext} context\n * Context.\n * @param {Token} token\n * Token.\n * @returns {undefined}\n * Nothing.\n */\n function callListeners(listeners, context, token) {\n let index = -1;\n while (++index < listeners.length) {\n listeners[index].call(context, token);\n }\n }\n\n /**\n * @param {Array} events\n * Events, ending with the list to prepare.\n * @param {number} start\n * Index of the list enter.\n * @returns {undefined}\n */\n function prepareList(events, start) {\n const end = events.length - 1;\n let index = start - 1;\n let containerBalance = -1;\n let listSpread = false;\n /** @type {Token | undefined} */\n let listItem;\n /** @type {number | undefined} */\n let lineIndex;\n /** @type {number | undefined} */\n let firstBlankLineIndex;\n /** @type {boolean | undefined} */\n let atMarker;\n /**\n * `listItem` events to insert before the event at `at`, in walk order.\n * Merged in after the walk, as inserting while walking would shift the\n * rest of the list once per item.\n * @type {Array<{at: number, event: Event}>}\n */\n const insertions = [];\n while (++index <= end) {\n const event = events[index];\n switch (event[1].type) {\n case \"listUnordered\":\n case \"listOrdered\":\n case \"blockQuote\":\n {\n if (event[0] === 'enter') {\n containerBalance++;\n } else {\n containerBalance--;\n }\n atMarker = undefined;\n break;\n }\n case \"lineEndingBlank\":\n {\n if (event[0] === 'enter') {\n if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n firstBlankLineIndex = index;\n }\n atMarker = undefined;\n }\n break;\n }\n case \"linePrefix\":\n case \"listItemValue\":\n case \"listItemMarker\":\n case \"listItemPrefix\":\n case \"listItemPrefixWhitespace\":\n {\n // Empty.\n\n break;\n }\n default:\n {\n atMarker = undefined;\n }\n }\n if (!containerBalance && event[0] === 'enter' && event[1].type === \"listItemPrefix\" || containerBalance === -1 && event[0] === 'exit' && (event[1].type === \"listUnordered\" || event[1].type === \"listOrdered\")) {\n if (listItem) {\n let tailIndex = index;\n lineIndex = undefined;\n while (tailIndex--) {\n const tailEvent = events[tailIndex];\n if (tailEvent[1].type === \"lineEnding\" || tailEvent[1].type === \"lineEndingBlank\") {\n if (tailEvent[0] === 'exit') continue;\n if (lineIndex) {\n events[lineIndex][1].type = \"lineEndingBlank\";\n listSpread = true;\n }\n tailEvent[1].type = \"lineEnding\";\n lineIndex = tailIndex;\n } else if (tailEvent[1].type === \"linePrefix\" || tailEvent[1].type === \"blockQuotePrefix\" || tailEvent[1].type === \"blockQuotePrefixWhitespace\" || tailEvent[1].type === \"blockQuoteMarker\" || tailEvent[1].type === \"listItemIndent\") {\n // Empty\n } else {\n break;\n }\n }\n if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n listItem._spread = true;\n }\n\n // Fix position.\n listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\n insertions.push({\n at: lineIndex || index,\n event: ['exit', listItem, event[2]]\n });\n }\n\n // Create a new list item.\n if (event[1].type === \"listItemPrefix\") {\n /** @type {Token} */\n const item = {\n type: 'listItem',\n _spread: false,\n start: Object.assign({}, event[1].start),\n // @ts-expect-error: we’ll add `end` in a second.\n end: undefined\n };\n listItem = item;\n insertions.push({\n at: index,\n event: ['enter', item, event[2]]\n });\n firstBlankLineIndex = undefined;\n atMarker = true;\n }\n }\n }\n\n // The list is at the end of `events`: take it off, then push it back with\n // the insertions merged in.\n // Nothing follows the list, so nothing shifts.\n const listEvents = events.splice(start);\n let insertion = 0;\n index = -1;\n while (++index < listEvents.length) {\n while (insertion < insertions.length && insertions[insertion].at === start + index) {\n events.push(insertions[insertion++].event);\n }\n events.push(listEvents[index]);\n }\n events[start][1]._spread = listSpread;\n }\n\n /**\n * Create an opener handle.\n *\n * @param {(token: Token) => Nodes} create\n * Create a node.\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function opener(create, and) {\n return open;\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function open(token) {\n enter.call(this, create(token), token);\n if (and) and.call(this, token);\n }\n }\n\n /**\n * @type {CompileContext['buffer']}\n */\n function buffer() {\n this.stack.push({\n type: 'fragment',\n children: []\n });\n }\n\n /**\n * @type {CompileContext['enter']}\n */\n function enter(node, token, errorHandler) {\n const parent = this.stack[this.stack.length - 1];\n /** @type {Array} */\n const siblings = parent.children;\n siblings.push(node);\n this.stack.push(node);\n this.tokenStack.push([token, errorHandler || undefined]);\n node.position = {\n start: point(token.start),\n // @ts-expect-error: `end` will be patched later.\n end: undefined\n };\n }\n\n /**\n * Create a closer handle.\n *\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function closer(and) {\n return close;\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function close(token) {\n if (and) and.call(this, token);\n exit.call(this, token);\n }\n }\n\n /**\n * @type {CompileContext['exit']}\n */\n function exit(token, onExitError) {\n const node = this.stack.pop();\n const open = this.tokenStack.pop();\n if (!open) {\n throw new Error('Cannot close `' + token.type + '` (' + stringifyPosition({\n start: token.start,\n end: token.end\n }) + '): it’s not open');\n }\n if (open[0].type !== token.type) {\n if (onExitError) {\n onExitError.call(this, token, open[0]);\n } else {\n const handler = open[1] || defaultOnError;\n handler.call(this, token, open[0]);\n }\n }\n node.position.end = point(token.end);\n }\n\n /**\n * @type {CompileContext['resume']}\n */\n function resume() {\n return toString(this.stack.pop());\n }\n\n //\n // Handlers.\n //\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistordered() {\n this.data.expectingFirstListItemValue = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistitemvalue(token) {\n if (this.data.expectingFirstListItemValue) {\n const ancestor = this.stack[this.stack.length - 2];\n ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n this.data.expectingFirstListItemValue = undefined;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfenceinfo() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.lang = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfencemeta() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.meta = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfence() {\n // Exit if this is the closing fence.\n if (this.data.flowCodeInside) return;\n this.buffer();\n this.data.flowCodeInside = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefenced() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '');\n this.data.flowCodeInside = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodeindented() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data.replace(/(\\r?\\n|\\r)$/g, '');\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitionlabelstring(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.label = label;\n node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiontitlestring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.title = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiondestinationstring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.url = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitatxheadingsequence(token) {\n const node = this.stack[this.stack.length - 1];\n if (!node.depth) {\n const depth = this.sliceSerialize(token).length;\n node.depth = depth;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadingtext() {\n this.data.setextHeadingSlurpLineEnding = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadinglinesequence(token) {\n const node = this.stack[this.stack.length - 1];\n node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheading() {\n this.data.setextHeadingSlurpLineEnding = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterdata(token) {\n const node = this.stack[this.stack.length - 1];\n /** @type {Array} */\n const siblings = node.children;\n let tail = siblings[siblings.length - 1];\n if (!tail || tail.type !== 'text') {\n // Add a new text node.\n tail = text();\n tail.position = {\n start: point(token.start),\n // @ts-expect-error: we’ll add `end` later.\n end: undefined\n };\n siblings.push(tail);\n }\n this.stack.push(tail);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitdata(token) {\n const tail = this.stack.pop();\n tail.value += this.sliceSerialize(token);\n tail.position.end = point(token.end);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlineending(token) {\n const context = this.stack[this.stack.length - 1];\n // If we’re at a hard break, include the line ending in there.\n if (this.data.atHardBreak) {\n const tail = context.children[context.children.length - 1];\n tail.position.end = point(token.end);\n this.data.atHardBreak = undefined;\n return;\n }\n if (!this.data.setextHeadingSlurpLineEnding && config.canContainEols.includes(context.type)) {\n onenterdata.call(this, token);\n onexitdata.call(this, token);\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithardbreak() {\n this.data.atHardBreak = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmlflow() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmltext() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcodetext() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlink() {\n const node = this.stack[this.stack.length - 1];\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut';\n node.type += 'Reference';\n // @ts-expect-error: mutate.\n node.referenceType = referenceType;\n // @ts-expect-error: mutate.\n delete node.url;\n delete node.title;\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier;\n // @ts-expect-error: mutate.\n delete node.label;\n }\n this.data.referenceType = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitimage() {\n const node = this.stack[this.stack.length - 1];\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut';\n node.type += 'Reference';\n // @ts-expect-error: mutate.\n node.referenceType = referenceType;\n // @ts-expect-error: mutate.\n delete node.url;\n delete node.title;\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier;\n // @ts-expect-error: mutate.\n delete node.label;\n }\n this.data.referenceType = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabeltext(token) {\n const string = this.sliceSerialize(token);\n const ancestor = this.stack[this.stack.length - 2];\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n ancestor.label = decodeString(string);\n // @ts-expect-error: same as above.\n ancestor.identifier = normalizeIdentifier(string).toLowerCase();\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabel() {\n const fragment = this.stack[this.stack.length - 1];\n const value = this.resume();\n const node = this.stack[this.stack.length - 1];\n // Assume a reference.\n this.data.inReference = true;\n if (node.type === 'link') {\n /** @type {Array} */\n const children = fragment.children;\n node.children = children;\n } else {\n node.alt = value;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcedestinationstring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.url = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcetitlestring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.title = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresource() {\n this.data.inReference = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterreference() {\n this.data.referenceType = 'collapsed';\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitreferencestring(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n node.label = label;\n // @ts-expect-error: same as above.\n node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n this.data.referenceType = 'full';\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcharacterreferencemarker(token) {\n this.data.characterReferenceType = token.type;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreferencevalue(token) {\n const data = this.sliceSerialize(token);\n const type = this.data.characterReferenceType;\n /** @type {string} */\n let value;\n if (type) {\n value = decodeNumericCharacterReference(data, type === \"characterReferenceMarkerNumeric\" ? 10 : 16);\n this.data.characterReferenceType = undefined;\n } else {\n const result = decodeNamedCharacterReference(data);\n value = result;\n }\n const tail = this.stack[this.stack.length - 1];\n tail.value += value;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreference(token) {\n const tail = this.stack.pop();\n tail.position.end = point(token.end);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkprotocol(token) {\n onexitdata.call(this, token);\n const node = this.stack[this.stack.length - 1];\n node.url = this.sliceSerialize(token);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkemail(token) {\n onexitdata.call(this, token);\n const node = this.stack[this.stack.length - 1];\n node.url = 'mailto:' + this.sliceSerialize(token);\n }\n\n //\n // Creaters.\n //\n\n // Each node factory pre-declares `position` as undefined as the trailing\n // property. enter() patches it to a real value, but the property already\n // exists, so V8 sees a single hidden class for each node type from\n // construction through the rest of the pipeline. Without the pre-declare,\n // each node took a hidden-class transition when enter() added position.\n\n /** @returns {Blockquote} */\n function blockQuote() {\n return {\n type: 'blockquote',\n children: [],\n position: undefined\n };\n }\n\n /** @returns {Code} */\n function codeFlow() {\n return {\n type: 'code',\n lang: null,\n meta: null,\n value: '',\n position: undefined\n };\n }\n\n /** @returns {InlineCode} */\n function codeText() {\n return {\n type: 'inlineCode',\n value: '',\n position: undefined\n };\n }\n\n /** @returns {Definition} */\n function definition() {\n return {\n type: 'definition',\n identifier: '',\n label: null,\n title: null,\n url: '',\n position: undefined\n };\n }\n\n /** @returns {Emphasis} */\n function emphasis() {\n return {\n type: 'emphasis',\n children: [],\n position: undefined\n };\n }\n\n /** @returns {Heading} */\n function heading() {\n return {\n type: 'heading',\n // @ts-expect-error `depth` will be set later.\n depth: 0,\n children: [],\n position: undefined\n };\n }\n\n /** @returns {Break} */\n function hardBreak() {\n return {\n type: 'break',\n position: undefined\n };\n }\n\n /** @returns {Html} */\n function html() {\n return {\n type: 'html',\n value: '',\n position: undefined\n };\n }\n\n /** @returns {Image} */\n function image() {\n return {\n type: 'image',\n title: null,\n url: '',\n alt: null,\n position: undefined\n };\n }\n\n /** @returns {Link} */\n function link() {\n return {\n type: 'link',\n title: null,\n url: '',\n children: [],\n position: undefined\n };\n }\n\n /**\n * @param {Token} token\n * @returns {List}\n */\n function list(token) {\n return {\n type: 'list',\n ordered: token.type === 'listOrdered',\n start: null,\n spread: token._spread,\n children: [],\n position: undefined\n };\n }\n\n /**\n * @param {Token} token\n * @returns {ListItem}\n */\n function listItem(token) {\n return {\n type: 'listItem',\n spread: token._spread,\n checked: null,\n children: [],\n position: undefined\n };\n }\n\n /** @returns {Paragraph} */\n function paragraph() {\n return {\n type: 'paragraph',\n children: [],\n position: undefined\n };\n }\n\n /** @returns {Strong} */\n function strong() {\n return {\n type: 'strong',\n children: [],\n position: undefined\n };\n }\n\n /** @returns {Text} */\n function text() {\n return {\n type: 'text',\n value: '',\n position: undefined\n };\n }\n\n /** @returns {ThematicBreak} */\n function thematicBreak() {\n return {\n type: 'thematicBreak',\n position: undefined\n };\n }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n * Point-like value.\n * @returns {Point}\n * unist point.\n */\nfunction point(d) {\n return {\n line: d.line,\n column: d.column,\n offset: d.offset\n };\n}\n\n/**\n * @param {Config} combined\n * @param {Array | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n let index = -1;\n while (++index < extensions.length) {\n const value = extensions[index];\n if (Array.isArray(value)) {\n configure(combined, value);\n } else {\n extension(combined, value);\n }\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n /** @type {keyof Extension} */\n let key;\n for (key in extension) {\n if (own.call(extension, key)) {\n switch (key) {\n case 'canContainEols':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(...right);\n }\n break;\n }\n case 'transforms':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(...right);\n }\n break;\n }\n case 'afterExit':\n case 'beforeEnter':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(right);\n }\n break;\n }\n case 'enter':\n case 'exit':\n {\n const right = extension[key];\n if (right) {\n Object.assign(combined[key], right);\n }\n break;\n }\n // No default\n }\n }\n }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n if (left) {\n throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n start: left.start,\n end: left.end\n }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is open');\n }\n throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is still open');\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\nimport { subtokenize } from 'micromark-util-subtokenize';\n\n/**\n * @param {Array} events\n * Events.\n * @returns {Array}\n * Events.\n */\nexport function postprocess(events) {\n while (!subtokenize(events)) {\n // Empty\n }\n return events;\n}","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser} Parser\n * @typedef {import('unified').Processor} Processor\n */\n\n/**\n * @typedef {Omit} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkParse(options) {\n /** @type {Processor} */\n // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n const self = this\n\n self.parser = parser\n\n /**\n * @type {Parser}\n */\n function parser(doc) {\n return fromMarkdown(doc, {\n ...self.data('settings'),\n ...options,\n // Note: these options are not in the readme.\n // The goal is for them to be set by plugins on `data` instead of being\n // passed by users.\n extensions: self.data('micromarkExtensions') || [],\n mdastExtensions: self.data('fromMarkdownExtensions') || []\n })\n }\n}\n","import { asciiAlphanumeric } from 'micromark-util-character';\nimport { encode } from 'micromark-util-encode';\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | null | undefined} url\n * URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n * Allowed protocols.\n * @returns {string}\n * Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n const value = encode(normalizeUri(url || ''));\n if (!protocol) {\n return value;\n }\n const colon = value.indexOf(':');\n const questionMark = value.indexOf('?');\n const numberSign = value.indexOf('#');\n const slash = value.indexOf('/');\n if (\n // If there is no protocol, it’s relative.\n colon < 0 ||\n // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n slash > -1 && colon > slash || questionMark > -1 && colon > questionMark || numberSign > -1 && colon > numberSign ||\n // It is a protocol, it should be allowed.\n protocol.test(value.slice(0, colon))) {\n return value;\n }\n return '';\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n * URI to normalize.\n * @returns {string}\n * Normalized URI.\n */\nexport function normalizeUri(value) {\n /** @type {Array} */\n const result = [];\n let index = -1;\n let start = 0;\n let skip = 0;\n while (++index < value.length) {\n const code = value.charCodeAt(index);\n /** @type {string} */\n let replace = '';\n\n // A correct percent encoded value.\n if (code === 37 && asciiAlphanumeric(value.charCodeAt(index + 1)) && asciiAlphanumeric(value.charCodeAt(index + 2))) {\n skip = 2;\n }\n // ASCII.\n else if (code < 128) {\n if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n replace = String.fromCharCode(code);\n }\n }\n // Astral.\n else if (code > 55_295 && code < 57_344) {\n const next = value.charCodeAt(index + 1);\n\n // A correct surrogate pair.\n if (code < 56_320 && next > 56_319 && next < 57_344) {\n replace = String.fromCharCode(code, next);\n skip = 1;\n }\n // Lone surrogate.\n else {\n replace = \"\\uFFFD\";\n }\n }\n // Unicode.\n else {\n replace = String.fromCharCode(code);\n }\n if (replace) {\n result.push(value.slice(start, index), encodeURIComponent(replace));\n start = index + skip + 1;\n replace = '';\n }\n if (skip) {\n index += skip;\n skip = 0;\n }\n }\n return result.join('') + value.slice(start);\n}","/**\n * @import {ElementContent, Element} from 'hast'\n * @import {State} from './state.js'\n */\n\n/**\n * @callback FootnoteBackContentTemplate\n * Generate content for the backreference dynamically.\n *\n * For the following markdown:\n *\n * ```markdown\n * Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n * [^remark]: things about remark\n * [^micromark]: things about micromark\n * ```\n *\n * This function will be called with:\n *\n * * `0` and `0` for the backreference from `things about micromark` to\n * `alpha`, as it is the first used definition, and the first call to it\n * * `0` and `1` for the backreference from `things about micromark` to\n * `bravo`, as it is the first used definition, and the second call to it\n * * `1` and `0` for the backreference from `things about remark` to\n * `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {Array | ElementContent | string}\n * Content for the backreference when linking back from definitions to their\n * reference.\n *\n * @callback FootnoteBackLabelTemplate\n * Generate a back label dynamically.\n *\n * For the following markdown:\n *\n * ```markdown\n * Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n * [^remark]: things about remark\n * [^micromark]: things about micromark\n * ```\n *\n * This function will be called with:\n *\n * * `0` and `0` for the backreference from `things about micromark` to\n * `alpha`, as it is the first used definition, and the first call to it\n * * `0` and `1` for the backreference from `things about micromark` to\n * `bravo`, as it is the first used definition, and the second call to it\n * * `1` and `0` for the backreference from `things about remark` to\n * `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {string}\n * Back label to use when linking back from definitions to their reference.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate the default content that GitHub uses on backreferences.\n *\n * @param {number} _\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {Array}\n * Content.\n */\nexport function defaultFootnoteBackContent(_, rereferenceIndex) {\n /** @type {Array} */\n const result = [{type: 'text', value: '↩'}]\n\n if (rereferenceIndex > 1) {\n result.push({\n type: 'element',\n tagName: 'sup',\n properties: {},\n children: [{type: 'text', value: String(rereferenceIndex)}]\n })\n }\n\n return result\n}\n\n/**\n * Generate the default label that GitHub uses on backreferences.\n *\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {string}\n * Label.\n */\nexport function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n return (\n 'Back to reference ' +\n (referenceIndex + 1) +\n (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n )\n}\n\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n * Info passed around.\n * @returns {Element | undefined}\n * `section` element or `undefined`.\n */\n// eslint-disable-next-line complexity\nexport function footer(state) {\n const clobberPrefix =\n typeof state.options.clobberPrefix === 'string'\n ? state.options.clobberPrefix\n : 'user-content-'\n const footnoteBackContent =\n state.options.footnoteBackContent || defaultFootnoteBackContent\n const footnoteBackLabel =\n state.options.footnoteBackLabel || defaultFootnoteBackLabel\n const footnoteLabel = state.options.footnoteLabel || 'Footnotes'\n const footnoteLabelTagName = state.options.footnoteLabelTagName || 'h2'\n const footnoteLabelProperties = state.options.footnoteLabelProperties || {\n className: ['sr-only']\n }\n /** @type {Array} */\n const listItems = []\n let referenceIndex = -1\n\n while (++referenceIndex < state.footnoteOrder.length) {\n const definition = state.footnoteById.get(\n state.footnoteOrder[referenceIndex]\n )\n\n if (!definition) {\n continue\n }\n\n const content = state.all(definition)\n const id = String(definition.identifier).toUpperCase()\n const safeId = normalizeUri(id.toLowerCase())\n let rereferenceIndex = 0\n /** @type {Array} */\n const backReferences = []\n const counts = state.footnoteCounts.get(id)\n\n // eslint-disable-next-line no-unmodified-loop-condition\n while (counts !== undefined && ++rereferenceIndex <= counts) {\n if (backReferences.length > 0) {\n backReferences.push({type: 'text', value: ' '})\n }\n\n let children =\n typeof footnoteBackContent === 'string'\n ? footnoteBackContent\n : footnoteBackContent(referenceIndex, rereferenceIndex)\n\n if (typeof children === 'string') {\n children = {type: 'text', value: children}\n }\n\n backReferences.push({\n type: 'element',\n tagName: 'a',\n properties: {\n href:\n '#' +\n clobberPrefix +\n 'fnref-' +\n safeId +\n (rereferenceIndex > 1 ? '-' + rereferenceIndex : ''),\n dataFootnoteBackref: '',\n ariaLabel:\n typeof footnoteBackLabel === 'string'\n ? footnoteBackLabel\n : footnoteBackLabel(referenceIndex, rereferenceIndex),\n className: ['data-footnote-backref']\n },\n children: Array.isArray(children) ? children : [children]\n })\n }\n\n const tail = content[content.length - 1]\n\n if (tail && tail.type === 'element' && tail.tagName === 'p') {\n const tailTail = tail.children[tail.children.length - 1]\n if (tailTail && tailTail.type === 'text') {\n tailTail.value += ' '\n } else {\n tail.children.push({type: 'text', value: ' '})\n }\n\n tail.children.push(...backReferences)\n } else {\n content.push(...backReferences)\n }\n\n /** @type {Element} */\n const listItem = {\n type: 'element',\n tagName: 'li',\n properties: {id: clobberPrefix + 'fn-' + safeId},\n children: state.wrap(content, true)\n }\n\n state.patch(definition, listItem)\n\n listItems.push(listItem)\n }\n\n if (listItems.length === 0) {\n return\n }\n\n return {\n type: 'element',\n tagName: 'section',\n properties: {dataFootnotes: true, className: ['footnotes']},\n children: [\n {\n type: 'element',\n tagName: footnoteLabelTagName,\n properties: {\n ...structuredClone(footnoteLabelProperties),\n id: 'footnote-label'\n },\n children: [{type: 'text', value: footnoteLabel}]\n },\n {type: 'text', value: '\\n'},\n {\n type: 'element',\n tagName: 'ol',\n properties: {},\n children: state.wrap(listItems, true)\n },\n {type: 'text', value: '\\n'}\n ]\n }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Get the ending point of `node`.\n *\n * @param node\n * Node.\n * @returns\n * Point.\n */\nexport const pointEnd = point('end')\n\n/**\n * Get the starting point of `node`.\n *\n * @param node\n * Node.\n * @returns\n * Point.\n */\nexport const pointStart = point('start')\n\n/**\n * Get the positional info of `node`.\n *\n * @param {'end' | 'start'} type\n * Side.\n * @returns\n * Getter.\n */\nfunction point(type) {\n return point\n\n /**\n * Get the point info of `node` at a bound side.\n *\n * @param {Node | NodeLike | null | undefined} [node]\n * @returns {Point | undefined}\n */\n function point(node) {\n const point = (node && node.position && node.position[type]) || {}\n\n if (\n typeof point.line === 'number' &&\n point.line > 0 &&\n typeof point.column === 'number' &&\n point.column > 0\n ) {\n return {\n line: point.line,\n column: point.column,\n offset:\n typeof point.offset === 'number' && point.offset > -1\n ? point.offset\n : undefined\n }\n }\n }\n}\n\n/**\n * Get the positional info of `node`.\n *\n * @param {Node | NodeLike | null | undefined} [node]\n * Node.\n * @returns {Position | undefined}\n * Position.\n */\nexport function position(node) {\n const start = pointStart(node)\n const end = pointEnd(node)\n\n if (start && end) {\n return {start, end}\n }\n}\n","/**\n * @import {ElementContent} from 'hast'\n * @import {Reference, Nodes} from 'mdast'\n * @import {State} from './state.js'\n */\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n * Info passed around.\n * @param {Extract} node\n * Reference node (image, link).\n * @returns {Array}\n * hast content.\n */\nexport function revert(state, node) {\n const subtype = node.referenceType\n let suffix = ']'\n\n if (subtype === 'collapsed') {\n suffix += '[]'\n } else if (subtype === 'full') {\n suffix += '[' + (node.label || node.identifier) + ']'\n }\n\n if (node.type === 'imageReference') {\n return [{type: 'text', value: '![' + node.alt + suffix}]\n }\n\n const contents = state.all(node)\n const head = contents[0]\n\n if (head && head.type === 'text') {\n head.value = '[' + head.value\n } else {\n contents.unshift({type: 'text', value: '['})\n }\n\n const tail = contents[contents.length - 1]\n\n if (tail && tail.type === 'text') {\n tail.value += suffix\n } else {\n contents.push({type: 'text', value: suffix})\n }\n\n return contents\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {ListItem, Parents} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {ListItem} node\n * mdast node.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @returns {Element}\n * hast node.\n */\nexport function listItem(state, node, parent) {\n const results = state.all(node)\n const loose = parent ? listLoose(parent) : listItemLoose(node)\n /** @type {Properties} */\n const properties = {}\n /** @type {Array} */\n const children = []\n\n if (typeof node.checked === 'boolean') {\n const head = results[0]\n /** @type {Element} */\n let paragraph\n\n if (head && head.type === 'element' && head.tagName === 'p') {\n paragraph = head\n } else {\n paragraph = {type: 'element', tagName: 'p', properties: {}, children: []}\n results.unshift(paragraph)\n }\n\n if (paragraph.children.length > 0) {\n paragraph.children.unshift({type: 'text', value: ' '})\n }\n\n paragraph.children.unshift({\n type: 'element',\n tagName: 'input',\n properties: {type: 'checkbox', checked: node.checked, disabled: true},\n children: []\n })\n\n // According to github-markdown-css, this class hides bullet.\n // See: .\n properties.className = ['task-list-item']\n }\n\n let index = -1\n\n while (++index < results.length) {\n const child = results[index]\n\n // Add eols before nodes, except if this is a loose, first paragraph.\n if (\n loose ||\n index !== 0 ||\n child.type !== 'element' ||\n child.tagName !== 'p'\n ) {\n children.push({type: 'text', value: '\\n'})\n }\n\n if (child.type === 'element' && child.tagName === 'p' && !loose) {\n children.push(...child.children)\n } else {\n children.push(child)\n }\n }\n\n const tail = results[results.length - 1]\n\n // Add a final eol.\n if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n children.push({type: 'text', value: '\\n'})\n }\n\n /** @type {Element} */\n const result = {type: 'element', tagName: 'li', properties, children}\n state.patch(node, result)\n return state.applyData(node, result)\n}\n\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\nfunction listLoose(node) {\n let loose = false\n if (node.type === 'list') {\n loose = node.spread || false\n const children = node.children\n let index = -1\n\n while (!loose && ++index < children.length) {\n loose = listItemLoose(children[index])\n }\n }\n\n return loose\n}\n\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\nfunction listItemLoose(node) {\n const spread = node.spread\n\n return spread === null || spread === undefined\n ? node.children.length > 1\n : spread\n}\n","const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n * Value to trim.\n * @returns {string}\n * Trimmed value.\n */\nexport function trimLines(value) {\n const source = String(value)\n const search = /\\r?\\n|\\r/g\n let match = search.exec(source)\n let last = 0\n /** @type {Array} */\n const lines = []\n\n while (match) {\n lines.push(\n trimLine(source.slice(last, match.index), last > 0, true),\n match[0]\n )\n\n last = match.index + match[0].length\n match = search.exec(source)\n }\n\n lines.push(trimLine(source.slice(last), last > 0, false))\n\n return lines.join('')\n}\n\n/**\n * @param {string} value\n * Line to trim.\n * @param {boolean} start\n * Whether to trim the start of the line.\n * @param {boolean} end\n * Whether to trim the end of the line.\n * @returns {string}\n * Trimmed line.\n */\nfunction trimLine(value, start, end) {\n let startIndex = 0\n let endIndex = value.length\n\n if (start) {\n let code = value.codePointAt(startIndex)\n\n while (code === tab || code === space) {\n startIndex++\n code = value.codePointAt(startIndex)\n }\n }\n\n if (end) {\n let code = value.codePointAt(endIndex - 1)\n\n while (code === tab || code === space) {\n endIndex--\n code = value.codePointAt(endIndex - 1)\n }\n }\n\n return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n","/**\n * @import {Handlers} from '../state.js'\n */\n\nimport {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {strikethrough} from './delete.js'\nimport {emphasis} from './emphasis.js'\nimport {footnoteReference} from './footnote-reference.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {imageReference} from './image-reference.js'\nimport {image} from './image.js'\nimport {inlineCode} from './inline-code.js'\nimport {linkReference} from './link-reference.js'\nimport {link} from './link.js'\nimport {listItem} from './list-item.js'\nimport {list} from './list.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {table} from './table.js'\nimport {tableRow} from './table-row.js'\nimport {tableCell} from './table-cell.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default handlers for nodes.\n *\n * @satisfies {Handlers}\n */\nexport const handlers = {\n blockquote,\n break: hardBreak,\n code,\n delete: strikethrough,\n emphasis,\n footnoteReference,\n heading,\n html,\n imageReference,\n image,\n inlineCode,\n linkReference,\n link,\n listItem,\n list,\n paragraph,\n // @ts-expect-error: root is different, but hard to type.\n root,\n strong,\n table,\n tableCell,\n tableRow,\n text,\n thematicBreak,\n toml: ignore,\n yaml: ignore,\n definition: ignore,\n footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n return undefined\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Blockquote} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Blockquote} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function blockquote(state, node) {\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'blockquote',\n properties: {},\n children: state.wrap(state.all(node), true)\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @import {Element, Text} from 'hast'\n * @import {Break} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Break} node\n * mdast node.\n * @returns {Array}\n * hast element content.\n */\nexport function hardBreak(state, node) {\n /** @type {Element} */\n const result = {type: 'element', tagName: 'br', properties: {}, children: []}\n state.patch(node, result)\n return [state.applyData(node, result), {type: 'text', value: '\\n'}]\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Code} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Code} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function code(state, node) {\n const value = node.value ? node.value + '\\n' : ''\n /** @type {Properties} */\n const properties = {}\n // Someone can write `js python ruby`.\n const language = node.lang ? node.lang.split(/\\s+/) : []\n\n // GH/CM still drop the non-first languages.\n if (language.length > 0) {\n properties.className = ['language-' + language[0]]\n }\n\n // Create ``.\n /** @type {Element} */\n let result = {\n type: 'element',\n tagName: 'code',\n properties,\n children: [{type: 'text', value}]\n }\n\n if (node.meta) {\n result.data = {meta: node.meta}\n }\n\n state.patch(node, result)\n result = state.applyData(node, result)\n\n // Create `
`.\n  result = {type: 'element', tagName: 'pre', properties: {}, children: [result]}\n  state.patch(node, result)\n  return result\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Delete} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Delete} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strikethrough(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'del',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Emphasis} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Emphasis} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function emphasis(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'em',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {FootnoteReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {FootnoteReference} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnoteReference(state, node) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const id = String(node.identifier).toUpperCase()\n  const safeId = normalizeUri(id.toLowerCase())\n  const index = state.footnoteOrder.indexOf(id)\n  /** @type {number} */\n  let counter\n\n  let reuseCounter = state.footnoteCounts.get(id)\n\n  if (reuseCounter === undefined) {\n    reuseCounter = 0\n    state.footnoteOrder.push(id)\n    counter = state.footnoteOrder.length\n  } else {\n    counter = index + 1\n  }\n\n  reuseCounter += 1\n  state.footnoteCounts.set(id, reuseCounter)\n\n  /** @type {Element} */\n  const link = {\n    type: 'element',\n    tagName: 'a',\n    properties: {\n      href: '#' + clobberPrefix + 'fn-' + safeId,\n      id:\n        clobberPrefix +\n        'fnref-' +\n        safeId +\n        (reuseCounter > 1 ? '-' + reuseCounter : ''),\n      dataFootnoteRef: true,\n      ariaDescribedBy: ['footnote-label']\n    },\n    children: [{type: 'text', value: String(counter)}]\n  }\n  state.patch(node, link)\n\n  /** @type {Element} */\n  const sup = {\n    type: 'element',\n    tagName: 'sup',\n    properties: {},\n    children: [link]\n  }\n  state.patch(node, sup)\n  return state.applyData(node, sup)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Heading} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Heading} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function heading(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'h' + node.depth,\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Html} from 'mdast'\n * @import {State} from '../state.js'\n * @import {Raw} from '../../index.js'\n */\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n *   Info passed around.\n * @param {Html} node\n *   mdast node.\n * @returns {Element | Raw | undefined}\n *   hast node.\n */\nexport function html(state, node) {\n  if (state.options.allowDangerousHtml) {\n    /** @type {Raw} */\n    const result = {type: 'raw', value: node.value}\n    state.patch(node, result)\n    return state.applyData(node, result)\n  }\n\n  return undefined\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {ImageReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ImageReference} node\n *   mdast node.\n * @returns {Array | ElementContent}\n *   hast node.\n */\nexport function imageReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(definition.url || ''), alt: node.alt}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Image} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Image} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function image(state, node) {\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(node.url)}\n\n  if (node.alt !== null && node.alt !== undefined) {\n    properties.alt = node.alt\n  }\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Text} from 'hast'\n * @import {InlineCode} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {InlineCode} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function inlineCode(state, node) {\n  /** @type {Text} */\n  const text = {type: 'text', value: node.value.replace(/\\r?\\n|\\r/g, ' ')}\n  state.patch(node, text)\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'code',\n    properties: {},\n    children: [text]\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {LinkReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {LinkReference} node\n *   mdast node.\n * @returns {Array | ElementContent}\n *   hast node.\n */\nexport function linkReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(definition.url || '')}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Link} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Link} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function link(state, node) {\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(node.url)}\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {List} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {List} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function list(state, node) {\n  /** @type {Properties} */\n  const properties = {}\n  const results = state.all(node)\n  let index = -1\n\n  if (typeof node.start === 'number' && node.start !== 1) {\n    properties.start = node.start\n  }\n\n  // Like GitHub, add a class for custom styling.\n  while (++index < results.length) {\n    const child = results[index]\n\n    if (\n      child.type === 'element' &&\n      child.tagName === 'li' &&\n      child.properties &&\n      Array.isArray(child.properties.className) &&\n      child.properties.className.includes('task-list-item')\n    ) {\n      properties.className = ['contains-task-list']\n      break\n    }\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: node.ordered ? 'ol' : 'ul',\n    properties,\n    children: state.wrap(results, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Paragraph} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Paragraph} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function paragraph(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'p',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Parents as HastParents, Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastRoot} node\n *   mdast node.\n * @returns {HastParents}\n *   hast node.\n */\nexport function root(state, node) {\n  /** @type {HastRoot} */\n  const result = {type: 'root', children: state.wrap(state.all(node))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Strong} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Strong} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strong(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'strong',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Table} from 'mdast'\n * @import {Element} from 'hast'\n * @import {State} from '../state.js'\n */\n\nimport {pointEnd, pointStart} from 'unist-util-position'\n\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Table} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function table(state, node) {\n  const rows = state.all(node)\n  const firstRow = rows.shift()\n  /** @type {Array} */\n  const tableContent = []\n\n  if (firstRow) {\n    /** @type {Element} */\n    const head = {\n      type: 'element',\n      tagName: 'thead',\n      properties: {},\n      children: state.wrap([firstRow], true)\n    }\n    state.patch(node.children[0], head)\n    tableContent.push(head)\n  }\n\n  if (rows.length > 0) {\n    /** @type {Element} */\n    const body = {\n      type: 'element',\n      tagName: 'tbody',\n      properties: {},\n      children: state.wrap(rows, true)\n    }\n\n    const start = pointStart(node.children[1])\n    const end = pointEnd(node.children[node.children.length - 1])\n    if (start && end) body.position = {start, end}\n    tableContent.push(body)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'table',\n    properties: {},\n    children: state.wrap(tableContent, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {TableCell} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableCell} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function tableCell(state, node) {\n  // Note: this function is normally not called: see `table-row` for how rows\n  // and their cells are compiled.\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'td', // Assume body cell.\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, ElementContent, Properties} from 'hast'\n * @import {Parents, TableRow} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableRow} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function tableRow(state, node, parent) {\n  const siblings = parent ? parent.children : undefined\n  // Generate a body row when without parent.\n  const rowIndex = siblings ? siblings.indexOf(node) : 1\n  const tagName = rowIndex === 0 ? 'th' : 'td'\n  // To do: option to use `style`?\n  const align = parent && parent.type === 'table' ? parent.align : undefined\n  const length = align ? align.length : node.children.length\n  let cellIndex = -1\n  /** @type {Array} */\n  const cells = []\n\n  while (++cellIndex < length) {\n    // Note: can also be undefined.\n    const cell = node.children[cellIndex]\n    /** @type {Properties} */\n    const properties = {}\n    const alignValue = align ? align[cellIndex] : undefined\n\n    if (alignValue) {\n      properties.align = alignValue\n    }\n\n    /** @type {Element} */\n    let result = {type: 'element', tagName, properties, children: []}\n\n    if (cell) {\n      result.children = state.all(cell)\n      state.patch(cell, result)\n      result = state.applyData(cell, result)\n    }\n\n    cells.push(result)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'tr',\n    properties: {},\n    children: state.wrap(cells, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element as HastElement, Text as HastText} from 'hast'\n * @import {Text as MdastText} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {trimLines} from 'trim-lines'\n\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastText} node\n *   mdast node.\n * @returns {HastElement | HastText}\n *   hast node.\n */\nexport function text(state, node) {\n  /** @type {HastText} */\n  const result = {type: 'text', value: trimLines(String(node.value))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {ThematicBreak} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ThematicBreak} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function thematicBreak(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'hr',\n    properties: {},\n    children: []\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {\n *   ElementContent as HastElementContent,\n *   Element as HastElement,\n *   Nodes as HastNodes,\n *   Properties as HastProperties,\n *   RootContent as HastRootContent,\n *   Text as HastText\n * } from 'hast'\n * @import {\n *   Definition as MdastDefinition,\n *   FootnoteDefinition as MdastFootnoteDefinition,\n *   Nodes as MdastNodes,\n *   Parents as MdastParents\n * } from 'mdast'\n * @import {VFile} from 'vfile'\n * @import {\n *   FootnoteBackContentTemplate,\n *   FootnoteBackLabelTemplate\n * } from './footer.js'\n */\n\n/**\n * @callback Handler\n *   Handle a node.\n * @param {State} state\n *   Info passed around.\n * @param {any} node\n *   mdast node to handle.\n * @param {MdastParents | undefined} parent\n *   Parent of `node`.\n * @returns {Array | HastElementContent | undefined}\n *   hast node.\n *\n * @typedef {Partial>} Handlers\n *   Handle nodes.\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n *   Whether to persist raw HTML in markdown in the hast tree (default:\n *   `false`).\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` property on footnotes to prevent them from\n *   *clobbering* (default: `'user-content-'`).\n *\n *   Pass `''` for trusted markdown and when you are careful with\n *   polyfilling.\n *   You could pass a different prefix.\n *\n *   DOM clobbering is this:\n *\n *   ```html\n *   

\n * \n * ```\n *\n * The above example shows that elements are made available by browsers, by\n * their ID, on the `window` object.\n * This is a security risk because you might be expecting some other variable\n * at that place.\n * It can also break polyfills.\n * Using a prefix solves these problems.\n * @property {VFile | null | undefined} [file]\n * Corresponding virtual file representing the input document (optional).\n * @property {FootnoteBackContentTemplate | string | null | undefined} [footnoteBackContent]\n * Content of the backreference back to references (default: `defaultFootnoteBackContent`).\n *\n * The default value is:\n *\n * ```js\n * function defaultFootnoteBackContent(_, rereferenceIndex) {\n * const result = [{type: 'text', value: '↩'}]\n *\n * if (rereferenceIndex > 1) {\n * result.push({\n * type: 'element',\n * tagName: 'sup',\n * properties: {},\n * children: [{type: 'text', value: String(rereferenceIndex)}]\n * })\n * }\n *\n * return result\n * }\n * ```\n *\n * This content is used in the `a` element of each backreference (the `↩`\n * links).\n * @property {FootnoteBackLabelTemplate | string | null | undefined} [footnoteBackLabel]\n * Label to describe the backreference back to references (default:\n * `defaultFootnoteBackLabel`).\n *\n * The default value is:\n *\n * ```js\n * function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n * return (\n * 'Back to reference ' +\n * (referenceIndex + 1) +\n * (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n * )\n * }\n * ```\n *\n * Change it when the markdown is not in English.\n *\n * This label is used in the `ariaLabel` property on each backreference\n * (the `↩` links).\n * It affects users of assistive technology.\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n * Textual label to use for the footnotes section (default: `'Footnotes'`).\n *\n * Change it when the markdown is not in English.\n *\n * This label is typically hidden visually (assuming a `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass different properties with the `footnoteLabelProperties` option.\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n * Properties to use on the footnote label (default: `{className:\n * ['sr-only']}`).\n *\n * Change it to show the label and add other properties.\n *\n * This label is typically hidden visually (assuming an `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass an empty string.\n * You can also add different properties.\n *\n * > **Note**: `id: 'footnote-label'` is always added, because footnote\n * > calls use it with `aria-describedby` to provide an accessible label.\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n * HTML tag name to use for the footnote label element (default: `'h2'`).\n *\n * Change it to match your document structure.\n *\n * This label is typically hidden visually (assuming a `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass different properties with the `footnoteLabelProperties` option.\n * @property {Handlers | null | undefined} [handlers]\n * Extra handlers for nodes (optional).\n * @property {Array | null | undefined} [passThrough]\n * List of custom mdast node types to pass through (keep) in hast (note that\n * the node itself is passed, but eventual children are transformed)\n * (optional).\n * @property {Handler | null | undefined} [unknownHandler]\n * Handler for all unknown nodes (optional).\n *\n * @typedef State\n * Info passed around.\n * @property {(node: MdastNodes) => Array} all\n * Transform the children of an mdast parent to hast.\n * @property {(from: MdastNodes, to: Type) => HastElement | Type} applyData\n * Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {Map} definitionById\n * Definitions by their identifier.\n * @property {Map} footnoteById\n * Footnote definitions by their identifier.\n * @property {Map} footnoteCounts\n * Counts for how often the same footnote was called.\n * @property {Array} footnoteOrder\n * Identifiers of order when footnote calls first appear in tree order.\n * @property {Handlers} handlers\n * Applied handlers.\n * @property {(node: MdastNodes, parent: MdastParents | undefined) => Array | HastElementContent | undefined} one\n * Transform an mdast node to hast.\n * @property {Options} options\n * Configuration.\n * @property {(from: MdastNodes, node: HastNodes) => undefined} patch\n * Copy a node’s positional info.\n * @property {(nodes: Array, loose?: boolean | undefined) => Array} wrap\n * Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {visit} from 'unist-util-visit'\nimport {position} from 'unist-util-position'\nimport {handlers as defaultHandlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n * mdast node to transform.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {State}\n * `state` function.\n */\nexport function createState(tree, options) {\n const settings = options || emptyOptions\n /** @type {Map} */\n const definitionById = new Map()\n /** @type {Map} */\n const footnoteById = new Map()\n /** @type {Map} */\n const footnoteCounts = new Map()\n /** @type {Handlers} */\n // @ts-expect-error: the root handler returns a root.\n // Hard to type.\n const handlers = {...defaultHandlers, ...settings.handlers}\n\n /** @type {State} */\n const state = {\n all,\n applyData,\n definitionById,\n footnoteById,\n footnoteCounts,\n footnoteOrder: [],\n handlers,\n one,\n options: settings,\n patch,\n wrap\n }\n\n visit(tree, function (node) {\n if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n const map = node.type === 'definition' ? definitionById : footnoteById\n const id = String(node.identifier).toUpperCase()\n\n // Mimick CM behavior of link definitions.\n // See: .\n if (!map.has(id)) {\n // @ts-expect-error: node type matches map.\n map.set(id, node)\n }\n }\n })\n\n return state\n\n /**\n * Transform an mdast node into a hast node.\n *\n * @param {MdastNodes} node\n * mdast node.\n * @param {MdastParents | undefined} [parent]\n * Parent of `node`.\n * @returns {Array | HastElementContent | undefined}\n * Resulting hast node.\n */\n function one(node, parent) {\n const type = node.type\n const handle = state.handlers[type]\n\n if (own.call(state.handlers, type) && handle) {\n return handle(state, node, parent)\n }\n\n if (state.options.passThrough && state.options.passThrough.includes(type)) {\n if ('children' in node) {\n const {children, ...shallow} = node\n const result = structuredClone(shallow)\n // @ts-expect-error: TS doesn’t understand…\n result.children = state.all(node)\n // @ts-expect-error: TS doesn’t understand…\n return result\n }\n\n // @ts-expect-error: it’s custom.\n return structuredClone(node)\n }\n\n const unknown = state.options.unknownHandler || defaultUnknownHandler\n\n return unknown(state, node, parent)\n }\n\n /**\n * Transform the children of an mdast node into hast nodes.\n *\n * @param {MdastNodes} parent\n * mdast node to compile\n * @returns {Array}\n * Resulting hast nodes.\n */\n function all(parent) {\n /** @type {Array} */\n const values = []\n\n if ('children' in parent) {\n const nodes = parent.children\n let index = -1\n while (++index < nodes.length) {\n const result = state.one(nodes[index], parent)\n\n // To do: see if we van clean this? Can we merge texts?\n if (result) {\n if (index && nodes[index - 1].type === 'break') {\n if (!Array.isArray(result) && result.type === 'text') {\n result.value = trimMarkdownSpaceStart(result.value)\n }\n\n if (!Array.isArray(result) && result.type === 'element') {\n const head = result.children[0]\n\n if (head && head.type === 'text') {\n head.value = trimMarkdownSpaceStart(head.value)\n }\n }\n }\n\n if (Array.isArray(result)) {\n values.push(...result)\n } else {\n values.push(result)\n }\n }\n }\n }\n\n return values\n }\n}\n\n/**\n * Copy a node’s positional info.\n *\n * @param {MdastNodes} from\n * mdast node to copy from.\n * @param {HastNodes} to\n * hast node to copy into.\n * @returns {undefined}\n * Nothing.\n */\nfunction patch(from, to) {\n if (from.position) to.position = position(from)\n}\n\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n * Node type.\n * @param {MdastNodes} from\n * mdast node to use data from.\n * @param {Type} to\n * hast node to change.\n * @returns {HastElement | Type}\n * Nothing.\n */\nfunction applyData(from, to) {\n /** @type {HastElement | Type} */\n let result = to\n\n // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n if (from && from.data) {\n const hName = from.data.hName\n const hChildren = from.data.hChildren\n const hProperties = from.data.hProperties\n\n if (typeof hName === 'string') {\n // Transforming the node resulted in an element with a different name\n // than wanted:\n if (result.type === 'element') {\n result.tagName = hName\n }\n // Transforming the node resulted in a non-element, which happens for\n // raw, text, and root nodes (unless custom handlers are passed).\n // The intent of `hName` is to create an element, but likely also to keep\n // the content around (otherwise: pass `hChildren`).\n else {\n /** @type {Array} */\n // @ts-expect-error: assume no doctypes in `root`.\n const children = 'children' in result ? result.children : [result]\n result = {type: 'element', tagName: hName, properties: {}, children}\n }\n }\n\n if (result.type === 'element' && hProperties) {\n Object.assign(result.properties, structuredClone(hProperties))\n }\n\n if (\n 'children' in result &&\n result.children &&\n hChildren !== null &&\n hChildren !== undefined\n ) {\n result.children = hChildren\n }\n }\n\n return result\n}\n\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n * Info passed around.\n * @param {MdastNodes} node\n * Unknown mdast node.\n * @returns {HastElement | HastText}\n * Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n const data = node.data || {}\n /** @type {HastElement | HastText} */\n const result =\n 'value' in node &&\n !(own.call(data, 'hProperties') || own.call(data, 'hChildren'))\n ? {type: 'text', value: node.value}\n : {\n type: 'element',\n tagName: 'div',\n properties: {},\n children: state.all(node)\n }\n\n state.patch(node, result)\n return state.applyData(node, result)\n}\n\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastRootContent} Type\n * Node type.\n * @param {Array} nodes\n * List of nodes to wrap.\n * @param {boolean | undefined} [loose=false]\n * Whether to add line endings at start and end (default: `false`).\n * @returns {Array}\n * Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n /** @type {Array} */\n const result = []\n let index = -1\n\n if (loose) {\n result.push({type: 'text', value: '\\n'})\n }\n\n while (++index < nodes.length) {\n if (index) result.push({type: 'text', value: '\\n'})\n result.push(nodes[index])\n }\n\n if (loose && nodes.length > 0) {\n result.push({type: 'text', value: '\\n'})\n }\n\n return result\n}\n\n/**\n * Trim spaces and tabs at the start of `value`.\n *\n * @param {string} value\n * Value to trim.\n * @returns {string}\n * Result.\n */\nfunction trimMarkdownSpaceStart(value) {\n let index = 0\n let code = value.charCodeAt(index)\n\n while (code === 9 || code === 32) {\n index++\n code = value.charCodeAt(index)\n }\n\n return value.slice(index)\n}\n","/**\n * @import {Nodes as HastNodes} from 'hast'\n * @import {Nodes as MdastNodes} from 'mdast'\n * @import {Options} from './state.js'\n */\n\nimport {ok as assert} from 'devlop'\nimport {footer} from './footer.js'\nimport {createState} from './state.js'\n\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don’t:\n *\n * * `hast-util-to-html` also has an option `allowDangerousHtml` which will\n * output the raw HTML.\n * This is typically discouraged as noted by the option name but is useful\n * if you completely trust authors\n * * `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n * into standard hast nodes (`element`, `text`, etc).\n * This is a heavy task as it needs a full HTML parser, but it is the only\n * way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n *

\n * \n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value` (and doesn’t have `data.hName`,\n * `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n * node\n * * otherwise, create a `
` element (which could be changed with\n * `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n * mdast tree.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {HastNodes}\n * hast tree.\n */\nexport function toHast(tree, options) {\n const state = createState(tree, options)\n const node = state.one(tree, undefined)\n const foot = footer(state)\n /** @type {HastNodes} */\n const result = Array.isArray(node)\n ? {type: 'root', children: node}\n : node || {type: 'root', children: []}\n\n if (foot) {\n // If there’s a footer, there were definitions, meaning block\n // content.\n // So `result` is a parent node.\n assert('children' in result)\n result.children.push({type: 'text', value: '\\n'}, foot)\n }\n\n return result\n}\n","/**\n * @import {Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {Options as ToHastOptions} from 'mdast-util-to-hast'\n * @import {Processor} from 'unified'\n * @import {VFile} from 'vfile'\n */\n\n/**\n * @typedef {Omit} Options\n *\n * @callback TransformBridge\n * Bridge-mode.\n *\n * Runs the destination with the new hast tree.\n * Discards result.\n * @param {MdastRoot} tree\n * Tree.\n * @param {VFile} file\n * File.\n * @returns {Promise}\n * Nothing.\n *\n * @callback TransformMutate\n * Mutate-mode.\n *\n * Further transformers run on the hast tree.\n * @param {MdastRoot} tree\n * Tree.\n * @param {VFile} file\n * File.\n * @returns {HastRoot}\n * Tree (hast).\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n/**\n * Turn markdown into HTML.\n *\n * ##### Notes\n *\n * ###### Signature\n *\n * * if a processor is given,\n * runs the (rehype) plugins used on it with a hast tree,\n * then discards the result (*bridge mode*)\n * * otherwise,\n * returns a hast tree,\n * the plugins used after `remarkRehype` are rehype plugins (*mutate mode*)\n *\n * > 👉 **Note**:\n * > It’s highly unlikely that you want to pass a `processor`.\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most plugins ignore `raw` nodes but two notable ones don’t:\n *\n * * `rehype-stringify` also has an option `allowDangerousHtml` which will\n * output the raw HTML.\n * This is typically discouraged as noted by the option name but is useful if\n * you completely trust authors\n * * `rehype-raw` can handle the raw embedded HTML strings by parsing them\n * into standard hast nodes (`element`, `text`, etc);\n * this is a heavy task as it needs a full HTML parser,\n * but it is the only way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark,\n * which we follow by default.\n * They are supported by GitHub,\n * so footnotes can be enabled in markdown with `remark-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes,\n * which is hidden for sighted users but shown to assistive technology.\n * When your page is not in English,\n * you must define translated values.\n *\n * Back references use ARIA attributes,\n * but the section label itself uses a heading that is hidden with an\n * `sr-only` class.\n * To show it to sighted users,\n * define different attributes in `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem,\n * as it links footnote calls to footnote definitions on the page through `id`\n * attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n *

\n * \n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * *Example: headings (DOM clobbering)* in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value`\n * (and doesn’t have `data.hName`, `data.hProperties`, or `data.hChildren`,\n * see later),\n * create a hast `text` node\n * * otherwise,\n * create a `
` element (which could be changed with `data.hName`),\n * with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @overload\n * @param {Processor} processor\n * @param {Readonly | null | undefined} [options]\n * @returns {TransformBridge}\n *\n * @overload\n * @param {Readonly | null | undefined} [options]\n * @returns {TransformMutate}\n *\n * @overload\n * @param {Readonly | Processor | null | undefined} [destination]\n * @param {Readonly | null | undefined} [options]\n * @returns {TransformBridge | TransformMutate}\n *\n * @param {Readonly | Processor | null | undefined} [destination]\n * Processor or configuration (optional).\n * @param {Readonly | null | undefined} [options]\n * When a processor was given,\n * configuration (optional).\n * @returns {TransformBridge | TransformMutate}\n * Transform.\n */\nexport default function remarkRehype(destination, options) {\n if (destination && 'run' in destination) {\n /**\n * @type {TransformBridge}\n */\n return async function (tree, file) {\n // Cast because root in -> root out.\n const hastTree = /** @type {HastRoot} */ (\n toHast(tree, {file, ...options})\n )\n await destination.run(hastTree, file)\n }\n }\n\n /**\n * @type {TransformMutate}\n */\n return function (tree, file) {\n // Cast because root in -> root out.\n // To do: in the future, disallow ` || options` fallback.\n // With `unified-engine`, `destination` can be `undefined` but\n // `options` will be the file set.\n // We should not pass that as `options`.\n return /** @type {HastRoot} */ (\n toHast(tree, {file, ...(destination || options)})\n )\n }\n}\n","/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').Root} Root\n */\n\nimport {squeezeParagraphs} from 'mdast-squeeze-paragraphs'\nimport {visit} from 'unist-util-visit'\n\n/**\n * Only keep links with the given protocols.\n *\n * @param {object} options Options\n * @param {string[]} options.except - Protocols to exclude. Defauls to `['http', 'https']`.\n * @returns\n * Transform.\n */\nexport default function remarkUnlinkProtocols(\n options = {except: ['http', 'https']}\n) {\n /**\n * Transform.\n *\n * @param {Root} tree\n * Tree.\n * @returns {undefined}\n * Nothing.\n */\n return function (tree) {\n /** @type {Map} */\n const definitions = new Map()\n\n // Find definitions to look up linkReferences.\n visit(tree, 'definition', function (node, index, parent) {\n definitions.set(node.identifier, node.url)\n if (parent && typeof index === 'number') {\n const url = node.url\n if (\n url &&\n url.includes(':') &&\n !options.except.some((proto) => url.startsWith(`${proto}:`))\n ) {\n parent.children.splice(index, 1)\n return index\n }\n }\n })\n\n visit(tree, function (node, index, parent) {\n if (\n parent &&\n typeof index === 'number' &&\n (node.type === 'link' || node.type === 'linkReference')\n ) {\n const url =\n node.type === 'link' ? node.url : definitions.get(node.identifier)\n if (\n url &&\n url.includes(':') &&\n !options.except.some((proto) => url.startsWith(`${proto}:`))\n ) {\n parent.children.splice(index, 1, ...node.children)\n return index\n }\n }\n })\n\n squeezeParagraphs(tree)\n }\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n */\n\nimport {visit} from 'unist-util-visit'\n\n/**\n * Remove empty paragraphs in `tree`.\n *\n * @param {Nodes} tree\n * Tree to change.\n * @returns {undefined}\n * Nothing.\n */\nexport function squeezeParagraphs(tree) {\n visit(tree, function (node, index, parent) {\n if (\n index !== undefined &&\n parent &&\n node.type === 'paragraph' &&\n node.children.every(function (child) {\n return child.type === 'text' && /^\\s*$/.test(child.value)\n })\n ) {\n parent.children.splice(index, 1)\n return index\n }\n })\n}\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n * Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n if (error) {\n throw error\n }\n}\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array) => void} Callback\n * Callback.\n *\n * @typedef {(...input: Array) => any} Middleware\n * Ware.\n *\n * @typedef Pipeline\n * Pipeline.\n * @property {Run} run\n * Run the pipeline.\n * @property {Use} use\n * Add middleware.\n *\n * @typedef {(...input: Array) => void} Run\n * Call all middleware.\n *\n * Calls `done` on completion with either an error or the output of the\n * last middleware.\n *\n * > 👉 **Note**: as the length of input defines whether async functions get a\n * > `next` function,\n * > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n * Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n * Pipeline.\n */\nexport function trough() {\n /** @type {Array} */\n const fns = []\n /** @type {Pipeline} */\n const pipeline = {run, use}\n\n return pipeline\n\n /** @type {Run} */\n function run(...values) {\n let middlewareIndex = -1\n /** @type {Callback} */\n const callback = values.pop()\n\n if (typeof callback !== 'function') {\n throw new TypeError('Expected function as last argument, not ' + callback)\n }\n\n next(null, ...values)\n\n /**\n * Run the next `fn`, or we’re done.\n *\n * @param {Error | null | undefined} error\n * @param {Array} output\n */\n function next(error, ...output) {\n const fn = fns[++middlewareIndex]\n let index = -1\n\n if (error) {\n callback(error)\n return\n }\n\n // Copy non-nullish input into values.\n while (++index < values.length) {\n if (output[index] === null || output[index] === undefined) {\n output[index] = values[index]\n }\n }\n\n // Save the newly created `output` for the next call.\n values = output\n\n // Next or done.\n if (fn) {\n wrap(fn, next)(...output)\n } else {\n callback(null, ...output)\n }\n }\n }\n\n /** @type {Use} */\n function use(middelware) {\n if (typeof middelware !== 'function') {\n throw new TypeError(\n 'Expected `middelware` to be a function, not ' + middelware\n )\n }\n\n fns.push(middelware)\n return pipeline\n }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n * returns a promise that is rejected,\n * or calls the given `done` function with an error,\n * `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n * that value is the main output value\n * * if `middleware` calls `done`,\n * all non-nullish values except for the first one (the error) overwrite the\n * output values\n *\n * @param {Middleware} middleware\n * Function to wrap.\n * @param {Callback} callback\n * Callback called with the output of `middleware`.\n * @returns {Run}\n * Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n /** @type {boolean} */\n let called\n\n return wrapped\n\n /**\n * Call `middleware`.\n * @this {any}\n * @param {Array} parameters\n * @returns {void}\n */\n function wrapped(...parameters) {\n const fnExpectsCallback = middleware.length > parameters.length\n /** @type {any} */\n let result\n\n if (fnExpectsCallback) {\n parameters.push(done)\n }\n\n try {\n result = middleware.apply(this, parameters)\n } catch (error) {\n const exception = /** @type {Error} */ (error)\n\n // Well, this is quite the pickle.\n // `middleware` received a callback and called it synchronously, but that\n // threw an error.\n // The only thing left to do is to throw the thing instead.\n if (fnExpectsCallback && called) {\n throw exception\n }\n\n return done(exception)\n }\n\n if (!fnExpectsCallback) {\n if (result && result.then && typeof result.then === 'function') {\n result.then(then, done)\n } else if (result instanceof Error) {\n done(result)\n } else {\n then(result)\n }\n }\n }\n\n /**\n * Call `callback`, only once.\n *\n * @type {Callback}\n */\n function done(error, ...output) {\n if (!called) {\n called = true\n callback(error, ...output)\n }\n }\n\n /**\n * Call `done` with one value.\n *\n * @param {any} [value]\n */\n function then(value) {\n done(null, value)\n }\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef Options\n * Configuration.\n * @property {Array | null | undefined} [ancestors]\n * Stack of (inclusive) ancestor nodes surrounding the message (optional).\n * @property {Error | null | undefined} [cause]\n * Original error cause of the message (optional).\n * @property {Point | Position | null | undefined} [place]\n * Place of message (optional).\n * @property {string | null | undefined} [ruleId]\n * Category of message (optional, example: `'my-rule'`).\n * @property {string | null | undefined} [source]\n * Namespace of who sent the message (optional, example: `'my-package'`).\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n /**\n * Create a message for `reason`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {Options | null | undefined} [options]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns\n * Instance of `VFileMessage`.\n */\n // eslint-disable-next-line complexity\n constructor(causeOrReason, optionsOrParentOrPlace, origin) {\n super()\n\n if (typeof optionsOrParentOrPlace === 'string') {\n origin = optionsOrParentOrPlace\n optionsOrParentOrPlace = undefined\n }\n\n /** @type {string} */\n let reason = ''\n /** @type {Options} */\n let options = {}\n let legacyCause = false\n\n if (optionsOrParentOrPlace) {\n // Point.\n if (\n 'line' in optionsOrParentOrPlace &&\n 'column' in optionsOrParentOrPlace\n ) {\n options = {place: optionsOrParentOrPlace}\n }\n // Position.\n else if (\n 'start' in optionsOrParentOrPlace &&\n 'end' in optionsOrParentOrPlace\n ) {\n options = {place: optionsOrParentOrPlace}\n }\n // Node.\n else if ('type' in optionsOrParentOrPlace) {\n options = {\n ancestors: [optionsOrParentOrPlace],\n place: optionsOrParentOrPlace.position\n }\n }\n // Options.\n else {\n options = {...optionsOrParentOrPlace}\n }\n }\n\n if (typeof causeOrReason === 'string') {\n reason = causeOrReason\n }\n // Error.\n else if (!options.cause && causeOrReason) {\n legacyCause = true\n reason = causeOrReason.message\n options.cause = causeOrReason\n }\n\n if (!options.ruleId && !options.source && typeof origin === 'string') {\n const index = origin.indexOf(':')\n\n if (index === -1) {\n options.ruleId = origin\n } else {\n options.source = origin.slice(0, index)\n options.ruleId = origin.slice(index + 1)\n }\n }\n\n if (!options.place && options.ancestors && options.ancestors) {\n const parent = options.ancestors[options.ancestors.length - 1]\n\n if (parent) {\n options.place = parent.position\n }\n }\n\n const start =\n options.place && 'start' in options.place\n ? options.place.start\n : options.place\n\n /**\n * Stack of ancestor nodes surrounding the message.\n *\n * @type {Array | undefined}\n */\n this.ancestors = options.ancestors || undefined\n\n /**\n * Original error cause of the message.\n *\n * @type {Error | undefined}\n */\n this.cause = options.cause || undefined\n\n /**\n * Starting column of message.\n *\n * @type {number | undefined}\n */\n this.column = start ? start.column : undefined\n\n /**\n * State of problem.\n *\n * * `true` — error, file not usable\n * * `false` — warning, change may be needed\n * * `undefined` — change likely not needed\n *\n * @type {boolean | null | undefined}\n */\n this.fatal = undefined\n\n /**\n * Path of a file (used throughout the `VFile` ecosystem).\n *\n * @type {string | undefined}\n */\n this.file = ''\n\n // Field from `Error`.\n /**\n * Reason for message.\n *\n * @type {string}\n */\n this.message = reason\n\n /**\n * Starting line of error.\n *\n * @type {number | undefined}\n */\n this.line = start ? start.line : undefined\n\n // Field from `Error`.\n /**\n * Serialized positional info of message.\n *\n * On normal errors, this would be something like `ParseError`, buit in\n * `VFile` messages we use this space to show where an error happened.\n */\n this.name = stringifyPosition(options.place) || '1:1'\n\n /**\n * Place of message.\n *\n * @type {Point | Position | undefined}\n */\n this.place = options.place || undefined\n\n /**\n * Reason for message, should use markdown.\n *\n * @type {string}\n */\n this.reason = this.message\n\n /**\n * Category of message (example: `'my-rule'`).\n *\n * @type {string | undefined}\n */\n this.ruleId = options.ruleId || undefined\n\n /**\n * Namespace of message (example: `'my-package'`).\n *\n * @type {string | undefined}\n */\n this.source = options.source || undefined\n\n // Field from `Error`.\n /**\n * Stack of message.\n *\n * This is used by normal errors to show where something happened in\n * programming code, irrelevant for `VFile` messages,\n *\n * @type {string}\n */\n this.stack =\n legacyCause && options.cause && typeof options.cause.stack === 'string'\n ? options.cause.stack\n : ''\n\n // The following fields are “well known”.\n // Not standard.\n // Feel free to add other non-standard fields to your messages.\n\n /**\n * Specify the source value that’s being reported, which is deemed\n * incorrect.\n *\n * @type {string | undefined}\n */\n this.actual = undefined\n\n /**\n * Suggest acceptable values that can be used instead of `actual`.\n *\n * @type {Array | undefined}\n */\n this.expected = undefined\n\n /**\n * Long form description of the message (you should use markdown).\n *\n * @type {string | undefined}\n */\n this.note = undefined\n\n /**\n * Link to docs for the message.\n *\n * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n * > to `new URL(x)`.\n *\n * @type {string | undefined}\n */\n this.url = undefined\n }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.column = undefined\nVFileMessage.prototype.line = undefined\nVFileMessage.prototype.ancestors = undefined\nVFileMessage.prototype.cause = undefined\nVFileMessage.prototype.fatal = undefined\nVFileMessage.prototype.place = undefined\nVFileMessage.prototype.ruleId = undefined\nVFileMessage.prototype.source = undefined\n","// A derivative work based on:\n// .\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// .\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const minpath = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n * File path.\n * @param {string | null | undefined} [extname]\n * Extension to strip.\n * @returns {string}\n * Stem or basename.\n */\nfunction basename(path, extname) {\n if (extname !== undefined && typeof extname !== 'string') {\n throw new TypeError('\"ext\" argument must be a string')\n }\n\n assertPath(path)\n let start = 0\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let seenNonSlash\n\n if (\n extname === undefined ||\n extname.length === 0 ||\n extname.length > path.length\n ) {\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // path component.\n seenNonSlash = true\n end = index + 1\n }\n }\n\n return end < 0 ? '' : path.slice(start, end)\n }\n\n if (extname === path) {\n return ''\n }\n\n let firstNonSlashEnd = -1\n let extnameIndex = extname.length - 1\n\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else {\n if (firstNonSlashEnd < 0) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching.\n seenNonSlash = true\n firstNonSlashEnd = index + 1\n }\n\n if (extnameIndex > -1) {\n // Try to match the explicit extension.\n if (path.codePointAt(index) === extname.codePointAt(extnameIndex--)) {\n if (extnameIndex < 0) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = index\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extnameIndex = -1\n end = firstNonSlashEnd\n }\n }\n }\n }\n\n if (start === end) {\n end = firstNonSlashEnd\n } else if (end < 0) {\n end = path.length\n }\n\n return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\nfunction dirname(path) {\n assertPath(path)\n\n if (path.length === 0) {\n return '.'\n }\n\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n // Prefix `--` is important to not run on `0`.\n while (--index) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n if (unmatchedSlash) {\n end = index\n break\n }\n } else if (!unmatchedSlash) {\n // We saw the first non-path separator\n unmatchedSlash = true\n }\n }\n\n return end < 0\n ? path.codePointAt(0) === 47 /* `/` */\n ? '/'\n : '.'\n : end === 1 && path.codePointAt(0) === 47 /* `/` */\n ? '//'\n : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * Extname.\n */\nfunction extname(path) {\n assertPath(path)\n\n let index = path.length\n\n let end = -1\n let startPart = 0\n let startDot = -1\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find.\n let preDotState = 0\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n while (index--) {\n const code = path.codePointAt(index)\n\n if (code === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (unmatchedSlash) {\n startPart = index + 1\n break\n }\n\n continue\n }\n\n if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // extension.\n unmatchedSlash = true\n end = index + 1\n }\n\n if (code === 46 /* `.` */) {\n // If this is our first dot, mark it as the start of our extension.\n if (startDot < 0) {\n startDot = index\n } else if (preDotState !== 1) {\n preDotState = 1\n }\n } else if (startDot > -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension.\n preDotState = -1\n }\n }\n\n if (\n startDot < 0 ||\n end < 0 ||\n // We saw a non-dot character immediately before the dot.\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly `..`.\n (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n ) {\n return ''\n }\n\n return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array} segments\n * Path segments.\n * @returns {string}\n * File path.\n */\nfunction join(...segments) {\n let index = -1\n /** @type {string | undefined} */\n let joined\n\n while (++index < segments.length) {\n assertPath(segments[index])\n\n if (segments[index]) {\n joined =\n joined === undefined ? segments[index] : joined + '/' + segments[index]\n }\n }\n\n return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n assertPath(path)\n\n const absolute = path.codePointAt(0) === 47 /* `/` */\n\n // Normalize the path according to POSIX rules.\n let value = normalizeString(path, !absolute)\n\n if (value.length === 0 && !absolute) {\n value = '.'\n }\n\n if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n value += '/'\n }\n\n return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n * File path.\n * @param {boolean} allowAboveRoot\n * Whether `..` can move above root.\n * @returns {string}\n * File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n let result = ''\n let lastSegmentLength = 0\n let lastSlash = -1\n let dots = 0\n let index = -1\n /** @type {number | undefined} */\n let code\n /** @type {number} */\n let lastSlashIndex\n\n while (++index <= path.length) {\n if (index < path.length) {\n code = path.codePointAt(index)\n } else if (code === 47 /* `/` */) {\n break\n } else {\n code = 47 /* `/` */\n }\n\n if (code === 47 /* `/` */) {\n if (lastSlash === index - 1 || dots === 1) {\n // Empty.\n } else if (lastSlash !== index - 1 && dots === 2) {\n if (\n result.length < 2 ||\n lastSegmentLength !== 2 ||\n result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n result.codePointAt(result.length - 2) !== 46 /* `.` */\n ) {\n if (result.length > 2) {\n lastSlashIndex = result.lastIndexOf('/')\n\n if (lastSlashIndex !== result.length - 1) {\n if (lastSlashIndex < 0) {\n result = ''\n lastSegmentLength = 0\n } else {\n result = result.slice(0, lastSlashIndex)\n lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n }\n\n lastSlash = index\n dots = 0\n continue\n }\n } else if (result.length > 0) {\n result = ''\n lastSegmentLength = 0\n lastSlash = index\n dots = 0\n continue\n }\n }\n\n if (allowAboveRoot) {\n result = result.length > 0 ? result + '/..' : '..'\n lastSegmentLength = 2\n }\n } else {\n if (result.length > 0) {\n result += '/' + path.slice(lastSlash + 1, index)\n } else {\n result = path.slice(lastSlash + 1, index)\n }\n\n lastSegmentLength = index - lastSlash - 1\n }\n\n lastSlash = index\n dots = 0\n } else if (code === 46 /* `.` */ && dots > -1) {\n dots++\n } else {\n dots = -1\n }\n }\n\n return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n * File path.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError(\n 'Path must be a string. Received ' + JSON.stringify(path)\n )\n }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// .\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const minproc = {cwd}\n\nfunction cwd() {\n return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n * File path or URL.\n * @returns {fileUrlOrPath is URL}\n * Whether it’s a URL.\n */\n// From: \nexport function isUrl(fileUrlOrPath) {\n return Boolean(\n fileUrlOrPath !== null &&\n typeof fileUrlOrPath === 'object' &&\n 'href' in fileUrlOrPath &&\n fileUrlOrPath.href &&\n 'protocol' in fileUrlOrPath &&\n fileUrlOrPath.protocol &&\n // @ts-expect-error: indexing is fine.\n fileUrlOrPath.auth === undefined\n )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: \n\n/**\n * @param {URL | string} path\n * File URL.\n * @returns {string}\n * File URL.\n */\nexport function urlToPath(path) {\n if (typeof path === 'string') {\n path = new URL(path)\n } else if (!isUrl(path)) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'The \"path\" argument must be of type string or an instance of URL. Received `' +\n path +\n '`'\n )\n error.code = 'ERR_INVALID_ARG_TYPE'\n throw error\n }\n\n if (path.protocol !== 'file:') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError('The URL must be of scheme file')\n error.code = 'ERR_INVALID_URL_SCHEME'\n throw error\n }\n\n return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n * URL.\n * @returns {string}\n * File path.\n */\nfunction getPathFromURLPosix(url) {\n if (url.hostname !== '') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL host must be \"localhost\" or empty on darwin'\n )\n error.code = 'ERR_INVALID_FILE_URL_HOST'\n throw error\n }\n\n const pathname = url.pathname\n let index = -1\n\n while (++index < pathname.length) {\n if (\n pathname.codePointAt(index) === 37 /* `%` */ &&\n pathname.codePointAt(index + 1) === 50 /* `2` */\n ) {\n const third = pathname.codePointAt(index + 2)\n if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL path must not include encoded / characters'\n )\n error.code = 'ERR_INVALID_FILE_URL_PATH'\n throw error\n }\n }\n }\n\n return decodeURIComponent(pathname)\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n * @import {Options as MessageOptions} from 'vfile-message'\n * @import {Compatible, Data, Map, Options, Value} from 'vfile'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {minpath} from '#minpath'\nimport {minproc} from '#minproc'\nimport {urlToPath, isUrl} from '#minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n 'history',\n 'path',\n 'basename',\n 'stem',\n 'extname',\n 'dirname'\n])\n\nexport class VFile {\n /**\n * Create a new virtual file.\n *\n * `options` is treated as:\n *\n * * `string` or `Uint8Array` — `{value: options}`\n * * `URL` — `{path: options}`\n * * `VFile` — shallow copies its data over to the new file\n * * `object` — all fields are shallow copied over to the new file\n *\n * Path related fields are set in the following order (least specific to\n * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n * `dirname`.\n *\n * You cannot set `dirname` or `extname` without setting either `history`,\n * `path`, `basename`, or `stem` too.\n *\n * @param {Compatible | null | undefined} [value]\n * File value.\n * @returns\n * New instance.\n */\n constructor(value) {\n /** @type {Options | VFile} */\n let options\n\n if (!value) {\n options = {}\n } else if (isUrl(value)) {\n options = {path: value}\n } else if (typeof value === 'string' || isUint8Array(value)) {\n options = {value}\n } else {\n options = value\n }\n\n /* eslint-disable no-unused-expressions */\n\n /**\n * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n *\n * @type {string}\n */\n // Prevent calling `cwd` (which could be expensive) if it’s not needed;\n // the empty string will be overridden in the next block.\n this.cwd = 'cwd' in options ? '' : minproc.cwd()\n\n /**\n * Place to store custom info (default: `{}`).\n *\n * It’s OK to store custom data directly on the file but moving it to\n * `data` is recommended.\n *\n * @type {Data}\n */\n this.data = {}\n\n /**\n * List of file paths the file moved between.\n *\n * The first is the original path and the last is the current path.\n *\n * @type {Array}\n */\n this.history = []\n\n /**\n * List of messages associated with the file.\n *\n * @type {Array}\n */\n this.messages = []\n\n /**\n * Raw value.\n *\n * @type {Value}\n */\n this.value\n\n // The below are non-standard, they are “well-known”.\n // As in, used in several tools.\n /**\n * Source map.\n *\n * This type is equivalent to the `RawSourceMap` type from the `source-map`\n * module.\n *\n * @type {Map | null | undefined}\n */\n this.map\n\n /**\n * Custom, non-string, compiled, representation.\n *\n * This is used by unified to store non-string results.\n * One example is when turning markdown into React nodes.\n *\n * @type {unknown}\n */\n this.result\n\n /**\n * Whether a file was saved to disk.\n *\n * This is used by vfile reporters.\n *\n * @type {boolean}\n */\n this.stored\n /* eslint-enable no-unused-expressions */\n\n // Set path related properties in the correct order.\n let index = -1\n\n while (++index < order.length) {\n const field = order[index]\n\n // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n // `vfile`s too.\n if (\n field in options &&\n options[field] !== undefined &&\n options[field] !== null\n ) {\n // @ts-expect-error: TS doesn’t understand basic reality.\n this[field] = field === 'history' ? [...options[field]] : options[field]\n }\n }\n\n /** @type {string} */\n let field\n\n // Set non-path related properties.\n for (field in options) {\n // @ts-expect-error: fine to set other things.\n if (!order.includes(field)) {\n // @ts-expect-error: fine to set other things.\n this[field] = options[field]\n }\n }\n }\n\n /**\n * Get the basename (including extname) (example: `'index.min.js'`).\n *\n * @returns {string | undefined}\n * Basename.\n */\n get basename() {\n return typeof this.path === 'string'\n ? minpath.basename(this.path)\n : undefined\n }\n\n /**\n * Set basename (including extname) (`'index.min.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} basename\n * Basename.\n * @returns {undefined}\n * Nothing.\n */\n set basename(basename) {\n assertNonEmpty(basename, 'basename')\n assertPart(basename, 'basename')\n this.path = minpath.join(this.dirname || '', basename)\n }\n\n /**\n * Get the parent path (example: `'~'`).\n *\n * @returns {string | undefined}\n * Dirname.\n */\n get dirname() {\n return typeof this.path === 'string'\n ? minpath.dirname(this.path)\n : undefined\n }\n\n /**\n * Set the parent path (example: `'~'`).\n *\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} dirname\n * Dirname.\n * @returns {undefined}\n * Nothing.\n */\n set dirname(dirname) {\n assertPath(this.basename, 'dirname')\n this.path = minpath.join(dirname || '', this.basename)\n }\n\n /**\n * Get the extname (including dot) (example: `'.js'`).\n *\n * @returns {string | undefined}\n * Extname.\n */\n get extname() {\n return typeof this.path === 'string'\n ? minpath.extname(this.path)\n : undefined\n }\n\n /**\n * Set the extname (including dot) (example: `'.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} extname\n * Extname.\n * @returns {undefined}\n * Nothing.\n */\n set extname(extname) {\n assertPart(extname, 'extname')\n assertPath(this.dirname, 'extname')\n\n if (extname) {\n if (extname.codePointAt(0) !== 46 /* `.` */) {\n throw new Error('`extname` must start with `.`')\n }\n\n if (extname.includes('.', 1)) {\n throw new Error('`extname` cannot contain multiple dots')\n }\n }\n\n this.path = minpath.join(this.dirname, this.stem + (extname || ''))\n }\n\n /**\n * Get the full path (example: `'~/index.min.js'`).\n *\n * @returns {string}\n * Path.\n */\n get path() {\n return this.history[this.history.length - 1]\n }\n\n /**\n * Set the full path (example: `'~/index.min.js'`).\n *\n * Cannot be nullified.\n * You can set a file URL (a `URL` object with a `file:` protocol) which will\n * be turned into a path with `url.fileURLToPath`.\n *\n * @param {URL | string} path\n * Path.\n * @returns {undefined}\n * Nothing.\n */\n set path(path) {\n if (isUrl(path)) {\n path = urlToPath(path)\n }\n\n assertNonEmpty(path, 'path')\n\n if (this.path !== path) {\n this.history.push(path)\n }\n }\n\n /**\n * Get the stem (basename w/o extname) (example: `'index.min'`).\n *\n * @returns {string | undefined}\n * Stem.\n */\n get stem() {\n return typeof this.path === 'string'\n ? minpath.basename(this.path, this.extname)\n : undefined\n }\n\n /**\n * Set the stem (basename w/o extname) (example: `'index.min'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} stem\n * Stem.\n * @returns {undefined}\n * Nothing.\n */\n set stem(stem) {\n assertNonEmpty(stem, 'stem')\n assertPart(stem, 'stem')\n this.path = minpath.join(this.dirname || '', stem + (this.extname || ''))\n }\n\n // Normal prototypal methods.\n /**\n * Create a fatal message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `true` (error; file not usable)\n * and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {never}\n * Never.\n * @throws {VFileMessage}\n * Message.\n */\n fail(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = true\n\n throw message\n }\n\n /**\n * Create an info message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `undefined` (info; change\n * likely not needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n info(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = undefined\n\n return message\n }\n\n /**\n * Create a message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `false` (warning; change may be\n * needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n message(causeOrReason, optionsOrParentOrPlace, origin) {\n const message = new VFileMessage(\n // @ts-expect-error: the overloads are fine.\n causeOrReason,\n optionsOrParentOrPlace,\n origin\n )\n\n if (this.path) {\n message.name = this.path + ':' + message.name\n message.file = this.path\n }\n\n message.fatal = false\n\n this.messages.push(message)\n\n return message\n }\n\n /**\n * Serialize the file.\n *\n * > **Note**: which encodings are supported depends on the engine.\n * > For info on Node.js, see:\n * > .\n *\n * @param {string | null | undefined} [encoding='utf8']\n * Character encoding to understand `value` as when it’s a `Uint8Array`\n * (default: `'utf-8'`).\n * @returns {string}\n * Serialized file.\n */\n toString(encoding) {\n if (this.value === undefined) {\n return ''\n }\n\n if (typeof this.value === 'string') {\n return this.value\n }\n\n const decoder = new TextDecoder(encoding || undefined)\n return decoder.decode(this.value)\n }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n * File path part.\n * @param {string} name\n * Part name.\n * @returns {undefined}\n * Nothing.\n */\nfunction assertPart(part, name) {\n if (part && part.includes(minpath.sep)) {\n throw new Error(\n '`' + name + '` cannot be a path: did not expect `' + minpath.sep + '`'\n )\n }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n * Thing.\n * @param {string} name\n * Part name.\n * @returns {asserts part is string}\n * Nothing.\n */\nfunction assertNonEmpty(part, name) {\n if (!part) {\n throw new Error('`' + name + '` cannot be empty')\n }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n * Path.\n * @param {string} name\n * Dependency name.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path, name) {\n if (!path) {\n throw new Error('Setting `' + name + '` requires `path` to be set too')\n }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","export const CallableInstance =\n /**\n * @type {new , Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n */\n (\n /** @type {unknown} */\n (\n /**\n * @this {Function}\n * @param {string | symbol} property\n * @returns {(...parameters: Array) => unknown}\n */\n function (property) {\n const self = this\n const constr = self.constructor\n const proto = /** @type {Record} */ (\n // Prototypes do exist.\n // type-coverage:ignore-next-line\n constr.prototype\n )\n const value = proto[property]\n /** @type {(...parameters: Array) => unknown} */\n const apply = function () {\n return value.apply(apply, arguments)\n }\n\n Object.setPrototypeOf(apply, proto)\n\n // Not needed for us in `unified`: we only call this on the `copy`\n // function,\n // and we don't need to add its fields (`length`, `name`)\n // over.\n // See also: GH-246.\n // const names = Object.getOwnPropertyNames(value)\n //\n // for (const p of names) {\n // const descriptor = Object.getOwnPropertyDescriptor(value, p)\n // if (descriptor) Object.defineProperty(apply, p, descriptor)\n // }\n\n return apply\n }\n )\n )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n * Acceptable results from compilers.\n *\n * To register custom results, add them to\n * {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n * The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n * A **compiler** handles the compiling of a syntax tree to something else\n * (in most cases, text) (TypeScript type).\n *\n * It is used in the stringify phase and called with a {@linkcode Node}\n * and {@linkcode VFile} representation of the document to compile.\n * It should return the textual representation of the given tree (typically\n * `string`).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n * Tree to compile.\n * @param {VFile} file\n * File associated with `tree`.\n * @returns {Result}\n * New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n * something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the parser yields (default: `Node`)\n * @callback Parser\n * A **parser** handles the parsing of text to a syntax tree.\n *\n * It is used in the parse phase and is called with a `string` and\n * {@linkcode VFile} of the document to parse.\n * It must return the syntax tree representation of the given file\n * ({@linkcode Node}).\n * @param {string} document\n * Document to parse.\n * @param {VFile} file\n * File associated with `document`.\n * @returns {Tree}\n * Node representing the given file.\n */\n\n/**\n * @typedef {(\n * Plugin, any, any> |\n * PluginTuple, any, any> |\n * Preset\n * )} Pluggable\n * Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array} PluggableList\n * List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n// .\n/**\n * @template {Array} [PluginParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n * Value that is expected as input (default: `Node`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=Input]\n * Value that is yielded as output (default: `Input`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * (this: Processor, ...parameters: PluginParameters) =>\n * Input extends string ? // Parser.\n * Output extends Node | undefined ? undefined | void : never :\n * Output extends CompileResults ? // Compiler.\n * Input extends Node | undefined ? undefined | void : never :\n * Transformer<\n * Input extends Node ? Input : Node,\n * Output extends Node ? Output : Node\n * > | undefined | void\n * )} Plugin\n * Single plugin.\n *\n * Plugins configure the processors they are applied on in the following\n * ways:\n *\n * * they change the processor, such as the parser, the compiler, or by\n * configuring data\n * * they specify how to handle trees and files\n *\n * In practice, they are functions that can receive options and configure the\n * processor (`this`).\n *\n * > **Note**: plugins are called when the processor is *frozen*, not when\n * > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array} [TupleParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n * Value that is expected as input (optional).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=undefined] (optional).\n * Value that is yielded as output.\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * [\n * plugin: Plugin,\n * ...parameters: TupleParameters\n * ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n * Sharable configuration.\n *\n * They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n * List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n * Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n * The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n * Callback called when the process is done.\n *\n * Called with either an error or a result.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {File | undefined} [file]\n * Processed file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n * Callback called when transformers are done.\n *\n * Called with either an error or results.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {Tree | undefined} [tree]\n * Transformed tree (optional).\n * @param {VFile | undefined} [file]\n * File (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n * Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n * Callback passed to transforms.\n *\n * If the signature of a `transformer` accepts a third argument, the\n * transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n * Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n * New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n * New, changed, file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n * Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n * Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n * Transformers handle syntax trees and files.\n *\n * They are functions that are called each time a syntax tree and file are\n * passed through the run phase.\n * When an error occurs in them (either because it’s thrown, returned,\n * rejected, or passed to `next`), the process stops.\n *\n * The run phase is handled by [`trough`][trough], see its documentation for\n * the exact semantics of these functions.\n *\n * > **Note**: you should likely ignore `next`: don’t accept it.\n * > it supports callback-style async work.\n * > But promises are likely easier to reason about.\n *\n * [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n * Tree to handle.\n * @param {VFile} file\n * File to handle.\n * @param {TransformCallback} next\n * Callback.\n * @returns {(\n * Promise |\n * Promise | // For some reason this is needed separately.\n * Output |\n * Error |\n * undefined |\n * void\n * )}\n * If you accept `next`, nothing.\n * Otherwise:\n *\n * * `Error` — fatal error to stop the process\n * * `Promise` or `undefined` — the next transformer keeps using\n * same tree\n * * `Promise` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n * Output of `parse`.\n * @template {Node | undefined} HeadTree\n * Input for `run`.\n * @template {Node | undefined} TailTree\n * Output for `run`.\n * @template {Node | undefined} CompileTree\n * Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n * Output of `stringify`.\n * @template {Node | string | undefined} Input\n * Input of plugin.\n * @template Output\n * Output of plugin (optional).\n * @typedef {(\n * Input extends string\n * ? Output extends Node | undefined\n * ? // Parser.\n * Processor<\n * Output extends undefined ? ParseTree : Output,\n * HeadTree,\n * TailTree,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor\n * : Output extends CompileResults\n * ? Input extends Node | undefined\n * ? // Compiler.\n * Processor<\n * ParseTree,\n * HeadTree,\n * TailTree,\n * Input extends undefined ? CompileTree : Input,\n * Output extends undefined ? CompileResult : Output\n * >\n * : // Unknown.\n * Processor\n * : Input extends Node | undefined\n * ? Output extends Node | undefined\n * ? // Transform.\n * Processor<\n * ParseTree,\n * HeadTree extends undefined ? Input : HeadTree,\n * Output extends undefined ? TailTree : Output,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor\n * : // Unknown.\n * Processor\n * )} UsePlugin\n * Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n * Node type that the transformer yields.\n * @typedef {(\n * Result extends Value | undefined ?\n * VFile :\n * VFile & {result: Result}\n * )} VFileWithOutput\n * Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n * If a result that is not acceptable on a `VFile` is used, that will\n * be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n * Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n * Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n * Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n * Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n * Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor>}\n */\nexport class Processor extends CallableInstance {\n /**\n * Create a processor.\n */\n constructor() {\n // If `Processor()` is called (w/o new), `copy` is called instead.\n super('copy')\n\n /**\n * Compiler to use (deprecated).\n *\n * @deprecated\n * Use `compiler` instead.\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.Compiler = undefined\n\n /**\n * Parser to use (deprecated).\n *\n * @deprecated\n * Use `parser` instead.\n * @type {(\n * Parser |\n * undefined\n * )}\n */\n this.Parser = undefined\n\n // Note: the following fields are considered private.\n // However, they are needed for tests, and TSC generates an untyped\n // `private freezeIndex` field for, which trips `type-coverage` up.\n // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n /**\n * Internal list of configured plugins.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Array>>}\n */\n this.attachers = []\n\n /**\n * Compiler to use.\n *\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.compiler = undefined\n\n /**\n * Internal state to track where we are while freezing.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {number}\n */\n this.freezeIndex = -1\n\n /**\n * Internal state to track whether we’re frozen.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {boolean | undefined}\n */\n this.frozen = undefined\n\n /**\n * Internal state.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Data}\n */\n this.namespace = {}\n\n /**\n * Parser to use.\n *\n * @type {(\n * Parser |\n * undefined\n * )}\n */\n this.parser = undefined\n\n /**\n * Internal list of configured transformers.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Pipeline}\n */\n this.transformers = trough()\n }\n\n /**\n * Copy a processor.\n *\n * @deprecated\n * This is a private internal method and should not be used.\n * @returns {Processor}\n * New *unfrozen* processor ({@linkcode Processor}) that is\n * configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\n copy() {\n // Cast as the type parameters will be the same after attaching.\n const destination =\n /** @type {Processor} */ (\n new Processor()\n )\n let index = -1\n\n while (++index < this.attachers.length) {\n const attacher = this.attachers[index]\n destination.use(...attacher)\n }\n\n destination.data(extend(true, {}, this.namespace))\n\n return destination\n }\n\n /**\n * Configure the processor with info available to all plugins.\n * Information is stored in an object.\n *\n * Typically, options can be given to a specific plugin, but sometimes it\n * makes sense to have information shared with several plugins.\n * For example, a list of HTML elements that are self-closing, which is\n * needed during all phases.\n *\n * > **Note**: setting information cannot occur on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * > **Note**: to register custom data in TypeScript, augment the\n * > {@linkcode Data} interface.\n *\n * @example\n * This example show how to get and set info:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * const processor = unified().data('alpha', 'bravo')\n *\n * processor.data('alpha') // => 'bravo'\n *\n * processor.data() // => {alpha: 'bravo'}\n *\n * processor.data({charlie: 'delta'})\n *\n * processor.data() // => {charlie: 'delta'}\n * ```\n *\n * @template {keyof Data} Key\n *\n * @overload\n * @returns {Data}\n *\n * @overload\n * @param {Data} dataset\n * @returns {Processor}\n *\n * @overload\n * @param {Key} key\n * @returns {Data[Key]}\n *\n * @overload\n * @param {Key} key\n * @param {Data[Key]} value\n * @returns {Processor}\n *\n * @param {Data | Key} [key]\n * Key to get or set, or entire dataset to set, or nothing to get the\n * entire dataset (optional).\n * @param {Data[Key]} [value]\n * Value to set (optional).\n * @returns {unknown}\n * The current processor when setting, the value at `key` when getting, or\n * the entire dataset when getting without key.\n */\n data(key, value) {\n if (typeof key === 'string') {\n // Set `key`.\n if (arguments.length === 2) {\n assertUnfrozen('data', this.frozen)\n this.namespace[key] = value\n return this\n }\n\n // Get `key`.\n return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n }\n\n // Set space.\n if (key) {\n assertUnfrozen('data', this.frozen)\n this.namespace = key\n return this\n }\n\n // Get space.\n return this.namespace\n }\n\n /**\n * Freeze a processor.\n *\n * Frozen processors are meant to be extended and not to be configured\n * directly.\n *\n * When a processor is frozen it cannot be unfrozen.\n * New processors working the same way can be created by calling the\n * processor.\n *\n * It’s possible to freeze processors explicitly by calling `.freeze()`.\n * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n * `.stringify()`, `.process()`, or `.processSync()` are called.\n *\n * @returns {Processor}\n * The current processor.\n */\n freeze() {\n if (this.frozen) {\n return this\n }\n\n // Cast so that we can type plugins easier.\n // Plugins are supposed to be usable on different processors, not just on\n // this exact processor.\n const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n while (++this.freezeIndex < this.attachers.length) {\n const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n if (options[0] === false) {\n continue\n }\n\n if (options[0] === true) {\n options[0] = undefined\n }\n\n const transformer = attacher.call(self, ...options)\n\n if (typeof transformer === 'function') {\n this.transformers.use(transformer)\n }\n }\n\n this.frozen = true\n this.freezeIndex = Number.POSITIVE_INFINITY\n\n return this\n }\n\n /**\n * Parse text to a syntax tree.\n *\n * > **Note**: `parse` freezes the processor if not already *frozen*.\n *\n * > **Note**: `parse` performs the parse phase, not the run phase or other\n * > phases.\n *\n * @param {Compatible | undefined} [file]\n * file to parse (optional); typically `string` or `VFile`; any value\n * accepted as `x` in `new VFile(x)`.\n * @returns {ParseTree extends undefined ? Node : ParseTree}\n * Syntax tree representing `file`.\n */\n parse(file) {\n this.freeze()\n const realFile = vfile(file)\n const parser = this.parser || this.Parser\n assertParser('parse', parser)\n return parser(String(realFile), realFile)\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * > **Note**: `process` freezes the processor if not already *frozen*.\n *\n * > **Note**: `process` performs the parse, run, and stringify phases.\n *\n * @overload\n * @param {Compatible | undefined} file\n * @param {ProcessCallback>} done\n * @returns {undefined}\n *\n * @overload\n * @param {Compatible | undefined} [file]\n * @returns {Promise>}\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`]; any value accepted as\n * `x` in `new VFile(x)`.\n * @param {ProcessCallback> | undefined} [done]\n * Callback (optional).\n * @returns {Promise | undefined}\n * Nothing if `done` is given.\n * Otherwise a promise, rejected with a fatal error or resolved with the\n * processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n process(file, done) {\n const self = this\n\n this.freeze()\n assertParser('process', this.parser || this.Parser)\n assertCompiler('process', this.compiler || this.Compiler)\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {((file: VFileWithOutput) => undefined | void) | undefined} resolve\n * @param {(error: Error | undefined) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n const realFile = vfile(file)\n // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n // input of the first transform).\n const parseTree =\n /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n /** @type {unknown} */ (self.parse(realFile))\n )\n\n self.run(parseTree, realFile, function (error, tree, file) {\n if (error || !tree || !file) {\n return realDone(error)\n }\n\n // Assume `TailTree` (the output of the last transform) matches\n // `CompileTree` (the input of the compiler).\n const compileTree =\n /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n /** @type {unknown} */ (tree)\n )\n\n const compileResult = self.stringify(compileTree, file)\n\n if (looksLikeAValue(compileResult)) {\n file.value = compileResult\n } else {\n file.result = compileResult\n }\n\n realDone(error, /** @type {VFileWithOutput} */ (file))\n })\n\n /**\n * @param {Error | undefined} error\n * @param {VFileWithOutput | undefined} [file]\n * @returns {undefined}\n */\n function realDone(error, file) {\n if (error || !file) {\n reject(error)\n } else if (resolve) {\n resolve(file)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, file)\n }\n }\n }\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `processSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `processSync` performs the parse, run, and stringify phases.\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`; any value accepted as\n * `x` in `new VFile(x)`.\n * @returns {VFileWithOutput}\n * The processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n processSync(file) {\n /** @type {boolean} */\n let complete = false\n /** @type {VFileWithOutput | undefined} */\n let result\n\n this.freeze()\n assertParser('processSync', this.parser || this.Parser)\n assertCompiler('processSync', this.compiler || this.Compiler)\n\n this.process(file, realDone)\n assertDone('processSync', 'process', complete)\n assert(result, 'we either bailed on an error or have a tree')\n\n return result\n\n /**\n * @type {ProcessCallback>}\n */\n function realDone(error, file) {\n complete = true\n bail(error)\n result = file\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * > **Note**: `run` freezes the processor if not already *frozen*.\n *\n * > **Note**: `run` performs the run phase, not other phases.\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {RunCallback} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} file\n * @param {RunCallback} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} [file]\n * @returns {Promise}\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {(\n * RunCallback |\n * Compatible\n * )} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @param {RunCallback} [done]\n * Callback (optional).\n * @returns {Promise | undefined}\n * Nothing if `done` is given.\n * Otherwise, a promise rejected with a fatal error or resolved with the\n * transformed tree.\n */\n run(tree, file, done) {\n assertNode(tree)\n this.freeze()\n\n const transformers = this.transformers\n\n if (!done && typeof file === 'function') {\n done = file\n file = undefined\n }\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {(\n * ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n * undefined\n * )} resolve\n * @param {(error: Error) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n assert(\n typeof file !== 'function',\n '`file` can’t be a `done` anymore, we checked'\n )\n const realFile = vfile(file)\n transformers.run(tree, realFile, realDone)\n\n /**\n * @param {Error | undefined} error\n * @param {Node} outputTree\n * @param {VFile} file\n * @returns {undefined}\n */\n function realDone(error, outputTree, file) {\n const resultingTree =\n /** @type {TailTree extends undefined ? Node : TailTree} */ (\n outputTree || tree\n )\n\n if (error) {\n reject(error)\n } else if (resolve) {\n resolve(resultingTree)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, resultingTree, file)\n }\n }\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `runSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `runSync` performs the run phase, not other phases.\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {TailTree extends undefined ? Node : TailTree}\n * Transformed tree.\n */\n runSync(tree, file) {\n /** @type {boolean} */\n let complete = false\n /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n let result\n\n this.run(tree, file, realDone)\n\n assertDone('runSync', 'run', complete)\n assert(result, 'we either bailed on an error or have a tree')\n return result\n\n /**\n * @type {RunCallback}\n */\n function realDone(error, tree) {\n bail(error)\n result = tree\n complete = true\n }\n }\n\n /**\n * Compile a syntax tree.\n *\n * > **Note**: `stringify` freezes the processor if not already *frozen*.\n *\n * > **Note**: `stringify` performs the stringify phase, not the run phase\n * > or other phases.\n *\n * @param {CompileTree extends undefined ? Node : CompileTree} tree\n * Tree to compile.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {CompileResult extends undefined ? Value : CompileResult}\n * Textual representation of the tree (see note).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n stringify(tree, file) {\n this.freeze()\n const realFile = vfile(file)\n const compiler = this.compiler || this.Compiler\n assertCompiler('stringify', compiler)\n assertNode(tree)\n\n return compiler(tree, realFile)\n }\n\n /**\n * Configure the processor to use a plugin, a list of usable values, or a\n * preset.\n *\n * If the processor is already using a plugin, the previous plugin\n * configuration is changed based on the options that are passed in.\n * In other words, the plugin is not added a second time.\n *\n * > **Note**: `use` cannot be called on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * @example\n * There are many ways to pass plugins to `.use()`.\n * This example gives an overview:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * unified()\n * // Plugin with options:\n * .use(pluginA, {x: true, y: true})\n * // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n * .use(pluginA, {y: false, z: true})\n * // Plugins:\n * .use([pluginB, pluginC])\n * // Two plugins, the second with options:\n * .use([pluginD, [pluginE, {}]])\n * // Preset with plugins and settings:\n * .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n * // Settings only:\n * .use({settings: {position: false}})\n * ```\n *\n * @template {Array} [Parameters=[]]\n * @template {Node | string | undefined} [Input=undefined]\n * @template [Output=Input]\n *\n * @overload\n * @param {Preset | null | undefined} [preset]\n * @returns {Processor}\n *\n * @overload\n * @param {PluggableList} list\n * @returns {Processor}\n *\n * @overload\n * @param {Plugin} plugin\n * @param {...(Parameters | [boolean])} parameters\n * @returns {UsePlugin}\n *\n * @param {PluggableList | Plugin | Preset | null | undefined} value\n * Usable value.\n * @param {...unknown} parameters\n * Parameters, when a plugin is given as a usable value.\n * @returns {Processor}\n * Current processor.\n */\n use(value, ...parameters) {\n const attachers = this.attachers\n const namespace = this.namespace\n\n assertUnfrozen('use', this.frozen)\n\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'function') {\n addPlugin(value, parameters)\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n addList(value)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n\n return this\n\n /**\n * @param {Pluggable} value\n * @returns {undefined}\n */\n function add(value) {\n if (typeof value === 'function') {\n addPlugin(value, [])\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n const [plugin, ...parameters] =\n /** @type {PluginTuple>} */ (value)\n addPlugin(plugin, parameters)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n }\n\n /**\n * @param {Preset} result\n * @returns {undefined}\n */\n function addPreset(result) {\n if (!('plugins' in result) && !('settings' in result)) {\n throw new Error(\n 'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n )\n }\n\n addList(result.plugins)\n\n if (result.settings) {\n namespace.settings = extend(true, namespace.settings, result.settings)\n }\n }\n\n /**\n * @param {PluggableList | null | undefined} plugins\n * @returns {undefined}\n */\n function addList(plugins) {\n let index = -1\n\n if (plugins === null || plugins === undefined) {\n // Empty.\n } else if (Array.isArray(plugins)) {\n while (++index < plugins.length) {\n const thing = plugins[index]\n add(thing)\n }\n } else {\n throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n }\n }\n\n /**\n * @param {Plugin} plugin\n * @param {Array} parameters\n * @returns {undefined}\n */\n function addPlugin(plugin, parameters) {\n let index = -1\n let entryIndex = -1\n\n while (++index < attachers.length) {\n if (attachers[index][0] === plugin) {\n entryIndex = index\n break\n }\n }\n\n if (entryIndex === -1) {\n attachers.push([plugin, ...parameters])\n }\n // Only set if there was at least a `primary` value, otherwise we’d change\n // `arguments.length`.\n else if (parameters.length > 0) {\n let [primary, ...rest] = parameters\n const currentPrimary = attachers[entryIndex][1]\n if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n primary = extend(true, currentPrimary, primary)\n }\n\n attachers[entryIndex] = [plugin, primary, ...rest]\n }\n }\n }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n * This example shows how a new processor can be created (from `remark`) and linked\n * to **stdin**(4) and **stdout**(4).\n *\n * ```js\n * import process from 'node:process'\n * import concatStream from 'concat-stream'\n * import {remark} from 'remark'\n *\n * process.stdin.pipe(\n * concatStream(function (buf) {\n * process.stdout.write(String(remark().processSync(buf)))\n * })\n * )\n * ```\n *\n * @returns\n * New *unfrozen* processor (`processor`).\n *\n * This processor is configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `parser`')\n }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `compiler`')\n }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n if (frozen) {\n throw new Error(\n 'Cannot call `' +\n name +\n '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n )\n }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n // type-coverage:ignore-next-line\n if (!isPlainObj(node) || typeof node.type !== 'string') {\n throw new TypeError('Expected node, got `' + node + '`')\n // Fine.\n }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n if (!complete) {\n throw new Error(\n '`' + name + '` finished async. Use `' + asyncName + '` instead'\n )\n }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'message' in value &&\n 'messages' in value\n )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","import '../assets/NcRichText-D0xtzoWq.css';\nimport { toString } from \"mdast-util-to-string\";\nimport rehypeExternalLinks from \"rehype-external-links\";\nimport rehype2react from \"rehype-react\";\nimport breaks from \"remark-breaks\";\nimport remarkParse from \"remark-parse\";\nimport remark2rehype from \"remark-rehype\";\nimport remarkUnlinkProtocols from \"remark-unlink-protocols\";\nimport { unified } from \"unified\";\nimport { defineComponent, ref } from \"vue\";\nimport { RouterLink } from \"vue-router\";\nimport { N as NcCheckboxRadioSwitch } from \"./NcCheckboxRadioSwitch-flYu6ojL.mjs\";\nimport { getCurrentUser } from \"@nextcloud/auth\";\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport { getSharingToken } from \"@nextcloud/sharing/public\";\nimport { N as NcReferenceWidget } from \"./NcReferenceWidget-C0US5iQ0.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { U as URL_PATTERN, p as parseUrl, r as remarkAutolink, g as getRoute, N as NcRichTextExternalLink } from \"./autolink-BoBR7PZC.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { N as NcButton } from \"./NcButton-DAGirW_B.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-Bui9PhAS.mjs\";\nimport { u as useCopy } from \"./useCopy-B3ugZOgV.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { u } from \"unist-builder\";\nimport { visitParents, EXIT, SKIP } from \"unist-util-visit-parents\";\nconst _sfc_main$2 = {\n name: \"NcReferenceList\",\n components: {\n NcReferenceWidget\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n text: {\n type: String,\n default: \"\"\n },\n referenceData: {\n type: Array,\n default: null\n },\n limit: {\n type: Number,\n default: 1\n },\n displayFallback: {\n type: Boolean,\n default: false\n },\n interactive: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n interactiveOptIn: {\n type: Boolean,\n default: false\n }\n },\n data() {\n return {\n references: null,\n loading: true\n };\n },\n computed: {\n isVisible() {\n return this.loading || this.displayedReferences.length !== 0;\n },\n values() {\n if (this.referenceData) {\n return this.referenceData;\n }\n if (this.displayFallback && !this.loading && !this.references) {\n return [this.fallbackReference];\n }\n return this.references ? Object.values(this.references) : [];\n },\n firstReference() {\n return this.values[0] ?? null;\n },\n displayedReferences() {\n return this.values.filter(Boolean).slice(0, this.limit);\n },\n fallbackReference() {\n return {\n accessible: true,\n openGraphObject: {\n id: this.text,\n link: this.text,\n name: this.text\n },\n richObjectType: \"open-graph\"\n };\n }\n },\n watch: {\n text: \"fetch\"\n },\n mounted() {\n this.fetch();\n },\n methods: {\n fetch() {\n this.loading = true;\n if (this.referenceData) {\n this.references = null;\n this.loading = false;\n return;\n }\n if (!new RegExp(URL_PATTERN).exec(this.text)) {\n this.references = null;\n this.loading = false;\n return;\n }\n this.resolve().then((response) => {\n this.references = response.data.ocs.data.references;\n this.loading = false;\n this.$emit(\"loaded\");\n }).catch((error) => {\n logger.error(\"Failed to extract references\", { error });\n this.loading = false;\n this.$emit(\"loaded\");\n });\n },\n resolve() {\n const match = new RegExp(URL_PATTERN).exec(this.text.trim());\n const isPublic = getCurrentUser() === null;\n if (this.limit === 1 && match) {\n return isPublic ? axios.get(generateOcsUrl(\"references/resolvePublic\") + `?reference=${encodeURIComponent(match[0])}&sharingToken=${getSharingToken()}`) : axios.get(generateOcsUrl(\"references/resolve\") + `?reference=${encodeURIComponent(match[0])}`);\n }\n return isPublic ? axios.post(generateOcsUrl(\"references/extractPublic\"), {\n text: this.text,\n resolve: true,\n limit: this.limit,\n sharingToken: getSharingToken()\n }) : axios.post(generateOcsUrl(\"references/extract\"), {\n text: this.text,\n resolve: true,\n limit: this.limit\n });\n }\n }\n};\nvar _sfc_render$2 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _vm.isVisible ? _c(\"div\", { staticClass: \"widgets--list\", class: { \"icon-loading\": _vm.loading } }, _vm._l(_vm.displayedReferences, function(reference) {\n return _c(\"NcReferenceWidget\", { key: reference.openGraphObject?.id, attrs: { \"reference\": reference, \"interactive\": _vm.interactive, \"interactive-opt-in\": _vm.interactiveOptIn } });\n }), 1) : _vm._e();\n};\nvar _sfc_staticRenderFns$2 = [];\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$2,\n _sfc_render$2,\n _sfc_staticRenderFns$2,\n false,\n null,\n \"a50e616b\"\n);\nconst NcReferenceList = __component__$2.exports;\nfunction ccount(value, character) {\n const source = String(value);\n if (typeof character !== \"string\") {\n throw new TypeError(\"Expected character\");\n }\n let count = 0;\n let index = source.indexOf(character);\n while (index !== -1) {\n count++;\n index = source.indexOf(character, index + character.length);\n }\n return count;\n}\nfunction ok$1() {\n}\nconst asciiAlpha = regexCheck(/[A-Za-z]/);\nconst asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\nfunction asciiControl(code2) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code2 !== null && (code2 < 32 || code2 === 127)\n );\n}\nfunction markdownLineEnding(code2) {\n return code2 !== null && code2 < -2;\n}\nfunction markdownLineEndingOrSpace(code2) {\n return code2 !== null && (code2 < 0 || code2 === 32);\n}\nfunction markdownSpace(code2) {\n return code2 === -2 || code2 === -1 || code2 === 32;\n}\nconst unicodePunctuation = regexCheck(new RegExp(\"\\\\p{P}|\\\\p{S}\", \"u\"));\nconst unicodeWhitespace = regexCheck(/\\s/);\nfunction regexCheck(regex) {\n return check;\n function check(code2) {\n return code2 !== null && code2 > -1 && regex.test(String.fromCharCode(code2));\n }\n}\nfunction escapeStringRegexp(string) {\n if (typeof string !== \"string\") {\n throw new TypeError(\"Expected a string\");\n }\n return string.replace(/[|\\\\{}()[\\]^$+*?.]/g, \"\\\\$&\").replace(/-/g, \"\\\\x2d\");\n}\nconst convert = (\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n (function(test) {\n if (test === null || test === void 0) {\n return ok;\n }\n if (typeof test === \"function\") {\n return castFactory(test);\n }\n if (typeof test === \"object\") {\n return Array.isArray(test) ? anyFactory(test) : (\n // Cast because `ReadonlyArray` goes into the above but `isArray`\n // narrows to `Array`.\n propertiesFactory(\n /** @type {Props} */\n test\n )\n );\n }\n if (typeof test === \"string\") {\n return typeFactory(test);\n }\n throw new Error(\"Expected function, string, or object as test\");\n })\n);\nfunction anyFactory(tests) {\n const checks = [];\n let index = -1;\n while (++index < tests.length) {\n checks[index] = convert(tests[index]);\n }\n return castFactory(any);\n function any(...parameters) {\n let index2 = -1;\n while (++index2 < checks.length) {\n if (checks[index2].apply(this, parameters)) return true;\n }\n return false;\n }\n}\nfunction propertiesFactory(check) {\n const checkAsRecord = (\n /** @type {Record} */\n check\n );\n return castFactory(all);\n function all(node) {\n const nodeAsRecord = (\n /** @type {Record} */\n /** @type {unknown} */\n node\n );\n let key;\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false;\n }\n return true;\n }\n}\nfunction typeFactory(check) {\n return castFactory(type);\n function type(node) {\n return node && node.type === check;\n }\n}\nfunction castFactory(testFunction) {\n return check;\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) && testFunction.call(\n this,\n value,\n typeof index === \"number\" ? index : void 0,\n parent || void 0\n )\n );\n }\n}\nfunction ok() {\n return true;\n}\nfunction looksLikeANode(value) {\n return value !== null && typeof value === \"object\" && \"type\" in value;\n}\nfunction findAndReplace(tree, list2, options) {\n const settings = options || {};\n const ignored = convert(settings.ignore || []);\n const pairs = toPairs(list2);\n let pairIndex = -1;\n while (++pairIndex < pairs.length) {\n visitParents(tree, \"text\", visitor);\n }\n function visitor(node, parents) {\n let index = -1;\n let grandparent;\n while (++index < parents.length) {\n const parent = parents[index];\n const siblings = grandparent ? grandparent.children : void 0;\n if (ignored(\n parent,\n siblings ? siblings.indexOf(parent) : void 0,\n grandparent\n )) {\n return;\n }\n grandparent = parent;\n }\n if (grandparent) {\n return handler(node, parents);\n }\n }\n function handler(node, parents) {\n const parent = parents[parents.length - 1];\n const find = pairs[pairIndex][0];\n const replace2 = pairs[pairIndex][1];\n let start = 0;\n const siblings = parent.children;\n const index = siblings.indexOf(node);\n let change = false;\n let nodes = [];\n find.lastIndex = 0;\n let match = find.exec(node.value);\n while (match) {\n const position = match.index;\n const matchObject = {\n index: match.index,\n input: match.input,\n stack: [...parents, node]\n };\n let value = replace2(...match, matchObject);\n if (typeof value === \"string\") {\n value = value.length > 0 ? { type: \"text\", value } : void 0;\n }\n if (value === false) {\n find.lastIndex = position + 1;\n } else {\n if (start !== position) {\n nodes.push({\n type: \"text\",\n value: node.value.slice(start, position)\n });\n }\n if (Array.isArray(value)) {\n nodes.push(...value);\n } else if (value) {\n nodes.push(value);\n }\n start = position + match[0].length;\n change = true;\n }\n if (!find.global) {\n break;\n }\n match = find.exec(node.value);\n }\n if (change) {\n if (start < node.value.length) {\n nodes.push({ type: \"text\", value: node.value.slice(start) });\n }\n parent.children.splice(index, 1, ...nodes);\n } else {\n nodes = [node];\n }\n return index + nodes.length;\n }\n}\nfunction toPairs(tupleOrList) {\n const result = [];\n if (!Array.isArray(tupleOrList)) {\n throw new TypeError(\"Expected find and replace tuple or list of tuples\");\n }\n const list2 = !tupleOrList[0] || Array.isArray(tupleOrList[0]) ? tupleOrList : [tupleOrList];\n let index = -1;\n while (++index < list2.length) {\n const tuple = list2[index];\n result.push([toExpression(tuple[0]), toFunction(tuple[1])]);\n }\n return result;\n}\nfunction toExpression(find) {\n return typeof find === \"string\" ? new RegExp(escapeStringRegexp(find), \"g\") : find;\n}\nfunction toFunction(replace2) {\n return typeof replace2 === \"function\" ? replace2 : function() {\n return replace2;\n };\n}\nconst inConstruct = \"phrasing\";\nconst notInConstruct = [\"autolink\", \"link\", \"image\", \"label\"];\nfunction gfmAutolinkLiteralFromMarkdown() {\n return {\n transforms: [transformGfmAutolinkLiterals],\n enter: {\n literalAutolink: enterLiteralAutolink,\n literalAutolinkEmail: enterLiteralAutolinkValue,\n literalAutolinkHttp: enterLiteralAutolinkValue,\n literalAutolinkWww: enterLiteralAutolinkValue\n },\n exit: {\n literalAutolink: exitLiteralAutolink,\n literalAutolinkEmail: exitLiteralAutolinkEmail,\n literalAutolinkHttp: exitLiteralAutolinkHttp,\n literalAutolinkWww: exitLiteralAutolinkWww\n }\n };\n}\nfunction gfmAutolinkLiteralToMarkdown() {\n return {\n unsafe: [\n {\n character: \"@\",\n before: \"[+\\\\-.\\\\w]\",\n after: \"[\\\\-.\\\\w]\",\n inConstruct,\n notInConstruct\n },\n {\n character: \".\",\n before: \"[Ww]\",\n after: \"[\\\\-.\\\\w]\",\n inConstruct,\n notInConstruct\n },\n {\n character: \":\",\n before: \"[ps]\",\n after: \"\\\\/\",\n inConstruct,\n notInConstruct\n }\n ]\n };\n}\nfunction enterLiteralAutolink(token) {\n this.enter({ type: \"link\", title: null, url: \"\", children: [] }, token);\n}\nfunction enterLiteralAutolinkValue(token) {\n this.config.enter.autolinkProtocol.call(this, token);\n}\nfunction exitLiteralAutolinkHttp(token) {\n this.config.exit.autolinkProtocol.call(this, token);\n}\nfunction exitLiteralAutolinkWww(token) {\n this.config.exit.data.call(this, token);\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"link\");\n node.url = \"http://\" + this.sliceSerialize(token);\n}\nfunction exitLiteralAutolinkEmail(token) {\n this.config.exit.autolinkEmail.call(this, token);\n}\nfunction exitLiteralAutolink(token) {\n this.exit(token);\n}\nfunction transformGfmAutolinkLiterals(tree) {\n findAndReplace(\n tree,\n [\n [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n [/([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/g, findEmail]\n ],\n { ignore: [\"link\", \"linkReference\"] }\n );\n}\nfunction findUrl(_, protocol, domain2, path2, match) {\n let prefix = \"\";\n if (!previous(match)) {\n return false;\n }\n if (/^w/i.test(protocol)) {\n domain2 = protocol + domain2;\n protocol = \"\";\n prefix = \"http://\";\n }\n if (!isCorrectDomain(domain2)) {\n return false;\n }\n const parts = splitUrl(domain2 + path2);\n if (!parts[0]) return false;\n const result = {\n type: \"link\",\n title: null,\n url: prefix + protocol + parts[0],\n children: [{ type: \"text\", value: protocol + parts[0] }]\n };\n if (parts[1]) {\n return [result, { type: \"text\", value: parts[1] }];\n }\n return result;\n}\nfunction findEmail(_, atext, label, match) {\n if (\n // Not an expected previous character.\n !previous(match, true) || // Label ends in not allowed character.\n /[-\\d_]$/.test(label)\n ) {\n return false;\n }\n return {\n type: \"link\",\n title: null,\n url: \"mailto:\" + atext + \"@\" + label,\n children: [{ type: \"text\", value: atext + \"@\" + label }]\n };\n}\nfunction isCorrectDomain(domain2) {\n const parts = domain2.split(\".\");\n if (parts.length < 2 || parts[parts.length - 1] && (/_/.test(parts[parts.length - 1]) || !/[a-zA-Z\\d]/.test(parts[parts.length - 1])) || parts[parts.length - 2] && (/_/.test(parts[parts.length - 2]) || !/[a-zA-Z\\d]/.test(parts[parts.length - 2]))) {\n return false;\n }\n return true;\n}\nfunction splitUrl(url) {\n const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url);\n if (!trailExec) {\n return [url, void 0];\n }\n url = url.slice(0, trailExec.index);\n let trail2 = trailExec[0];\n let closingParenIndex = trail2.indexOf(\")\");\n const openingParens = ccount(url, \"(\");\n let closingParens = ccount(url, \")\");\n while (closingParenIndex !== -1 && openingParens > closingParens) {\n url += trail2.slice(0, closingParenIndex + 1);\n trail2 = trail2.slice(closingParenIndex + 1);\n closingParenIndex = trail2.indexOf(\")\");\n closingParens++;\n }\n return [url, trail2];\n}\nfunction previous(match, email) {\n const code2 = match.input.charCodeAt(match.index - 1);\n return (match.index === 0 || unicodeWhitespace(code2) || unicodePunctuation(code2)) && (!email || code2 !== 47);\n}\nfunction normalizeIdentifier(value) {\n return value.replace(/[\\t\\n\\r ]+/g, \" \").replace(/^ | $/g, \"\").toLowerCase().toUpperCase();\n}\nfootnoteReference.peek = footnoteReferencePeek;\nfunction gfmFootnoteFromMarkdown() {\n return {\n enter: {\n gfmFootnoteDefinition: enterFootnoteDefinition,\n gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n gfmFootnoteCall: enterFootnoteCall,\n gfmFootnoteCallString: enterFootnoteCallString\n },\n exit: {\n gfmFootnoteDefinition: exitFootnoteDefinition,\n gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n gfmFootnoteCall: exitFootnoteCall,\n gfmFootnoteCallString: exitFootnoteCallString\n }\n };\n}\nfunction gfmFootnoteToMarkdown() {\n return {\n // This is on by default already.\n unsafe: [{ character: \"[\", inConstruct: [\"phrasing\", \"label\", \"reference\"] }],\n handlers: { footnoteDefinition, footnoteReference }\n };\n}\nfunction enterFootnoteDefinition(token) {\n this.enter(\n { type: \"footnoteDefinition\", identifier: \"\", label: \"\", children: [] },\n token\n );\n}\nfunction enterFootnoteDefinitionLabelString() {\n this.buffer();\n}\nfunction exitFootnoteDefinitionLabelString(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"footnoteDefinition\");\n node.label = label;\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase();\n}\nfunction exitFootnoteDefinition(token) {\n this.exit(token);\n}\nfunction enterFootnoteCall(token) {\n this.enter({ type: \"footnoteReference\", identifier: \"\", label: \"\" }, token);\n}\nfunction enterFootnoteCallString() {\n this.buffer();\n}\nfunction exitFootnoteCallString(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"footnoteReference\");\n node.label = label;\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase();\n}\nfunction exitFootnoteCall(token) {\n this.exit(token);\n}\nfunction footnoteReference(node, _, state, info) {\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[^\");\n const exit2 = state.enter(\"footnoteReference\");\n const subexit = state.enter(\"reference\");\n value += tracker.move(\n state.safe(state.associationId(node), {\n ...tracker.current(),\n before: value,\n after: \"]\"\n })\n );\n subexit();\n exit2();\n value += tracker.move(\"]\");\n return value;\n}\nfunction footnoteReferencePeek() {\n return \"[\";\n}\nfunction footnoteDefinition(node, _, state, info) {\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[^\");\n const exit2 = state.enter(\"footnoteDefinition\");\n const subexit = state.enter(\"label\");\n value += tracker.move(\n state.safe(state.associationId(node), {\n ...tracker.current(),\n before: value,\n after: \"]\"\n })\n );\n subexit();\n value += tracker.move(\n \"]:\" + (node.children && node.children.length > 0 ? \" \" : \"\")\n );\n tracker.shift(4);\n value += tracker.move(\n state.indentLines(state.containerFlow(node, tracker.current()), map$2)\n );\n exit2();\n return value;\n}\nfunction map$2(line, index, blank) {\n if (index === 0) {\n return line;\n }\n return (blank ? \"\" : \" \") + line;\n}\nconst constructsWithoutStrikethrough = [\n \"autolink\",\n \"destinationLiteral\",\n \"destinationRaw\",\n \"reference\",\n \"titleQuote\",\n \"titleApostrophe\"\n];\nhandleDelete.peek = peekDelete;\nfunction gfmStrikethroughFromMarkdown() {\n return {\n canContainEols: [\"delete\"],\n enter: { strikethrough: enterStrikethrough },\n exit: { strikethrough: exitStrikethrough }\n };\n}\nfunction gfmStrikethroughToMarkdown() {\n return {\n unsafe: [\n {\n character: \"~\",\n inConstruct: \"phrasing\",\n notInConstruct: constructsWithoutStrikethrough\n }\n ],\n handlers: { delete: handleDelete }\n };\n}\nfunction enterStrikethrough(token) {\n this.enter({ type: \"delete\", children: [] }, token);\n}\nfunction exitStrikethrough(token) {\n this.exit(token);\n}\nfunction handleDelete(node, _, state, info) {\n const tracker = state.createTracker(info);\n const exit2 = state.enter(\"strikethrough\");\n let value = tracker.move(\"~~\");\n value += state.containerPhrasing(node, {\n ...tracker.current(),\n before: value,\n after: \"~\"\n });\n value += tracker.move(\"~~\");\n exit2();\n return value;\n}\nfunction peekDelete() {\n return \"~\";\n}\nfunction markdownTable(table, options = {}) {\n const align = (options.align || []).concat();\n const stringLength = options.stringLength || defaultStringLength;\n const alignments = [];\n const cellMatrix = [];\n const sizeMatrix = [];\n const longestCellByColumn = [];\n let mostCellsPerRow = 0;\n let rowIndex = -1;\n while (++rowIndex < table.length) {\n const row2 = [];\n const sizes2 = [];\n let columnIndex2 = -1;\n if (table[rowIndex].length > mostCellsPerRow) {\n mostCellsPerRow = table[rowIndex].length;\n }\n while (++columnIndex2 < table[rowIndex].length) {\n const cell = serialize(table[rowIndex][columnIndex2]);\n if (options.alignDelimiters !== false) {\n const size = stringLength(cell);\n sizes2[columnIndex2] = size;\n if (longestCellByColumn[columnIndex2] === void 0 || size > longestCellByColumn[columnIndex2]) {\n longestCellByColumn[columnIndex2] = size;\n }\n }\n row2.push(cell);\n }\n cellMatrix[rowIndex] = row2;\n sizeMatrix[rowIndex] = sizes2;\n }\n let columnIndex = -1;\n if (typeof align === \"object\" && \"length\" in align) {\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = toAlignment(align[columnIndex]);\n }\n } else {\n const code2 = toAlignment(align);\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = code2;\n }\n }\n columnIndex = -1;\n const row = [];\n const sizes = [];\n while (++columnIndex < mostCellsPerRow) {\n const code2 = alignments[columnIndex];\n let before = \"\";\n let after = \"\";\n if (code2 === 99) {\n before = \":\";\n after = \":\";\n } else if (code2 === 108) {\n before = \":\";\n } else if (code2 === 114) {\n after = \":\";\n }\n let size = options.alignDelimiters === false ? 1 : Math.max(\n 1,\n longestCellByColumn[columnIndex] - before.length - after.length\n );\n const cell = before + \"-\".repeat(size) + after;\n if (options.alignDelimiters !== false) {\n size = before.length + size + after.length;\n if (size > longestCellByColumn[columnIndex]) {\n longestCellByColumn[columnIndex] = size;\n }\n sizes[columnIndex] = size;\n }\n row[columnIndex] = cell;\n }\n cellMatrix.splice(1, 0, row);\n sizeMatrix.splice(1, 0, sizes);\n rowIndex = -1;\n const lines = [];\n while (++rowIndex < cellMatrix.length) {\n const row2 = cellMatrix[rowIndex];\n const sizes2 = sizeMatrix[rowIndex];\n columnIndex = -1;\n const line = [];\n while (++columnIndex < mostCellsPerRow) {\n const cell = row2[columnIndex] || \"\";\n let before = \"\";\n let after = \"\";\n if (options.alignDelimiters !== false) {\n const size = longestCellByColumn[columnIndex] - (sizes2[columnIndex] || 0);\n const code2 = alignments[columnIndex];\n if (code2 === 114) {\n before = \" \".repeat(size);\n } else if (code2 === 99) {\n if (size % 2) {\n before = \" \".repeat(size / 2 + 0.5);\n after = \" \".repeat(size / 2 - 0.5);\n } else {\n before = \" \".repeat(size / 2);\n after = before;\n }\n } else {\n after = \" \".repeat(size);\n }\n }\n if (options.delimiterStart !== false && !columnIndex) {\n line.push(\"|\");\n }\n if (options.padding !== false && // Don’t add the opening space if we’re not aligning and the cell is\n // empty: there will be a closing space.\n !(options.alignDelimiters === false && cell === \"\") && (options.delimiterStart !== false || columnIndex)) {\n line.push(\" \");\n }\n if (options.alignDelimiters !== false) {\n line.push(before);\n }\n line.push(cell);\n if (options.alignDelimiters !== false) {\n line.push(after);\n }\n if (options.padding !== false) {\n line.push(\" \");\n }\n if (options.delimiterEnd !== false || columnIndex !== mostCellsPerRow - 1) {\n line.push(\"|\");\n }\n }\n lines.push(\n options.delimiterEnd === false ? line.join(\"\").replace(/ +$/, \"\") : line.join(\"\")\n );\n }\n return lines.join(\"\\n\");\n}\nfunction serialize(value) {\n return value === null || value === void 0 ? \"\" : String(value);\n}\nfunction defaultStringLength(value) {\n return value.length;\n}\nfunction toAlignment(value) {\n const code2 = typeof value === \"string\" ? value.codePointAt(0) : 0;\n return code2 === 67 || code2 === 99 ? 99 : code2 === 76 || code2 === 108 ? 108 : code2 === 82 || code2 === 114 ? 114 : 0;\n}\nfunction blockquote(node, _, state, info) {\n const exit2 = state.enter(\"blockquote\");\n const tracker = state.createTracker(info);\n tracker.move(\"> \");\n tracker.shift(2);\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map$1\n );\n exit2();\n return value;\n}\nfunction map$1(line, _, blank) {\n return \">\" + (blank ? \"\" : \" \") + line;\n}\nfunction patternInScope(stack, pattern) {\n return listInScope(stack, pattern.inConstruct, true) && !listInScope(stack, pattern.notInConstruct, false);\n}\nfunction listInScope(stack, list2, none) {\n if (typeof list2 === \"string\") {\n list2 = [list2];\n }\n if (!list2 || list2.length === 0) {\n return none;\n }\n let index = -1;\n while (++index < list2.length) {\n if (stack.includes(list2[index])) {\n return true;\n }\n }\n return false;\n}\nfunction hardBreak(_, _1, state, info) {\n let index = -1;\n while (++index < state.unsafe.length) {\n if (state.unsafe[index].character === \"\\n\" && patternInScope(state.stack, state.unsafe[index])) {\n return /[ \\t]/.test(info.before) ? \"\" : \" \";\n }\n }\n return \"\\\\\\n\";\n}\nfunction longestStreak(value, substring) {\n const source = String(value);\n let index = source.indexOf(substring);\n let expected = index;\n let count = 0;\n let max = 0;\n if (typeof substring !== \"string\") {\n throw new TypeError(\"Expected substring\");\n }\n while (index !== -1) {\n if (index === expected) {\n if (++count > max) {\n max = count;\n }\n } else {\n count = 1;\n }\n expected = index + substring.length;\n index = source.indexOf(substring, expected);\n }\n return max;\n}\nfunction formatCodeAsIndented(node, state) {\n return Boolean(\n state.options.fences === false && node.value && // If there’s no info…\n !node.lang && // And there’s a non-whitespace character…\n /[^ \\r\\n]/.test(node.value) && // And the value doesn’t start or end in a blank…\n !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n );\n}\nfunction checkFence(state) {\n const marker = state.options.fence || \"`\";\n if (marker !== \"`\" && marker !== \"~\") {\n throw new Error(\n \"Cannot serialize code with `\" + marker + \"` for `options.fence`, expected `` ` `` or `~`\"\n );\n }\n return marker;\n}\nfunction code$1(node, _, state, info) {\n const marker = checkFence(state);\n const raw = node.value || \"\";\n const suffix = marker === \"`\" ? \"GraveAccent\" : \"Tilde\";\n if (formatCodeAsIndented(node, state)) {\n const exit3 = state.enter(\"codeIndented\");\n const value2 = state.indentLines(raw, map);\n exit3();\n return value2;\n }\n const tracker = state.createTracker(info);\n const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3));\n const exit2 = state.enter(\"codeFenced\");\n let value = tracker.move(sequence);\n if (node.lang) {\n const subexit = state.enter(`codeFencedLang${suffix}`);\n value += tracker.move(\n state.safe(node.lang, {\n before: value,\n after: \" \",\n encode: [\"`\"],\n ...tracker.current()\n })\n );\n subexit();\n }\n if (node.lang && node.meta) {\n const subexit = state.enter(`codeFencedMeta${suffix}`);\n value += tracker.move(\" \");\n value += tracker.move(\n state.safe(node.meta, {\n before: value,\n after: \"\\n\",\n encode: [\"`\"],\n ...tracker.current()\n })\n );\n subexit();\n }\n value += tracker.move(\"\\n\");\n if (raw) {\n value += tracker.move(raw + \"\\n\");\n }\n value += tracker.move(sequence);\n exit2();\n return value;\n}\nfunction map(line, _, blank) {\n return (blank ? \"\" : \" \") + line;\n}\nfunction checkQuote(state) {\n const marker = state.options.quote || '\"';\n if (marker !== '\"' && marker !== \"'\") {\n throw new Error(\n \"Cannot serialize title with `\" + marker + \"` for `options.quote`, expected `\\\"`, or `'`\"\n );\n }\n return marker;\n}\nfunction definition(node, _, state, info) {\n const quote = checkQuote(state);\n const suffix = quote === '\"' ? \"Quote\" : \"Apostrophe\";\n const exit2 = state.enter(\"definition\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[\");\n value += tracker.move(\n state.safe(state.associationId(node), {\n before: value,\n after: \"]\",\n ...tracker.current()\n })\n );\n value += tracker.move(\"]: \");\n subexit();\n if (\n // If there’s no url, or…\n !node.url || // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter(\"destinationLiteral\");\n value += tracker.move(\"<\");\n value += tracker.move(\n state.safe(node.url, { before: value, after: \">\", ...tracker.current() })\n );\n value += tracker.move(\">\");\n } else {\n subexit = state.enter(\"destinationRaw\");\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? \" \" : \"\\n\",\n ...tracker.current()\n })\n );\n }\n subexit();\n if (node.title) {\n subexit = state.enter(`title${suffix}`);\n value += tracker.move(\" \" + quote);\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n );\n value += tracker.move(quote);\n subexit();\n }\n exit2();\n return value;\n}\nfunction checkEmphasis(state) {\n const marker = state.options.emphasis || \"*\";\n if (marker !== \"*\" && marker !== \"_\") {\n throw new Error(\n \"Cannot serialize emphasis with `\" + marker + \"` for `options.emphasis`, expected `*`, or `_`\"\n );\n }\n return marker;\n}\nfunction encodeCharacterReference(code2) {\n return \"&#x\" + code2.toString(16).toUpperCase() + \";\";\n}\nfunction classifyCharacter(code2) {\n if (code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)) {\n return 1;\n }\n if (unicodePunctuation(code2)) {\n return 2;\n }\n}\nfunction encodeInfo(outside, inside, marker) {\n const outsideKind = classifyCharacter(outside);\n const insideKind = classifyCharacter(inside);\n if (outsideKind === void 0) {\n return insideKind === void 0 ? (\n // Letter inside:\n // we have to encode *both* letters for `_` as it is looser.\n // it already forms for `*` (and GFMs `~`).\n marker === \"_\" ? { inside: true, outside: true } : { inside: false, outside: false }\n ) : insideKind === 1 ? (\n // Whitespace inside: encode both (letter, whitespace).\n { inside: true, outside: true }\n ) : (\n // Punctuation inside: encode outer (letter)\n { inside: false, outside: true }\n );\n }\n if (outsideKind === 1) {\n return insideKind === void 0 ? (\n // Letter inside: already forms.\n { inside: false, outside: false }\n ) : insideKind === 1 ? (\n // Whitespace inside: encode both (whitespace).\n { inside: true, outside: true }\n ) : (\n // Punctuation inside: already forms.\n { inside: false, outside: false }\n );\n }\n return insideKind === void 0 ? (\n // Letter inside: already forms.\n { inside: false, outside: false }\n ) : insideKind === 1 ? (\n // Whitespace inside: encode inner (whitespace).\n { inside: true, outside: false }\n ) : (\n // Punctuation inside: already forms.\n { inside: false, outside: false }\n );\n}\nemphasis.peek = emphasisPeek;\nfunction emphasis(node, _, state, info) {\n const marker = checkEmphasis(state);\n const exit2 = state.enter(\"emphasis\");\n const tracker = state.createTracker(info);\n const before = tracker.move(marker);\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n );\n const betweenHead = between.charCodeAt(0);\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n );\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1);\n }\n const betweenTail = between.charCodeAt(between.length - 1);\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker);\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail);\n }\n const after = tracker.move(marker);\n exit2();\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n };\n return before + between + after;\n}\nfunction emphasisPeek(_, _1, state) {\n return state.options.emphasis || \"*\";\n}\nfunction visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n let reverse;\n let test;\n let visitor;\n if (typeof testOrVisitor === \"function\" && typeof visitorOrReverse !== \"function\") {\n test = void 0;\n visitor = testOrVisitor;\n reverse = visitorOrReverse;\n } else {\n test = testOrVisitor;\n visitor = visitorOrReverse;\n reverse = maybeReverse;\n }\n visitParents(tree, test, overload, reverse);\n function overload(node, parents) {\n const parent = parents[parents.length - 1];\n const index = parent ? parent.children.indexOf(node) : void 0;\n return visitor(node, index, parent);\n }\n}\nfunction formatHeadingAsSetext(node, state) {\n let literalWithBreak = false;\n visit(node, function(node2) {\n if (\"value\" in node2 && /\\r?\\n|\\r/.test(node2.value) || node2.type === \"break\") {\n literalWithBreak = true;\n return EXIT;\n }\n });\n return Boolean(\n (!node.depth || node.depth < 3) && toString(node) && (state.options.setext || literalWithBreak)\n );\n}\nfunction heading(node, _, state, info) {\n const rank = Math.max(Math.min(6, node.depth || 1), 1);\n const tracker = state.createTracker(info);\n if (formatHeadingAsSetext(node, state)) {\n const exit3 = state.enter(\"headingSetext\");\n const subexit2 = state.enter(\"phrasing\");\n const value2 = state.containerPhrasing(node, {\n ...tracker.current(),\n before: \"\\n\",\n after: \"\\n\"\n });\n subexit2();\n exit3();\n return value2 + \"\\n\" + (rank === 1 ? \"=\" : \"-\").repeat(\n // The whole size…\n value2.length - // Minus the position of the character after the last EOL (or\n // 0 if there is none)…\n (Math.max(value2.lastIndexOf(\"\\r\"), value2.lastIndexOf(\"\\n\")) + 1)\n );\n }\n const sequence = \"#\".repeat(rank);\n const exit2 = state.enter(\"headingAtx\");\n const subexit = state.enter(\"phrasing\");\n tracker.move(sequence + \" \");\n let value = state.containerPhrasing(node, {\n before: \"# \",\n after: \"\\n\",\n ...tracker.current()\n });\n if (/^[\\t ]/.test(value)) {\n value = encodeCharacterReference(value.charCodeAt(0)) + value.slice(1);\n }\n value = value ? sequence + \" \" + value : sequence;\n if (state.options.closeAtx) {\n value += \" \" + sequence;\n }\n subexit();\n exit2();\n return value;\n}\nhtml.peek = htmlPeek;\nfunction html(node) {\n return node.value || \"\";\n}\nfunction htmlPeek() {\n return \"<\";\n}\nimage.peek = imagePeek;\nfunction image(node, _, state, info) {\n const quote = checkQuote(state);\n const suffix = quote === '\"' ? \"Quote\" : \"Apostrophe\";\n const exit2 = state.enter(\"image\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"![\");\n value += tracker.move(\n state.safe(node.alt, { before: value, after: \"]\", ...tracker.current() })\n );\n value += tracker.move(\"](\");\n subexit();\n if (\n // If there’s no url but there is a title…\n !node.url && node.title || // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter(\"destinationLiteral\");\n value += tracker.move(\"<\");\n value += tracker.move(\n state.safe(node.url, { before: value, after: \">\", ...tracker.current() })\n );\n value += tracker.move(\">\");\n } else {\n subexit = state.enter(\"destinationRaw\");\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? \" \" : \")\",\n ...tracker.current()\n })\n );\n }\n subexit();\n if (node.title) {\n subexit = state.enter(`title${suffix}`);\n value += tracker.move(\" \" + quote);\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n );\n value += tracker.move(quote);\n subexit();\n }\n value += tracker.move(\")\");\n exit2();\n return value;\n}\nfunction imagePeek() {\n return \"!\";\n}\nimageReference.peek = imageReferencePeek;\nfunction imageReference(node, _, state, info) {\n const type = node.referenceType;\n const exit2 = state.enter(\"imageReference\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"![\");\n const alt = state.safe(node.alt, {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n value += tracker.move(alt + \"][\");\n subexit();\n const stack = state.stack;\n state.stack = [];\n subexit = state.enter(\"reference\");\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n subexit();\n state.stack = stack;\n exit2();\n if (type === \"full\" || !alt || alt !== reference) {\n value += tracker.move(reference + \"]\");\n } else if (type === \"shortcut\") {\n value = value.slice(0, -1);\n } else {\n value += tracker.move(\"]\");\n }\n return value;\n}\nfunction imageReferencePeek() {\n return \"!\";\n}\ninlineCode.peek = inlineCodePeek;\nfunction inlineCode(node, _, state) {\n let value = node.value || \"\";\n let sequence = \"`\";\n let index = -1;\n while (new RegExp(\"(^|[^`])\" + sequence + \"([^`]|$)\").test(value)) {\n sequence += \"`\";\n }\n if (/[^ \\r\\n]/.test(value) && (/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value) || /^`|`$/.test(value))) {\n value = \" \" + value + \" \";\n }\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index];\n const expression = state.compilePattern(pattern);\n let match;\n if (!pattern.atBreak) continue;\n while (match = expression.exec(value)) {\n let position = match.index;\n if (value.charCodeAt(position) === 10 && value.charCodeAt(position - 1) === 13) {\n position--;\n }\n value = value.slice(0, position) + \" \" + value.slice(match.index + 1);\n }\n }\n return sequence + value + sequence;\n}\nfunction inlineCodePeek() {\n return \"`\";\n}\nfunction formatLinkAsAutolink(node, state) {\n const raw = toString(node);\n return Boolean(\n !state.options.resourceLink && // If there’s a url…\n node.url && // And there’s a no title…\n !node.title && // And the content of `node` is a single text node…\n node.children && node.children.length === 1 && node.children[0].type === \"text\" && // And if the url is the same as the content…\n (raw === node.url || \"mailto:\" + raw === node.url) && // And that starts w/ a protocol…\n /^[a-z][a-z+.-]+:/i.test(node.url) && // And that doesn’t contain ASCII control codes (character escapes and\n // references don’t work), space, or angle brackets…\n !/[\\0- <>\\u007F]/.test(node.url)\n );\n}\nlink.peek = linkPeek;\nfunction link(node, _, state, info) {\n const quote = checkQuote(state);\n const suffix = quote === '\"' ? \"Quote\" : \"Apostrophe\";\n const tracker = state.createTracker(info);\n let exit2;\n let subexit;\n if (formatLinkAsAutolink(node, state)) {\n const stack = state.stack;\n state.stack = [];\n exit2 = state.enter(\"autolink\");\n let value2 = tracker.move(\"<\");\n value2 += tracker.move(\n state.containerPhrasing(node, {\n before: value2,\n after: \">\",\n ...tracker.current()\n })\n );\n value2 += tracker.move(\">\");\n exit2();\n state.stack = stack;\n return value2;\n }\n exit2 = state.enter(\"link\");\n subexit = state.enter(\"label\");\n let value = tracker.move(\"[\");\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: \"](\",\n ...tracker.current()\n })\n );\n value += tracker.move(\"](\");\n subexit();\n if (\n // If there’s no url but there is a title…\n !node.url && node.title || // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter(\"destinationLiteral\");\n value += tracker.move(\"<\");\n value += tracker.move(\n state.safe(node.url, { before: value, after: \">\", ...tracker.current() })\n );\n value += tracker.move(\">\");\n } else {\n subexit = state.enter(\"destinationRaw\");\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? \" \" : \")\",\n ...tracker.current()\n })\n );\n }\n subexit();\n if (node.title) {\n subexit = state.enter(`title${suffix}`);\n value += tracker.move(\" \" + quote);\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n );\n value += tracker.move(quote);\n subexit();\n }\n value += tracker.move(\")\");\n exit2();\n return value;\n}\nfunction linkPeek(node, _, state) {\n return formatLinkAsAutolink(node, state) ? \"<\" : \"[\";\n}\nlinkReference.peek = linkReferencePeek;\nfunction linkReference(node, _, state, info) {\n const type = node.referenceType;\n const exit2 = state.enter(\"linkReference\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[\");\n const text2 = state.containerPhrasing(node, {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n value += tracker.move(text2 + \"][\");\n subexit();\n const stack = state.stack;\n state.stack = [];\n subexit = state.enter(\"reference\");\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n subexit();\n state.stack = stack;\n exit2();\n if (type === \"full\" || !text2 || text2 !== reference) {\n value += tracker.move(reference + \"]\");\n } else if (type === \"shortcut\") {\n value = value.slice(0, -1);\n } else {\n value += tracker.move(\"]\");\n }\n return value;\n}\nfunction linkReferencePeek() {\n return \"[\";\n}\nfunction checkBullet(state) {\n const marker = state.options.bullet || \"*\";\n if (marker !== \"*\" && marker !== \"+\" && marker !== \"-\") {\n throw new Error(\n \"Cannot serialize items with `\" + marker + \"` for `options.bullet`, expected `*`, `+`, or `-`\"\n );\n }\n return marker;\n}\nfunction checkBulletOther(state) {\n const bullet = checkBullet(state);\n const bulletOther = state.options.bulletOther;\n if (!bulletOther) {\n return bullet === \"*\" ? \"-\" : \"*\";\n }\n if (bulletOther !== \"*\" && bulletOther !== \"+\" && bulletOther !== \"-\") {\n throw new Error(\n \"Cannot serialize items with `\" + bulletOther + \"` for `options.bulletOther`, expected `*`, `+`, or `-`\"\n );\n }\n if (bulletOther === bullet) {\n throw new Error(\n \"Expected `bullet` (`\" + bullet + \"`) and `bulletOther` (`\" + bulletOther + \"`) to be different\"\n );\n }\n return bulletOther;\n}\nfunction checkBulletOrdered(state) {\n const marker = state.options.bulletOrdered || \".\";\n if (marker !== \".\" && marker !== \")\") {\n throw new Error(\n \"Cannot serialize items with `\" + marker + \"` for `options.bulletOrdered`, expected `.` or `)`\"\n );\n }\n return marker;\n}\nfunction checkRule(state) {\n const marker = state.options.rule || \"*\";\n if (marker !== \"*\" && marker !== \"-\" && marker !== \"_\") {\n throw new Error(\n \"Cannot serialize rules with `\" + marker + \"` for `options.rule`, expected `*`, `-`, or `_`\"\n );\n }\n return marker;\n}\nfunction list(node, parent, state, info) {\n const exit2 = state.enter(\"list\");\n const bulletCurrent = state.bulletCurrent;\n let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state);\n const bulletOther = node.ordered ? bullet === \".\" ? \")\" : \".\" : checkBulletOther(state);\n let useDifferentMarker = parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false;\n if (!node.ordered) {\n const firstListItem = node.children ? node.children[0] : void 0;\n if (\n // Bullet could be used as a thematic break marker:\n (bullet === \"*\" || bullet === \"-\") && // Empty first list item:\n firstListItem && (!firstListItem.children || !firstListItem.children[0]) && // Directly in two other list items:\n state.stack[state.stack.length - 1] === \"list\" && state.stack[state.stack.length - 2] === \"listItem\" && state.stack[state.stack.length - 3] === \"list\" && state.stack[state.stack.length - 4] === \"listItem\" && // That are each the first child.\n state.indexStack[state.indexStack.length - 1] === 0 && state.indexStack[state.indexStack.length - 2] === 0 && state.indexStack[state.indexStack.length - 3] === 0\n ) {\n useDifferentMarker = true;\n }\n if (checkRule(state) === bullet && firstListItem) {\n let index = -1;\n while (++index < node.children.length) {\n const item = node.children[index];\n if (item && item.type === \"listItem\" && item.children && item.children[0] && item.children[0].type === \"thematicBreak\") {\n useDifferentMarker = true;\n break;\n }\n }\n }\n }\n if (useDifferentMarker) {\n bullet = bulletOther;\n }\n state.bulletCurrent = bullet;\n const value = state.containerFlow(node, info);\n state.bulletLastUsed = bullet;\n state.bulletCurrent = bulletCurrent;\n exit2();\n return value;\n}\nfunction checkListItemIndent(state) {\n const style = state.options.listItemIndent || \"one\";\n if (style !== \"tab\" && style !== \"one\" && style !== \"mixed\") {\n throw new Error(\n \"Cannot serialize items with `\" + style + \"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`\"\n );\n }\n return style;\n}\nfunction listItem(node, parent, state, info) {\n const listItemIndent = checkListItemIndent(state);\n let bullet = state.bulletCurrent || checkBullet(state);\n if (parent && parent.type === \"list\" && parent.ordered) {\n bullet = (typeof parent.start === \"number\" && parent.start > -1 ? parent.start : 1) + (state.options.incrementListMarker === false ? 0 : parent.children.indexOf(node)) + bullet;\n }\n let size = bullet.length + 1;\n if (listItemIndent === \"tab\" || listItemIndent === \"mixed\" && (parent && parent.type === \"list\" && parent.spread || node.spread)) {\n size = Math.ceil(size / 4) * 4;\n }\n const tracker = state.createTracker(info);\n tracker.move(bullet + \" \".repeat(size - bullet.length));\n tracker.shift(size);\n const exit2 = state.enter(\"listItem\");\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map2\n );\n exit2();\n return value;\n function map2(line, index, blank) {\n if (index) {\n return (blank ? \"\" : \" \".repeat(size)) + line;\n }\n return (blank ? bullet : bullet + \" \".repeat(size - bullet.length)) + line;\n }\n}\nfunction paragraph(node, _, state, info) {\n const exit2 = state.enter(\"paragraph\");\n const subexit = state.enter(\"phrasing\");\n const value = state.containerPhrasing(node, info);\n subexit();\n exit2();\n return value;\n}\nconst phrasing = (\n /** @type {(node?: unknown) => node is Exclude} */\n convert([\n \"break\",\n \"delete\",\n \"emphasis\",\n // To do: next major: removed since footnotes were added to GFM.\n \"footnote\",\n \"footnoteReference\",\n \"image\",\n \"imageReference\",\n \"inlineCode\",\n // Enabled by `mdast-util-math`:\n \"inlineMath\",\n \"link\",\n \"linkReference\",\n // Enabled by `mdast-util-mdx`:\n \"mdxJsxTextElement\",\n // Enabled by `mdast-util-mdx`:\n \"mdxTextExpression\",\n \"strong\",\n \"text\",\n // Enabled by `mdast-util-directive`:\n \"textDirective\"\n ])\n);\nfunction root(node, _, state, info) {\n const hasPhrasing = node.children.some(function(d) {\n return phrasing(d);\n });\n const container = hasPhrasing ? state.containerPhrasing : state.containerFlow;\n return container.call(state, node, info);\n}\nfunction checkStrong(state) {\n const marker = state.options.strong || \"*\";\n if (marker !== \"*\" && marker !== \"_\") {\n throw new Error(\n \"Cannot serialize strong with `\" + marker + \"` for `options.strong`, expected `*`, or `_`\"\n );\n }\n return marker;\n}\nstrong.peek = strongPeek;\nfunction strong(node, _, state, info) {\n const marker = checkStrong(state);\n const exit2 = state.enter(\"strong\");\n const tracker = state.createTracker(info);\n const before = tracker.move(marker + marker);\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n );\n const betweenHead = between.charCodeAt(0);\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n );\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1);\n }\n const betweenTail = between.charCodeAt(between.length - 1);\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker);\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail);\n }\n const after = tracker.move(marker + marker);\n exit2();\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n };\n return before + between + after;\n}\nfunction strongPeek(_, _1, state) {\n return state.options.strong || \"*\";\n}\nfunction text$1(node, _, state, info) {\n return state.safe(node.value, info);\n}\nfunction checkRuleRepetition(state) {\n const repetition = state.options.ruleRepetition || 3;\n if (repetition < 3) {\n throw new Error(\n \"Cannot serialize rules with repetition `\" + repetition + \"` for `options.ruleRepetition`, expected `3` or more\"\n );\n }\n return repetition;\n}\nfunction thematicBreak(_, _1, state) {\n const value = (checkRule(state) + (state.options.ruleSpaces ? \" \" : \"\")).repeat(checkRuleRepetition(state));\n return state.options.ruleSpaces ? value.slice(0, -1) : value;\n}\nconst handle = {\n blockquote,\n break: hardBreak,\n code: code$1,\n definition,\n emphasis,\n hardBreak,\n heading,\n html,\n image,\n imageReference,\n inlineCode,\n link,\n linkReference,\n list,\n listItem,\n paragraph,\n root,\n strong,\n text: text$1,\n thematicBreak\n};\nfunction gfmTableFromMarkdown() {\n return {\n enter: {\n table: enterTable,\n tableData: enterCell,\n tableHeader: enterCell,\n tableRow: enterRow\n },\n exit: {\n codeText: exitCodeText,\n table: exitTable,\n tableData: exit,\n tableHeader: exit,\n tableRow: exit\n }\n };\n}\nfunction enterTable(token) {\n const align = token._align;\n this.enter(\n {\n type: \"table\",\n align: align.map(function(d) {\n return d === \"none\" ? null : d;\n }),\n children: []\n },\n token\n );\n this.data.inTable = true;\n}\nfunction exitTable(token) {\n this.exit(token);\n this.data.inTable = void 0;\n}\nfunction enterRow(token) {\n this.enter({ type: \"tableRow\", children: [] }, token);\n}\nfunction exit(token) {\n this.exit(token);\n}\nfunction enterCell(token) {\n this.enter({ type: \"tableCell\", children: [] }, token);\n}\nfunction exitCodeText(token) {\n let value = this.resume();\n if (this.data.inTable) {\n value = value.replace(/\\\\([\\\\|])/g, replace);\n }\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"inlineCode\");\n node.value = value;\n this.exit(token);\n}\nfunction replace($0, $1) {\n return $1 === \"|\" ? $1 : $0;\n}\nfunction gfmTableToMarkdown(options) {\n const settings = options || {};\n const padding = settings.tableCellPadding;\n const alignDelimiters = settings.tablePipeAlign;\n const stringLength = settings.stringLength;\n const around = padding ? \" \" : \"|\";\n return {\n unsafe: [\n { character: \"\\r\", inConstruct: \"tableCell\" },\n { character: \"\\n\", inConstruct: \"tableCell\" },\n // A pipe, when followed by a tab or space (padding), or a dash or colon\n // (unpadded delimiter row), could result in a table.\n { atBreak: true, character: \"|\", after: \"[\t :-]\" },\n // A pipe in a cell must be encoded.\n { character: \"|\", inConstruct: \"tableCell\" },\n // A colon must be followed by a dash, in which case it could start a\n // delimiter row.\n { atBreak: true, character: \":\", after: \"-\" },\n // A delimiter row can also start with a dash, when followed by more\n // dashes, a colon, or a pipe.\n // This is a stricter version than the built in check for lists, thematic\n // breaks, and setex heading underlines though:\n // \n { atBreak: true, character: \"-\", after: \"[:|-]\" }\n ],\n handlers: {\n inlineCode: inlineCodeWithTable,\n table: handleTable,\n tableCell: handleTableCell,\n tableRow: handleTableRow\n }\n };\n function handleTable(node, _, state, info) {\n return serializeData(handleTableAsData(node, state, info), node.align);\n }\n function handleTableRow(node, _, state, info) {\n const row = handleTableRowAsData(node, state, info);\n const value = serializeData([row]);\n return value.slice(0, value.indexOf(\"\\n\"));\n }\n function handleTableCell(node, _, state, info) {\n const exit2 = state.enter(\"tableCell\");\n const subexit = state.enter(\"phrasing\");\n const value = state.containerPhrasing(node, {\n ...info,\n before: around,\n after: around\n });\n subexit();\n exit2();\n return value;\n }\n function serializeData(matrix, align) {\n return markdownTable(matrix, {\n align,\n // @ts-expect-error: `markdown-table` types should support `null`.\n alignDelimiters,\n // @ts-expect-error: `markdown-table` types should support `null`.\n padding,\n // @ts-expect-error: `markdown-table` types should support `null`.\n stringLength\n });\n }\n function handleTableAsData(node, state, info) {\n const children = node.children;\n let index = -1;\n const result = [];\n const subexit = state.enter(\"table\");\n while (++index < children.length) {\n result[index] = handleTableRowAsData(children[index], state, info);\n }\n subexit();\n return result;\n }\n function handleTableRowAsData(node, state, info) {\n const children = node.children;\n let index = -1;\n const result = [];\n const subexit = state.enter(\"tableRow\");\n while (++index < children.length) {\n result[index] = handleTableCell(children[index], node, state, info);\n }\n subexit();\n return result;\n }\n function inlineCodeWithTable(node, parent, state) {\n let value = handle.inlineCode(node, parent, state);\n if (state.stack.includes(\"tableCell\")) {\n value = value.replace(/\\|/g, \"\\\\$&\");\n }\n return value;\n }\n}\nfunction gfmTaskListItemFromMarkdown() {\n return {\n exit: {\n taskListCheckValueChecked: exitCheck,\n taskListCheckValueUnchecked: exitCheck,\n paragraph: exitParagraphWithTaskListItem\n }\n };\n}\nfunction gfmTaskListItemToMarkdown() {\n return {\n unsafe: [{ atBreak: true, character: \"-\", after: \"[:|-]\" }],\n handlers: { listItem: listItemWithTaskListItem }\n };\n}\nfunction exitCheck(token) {\n const node = this.stack[this.stack.length - 2];\n ok$1(node.type === \"listItem\");\n node.checked = token.type === \"taskListCheckValueChecked\";\n}\nfunction exitParagraphWithTaskListItem(token) {\n const parent = this.stack[this.stack.length - 2];\n if (parent && parent.type === \"listItem\" && typeof parent.checked === \"boolean\") {\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"paragraph\");\n const head = node.children[0];\n if (head && head.type === \"text\") {\n const siblings = parent.children;\n let index = -1;\n let firstParaghraph;\n while (++index < siblings.length) {\n const sibling = siblings[index];\n if (sibling.type === \"paragraph\") {\n firstParaghraph = sibling;\n break;\n }\n }\n if (firstParaghraph === node) {\n head.value = head.value.slice(1);\n if (head.value.length === 0) {\n node.children.shift();\n } else if (node.position && head.position && typeof head.position.start.offset === \"number\") {\n head.position.start.column++;\n head.position.start.offset++;\n node.position.start = Object.assign({}, head.position.start);\n }\n }\n }\n }\n this.exit(token);\n}\nfunction listItemWithTaskListItem(node, parent, state, info) {\n const head = node.children[0];\n const checkable = typeof node.checked === \"boolean\" && head && head.type === \"paragraph\";\n const checkbox = \"[\" + (node.checked ? \"x\" : \" \") + \"] \";\n const tracker = state.createTracker(info);\n if (checkable) {\n tracker.move(checkbox);\n }\n let value = handle.listItem(node, parent, state, {\n ...info,\n ...tracker.current()\n });\n if (checkable) {\n value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check);\n }\n return value;\n function check($0) {\n return $0 + checkbox;\n }\n}\nfunction gfmFromMarkdown() {\n return [\n gfmAutolinkLiteralFromMarkdown(),\n gfmFootnoteFromMarkdown(),\n gfmStrikethroughFromMarkdown(),\n gfmTableFromMarkdown(),\n gfmTaskListItemFromMarkdown()\n ];\n}\nfunction gfmToMarkdown(options) {\n return {\n extensions: [\n gfmAutolinkLiteralToMarkdown(),\n gfmFootnoteToMarkdown(),\n gfmStrikethroughToMarkdown(),\n gfmTableToMarkdown(options),\n gfmTaskListItemToMarkdown()\n ]\n };\n}\nfunction splice(list2, start, remove, items) {\n const end = list2.length;\n let chunkStart = 0;\n let parameters;\n if (start < 0) {\n start = -start > end ? 0 : end + start;\n } else {\n start = start > end ? end : start;\n }\n remove = remove > 0 ? remove : 0;\n if (items.length < 1e4) {\n parameters = Array.from(items);\n parameters.unshift(start, remove);\n list2.splice(...parameters);\n } else {\n if (remove) list2.splice(start, remove);\n while (chunkStart < items.length) {\n parameters = items.slice(chunkStart, chunkStart + 1e4);\n parameters.unshift(start, 0);\n list2.splice(...parameters);\n chunkStart += 1e4;\n start += 1e4;\n }\n }\n}\nconst hasOwnProperty = {}.hasOwnProperty;\nfunction combineExtensions(extensions) {\n const all = {};\n let index = -1;\n while (++index < extensions.length) {\n syntaxExtension(all, extensions[index]);\n }\n return all;\n}\nfunction syntaxExtension(all, extension) {\n let hook;\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : void 0;\n const left = maybe || (all[hook] = {});\n const right = extension[hook];\n let code2;\n if (right) {\n for (code2 in right) {\n if (!hasOwnProperty.call(left, code2)) left[code2] = [];\n const value = right[code2];\n constructs(\n // @ts-expect-error Looks like a list.\n left[code2],\n Array.isArray(value) ? value : value ? [value] : []\n );\n }\n }\n }\n}\nfunction constructs(existing, list2) {\n let index = -1;\n const before = [];\n while (++index < list2.length) {\n (list2[index].add === \"after\" ? existing : before).push(list2[index]);\n }\n splice(existing, 0, 0, before);\n}\nconst wwwPrefix = {\n tokenize: tokenizeWwwPrefix,\n partial: true\n};\nconst domain = {\n tokenize: tokenizeDomain,\n partial: true\n};\nconst path = {\n tokenize: tokenizePath,\n partial: true\n};\nconst trail = {\n tokenize: tokenizeTrail,\n partial: true\n};\nconst emailDomainDotTrail = {\n tokenize: tokenizeEmailDomainDotTrail,\n partial: true\n};\nconst wwwAutolink = {\n tokenize: tokenizeWwwAutolink,\n previous: previousWww\n};\nconst protocolAutolink = {\n tokenize: tokenizeProtocolAutolink,\n previous: previousProtocol\n};\nconst emailAutolink = {\n tokenize: tokenizeEmailAutolink,\n previous: previousEmail\n};\nconst text = {};\nfunction gfmAutolinkLiteral() {\n return {\n text\n };\n}\nlet code = 48;\nwhile (code < 123) {\n text[code] = emailAutolink;\n code++;\n if (code === 58) code = 65;\n else if (code === 91) code = 97;\n}\ntext[43] = emailAutolink;\ntext[45] = emailAutolink;\ntext[46] = emailAutolink;\ntext[95] = emailAutolink;\ntext[72] = [emailAutolink, protocolAutolink];\ntext[104] = [emailAutolink, protocolAutolink];\ntext[87] = [emailAutolink, wwwAutolink];\ntext[119] = [emailAutolink, wwwAutolink];\nfunction tokenizeEmailAutolink(effects, ok2, nok) {\n const self = this;\n let dot;\n let data;\n return start;\n function start(code2) {\n if (!gfmAtext(code2) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code2);\n }\n effects.enter(\"literalAutolink\");\n effects.enter(\"literalAutolinkEmail\");\n return atext(code2);\n }\n function atext(code2) {\n if (gfmAtext(code2)) {\n effects.consume(code2);\n return atext;\n }\n if (code2 === 64) {\n effects.consume(code2);\n return emailDomain;\n }\n return nok(code2);\n }\n function emailDomain(code2) {\n if (code2 === 46) {\n return effects.check(\n emailDomainDotTrail,\n emailDomainAfter,\n emailDomainDot\n )(code2);\n }\n if (code2 === 45 || code2 === 95 || asciiAlphanumeric(code2)) {\n data = true;\n effects.consume(code2);\n return emailDomain;\n }\n return emailDomainAfter(code2);\n }\n function emailDomainDot(code2) {\n effects.consume(code2);\n dot = true;\n return emailDomain;\n }\n function emailDomainAfter(code2) {\n if (data && dot && asciiAlpha(self.previous)) {\n effects.exit(\"literalAutolinkEmail\");\n effects.exit(\"literalAutolink\");\n return ok2(code2);\n }\n return nok(code2);\n }\n}\nfunction tokenizeWwwAutolink(effects, ok2, nok) {\n const self = this;\n return wwwStart;\n function wwwStart(code2) {\n if (code2 !== 87 && code2 !== 119 || !previousWww.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code2);\n }\n effects.enter(\"literalAutolink\");\n effects.enter(\"literalAutolinkWww\");\n return effects.check(\n wwwPrefix,\n effects.attempt(domain, effects.attempt(path, wwwAfter), nok),\n nok\n )(code2);\n }\n function wwwAfter(code2) {\n effects.exit(\"literalAutolinkWww\");\n effects.exit(\"literalAutolink\");\n return ok2(code2);\n }\n}\nfunction tokenizeProtocolAutolink(effects, ok2, nok) {\n const self = this;\n let buffer = \"\";\n let seen = false;\n return protocolStart;\n function protocolStart(code2) {\n if ((code2 === 72 || code2 === 104) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events)) {\n effects.enter(\"literalAutolink\");\n effects.enter(\"literalAutolinkHttp\");\n buffer += String.fromCodePoint(code2);\n effects.consume(code2);\n return protocolPrefixInside;\n }\n return nok(code2);\n }\n function protocolPrefixInside(code2) {\n if (asciiAlpha(code2) && buffer.length < 5) {\n buffer += String.fromCodePoint(code2);\n effects.consume(code2);\n return protocolPrefixInside;\n }\n if (code2 === 58) {\n const protocol = buffer.toLowerCase();\n if (protocol === \"http\" || protocol === \"https\") {\n effects.consume(code2);\n return protocolSlashesInside;\n }\n }\n return nok(code2);\n }\n function protocolSlashesInside(code2) {\n if (code2 === 47) {\n effects.consume(code2);\n if (seen) {\n return afterProtocol;\n }\n seen = true;\n return protocolSlashesInside;\n }\n return nok(code2);\n }\n function afterProtocol(code2) {\n return code2 === null || asciiControl(code2) || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2) || unicodePunctuation(code2) ? nok(code2) : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code2);\n }\n function protocolAfter(code2) {\n effects.exit(\"literalAutolinkHttp\");\n effects.exit(\"literalAutolink\");\n return ok2(code2);\n }\n}\nfunction tokenizeWwwPrefix(effects, ok2, nok) {\n let size = 0;\n return wwwPrefixInside;\n function wwwPrefixInside(code2) {\n if ((code2 === 87 || code2 === 119) && size < 3) {\n size++;\n effects.consume(code2);\n return wwwPrefixInside;\n }\n if (code2 === 46 && size === 3) {\n effects.consume(code2);\n return wwwPrefixAfter;\n }\n return nok(code2);\n }\n function wwwPrefixAfter(code2) {\n return code2 === null ? nok(code2) : ok2(code2);\n }\n}\nfunction tokenizeDomain(effects, ok2, nok) {\n let underscoreInLastSegment;\n let underscoreInLastLastSegment;\n let seen;\n return domainInside;\n function domainInside(code2) {\n if (code2 === 46 || code2 === 95) {\n return effects.check(trail, domainAfter, domainAtPunctuation)(code2);\n }\n if (code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2) || code2 !== 45 && unicodePunctuation(code2)) {\n return domainAfter(code2);\n }\n seen = true;\n effects.consume(code2);\n return domainInside;\n }\n function domainAtPunctuation(code2) {\n if (code2 === 95) {\n underscoreInLastSegment = true;\n } else {\n underscoreInLastLastSegment = underscoreInLastSegment;\n underscoreInLastSegment = void 0;\n }\n effects.consume(code2);\n return domainInside;\n }\n function domainAfter(code2) {\n if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n return nok(code2);\n }\n return ok2(code2);\n }\n}\nfunction tokenizePath(effects, ok2) {\n let sizeOpen = 0;\n let sizeClose = 0;\n return pathInside;\n function pathInside(code2) {\n if (code2 === 40) {\n sizeOpen++;\n effects.consume(code2);\n return pathInside;\n }\n if (code2 === 41 && sizeClose < sizeOpen) {\n return pathAtPunctuation(code2);\n }\n if (code2 === 33 || code2 === 34 || code2 === 38 || code2 === 39 || code2 === 41 || code2 === 42 || code2 === 44 || code2 === 46 || code2 === 58 || code2 === 59 || code2 === 60 || code2 === 63 || code2 === 93 || code2 === 95 || code2 === 126) {\n return effects.check(trail, ok2, pathAtPunctuation)(code2);\n }\n if (code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)) {\n return ok2(code2);\n }\n effects.consume(code2);\n return pathInside;\n }\n function pathAtPunctuation(code2) {\n if (code2 === 41) {\n sizeClose++;\n }\n effects.consume(code2);\n return pathInside;\n }\n}\nfunction tokenizeTrail(effects, ok2, nok) {\n return trail2;\n function trail2(code2) {\n if (code2 === 33 || code2 === 34 || code2 === 39 || code2 === 41 || code2 === 42 || code2 === 44 || code2 === 46 || code2 === 58 || code2 === 59 || code2 === 63 || code2 === 95 || code2 === 126) {\n effects.consume(code2);\n return trail2;\n }\n if (code2 === 38) {\n effects.consume(code2);\n return trailCharRefStart;\n }\n if (code2 === 93) {\n effects.consume(code2);\n return trailBracketAfter;\n }\n if (\n // `<` is an end.\n code2 === 60 || // So is whitespace.\n code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)\n ) {\n return ok2(code2);\n }\n return nok(code2);\n }\n function trailBracketAfter(code2) {\n if (code2 === null || code2 === 40 || code2 === 91 || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)) {\n return ok2(code2);\n }\n return trail2(code2);\n }\n function trailCharRefStart(code2) {\n return asciiAlpha(code2) ? trailCharRefInside(code2) : nok(code2);\n }\n function trailCharRefInside(code2) {\n if (code2 === 59) {\n effects.consume(code2);\n return trail2;\n }\n if (asciiAlpha(code2)) {\n effects.consume(code2);\n return trailCharRefInside;\n }\n return nok(code2);\n }\n}\nfunction tokenizeEmailDomainDotTrail(effects, ok2, nok) {\n return start;\n function start(code2) {\n effects.consume(code2);\n return after;\n }\n function after(code2) {\n return asciiAlphanumeric(code2) ? nok(code2) : ok2(code2);\n }\n}\nfunction previousWww(code2) {\n return code2 === null || code2 === 40 || code2 === 42 || code2 === 95 || code2 === 91 || code2 === 93 || code2 === 126 || markdownLineEndingOrSpace(code2);\n}\nfunction previousProtocol(code2) {\n return !asciiAlpha(code2);\n}\nfunction previousEmail(code2) {\n return !(code2 === 47 || gfmAtext(code2));\n}\nfunction gfmAtext(code2) {\n return code2 === 43 || code2 === 45 || code2 === 46 || code2 === 95 || asciiAlphanumeric(code2);\n}\nfunction previousUnbalanced(events) {\n let index = events.length;\n let result = false;\n while (index--) {\n const token = events[index][1];\n if ((token.type === \"labelLink\" || token.type === \"labelImage\") && !token._balanced) {\n result = true;\n break;\n }\n if (token._gfmAutolinkLiteralWalkedInto) {\n result = false;\n break;\n }\n }\n if (events.length > 0 && !result) {\n events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true;\n }\n return result;\n}\nfunction resolveAll(constructs2, events, context) {\n const called = [];\n let index = -1;\n while (++index < constructs2.length) {\n const resolve = constructs2[index].resolveAll;\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context);\n called.push(resolve);\n }\n }\n return events;\n}\nfunction factorySpace(effects, ok2, type, max) {\n const limit = max ? max - 1 : Number.POSITIVE_INFINITY;\n let size = 0;\n return start;\n function start(code2) {\n if (markdownSpace(code2)) {\n effects.enter(type);\n return prefix(code2);\n }\n return ok2(code2);\n }\n function prefix(code2) {\n if (markdownSpace(code2) && size++ < limit) {\n effects.consume(code2);\n return prefix;\n }\n effects.exit(type);\n return ok2(code2);\n }\n}\nconst blankLine = {\n tokenize: tokenizeBlankLine,\n partial: true\n};\nfunction tokenizeBlankLine(effects, ok2, nok) {\n return start;\n function start(code2) {\n return markdownSpace(code2) ? factorySpace(effects, after, \"linePrefix\")(code2) : after(code2);\n }\n function after(code2) {\n return code2 === null || markdownLineEnding(code2) ? ok2(code2) : nok(code2);\n }\n}\nconst indent = {\n tokenize: tokenizeIndent,\n partial: true\n};\nfunction gfmFootnote() {\n return {\n document: {\n [91]: {\n tokenize: tokenizeDefinitionStart,\n continuation: {\n tokenize: tokenizeDefinitionContinuation\n },\n exit: gfmFootnoteDefinitionEnd\n }\n },\n text: {\n [91]: {\n tokenize: tokenizeGfmFootnoteCall\n },\n [93]: {\n add: \"after\",\n tokenize: tokenizePotentialGfmFootnoteCall,\n resolveTo: resolveToPotentialGfmFootnoteCall\n }\n }\n };\n}\nfunction tokenizePotentialGfmFootnoteCall(effects, ok2, nok) {\n const self = this;\n let index = self.events.length;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let labelStart;\n while (index--) {\n const token = self.events[index][1];\n if (token.type === \"labelImage\") {\n labelStart = token;\n break;\n }\n if (token.type === \"gfmFootnoteCall\" || token.type === \"labelLink\" || token.type === \"label\" || token.type === \"image\" || token.type === \"link\") {\n break;\n }\n }\n return start;\n function start(code2) {\n if (!labelStart || !labelStart._balanced) {\n return nok(code2);\n }\n const id = normalizeIdentifier(\n self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })\n );\n if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n return nok(code2);\n }\n effects.enter(\"gfmFootnoteCallLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallLabelMarker\");\n return ok2(code2);\n }\n}\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n let index = events.length;\n while (index--) {\n if (events[index][1].type === \"labelImage\" && events[index][0] === \"enter\") {\n events[index][1];\n break;\n }\n }\n events[index + 1][1].type = \"data\";\n events[index + 3][1].type = \"gfmFootnoteCallLabelMarker\";\n const call = {\n type: \"gfmFootnoteCall\",\n start: Object.assign({}, events[index + 3][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n };\n const marker = {\n type: \"gfmFootnoteCallMarker\",\n start: Object.assign({}, events[index + 3][1].end),\n end: Object.assign({}, events[index + 3][1].end)\n };\n marker.end.column++;\n marker.end.offset++;\n marker.end._bufferIndex++;\n const string = {\n type: \"gfmFootnoteCallString\",\n start: Object.assign({}, marker.end),\n end: Object.assign({}, events[events.length - 1][1].start)\n };\n const chunk = {\n type: \"chunkString\",\n contentType: \"string\",\n start: Object.assign({}, string.start),\n end: Object.assign({}, string.end)\n };\n const replacement = [\n // Take the `labelImageMarker` (now `data`, the `!`)\n events[index + 1],\n events[index + 2],\n [\"enter\", call, context],\n // The `[`\n events[index + 3],\n events[index + 4],\n // The `^`.\n [\"enter\", marker, context],\n [\"exit\", marker, context],\n // Everything in between.\n [\"enter\", string, context],\n [\"enter\", chunk, context],\n [\"exit\", chunk, context],\n [\"exit\", string, context],\n // The ending (`]`, properly parsed and labelled).\n events[events.length - 2],\n events[events.length - 1],\n [\"exit\", call, context]\n ];\n events.splice(index, events.length - index + 1, ...replacement);\n return events;\n}\nfunction tokenizeGfmFootnoteCall(effects, ok2, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let size = 0;\n let data;\n return start;\n function start(code2) {\n effects.enter(\"gfmFootnoteCall\");\n effects.enter(\"gfmFootnoteCallLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallLabelMarker\");\n return callStart;\n }\n function callStart(code2) {\n if (code2 !== 94) return nok(code2);\n effects.enter(\"gfmFootnoteCallMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallMarker\");\n effects.enter(\"gfmFootnoteCallString\");\n effects.enter(\"chunkString\").contentType = \"string\";\n return callData;\n }\n function callData(code2) {\n if (\n // Too long.\n size > 999 || // Closing brace with nothing.\n code2 === 93 && !data || // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code2 === null || code2 === 91 || markdownLineEndingOrSpace(code2)\n ) {\n return nok(code2);\n }\n if (code2 === 93) {\n effects.exit(\"chunkString\");\n const token = effects.exit(\"gfmFootnoteCallString\");\n if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n return nok(code2);\n }\n effects.enter(\"gfmFootnoteCallLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallLabelMarker\");\n effects.exit(\"gfmFootnoteCall\");\n return ok2;\n }\n if (!markdownLineEndingOrSpace(code2)) {\n data = true;\n }\n size++;\n effects.consume(code2);\n return code2 === 92 ? callEscape : callData;\n }\n function callEscape(code2) {\n if (code2 === 91 || code2 === 92 || code2 === 93) {\n effects.consume(code2);\n size++;\n return callData;\n }\n return callData(code2);\n }\n}\nfunction tokenizeDefinitionStart(effects, ok2, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let identifier;\n let size = 0;\n let data;\n return start;\n function start(code2) {\n effects.enter(\"gfmFootnoteDefinition\")._container = true;\n effects.enter(\"gfmFootnoteDefinitionLabel\");\n effects.enter(\"gfmFootnoteDefinitionLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteDefinitionLabelMarker\");\n return labelAtMarker;\n }\n function labelAtMarker(code2) {\n if (code2 === 94) {\n effects.enter(\"gfmFootnoteDefinitionMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteDefinitionMarker\");\n effects.enter(\"gfmFootnoteDefinitionLabelString\");\n effects.enter(\"chunkString\").contentType = \"string\";\n return labelInside;\n }\n return nok(code2);\n }\n function labelInside(code2) {\n if (\n // Too long.\n size > 999 || // Closing brace with nothing.\n code2 === 93 && !data || // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code2 === null || code2 === 91 || markdownLineEndingOrSpace(code2)\n ) {\n return nok(code2);\n }\n if (code2 === 93) {\n effects.exit(\"chunkString\");\n const token = effects.exit(\"gfmFootnoteDefinitionLabelString\");\n identifier = normalizeIdentifier(self.sliceSerialize(token));\n effects.enter(\"gfmFootnoteDefinitionLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteDefinitionLabelMarker\");\n effects.exit(\"gfmFootnoteDefinitionLabel\");\n return labelAfter;\n }\n if (!markdownLineEndingOrSpace(code2)) {\n data = true;\n }\n size++;\n effects.consume(code2);\n return code2 === 92 ? labelEscape : labelInside;\n }\n function labelEscape(code2) {\n if (code2 === 91 || code2 === 92 || code2 === 93) {\n effects.consume(code2);\n size++;\n return labelInside;\n }\n return labelInside(code2);\n }\n function labelAfter(code2) {\n if (code2 === 58) {\n effects.enter(\"definitionMarker\");\n effects.consume(code2);\n effects.exit(\"definitionMarker\");\n if (!defined.includes(identifier)) {\n defined.push(identifier);\n }\n return factorySpace(\n effects,\n whitespaceAfter,\n \"gfmFootnoteDefinitionWhitespace\"\n );\n }\n return nok(code2);\n }\n function whitespaceAfter(code2) {\n return ok2(code2);\n }\n}\nfunction tokenizeDefinitionContinuation(effects, ok2, nok) {\n return effects.check(blankLine, ok2, effects.attempt(indent, ok2, nok));\n}\nfunction gfmFootnoteDefinitionEnd(effects) {\n effects.exit(\"gfmFootnoteDefinition\");\n}\nfunction tokenizeIndent(effects, ok2, nok) {\n const self = this;\n return factorySpace(\n effects,\n afterPrefix,\n \"gfmFootnoteDefinitionIndent\",\n 4 + 1\n );\n function afterPrefix(code2) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === \"gfmFootnoteDefinitionIndent\" && tail[2].sliceSerialize(tail[1], true).length === 4 ? ok2(code2) : nok(code2);\n }\n}\nfunction gfmStrikethrough(options) {\n const options_ = options || {};\n let single = options_.singleTilde;\n const tokenizer = {\n tokenize: tokenizeStrikethrough,\n resolveAll: resolveAllStrikethrough\n };\n if (single === null || single === void 0) {\n single = true;\n }\n return {\n text: {\n [126]: tokenizer\n },\n insideSpan: {\n null: [tokenizer]\n },\n attentionMarkers: {\n null: [126]\n }\n };\n function resolveAllStrikethrough(events, context) {\n let index = -1;\n while (++index < events.length) {\n if (events[index][0] === \"enter\" && events[index][1].type === \"strikethroughSequenceTemporary\" && events[index][1]._close) {\n let open = index;\n while (open--) {\n if (events[open][0] === \"exit\" && events[open][1].type === \"strikethroughSequenceTemporary\" && events[open][1]._open && // If the sizes are the same:\n events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {\n events[index][1].type = \"strikethroughSequence\";\n events[open][1].type = \"strikethroughSequence\";\n const strikethrough = {\n type: \"strikethrough\",\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[index][1].end)\n };\n const text2 = {\n type: \"strikethroughText\",\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n };\n const nextEvents = [\n [\"enter\", strikethrough, context],\n [\"enter\", events[open][1], context],\n [\"exit\", events[open][1], context],\n [\"enter\", text2, context]\n ];\n const insideSpan = context.parser.constructs.insideSpan.null;\n if (insideSpan) {\n splice(\n nextEvents,\n nextEvents.length,\n 0,\n resolveAll(insideSpan, events.slice(open + 1, index), context)\n );\n }\n splice(nextEvents, nextEvents.length, 0, [\n [\"exit\", text2, context],\n [\"enter\", events[index][1], context],\n [\"exit\", events[index][1], context],\n [\"exit\", strikethrough, context]\n ]);\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - 2;\n break;\n }\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === \"strikethroughSequenceTemporary\") {\n events[index][1].type = \"data\";\n }\n }\n return events;\n }\n function tokenizeStrikethrough(effects, ok2, nok) {\n const previous2 = this.previous;\n const events = this.events;\n let size = 0;\n return start;\n function start(code2) {\n if (previous2 === 126 && events[events.length - 1][1].type !== \"characterEscape\") {\n return nok(code2);\n }\n effects.enter(\"strikethroughSequenceTemporary\");\n return more(code2);\n }\n function more(code2) {\n const before = classifyCharacter(previous2);\n if (code2 === 126) {\n if (size > 1) return nok(code2);\n effects.consume(code2);\n size++;\n return more;\n }\n if (size < 2 && !single) return nok(code2);\n const token = effects.exit(\"strikethroughSequenceTemporary\");\n const after = classifyCharacter(code2);\n token._open = !after || after === 2 && Boolean(before);\n token._close = !before || before === 2 && Boolean(after);\n return ok2(code2);\n }\n }\n}\nclass EditMap {\n /**\n * Create a new edit map.\n */\n constructor() {\n this.map = [];\n }\n /**\n * Create an edit: a remove and/or add at a certain place.\n *\n * @param {number} index\n * @param {number} remove\n * @param {Array} add\n * @returns {undefined}\n */\n add(index, remove, add) {\n addImpl(this, index, remove, add);\n }\n // To do: add this when moving to `micromark`.\n // /**\n // * Create an edit: but insert `add` before existing additions.\n // *\n // * @param {number} index\n // * @param {number} remove\n // * @param {Array} add\n // * @returns {undefined}\n // */\n // addBefore(index, remove, add) {\n // addImpl(this, index, remove, add, true)\n // }\n /**\n * Done, change the events.\n *\n * @param {Array} events\n * @returns {undefined}\n */\n consume(events) {\n this.map.sort(function(a, b) {\n return a[0] - b[0];\n });\n if (this.map.length === 0) {\n return;\n }\n let index = this.map.length;\n const vecs = [];\n while (index > 0) {\n index -= 1;\n vecs.push(\n events.slice(this.map[index][0] + this.map[index][1]),\n this.map[index][2]\n );\n events.length = this.map[index][0];\n }\n vecs.push([...events]);\n events.length = 0;\n let slice = vecs.pop();\n while (slice) {\n events.push(...slice);\n slice = vecs.pop();\n }\n this.map.length = 0;\n }\n}\nfunction addImpl(editMap, at, remove, add) {\n let index = 0;\n if (remove === 0 && add.length === 0) {\n return;\n }\n while (index < editMap.map.length) {\n if (editMap.map[index][0] === at) {\n editMap.map[index][1] += remove;\n editMap.map[index][2].push(...add);\n return;\n }\n index += 1;\n }\n editMap.map.push([at, remove, add]);\n}\nfunction gfmTableAlign(events, index) {\n let inDelimiterRow = false;\n const align = [];\n while (index < events.length) {\n const event = events[index];\n if (inDelimiterRow) {\n if (event[0] === \"enter\") {\n if (event[1].type === \"tableContent\") {\n align.push(\n events[index + 1][1].type === \"tableDelimiterMarker\" ? \"left\" : \"none\"\n );\n }\n } else if (event[1].type === \"tableContent\") {\n if (events[index - 1][1].type === \"tableDelimiterMarker\") {\n const alignIndex = align.length - 1;\n align[alignIndex] = align[alignIndex] === \"left\" ? \"center\" : \"right\";\n }\n } else if (event[1].type === \"tableDelimiterRow\") {\n break;\n }\n } else if (event[0] === \"enter\" && event[1].type === \"tableDelimiterRow\") {\n inDelimiterRow = true;\n }\n index += 1;\n }\n return align;\n}\nfunction gfmTable() {\n return {\n flow: {\n null: {\n tokenize: tokenizeTable,\n resolveAll: resolveTable\n }\n }\n };\n}\nfunction tokenizeTable(effects, ok2, nok) {\n const self = this;\n let size = 0;\n let sizeB = 0;\n let seen;\n return start;\n function start(code2) {\n let index = self.events.length - 1;\n while (index > -1) {\n const type = self.events[index][1].type;\n if (type === \"lineEnding\" || // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n type === \"linePrefix\")\n index--;\n else break;\n }\n const tail = index > -1 ? self.events[index][1].type : null;\n const next = tail === \"tableHead\" || tail === \"tableRow\" ? bodyRowStart : headRowBefore;\n if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n return nok(code2);\n }\n return next(code2);\n }\n function headRowBefore(code2) {\n effects.enter(\"tableHead\");\n effects.enter(\"tableRow\");\n return headRowStart(code2);\n }\n function headRowStart(code2) {\n if (code2 === 124) {\n return headRowBreak(code2);\n }\n seen = true;\n sizeB += 1;\n return headRowBreak(code2);\n }\n function headRowBreak(code2) {\n if (code2 === null) {\n return nok(code2);\n }\n if (markdownLineEnding(code2)) {\n if (sizeB > 1) {\n sizeB = 0;\n self.interrupt = true;\n effects.exit(\"tableRow\");\n effects.enter(\"lineEnding\");\n effects.consume(code2);\n effects.exit(\"lineEnding\");\n return headDelimiterStart;\n }\n return nok(code2);\n }\n if (markdownSpace(code2)) {\n return factorySpace(effects, headRowBreak, \"whitespace\")(code2);\n }\n sizeB += 1;\n if (seen) {\n seen = false;\n size += 1;\n }\n if (code2 === 124) {\n effects.enter(\"tableCellDivider\");\n effects.consume(code2);\n effects.exit(\"tableCellDivider\");\n seen = true;\n return headRowBreak;\n }\n effects.enter(\"data\");\n return headRowData(code2);\n }\n function headRowData(code2) {\n if (code2 === null || code2 === 124 || markdownLineEndingOrSpace(code2)) {\n effects.exit(\"data\");\n return headRowBreak(code2);\n }\n effects.consume(code2);\n return code2 === 92 ? headRowEscape : headRowData;\n }\n function headRowEscape(code2) {\n if (code2 === 92 || code2 === 124) {\n effects.consume(code2);\n return headRowData;\n }\n return headRowData(code2);\n }\n function headDelimiterStart(code2) {\n self.interrupt = false;\n if (self.parser.lazy[self.now().line]) {\n return nok(code2);\n }\n effects.enter(\"tableDelimiterRow\");\n seen = false;\n if (markdownSpace(code2)) {\n return factorySpace(\n effects,\n headDelimiterBefore,\n \"linePrefix\",\n self.parser.constructs.disable.null.includes(\"codeIndented\") ? void 0 : 4\n )(code2);\n }\n return headDelimiterBefore(code2);\n }\n function headDelimiterBefore(code2) {\n if (code2 === 45 || code2 === 58) {\n return headDelimiterValueBefore(code2);\n }\n if (code2 === 124) {\n seen = true;\n effects.enter(\"tableCellDivider\");\n effects.consume(code2);\n effects.exit(\"tableCellDivider\");\n return headDelimiterCellBefore;\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterCellBefore(code2) {\n if (markdownSpace(code2)) {\n return factorySpace(effects, headDelimiterValueBefore, \"whitespace\")(code2);\n }\n return headDelimiterValueBefore(code2);\n }\n function headDelimiterValueBefore(code2) {\n if (code2 === 58) {\n sizeB += 1;\n seen = true;\n effects.enter(\"tableDelimiterMarker\");\n effects.consume(code2);\n effects.exit(\"tableDelimiterMarker\");\n return headDelimiterLeftAlignmentAfter;\n }\n if (code2 === 45) {\n sizeB += 1;\n return headDelimiterLeftAlignmentAfter(code2);\n }\n if (code2 === null || markdownLineEnding(code2)) {\n return headDelimiterCellAfter(code2);\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterLeftAlignmentAfter(code2) {\n if (code2 === 45) {\n effects.enter(\"tableDelimiterFiller\");\n return headDelimiterFiller(code2);\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterFiller(code2) {\n if (code2 === 45) {\n effects.consume(code2);\n return headDelimiterFiller;\n }\n if (code2 === 58) {\n seen = true;\n effects.exit(\"tableDelimiterFiller\");\n effects.enter(\"tableDelimiterMarker\");\n effects.consume(code2);\n effects.exit(\"tableDelimiterMarker\");\n return headDelimiterRightAlignmentAfter;\n }\n effects.exit(\"tableDelimiterFiller\");\n return headDelimiterRightAlignmentAfter(code2);\n }\n function headDelimiterRightAlignmentAfter(code2) {\n if (markdownSpace(code2)) {\n return factorySpace(effects, headDelimiterCellAfter, \"whitespace\")(code2);\n }\n return headDelimiterCellAfter(code2);\n }\n function headDelimiterCellAfter(code2) {\n if (code2 === 124) {\n return headDelimiterBefore(code2);\n }\n if (code2 === null || markdownLineEnding(code2)) {\n if (!seen || size !== sizeB) {\n return headDelimiterNok(code2);\n }\n effects.exit(\"tableDelimiterRow\");\n effects.exit(\"tableHead\");\n return ok2(code2);\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterNok(code2) {\n return nok(code2);\n }\n function bodyRowStart(code2) {\n effects.enter(\"tableRow\");\n return bodyRowBreak(code2);\n }\n function bodyRowBreak(code2) {\n if (code2 === 124) {\n effects.enter(\"tableCellDivider\");\n effects.consume(code2);\n effects.exit(\"tableCellDivider\");\n return bodyRowBreak;\n }\n if (code2 === null || markdownLineEnding(code2)) {\n effects.exit(\"tableRow\");\n return ok2(code2);\n }\n if (markdownSpace(code2)) {\n return factorySpace(effects, bodyRowBreak, \"whitespace\")(code2);\n }\n effects.enter(\"data\");\n return bodyRowData(code2);\n }\n function bodyRowData(code2) {\n if (code2 === null || code2 === 124 || markdownLineEndingOrSpace(code2)) {\n effects.exit(\"data\");\n return bodyRowBreak(code2);\n }\n effects.consume(code2);\n return code2 === 92 ? bodyRowEscape : bodyRowData;\n }\n function bodyRowEscape(code2) {\n if (code2 === 92 || code2 === 124) {\n effects.consume(code2);\n return bodyRowData;\n }\n return bodyRowData(code2);\n }\n}\nfunction resolveTable(events, context) {\n let index = -1;\n let inFirstCellAwaitingPipe = true;\n let rowKind = 0;\n let lastCell = [0, 0, 0, 0];\n let cell = [0, 0, 0, 0];\n let afterHeadAwaitingFirstBodyRow = false;\n let lastTableEnd = 0;\n let currentTable;\n let currentBody;\n let currentCell;\n const map2 = new EditMap();\n while (++index < events.length) {\n const event = events[index];\n const token = event[1];\n if (event[0] === \"enter\") {\n if (token.type === \"tableHead\") {\n afterHeadAwaitingFirstBodyRow = false;\n if (lastTableEnd !== 0) {\n flushTableEnd(map2, context, lastTableEnd, currentTable, currentBody);\n currentBody = void 0;\n lastTableEnd = 0;\n }\n currentTable = {\n type: \"table\",\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map2.add(index, 0, [[\"enter\", currentTable, context]]);\n } else if (token.type === \"tableRow\" || token.type === \"tableDelimiterRow\") {\n inFirstCellAwaitingPipe = true;\n currentCell = void 0;\n lastCell = [0, 0, 0, 0];\n cell = [0, index + 1, 0, 0];\n if (afterHeadAwaitingFirstBodyRow) {\n afterHeadAwaitingFirstBodyRow = false;\n currentBody = {\n type: \"tableBody\",\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map2.add(index, 0, [[\"enter\", currentBody, context]]);\n }\n rowKind = token.type === \"tableDelimiterRow\" ? 2 : currentBody ? 3 : 1;\n } else if (rowKind && (token.type === \"data\" || token.type === \"tableDelimiterMarker\" || token.type === \"tableDelimiterFiller\")) {\n inFirstCellAwaitingPipe = false;\n if (cell[2] === 0) {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(\n map2,\n context,\n lastCell,\n rowKind,\n void 0,\n currentCell\n );\n lastCell = [0, 0, 0, 0];\n }\n cell[2] = index;\n }\n } else if (token.type === \"tableCellDivider\") {\n if (inFirstCellAwaitingPipe) {\n inFirstCellAwaitingPipe = false;\n } else {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(\n map2,\n context,\n lastCell,\n rowKind,\n void 0,\n currentCell\n );\n }\n lastCell = cell;\n cell = [lastCell[1], index, 0, 0];\n }\n }\n } else if (token.type === \"tableHead\") {\n afterHeadAwaitingFirstBodyRow = true;\n lastTableEnd = index;\n } else if (token.type === \"tableRow\" || token.type === \"tableDelimiterRow\") {\n lastTableEnd = index;\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(\n map2,\n context,\n lastCell,\n rowKind,\n index,\n currentCell\n );\n } else if (cell[1] !== 0) {\n currentCell = flushCell(map2, context, cell, rowKind, index, currentCell);\n }\n rowKind = 0;\n } else if (rowKind && (token.type === \"data\" || token.type === \"tableDelimiterMarker\" || token.type === \"tableDelimiterFiller\")) {\n cell[3] = index;\n }\n }\n if (lastTableEnd !== 0) {\n flushTableEnd(map2, context, lastTableEnd, currentTable, currentBody);\n }\n map2.consume(context.events);\n index = -1;\n while (++index < context.events.length) {\n const event = context.events[index];\n if (event[0] === \"enter\" && event[1].type === \"table\") {\n event[1]._align = gfmTableAlign(context.events, index);\n }\n }\n return events;\n}\nfunction flushCell(map2, context, range, rowKind, rowEnd, previousCell) {\n const groupName = rowKind === 1 ? \"tableHeader\" : rowKind === 2 ? \"tableDelimiter\" : \"tableData\";\n const valueName = \"tableContent\";\n if (range[0] !== 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, range[0]));\n map2.add(range[0], 0, [[\"exit\", previousCell, context]]);\n }\n const now = getPoint(context.events, range[1]);\n previousCell = {\n type: groupName,\n start: Object.assign({}, now),\n // Note: correct end is set later.\n end: Object.assign({}, now)\n };\n map2.add(range[1], 0, [[\"enter\", previousCell, context]]);\n if (range[2] !== 0) {\n const relatedStart = getPoint(context.events, range[2]);\n const relatedEnd = getPoint(context.events, range[3]);\n const valueToken = {\n type: valueName,\n start: Object.assign({}, relatedStart),\n end: Object.assign({}, relatedEnd)\n };\n map2.add(range[2], 0, [[\"enter\", valueToken, context]]);\n if (rowKind !== 2) {\n const start = context.events[range[2]];\n const end = context.events[range[3]];\n start[1].end = Object.assign({}, end[1].end);\n start[1].type = \"chunkText\";\n start[1].contentType = \"text\";\n if (range[3] > range[2] + 1) {\n const a = range[2] + 1;\n const b = range[3] - range[2] - 1;\n map2.add(a, b, []);\n }\n }\n map2.add(range[3] + 1, 0, [[\"exit\", valueToken, context]]);\n }\n if (rowEnd !== void 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, rowEnd));\n map2.add(rowEnd, 0, [[\"exit\", previousCell, context]]);\n previousCell = void 0;\n }\n return previousCell;\n}\nfunction flushTableEnd(map2, context, index, table, tableBody) {\n const exits = [];\n const related = getPoint(context.events, index);\n if (tableBody) {\n tableBody.end = Object.assign({}, related);\n exits.push([\"exit\", tableBody, context]);\n }\n table.end = Object.assign({}, related);\n exits.push([\"exit\", table, context]);\n map2.add(index + 1, 0, exits);\n}\nfunction getPoint(events, index) {\n const event = events[index];\n const side = event[0] === \"enter\" ? \"start\" : \"end\";\n return event[1][side];\n}\nconst tasklistCheck = {\n tokenize: tokenizeTasklistCheck\n};\nfunction gfmTaskListItem() {\n return {\n text: {\n [91]: tasklistCheck\n }\n };\n}\nfunction tokenizeTasklistCheck(effects, ok2, nok) {\n const self = this;\n return open;\n function open(code2) {\n if (\n // Exit if there’s stuff before.\n self.previous !== null || // Exit if not in the first content that is the first child of a list\n // item.\n !self._gfmTasklistFirstContentOfListItem\n ) {\n return nok(code2);\n }\n effects.enter(\"taskListCheck\");\n effects.enter(\"taskListCheckMarker\");\n effects.consume(code2);\n effects.exit(\"taskListCheckMarker\");\n return inside;\n }\n function inside(code2) {\n if (markdownLineEndingOrSpace(code2)) {\n effects.enter(\"taskListCheckValueUnchecked\");\n effects.consume(code2);\n effects.exit(\"taskListCheckValueUnchecked\");\n return close;\n }\n if (code2 === 88 || code2 === 120) {\n effects.enter(\"taskListCheckValueChecked\");\n effects.consume(code2);\n effects.exit(\"taskListCheckValueChecked\");\n return close;\n }\n return nok(code2);\n }\n function close(code2) {\n if (code2 === 93) {\n effects.enter(\"taskListCheckMarker\");\n effects.consume(code2);\n effects.exit(\"taskListCheckMarker\");\n effects.exit(\"taskListCheck\");\n return after;\n }\n return nok(code2);\n }\n function after(code2) {\n if (markdownLineEnding(code2)) {\n return ok2(code2);\n }\n if (markdownSpace(code2)) {\n return effects.check(\n {\n tokenize: spaceThenNonSpace\n },\n ok2,\n nok\n )(code2);\n }\n return nok(code2);\n }\n}\nfunction spaceThenNonSpace(effects, ok2, nok) {\n return factorySpace(effects, after, \"whitespace\");\n function after(code2) {\n return code2 === null ? nok(code2) : ok2(code2);\n }\n}\nfunction gfm(options) {\n return combineExtensions([\n gfmAutolinkLiteral(),\n gfmFootnote(),\n gfmStrikethrough(options),\n gfmTable(),\n gfmTaskListItem()\n ]);\n}\nconst emptyOptions = {};\nfunction remarkGfm(options) {\n const self = (\n /** @type {Processor} */\n this\n );\n const settings = options || emptyOptions;\n const data = self.data();\n const micromarkExtensions = data.micromarkExtensions || (data.micromarkExtensions = []);\n const fromMarkdownExtensions = data.fromMarkdownExtensions || (data.fromMarkdownExtensions = []);\n const toMarkdownExtensions = data.toMarkdownExtensions || (data.toMarkdownExtensions = []);\n micromarkExtensions.push(gfm(settings));\n fromMarkdownExtensions.push(gfmFromMarkdown());\n toMarkdownExtensions.push(gfmToMarkdown(settings));\n}\nconst _sfc_main$1 = /* @__PURE__ */ defineComponent({\n __name: \"NcRichTextCopyButton\",\n props: {\n contentId: null\n },\n setup(__props) {\n const props = __props;\n const { copy, icon, altText } = useCopy(() => document.getElementById(props.contentId).textContent);\n return { __sfc: true, props, copy, icon, altText, NcButton, NcIconSvgWrapper };\n }\n});\nvar _sfc_render$1 = function render2() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(_setup.NcButton, { attrs: { \"variant\": \"tertiary\", \"size\": \"small\", \"aria-label\": _setup.altText, \"title\": _setup.altText }, on: { \"click\": _setup.copy }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(_setup.NcIconSvgWrapper, { attrs: { \"path\": _setup.icon, \"inline\": \"\" } })];\n }, proxy: true }]) });\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n null\n);\nconst NcRichTextCopyButton = __component__$1.exports;\nfunction remarkPlaceholder() {\n return function(ast) {\n visitParents(ast, (node) => node.type === \"text\", visitor);\n function visitor(node, ancestors) {\n const parent = ancestors.at(-1);\n const index = parent.children.indexOf(node);\n const placeholders = node.value.split(/(\\{[a-z\\-_.0-9]+\\})/ig).map((entry) => {\n const matches = entry.match(/^\\{([a-z\\-_.0-9]+)\\}$/i);\n if (!matches) {\n return u(\"text\", entry);\n }\n const [, component] = matches;\n return u(\"element\", {\n tagName: `#${component}`\n });\n });\n parent.children.splice(index, 1, ...placeholders);\n }\n };\n}\nfunction prepareTextNode({ h, context }, text2) {\n if (context.autolink) {\n text2 = parseUrl(text2);\n }\n if (Array.isArray(text2)) {\n return text2.map((entry) => {\n if (typeof entry === \"string\") {\n return entry;\n }\n const { component, props } = entry;\n return h(component, {\n props,\n class: \"rich-text--component\"\n });\n });\n }\n return text2;\n}\n/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nfunction isCodeNode(node) {\n return [\"code\", \"inlineCode\"].includes(node.type);\n}\nconst remarkStripCode = function() {\n return function(tree) {\n visitParents(tree, isCodeNode, (node, ancestors) => {\n const parent = ancestors.at(-1);\n const index = parent.children.indexOf(node);\n parent.children.splice(index, 1, {\n ...node,\n value: \"\"\n });\n return [SKIP, index + 1];\n });\n };\n};\nfunction remarkUnescape() {\n return function(tree) {\n visitParents(tree, (node) => [\"text\", \"code\", \"inlineCode\"].includes(node.type), (node, ancestors) => {\n const parent = ancestors.at(-1);\n const index = parent.children.indexOf(node);\n parent.children.splice(index, 1, {\n ...node,\n value: node.value.replace(/</gmi, \"<\").replace(/>/gmi, \">\")\n });\n return [SKIP, index + 1];\n });\n };\n}\nconst LINK_PROTOCOLS = [\"http\", \"https\", \"mailto\", \"tel\"];\nconst rehypeHighlight = ref(null);\nasync function importRehypeHighlightLibrary() {\n const module = await import(\"rehype-highlight\");\n rehypeHighlight.value = module.default;\n}\nconst _sfc_main = {\n name: \"NcRichText\",\n components: {\n NcReferenceList\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n text: {\n type: String,\n default: \"\"\n },\n arguments: {\n type: Object,\n default: () => {\n return {};\n }\n },\n referenceLimit: {\n type: Number,\n default: 0\n },\n referenceInteractive: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n referenceInteractiveOptIn: {\n type: Boolean,\n default: false\n },\n /** Provide data upfront to avoid extra http request */\n references: {\n type: Array,\n default: null\n },\n /** Provide basic Markdown syntax */\n useMarkdown: {\n type: Boolean,\n default: false\n },\n /** Provide GitHub Flavored Markdown syntax */\n useExtendedMarkdown: {\n type: Boolean,\n default: false\n },\n /** Provide event from rendered markdown inputs */\n interactive: {\n type: Boolean,\n default: false\n },\n autolink: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n }\n },\n emits: [\n \"interact-todo\",\n \"interact:todo\"\n ],\n data() {\n return {\n parentId: GenRandomId(5)\n };\n },\n methods: {\n renderPlaintext(h) {\n const placeholders = this.text.split(/(\\{[a-z\\-_.0-9]+\\})/ig).map((entry) => {\n const matches = entry.match(/^\\{([a-z\\-_.0-9]+)\\}$/i);\n if (!matches) {\n return prepareTextNode({ h, context: this }, entry);\n }\n const argumentId = matches[1];\n const argument = this.arguments[argumentId];\n if (typeof argument === \"object\") {\n const { component, props } = argument;\n return h(component, {\n props,\n class: \"rich-text--component\"\n });\n }\n if (argument) {\n return h(\"span\", { class: \"rich-text--fallback\" }, argument);\n }\n return entry;\n });\n return h(\"div\", { class: \"rich-text--wrapper\" }, [\n h(\"div\", {}, placeholders.flat()),\n this.referenceLimit > 0 ? h(\"div\", { class: \"rich-text--reference-widget\" }, [\n h(NcReferenceList, {\n props: {\n text: this.text,\n referenceData: this.references,\n interactive: this.referenceInteractive,\n interactiveOptIn: this.referenceInteractiveOptIn\n }\n })\n ]) : null\n ]);\n },\n renderMarkdown(h) {\n const renderedMarkdown = unified().use(remarkParse).use(remarkAutolink, {\n autolink: this.autolink,\n useMarkdown: this.useMarkdown,\n useExtendedMarkdown: this.useExtendedMarkdown\n }).use(remarkUnescape).use(this.useExtendedMarkdown ? remarkGfm : void 0).use(breaks).use(remarkUnlinkProtocols, { except: LINK_PROTOCOLS }).use(remark2rehype, {\n handlers: {\n component(toHast, node) {\n return toHast(node, node.component, { value: node.value });\n }\n }\n }).use(this.useExtendedMarkdown ? rehypeHighlight.value : void 0).use(remarkPlaceholder).use(rehypeExternalLinks, {\n target: \"_blank\",\n rel: [\"noopener noreferrer\"]\n }).use(rehype2react, {\n createElement: (tag, attrs, children) => {\n if (!tag.startsWith(\"#\")) {\n if ([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"].includes(tag)) {\n tag = `h${Math.min(+String(tag)[1] + 3, 6)}`;\n }\n if (this.useExtendedMarkdown) {\n if (tag === \"code\" && !rehypeHighlight.value && attrs?.attrs?.class?.includes(\"language\")) {\n importRehypeHighlightLibrary();\n }\n if (tag === \"pre\" && Array.isArray(children) && children[0].tag === \"code\") {\n const id = this.parentId + \"-code-block-\" + GenRandomId(5);\n return h(\"p\", { class: \"rich-text__code-block\" }, [\n h(tag, { attrs: { ...attrs, id } }, children),\n h(NcRichTextCopyButton, {\n props: { contentId: id },\n class: \"rich-text__code-block-button\"\n })\n ]);\n }\n let nestedNode = null;\n if (tag === \"li\" && Array.isArray(children) && children[0].tag === \"input\" && children[0].data.attrs.type === \"checkbox\") {\n const [inputNode, ...labelParts] = children;\n const nestedNodeIndex = labelParts.findIndex((child) => [\"ul\", \"ol\", \"li\", \"blockquote\", \"pre\"].includes(child.tag));\n if (nestedNodeIndex !== -1) {\n nestedNode = labelParts[nestedNodeIndex];\n labelParts.splice(nestedNodeIndex);\n }\n const id = this.parentId + \"-markdown-input-\" + GenRandomId(5);\n const inputComponent = h(NcCheckboxRadioSwitch, {\n attrs: {\n ...inputNode.data.attrs,\n id,\n disabled: !this.interactive\n },\n on: {\n \"update:checked\": () => {\n this.$emit(\"interact-todo\", id);\n this.$emit(\"interact:todo\", id);\n }\n }\n }, labelParts);\n return h(tag, attrs, [inputComponent, nestedNode]);\n }\n }\n if (tag === \"a\") {\n const route = getRoute(this.$router, attrs.attrs.href);\n if (route) {\n delete attrs.attrs.href;\n delete attrs.attrs.target;\n return h(RouterLink, {\n ...attrs,\n props: {\n to: route\n }\n }, children);\n }\n const isAllowedScheme = /^(https?:\\/\\/|tel:|mailto:)/.test(attrs.attrs.href);\n if (isAllowedScheme) {\n attrs.attrs.href = attrs.attrs.href.trim();\n return h(NcRichTextExternalLink, attrs, children);\n } else {\n delete attrs.attrs.href;\n delete attrs.attrs.target;\n return h(\"span\", attrs, children);\n }\n }\n return h(tag, attrs, children);\n }\n const placeholder = this.arguments[tag.slice(1)];\n if (!placeholder) {\n return h(\"span\", { ...{ attrs }, ...{ class: \"rich-text--fallback\" } }, [`{${tag.slice(1)}}`]);\n }\n if (!placeholder.component) {\n return h(\"span\", attrs, [placeholder]);\n }\n return h(\n placeholder.component,\n {\n attrs,\n props: placeholder.props,\n class: \"rich-text--component\"\n },\n children\n );\n },\n prefix: false\n }).processSync(this.text.replace(/<[^>]+>/g, (match) => match.replace(/\")).result;\n return h(\"div\", { class: \"rich-text--wrapper rich-text--wrapper-markdown\" }, [\n renderedMarkdown,\n this.referenceLimit > 0 ? h(\"div\", { class: \"rich-text--reference-widget\" }, [\n h(NcReferenceList, {\n props: {\n text: this.prepareReferenceSource(this.text),\n referenceData: this.references,\n interactive: this.referenceInteractive,\n interactiveOptIn: this.referenceInteractiveOptIn\n }\n })\n ]) : null\n ]);\n },\n /**\n * Strip content of inline code and code blocks for reference widgets\n * (e.g. ignore fenced links from being added as reference)\n *\n * @param {string} text - Content of the node\n */\n prepareReferenceSource(text2) {\n if (!this.useMarkdown && !this.useExtendedMarkdown) {\n return text2;\n }\n const processor = unified();\n processor.compiler = (tree) => toString(tree);\n return processor.use(remarkParse).use(remarkStripCode).processSync(text2.replace(/\\s/g, \" \")).value;\n }\n },\n render(h) {\n return this.useMarkdown || this.useExtendedMarkdown ? this.renderMarkdown(h) : this.renderPlaintext(h);\n }\n};\nconst _sfc_render = null;\nconst _sfc_staticRenderFns = null;\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"e55203a2\"\n);\nconst NcRichText = __component__.exports;\nexport {\n NcRichText as N,\n NcReferenceList as a\n};\n//# sourceMappingURL=NcRichText-DBkCEk0k.mjs.map\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./NcSelect-D9vDXS29.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./NcSelect-D9vDXS29.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../css-loader/dist/cjs.js!./vue-select.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../css-loader/dist/cjs.js!./vue-select.css\";\n export default content && content.locals ? content.locals : undefined;\n","import '../assets/NcSelect-D9vDXS29.css';\nimport { autoUpdate, computePosition, offset, flip, shift, limitShift } from \"@floating-ui/dom\";\nimport { a as mdiCheck, k as mdiAlertCircleOutline } from \"./mdi-DtJ8HsM-.mjs\";\nimport { VueSelect } from \"@nextcloud/vue-select\";\nimport Vue from \"vue\";\nimport { C as ChevronDown } from \"./ChevronDown-Dc_aK7Xg.mjs\";\nimport { C as Close } from \"./Close-COCw8OO8.mjs\";\nimport NcEllipsisedOption from \"../Components/NcEllipsisedOption.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-Bui9PhAS.mjs\";\nimport { N as NcListItemIcon } from \"./NcListItemIcon-6OlDNank.mjs\";\nimport NcLoadingIcon from \"../Components/NcLoadingIcon.mjs\";\nimport { u as useModelMigration } from \"./useModelMigration-EhAWvqDD.mjs\";\nimport { r as register, g as t38, h as t16, a as t } from \"./_l10n-Dv1YKfKS.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { a as isLegacy32 } from \"./legacy-Cy3dCXuB.mjs\";\nimport \"@nextcloud/vue-select/dist/vue-select.css\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t16, t38);\nconst _sfc_main = {\n name: \"NcSelect\",\n components: {\n ChevronDown,\n NcEllipsisedOption,\n NcIconSvgWrapper,\n NcListItemIcon,\n NcLoadingIcon,\n VueSelect\n },\n model: {\n prop: \"modelValue\",\n event: \"update:modelValue\"\n },\n props: {\n // Add VueSelect props to $props\n ...VueSelect.props,\n ...VueSelect.mixins.reduce((allProps, mixin) => ({ ...allProps, ...mixin.props }), {}),\n /**\n * `aria-label` for the clear input button\n */\n ariaLabelClearSelected: {\n type: String,\n default: t(\"Clear selected\")\n },\n /**\n * `aria-label` for the search input\n *\n * A descriptive `inputLabel` is preferred as this is not visible.\n */\n ariaLabelCombobox: {\n type: String,\n default: null\n },\n /**\n * `aria-label` for the listbox element\n */\n ariaLabelListbox: {\n type: String,\n default: t(\"Options\")\n },\n /**\n * Allows to customize the `aria-label` for the deselect-option button\n * The default is \"Deselect \" + optionLabel\n *\n * @type {(optionLabel: string) => string}\n */\n ariaLabelDeselectOption: {\n type: Function,\n default: (optionLabel) => t(\"Deselect {option}\", { option: optionLabel })\n },\n /**\n * Append the dropdown element to the end of the body\n * and size/position it dynamically.\n *\n * @see https://vue-select.org/api/props.html#appendtobody\n */\n appendToBody: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * When `appendToBody` is true, this function is responsible for\n * positioning the drop down list.\n *\n * If a function is returned from `calculatePosition`, it will\n * be called when the drop down list is removed from the DOM.\n * This allows for any garbage collection you may need to do.\n *\n * @see https://vue-select.org/api/props.html#calculateposition\n */\n calculatePosition: {\n type: Function,\n default: null\n },\n /**\n * Close the dropdown when selecting an option.\n *\n * @deprecated Use the `keepOpen` prop instead\n */\n closeOnSelect: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Keep the dropdown open after selecting an option.\n *\n * @default false\n * @since 8.25.0\n */\n keepOpen: {\n type: Boolean,\n default: false\n },\n /**\n * Replace default vue-select components\n *\n * @see https://vue-select.org/api/props.html#components\n */\n components: {\n type: Object,\n default: () => ({\n Deselect: {\n render: (createElement) => createElement(Close, {\n props: {\n size: 20,\n fillColor: \"var(--vs-controls-color)\"\n },\n style: {\n cursor: \"pointer\"\n }\n })\n }\n })\n },\n /**\n * Sets the maximum number of options to display in the dropdown list\n */\n limit: {\n type: Number,\n default: null\n },\n /**\n * Disable the component\n *\n * @see https://vue-select.org/api/props.html#disabled\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * Determines whether the dropdown should be open.\n * Receives the component instance as the only argument.\n *\n * @see https://vue-select.org/api/props.html#dropdownshouldopen\n */\n dropdownShouldOpen: {\n type: Function,\n default: ({ noDrop, open }) => {\n return noDrop ? false : open;\n }\n },\n /**\n * Callback to determine if the provided option should\n * match the current search text. Used to determine\n * if the option should be displayed.\n *\n * Defaults to the internal vue-select function documented at the link\n * below\n *\n * Enabling `userSelect` will automatically set this to filter by the\n * `displayName` and `subname` properties of the user option object\n * unless this prop is set explicitly\n *\n * @see https://vue-select.org/api/props.html#filterby\n */\n filterBy: {\n type: Function,\n default: null\n },\n /**\n * Class for the `input`\n *\n * Necessary for use in NcActionInput\n */\n inputClass: {\n type: [String, Object],\n default: null\n },\n /**\n * Input element id\n */\n inputId: {\n type: String,\n default: () => `select-input-${GenRandomId()}`\n },\n /**\n * Visible label for the input element\n *\n * @todo Set default for @nextcloud/vue 9\n */\n inputLabel: {\n type: String,\n default: null\n },\n /**\n * Additional helper text shown beneath the select.\n */\n helperText: {\n type: String,\n default: \"\"\n },\n /**\n * Toggle the error state, styling the helper text as an error.\n */\n error: {\n type: Boolean,\n default: false\n },\n /**\n * Toggle the success state, styling the helper text as a success.\n */\n success: {\n type: Boolean,\n default: false\n },\n /**\n * Pass true if you are using an external label\n */\n labelOutside: {\n type: Boolean,\n default: false\n },\n /**\n * Display a visible border around dropdown options\n * which have keyboard focus\n */\n keyboardFocusBorder: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Key of the displayed label for object options\n *\n * Defaults to the internal vue-select string documented at the link\n * below\n *\n * Enabling `userSelect` will automatically set this to `'displayName'`\n * unless this prop is set explicitly\n *\n * @see https://vue-select.org/api/props.html#label\n */\n label: {\n type: String,\n default: null\n },\n /**\n * Show the loading icon\n *\n * @see https://vue-select.org/api/props.html#loading\n */\n loading: {\n type: Boolean,\n default: false\n },\n /**\n * Allow selection of multiple options\n *\n * @see https://vue-select.org/api/props.html#multiple\n */\n multiple: {\n type: Boolean,\n default: false\n },\n /**\n * Disable automatic wrapping when selected options overflow the width\n */\n noWrap: {\n type: Boolean,\n default: false\n },\n /**\n * Array of options\n *\n * @type {Array>}\n *\n * @see https://vue-select.org/api/props.html#options\n */\n options: {\n type: Array,\n default: () => []\n },\n /**\n * Placeholder text\n *\n * @see https://vue-select.org/api/props.html#placeholder\n */\n placeholder: {\n type: String,\n default: \"\"\n },\n /**\n * Customized component's response to keydown events while the search input has focus\n *\n * @see https://vue-select.org/guide/keydown.html#mapkeydown\n */\n mapKeydown: {\n type: Function,\n /**\n * Patched Vue-Select keydown events handlers map to stop Escape propagation in open select\n *\n * @param {Record} map - Mapped keyCode to handlers { : }\n * @param {import('@nextcloud/vue-select').VueSelect} vm - VueSelect instance\n * @return {Record} patched keydown event handlers\n */\n default(map, vm) {\n return {\n ...map,\n /**\n * Patched Escape handler to stop propagation from open select\n *\n * @param {KeyboardEvent} event - default keydown event handler\n */\n 27: (event) => {\n if (vm.open) {\n event.stopPropagation();\n }\n map[27](event);\n }\n };\n }\n },\n /**\n * A unique identifier used to generate IDs and DOM attributes. Must be unique for every instance of the component.\n *\n * @see https://vue-select.org/api/props.html#uid\n */\n uid: {\n type: String,\n default: () => GenRandomId()\n },\n /**\n * When `appendToBody` is true, this sets the placement of the dropdown\n *\n * @type {'bottom' | 'top'}\n */\n placement: {\n type: String,\n default: \"bottom\"\n },\n /**\n * If false, the focused dropdown option will not be reset when filtered\n * options change\n */\n resetFocusOnOptionsChange: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Enable the user selector with avatars\n *\n * Objects must contain the data expected by the\n * [NcListItemIcon](#/Components/NcListItemIcon) and\n * [NcAvatar](#/Components/NcAvatar) components\n *\n * @deprecated Use the `NcSelectUsers` component instead\n */\n userSelect: {\n type: Boolean,\n default: false\n },\n /**\n * Removed in v9 - use `modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n value: {\n type: [String, Number, Object, Array],\n default: void 0\n },\n /**\n * Currently selected value\n *\n * The `v-model` directive may be used for two-way data binding\n *\n * @type {string | number | Record | Array}\n *\n * @see https://vue-select.org/api/props.html#value\n */\n modelValue: {\n type: [String, Number, Object, Array],\n default: null\n },\n /**\n * Enable if a value is required for native form validation\n */\n required: {\n type: Boolean,\n default: false\n },\n /**\n * Any available prop\n *\n * @see https://vue-select.org/api/props.html\n */\n // Not an actual prop but needed to show in vue-styleguidist docs\n // eslint-disable-next-line\n \" \": {}\n },\n emits: [\n /**\n * All events from https://vue-select.org/api/events.html\n */\n // Not an actual event but needed to show in vue-styleguidist docs\n \" \",\n /**\n * Removed in v9 - use `update:modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n \"input\",\n \"update:modelValue\",\n /** Same as update:modelValue for Vue 2 compatibility */\n \"update:model-value\"\n ],\n setup() {\n const clickableArea = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--default-clickable-area\"));\n const gridBaseLine = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--default-grid-baseline\"));\n const avatarSize = clickableArea - 2 * gridBaseLine;\n const model = useModelMigration(\"value\", \"input\");\n return {\n avatarSize,\n model,\n isLegacy: isLegacy32,\n mdiAlertCircleOutline,\n mdiCheck\n };\n },\n data() {\n return {\n search: \"\"\n };\n },\n computed: {\n /**\n * Consumer-provided slots forwarded to vue-select, excluding `footer`\n * which we render ourselves to host the helper text.\n *\n * @return {string[]}\n */\n forwardedSlots() {\n return Object.keys(this.$scopedSlots).filter((name) => name !== \"footer\");\n },\n inputRequired() {\n if (!this.required) {\n return null;\n }\n return this.model === null || Array.isArray(this.model) && this.model.length === 0;\n },\n localCalculatePosition() {\n if (this.calculatePosition !== null) {\n return this.calculatePosition;\n }\n return (dropdownMenu, component, { width }) => {\n dropdownMenu.style.width = width;\n const addClass = {\n name: \"addClass\",\n fn() {\n dropdownMenu.classList.add(\"vs__dropdown-menu--floating\");\n return {};\n }\n };\n const togglePlacementClass = {\n name: \"togglePlacementClass\",\n fn({ placement }) {\n component.$el.classList.toggle(\n \"select--drop-up\",\n placement === \"top\"\n );\n dropdownMenu.classList.toggle(\n \"vs__dropdown-menu--floating-placement-top\",\n placement === \"top\"\n );\n return {};\n }\n };\n const updatePosition = () => {\n computePosition(component.$refs.toggle, dropdownMenu, {\n placement: this.placement,\n middleware: [\n offset(-1),\n addClass,\n togglePlacementClass,\n // Match popperjs default collision prevention behavior by appending the following middleware in order\n flip(),\n shift({ limiter: limitShift() })\n ]\n }).then(({ x, y }) => {\n Object.assign(dropdownMenu.style, {\n left: `${x}px`,\n top: `${y}px`,\n width: `${component.$refs.toggle.getBoundingClientRect().width}px`\n });\n });\n };\n const cleanup = autoUpdate(\n component.$refs.toggle,\n dropdownMenu,\n updatePosition\n );\n return cleanup;\n };\n },\n localFilterBy() {\n const EMAIL_NOTATION = /[^<]*<([^>]+)/;\n if (this.filterBy !== null) {\n return this.filterBy;\n }\n if (this.userSelect) {\n return (option, label, search) => {\n const match = search.match(EMAIL_NOTATION);\n return match && option.subname?.toLocaleLowerCase?.()?.indexOf(match[1].toLocaleLowerCase()) > -1 || `${label} ${option.subname}`.toLocaleLowerCase().indexOf(search.toLocaleLowerCase()) > -1;\n };\n }\n return VueSelect.props.filterBy.default;\n },\n localLabel() {\n if (this.label !== null) {\n return this.label;\n }\n if (this.userSelect) {\n return \"displayName\";\n }\n return VueSelect.props.label.default;\n },\n propsToForward() {\n const vueSelectKeys = [\n ...Object.keys(VueSelect.props),\n ...VueSelect.mixins.flatMap((mixin) => Object.keys(mixin.props ?? {}))\n ];\n const initialPropsToForward = Object.fromEntries(Object.entries(this.$props).filter(([key]) => vueSelectKeys.includes(key)));\n const propsToForward = {\n ...initialPropsToForward,\n // Custom overrides of vue-select props\n value: this.model,\n calculatePosition: this.localCalculatePosition,\n closeOnSelect: this.closeOnSelect && !this.keepOpen,\n filterBy: this.localFilterBy,\n label: this.localLabel\n };\n return propsToForward;\n },\n listenersToForward() {\n return {\n ...this.$listeners,\n input: ($event) => {\n this.model = $event;\n }\n };\n }\n },\n mounted() {\n if (!this.labelOutside && !this.inputLabel && !this.ariaLabelCombobox) {\n Vue.util.warn(\"[NcSelect] An `inputLabel` or `ariaLabelCombobox` should be set. If an external label is used, `labelOutside` should be set to `true`.\");\n }\n if (this.inputLabel && this.ariaLabelCombobox) {\n Vue.util.warn(\"[NcSelect] Only one of `inputLabel` or `ariaLabelCombobox` should to be set.\");\n }\n },\n methods: {\n t\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"VueSelect\", _vm._g(_vm._b({ staticClass: \"select\", class: {\n \"select--legacy\": _vm.isLegacy,\n \"select--no-wrap\": _vm.noWrap,\n \"user-select\": _vm.userSelect\n }, on: { \"search\": (searchString) => _vm.search = searchString }, scopedSlots: _vm._u([!_vm.labelOutside && _vm.inputLabel ? { key: \"header\", fn: function() {\n return [_c(\"label\", { staticClass: \"select__label\", attrs: { \"for\": _vm.inputId } }, [_vm._v(\" \" + _vm._s(_vm.inputLabel) + \" \")])];\n }, proxy: true } : null, { key: \"search\", fn: function({ attributes, events }) {\n return [_c(\"input\", _vm._g(_vm._b({ staticClass: \"vs__search\", class: _vm.inputClass, attrs: { \"required\": _vm.inputRequired, \"aria-describedby\": [attributes[\"aria-describedby\"], _vm.helperText ? `${_vm.inputId}-helper-text` : null].filter(Boolean).join(\" \") || void 0, \"dir\": \"auto\" } }, \"input\", attributes, false), events))];\n } }, { key: \"open-indicator\", fn: function({ attributes }) {\n return [_c(\"ChevronDown\", _vm._b({ style: {\n cursor: !_vm.disabled ? \"pointer\" : null\n }, attrs: { \"fill-color\": \"var(--vs-controls-color)\", \"size\": 26 } }, \"ChevronDown\", attributes, false))];\n } }, { key: \"option\", fn: function(option) {\n return [_vm._t(\"option\", function() {\n return [_vm.userSelect ? _c(\"NcListItemIcon\", _vm._b({ attrs: { \"avatar-size\": 32, \"name\": option[_vm.localLabel], \"search\": _vm.search } }, \"NcListItemIcon\", option, false)) : _c(\"NcEllipsisedOption\", { attrs: { \"name\": String(option[_vm.localLabel]), \"search\": _vm.search } })];\n }, null, option)];\n } }, { key: \"selected-option\", fn: function(selectedOption) {\n return [_vm._t(\"selected-option\", function() {\n return [_vm.userSelect ? _c(\"NcListItemIcon\", _vm._b({ attrs: { \"avatar-size\": _vm.avatarSize, \"name\": selectedOption[_vm.localLabel], \"no-margin\": \"\", \"search\": _vm.search } }, \"NcListItemIcon\", selectedOption, false)) : _c(\"NcEllipsisedOption\", { attrs: { \"name\": String(selectedOption[_vm.localLabel]), \"search\": _vm.search } })];\n }, { \"vBind\": selectedOption })];\n } }, { key: \"spinner\", fn: function(spinner) {\n return [spinner.loading ? _c(\"NcLoadingIcon\") : _vm._e()];\n } }, { key: \"no-options\", fn: function() {\n return [_vm._v(\" \" + _vm._s(_vm.t(\"No results\")) + \" \")];\n }, proxy: true }, _vm.helperText || _vm.$scopedSlots.footer ? { key: \"footer\", fn: function(data) {\n return [_vm.helperText ? _c(\"p\", { staticClass: \"select__helper-text\", class: {\n \"select__helper-text--error\": _vm.error,\n \"select__helper-text--success\": _vm.success\n }, attrs: { \"id\": `${_vm.inputId}-helper-text` } }, [_vm.success ? _c(\"NcIconSvgWrapper\", { staticClass: \"select__helper-text-icon\", attrs: { \"path\": _vm.mdiCheck, \"inline\": \"\" } }) : _vm.error ? _c(\"NcIconSvgWrapper\", { staticClass: \"select__helper-text-icon\", attrs: { \"path\": _vm.mdiAlertCircleOutline, \"inline\": \"\" } }) : _vm._e(), _vm._v(\" \" + _vm._s(_vm.helperText) + \" \")], 1) : _vm._e(), _vm._t(\"footer\", null, null, data)];\n } } : null, _vm._l(_vm.forwardedSlots, function(name) {\n return { key: name, fn: function(data) {\n return [_vm._t(name, null, null, data)];\n } };\n })], null, true) }, \"VueSelect\", _vm.propsToForward, false), _vm.listenersToForward));\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n null\n);\nconst NcSelect = __component__.exports;\nexport {\n NcSelect as N\n};\n//# sourceMappingURL=NcSelect-COY5TV2U.mjs.map\n","import { b as mdiUndo, c as mdiClose, d as mdiArrowRight } from \"./mdi-DtJ8HsM-.mjs\";\nimport { N as NcInputField } from \"./NcInputField-XHOSwDV7.mjs\";\nimport { u as useModelMigration } from \"./useModelMigration-EhAWvqDD.mjs\";\nimport { r as register, b as t53, c as t17, a as t } from \"./_l10n-Dv1YKfKS.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-Bui9PhAS.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t17, t53);\nconst NcInputFieldProps = new Set(Object.keys(NcInputField.props));\nconst _sfc_main = {\n name: \"NcTextField\",\n components: {\n NcIconSvgWrapper,\n NcInputField\n },\n // Allow forwarding all attributes\n inheritAttrs: false,\n model: {\n prop: \"modelValue\",\n event: \"update:modelValue\"\n },\n props: {\n /**\n * Any [NcInputField](#/Components/NcFields?id=ncinputfield) props\n */\n // Not an actual prop but needed to show in vue-styleguidist docs\n // eslint-disable-next-line\n \" \": {},\n // Reuse all the props from NcInputField for better typing and documentation\n ...NcInputField.props,\n /**\n * The `aria-label` to set on the trailing button\n * If no explicit value is set it will default to the one matching the `trailingButtonIcon`:\n *\n * @default 'Clear text'|'Save changes'|'Undo changes'\n */\n trailingButtonLabel: {\n type: String,\n default: \"\"\n },\n // Custom props\n /**\n * Specifies which material design icon should be used for the trailing\n * button.\n *\n * The `'arrowRight'` value is deprecated and will be removed in the next major version.\n * Use `'arrowEnd'` instead.\n *\n * @type {'close'|'arrowEnd'|'arrowRight'|'undo'}\n */\n trailingButtonIcon: {\n type: String,\n default: \"close\",\n validator: (value) => [\n \"close\",\n \"arrowEnd\",\n \"arrowRight\",\n \"undo\"\n ].includes(value)\n }\n },\n emits: [\n /**\n * Removed in v9 - use `update:modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n \"update:value\",\n \"update:modelValue\",\n /** Same as update:modelValue for Vue 2 compatibility */\n \"update:model-value\"\n ],\n setup() {\n const model = useModelMigration(\"value\", \"update:value\");\n return {\n model,\n mdiArrowRight,\n mdiClose,\n mdiUndo\n };\n },\n computed: {\n /**\n * Is the trailing button icon directional.\n * Meaning the icon needs to be flipped on RTL text flow.\n */\n isArrow() {\n return this.trailingButtonIcon === \"arrowEnd\" || this.trailingButtonIcon === \"arrowRight\";\n },\n propsAndAttrsToForward() {\n const predefinedLabels = {\n arrowEnd: t(\"Save changes\"),\n arrowRight: t(\"Save changes\"),\n close: t(\"Clear text\"),\n undo: t(\"Undo changes\")\n };\n return {\n // Proxy all the HTML attributes\n ...this.$attrs,\n // Proxy original NcInputField's props\n ...Object.fromEntries(Object.entries(this.$props).filter(([key]) => NcInputFieldProps.has(key))),\n // Adjust aria-label for predefined trailing buttons\n trailingButtonLabel: this.trailingButtonLabel || predefinedLabels[this.trailingButtonIcon]\n };\n }\n },\n methods: {\n /**\n * Focus the input element\n *\n * @public\n */\n focus() {\n this.$refs.inputField.focus();\n },\n /**\n * Select all the text in the input\n *\n * @public\n */\n select() {\n this.$refs.inputField.select();\n }\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"NcInputField\", _vm._g(_vm._b({ ref: \"inputField\", scopedSlots: _vm._u([!!_vm.$scopedSlots.icon || !!_vm.$slots.default || !!_vm.$scopedSlots.default ? { key: \"icon\", fn: function() {\n return [_vm._t(\"icon\", function() {\n return [_vm._t(\"default\")];\n })];\n }, proxy: true } : null, _vm.type !== \"search\" ? { key: \"trailing-button-icon\", fn: function() {\n return [_vm.isArrow ? _c(\"NcIconSvgWrapper\", { attrs: { \"directional\": \"\", \"path\": _vm.mdiArrowRight } }) : _c(\"NcIconSvgWrapper\", { attrs: { \"path\": _vm.trailingButtonIcon === \"undo\" ? _vm.mdiUndo : _vm.mdiClose } })];\n }, proxy: true } : null], null, true) }, \"NcInputField\", _vm.propsAndAttrsToForward, false), _vm.$listeners));\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n null\n);\nconst NcTextField = __component__.exports;\nexport {\n NcTextField as N\n};\n//# sourceMappingURL=NcTextField-Doo3Q45d.mjs.map\n","import { defineComponent, computed } from \"vue\";\nimport { u as useModelMigration } from \"./useModelMigration-EhAWvqDD.mjs\";\nimport { r as register, v as t46, a as t } from \"./_l10n-Dv1YKfKS.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { N as NcSelect } from \"./NcSelect-COY5TV2U.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t46);\nfunction formatTimezoneId(timezoneId) {\n return timezoneId.slice(timezoneId.indexOf(\"/\") + 1).replaceAll(\"/\", \" - \").replaceAll(\"_\", \" \");\n}\nfunction getTimezones() {\n return Intl.supportedValuesOf(\"timeZone\").filter((tz) => !tz.startsWith(\"Etc/\")).map((timezoneId) => ({\n timezoneId,\n label: formatTimezoneId(timezoneId)\n })).sort((a, b) => a.timezoneId.localeCompare(b.timezoneId));\n}\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcTimezonePicker\",\n props: {\n additionalTimezones: { default: () => [] },\n value: { default: void 0 },\n modelValue: { default: \"floating\" },\n uid: { default: createElementId() }\n },\n emits: [\"input\", \"update:modelValue\", \"update:model-value\"],\n setup(__props) {\n const props = __props;\n const model = useModelMigration(\"value\", \"input\");\n const formattedAdditionalTimezones = computed(() => {\n return props.additionalTimezones.map(({ timezoneId, label }) => ({\n timezoneId,\n label\n }));\n });\n const options = computed(() => {\n const timezones = getTimezones();\n timezones.unshift(...formattedAdditionalTimezones.value);\n return timezones;\n });\n function filterBy(option, label, search) {\n const terms = search.trim().split(/\\s+/);\n const values = Object.values(option);\n return terms.every((term) => {\n return values.some((value) => value.toLowerCase().includes(term.toLowerCase()));\n });\n }\n return { __sfc: true, props, model, formattedAdditionalTimezones, options, filterBy, t, NcSelect };\n }\n});\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(_setup.NcSelect, { attrs: { \"aria-label-combobox\": _setup.t(\"Search for time zone\"), \"clearable\": false, \"filter-by\": _setup.filterBy, \"multiple\": false, \"options\": _setup.options, \"placeholder\": _setup.t(\"Type to search time zone\"), \"uid\": _vm.uid, \"reduce\": (option) => option.timezoneId, \"label\": \"label\" }, model: { value: _setup.model, callback: function($$v) {\n _setup.model = $$v;\n }, expression: \"model\" } });\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n null\n);\nconst NcTimezonePicker = __component__.exports;\nexport {\n NcTimezonePicker as N\n};\n//# sourceMappingURL=NcTimezonePicker-Bx5Xf88c.mjs.map\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./NcUserStatusIcon-Bw8yMFMP.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./NcUserStatusIcon-Bw8yMFMP.css\";\n export default content && content.locals ? content.locals : undefined;\n","import '../assets/NcUserStatusIcon-Bw8yMFMP.css';\nimport axios from \"@nextcloud/axios\";\nimport { getCapabilities } from \"@nextcloud/capabilities\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport { r as register, Y as t54, Z as t11, a as t } from \"./_l10n-Dv1YKfKS.mjs\";\nimport { a as isLegacy32 } from \"./legacy-Cy3dCXuB.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nconst awayLegacySvg = '\\n\\n\t\\n\t\\n\\n';\nconst awaySvg = '\\n\\n\t\\n\\n';\nconst busySvg = '\\n\\n\t\\n\\n';\nconst dndLegacySvg = '\\n\\n\t\\n\t\\n\t\\n\\n';\nconst dndSvg = '\\n\\n\t\\n\\n';\nconst invisibleLegacySvg = '\\n\\n\t\\n\t\\n\\n';\nconst invisibleSvg = '\\n\\n\t\\n\\n';\nconst onlineLegacySvg = '\\n\\n\t\\n\\n';\nconst onlineSvg = '\\n\\n\t\\n\\n';\nregister(t54);\nregister(t11);\nfunction getUserStatusText(status) {\n switch (status) {\n case \"away\":\n return t(\"away\");\n // TRANSLATORS: User status if the user is currently away from keyboard\n case \"busy\":\n return t(\"busy\");\n case \"dnd\":\n return t(\"do not disturb\");\n case \"online\":\n return t(\"online\");\n case \"invisible\":\n return t(\"invisible\");\n case \"offline\":\n return t(\"offline\");\n default:\n return status;\n }\n}\nconst matchSvg = {\n online: isLegacy32 ? onlineLegacySvg : onlineSvg,\n away: isLegacy32 ? awayLegacySvg : awaySvg,\n busy: isLegacy32 ? awayLegacySvg : busySvg,\n dnd: isLegacy32 ? dndLegacySvg : dndSvg,\n invisible: isLegacy32 ? invisibleLegacySvg : invisibleSvg,\n offline: isLegacy32 ? invisibleLegacySvg : invisibleSvg\n};\nconst _sfc_main = {\n name: \"NcUserStatusIcon\",\n props: {\n /**\n * Set the user id to fetch the status\n */\n user: {\n type: String,\n default: null\n },\n /**\n * Set the status\n *\n * @type {'online' | 'away' | 'busy' | 'dnd' | 'invisible' | 'offline'}\n */\n status: {\n type: String,\n default: null,\n validator: (value) => [\n \"online\",\n \"away\",\n \"busy\",\n \"dnd\",\n \"invisible\",\n \"offline\"\n ].includes(value)\n },\n /**\n * Set the `aria-hidden` attribute\n *\n * @type {'true' | 'false'}\n */\n ariaHidden: {\n type: String,\n default: null,\n validator: (value) => [\n \"true\",\n \"false\"\n ].includes(value)\n }\n },\n data() {\n return {\n fetchedUserStatus: null\n };\n },\n computed: {\n activeStatus() {\n return this.status ?? this.fetchedUserStatus;\n },\n activeSvg() {\n return matchSvg[this.activeStatus] ?? null;\n },\n ariaLabel() {\n if (this.ariaHidden === \"true\") {\n return null;\n }\n return t(\"User status: {status}\", { status: getUserStatusText(this.activeStatus) });\n }\n },\n watch: {\n user: {\n immediate: true,\n async handler(user) {\n if (!user || !getCapabilities()?.user_status?.enabled) {\n this.fetchedUserStatus = null;\n return;\n }\n try {\n const { data } = await axios.get(generateOcsUrl(\"/apps/user_status/api/v1/statuses/{user}\", { user }));\n this.fetchedUserStatus = data.ocs?.data?.status;\n } catch {\n this.fetchedUserStatus = null;\n }\n }\n }\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _vm.activeStatus ? _c(\"span\", { staticClass: \"user-status-icon\", class: {\n \"user-status-icon--invisible\": [\"invisible\", \"offline\"].includes(_vm.status)\n }, attrs: { \"role\": \"img\", \"aria-hidden\": _vm.ariaHidden, \"aria-label\": _vm.ariaLabel }, domProps: { \"innerHTML\": _vm._s(_vm.activeSvg) } }) : _vm._e();\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"86b73d39\"\n);\nconst NcUserStatusIcon = __component__.exports;\nexport {\n NcUserStatusIcon as N,\n getUserStatusText as g\n};\n//# sourceMappingURL=NcUserStatusIcon-BfRlUhT_.mjs.map\n","function ScopeComponent(Component) {\n if (!Component.mounted) {\n Component.mounted = [];\n } else if (!Array.isArray(Component.mounted)) {\n Component.mounted = [Component.mounted];\n }\n Component.mounted.push(function() {\n this.$el.setAttribute(`data-v-${\"219421f\"}`, \"\");\n });\n}\nexport {\n ScopeComponent as S\n};\n//# sourceMappingURL=ScopeComponent-DcP-v09A.mjs.map\n","import { getLanguage } from \"@nextcloud/l10n\";\nimport { getGettextBuilder } from \"@nextcloud/l10n/gettext\";\n/*!\n * SPDX-FileCopyrightText: Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nconst gettext = getGettextBuilder().detectLanguage().build();\nconst n = (...args) => gettext.ngettext(...args);\nconst t = (...args) => gettext.gettext(...args);\nfunction register(...chunks) {\n for (const chunk of chunks) {\n if (chunk.registered) {\n continue;\n }\n for (const { l: language, t: translations } of chunk) {\n if (language !== getLanguage() || !translations) {\n continue;\n }\n const decompressed = Object.fromEntries(Object.entries(translations).map(([id, value]) => [\n id,\n {\n msgid: id,\n msgid_plural: value.p,\n msgstr: value.v\n }\n ]));\n gettext.addTranslations({\n translations: {\n \"\": decompressed\n }\n });\n }\n chunk.registered = true;\n }\n}\nconst t0 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (غير مرئي)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (مقيد)\"] }, \"Select a tag\": { \"v\": [\"اختر وسم\"] } } }, { \"l\": \"ast\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (invisible)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (restrinxóse)\"] }, \"Select a tag\": { \"v\": [\"Seleicionar una etiqueta\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (diwelus)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (bevennet)\"] }, \"Select a tag\": { \"v\": [\"Choaz ur c'hlav\"] } } }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (invisible)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (restringit)\"] }, \"Select a tag\": { \"v\": [\"Seleccioneu una etiqueta\"] } } }, { \"l\": \"cs\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (neviditelné)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (omezené)\"] }, \"Select a tag\": { \"v\": [\"Vybrat štítek\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (neviditelné)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (omezené)\"] }, \"Select a tag\": { \"v\": [\"Vybrat štítek\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (usynlig)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (begrænset)\"] }, \"Select a tag\": { \"v\": [\"Vælg et mærke\"] } } }, { \"l\": \"de\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (unsichtbar)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (eingeschränkt)\"] }, \"Select a tag\": { \"v\": [\"Schlagwort auswählen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (unsichtbar)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (eingeschränkt)\"] }, \"Select a tag\": { \"v\": [\"Schlagwort auswählen\"] } } }, { \"l\": \"el\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (αόρατο)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (περιορισμένο)\"] }, \"Select a tag\": { \"v\": [\"Επιλογή ετικέτας\"] } } }, { \"l\": \"en-GB\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (invisible)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (restricted)\"] }, \"Select a tag\": { \"v\": [\"Select a tag\"] } } }, { \"l\": \"eo\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (kaŝita)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (limigita)\"] }, \"Select a tag\": { \"v\": [\"Elektu etikedon\"] } } }, { \"l\": \"es\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (invisible)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (restringido)\"] }, \"Select a tag\": { \"v\": [\"Seleccione una etiqueta\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (invisible)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (restringido)\"] }, \"Select a tag\": { \"v\": [\"Elija una etiqueta\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (invisible)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (restricted)\"] }, \"Select a tag\": { \"v\": [\"Seleccionar una etiqueta\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (invisible)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (restringido)\"] }, \"Select a tag\": { \"v\": [\"Seleccionar una etiqueta\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (nähtamatu)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (piiratud)\"] }, \"Select a tag\": { \"v\": [\"Vali silt\"] } } }, { \"l\": \"eu\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (ikusezina)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (mugatua)\"] }, \"Select a tag\": { \"v\": [\"Hautatu etiketa bat\"] } } }, { \"l\": \"fa\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} مخفی\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} محدود شده\"] }, \"Select a tag\": { \"v\": [\"انتخاب یک برچسب\"] } } }, { \"l\": \"fi\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (näkymätön)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (rajoitettu)\"] }, \"Select a tag\": { \"v\": [\"Valitse tunniste\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (invisible)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (restreinte)\"] }, \"Select a tag\": { \"v\": [\"Sélectionner une étiquette\"] } } }, { \"l\": \"ga\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (dofheicthe)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (srianta)\"] }, \"Select a tag\": { \"v\": [\"Roghnaigh clib\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (invisíbel)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (restrinxido)\"] }, \"Select a tag\": { \"v\": [\"Seleccione unha etiqueta\"] } } }, { \"l\": \"he\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (נסתר)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (מוגבל)\"] }, \"Select a tag\": { \"v\": [\"בחירת תגית\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (nevidljivo)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (ograničeno)\"] }, \"Select a tag\": { \"v\": [\"Odaberi oznaku\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (láthatatlan)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (korlátozott)\"] }, \"Select a tag\": { \"v\": [\"Válasszon címkét\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (tidak terlihat)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (dibatasi)\"] }, \"Select a tag\": { \"v\": [\"Pilih tag\"] } } }, { \"l\": \"is\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (ósýnilegt)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (takmarkað)\"] }, \"Select a tag\": { \"v\": [\"Veldu merki\"] } } }, { \"l\": \"it\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (invisibile)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (limitato)\"] }, \"Select a tag\": { \"v\": [\"Seleziona un'etichetta\"] } } }, { \"l\": \"ja\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (不可視)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (制限付)\"] }, \"Select a tag\": { \"v\": [\"タグを選択\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (不可視)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (制限付)\"] }, \"Select a tag\": { \"v\": [\"タグを選択\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag}(숨김)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag}(제한)\"] }, \"Select a tag\": { \"v\": [\"태그 선택\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (ບໍ່ສະແດງ)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (ຈຳກັດ)\"] }, \"Select a tag\": { \"v\": [\"ເລືອກແທັກ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (nematoma)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (apribota)\"] }, \"Select a tag\": { \"v\": [\"Pasirinkti žymą\"] } } }, { \"l\": \"lv\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (neredzams)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (ierobežots)\"] }, \"Select a tag\": { \"v\": [\"Izvēlēties birku\"] } } }, { \"l\": \"mk\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (невидливо)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (ограничено)\"] }, \"Select a tag\": { \"v\": [\"Избери ознака\"] } } }, { \"l\": \"mn\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (үл харагдах)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (хязгаарлагдмал)\"] }, \"Select a tag\": { \"v\": [\"Шошго сонгох\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (ကွယ်ဝှက်ထား)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (ကန့်သတ်)\"] }, \"Select a tag\": { \"v\": [\"tag ရွေးချယ်ရန်\"] } } }, { \"l\": \"nb\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (usynlig)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (beskyttet)\"] }, \"Select a tag\": { \"v\": [\"Velg en merkelapp\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (onzichtbaar)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (beperkt)\"] }, \"Select a tag\": { \"v\": [\"Selecteer een label\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (invisible)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (limit)\"] }, \"Select a tag\": { \"v\": [\"Seleccionar una etiqueta\"] } } }, { \"l\": \"pl\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (niewidoczna)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (ograniczona)\"] }, \"Select a tag\": { \"v\": [\"Wybierz etykietę\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (invisível)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (restrito)\"] }, \"Select a tag\": { \"v\": [\"Selecione uma etiqueta\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (invisível)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (restrito)\"] }, \"Select a tag\": { \"v\": [\"Selecionar uma etiqueta\"] } } }, { \"l\": \"ro\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (invizibil)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (restricționat)\"] }, \"Select a tag\": { \"v\": [\"Selectează o etichetă\"] } } }, { \"l\": \"ru\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (невидимая)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (ограниченная)\"] }, \"Select a tag\": { \"v\": [\"Выберите метку\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (neviditeľný)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (obmedzený)\"] }, \"Select a tag\": { \"v\": [\"Vybrať štítok\"] } } }, { \"l\": \"sl\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (nevidno)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (omejeno)\"] }, \"Select a tag\": { \"v\": [\"Izbor oznake\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (невидљиво)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (ограничено)\"] }, \"Select a tag\": { \"v\": [\"Изаберите ознаку\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (osynlig)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (begränsad)\"] }, \"Select a tag\": { \"v\": [\"Välj en tagg\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (görünmez)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (kısıtlanmış)\"] }, \"Select a tag\": { \"v\": [\"Bir etiket seçin\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (невидимий)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (обмежений)\"] }, \"Select a tag\": { \"v\": [\"Виберіть позначку\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (ko'rinmas)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (cheklangan)\"] }, \"Select a tag\": { \"v\": [\"Teg tanlang\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (隐藏)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (受限)\"] }, \"Select a tag\": { \"v\": [\"选择一个标签\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag} (隱藏)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag} (受限)\"] }, \"Select a tag\": { \"v\": [\"選擇標籤\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"{tag} (invisible)\": { \"v\": [\"{tag}(隱藏)\"] }, \"{tag} (restricted)\": { \"v\": [\"{tag}(受限)\"] }, \"Select a tag\": { \"v\": [\"選擇標籤\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t1 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"لون بالقيمة الست عشرية {hex}\"] }, \"Back\": { \"v\": [\"عودة\"] }, \"Choose\": { \"v\": [\"إختَر\"] }, \"Color picker\": { \"v\": [\"لاقط الألوان\"] }, \"More options\": { \"v\": [\"خيارات أخرى ...\"] } } }, { \"l\": \"ast\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Un color con un valor HEX {hex}\"] }, \"Back\": { \"v\": [\"Atrás\"] }, \"Choose\": { \"v\": [\"Escoyer\"] }, \"Color picker\": { \"v\": [\"Selector de colores\"] }, \"More options\": { \"v\": [\"Más opciones\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": { \"Choose\": { \"v\": [\"Dibab\"] } } }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Choose\": { \"v\": [\"Tria\"] } } }, { \"l\": \"cs\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Barva vyjádřená HEX hodnotou {hex}\"] }, \"Back\": { \"v\": [\"Zpět\"] }, \"Choose\": { \"v\": [\"Zvolit\"] }, \"Color picker\": { \"v\": [\"Výběr barev\"] }, \"More options\": { \"v\": [\"Další volby\"] }, \"No color\": { \"v\": [\"Žádná barva\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Barva vyjádřená HEX hodnotou {hex}\"] }, \"Back\": { \"v\": [\"Zpět\"] }, \"Choose\": { \"v\": [\"Zvolit\"] }, \"Color picker\": { \"v\": [\"Výběr barev\"] }, \"More options\": { \"v\": [\"Další volby\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"En farve med en HEX-værdi {hex}\"] }, \"Back\": { \"v\": [\"Tilbage\"] }, \"Choose\": { \"v\": [\"Vælg\"] }, \"Color picker\": { \"v\": [\"Farvevælger\"] }, \"More options\": { \"v\": [\"Flere muligheder\"] }, \"No color\": { \"v\": [\"Ingen farve\"] } } }, { \"l\": \"de\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Eine Farbe mit einem HEX-Wert {hex}\"] }, \"Back\": { \"v\": [\"Zurück\"] }, \"Choose\": { \"v\": [\"Auswählen\"] }, \"Color picker\": { \"v\": [\"Farbauswahl\"] }, \"More options\": { \"v\": [\"Weitere Optionen\"] }, \"No color\": { \"v\": [\"Keine Farbe\"] } } }, { \"l\": \"de-DE\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Eine Farbe mit einem HEX-Wert {hex}\"] }, \"Back\": { \"v\": [\"Zurück\"] }, \"Choose\": { \"v\": [\"Auswählen\"] }, \"Color picker\": { \"v\": [\"Farbauswahl\"] }, \"More options\": { \"v\": [\"Mehr Optionen\"] }, \"No color\": { \"v\": [\"Keine Farbe\"] } } }, { \"l\": \"el\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Ένα χρώμα με τιμή HEX {hex}\"] }, \"Back\": { \"v\": [\"Επιστροφή\"] }, \"Choose\": { \"v\": [\"Επιλογή\"] }, \"Color picker\": { \"v\": [\"Επιλογέας χρώματος\"] }, \"More options\": { \"v\": [\"Περισσότερες επιλογές\"] }, \"No color\": { \"v\": [\"Χωρίς χρώμα\"] } } }, { \"l\": \"en-GB\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"A colour with a HEX value {hex}\"] }, \"Back\": { \"v\": [\"Back\"] }, \"Choose\": { \"v\": [\"Choose\"] }, \"Color picker\": { \"v\": [\"Colour picker\"] }, \"More options\": { \"v\": [\"More options\"] }, \"No color\": { \"v\": [\"No colour\"] } } }, { \"l\": \"eo\", \"t\": { \"Choose\": { \"v\": [\"Elektu\"] } } }, { \"l\": \"es\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Un color con un valor HEX {hex}\"] }, \"Back\": { \"v\": [\"Atrás\"] }, \"Choose\": { \"v\": [\"Escoger\"] }, \"Color picker\": { \"v\": [\"Selector de color\"] }, \"More options\": { \"v\": [\"Más opciones\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Un color con valor HEX {hex}\"] }, \"Back\": { \"v\": [\"Atrás\"] }, \"Choose\": { \"v\": [\"Elegir\"] }, \"Color picker\": { \"v\": [\"Selector de color\"] }, \"More options\": { \"v\": [\"Más opciones\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Back\": { \"v\": [\"Atrás\"] }, \"Choose\": { \"v\": [\"Elegir\"] }, \"More options\": { \"v\": [\"Más opciones\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Un color con valor HEX {hex}\"] }, \"Back\": { \"v\": [\"Atrás\"] }, \"Choose\": { \"v\": [\"Elegir\"] }, \"Color picker\": { \"v\": [\"Selector de color\"] }, \"More options\": { \"v\": [\"Más opciones\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Värv kuueteistkümnendarvuna {hex}\"] }, \"Back\": { \"v\": [\"Tagasi\"] }, \"Choose\": { \"v\": [\"Tee valik\"] }, \"Color picker\": { \"v\": [\"Värvivalija\"] }, \"More options\": { \"v\": [\"Rohkem valikuid\"] }, \"No color\": { \"v\": [\"Värv puudub\"] } } }, { \"l\": \"eu\", \"t\": { \"Back\": { \"v\": [\"Atzera\"] }, \"Choose\": { \"v\": [\"Aukeratu\"] }, \"More options\": { \"v\": [\"Aukera gehiago\"] } } }, { \"l\": \"fa\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"رنگی با مقدار مبنای هشت {hex}\"] }, \"Back\": { \"v\": [\"بازگشت\"] }, \"Choose\": { \"v\": [\"انتخاب کنید\"] }, \"Color picker\": { \"v\": [\"انتخاب‌گر رنگ\"] }, \"More options\": { \"v\": [\"گزینه‌های بیشتر\"] } } }, { \"l\": \"fi\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Väri heksa-arvolla {hex}\"] }, \"Back\": { \"v\": [\"Takaisin\"] }, \"Choose\": { \"v\": [\"Valitse\"] }, \"Color picker\": { \"v\": [\"Värivalitsin\"] }, \"More options\": { \"v\": [\"Lisää vaihtoehtoja\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Une couleur dont la valeur hexadécimale est {hex}\"] }, \"Back\": { \"v\": [\"Retour\"] }, \"Choose\": { \"v\": [\"Choisir\"] }, \"Color picker\": { \"v\": [\"Sélecteur de couleurs\"] }, \"More options\": { \"v\": [\"Plus d'options\"] }, \"No color\": { \"v\": [\"Sans couleur\"] } } }, { \"l\": \"ga\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Dath le luach HEX {hex}\"] }, \"Back\": { \"v\": [\"Ar ais\"] }, \"Choose\": { \"v\": [\"Roghnaigh\"] }, \"Color picker\": { \"v\": [\"Roghnóir dathanna\"] }, \"More options\": { \"v\": [\"Tuilleadh roghanna\"] }, \"No color\": { \"v\": [\"Gan dath\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Unha cor cun valor HEX {hex}\"] }, \"Back\": { \"v\": [\"Atrás\"] }, \"Choose\": { \"v\": [\"Escoller\"] }, \"Color picker\": { \"v\": [\"Selector de cores\"] }, \"More options\": { \"v\": [\"Máis opcións\"] }, \"No color\": { \"v\": [\"Sen cor\"] } } }, { \"l\": \"he\", \"t\": { \"Back\": { \"v\": [\"חזרה\"] }, \"Choose\": { \"v\": [\"בחירה\"] }, \"More options\": { \"v\": [\"אפשרויות נוספות\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Boja s HEX vrijednošću {hex}\"] }, \"Back\": { \"v\": [\"Natrag\"] }, \"Choose\": { \"v\": [\"Odaberi\"] }, \"Color picker\": { \"v\": [\"Odabir boje\"] }, \"More options\": { \"v\": [\"Više mogućnosti\"] }, \"No color\": { \"v\": [\"Bez boje\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Szín ezzel a HEX értékkel: {hex}\"] }, \"Back\": { \"v\": [\"Vissza\"] }, \"Choose\": { \"v\": [\"Válassszon\"] }, \"Color picker\": { \"v\": [\"Színválasztó\"] }, \"More options\": { \"v\": [\"További lehetőségek\"] }, \"No color\": { \"v\": [\"Nincs szín\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Warna dengan nilai HEX {hex}\"] }, \"Back\": { \"v\": [\"Kembali\"] }, \"Choose\": { \"v\": [\"Pilih\"] }, \"Color picker\": { \"v\": [\"Pemilih warna\"] }, \"More options\": { \"v\": [\"Opsi lainnya\"] }, \"No color\": { \"v\": [\"Tanpa warna\"] } } }, { \"l\": \"is\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Litur með HEX-gildi {hex}\"] }, \"Back\": { \"v\": [\"Til baka\"] }, \"Choose\": { \"v\": [\"Velja\"] }, \"Color picker\": { \"v\": [\"Litaplokkari\"] }, \"More options\": { \"v\": [\"Fleiri valkostir\"] } } }, { \"l\": \"it\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Un colore con un valore HEX {hex}\"] }, \"Back\": { \"v\": [\"Indietro\"] }, \"Choose\": { \"v\": [\"Scegli\"] }, \"More options\": { \"v\": [\"Altre opzioni\"] } } }, { \"l\": \"ja\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\" HEX値 {hex} を持つ色\"] }, \"Back\": { \"v\": [\"戻る\"] }, \"Choose\": { \"v\": [\"選択\"] }, \"Color picker\": { \"v\": [\"カラーピッカー\"] }, \"More options\": { \"v\": [\"他のオプション\"] }, \"No color\": { \"v\": [\"色なし\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\" HEX値 {hex} を持つ色\"] }, \"Back\": { \"v\": [\"戻る\"] }, \"Choose\": { \"v\": [\"選択\"] }, \"Color picker\": { \"v\": [\"カラーピッカー\"] }, \"More options\": { \"v\": [\"他のオプション\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"HEX 값이 {hex}인 색상\"] }, \"Back\": { \"v\": [\"뒤로\"] }, \"Choose\": { \"v\": [\"선택\"] }, \"Color picker\": { \"v\": [\"색상 선택기\"] }, \"More options\": { \"v\": [\"옵션 더 보기\"] }, \"No color\": { \"v\": [\"색 없음\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"ສີທີ່ມີຄ່າ HEX {hex}\"] }, \"Back\": { \"v\": [\"ກັບຄືນ\"] }, \"Choose\": { \"v\": [\"ເລືອກ\"] }, \"Color picker\": { \"v\": [\"ໂຕເລືອກສີ\"] }, \"More options\": { \"v\": [\"ຕົວເລືອກເພີ່ມເຕີມ\"] }, \"No color\": { \"v\": [\"ບໍ່ມີສີ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Spalva, kurios HEX reikšmė yra {hex}\"] }, \"Back\": { \"v\": [\"Atgal\"] }, \"Choose\": { \"v\": [\"Pasirinkti\"] }, \"Color picker\": { \"v\": [\"Spalvos parinkiklis\"] }, \"More options\": { \"v\": [\"Daugiau parinkčių\"] }, \"No color\": { \"v\": [\"Be spalvos\"] } } }, { \"l\": \"lv\", \"t\": { \"Choose\": { \"v\": [\"Izvēlēties\"] } } }, { \"l\": \"mk\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Боја со HEX вредност {hex}\"] }, \"Back\": { \"v\": [\"Назад\"] }, \"Choose\": { \"v\": [\"Избери\"] }, \"Color picker\": { \"v\": [\"Избор на боја\"] }, \"More options\": { \"v\": [\"Повеќе опции\"] }, \"No color\": { \"v\": [\"Без боја\"] } } }, { \"l\": \"mn\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"{hex} HEX утгатай өнгө\"] }, \"Back\": { \"v\": [\"Буцах\"] }, \"Choose\": { \"v\": [\"Сонгох\"] }, \"Color picker\": { \"v\": [\"Өнгө сонгогч\"] }, \"More options\": { \"v\": [\"Нэмэлт сонголтууд\"] }, \"No color\": { \"v\": [\"Өнгөгүй\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": { \"Choose\": { \"v\": [\"ရွေးချယ်ရန်\"] } } }, { \"l\": \"nb\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"En farge med en HEX-verdi {hex}\"] }, \"Back\": { \"v\": [\"Tilbake\"] }, \"Choose\": { \"v\": [\"Velg\"] }, \"Color picker\": { \"v\": [\"Fargevelger\"] }, \"More options\": { \"v\": [\"Flere alternativer\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Een kleur met een HEX-waarde {hex}\"] }, \"Back\": { \"v\": [\"Terug\"] }, \"Choose\": { \"v\": [\"Kiezen\"] }, \"Color picker\": { \"v\": [\"Kleurkiezer\"] }, \"More options\": { \"v\": [\"Meer opties\"] }, \"No color\": { \"v\": [\"Geen kleur\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": { \"Choose\": { \"v\": [\"Causir\"] } } }, { \"l\": \"pl\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Kolor o wartości HEX {hex}\"] }, \"Back\": { \"v\": [\"Wstecz\"] }, \"Choose\": { \"v\": [\"Wybierz\"] }, \"Color picker\": { \"v\": [\"Wybierz kolor\"] }, \"More options\": { \"v\": [\"Więcej opcji\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Uma cor com valor HEX {hex}\"] }, \"Back\": { \"v\": [\"Voltar\"] }, \"Choose\": { \"v\": [\"Escolher\"] }, \"Color picker\": { \"v\": [\"Seletor de cores\"] }, \"More options\": { \"v\": [\"Mais opções\"] }, \"No color\": { \"v\": [\"Sem cor\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Uma cor com o valor HEX {hex}\"] }, \"Back\": { \"v\": [\"Anterior\"] }, \"Choose\": { \"v\": [\"Escolher\"] }, \"Color picker\": { \"v\": [\"seletor de cores\"] }, \"More options\": { \"v\": [\"Mais opções\"] } } }, { \"l\": \"ro\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"O culoare cu valoarea HEX {hex}\"] }, \"Back\": { \"v\": [\"Înapoi\"] }, \"Choose\": { \"v\": [\"Alege\"] }, \"Color picker\": { \"v\": [\"Selector de culori\"] }, \"More options\": { \"v\": [\"Mai multe opțiuni\"] }, \"No color\": { \"v\": [\"Nicio culoare\"] } } }, { \"l\": \"ru\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Цвет с HEX-кодом {hex}\"] }, \"Back\": { \"v\": [\"Назад\"] }, \"Choose\": { \"v\": [\"Выбрать\"] }, \"Color picker\": { \"v\": [\"Выбор цвета\"] }, \"More options\": { \"v\": [\"Дополнительные параметры\"] }, \"No color\": { \"v\": [\"Без цвета\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Farba s hodnotou HEX {hex}\"] }, \"Back\": { \"v\": [\"Späť\"] }, \"Choose\": { \"v\": [\"Vybrať\"] }, \"Color picker\": { \"v\": [\"Výber farby\"] }, \"More options\": { \"v\": [\"Viac možností\"] } } }, { \"l\": \"sl\", \"t\": { \"Choose\": { \"v\": [\"Izbor\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Боја са HEX вредности {hex}\"] }, \"Back\": { \"v\": [\"Назад\"] }, \"Choose\": { \"v\": [\"Изаберите\"] }, \"Color picker\": { \"v\": [\"Бирач боје\"] }, \"More options\": { \"v\": [\"Још опција\"] }, \"No color\": { \"v\": [\"Без боје\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"En färg med HEX-värdet {hex}\"] }, \"Back\": { \"v\": [\"Tillbaka\"] }, \"Choose\": { \"v\": [\"Välj\"] }, \"Color picker\": { \"v\": [\"Färgväljare\"] }, \"More options\": { \"v\": [\"Fler alternativ\"] }, \"No color\": { \"v\": [\"Ingen färg\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"{hex} onaltılık değeri ile bir renk \"] }, \"Back\": { \"v\": [\"Geri\"] }, \"Choose\": { \"v\": [\"Seçin\"] }, \"Color picker\": { \"v\": [\"Renk seçici\"] }, \"More options\": { \"v\": [\"Diğer seçenekler\"] }, \"No color\": { \"v\": [\"Renk yok\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"Колір у форматі HEX {hex}\"] }, \"Back\": { \"v\": [\"Назад\"] }, \"Choose\": { \"v\": [\"Виберіть\"] }, \"Color picker\": { \"v\": [\"Вибір кольору\"] }, \"More options\": { \"v\": [\"Більше об'єктів\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"HEX qiymatiga ega rang {hex}\"] }, \"Back\": { \"v\": [\"Orqaga\"] }, \"Choose\": { \"v\": [\"Tanlang\"] }, \"Color picker\": { \"v\": [\"Rang tanlagich\"] }, \"More options\": { \"v\": [\"Boshqa variantlar\"] }, \"No color\": { \"v\": [\"Rangsiz\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"以16进制 {hex} 表示的颜色为\"] }, \"Back\": { \"v\": [\"返回\"] }, \"Choose\": { \"v\": [\"选择\"] }, \"Color picker\": { \"v\": [\"颜色拾取器\"] }, \"More options\": { \"v\": [\"更多选项\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"具有 HEX 值 {hex}的顏色 \"] }, \"Back\": { \"v\": [\"返回\"] }, \"Choose\": { \"v\": [\"選擇\"] }, \"Color picker\": { \"v\": [\"顏色選擇器\"] }, \"More options\": { \"v\": [\"更多選項\"] }, \"No color\": { \"v\": [\"無顏色\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"A color with a HEX value {hex}\": { \"v\": [\"HEX 值為 {hex} 的顏色\"] }, \"Back\": { \"v\": [\"返回\"] }, \"Choose\": { \"v\": [\"選擇\"] }, \"Color picker\": { \"v\": [\"色彩挑選器\"] }, \"More options\": { \"v\": [\"更多選項\"] }, \"No color\": { \"v\": [\"沒有顏色\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t2 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"a few seconds ago\": { \"v\": [\"منذ عدة ثوانٍ\"] }, \"sec. ago\": { \"v\": [\"ثانية مضت\"] }, \"seconds ago\": { \"v\": [\"ثوانٍ مضت\"] } } }, { \"l\": \"ast\", \"t\": { \"a few seconds ago\": { \"v\": [\"hai unos segundos\"] }, \"sec. ago\": { \"v\": [\"hai segs\"] }, \"seconds ago\": { \"v\": [\"hai segundos\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"a few seconds ago\": { \"v\": [\"před několika sekundami\"] }, \"Invalid date\": { \"v\": [\"Neplatné datum\"] }, \"sec. ago\": { \"v\": [\"sek. před\"] }, \"seconds ago\": { \"v\": [\"sekund předtím\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"a few seconds ago\": { \"v\": [\"před několika sekundami\"] }, \"sec. ago\": { \"v\": [\"sek. před\"] }, \"seconds ago\": { \"v\": [\"sekund předtím\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"a few seconds ago\": { \"v\": [\"et par sekunder siden\"] }, \"Invalid date\": { \"v\": [\"Ugyldig dato\"] }, \"sec. ago\": { \"v\": [\"sek. siden\"] }, \"seconds ago\": { \"v\": [\"sekunder siden\"] } } }, { \"l\": \"de\", \"t\": { \"a few seconds ago\": { \"v\": [\"vor ein paar Sekunden\"] }, \"Invalid date\": { \"v\": [\"Ungültiges Datum\"] }, \"sec. ago\": { \"v\": [\"Sek. zuvor\"] }, \"seconds ago\": { \"v\": [\"Sekunden zuvor\"] } } }, { \"l\": \"de-DE\", \"t\": { \"a few seconds ago\": { \"v\": [\"vor ein paar Sekunden\"] }, \"Invalid date\": { \"v\": [\"Ungültiges Datum\"] }, \"sec. ago\": { \"v\": [\"Sek. zuvor\"] }, \"seconds ago\": { \"v\": [\"Sekunden zuvor\"] } } }, { \"l\": \"el\", \"t\": { \"a few seconds ago\": { \"v\": [\"πριν λίγα δευτερόλεπτα\"] }, \"sec. ago\": { \"v\": [\"δευτ. πριν\"] }, \"seconds ago\": { \"v\": [\"δευτερόλεπτα πριν\"] } } }, { \"l\": \"en-GB\", \"t\": { \"a few seconds ago\": { \"v\": [\"a few seconds ago\"] }, \"Invalid date\": { \"v\": [\"Invalid date\"] }, \"sec. ago\": { \"v\": [\"sec. ago\"] }, \"seconds ago\": { \"v\": [\"seconds ago\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"a few seconds ago\": { \"v\": [\"hace unos pocos segundos\"] }, \"sec. ago\": { \"v\": [\"hace segundos\"] }, \"seconds ago\": { \"v\": [\"segundos atrás\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"a few seconds ago\": { \"v\": [\"hace unos segundos\"] }, \"sec. ago\": { \"v\": [\"seg. atrás\"] }, \"seconds ago\": { \"v\": [\"segundos atrás\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"a few seconds ago\": { \"v\": [\"hace unos segundos\"] }, \"sec. ago\": { \"v\": [\"hace segundos\"] }, \"seconds ago\": { \"v\": [\"Segundos atrás\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"a few seconds ago\": { \"v\": [\"hace unos segundos\"] }, \"sec. ago\": { \"v\": [\"seg. atrás\"] }, \"seconds ago\": { \"v\": [\"segundos atrás\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"a few seconds ago\": { \"v\": [\"mõni sekund tagasi\"] }, \"Invalid date\": { \"v\": [\"Vigane kuupäev\"] }, \"sec. ago\": { \"v\": [\"sek. tagasi\"] }, \"seconds ago\": { \"v\": [\"sekundit tagasi\"] } } }, { \"l\": \"eu\", \"t\": { \"a few seconds ago\": { \"v\": [\"duela segundo batzuk\"] }, \"sec. ago\": { \"v\": [\"duela seg.\"] }, \"seconds ago\": { \"v\": [\"duela segundo\"] } } }, { \"l\": \"fa\", \"t\": { \"a few seconds ago\": { \"v\": [\"چند ثانیه پیش\"] }, \"sec. ago\": { \"v\": [\"چند ثانیه پیش\"] }, \"seconds ago\": { \"v\": [\"چند ثانیه پیش\"] } } }, { \"l\": \"fi\", \"t\": { \"a few seconds ago\": { \"v\": [\"muutamia sekunteja sitten\"] }, \"sec. ago\": { \"v\": [\"sek. sitten\"] }, \"seconds ago\": { \"v\": [\"sekunteja sitten\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"a few seconds ago\": { \"v\": [\"il y a quelques secondes\"] }, \"Invalid date\": { \"v\": [\"Date non valide\"] }, \"sec. ago\": { \"v\": [\"il y a qq. sec.\"] }, \"seconds ago\": { \"v\": [\"il y a quelques sec.\"] } } }, { \"l\": \"ga\", \"t\": { \"a few seconds ago\": { \"v\": [\"cúpla soicind ó shin\"] }, \"Invalid date\": { \"v\": [\"Dáta neamhbhailí\"] }, \"sec. ago\": { \"v\": [\"soic. ó shin\"] }, \"seconds ago\": { \"v\": [\"soicind ó shin\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"a few seconds ago\": { \"v\": [\"hai uns segundos\"] }, \"sec. ago\": { \"v\": [\"segs. atrás\"] }, \"seconds ago\": { \"v\": [\"segundos atrás\"] } } }, { \"l\": \"he\", \"t\": { \"a few seconds ago\": { \"v\": [\"לפני מספר שניות\"] }, \"sec. ago\": { \"v\": [\"לפני מספר שניות\"] }, \"seconds ago\": { \"v\": [\"לפני מס׳ שניות\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"a few seconds ago\": { \"v\": [\"prije nekoliko sekundi\"] }, \"sec. ago\": { \"v\": [\"prije nek. sek.\"] }, \"seconds ago\": { \"v\": [\"prije nek. sek.\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"a few seconds ago\": { \"v\": [\"néhány másodperce\"] }, \"sec. ago\": { \"v\": [\"másodperce\"] }, \"seconds ago\": { \"v\": [\"másodperce\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"a few seconds ago\": { \"v\": [\"beberapa detik yang lalu\"] }, \"sec. ago\": { \"v\": [\"dtk. yang lalu\"] }, \"seconds ago\": { \"v\": [\"beberapa detik lalu\"] } } }, { \"l\": \"is\", \"t\": { \"a few seconds ago\": { \"v\": [\"fyrir örfáum sekúndum síðan\"] }, \"sec. ago\": { \"v\": [\"sek. síðan\"] }, \"seconds ago\": { \"v\": [\"sekúndum síðan\"] } } }, { \"l\": \"it\", \"t\": { \"a few seconds ago\": { \"v\": [\"pochi secondi fa\"] }, \"sec. ago\": { \"v\": [\"sec. fa\"] }, \"seconds ago\": { \"v\": [\"secondi fa\"] } } }, { \"l\": \"ja\", \"t\": { \"a few seconds ago\": { \"v\": [\"数秒前\"] }, \"Invalid date\": { \"v\": [\"無効な日付\"] }, \"sec. ago\": { \"v\": [\"秒前\"] }, \"seconds ago\": { \"v\": [\"数秒前\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"a few seconds ago\": { \"v\": [\"数秒前\"] }, \"sec. ago\": { \"v\": [\"秒前\"] }, \"seconds ago\": { \"v\": [\"数秒前\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"a few seconds ago\": { \"v\": [\"방금 전\"] }, \"sec. ago\": { \"v\": [\"몇 초 전\"] }, \"seconds ago\": { \"v\": [\"초 전\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"a few seconds ago\": { \"v\": [\"ສອງສາມວິນາທີກ່ອນ\"] }, \"sec. ago\": { \"v\": [\"ວິ. ກ່ອນ\"] }, \"seconds ago\": { \"v\": [\"ວິນາທີກ່ອນ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"a few seconds ago\": { \"v\": [\"prieš keletą sekundžių\"] }, \"sec. ago\": { \"v\": [\"prieš sek.\"] }, \"seconds ago\": { \"v\": [\"prieš sekundes\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"a few seconds ago\": { \"v\": [\"пред неколку секунди\"] }, \"sec. ago\": { \"v\": [\"секунда\"] }, \"seconds ago\": { \"v\": [\"секунди\"] } } }, { \"l\": \"mn\", \"t\": { \"a few seconds ago\": { \"v\": [\"хэдхэн секундын өмнө\"] }, \"sec. ago\": { \"v\": [\"сек. өмнө\"] }, \"seconds ago\": { \"v\": [\"секундын өмнө\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"a few seconds ago\": { \"v\": [\"noen få sekunder siden\"] }, \"sec. ago\": { \"v\": [\"sek. siden\"] }, \"seconds ago\": { \"v\": [\"sekunder siden\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"a few seconds ago\": { \"v\": [\"enkele seconden geleden\"] }, \"sec. ago\": { \"v\": [\"sec. geleden\"] }, \"seconds ago\": { \"v\": [\"seconden geleden\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"a few seconds ago\": { \"v\": [\"kilka sekund temu\"] }, \"sec. ago\": { \"v\": [\"sek. temu\"] }, \"seconds ago\": { \"v\": [\"sekund temu\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"a few seconds ago\": { \"v\": [\"há alguns segundos\"] }, \"Invalid date\": { \"v\": [\"Data inválida\"] }, \"sec. ago\": { \"v\": [\"seg. atrás\"] }, \"seconds ago\": { \"v\": [\"segundos atrás\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"a few seconds ago\": { \"v\": [\"há alguns segundos\"] }, \"sec. ago\": { \"v\": [\"seg. atrás\"] }, \"seconds ago\": { \"v\": [\"segundos atrás\"] } } }, { \"l\": \"ro\", \"t\": { \"a few seconds ago\": { \"v\": [\"acum câteva secunde\"] }, \"Invalid date\": { \"v\": [\"Dată invalidă\"] }, \"sec. ago\": { \"v\": [\"acum\"] }, \"seconds ago\": { \"v\": [\"acum câteva secunde\"] } } }, { \"l\": \"ru\", \"t\": { \"a few seconds ago\": { \"v\": [\"несколько секунд назад\"] }, \"Invalid date\": { \"v\": [\"Неверная дата\"] }, \"sec. ago\": { \"v\": [\"сек. назад\"] }, \"seconds ago\": { \"v\": [\"секунд назад\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"a few seconds ago\": { \"v\": [\"pred chvíľou\"] }, \"sec. ago\": { \"v\": [\"pred pár sekundami\"] }, \"seconds ago\": { \"v\": [\"pred sekundami\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"a few seconds ago\": { \"v\": [\"пре неколико секунди\"] }, \"sec. ago\": { \"v\": [\"сек. раније\"] }, \"seconds ago\": { \"v\": [\"секунди раније\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"a few seconds ago\": { \"v\": [\"för några sekunder sedan\"] }, \"Invalid date\": { \"v\": [\"Ogiltigt datum\"] }, \"sec. ago\": { \"v\": [\"sek. sedan\"] }, \"seconds ago\": { \"v\": [\"sekunder sedan\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"a few seconds ago\": { \"v\": [\"birkaç saniye önce\"] }, \"Invalid date\": { \"v\": [\"Tarih geçersiz\"] }, \"sec. ago\": { \"v\": [\"sn. önce\"] }, \"seconds ago\": { \"v\": [\"saniye önce\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"a few seconds ago\": { \"v\": [\"декілька секунд тому\"] }, \"sec. ago\": { \"v\": [\"с тому\"] }, \"seconds ago\": { \"v\": [\"с тому\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"a few seconds ago\": { \"v\": [\"bir necha soniya oldin\"] }, \"sec. ago\": { \"v\": [\"sek. oldin\"] }, \"seconds ago\": { \"v\": [\"soniyalar oldin\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"a few seconds ago\": { \"v\": [\"几秒前\"] }, \"sec. ago\": { \"v\": [\"几秒前\"] }, \"seconds ago\": { \"v\": [\"几秒前\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"a few seconds ago\": { \"v\": [\"幾秒前\"] }, \"Invalid date\": { \"v\": [\"無效日期\"] }, \"sec. ago\": { \"v\": [\"秒前\"] }, \"seconds ago\": { \"v\": [\"秒前\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"a few seconds ago\": { \"v\": [\"幾秒前\"] }, \"sec. ago\": { \"v\": [\"秒前\"] }, \"seconds ago\": { \"v\": [\"秒前\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t3 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Acapulco\": { \"v\": [\"بازلائي مطفي\"] }, \"Blue Violet\": { \"v\": [\"بنفسجي مشعشع\"] }, \"Boston Blue\": { \"v\": [\"سماوي مطفي\"] }, \"Deluge\": { \"v\": [\"بنفسجي مطفي\"] }, \"Feldspar\": { \"v\": [\"وردي صخري\"] }, \"Gold\": { \"v\": [\"ذهبي\"] }, \"Mariner\": { \"v\": [\"أزرق بحري\"] }, \"Nextcloud blue\": { \"v\": [\"أزرق نكست كلاود\"] }, \"Olivine\": { \"v\": [\"زيتي\"] }, \"Purple\": { \"v\": [\"بنفسجي\"] }, \"Rosy brown\": { \"v\": [\"بُنِّي زهري\"] }, \"Whiskey\": { \"v\": [\"نبيذي\"] } } }, { \"l\": \"ast\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulcu\"] }, \"Blue Violet\": { \"v\": [\"Viola azulao\"] }, \"Boston Blue\": { \"v\": [\"Azul Boston\"] }, \"Deluge\": { \"v\": [\"Deluge\"] }, \"Feldspar\": { \"v\": [\"Feldspar\"] }, \"Gold\": { \"v\": [\"Oru\"] }, \"Mariner\": { \"v\": [\"Marineru\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud azul\"] }, \"Olivine\": { \"v\": [\"Olivina\"] }, \"Purple\": { \"v\": [\"Moráu\"] }, \"Rosy brown\": { \"v\": [\"Marrón arrosao\"] }, \"Whiskey\": { \"v\": [\"Whiskey\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Acapulco\": { \"v\": [\"Akapulko\"] }, \"Black\": { \"v\": [\"Černá\"] }, \"Blue Violet\": { \"v\": [\"Modrofialová\"] }, \"Boston Blue\": { \"v\": [\"Bostonská modrá\"] }, \"Deluge\": { \"v\": [\"Deluge\"] }, \"Feldspar\": { \"v\": [\"Živicová\"] }, \"Gold\": { \"v\": [\"Zlatá\"] }, \"Mariner\": { \"v\": [\"Námořnická\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud modrá\"] }, \"Olivine\": { \"v\": [\"Olivínová\"] }, \"Purple\": { \"v\": [\"Fialová\"] }, \"Rosy brown\": { \"v\": [\"Růžovohnědá\"] }, \"Whiskey\": { \"v\": [\"Whisky\"] }, \"White\": { \"v\": [\"Bílá\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Acapulco\": { \"v\": [\"Akapulko\"] }, \"Blue Violet\": { \"v\": [\"Modrofialová\"] }, \"Boston Blue\": { \"v\": [\"Bostonská modrá\"] }, \"Deluge\": { \"v\": [\"Deluge\"] }, \"Feldspar\": { \"v\": [\"Živicová\"] }, \"Gold\": { \"v\": [\"Zlatá\"] }, \"Mariner\": { \"v\": [\"Námořnická\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud modrá\"] }, \"Olivine\": { \"v\": [\"Olivínová\"] }, \"Purple\": { \"v\": [\"Fialová\"] }, \"Rosy brown\": { \"v\": [\"Růžovohnědá\"] }, \"Whiskey\": { \"v\": [\"Whisky\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Black\": { \"v\": [\"Sort\"] }, \"Blue Violet\": { \"v\": [\"Blue Violet\"] }, \"Boston Blue\": { \"v\": [\"Boston Blue\"] }, \"Deluge\": { \"v\": [\"Deluge\"] }, \"Feldspar\": { \"v\": [\"Feldspar\"] }, \"Gold\": { \"v\": [\"Guld\"] }, \"Mariner\": { \"v\": [\"Mariner\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud blue\"] }, \"Olivine\": { \"v\": [\"Olivine\"] }, \"Purple\": { \"v\": [\"Lilla\"] }, \"Rosy brown\": { \"v\": [\"Rosy brown\"] }, \"Whiskey\": { \"v\": [\"Whiskey\"] }, \"White\": { \"v\": [\"Hvid\"] } } }, { \"l\": \"de\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Black\": { \"v\": [\"Schwarz\"] }, \"Blue Violet\": { \"v\": [\"Blau Violett\"] }, \"Boston Blue\": { \"v\": [\"Boston-Blau\"] }, \"Deluge\": { \"v\": [\"Sintflut\"] }, \"Feldspar\": { \"v\": [\"Feldspat\"] }, \"Gold\": { \"v\": [\"Gold\"] }, \"Mariner\": { \"v\": [\"Seemann\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud Blau\"] }, \"Olivine\": { \"v\": [\"Olivin\"] }, \"Purple\": { \"v\": [\"Lila\"] }, \"Rosy brown\": { \"v\": [\"Rosiges Braun\"] }, \"Whiskey\": { \"v\": [\"Whiskey\"] }, \"White\": { \"v\": [\"Weiß\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Black\": { \"v\": [\"Schwarz\"] }, \"Blue Violet\": { \"v\": [\"Blau Violett\"] }, \"Boston Blue\": { \"v\": [\"Boston-Blau\"] }, \"Deluge\": { \"v\": [\"Sintflut\"] }, \"Feldspar\": { \"v\": [\"Feldspat\"] }, \"Gold\": { \"v\": [\"Gold\"] }, \"Mariner\": { \"v\": [\"Seemann\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud Blau\"] }, \"Olivine\": { \"v\": [\"Olivin\"] }, \"Purple\": { \"v\": [\"Lila\"] }, \"Rosy brown\": { \"v\": [\"Rosiges Braun\"] }, \"Whiskey\": { \"v\": [\"Whiskey\"] }, \"White\": { \"v\": [\"Weiß\"] } } }, { \"l\": \"el\", \"t\": { \"Acapulco\": { \"v\": [\"Ακαπούλκο\"] }, \"Black\": { \"v\": [\"Μαύρο\"] }, \"Blue Violet\": { \"v\": [\"Μπλε Βιολέτ\"] }, \"Boston Blue\": { \"v\": [\"Μπλε Βοστώνης\"] }, \"Deluge\": { \"v\": [\"Deluge\"] }, \"Feldspar\": { \"v\": [\"Feldspar\"] }, \"Gold\": { \"v\": [\"Χρυσό\"] }, \"Mariner\": { \"v\": [\"Mariner\"] }, \"Nextcloud blue\": { \"v\": [\"Μπλε Nextcloud\"] }, \"Olivine\": { \"v\": [\"Olivine\"] }, \"Purple\": { \"v\": [\"Μωβ\"] }, \"Rosy brown\": { \"v\": [\"Ροζ καφέ\"] }, \"Whiskey\": { \"v\": [\"Ουίσκι\"] }, \"White\": { \"v\": [\"Λευκό\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Black\": { \"v\": [\"Black\"] }, \"Blue Violet\": { \"v\": [\"Blue Violet\"] }, \"Boston Blue\": { \"v\": [\"Boston Blue\"] }, \"Deluge\": { \"v\": [\"Deluge\"] }, \"Feldspar\": { \"v\": [\"Feldspar\"] }, \"Gold\": { \"v\": [\"Gold\"] }, \"Mariner\": { \"v\": [\"Mariner\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud blue\"] }, \"Olivine\": { \"v\": [\"Olivine\"] }, \"Purple\": { \"v\": [\"Purple\"] }, \"Rosy brown\": { \"v\": [\"Rosy brown\"] }, \"Whiskey\": { \"v\": [\"Whiskey\"] }, \"White\": { \"v\": [\"White\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Blue Violet\": { \"v\": [\"Violeta Azul\"] }, \"Boston Blue\": { \"v\": [\"Azul Boston\"] }, \"Deluge\": { \"v\": [\"Diluvio\"] }, \"Feldspar\": { \"v\": [\"Feldespato\"] }, \"Gold\": { \"v\": [\"Oro\"] }, \"Mariner\": { \"v\": [\"Marinero\"] }, \"Nextcloud blue\": { \"v\": [\"Azul Nextcloud\"] }, \"Olivine\": { \"v\": [\"Olivino\"] }, \"Purple\": { \"v\": [\"Púrpura\"] }, \"Rosy brown\": { \"v\": [\"Marrón rosáceo\"] }, \"Whiskey\": { \"v\": [\"Whiskey\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Blue Violet\": { \"v\": [\"Violeta Azul\"] }, \"Boston Blue\": { \"v\": [\"Azul Boston\"] }, \"Deluge\": { \"v\": [\"Diluvio\"] }, \"Feldspar\": { \"v\": [\"Feldespato\"] }, \"Gold\": { \"v\": [\"Oro\"] }, \"Mariner\": { \"v\": [\"Marinero\"] }, \"Nextcloud blue\": { \"v\": [\"Azul Nextcloud\"] }, \"Olivine\": { \"v\": [\"Olivino\"] }, \"Purple\": { \"v\": [\"Púrpura\"] }, \"Rosy brown\": { \"v\": [\"Marrón rosáceo\"] }, \"Whiskey\": { \"v\": [\"Whiskey\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": {} }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Blue Violet\": { \"v\": [\"Violeta Azul\"] }, \"Boston Blue\": { \"v\": [\"Azul Boston\"] }, \"Deluge\": { \"v\": [\"Diluvio\"] }, \"Feldspar\": { \"v\": [\"Feldespato\"] }, \"Gold\": { \"v\": [\"Oro\"] }, \"Mariner\": { \"v\": [\"Marinero\"] }, \"Nextcloud blue\": { \"v\": [\"Azul Nextcloud\"] }, \"Olivine\": { \"v\": [\"Olivino\"] }, \"Purple\": { \"v\": [\"Púrpura\"] }, \"Rosy brown\": { \"v\": [\"Marrón rosáceo\"] }, \"Whiskey\": { \"v\": [\"Whiskey\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco meresinine\"] }, \"Black\": { \"v\": [\"Must\"] }, \"Blue Violet\": { \"v\": [\"Sinakasvioletne\"] }, \"Boston Blue\": { \"v\": [\"Bostoni rohekassinine\"] }, \"Deluge\": { \"v\": [\"Tulvavee lilla\"] }, \"Feldspar\": { \"v\": [\"Põlevkivipruun\"] }, \"Gold\": { \"v\": [\"Kuldne\"] }, \"Mariner\": { \"v\": [\"Meresinine\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloudi sinine\"] }, \"Olivine\": { \"v\": [\"Oliiviroheline\"] }, \"Purple\": { \"v\": [\"Purpurpunane\"] }, \"Rosy brown\": { \"v\": [\"Roosikarva pruun\"] }, \"Whiskey\": { \"v\": [\"Viskikarva kollakaspruun\"] }, \"White\": { \"v\": [\"Valge\"] } } }, { \"l\": \"eu\", \"t\": {} }, { \"l\": \"fa\", \"t\": { \"Acapulco\": { \"v\": [\"آکاپولکو\"] }, \"Blue Violet\": { \"v\": [\"بنفش آبی\"] }, \"Boston Blue\": { \"v\": [\"آبی بوستونی\"] }, \"Deluge\": { \"v\": [\"سیل\"] }, \"Feldspar\": { \"v\": [\"فلدسپات\"] }, \"Gold\": { \"v\": [\"طلا\"] }, \"Mariner\": { \"v\": [\"مارینر\"] }, \"Nextcloud blue\": { \"v\": [\"نکس کلود آبی\"] }, \"Olivine\": { \"v\": [\"الیوین\"] }, \"Purple\": { \"v\": [\"بنفش\"] }, \"Rosy brown\": { \"v\": [\"قهوه‌ای رز\"] }, \"Whiskey\": { \"v\": [\"ویسکی\"] } } }, { \"l\": \"fi\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Blue Violet\": { \"v\": [\"Sinivioletti\"] }, \"Boston Blue\": { \"v\": [\"Bostoninsininen\"] }, \"Deluge\": { \"v\": [\"Tulva\"] }, \"Feldspar\": { \"v\": [\"Feldspar\"] }, \"Gold\": { \"v\": [\"Kulta\"] }, \"Mariner\": { \"v\": [\"Merenkulkija\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloudin sininen\"] }, \"Olivine\": { \"v\": [\"Oliviini\"] }, \"Purple\": { \"v\": [\"Purppura\"] }, \"Rosy brown\": { \"v\": [\"Ruusunruskea\"] }, \"Whiskey\": { \"v\": [\"Viski\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Black\": { \"v\": [\"Noir\"] }, \"Blue Violet\": { \"v\": [\"Bleu violet\"] }, \"Boston Blue\": { \"v\": [\"Bleu de Boston\"] }, \"Deluge\": { \"v\": [\"Deluge\"] }, \"Feldspar\": { \"v\": [\"Feldspar\"] }, \"Gold\": { \"v\": [\"Doré\"] }, \"Mariner\": { \"v\": [\"Marin\"] }, \"Nextcloud blue\": { \"v\": [\"Bleu Nextcloud\"] }, \"Olivine\": { \"v\": [\"Olivine\"] }, \"Purple\": { \"v\": [\"Violet\"] }, \"Rosy brown\": { \"v\": [\"Brun rosé\"] }, \"Whiskey\": { \"v\": [\"Whiskey\"] }, \"White\": { \"v\": [\"Blanc\"] } } }, { \"l\": \"ga\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Black\": { \"v\": [\"Dubh\"] }, \"Blue Violet\": { \"v\": [\"Gorm Violet\"] }, \"Boston Blue\": { \"v\": [\"Bostún Gorm\"] }, \"Deluge\": { \"v\": [\"Díle\"] }, \"Feldspar\": { \"v\": [\"Feldspar\"] }, \"Gold\": { \"v\": [\"Óir\"] }, \"Mariner\": { \"v\": [\"Mairnéalach\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud gorm\"] }, \"Olivine\": { \"v\": [\"Olaivín\"] }, \"Purple\": { \"v\": [\"Corcra\"] }, \"Rosy brown\": { \"v\": [\"Rosach donn\"] }, \"Whiskey\": { \"v\": [\"Fuisce\"] }, \"White\": { \"v\": [\"Bán\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Black\": { \"v\": [\"Negro\"] }, \"Blue Violet\": { \"v\": [\"Azul violeta\"] }, \"Boston Blue\": { \"v\": [\"Azul Boston\"] }, \"Deluge\": { \"v\": [\"Dioivo\"] }, \"Feldspar\": { \"v\": [\"Feldespato\"] }, \"Gold\": { \"v\": [\"Ouro\"] }, \"Mariner\": { \"v\": [\"Marino\"] }, \"Nextcloud blue\": { \"v\": [\"Azul Nextcloud\"] }, \"Olivine\": { \"v\": [\"Olivina\"] }, \"Purple\": { \"v\": [\"Púrpura\"] }, \"Rosy brown\": { \"v\": [\"Pardo rosado\"] }, \"Whiskey\": { \"v\": [\"Whisky\"] }, \"White\": { \"v\": [\"Branco\"] } } }, { \"l\": \"he\", \"t\": {} }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Black\": { \"v\": [\"Crna\"] }, \"Blue Violet\": { \"v\": [\"Plavoljubičasta\"] }, \"Boston Blue\": { \"v\": [\"Bostonsko plava\"] }, \"Deluge\": { \"v\": [\"Deluge\"] }, \"Feldspar\": { \"v\": [\"Feldspar\"] }, \"Gold\": { \"v\": [\"Zlatna\"] }, \"Mariner\": { \"v\": [\"Mariner\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud plava\"] }, \"Olivine\": { \"v\": [\"Olivine\"] }, \"Purple\": { \"v\": [\"Ljubičasta\"] }, \"Rosy brown\": { \"v\": [\"Ružičastosmeđa\"] }, \"Whiskey\": { \"v\": [\"Whiskey\"] }, \"White\": { \"v\": [\"Bijela\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Black\": { \"v\": [\"Fekete\"] }, \"Blue Violet\": { \"v\": [\"Kék ibolya\"] }, \"Boston Blue\": { \"v\": [\"Boston kék\"] }, \"Deluge\": { \"v\": [\"Özönvíz\"] }, \"Feldspar\": { \"v\": [\"Földpát\"] }, \"Gold\": { \"v\": [\"Arany\"] }, \"Mariner\": { \"v\": [\"Tengerész\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud kék\"] }, \"Olivine\": { \"v\": [\"Olivin\"] }, \"Purple\": { \"v\": [\"Lila\"] }, \"Rosy brown\": { \"v\": [\"Rózsás barna\"] }, \"Whiskey\": { \"v\": [\"Whiskey\"] }, \"White\": { \"v\": [\"Fehér\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Black\": { \"v\": [\"Hitam\"] }, \"Blue Violet\": { \"v\": [\"Ungu kebiruan\"] }, \"Boston Blue\": { \"v\": [\"Biru Boston\"] }, \"Deluge\": { \"v\": [\"Deluge\"] }, \"Feldspar\": { \"v\": [\"Feldspar\"] }, \"Gold\": { \"v\": [\"Emas\"] }, \"Mariner\": { \"v\": [\"Mariner\"] }, \"Nextcloud blue\": { \"v\": [\"Biru Nextcloud\"] }, \"Olivine\": { \"v\": [\"Olivine\"] }, \"Purple\": { \"v\": [\"Ungu\"] }, \"Rosy brown\": { \"v\": [\"Cokelat kemerahan\"] }, \"Whiskey\": { \"v\": [\"Whiskey\"] }, \"White\": { \"v\": [\"Putih\"] } } }, { \"l\": \"is\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Blue Violet\": { \"v\": [\"Bláklukka\"] }, \"Boston Blue\": { \"v\": [\"Bostonblátt\"] }, \"Deluge\": { \"v\": [\"Fjólublátt\"] }, \"Feldspar\": { \"v\": [\"Feldspat\"] }, \"Gold\": { \"v\": [\"Gull\"] }, \"Mariner\": { \"v\": [\"Sjóarablátt\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud blátt\"] }, \"Olivine\": { \"v\": [\"Ólivín\"] }, \"Purple\": { \"v\": [\"Purpurablátt\"] }, \"Rosy brown\": { \"v\": [\"Rósabrúnt\"] }, \"Whiskey\": { \"v\": [\"Viský\"] } } }, { \"l\": \"it\", \"t\": { \"Gold\": { \"v\": [\"Oro\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud blue\"] }, \"Purple\": { \"v\": [\"Viola\"] } } }, { \"l\": \"ja\", \"t\": { \"Acapulco\": { \"v\": [\"アカプルコ\"] }, \"Black\": { \"v\": [\"黒\"] }, \"Blue Violet\": { \"v\": [\"ブルーバイオレット\"] }, \"Boston Blue\": { \"v\": [\"ボストンブルー\"] }, \"Deluge\": { \"v\": [\"豪雨\"] }, \"Feldspar\": { \"v\": [\"長石\"] }, \"Gold\": { \"v\": [\"黄金\"] }, \"Mariner\": { \"v\": [\"船乗り\"] }, \"Nextcloud blue\": { \"v\": [\"ネクストクラウド・ブルー\"] }, \"Olivine\": { \"v\": [\"カンラン石\"] }, \"Purple\": { \"v\": [\"紫色\"] }, \"Rosy brown\": { \"v\": [\"バラ色\"] }, \"Whiskey\": { \"v\": [\"ウイスキー\"] }, \"White\": { \"v\": [\"白\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Acapulco\": { \"v\": [\"アカプルコ\"] }, \"Blue Violet\": { \"v\": [\"ブルーバイオレット\"] }, \"Boston Blue\": { \"v\": [\"ボストンブルー\"] }, \"Deluge\": { \"v\": [\"豪雨\"] }, \"Feldspar\": { \"v\": [\"長石\"] }, \"Gold\": { \"v\": [\"黄金\"] }, \"Mariner\": { \"v\": [\"船乗り\"] }, \"Nextcloud blue\": { \"v\": [\"ネクストクラウド・ブルー\"] }, \"Olivine\": { \"v\": [\"カンラン石\"] }, \"Purple\": { \"v\": [\"紫色\"] }, \"Rosy brown\": { \"v\": [\"バラ色\"] }, \"Whiskey\": { \"v\": [\"ウイスキー\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Acapulco\": { \"v\": [\"아카풀코\"] }, \"Black\": { \"v\": [\"검정\"] }, \"Blue Violet\": { \"v\": [\"푸른 보라\"] }, \"Boston Blue\": { \"v\": [\"보스턴 블루\"] }, \"Deluge\": { \"v\": [\"폭우\"] }, \"Feldspar\": { \"v\": [\"장석\"] }, \"Gold\": { \"v\": [\"금\"] }, \"Mariner\": { \"v\": [\"뱃사람\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud 파랑\"] }, \"Olivine\": { \"v\": [\"감람석\"] }, \"Purple\": { \"v\": [\"보라\"] }, \"Rosy brown\": { \"v\": [\"로지 브라운\"] }, \"Whiskey\": { \"v\": [\"위스키\"] }, \"White\": { \"v\": [\"하양\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Black\": { \"v\": [\"ສີດຳ\"] }, \"Blue Violet\": { \"v\": [\"Blue Violet\"] }, \"Boston Blue\": { \"v\": [\"Boston Blue\"] }, \"Deluge\": { \"v\": [\"Deluge\"] }, \"Feldspar\": { \"v\": [\"Feldspar\"] }, \"Gold\": { \"v\": [\"ສີຄຳ\"] }, \"Mariner\": { \"v\": [\"Mariner\"] }, \"Nextcloud blue\": { \"v\": [\"ສີຟ້າ Nextcloud\"] }, \"Olivine\": { \"v\": [\"Olivine\"] }, \"Purple\": { \"v\": [\"ສີມ່ວງ\"] }, \"Rosy brown\": { \"v\": [\"Rosy brown\"] }, \"Whiskey\": { \"v\": [\"Whiskey\"] }, \"White\": { \"v\": [\"ສີຂາວ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Acapulco\": { \"v\": ['\"Acapulco\"'] }, \"Black\": { \"v\": [\"Juoda\"] }, \"Blue Violet\": { \"v\": [\"Mėlyna-violetinė\"] }, \"Boston Blue\": { \"v\": ['\"Boston Blue\"'] }, \"Deluge\": { \"v\": ['\"Deluge\"'] }, \"Feldspar\": { \"v\": ['\"Feldspar\"'] }, \"Gold\": { \"v\": [\"Auksas\"] }, \"Mariner\": { \"v\": ['\"Mariner\"'] }, \"Nextcloud blue\": { \"v\": ['\"Nextcloud\" mėlyna'] }, \"Olivine\": { \"v\": ['\"Olivine\"'] }, \"Purple\": { \"v\": [\"Violetinė\"] }, \"Rosy brown\": { \"v\": [\"Rožiniai rudas\"] }, \"Whiskey\": { \"v\": ['\"Whiskey\"'] }, \"White\": { \"v\": [\"Balta\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Acapulco\": { \"v\": [\"Акапулко\"] }, \"Black\": { \"v\": [\"Црно\"] }, \"Blue Violet\": { \"v\": [\"Сино Виолетова\"] }, \"Boston Blue\": { \"v\": [\"Бостон Сина\"] }, \"Deluge\": { \"v\": [\"Делуџ\"] }, \"Feldspar\": { \"v\": [\"Фелдспар\"] }, \"Gold\": { \"v\": [\"Златна\"] }, \"Mariner\": { \"v\": [\"Маринер\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud сина\"] }, \"Olivine\": { \"v\": [\"Оливин\"] }, \"Purple\": { \"v\": [\"Виолетова\"] }, \"Rosy brown\": { \"v\": [\"Розево-кафеава\"] }, \"Whiskey\": { \"v\": [\"Виски\"] }, \"White\": { \"v\": [\"Бела\"] } } }, { \"l\": \"mn\", \"t\": { \"Acapulco\": { \"v\": [\"Акапулько\"] }, \"Black\": { \"v\": [\"Хар\"] }, \"Blue Violet\": { \"v\": [\"Цэнхэр ягаан\"] }, \"Boston Blue\": { \"v\": [\"Бостон цэнхэр\"] }, \"Deluge\": { \"v\": [\"Делюж\"] }, \"Feldspar\": { \"v\": [\"Фельдспар\"] }, \"Gold\": { \"v\": [\"Алтан\"] }, \"Mariner\": { \"v\": [\"Маринер\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud цэнхэр\"] }, \"Olivine\": { \"v\": [\"Оливин\"] }, \"Purple\": { \"v\": [\"Нил ягаан\"] }, \"Rosy brown\": { \"v\": [\"Ягаан бор\"] }, \"Whiskey\": { \"v\": [\"Виски\"] }, \"White\": { \"v\": [\"Цагаан\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Blue Violet\": { \"v\": [\"Blå fiolett\"] }, \"Boston Blue\": { \"v\": [\"Boston blå\"] }, \"Deluge\": { \"v\": [\"Syndflod\"] }, \"Feldspar\": { \"v\": [\"Feltspat\"] }, \"Gold\": { \"v\": [\"Gull\"] }, \"Mariner\": { \"v\": [\"Mariner\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud-blå\"] }, \"Olivine\": { \"v\": [\"Olivin\"] }, \"Purple\": { \"v\": [\"Lilla\"] }, \"Rosy brown\": { \"v\": [\"Rosenrød brun\"] }, \"Whiskey\": { \"v\": [\"Whiskey\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Black\": { \"v\": [\"Zwart\"] }, \"Blue Violet\": { \"v\": [\"Blauw Paars\"] }, \"Boston Blue\": { \"v\": [\"Boston Blauw\"] }, \"Deluge\": { \"v\": [\"Overlopen\"] }, \"Feldspar\": { \"v\": [\"Veldspaat\"] }, \"Gold\": { \"v\": [\"Goud\"] }, \"Mariner\": { \"v\": [\"Marineblauw\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud blauw\"] }, \"Olivine\": { \"v\": [\"Olivijn\"] }, \"Purple\": { \"v\": [\"Paars\"] }, \"Rosy brown\": { \"v\": [\"Rozig bruin\"] }, \"Whiskey\": { \"v\": [\"Whiskey\"] }, \"White\": { \"v\": [\"Wit\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Blue Violet\": { \"v\": [\"Niebieski fiolet\"] }, \"Boston Blue\": { \"v\": [\"Błękit Bostonu\"] }, \"Deluge\": { \"v\": [\"Potop\"] }, \"Feldspar\": { \"v\": [\"Skaleń\"] }, \"Gold\": { \"v\": [\"Złote\"] }, \"Mariner\": { \"v\": [\"Marynarz\"] }, \"Nextcloud blue\": { \"v\": [\"Niebieskie Nextcloud\"] }, \"Olivine\": { \"v\": [\"Oliwin\"] }, \"Purple\": { \"v\": [\"Fioletowy\"] }, \"Rosy brown\": { \"v\": [\"Różowy brąz\"] }, \"Whiskey\": { \"v\": [\"Whisky\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Black\": { \"v\": [\"Preto\"] }, \"Blue Violet\": { \"v\": [\"Violeta Azul\"] }, \"Boston Blue\": { \"v\": [\"Azul Boston\"] }, \"Deluge\": { \"v\": [\"Deluge\"] }, \"Feldspar\": { \"v\": [\"Feldspato\"] }, \"Gold\": { \"v\": [\"Ouro\"] }, \"Mariner\": { \"v\": [\"Marinheiro\"] }, \"Nextcloud blue\": { \"v\": [\"Azul Nextcloud\"] }, \"Olivine\": { \"v\": [\"Olivina\"] }, \"Purple\": { \"v\": [\"Roxo\"] }, \"Rosy brown\": { \"v\": [\"Castanho rosado\"] }, \"Whiskey\": { \"v\": [\"Uísque\"] }, \"White\": { \"v\": [\"Branco\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Blue Violet\": { \"v\": [\"Azul violeta\"] }, \"Boston Blue\": { \"v\": [\"Azul Boston\"] }, \"Deluge\": { \"v\": [\"Deluge\"] }, \"Feldspar\": { \"v\": [\"Feldspar\"] }, \"Gold\": { \"v\": [\"Ouro\"] }, \"Mariner\": { \"v\": [\"Mariner\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud azul\"] }, \"Olivine\": { \"v\": [\"Olivine\"] }, \"Purple\": { \"v\": [\"Púrpura\"] }, \"Rosy brown\": { \"v\": [\"Castanho rosado\"] }, \"Whiskey\": { \"v\": [\"Whiskey\"] } } }, { \"l\": \"ro\", \"t\": { \"Acapulco\": { \"v\": [\"Verde salvie\"] }, \"Black\": { \"v\": [\"Negru\"] }, \"Blue Violet\": { \"v\": [\"Albastru-violet\"] }, \"Boston Blue\": { \"v\": [\"Albastru-verzui\"] }, \"Deluge\": { \"v\": [\"Violet\"] }, \"Feldspar\": { \"v\": [\"Somon\"] }, \"Gold\": { \"v\": [\"Auriu\"] }, \"Mariner\": { \"v\": [\"Albastru marin\"] }, \"Nextcloud blue\": { \"v\": [\"Albastru Nextcloud\"] }, \"Olivine\": { \"v\": [\"Verde oliv\"] }, \"Purple\": { \"v\": [\"Purpuriu\"] }, \"Rosy brown\": { \"v\": [\"Roz-maroniu\"] }, \"Whiskey\": { \"v\": [\"Chihlimbar\"] }, \"White\": { \"v\": [\"Alb\"] } } }, { \"l\": \"ru\", \"t\": { \"Acapulco\": { \"v\": [\"Акапулько\"] }, \"Black\": { \"v\": [\"Чёрный\"] }, \"Blue Violet\": { \"v\": [\"Сине-фиолетовый\"] }, \"Boston Blue\": { \"v\": [\"Бостонский синий\"] }, \"Deluge\": { \"v\": [\"Перламутрово-фиолетовый\"] }, \"Feldspar\": { \"v\": [\"Античная латунь\"] }, \"Gold\": { \"v\": [\"Золотой\"] }, \"Mariner\": { \"v\": [\"Морской\"] }, \"Nextcloud blue\": { \"v\": [\"Голубой Nextcloud\"] }, \"Olivine\": { \"v\": [\"Оливковый\"] }, \"Purple\": { \"v\": [\"Фиолетовый\"] }, \"Rosy brown\": { \"v\": [\"Розово-коричневый\"] }, \"Whiskey\": { \"v\": [\"Виски\"] }, \"White\": { \"v\": [\"Белый\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Blue Violet\": { \"v\": [\"Modro fialová\"] }, \"Boston Blue\": { \"v\": [\"Bostonská modrá\"] }, \"Deluge\": { \"v\": [\"Deluge\"] }, \"Feldspar\": { \"v\": [\"Živec\"] }, \"Gold\": { \"v\": [\"Zlatá\"] }, \"Mariner\": { \"v\": [\"Námorník\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud modrá\"] }, \"Olivine\": { \"v\": [\"Olivová\"] }, \"Purple\": { \"v\": [\"Fialová\"] }, \"Rosy brown\": { \"v\": [\"Ružovo hnedá\"] }, \"Whiskey\": { \"v\": [\"Whisky\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Acapulco\": { \"v\": [\"Акапулко\"] }, \"Black\": { \"v\": [\"Црно\"] }, \"Blue Violet\": { \"v\": [\"Плаво љубичаста\"] }, \"Boston Blue\": { \"v\": [\"Бостон плава\"] }, \"Deluge\": { \"v\": [\"Поплава\"] }, \"Feldspar\": { \"v\": [\"Фелдспар\"] }, \"Gold\": { \"v\": [\"Злато\"] }, \"Mariner\": { \"v\": [\"Морнар\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud плава\"] }, \"Olivine\": { \"v\": [\"Маслинаста\"] }, \"Purple\": { \"v\": [\"Пурпурна\"] }, \"Rosy brown\": { \"v\": [\"Роси браон\"] }, \"Whiskey\": { \"v\": [\"Виски\"] }, \"White\": { \"v\": [\"Бело\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Black\": { \"v\": [\"Svart\"] }, \"Blue Violet\": { \"v\": [\"Blåviolett\"] }, \"Boston Blue\": { \"v\": [\"Bostonblå\"] }, \"Deluge\": { \"v\": [\"Djuplila\"] }, \"Feldspar\": { \"v\": [\"Fältspat\"] }, \"Gold\": { \"v\": [\"Guld\"] }, \"Mariner\": { \"v\": [\"Marinblå\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud-blå\"] }, \"Olivine\": { \"v\": [\"Olivin\"] }, \"Purple\": { \"v\": [\"Lila\"] }, \"Rosy brown\": { \"v\": [\"Rosabrun\"] }, \"Whiskey\": { \"v\": [\"Whisky\"] }, \"White\": { \"v\": [\"Vit\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Acapulco\": { \"v\": [\"Akapulko\"] }, \"Black\": { \"v\": [\"Siyah\"] }, \"Blue Violet\": { \"v\": [\"Mavi mor\"] }, \"Boston Blue\": { \"v\": [\"Boston mavisi\"] }, \"Deluge\": { \"v\": [\"Sel\"] }, \"Feldspar\": { \"v\": [\"Feldispat\"] }, \"Gold\": { \"v\": [\"Altın\"] }, \"Mariner\": { \"v\": [\"Denizci\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud mavi\"] }, \"Olivine\": { \"v\": [\"Zeytinlik\"] }, \"Purple\": { \"v\": [\"Mor\"] }, \"Rosy brown\": { \"v\": [\"Kırmızımsı kahverengi\"] }, \"Whiskey\": { \"v\": [\"Viski\"] }, \"White\": { \"v\": [\"Beyaz\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Acapulco\": { \"v\": [\"Акапулько\"] }, \"Blue Violet\": { \"v\": [\"Блакитна фіалка\"] }, \"Boston Blue\": { \"v\": [\"Бостонський синій\"] }, \"Deluge\": { \"v\": [\"Злива\"] }, \"Feldspar\": { \"v\": [\"Польові шпати\"] }, \"Gold\": { \"v\": [\"Золотий\"] }, \"Mariner\": { \"v\": [\"Морський\"] }, \"Nextcloud blue\": { \"v\": [\"Блакитний Nextcloud\"] }, \"Olivine\": { \"v\": [\"Олива\"] }, \"Purple\": { \"v\": [\"Фіолетовий\"] }, \"Rosy brown\": { \"v\": [\"Темно-рожевий\"] }, \"Whiskey\": { \"v\": [\"Кола\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Acapulco\": { \"v\": [\"Akapulko\"] }, \"Black\": { \"v\": [\"Qora\"] }, \"Blue Violet\": { \"v\": [\"Moviy binafsha\"] }, \"Boston Blue\": { \"v\": [\"Boston ko'k\"] }, \"Deluge\": { \"v\": [\"To'fon\"] }, \"Feldspar\": { \"v\": [\"Feldspar\"] }, \"Gold\": { \"v\": [\"Oltin\"] }, \"Mariner\": { \"v\": [\"Dengizchi\"] }, \"Nextcloud blue\": { \"v\": [\"Ko'k Nextcloud \"] }, \"Olivine\": { \"v\": [\"Olivine\"] }, \"Purple\": { \"v\": [\"Binafsha\"] }, \"Rosy brown\": { \"v\": [\"Qizil jigarrang\"] }, \"Whiskey\": { \"v\": [\"Whiskey\"] }, \"White\": { \"v\": [\"Oq\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Blue Violet\": { \"v\": [\"瓦罗兰特蓝\"] }, \"Boston Blue\": { \"v\": [\"波士顿蓝\"] }, \"Deluge\": { \"v\": [\"洪水色\"] }, \"Feldspar\": { \"v\": [\"长石\"] }, \"Gold\": { \"v\": [\"金色\"] }, \"Mariner\": { \"v\": [\"水手\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud 蓝\"] }, \"Olivine\": { \"v\": [\"橄榄石色\"] }, \"Purple\": { \"v\": [\"紫色\"] }, \"Rosy brown\": { \"v\": [\"玫瑰棕色\"] }, \"Whiskey\": { \"v\": [\"威士忌\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Acapulco\": { \"v\": [\"阿卡普爾科\"] }, \"Black\": { \"v\": [\"黑色\"] }, \"Blue Violet\": { \"v\": [\"藍紫色\"] }, \"Boston Blue\": { \"v\": [\"波士頓藍\"] }, \"Deluge\": { \"v\": [\"大洪水\"] }, \"Feldspar\": { \"v\": [\"長石\"] }, \"Gold\": { \"v\": [\"Gold\"] }, \"Mariner\": { \"v\": [\"海軍藍\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud 藍色\"] }, \"Olivine\": { \"v\": [\"橄欖石色\"] }, \"Purple\": { \"v\": [\"紫色\"] }, \"Rosy brown\": { \"v\": [\"玫瑰棕色\"] }, \"Whiskey\": { \"v\": [\"威士忌\"] }, \"White\": { \"v\": [\"白色\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Acapulco\": { \"v\": [\"Acapulco\"] }, \"Black\": { \"v\": [\"黑色\"] }, \"Blue Violet\": { \"v\": [\"藍紫色\"] }, \"Boston Blue\": { \"v\": [\"波士頓藍\"] }, \"Deluge\": { \"v\": [\"Deluge\"] }, \"Feldspar\": { \"v\": [\"長石\"] }, \"Gold\": { \"v\": [\"金色\"] }, \"Mariner\": { \"v\": [\"海軍藍\"] }, \"Nextcloud blue\": { \"v\": [\"Nextcloud 藍色\"] }, \"Olivine\": { \"v\": [\"橄欖石色\"] }, \"Purple\": { \"v\": [\"紫色\"] }, \"Rosy brown\": { \"v\": [\"玫瑰棕色\"] }, \"Whiskey\": { \"v\": [\"威士忌\"] }, \"White\": { \"v\": [\"白色\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t4 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Actions\": { \"v\": [\"إجراءات\"] } } }, { \"l\": \"ast\", \"t\": { \"Actions\": { \"v\": [\"Aiciones\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": { \"Actions\": { \"v\": [\"Oberioù\"] } } }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Actions\": { \"v\": [\"Accions\"] } } }, { \"l\": \"cs\", \"t\": { \"Actions\": { \"v\": [\"Akce\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Actions\": { \"v\": [\"Akce\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Actions\": { \"v\": [\"Handlinger\"] } } }, { \"l\": \"de\", \"t\": { \"Actions\": { \"v\": [\"Aktionen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Actions\": { \"v\": [\"Aktionen\"] } } }, { \"l\": \"el\", \"t\": { \"Actions\": { \"v\": [\"Ενέργειες\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Actions\": { \"v\": [\"Actions\"] } } }, { \"l\": \"eo\", \"t\": { \"Actions\": { \"v\": [\"Agoj\"] } } }, { \"l\": \"es\", \"t\": { \"Actions\": { \"v\": [\"Acciones\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Actions\": { \"v\": [\"Acciones\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Actions\": { \"v\": [\"Acciones\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Actions\": { \"v\": [\"Acciones\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Actions\": { \"v\": [\"Tegevus\"] } } }, { \"l\": \"eu\", \"t\": { \"Actions\": { \"v\": [\"Ekintzak\"] } } }, { \"l\": \"fa\", \"t\": { \"Actions\": { \"v\": [\"کنش‌ها\"] } } }, { \"l\": \"fi\", \"t\": { \"Actions\": { \"v\": [\"Toiminnot\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Actions\": { \"v\": [\"Actions\"] } } }, { \"l\": \"ga\", \"t\": { \"Actions\": { \"v\": [\"Gníomhartha\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Actions\": { \"v\": [\"Accións\"] } } }, { \"l\": \"he\", \"t\": { \"Actions\": { \"v\": [\"פעולות\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Actions\": { \"v\": [\"Radnje\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Actions\": { \"v\": [\"Műveletek\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Actions\": { \"v\": [\"Tindakan\"] } } }, { \"l\": \"is\", \"t\": { \"Actions\": { \"v\": [\"Aðgerðir\"] } } }, { \"l\": \"it\", \"t\": { \"Actions\": { \"v\": [\"Azioni\"] } } }, { \"l\": \"ja\", \"t\": { \"Actions\": { \"v\": [\"操作\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Actions\": { \"v\": [\"操作\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Actions\": { \"v\": [\"동작\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Actions\": { \"v\": [\"ການກະທຳ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Actions\": { \"v\": [\"Veiksmai\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Actions\": { \"v\": [\"Акции\"] } } }, { \"l\": \"mn\", \"t\": { \"Actions\": { \"v\": [\"Үйлдлүүд\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": { \"Actions\": { \"v\": [\"လုပ်ဆောင်ချက်များ\"] } } }, { \"l\": \"nb\", \"t\": { \"Actions\": { \"v\": [\"Handlinger\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Actions\": { \"v\": [\"Acties\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": { \"Actions\": { \"v\": [\"Accions\"] } } }, { \"l\": \"pl\", \"t\": { \"Actions\": { \"v\": [\"Działania\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Actions\": { \"v\": [\"Ações\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Actions\": { \"v\": [\"Ações\"] } } }, { \"l\": \"ro\", \"t\": { \"Actions\": { \"v\": [\"Acțiuni\"] } } }, { \"l\": \"ru\", \"t\": { \"Actions\": { \"v\": [\"Действия\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Actions\": { \"v\": [\"Akcie\"] } } }, { \"l\": \"sl\", \"t\": { \"Actions\": { \"v\": [\"Dejanja\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Actions\": { \"v\": [\"Радње\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Actions\": { \"v\": [\"Åtgärder\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Actions\": { \"v\": [\"İşlemler\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Actions\": { \"v\": [\"Дії\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Actions\": { \"v\": [\"Harakatlar\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Actions\": { \"v\": [\"行为\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Actions\": { \"v\": [\"動作\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Actions\": { \"v\": [\"動作\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t5 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Activities\": { \"v\": [\"سجل الأنشطة\"] }, \"Animals & Nature\": { \"v\": [\"الحيوانات والطبيعة\"] }, \"Custom\": { \"v\": [\"مُخصَّص\"] }, \"Dark skin tone\": { \"v\": [\"أسمر البُشرة\"] }, \"Emoji picker\": { \"v\": [\"لاقط الإيموجي\"] }, \"Flags\": { \"v\": [\"الأعلام\"] }, \"Food & Drink\": { \"v\": [\"الطعام والشراب\"] }, \"Frequently used\": { \"v\": [\"شائعة الاستعمال\"] }, \"Light skin tone\": { \"v\": [\"فاتح البُشرة\"] }, \"Medium dark skin tone\": { \"v\": [\"بشرة متوسطة الاسمرار\"] }, \"Medium light skin tone\": { \"v\": [\"بشرة متوسطة البياض\"] }, \"Medium skin tone\": { \"v\": [\"بشرة وسطية اللون\"] }, \"Neutral skin color\": { \"v\": [\"لون بُشرة طبيعي\"] }, \"Objects\": { \"v\": [\"أشياء\"] }, \"People & Body\": { \"v\": [\"أشخاص و أجسام\"] }, \"Pick an emoji\": { \"v\": [\"إختَر رمز إيموجي emoji\"] }, \"Search emoji\": { \"v\": [\"البحث عن إيموجي emoji\"] }, \"Search results\": { \"v\": [\"نتائج البحث\"] }, \"Selected\": { \"v\": [\"محدّدة\"] }, \"Skin tone\": { \"v\": [\"لون البُشرة\"] }, \"Smileys & Emotion\": { \"v\": [\"وجوهٌ ضاحكة و مشاعر\"] }, \"Symbols\": { \"v\": [\"رموز\"] }, \"Travel & Places\": { \"v\": [\"سفر و أماكن\"] } } }, { \"l\": \"ast\", \"t\": { \"Activities\": { \"v\": [\"Actividaes\"] }, \"Animals & Nature\": { \"v\": [\"Animales y natura\"] }, \"Custom\": { \"v\": [\"Personalizar\"] }, \"Dark skin tone\": { \"v\": [\"Tonu d'aspeutu escuru\"] }, \"Emoji picker\": { \"v\": [\"Selector de fustaxes\"] }, \"Flags\": { \"v\": [\"Banderes\"] }, \"Food & Drink\": { \"v\": [\"Cómida y bébora\"] }, \"Frequently used\": { \"v\": [\"D'usu frecuente\"] }, \"Light skin tone\": { \"v\": [\"Tonu d'aspeutu claru\"] }, \"Medium dark skin tone\": { \"v\": [\"Tonu d'aspeutu medio escuru\"] }, \"Medium light skin tone\": { \"v\": [\"Tonu d'aspeutu medio claru\"] }, \"Medium skin tone\": { \"v\": [\"Tonu d'aspeutu mediu\"] }, \"Neutral skin color\": { \"v\": [\"Color d'aspeutu neutral\"] }, \"Objects\": { \"v\": [\"Oxetos\"] }, \"People & Body\": { \"v\": [\"Persones y cuerpu\"] }, \"Pick an emoji\": { \"v\": [\"Escueyi un fustaxe\"] }, \"Search emoji\": { \"v\": [\"Buscar nos fustaxes\"] }, \"Search results\": { \"v\": [\"Resultaos de la busca\"] }, \"Selected\": { \"v\": [\"Na seleición\"] }, \"Skin tone\": { \"v\": [\"Tonu d'aspeutu\"] }, \"Smileys & Emotion\": { \"v\": [\"Sorrises y emociones\"] }, \"Symbols\": { \"v\": [\"Símbolos\"] }, \"Travel & Places\": { \"v\": [\"Viaxes y llugares\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": { \"Activities\": { \"v\": [\"Oberiantizoù\"] }, \"Animals & Nature\": { \"v\": [\"Loened & Natur\"] }, \"Custom\": { \"v\": [\"Personelañ\"] }, \"Flags\": { \"v\": [\"Bannieloù\"] }, \"Food & Drink\": { \"v\": [\"Boued & Evajoù\"] }, \"Frequently used\": { \"v\": [\"Implijet alies\"] }, \"Objects\": { \"v\": [\"Traoù\"] }, \"People & Body\": { \"v\": [\"Tud & Korf\"] }, \"Pick an emoji\": { \"v\": [\"Choaz un emoji\"] }, \"Search results\": { \"v\": [\"Disoc'hoù an enklask\"] }, \"Smileys & Emotion\": { \"v\": [\"Smileyioù & Fromoù\"] }, \"Symbols\": { \"v\": [\"Arouezioù\"] }, \"Travel & Places\": { \"v\": [\"Beaj & Lec'hioù\"] } } }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Activities\": { \"v\": [\"Activitats\"] }, \"Animals & Nature\": { \"v\": [\"Animals i natura\"] }, \"Custom\": { \"v\": [\"Personalitzat\"] }, \"Flags\": { \"v\": [\"Marques\"] }, \"Food & Drink\": { \"v\": [\"Menjar i begudes\"] }, \"Frequently used\": { \"v\": [\"Utilitzats recentment\"] }, \"Objects\": { \"v\": [\"Objectes\"] }, \"People & Body\": { \"v\": [\"Persones i cos\"] }, \"Pick an emoji\": { \"v\": [\"Trieu un emoji\"] }, \"Search results\": { \"v\": [\"Resultats de cerca\"] }, \"Smileys & Emotion\": { \"v\": [\"Cares i emocions\"] }, \"Symbols\": { \"v\": [\"Símbols\"] }, \"Travel & Places\": { \"v\": [\"Viatges i llocs\"] } } }, { \"l\": \"cs\", \"t\": { \"Activities\": { \"v\": [\"Aktivity\"] }, \"Animals & Nature\": { \"v\": [\"Zvířata a příroda\"] }, \"Custom\": { \"v\": [\"Uživatelsky určené\"] }, \"Dark skin tone\": { \"v\": [\"Tmavý tělový tón\"] }, \"Emoji picker\": { \"v\": [\"Výběr emotikon\"] }, \"Flags\": { \"v\": [\"Příznaky\"] }, \"Food & Drink\": { \"v\": [\"Jídlo a pití\"] }, \"Frequently used\": { \"v\": [\"Často používané\"] }, \"Light skin tone\": { \"v\": [\"Světlý tělový tón\"] }, \"Medium dark skin tone\": { \"v\": [\"Středně tmavý tělový tón\"] }, \"Medium light skin tone\": { \"v\": [\"Středně světlý tělový tón\"] }, \"Medium skin tone\": { \"v\": [\"Střední tělový tón\"] }, \"Neutral skin color\": { \"v\": [\"Neutrální tělová barva\"] }, \"Objects\": { \"v\": [\"Objekty\"] }, \"People & Body\": { \"v\": [\"Lidé a tělo\"] }, \"Pick an emoji\": { \"v\": [\"Vybrat emoji\"] }, \"Search emoji\": { \"v\": [\"Hledat emoji\"] }, \"Search results\": { \"v\": [\"Výsledky hledání\"] }, \"Selected\": { \"v\": [\"Vybráno\"] }, \"Skin tone\": { \"v\": [\"Tělový tón\"] }, \"Smileys & Emotion\": { \"v\": [\"Úsměvy a emoce\"] }, \"Symbols\": { \"v\": [\"Symboly\"] }, \"Travel & Places\": { \"v\": [\"Cestování a místa\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Activities\": { \"v\": [\"Aktivity\"] }, \"Animals & Nature\": { \"v\": [\"Zvířata a příroda\"] }, \"Custom\": { \"v\": [\"Uživatelsky určené\"] }, \"Dark skin tone\": { \"v\": [\"Tmavý tělový tón\"] }, \"Emoji picker\": { \"v\": [\"Výběr emotikon\"] }, \"Flags\": { \"v\": [\"Příznaky\"] }, \"Food & Drink\": { \"v\": [\"Jídlo a pití\"] }, \"Frequently used\": { \"v\": [\"Často používané\"] }, \"Light skin tone\": { \"v\": [\"Světlý tělový tón\"] }, \"Medium dark skin tone\": { \"v\": [\"Středně tmavý tělový tón\"] }, \"Medium light skin tone\": { \"v\": [\"Středně světlý tělový tón\"] }, \"Medium skin tone\": { \"v\": [\"Střední tělový tón\"] }, \"Neutral skin color\": { \"v\": [\"Neutřální tělová barva\"] }, \"Objects\": { \"v\": [\"Objekty\"] }, \"People & Body\": { \"v\": [\"Lidé a tělo\"] }, \"Pick an emoji\": { \"v\": [\"Vybrat emoji\"] }, \"Search emoji\": { \"v\": [\"Hledat emoji\"] }, \"Search results\": { \"v\": [\"Výsledky hledání\"] }, \"Selected\": { \"v\": [\"Vybráno\"] }, \"Skin tone\": { \"v\": [\"Tělový tón\"] }, \"Smileys & Emotion\": { \"v\": [\"Úsměvy a emoce\"] }, \"Symbols\": { \"v\": [\"Symboly\"] }, \"Travel & Places\": { \"v\": [\"Cestování a místa\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Activities\": { \"v\": [\"Aktiviteter\"] }, \"Animals & Nature\": { \"v\": [\"Dyr og natur\"] }, \"Custom\": { \"v\": [\"Brugerdefineret\"] }, \"Dark skin tone\": { \"v\": [\"Mørk hudfarve\"] }, \"Emoji picker\": { \"v\": [\"Emojivælger\"] }, \"Flags\": { \"v\": [\"Flag\"] }, \"Food & Drink\": { \"v\": [\"Mad og drikke\"] }, \"Frequently used\": { \"v\": [\"Ofte brugt\"] }, \"Light skin tone\": { \"v\": [\"Lys hudfarve\"] }, \"Medium dark skin tone\": { \"v\": [\"Mellemmørk hudfarve\"] }, \"Medium light skin tone\": { \"v\": [\"Mellemlys hudfarve\"] }, \"Medium skin tone\": { \"v\": [\"Mellem hudfarve\"] }, \"Neutral skin color\": { \"v\": [\"Neutral hudfarve\"] }, \"Objects\": { \"v\": [\"Objekter\"] }, \"People & Body\": { \"v\": [\"Mennesker og krop\"] }, \"Pick an emoji\": { \"v\": [\"Vælg en emoji\"] }, \"Search emoji\": { \"v\": [\"Søg emoji\"] }, \"Search results\": { \"v\": [\"Søgeresultater\"] }, \"Selected\": { \"v\": [\"Valgt\"] }, \"Skin tone\": { \"v\": [\"Hudfarve\"] }, \"Smileys & Emotion\": { \"v\": [\"Smileys og følelser\"] }, \"Symbols\": { \"v\": [\"Symboler\"] }, \"Travel & Places\": { \"v\": [\"Rejser og steder\"] } } }, { \"l\": \"de\", \"t\": { \"Activities\": { \"v\": [\"Aktivitäten\"] }, \"Animals & Nature\": { \"v\": [\"Tiere & Natur\"] }, \"Custom\": { \"v\": [\"Benutzerdefiniert\"] }, \"Dark skin tone\": { \"v\": [\"Dunkler Hautfarbton\"] }, \"Emoji picker\": { \"v\": [\"Emoji-Auswahl\"] }, \"Flags\": { \"v\": [\"Flaggen\"] }, \"Food & Drink\": { \"v\": [\"Essen & Trinken\"] }, \"Frequently used\": { \"v\": [\"Häufig verwendet\"] }, \"Light skin tone\": { \"v\": [\"Heller Hautfarbton\"] }, \"Medium dark skin tone\": { \"v\": [\"Mitteldunkler Hautfarbton\"] }, \"Medium light skin tone\": { \"v\": [\"Mittelheller Hautfarbton\"] }, \"Medium skin tone\": { \"v\": [\"Mittlerer Hautfarbton\"] }, \"Neutral skin color\": { \"v\": [\"Neutraler Hautfarbton\"] }, \"Objects\": { \"v\": [\"Objekte\"] }, \"People & Body\": { \"v\": [\"Menschen & Körper\"] }, \"Pick an emoji\": { \"v\": [\"Ein Emoji auswählen\"] }, \"Search emoji\": { \"v\": [\"Emoji suchen\"] }, \"Search results\": { \"v\": [\"Suchergebnisse\"] }, \"Selected\": { \"v\": [\"Ausgewählt\"] }, \"Skin tone\": { \"v\": [\"Hautfarbton\"] }, \"Smileys & Emotion\": { \"v\": [\"Smileys & Emotionen\"] }, \"Symbols\": { \"v\": [\"Symbole\"] }, \"Travel & Places\": { \"v\": [\"Reisen & Orte\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Activities\": { \"v\": [\"Aktivitäten\"] }, \"Animals & Nature\": { \"v\": [\"Tiere & Natur\"] }, \"Custom\": { \"v\": [\"Benutzerdefiniert\"] }, \"Dark skin tone\": { \"v\": [\"Dunkler Hautfarbton\"] }, \"Emoji picker\": { \"v\": [\"Emoji-Auswahl\"] }, \"Flags\": { \"v\": [\"Flaggen\"] }, \"Food & Drink\": { \"v\": [\"Essen & Trinken\"] }, \"Frequently used\": { \"v\": [\"Häufig verwendet\"] }, \"Light skin tone\": { \"v\": [\"Heller Hautfarbton\"] }, \"Medium dark skin tone\": { \"v\": [\"Mitteldunkler Hautfarbton\"] }, \"Medium light skin tone\": { \"v\": [\"Mittelheller Hautfarbton\"] }, \"Medium skin tone\": { \"v\": [\"Mittlerer Hautfarbton\"] }, \"Neutral skin color\": { \"v\": [\"Neutraler Hautfarbton\"] }, \"Objects\": { \"v\": [\"Objekte\"] }, \"People & Body\": { \"v\": [\"Menschen & Körper\"] }, \"Pick an emoji\": { \"v\": [\"Ein Emoji auswählen\"] }, \"Search emoji\": { \"v\": [\"Emoji suchen\"] }, \"Search results\": { \"v\": [\"Suchergebnisse\"] }, \"Selected\": { \"v\": [\"Ausgewählt\"] }, \"Skin tone\": { \"v\": [\"Hautfarbton\"] }, \"Smileys & Emotion\": { \"v\": [\"Smileys & Emotionen\"] }, \"Symbols\": { \"v\": [\"Symbole\"] }, \"Travel & Places\": { \"v\": [\"Reisen & Orte\"] } } }, { \"l\": \"el\", \"t\": { \"Activities\": { \"v\": [\"Δραστηριότητες\"] }, \"Animals & Nature\": { \"v\": [\"Ζώα & Φύση\"] }, \"Custom\": { \"v\": [\"Προσαρμογή\"] }, \"Dark skin tone\": { \"v\": [\"Σκούρο θέμα\"] }, \"Emoji picker\": { \"v\": [\"Επιλογέας emoji\"] }, \"Flags\": { \"v\": [\"Σημαίες\"] }, \"Food & Drink\": { \"v\": [\"Φαγητό & Ποτό\"] }, \"Frequently used\": { \"v\": [\"Συχνά χρησιμοποιούμενο\"] }, \"Light skin tone\": { \"v\": [\"Ανοιχτό θέμα\"] }, \"Medium dark skin tone\": { \"v\": [\"Μέτριο σκούρο θέμα\"] }, \"Medium light skin tone\": { \"v\": [\"Μέτριο ανοιχτό θέμα\"] }, \"Medium skin tone\": { \"v\": [\"Μέτριος τόνος θέματος\"] }, \"Neutral skin color\": { \"v\": [\"Ουδέτερο χρώμα θέματος\"] }, \"Objects\": { \"v\": [\"Αντικείμενα\"] }, \"People & Body\": { \"v\": [\"Άνθρωποι & Σώμα\"] }, \"Pick an emoji\": { \"v\": [\"Επιλέξτε ένα emoji\"] }, \"Search emoji\": { \"v\": [\"Αναζήτηση emoji\"] }, \"Search results\": { \"v\": [\"Αποτελέσματα αναζήτησης\"] }, \"Selected\": { \"v\": [\"Επιλεγμένο\"] }, \"Skin tone\": { \"v\": [\"Τόνος δέρματος\"] }, \"Smileys & Emotion\": { \"v\": [\"Φατσούλες & Συναίσθημα\"] }, \"Symbols\": { \"v\": [\"Σύμβολα\"] }, \"Travel & Places\": { \"v\": [\"Ταξίδια & Τοποθεσίες\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Activities\": { \"v\": [\"Activities\"] }, \"Animals & Nature\": { \"v\": [\"Animals & Nature\"] }, \"Custom\": { \"v\": [\"Custom\"] }, \"Dark skin tone\": { \"v\": [\"Dark skin tone\"] }, \"Emoji picker\": { \"v\": [\"Emoji picker\"] }, \"Flags\": { \"v\": [\"Flags\"] }, \"Food & Drink\": { \"v\": [\"Food & Drink\"] }, \"Frequently used\": { \"v\": [\"Frequently used\"] }, \"Light skin tone\": { \"v\": [\"Light skin tone\"] }, \"Medium dark skin tone\": { \"v\": [\"Medium dark skin tone\"] }, \"Medium light skin tone\": { \"v\": [\"Medium light skin tone\"] }, \"Medium skin tone\": { \"v\": [\"Medium skin tone\"] }, \"Neutral skin color\": { \"v\": [\"Neutral skin colour\"] }, \"Objects\": { \"v\": [\"Objects\"] }, \"People & Body\": { \"v\": [\"People & Body\"] }, \"Pick an emoji\": { \"v\": [\"Pick an emoji\"] }, \"Search emoji\": { \"v\": [\"Search emoji\"] }, \"Search results\": { \"v\": [\"Search results\"] }, \"Selected\": { \"v\": [\"Selected\"] }, \"Skin tone\": { \"v\": [\"Skin tone\"] }, \"Smileys & Emotion\": { \"v\": [\"Smileys & Emotion\"] }, \"Symbols\": { \"v\": [\"Symbols\"] }, \"Travel & Places\": { \"v\": [\"Travel & Places\"] } } }, { \"l\": \"eo\", \"t\": { \"Activities\": { \"v\": [\"Aktiveco\"] }, \"Animals & Nature\": { \"v\": [\"Bestoj & Naturo\"] }, \"Custom\": { \"v\": [\"Propra\"] }, \"Flags\": { \"v\": [\"Flagoj\"] }, \"Food & Drink\": { \"v\": [\"Manĝaĵo & Trinkaĵo\"] }, \"Frequently used\": { \"v\": [\"Ofte uzataj\"] }, \"Objects\": { \"v\": [\"Objektoj\"] }, \"People & Body\": { \"v\": [\"Homoj & Korpo\"] }, \"Pick an emoji\": { \"v\": [\"Elekti emoĝion \"] }, \"Search results\": { \"v\": [\"Serĉrezultoj\"] }, \"Smileys & Emotion\": { \"v\": [\"Ridoj kaj Emocioj\"] }, \"Symbols\": { \"v\": [\"Signoj\"] }, \"Travel & Places\": { \"v\": [\"Vojaĵoj & Lokoj\"] } } }, { \"l\": \"es\", \"t\": { \"Activities\": { \"v\": [\"Actividades\"] }, \"Animals & Nature\": { \"v\": [\"Animales y naturaleza\"] }, \"Custom\": { \"v\": [\"Personalizado\"] }, \"Dark skin tone\": { \"v\": [\"Tono de piel obscuro\"] }, \"Emoji picker\": { \"v\": [\"Selector de emojis\"] }, \"Flags\": { \"v\": [\"Banderas\"] }, \"Food & Drink\": { \"v\": [\"Comida y bebida\"] }, \"Frequently used\": { \"v\": [\"Usado con frecuencia\"] }, \"Light skin tone\": { \"v\": [\"Tono de piel claro\"] }, \"Medium dark skin tone\": { \"v\": [\"Tono de piel medio oscuro\"] }, \"Medium light skin tone\": { \"v\": [\"Tono de piel medio claro\"] }, \"Medium skin tone\": { \"v\": [\"Tono de piel medio\"] }, \"Neutral skin color\": { \"v\": [\"Color de piel neutral\"] }, \"Objects\": { \"v\": [\"Objetos\"] }, \"People & Body\": { \"v\": [\"Personas y Cuerpo\"] }, \"Pick an emoji\": { \"v\": [\"Elegir un emoji\"] }, \"Search emoji\": { \"v\": [\"Buscar emoji\"] }, \"Search results\": { \"v\": [\"Resultados de la búsqueda\"] }, \"Selected\": { \"v\": [\"Seleccionado\"] }, \"Skin tone\": { \"v\": [\"Tono de piel\"] }, \"Smileys & Emotion\": { \"v\": [\"Smileys y emoticonos\"] }, \"Symbols\": { \"v\": [\"Símbolos\"] }, \"Travel & Places\": { \"v\": [\"Viajes y lugares\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Activities\": { \"v\": [\"Actividades\"] }, \"Animals & Nature\": { \"v\": [\"Animales y Naturaleza\"] }, \"Custom\": { \"v\": [\"Personalizado\"] }, \"Dark skin tone\": { \"v\": [\"Tono de piel oscuro\"] }, \"Emoji picker\": { \"v\": [\"Selector de emojis\"] }, \"Flags\": { \"v\": [\"Marcas\"] }, \"Food & Drink\": { \"v\": [\"Comida y Bebida\"] }, \"Frequently used\": { \"v\": [\"Usados frecuentemente\"] }, \"Light skin tone\": { \"v\": [\"Tono de piel claro\"] }, \"Medium dark skin tone\": { \"v\": [\"Tono de piel medio oscuro\"] }, \"Medium light skin tone\": { \"v\": [\"Tono de piel medio claro\"] }, \"Medium skin tone\": { \"v\": [\"Tono de piel medio\"] }, \"Neutral skin color\": { \"v\": [\"Color de piel neutral\"] }, \"Objects\": { \"v\": [\"Objetos\"] }, \"People & Body\": { \"v\": [\"Personas y Cuerpo\"] }, \"Pick an emoji\": { \"v\": [\"Elija un emoji\"] }, \"Search emoji\": { \"v\": [\"Buscar emoji\"] }, \"Search results\": { \"v\": [\"Resultados de la búsqueda\"] }, \"Selected\": { \"v\": [\"Seleccionado\"] }, \"Skin tone\": { \"v\": [\"Tono de piel\"] }, \"Smileys & Emotion\": { \"v\": [\"Caritas y Emociones\"] }, \"Symbols\": { \"v\": [\"Símbolos\"] }, \"Travel & Places\": { \"v\": [\"Viajes y Lugares\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Activities\": { \"v\": [\"Actividades\"] }, \"Animals & Nature\": { \"v\": [\"Animales y Naturaleza\"] }, \"Custom\": { \"v\": [\"Personalizado\"] }, \"Flags\": { \"v\": [\"Marcas\"] }, \"Food & Drink\": { \"v\": [\"Comida y Bebida\"] }, \"Frequently used\": { \"v\": [\"Frecuentemente utilizado\"] }, \"Objects\": { \"v\": [\"Objetos\"] }, \"People & Body\": { \"v\": [\"Personas y Cuerpo\"] }, \"Pick an emoji\": { \"v\": [\"Seleccionar un emoji\"] }, \"Search emoji\": { \"v\": [\"Buscar emoji\"] }, \"Search results\": { \"v\": [\"Resultados de búsqueda\"] }, \"Smileys & Emotion\": { \"v\": [\"Caritas y Emociones\"] }, \"Symbols\": { \"v\": [\"Símbolos\"] }, \"Travel & Places\": { \"v\": [\"Viajes y Lugares\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Activities\": { \"v\": [\"Actividades\"] }, \"Animals & Nature\": { \"v\": [\"Animales y naturaleza\"] }, \"Custom\": { \"v\": [\"Personalizado\"] }, \"Dark skin tone\": { \"v\": [\"Tono de piel oscuro\"] }, \"Emoji picker\": { \"v\": [\"Selector de emojis\"] }, \"Flags\": { \"v\": [\"Banderas\"] }, \"Food & Drink\": { \"v\": [\"Comida y Bebida\"] }, \"Frequently used\": { \"v\": [\"Usado frecuentemente\"] }, \"Light skin tone\": { \"v\": [\"Tono de piel claro\"] }, \"Medium dark skin tone\": { \"v\": [\"Tono de piel medio oscuro\"] }, \"Medium light skin tone\": { \"v\": [\"Tono de piel medio claro\"] }, \"Medium skin tone\": { \"v\": [\"Tono de piel medio\"] }, \"Neutral skin color\": { \"v\": [\"Color de piel neutral\"] }, \"Objects\": { \"v\": [\"Objetos\"] }, \"People & Body\": { \"v\": [\"Personas y cuerpos\"] }, \"Pick an emoji\": { \"v\": [\"Seleccionar un emoji\"] }, \"Search emoji\": { \"v\": [\"Buscar emoji\"] }, \"Search results\": { \"v\": [\"Resultados de la búsqueda\"] }, \"Selected\": { \"v\": [\"Seleccionado\"] }, \"Skin tone\": { \"v\": [\"Tono de piel\"] }, \"Smileys & Emotion\": { \"v\": [\"Caritas y Emociones\"] }, \"Symbols\": { \"v\": [\"Símbolos\"] }, \"Travel & Places\": { \"v\": [\"Viajes y lugares\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Activities\": { \"v\": [\"Tegevused\"] }, \"Animals & Nature\": { \"v\": [\"Loomad ja loodus\"] }, \"Custom\": { \"v\": [\"Kohanda\"] }, \"Dark skin tone\": { \"v\": [\"Kesta tume toon\"] }, \"Emoji picker\": { \"v\": [\"Emojide valija\"] }, \"Flags\": { \"v\": [\"Lipud\"] }, \"Food & Drink\": { \"v\": [\"Söök ja jook\"] }, \"Frequently used\": { \"v\": [\"Sageli kasutatud\"] }, \"Light skin tone\": { \"v\": [\"Kesta hele toon\"] }, \"Medium dark skin tone\": { \"v\": [\"Kesta keskmiselt tume toon\"] }, \"Medium light skin tone\": { \"v\": [\"Kesta keskmiselt hele toon\"] }, \"Medium skin tone\": { \"v\": [\"Kesta keskmine toon\"] }, \"Neutral skin color\": { \"v\": [\"Kesta neutraalne toon\"] }, \"Objects\": { \"v\": [\"Objektid\"] }, \"People & Body\": { \"v\": [\"Inimesed ja keha\"] }, \"Pick an emoji\": { \"v\": [\"Vali emoji\"] }, \"Search emoji\": { \"v\": [\"Otsi emojit\"] }, \"Search results\": { \"v\": [\"Otsi tulemustest\"] }, \"Selected\": { \"v\": [\"Valitud\"] }, \"Skin tone\": { \"v\": [\"Kesta toon\"] }, \"Smileys & Emotion\": { \"v\": [\"Smailid ja emotsioonid\"] }, \"Symbols\": { \"v\": [\"Sümbolid\"] }, \"Travel & Places\": { \"v\": [\"Reisimine ja kohad\"] } } }, { \"l\": \"eu\", \"t\": { \"Activities\": { \"v\": [\"Jarduerak\"] }, \"Animals & Nature\": { \"v\": [\"Animaliak eta Natura\"] }, \"Custom\": { \"v\": [\"Pertsonalizatua\"] }, \"Flags\": { \"v\": [\"Banderak\"] }, \"Food & Drink\": { \"v\": [\"Janaria eta edariak\"] }, \"Frequently used\": { \"v\": [\"Askotan erabilia\"] }, \"Objects\": { \"v\": [\"Objektuak\"] }, \"People & Body\": { \"v\": [\"Jendea eta gorputza\"] }, \"Pick an emoji\": { \"v\": [\"Hautatu emoji bat\"] }, \"Search emoji\": { \"v\": [\"Bilatu emojiak\"] }, \"Search results\": { \"v\": [\"Bilaketa emaitzak\"] }, \"Selected\": { \"v\": [\"Hautatuta\"] }, \"Smileys & Emotion\": { \"v\": [\"Smileyak eta emozioa\"] }, \"Symbols\": { \"v\": [\"Sinboloak\"] }, \"Travel & Places\": { \"v\": [\"Bidaiak eta lekuak\"] } } }, { \"l\": \"fa\", \"t\": { \"Activities\": { \"v\": [\"فعالیت‌ها\"] }, \"Animals & Nature\": { \"v\": [\"حیوانات و طبیعت\"] }, \"Custom\": { \"v\": [\"سفارشی\"] }, \"Dark skin tone\": { \"v\": [\"رنگ پوسته تیره\"] }, \"Emoji picker\": { \"v\": [\"انتخاب‌گر شکلک\"] }, \"Flags\": { \"v\": [\"پرچم‌ها\"] }, \"Food & Drink\": { \"v\": [\"غذا و نوشیدنی\"] }, \"Frequently used\": { \"v\": [\"پرکاربرد\"] }, \"Light skin tone\": { \"v\": [\"رنگ پوسته روشن\"] }, \"Medium dark skin tone\": { \"v\": [\"رنگ پوسته تیره متوسط\"] }, \"Medium light skin tone\": { \"v\": [\"رنگ پوسته روشن متوسط\"] }, \"Medium skin tone\": { \"v\": [\"رنگ پوسته متوسط\"] }, \"Neutral skin color\": { \"v\": [\"رنگ پوسته خنثی\"] }, \"Objects\": { \"v\": [\"اشیاء\"] }, \"People & Body\": { \"v\": [\"مردم و بدن\"] }, \"Pick an emoji\": { \"v\": [\"انتخاب شکلک\"] }, \"Search emoji\": { \"v\": [\"جستجوی شکلک\"] }, \"Search results\": { \"v\": [\"نتایج جستجو\"] }, \"Selected\": { \"v\": [\"انتخاب شده\"] }, \"Skin tone\": { \"v\": [\"رنگ پوسته\"] }, \"Smileys & Emotion\": { \"v\": [\"شکلک‌ها و احساسات\"] }, \"Symbols\": { \"v\": [\"نمادها\"] }, \"Travel & Places\": { \"v\": [\"سفر و مکان‌ها\"] } } }, { \"l\": \"fi\", \"t\": { \"Activities\": { \"v\": [\"Aktiviteetit\"] }, \"Animals & Nature\": { \"v\": [\"Eläimet & luonto\"] }, \"Custom\": { \"v\": [\"Mukautettu\"] }, \"Dark skin tone\": { \"v\": [\"Tumma ihonväri\"] }, \"Emoji picker\": { \"v\": [\"Emojivalitsin\"] }, \"Flags\": { \"v\": [\"Liput\"] }, \"Food & Drink\": { \"v\": [\"Ruoka & juoma\"] }, \"Frequently used\": { \"v\": [\"Usein käytetyt\"] }, \"Light skin tone\": { \"v\": [\"Vaalea ihonväri\"] }, \"Medium dark skin tone\": { \"v\": [\"Keskitumma ihonväri\"] }, \"Medium light skin tone\": { \"v\": [\"Keskivaalea ihonväri\"] }, \"Medium skin tone\": { \"v\": [\"Keskimääräinen ihonväri\"] }, \"Neutral skin color\": { \"v\": [\"Neutraali ihonväri\"] }, \"Objects\": { \"v\": [\"Esineet & asiat\"] }, \"People & Body\": { \"v\": [\"Ihmiset & keho\"] }, \"Pick an emoji\": { \"v\": [\"Valitse emoji\"] }, \"Search emoji\": { \"v\": [\"Etsi emojia\"] }, \"Search results\": { \"v\": [\"Hakutulokset\"] }, \"Selected\": { \"v\": [\"Valittu\"] }, \"Skin tone\": { \"v\": [\"Ihonväri\"] }, \"Smileys & Emotion\": { \"v\": [\"Hymiöt & tunteet\"] }, \"Symbols\": { \"v\": [\"Symbolit\"] }, \"Travel & Places\": { \"v\": [\"Matkustus & kohteet\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Activities\": { \"v\": [\"Activités\"] }, \"Animals & Nature\": { \"v\": [\"Animaux et nature\"] }, \"Custom\": { \"v\": [\"Personnalisé\"] }, \"Dark skin tone\": { \"v\": [\"Teint de peau foncé\"] }, \"Emoji picker\": { \"v\": [\"Sélecteur d'émojis\"] }, \"Flags\": { \"v\": [\"Drapeaux\"] }, \"Food & Drink\": { \"v\": [\"Nourriture et boissons\"] }, \"Frequently used\": { \"v\": [\"Utilisés fréquemment\"] }, \"Light skin tone\": { \"v\": [\"Teint de peau clair\"] }, \"Medium dark skin tone\": { \"v\": [\"Teint de peau moyennement foncé\"] }, \"Medium light skin tone\": { \"v\": [\"Teint de peau moyennement clair\"] }, \"Medium skin tone\": { \"v\": [\"Teint de peau moyen\"] }, \"Neutral skin color\": { \"v\": [\"Teint de peau neutre\"] }, \"Objects\": { \"v\": [\"Objets\"] }, \"People & Body\": { \"v\": [\"Personnes et corps\"] }, \"Pick an emoji\": { \"v\": [\"Choisissez un émoji\"] }, \"Search emoji\": { \"v\": [\"Rechercher un émoji\"] }, \"Search results\": { \"v\": [\"Résultats de recherche\"] }, \"Selected\": { \"v\": [\"sélectionné\"] }, \"Skin tone\": { \"v\": [\"Teint de peau\"] }, \"Smileys & Emotion\": { \"v\": [\"Smileys et émotions\"] }, \"Symbols\": { \"v\": [\"Symboles\"] }, \"Travel & Places\": { \"v\": [\"Voyage et lieux\"] } } }, { \"l\": \"ga\", \"t\": { \"Activities\": { \"v\": [\"Gníomhaíochtaí\"] }, \"Animals & Nature\": { \"v\": [\"Ainmhithe & Dúlra\"] }, \"Custom\": { \"v\": [\"Saincheaptha\"] }, \"Dark skin tone\": { \"v\": [\"Ton craiceann dorcha\"] }, \"Emoji picker\": { \"v\": [\"Roghnóir Emoji\"] }, \"Flags\": { \"v\": [\"Bratacha\"] }, \"Food & Drink\": { \"v\": [\"Bia & Deoch\"] }, \"Frequently used\": { \"v\": [\"Úsáidtear go minic\"] }, \"Light skin tone\": { \"v\": [\"Ton craiceann éadrom\"] }, \"Medium dark skin tone\": { \"v\": [\"Ton craiceann meánach dorcha\"] }, \"Medium light skin tone\": { \"v\": [\"Ton craiceann meánach éadrom\"] }, \"Medium skin tone\": { \"v\": [\"Ton craiceann meánach\"] }, \"Neutral skin color\": { \"v\": [\"Dath craiceann neodrach\"] }, \"Objects\": { \"v\": [\"Réada\"] }, \"People & Body\": { \"v\": [\"Daoine & Corp\"] }, \"Pick an emoji\": { \"v\": [\"Roghnaigh emoji\"] }, \"Search emoji\": { \"v\": [\"Cuardaigh emoji\"] }, \"Search results\": { \"v\": [\"Torthaí cuardaigh\"] }, \"Selected\": { \"v\": [\"Roghnaithe\"] }, \"Skin tone\": { \"v\": [\"Ton craicinn\"] }, \"Smileys & Emotion\": { \"v\": [\"Smileys & Mothúchán\"] }, \"Symbols\": { \"v\": [\"Siombailí\"] }, \"Travel & Places\": { \"v\": [\"Taisteal & Áiteanna\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Activities\": { \"v\": [\"Actividades\"] }, \"Animals & Nature\": { \"v\": [\"Animais e natureza\"] }, \"Custom\": { \"v\": [\"Personalizado\"] }, \"Dark skin tone\": { \"v\": [\"Ton de pel escuro\"] }, \"Emoji picker\": { \"v\": [\"Selector de «emojis»\"] }, \"Flags\": { \"v\": [\"Bandeiras\"] }, \"Food & Drink\": { \"v\": [\"Comida e bebida\"] }, \"Frequently used\": { \"v\": [\"Usado con frecuencia\"] }, \"Light skin tone\": { \"v\": [\"Ton de pel claro\"] }, \"Medium dark skin tone\": { \"v\": [\"Ton de pel medio escuro\"] }, \"Medium light skin tone\": { \"v\": [\"Ton de pel medio claro\"] }, \"Medium skin tone\": { \"v\": [\"Ton de pel medio\"] }, \"Neutral skin color\": { \"v\": [\"Cor de pel neutra\"] }, \"Objects\": { \"v\": [\"Obxectos\"] }, \"People & Body\": { \"v\": [\"Persoas e corpo\"] }, \"Pick an emoji\": { \"v\": [\"Escolla un «emoji»\"] }, \"Search emoji\": { \"v\": [\"Buscar «emoji»\"] }, \"Search results\": { \"v\": [\"Resultados da busca\"] }, \"Selected\": { \"v\": [\"Seleccionado\"] }, \"Skin tone\": { \"v\": [\"Ton de pel\"] }, \"Smileys & Emotion\": { \"v\": [\"Sorrisos e emocións\"] }, \"Symbols\": { \"v\": [\"Símbolos\"] }, \"Travel & Places\": { \"v\": [\"Viaxes e lugares\"] } } }, { \"l\": \"he\", \"t\": { \"Activities\": { \"v\": [\"פעילויות\"] }, \"Animals & Nature\": { \"v\": [\"חיות וטבע\"] }, \"Custom\": { \"v\": [\"בהתאמה אישית\"] }, \"Flags\": { \"v\": [\"דגלים\"] }, \"Food & Drink\": { \"v\": [\"מזון ומשקאות\"] }, \"Frequently used\": { \"v\": [\"בשימוש תדיר\"] }, \"Objects\": { \"v\": [\"חפצים\"] }, \"People & Body\": { \"v\": [\"אנשים וגוף\"] }, \"Pick an emoji\": { \"v\": [\"נא לבחור אמוג׳י\"] }, \"Search emoji\": { \"v\": [\"חיפוש אמוג׳י\"] }, \"Search results\": { \"v\": [\"תוצאות חיפוש\"] }, \"Smileys & Emotion\": { \"v\": [\"חייכנים ורגשונים\"] }, \"Symbols\": { \"v\": [\"סמלים\"] }, \"Travel & Places\": { \"v\": [\"טיולים ומקומות\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Activities\": { \"v\": [\"Aktivnosti\"] }, \"Animals & Nature\": { \"v\": [\"Životinje i priroda\"] }, \"Custom\": { \"v\": [\"Prlagođeno\"] }, \"Dark skin tone\": { \"v\": [\"Tamna nijansa\"] }, \"Emoji picker\": { \"v\": [\"Odabir emojija\"] }, \"Flags\": { \"v\": [\"Zastavice\"] }, \"Food & Drink\": { \"v\": [\"Hrana i piće\"] }, \"Frequently used\": { \"v\": [\"Često korišteno\"] }, \"Light skin tone\": { \"v\": [\"Svjetla nijansa\"] }, \"Medium dark skin tone\": { \"v\": [\"Srednje tamna nijansa\"] }, \"Medium light skin tone\": { \"v\": [\"Srednje svjetla nijansa\"] }, \"Medium skin tone\": { \"v\": [\"Srednja nijansa\"] }, \"Neutral skin color\": { \"v\": [\"Neutralna nijansa\"] }, \"Objects\": { \"v\": [\"Objekti\"] }, \"People & Body\": { \"v\": [\"Ljudi i tijelo\"] }, \"Pick an emoji\": { \"v\": [\"Odaberi emoji\"] }, \"Search emoji\": { \"v\": [\"Traži emoji\"] }, \"Search results\": { \"v\": [\"Rezultati pretraživanja\"] }, \"Selected\": { \"v\": [\"Odabrano\"] }, \"Skin tone\": { \"v\": [\"Nijansa\"] }, \"Smileys & Emotion\": { \"v\": [\"Smajlići i emocije\"] }, \"Symbols\": { \"v\": [\"Simboli\"] }, \"Travel & Places\": { \"v\": [\"Putovanja i mjesta\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Activities\": { \"v\": [\"Tevékenységek\"] }, \"Animals & Nature\": { \"v\": [\"Állatok és természet\"] }, \"Custom\": { \"v\": [\"Egyéni\"] }, \"Dark skin tone\": { \"v\": [\"Sötét bőrtónus\"] }, \"Emoji picker\": { \"v\": [\"Emodzsiválasztó\"] }, \"Flags\": { \"v\": [\"Zászlók\"] }, \"Food & Drink\": { \"v\": [\"Étel és ital\"] }, \"Frequently used\": { \"v\": [\"Gyakran használt\"] }, \"Light skin tone\": { \"v\": [\"Világos bőrtónus\"] }, \"Medium dark skin tone\": { \"v\": [\"Közepesen sötét bőrtónus\"] }, \"Medium light skin tone\": { \"v\": [\"Közepesen világos bőrtónus\"] }, \"Medium skin tone\": { \"v\": [\"Közepes bőrtónus\"] }, \"Neutral skin color\": { \"v\": [\"Semleges bőrszín\"] }, \"Objects\": { \"v\": [\"Tárgyak\"] }, \"People & Body\": { \"v\": [\"Emberek és test\"] }, \"Pick an emoji\": { \"v\": [\"Válasszon egy emodzsit\"] }, \"Search emoji\": { \"v\": [\"Emodzsi keresése\"] }, \"Search results\": { \"v\": [\"Találatok\"] }, \"Selected\": { \"v\": [\"Kijelölve\"] }, \"Skin tone\": { \"v\": [\"Bőrtónus\"] }, \"Smileys & Emotion\": { \"v\": [\"Mosolyok és érzelmek\"] }, \"Symbols\": { \"v\": [\"Szimbólumok\"] }, \"Travel & Places\": { \"v\": [\"Utazás és helyek\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Activities\": { \"v\": [\"Aktivitas\"] }, \"Animals & Nature\": { \"v\": [\"Satwa dan Alam\"] }, \"Custom\": { \"v\": [\"Khusus\"] }, \"Dark skin tone\": { \"v\": [\"Warna kulit gelap\"] }, \"Emoji picker\": { \"v\": [\"Pemilih emoji\"] }, \"Flags\": { \"v\": [\"Tanda\"] }, \"Food & Drink\": { \"v\": [\"Makanan dan Minuman\"] }, \"Frequently used\": { \"v\": [\"Sering digunakan\"] }, \"Light skin tone\": { \"v\": [\"Warna kulit terang\"] }, \"Medium dark skin tone\": { \"v\": [\"Warna kulit sedang gelap\"] }, \"Medium light skin tone\": { \"v\": [\"Warna kulit sedang terang\"] }, \"Medium skin tone\": { \"v\": [\"Warna kulit sedang\"] }, \"Neutral skin color\": { \"v\": [\"Warna kulit netral\"] }, \"Objects\": { \"v\": [\"Objek\"] }, \"People & Body\": { \"v\": [\"Orang & Badan\"] }, \"Pick an emoji\": { \"v\": [\"Pilih emoji\"] }, \"Search emoji\": { \"v\": [\"Cari emoji\"] }, \"Search results\": { \"v\": [\"Hasil pencarian\"] }, \"Selected\": { \"v\": [\"Dipilih\"] }, \"Skin tone\": { \"v\": [\"Warna kulit\"] }, \"Smileys & Emotion\": { \"v\": [\"Senyuman & Perasaan\"] }, \"Symbols\": { \"v\": [\"Simbol\"] }, \"Travel & Places\": { \"v\": [\"Perjalanan & Tempat\"] } } }, { \"l\": \"is\", \"t\": { \"Activities\": { \"v\": [\"Aðgerðir\"] }, \"Animals & Nature\": { \"v\": [\"Dýr og náttúra\"] }, \"Custom\": { \"v\": [\"Sérsniðið\"] }, \"Dark skin tone\": { \"v\": [\"Dökkur húðlitur\"] }, \"Emoji picker\": { \"v\": [\"Emoji-táknmyndaval\"] }, \"Flags\": { \"v\": [\"Flögg\"] }, \"Food & Drink\": { \"v\": [\"Matur og drykkur\"] }, \"Frequently used\": { \"v\": [\"Oftast notað\"] }, \"Light skin tone\": { \"v\": [\"Ljós húðlitur\"] }, \"Medium dark skin tone\": { \"v\": [\"Meðaldökkur húðlitur\"] }, \"Medium light skin tone\": { \"v\": [\"Meðalljós húðlitur\"] }, \"Medium skin tone\": { \"v\": [\"Meðaltónn húðar\"] }, \"Neutral skin color\": { \"v\": [\"Hlutlaus húðlitur\"] }, \"Objects\": { \"v\": [\"Hlutir\"] }, \"People & Body\": { \"v\": [\"Fólk og líkami\"] }, \"Pick an emoji\": { \"v\": [\"Veldu tjáningartákn\"] }, \"Search emoji\": { \"v\": [\"Leita að tjáningartákni\"] }, \"Search results\": { \"v\": [\"Leitarniðurstöður\"] }, \"Selected\": { \"v\": [\"Valið\"] }, \"Skin tone\": { \"v\": [\"Húðlitur\"] }, \"Smileys & Emotion\": { \"v\": [\"Broskallar og tilfinningar\"] }, \"Symbols\": { \"v\": [\"Tákn\"] }, \"Travel & Places\": { \"v\": [\"Staðir og ferðalög\"] } } }, { \"l\": \"it\", \"t\": { \"Activities\": { \"v\": [\"Attività\"] }, \"Animals & Nature\": { \"v\": [\"Animali e natura\"] }, \"Custom\": { \"v\": [\"Personalizzato\"] }, \"Flags\": { \"v\": [\"Bandiere\"] }, \"Food & Drink\": { \"v\": [\"Cibo e bevande\"] }, \"Frequently used\": { \"v\": [\"Usati di frequente\"] }, \"Objects\": { \"v\": [\"Oggetti\"] }, \"People & Body\": { \"v\": [\"Persone e corpo\"] }, \"Pick an emoji\": { \"v\": [\"Scegli un emoji\"] }, \"Search emoji\": { \"v\": [\"Ricerca emoji\"] }, \"Search results\": { \"v\": [\"Risultati di ricerca\"] }, \"Selected\": { \"v\": [\"Selezionato\"] }, \"Smileys & Emotion\": { \"v\": [\"Faccine ed emozioni\"] }, \"Symbols\": { \"v\": [\"Simboli\"] }, \"Travel & Places\": { \"v\": [\"Viaggi e luoghi\"] } } }, { \"l\": \"ja\", \"t\": { \"Activities\": { \"v\": [\"アクティビティ\"] }, \"Animals & Nature\": { \"v\": [\"動物と自然\"] }, \"Custom\": { \"v\": [\"カスタム\"] }, \"Dark skin tone\": { \"v\": [\"暗い肌のトーン\"] }, \"Emoji picker\": { \"v\": [\"絵文字ピッカー\"] }, \"Flags\": { \"v\": [\"国旗\"] }, \"Food & Drink\": { \"v\": [\"食べ物と飲み物\"] }, \"Frequently used\": { \"v\": [\"よく使うもの\"] }, \"Light skin tone\": { \"v\": [\"明るい肌のトーン\"] }, \"Medium dark skin tone\": { \"v\": [\"やや暗い肌のトーン\"] }, \"Medium light skin tone\": { \"v\": [\"やや明るい肌のトーン\"] }, \"Medium skin tone\": { \"v\": [\"中間の肌のトーン\"] }, \"Neutral skin color\": { \"v\": [\"ニュートラルな肌の色\"] }, \"Objects\": { \"v\": [\"物\"] }, \"People & Body\": { \"v\": [\"様々な人と体の部位\"] }, \"Pick an emoji\": { \"v\": [\"絵文字を選択\"] }, \"Search emoji\": { \"v\": [\"絵文字を検索\"] }, \"Search results\": { \"v\": [\"検索結果\"] }, \"Selected\": { \"v\": [\"選択済み\"] }, \"Skin tone\": { \"v\": [\"肌のトーン\"] }, \"Smileys & Emotion\": { \"v\": [\"感情表現\"] }, \"Symbols\": { \"v\": [\"記号\"] }, \"Travel & Places\": { \"v\": [\"旅行と場所\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Activities\": { \"v\": [\"アクティビティ\"] }, \"Animals & Nature\": { \"v\": [\"動物と自然\"] }, \"Custom\": { \"v\": [\"カスタム\"] }, \"Dark skin tone\": { \"v\": [\"暗い肌のトーン\"] }, \"Emoji picker\": { \"v\": [\"絵文字ピッカー\"] }, \"Flags\": { \"v\": [\"国旗\"] }, \"Food & Drink\": { \"v\": [\"食べ物と飲み物\"] }, \"Frequently used\": { \"v\": [\"よく使うもの\"] }, \"Light skin tone\": { \"v\": [\"明るい肌のトーン\"] }, \"Medium dark skin tone\": { \"v\": [\"やや暗い肌のトーン\"] }, \"Medium light skin tone\": { \"v\": [\"やや明るい肌のトーン\"] }, \"Medium skin tone\": { \"v\": [\"中間の肌のトーン\"] }, \"Neutral skin color\": { \"v\": [\"ニュートラルな肌の色\"] }, \"Objects\": { \"v\": [\"物\"] }, \"People & Body\": { \"v\": [\"様々な人と体の部位\"] }, \"Pick an emoji\": { \"v\": [\"絵文字を選択\"] }, \"Search emoji\": { \"v\": [\"絵文字を検索\"] }, \"Search results\": { \"v\": [\"検索結果\"] }, \"Selected\": { \"v\": [\"選択済み\"] }, \"Skin tone\": { \"v\": [\"肌のトーン\"] }, \"Smileys & Emotion\": { \"v\": [\"感情表現\"] }, \"Symbols\": { \"v\": [\"記号\"] }, \"Travel & Places\": { \"v\": [\"旅行と場所\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Activities\": { \"v\": [\"활동\"] }, \"Animals & Nature\": { \"v\": [\"동물 & 자연\"] }, \"Custom\": { \"v\": [\"맞춤 설정\"] }, \"Dark skin tone\": { \"v\": [\"어두운 피부 톤\"] }, \"Emoji picker\": { \"v\": [\"이모지 선택기\"] }, \"Flags\": { \"v\": [\"깃발\"] }, \"Food & Drink\": { \"v\": [\"음식 & 음료\"] }, \"Frequently used\": { \"v\": [\"자주 쓰임\"] }, \"Light skin tone\": { \"v\": [\"밝은 피부 톤\"] }, \"Medium dark skin tone\": { \"v\": [\"약간 어두운 피부 톤\"] }, \"Medium light skin tone\": { \"v\": [\"약간 밝은 피부 톤\"] }, \"Medium skin tone\": { \"v\": [\"중간 피부 톤\"] }, \"Neutral skin color\": { \"v\": [\"중성적 피부 톤\"] }, \"Objects\": { \"v\": [\"물체\"] }, \"People & Body\": { \"v\": [\"사람 & 신체\"] }, \"Pick an emoji\": { \"v\": [\"이모지 선택\"] }, \"Search emoji\": { \"v\": [\"이모지 검색\"] }, \"Search results\": { \"v\": [\"검색 결과\"] }, \"Selected\": { \"v\": [\"선택됨\"] }, \"Skin tone\": { \"v\": [\"피부 톤\"] }, \"Smileys & Emotion\": { \"v\": [\"스마일리 & 이모티콘\"] }, \"Symbols\": { \"v\": [\"기호\"] }, \"Travel & Places\": { \"v\": [\"여행 & 장소\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Activities\": { \"v\": [\"ກິດຈະກຳ\"] }, \"Animals & Nature\": { \"v\": [\"ສັດ ແລະ ທຳມະຊາດ\"] }, \"Custom\": { \"v\": [\"ກຳນົດເອງ\"] }, \"Dark skin tone\": { \"v\": [\"ໂຕນສີຜິວເຂັ້ມ\"] }, \"Emoji picker\": { \"v\": [\"ໂຕເລືອກອີໂມຈິ\"] }, \"Flags\": { \"v\": [\"ທຸງ\"] }, \"Food & Drink\": { \"v\": [\"ອາຫານ ແລະ ເຄື່ອງດື່ມ\"] }, \"Frequently used\": { \"v\": [\"ໃຊ້ງານເລື້ອຍໆ\"] }, \"Light skin tone\": { \"v\": [\"ໂຕນສີຜິວອ່ອນ\"] }, \"Medium dark skin tone\": { \"v\": [\"ໂຕນສີຜິວເຂັ້ມປານກາງ\"] }, \"Medium light skin tone\": { \"v\": [\"ໂຕນສີຜິວອ່ອນປານກາງ\"] }, \"Medium skin tone\": { \"v\": [\"ໂຕນສີຜິວປານກາງ\"] }, \"Neutral skin color\": { \"v\": [\"ສີຜິວເປັນກາງ\"] }, \"Objects\": { \"v\": [\"ວັດຖຸ\"] }, \"People & Body\": { \"v\": [\"ຄົນ ແລະ ຮ່າງກາຍ\"] }, \"Pick an emoji\": { \"v\": [\"ເລືອກອີໂມຈິ\"] }, \"Search emoji\": { \"v\": [\"ຄົ້ນຫາອີໂມຈິ\"] }, \"Search results\": { \"v\": [\"ຜົນການຄົ້ນຫາ\"] }, \"Selected\": { \"v\": [\"ເລືອກແລ້ວ\"] }, \"Skin tone\": { \"v\": [\"ໂຕນສີຜິວ\"] }, \"Smileys & Emotion\": { \"v\": [\"ໜ້າຍິ້ມ ແລະ ອາລົມ\"] }, \"Symbols\": { \"v\": [\"ສັນຍາລັກ\"] }, \"Travel & Places\": { \"v\": [\"ການເດີນທາງ ແລະ ສະຖານທີ່\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Activities\": { \"v\": [\"Veiklos\"] }, \"Animals & Nature\": { \"v\": [\"Gyvūnai ir gamta\"] }, \"Custom\": { \"v\": [\"Tinkinti\"] }, \"Dark skin tone\": { \"v\": [\"Tamsios odos atspalvis\"] }, \"Emoji picker\": { \"v\": [\"Emociukų parinkiklis\"] }, \"Flags\": { \"v\": [\"Vėliavos\"] }, \"Food & Drink\": { \"v\": [\"Maistas ir gėrimai\"] }, \"Frequently used\": { \"v\": [\"Dažniausiai naudoti\"] }, \"Light skin tone\": { \"v\": [\"Šviesus odos tonas\"] }, \"Medium dark skin tone\": { \"v\": [\"Vidutinio tamsumo odos tonas\"] }, \"Medium light skin tone\": { \"v\": [\"Vidutinio šviesumo odos tonas\"] }, \"Medium skin tone\": { \"v\": [\"Vidutinis odos tonas\"] }, \"Neutral skin color\": { \"v\": [\"Neutrali odos spalva\"] }, \"Objects\": { \"v\": [\"Objektai\"] }, \"People & Body\": { \"v\": [\"Žmonės ir kūnas\"] }, \"Pick an emoji\": { \"v\": [\"Pasirinkti emociuką\"] }, \"Search emoji\": { \"v\": [\"Ieškoti emociukų\"] }, \"Search results\": { \"v\": [\"Paieškos rezultatai\"] }, \"Selected\": { \"v\": [\"Pasirinkta\"] }, \"Skin tone\": { \"v\": [\"Odos tonas\"] }, \"Smileys & Emotion\": { \"v\": [\"Šypsenos ir emocijos\"] }, \"Symbols\": { \"v\": [\"Simboliai\"] }, \"Travel & Places\": { \"v\": [\"Kelionės ir vietos\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Activities\": { \"v\": [\"Активности\"] }, \"Animals & Nature\": { \"v\": [\"Животни & Природа\"] }, \"Custom\": { \"v\": [\"Прилагодени\"] }, \"Dark skin tone\": { \"v\": [\"Темна боја на кожа\"] }, \"Emoji picker\": { \"v\": [\"Избор на emoji\"] }, \"Flags\": { \"v\": [\"Знамиња\"] }, \"Food & Drink\": { \"v\": [\"Храна & Пијалоци\"] }, \"Frequently used\": { \"v\": [\"Најчесто користени\"] }, \"Light skin tone\": { \"v\": [\"Светла кожа\"] }, \"Medium dark skin tone\": { \"v\": [\"Средно темна кожа\"] }, \"Medium light skin tone\": { \"v\": [\"Средно светла кожа\"] }, \"Medium skin tone\": { \"v\": [\"Средна кожа\"] }, \"Neutral skin color\": { \"v\": [\"Неутрална боја на кожа\"] }, \"Objects\": { \"v\": [\"Објекти\"] }, \"People & Body\": { \"v\": [\"Луѓе & Тело\"] }, \"Pick an emoji\": { \"v\": [\"Избери емотикон\"] }, \"Search emoji\": { \"v\": [\"Барај emoji\"] }, \"Search results\": { \"v\": [\"Резултати од барувањето\"] }, \"Selected\": { \"v\": [\"Избрано\"] }, \"Skin tone\": { \"v\": [\"Боја на кожа\"] }, \"Smileys & Emotion\": { \"v\": [\"Смешковци & Емотикони\"] }, \"Symbols\": { \"v\": [\"Симболи\"] }, \"Travel & Places\": { \"v\": [\"Патувања & Места\"] } } }, { \"l\": \"mn\", \"t\": { \"Activities\": { \"v\": [\"Үйл ажиллагаа\"] }, \"Animals & Nature\": { \"v\": [\"Амьтан & Байгаль\"] }, \"Custom\": { \"v\": [\"Тусгай\"] }, \"Dark skin tone\": { \"v\": [\"Бараан арьсны өнгө\"] }, \"Emoji picker\": { \"v\": [\"Эможи сонгогч\"] }, \"Flags\": { \"v\": [\"Тугнууд\"] }, \"Food & Drink\": { \"v\": [\"Хоол & Ундаа\"] }, \"Frequently used\": { \"v\": [\"Байнга хэрэглэдэг\"] }, \"Light skin tone\": { \"v\": [\"Цайвар арьсны өнгө\"] }, \"Medium dark skin tone\": { \"v\": [\"Дунд бараан арьсны өнгө\"] }, \"Medium light skin tone\": { \"v\": [\"Дунд цайвар арьсны өнгө\"] }, \"Medium skin tone\": { \"v\": [\"Дунд арьсны өнгө\"] }, \"Neutral skin color\": { \"v\": [\"Саарал арьсны өнгө\"] }, \"Objects\": { \"v\": [\"Объектууд\"] }, \"People & Body\": { \"v\": [\"Хүмүүс & Бие\"] }, \"Pick an emoji\": { \"v\": [\"Эможи сонгох\"] }, \"Search emoji\": { \"v\": [\"Эможи хайх\"] }, \"Search results\": { \"v\": [\"Хайлтын үр дүн\"] }, \"Selected\": { \"v\": [\"Сонгосон\"] }, \"Skin tone\": { \"v\": [\"Арьсны өнгө\"] }, \"Smileys & Emotion\": { \"v\": [\"Инээмсэглэл & Сэтгэл хөдлөл\"] }, \"Symbols\": { \"v\": [\"Тэмдэгтүүд\"] }, \"Travel & Places\": { \"v\": [\"Аялал & Газрууд\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": { \"Activities\": { \"v\": [\"ပြုလုပ်ဆောင်တာများ\"] }, \"Animals & Nature\": { \"v\": [\"တိရစ္ဆာန်များနှင့် သဘာဝ\"] }, \"Custom\": { \"v\": [\"အလိုကျချိန်ညှိမှု\"] }, \"Flags\": { \"v\": [\"အလံများ\"] }, \"Food & Drink\": { \"v\": [\"အစားအသောက်\"] }, \"Frequently used\": { \"v\": [\"မကြာခဏအသုံးပြုသော\"] }, \"Objects\": { \"v\": [\"အရာဝတ္ထုများ\"] }, \"People & Body\": { \"v\": [\"လူပုဂ္ဂိုလ်များနှင့် ခန္ဓာကိုယ်\"] }, \"Pick an emoji\": { \"v\": [\"အီမိုဂျီရွေးရန်\"] }, \"Search results\": { \"v\": [\"ရှာဖွေမှု ရလဒ်များ\"] }, \"Smileys & Emotion\": { \"v\": [\"စမိုင်လီများနှင့် အီမိုရှင်း\"] }, \"Symbols\": { \"v\": [\"သင်္ကေတများ\"] }, \"Travel & Places\": { \"v\": [\"ခရီးသွားလာခြင်းနှင့် နေရာများ\"] } } }, { \"l\": \"nb\", \"t\": { \"Activities\": { \"v\": [\"Aktiviteter\"] }, \"Animals & Nature\": { \"v\": [\"Dyr og natur\"] }, \"Custom\": { \"v\": [\"Tilpasset\"] }, \"Dark skin tone\": { \"v\": [\"Mørk hudtone\"] }, \"Emoji picker\": { \"v\": [\"Emoji-velger\"] }, \"Flags\": { \"v\": [\"Flagg\"] }, \"Food & Drink\": { \"v\": [\"Mat og drikke\"] }, \"Frequently used\": { \"v\": [\"Ofte brukt\"] }, \"Light skin tone\": { \"v\": [\"Lys hudtone\"] }, \"Medium dark skin tone\": { \"v\": [\"Middels mørk hudtone\"] }, \"Medium light skin tone\": { \"v\": [\"Middels lys hudtone\"] }, \"Medium skin tone\": { \"v\": [\"Middels hudtone\"] }, \"Neutral skin color\": { \"v\": [\"Nøytral hudfarge\"] }, \"Objects\": { \"v\": [\"Objekter\"] }, \"People & Body\": { \"v\": [\"Mennesker og kropp\"] }, \"Pick an emoji\": { \"v\": [\"Velg en emoji\"] }, \"Search emoji\": { \"v\": [\"Søk emoji\"] }, \"Search results\": { \"v\": [\"Søkeresultater\"] }, \"Selected\": { \"v\": [\"Valgt\"] }, \"Skin tone\": { \"v\": [\"Hudtone\"] }, \"Smileys & Emotion\": { \"v\": [\"Smilefjes og følelser\"] }, \"Symbols\": { \"v\": [\"Symboler\"] }, \"Travel & Places\": { \"v\": [\"Reise og steder\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Activities\": { \"v\": [\"Activiteiten\"] }, \"Animals & Nature\": { \"v\": [\"Dieren & Natuur\"] }, \"Custom\": { \"v\": [\"Aangepast\"] }, \"Dark skin tone\": { \"v\": [\"Donkere huidskleur\"] }, \"Emoji picker\": { \"v\": [\"Emoji-kiezer\"] }, \"Flags\": { \"v\": [\"Vlaggen\"] }, \"Food & Drink\": { \"v\": [\"Eten & Drinken\"] }, \"Frequently used\": { \"v\": [\"Vaak gebruikt\"] }, \"Light skin tone\": { \"v\": [\"Lichte huidskleur\"] }, \"Medium dark skin tone\": { \"v\": [\"Gemiddeld donkere huidskleur\"] }, \"Medium light skin tone\": { \"v\": [\"Gemiddeld lichte huidskleur\"] }, \"Medium skin tone\": { \"v\": [\"Gemiddelde huidskleur\"] }, \"Neutral skin color\": { \"v\": [\"Neutrale huidskleur\"] }, \"Objects\": { \"v\": [\"Objecten\"] }, \"People & Body\": { \"v\": [\"Mensen & Lichaam\"] }, \"Pick an emoji\": { \"v\": [\"Kies een emoji\"] }, \"Search emoji\": { \"v\": [\"Emoji zoeken\"] }, \"Search results\": { \"v\": [\"Zoekresultaten\"] }, \"Selected\": { \"v\": [\"Geselecteerd\"] }, \"Skin tone\": { \"v\": [\"Huidskleur\"] }, \"Smileys & Emotion\": { \"v\": [\"Smileys & Emotie\"] }, \"Symbols\": { \"v\": [\"Symbolen\"] }, \"Travel & Places\": { \"v\": [\"Reizen & Plaatsen\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Activities\": { \"v\": [\"Aktywność\"] }, \"Animals & Nature\": { \"v\": [\"Zwierzęta i natura\"] }, \"Custom\": { \"v\": [\"Zwyczajne\"] }, \"Dark skin tone\": { \"v\": [\"Ciemna tonacja\"] }, \"Emoji picker\": { \"v\": [\"Wybierz Emoji\"] }, \"Flags\": { \"v\": [\"Flagi\"] }, \"Food & Drink\": { \"v\": [\"Jedzenie i picie\"] }, \"Frequently used\": { \"v\": [\"Często używane\"] }, \"Light skin tone\": { \"v\": [\"Jasny odcień skóry\"] }, \"Medium dark skin tone\": { \"v\": [\"Średnio ciemny odcień skóry\"] }, \"Medium light skin tone\": { \"v\": [\"Średnio jasny odcień skóry\"] }, \"Medium skin tone\": { \"v\": [\"Średni odcień skóry\"] }, \"Neutral skin color\": { \"v\": [\"Neutralny kolor skróry\"] }, \"Objects\": { \"v\": [\"Obiekty\"] }, \"People & Body\": { \"v\": [\"Ludzie i ciało\"] }, \"Pick an emoji\": { \"v\": [\"Wybierz emoji\"] }, \"Search emoji\": { \"v\": [\"Szukaj emoji\"] }, \"Search results\": { \"v\": [\"Wyniki wyszukiwania\"] }, \"Selected\": { \"v\": [\"Wybrane\"] }, \"Skin tone\": { \"v\": [\"Kolor skóry\"] }, \"Smileys & Emotion\": { \"v\": [\"Buźki i emotikony\"] }, \"Symbols\": { \"v\": [\"Symbole\"] }, \"Travel & Places\": { \"v\": [\"Podróże i miejsca\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Activities\": { \"v\": [\"Atividades\"] }, \"Animals & Nature\": { \"v\": [\"Animais & Natureza\"] }, \"Custom\": { \"v\": [\"Personalizados\"] }, \"Dark skin tone\": { \"v\": [\"Tom de pele escuro\"] }, \"Emoji picker\": { \"v\": [\"Seletor de emoji\"] }, \"Flags\": { \"v\": [\"Bandeiras\"] }, \"Food & Drink\": { \"v\": [\"Comida & Bebida\"] }, \"Frequently used\": { \"v\": [\"Mais usados\"] }, \"Light skin tone\": { \"v\": [\"Tom de pele claro\"] }, \"Medium dark skin tone\": { \"v\": [\"Tom de pele meio escuro\"] }, \"Medium light skin tone\": { \"v\": [\"Tom de pele meio claro\"] }, \"Medium skin tone\": { \"v\": [\"Tom de pele médio\"] }, \"Neutral skin color\": { \"v\": [\"Tom de pele neutro\"] }, \"Objects\": { \"v\": [\"Objetos\"] }, \"People & Body\": { \"v\": [\"Pessoas & Corpo\"] }, \"Pick an emoji\": { \"v\": [\"Escolha um emoji\"] }, \"Search emoji\": { \"v\": [\"Pesquisar emoji\"] }, \"Search results\": { \"v\": [\"Resultados da pesquisa\"] }, \"Selected\": { \"v\": [\"Selecionado\"] }, \"Skin tone\": { \"v\": [\"Tom de pele\"] }, \"Smileys & Emotion\": { \"v\": [\"Smileys & Emoções\"] }, \"Symbols\": { \"v\": [\"Símbolos\"] }, \"Travel & Places\": { \"v\": [\"Viagem & Lugares\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Activities\": { \"v\": [\"Atividades\"] }, \"Animals & Nature\": { \"v\": [\"Animais e Natureza\"] }, \"Custom\": { \"v\": [\"Personalizado\"] }, \"Dark skin tone\": { \"v\": [\"Tom de pele escuro\"] }, \"Emoji picker\": { \"v\": [\"seletor de emoji\"] }, \"Flags\": { \"v\": [\"Bandeiras\"] }, \"Food & Drink\": { \"v\": [\"Comida e Bebida\"] }, \"Frequently used\": { \"v\": [\"Mais utilizados\"] }, \"Light skin tone\": { \"v\": [\"Tom de pele claro\"] }, \"Medium dark skin tone\": { \"v\": [\"Tom de pele escuro médio\"] }, \"Medium light skin tone\": { \"v\": [\"Tom de pele claro médio\"] }, \"Medium skin tone\": { \"v\": [\"Tom de pele médio\"] }, \"Neutral skin color\": { \"v\": [\"Cor de pele neutra\"] }, \"Objects\": { \"v\": [\"Objetos\"] }, \"People & Body\": { \"v\": [\"Pessoas e Corpo\"] }, \"Pick an emoji\": { \"v\": [\"Escolha um emoji\"] }, \"Search emoji\": { \"v\": [\"Pesquisar emoji\"] }, \"Search results\": { \"v\": [\"Resultados da pesquisa\"] }, \"Selected\": { \"v\": [\"Selecionado\"] }, \"Skin tone\": { \"v\": [\"Tom de pele\"] }, \"Smileys & Emotion\": { \"v\": [\"Sorrisos e Emoções\"] }, \"Symbols\": { \"v\": [\"Símbolos\"] }, \"Travel & Places\": { \"v\": [\"Viagens e Lugares\"] } } }, { \"l\": \"ro\", \"t\": { \"Activities\": { \"v\": [\"Activități\"] }, \"Animals & Nature\": { \"v\": [\"Animale și natură\"] }, \"Custom\": { \"v\": [\"Personalizat\"] }, \"Dark skin tone\": { \"v\": [\"Ton de piele închis\"] }, \"Emoji picker\": { \"v\": [\"Selector de emoji\"] }, \"Flags\": { \"v\": [\"Steaguri\"] }, \"Food & Drink\": { \"v\": [\"Alimente și băuturi\"] }, \"Frequently used\": { \"v\": [\"Utilizate frecvent\"] }, \"Light skin tone\": { \"v\": [\"Ton de piele deschis\"] }, \"Medium dark skin tone\": { \"v\": [\"Ton de piele mediu-închis\"] }, \"Medium light skin tone\": { \"v\": [\"Ton de piele mediu-deschis\"] }, \"Medium skin tone\": { \"v\": [\"Ton de piele mediu\"] }, \"Neutral skin color\": { \"v\": [\"Culoare neutră a pielii\"] }, \"Objects\": { \"v\": [\"Obiecte\"] }, \"People & Body\": { \"v\": [\"Oameni și corp\"] }, \"Pick an emoji\": { \"v\": [\"Alege un emoji\"] }, \"Search emoji\": { \"v\": [\"Căutare emoji\"] }, \"Search results\": { \"v\": [\"Rezultatele căutării\"] }, \"Selected\": { \"v\": [\"Selectat\"] }, \"Skin tone\": { \"v\": [\"Ton de piele\"] }, \"Smileys & Emotion\": { \"v\": [\"Zâmbete și emoții\"] }, \"Symbols\": { \"v\": [\"Simboluri\"] }, \"Travel & Places\": { \"v\": [\"Călătorii și locuri\"] } } }, { \"l\": \"ru\", \"t\": { \"Activities\": { \"v\": [\"События\"] }, \"Animals & Nature\": { \"v\": [\"Животные и природа\"] }, \"Custom\": { \"v\": [\"Пользовательское\"] }, \"Dark skin tone\": { \"v\": [\"Тёмный оттенок кожи\"] }, \"Emoji picker\": { \"v\": [\"Подборщик эмодзи\"] }, \"Flags\": { \"v\": [\"Флаги\"] }, \"Food & Drink\": { \"v\": [\"Еда и напитки\"] }, \"Frequently used\": { \"v\": [\"Часто используемые\"] }, \"Light skin tone\": { \"v\": [\"Светлый оттенок кожи\"] }, \"Medium dark skin tone\": { \"v\": [\"Средне-тёмный оттенок кожи\"] }, \"Medium light skin tone\": { \"v\": [\"Средне-светлый оттенок кожи\"] }, \"Medium skin tone\": { \"v\": [\"Средний оттенок кожи\"] }, \"Neutral skin color\": { \"v\": [\"Нейтральный оттенок кожи\"] }, \"Objects\": { \"v\": [\"Объекты\"] }, \"People & Body\": { \"v\": [\"Люди и тело\"] }, \"Pick an emoji\": { \"v\": [\"Выберите эмодзи\"] }, \"Search emoji\": { \"v\": [\"Поиск эмодзи\"] }, \"Search results\": { \"v\": [\"Результаты поиска\"] }, \"Selected\": { \"v\": [\"Выбрано\"] }, \"Skin tone\": { \"v\": [\"Оттенок кожи\"] }, \"Smileys & Emotion\": { \"v\": [\"Смайлики и эмоции\"] }, \"Symbols\": { \"v\": [\"Символы\"] }, \"Travel & Places\": { \"v\": [\"Путешествия и места\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Activities\": { \"v\": [\"Aktivity\"] }, \"Animals & Nature\": { \"v\": [\"Zvieratá a príroda\"] }, \"Custom\": { \"v\": [\"Vlastné\"] }, \"Dark skin tone\": { \"v\": [\"Tmavý vzhľad\"] }, \"Emoji picker\": { \"v\": [\"Výber emodži\"] }, \"Flags\": { \"v\": [\"Vlajky\"] }, \"Food & Drink\": { \"v\": [\"Jedlo a nápoje\"] }, \"Frequently used\": { \"v\": [\"Často používané\"] }, \"Light skin tone\": { \"v\": [\"Svetlý vzhľad\"] }, \"Medium dark skin tone\": { \"v\": [\"Stredne tmavý vzhľad\"] }, \"Medium light skin tone\": { \"v\": [\"Stredne svetlý vzhľad\"] }, \"Medium skin tone\": { \"v\": [\"Stredný vzhľad\"] }, \"Neutral skin color\": { \"v\": [\"Neutrálny vzhľad\"] }, \"Objects\": { \"v\": [\"Objekty\"] }, \"People & Body\": { \"v\": [\"Ľudia a telo\"] }, \"Pick an emoji\": { \"v\": [\"Vybrať emodži\"] }, \"Search emoji\": { \"v\": [\"Vyhľadať emoji\"] }, \"Search results\": { \"v\": [\"Výsledky vyhľadávania\"] }, \"Selected\": { \"v\": [\"Vybraný\"] }, \"Skin tone\": { \"v\": [\"Vzhľad\"] }, \"Smileys & Emotion\": { \"v\": [\"Smajlíky a emócie\"] }, \"Symbols\": { \"v\": [\"Symboly\"] }, \"Travel & Places\": { \"v\": [\"Cestovanie a miesta\"] } } }, { \"l\": \"sl\", \"t\": { \"Activities\": { \"v\": [\"Dejavnosti\"] }, \"Animals & Nature\": { \"v\": [\"Živali in Narava\"] }, \"Custom\": { \"v\": [\"Po meri\"] }, \"Flags\": { \"v\": [\"Zastavice\"] }, \"Food & Drink\": { \"v\": [\"Hrana in Pijača\"] }, \"Frequently used\": { \"v\": [\"Pogostost uporabe\"] }, \"Objects\": { \"v\": [\"Predmeti\"] }, \"People & Body\": { \"v\": [\"Ljudje in Telo\"] }, \"Pick an emoji\": { \"v\": [\"Izbor izrazne ikone\"] }, \"Search results\": { \"v\": [\"Zadetki iskanja\"] }, \"Smileys & Emotion\": { \"v\": [\"Izrazne ikone\"] }, \"Symbols\": { \"v\": [\"Simboli\"] }, \"Travel & Places\": { \"v\": [\"Potovanja in Kraji\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Activities\": { \"v\": [\"Активности\"] }, \"Animals & Nature\": { \"v\": [\"Животиње и природа\"] }, \"Custom\": { \"v\": [\"Произвољно\"] }, \"Dark skin tone\": { \"v\": [\"Тамни тен коже\"] }, \"Emoji picker\": { \"v\": [\"Бирач емођија\"] }, \"Flags\": { \"v\": [\"Заставе\"] }, \"Food & Drink\": { \"v\": [\"Храна и пиће\"] }, \"Frequently used\": { \"v\": [\"Често коришћено\"] }, \"Light skin tone\": { \"v\": [\"Светли тен коже\"] }, \"Medium dark skin tone\": { \"v\": [\"Средње тамни тен коже\"] }, \"Medium light skin tone\": { \"v\": [\"Средње светли тен коже\"] }, \"Medium skin tone\": { \"v\": [\"Средњи тен коже\"] }, \"Neutral skin color\": { \"v\": [\"Неутрална боја коже\"] }, \"Objects\": { \"v\": [\"Предмети\"] }, \"People & Body\": { \"v\": [\"Људи и тело\"] }, \"Pick an emoji\": { \"v\": [\"Изаберите емођи\"] }, \"Search emoji\": { \"v\": [\"Претражи емођи\"] }, \"Search results\": { \"v\": [\"Резултати претраге\"] }, \"Selected\": { \"v\": [\"Изабрано\"] }, \"Skin tone\": { \"v\": [\"Тен коже\"] }, \"Smileys & Emotion\": { \"v\": [\"Смајлији и емоције\"] }, \"Symbols\": { \"v\": [\"Симболи\"] }, \"Travel & Places\": { \"v\": [\"Путовање и места\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Activities\": { \"v\": [\"Aktiviteter\"] }, \"Animals & Nature\": { \"v\": [\"Djur och natur\"] }, \"Custom\": { \"v\": [\"Anpassad\"] }, \"Dark skin tone\": { \"v\": [\"Mörk hudton\"] }, \"Emoji picker\": { \"v\": [\"Emojiväljare\"] }, \"Flags\": { \"v\": [\"Flaggor\"] }, \"Food & Drink\": { \"v\": [\"Mat och dryck\"] }, \"Frequently used\": { \"v\": [\"Används ofta\"] }, \"Light skin tone\": { \"v\": [\"Ljus hudton\"] }, \"Medium dark skin tone\": { \"v\": [\"Mellanmörk hudton\"] }, \"Medium light skin tone\": { \"v\": [\"Mellanljus hudton\"] }, \"Medium skin tone\": { \"v\": [\"Medium hudton\"] }, \"Neutral skin color\": { \"v\": [\"Neutral hudfärg\"] }, \"Objects\": { \"v\": [\"Objekt\"] }, \"People & Body\": { \"v\": [\"Människor och kropp\"] }, \"Pick an emoji\": { \"v\": [\"Välj en emoji\"] }, \"Search emoji\": { \"v\": [\"Sök efter emoji\"] }, \"Search results\": { \"v\": [\"Sökresultat\"] }, \"Selected\": { \"v\": [\"Vald\"] }, \"Skin tone\": { \"v\": [\"Hudton\"] }, \"Smileys & Emotion\": { \"v\": [\"Smileys och känslor\"] }, \"Symbols\": { \"v\": [\"Symboler\"] }, \"Travel & Places\": { \"v\": [\"Resor och platser\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Activities\": { \"v\": [\"Etkinlikler\"] }, \"Animals & Nature\": { \"v\": [\"Hayvanlar ve doğa\"] }, \"Custom\": { \"v\": [\"Özel\"] }, \"Dark skin tone\": { \"v\": [\"Koyu deri rengi\"] }, \"Emoji picker\": { \"v\": [\"Emoji seçici\"] }, \"Flags\": { \"v\": [\"Bayraklar\"] }, \"Food & Drink\": { \"v\": [\"Yeme ve içme\"] }, \"Frequently used\": { \"v\": [\"Sık kullanılanlar\"] }, \"Light skin tone\": { \"v\": [\"Açık deri rengi\"] }, \"Medium dark skin tone\": { \"v\": [\"Orta koyu deri rengi\"] }, \"Medium light skin tone\": { \"v\": [\"Orta açık deri rengi\"] }, \"Medium skin tone\": { \"v\": [\"Orta deri rengi\"] }, \"Neutral skin color\": { \"v\": [\"Nötr deri rengi\"] }, \"Objects\": { \"v\": [\"Nesneler\"] }, \"People & Body\": { \"v\": [\"İnsanlar ve beden\"] }, \"Pick an emoji\": { \"v\": [\"Bir emoji seçin\"] }, \"Search emoji\": { \"v\": [\"Emoji ara\"] }, \"Search results\": { \"v\": [\"Arama sonuçları\"] }, \"Selected\": { \"v\": [\"Seçilmiş\"] }, \"Skin tone\": { \"v\": [\"Deri rengi\"] }, \"Smileys & Emotion\": { \"v\": [\"İfadeler ve duygular\"] }, \"Symbols\": { \"v\": [\"Simgeler\"] }, \"Travel & Places\": { \"v\": [\"Gezi ve yerler\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Activities\": { \"v\": [\"Діяльність\"] }, \"Animals & Nature\": { \"v\": [\"Тварини та природа\"] }, \"Custom\": { \"v\": [\"Власне\"] }, \"Dark skin tone\": { \"v\": [\"Смаглявий\"] }, \"Emoji picker\": { \"v\": [\"Вибір емоційки\"] }, \"Flags\": { \"v\": [\"Прапори\"] }, \"Food & Drink\": { \"v\": [\"Їжа та напої\"] }, \"Frequently used\": { \"v\": [\"Найчастіші\"] }, \"Light skin tone\": { \"v\": [\"Світла шкіра\"] }, \"Medium dark skin tone\": { \"v\": [\"Какао\"] }, \"Medium light skin tone\": { \"v\": [\"Лате\"] }, \"Medium skin tone\": { \"v\": [\"Середній колір шкіри\"] }, \"Neutral skin color\": { \"v\": [\"Нейтральний колір шкіри\"] }, \"Objects\": { \"v\": [\"Об'єкти\"] }, \"People & Body\": { \"v\": [\"Люди та жести\"] }, \"Pick an emoji\": { \"v\": [\"Виберіть емоційку\"] }, \"Search emoji\": { \"v\": [\"Шукати емоційки\"] }, \"Search results\": { \"v\": [\"Результати пошуку\"] }, \"Selected\": { \"v\": [\"Вибрано\"] }, \"Skin tone\": { \"v\": [\"Колір шкіри\"] }, \"Smileys & Emotion\": { \"v\": [\"Смайли та емоції\"] }, \"Symbols\": { \"v\": [\"Символи\"] }, \"Travel & Places\": { \"v\": [\"Поїздки та місця\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Activities\": { \"v\": [\"Faolliklar\"] }, \"Animals & Nature\": { \"v\": [\"Hayvonlar va Tabiat\"] }, \"Custom\": { \"v\": [\"Moslashtirilgan\"] }, \"Dark skin tone\": { \"v\": [\"Qora rangdagi qoplama\"] }, \"Emoji picker\": { \"v\": [\"Emoji tanlagich\"] }, \"Flags\": { \"v\": [\"Bayroqlar\"] }, \"Food & Drink\": { \"v\": [\"Oziq-ovqat va ichimliklar\"] }, \"Frequently used\": { \"v\": [\"Tez-tez ishlatiladi\"] }, \"Light skin tone\": { \"v\": [\"Yorug` rangdagi qoplama\"] }, \"Medium dark skin tone\": { \"v\": [\"O`rtacha qorong`u rangdagi qoplama\"] }, \"Medium light skin tone\": { \"v\": [\"O`rtacha yorug`lik rangdagi qoplama\"] }, \"Medium skin tone\": { \"v\": [\"O`rtacha rangdagi qoplama\"] }, \"Neutral skin color\": { \"v\": [\"Neytral rang\"] }, \"Objects\": { \"v\": [\"Obyekt\"] }, \"People & Body\": { \"v\": [\"Odamlar va Tana\"] }, \"Pick an emoji\": { \"v\": [\"Emojini tanlang\"] }, \"Search emoji\": { \"v\": [\"Emoji qidirish\"] }, \"Search results\": { \"v\": [\"Qidiruv natijalari\"] }, \"Selected\": { \"v\": [\"Tanlangan\"] }, \"Skin tone\": { \"v\": [\"Odatiy rangdagi qoplama\"] }, \"Smileys & Emotion\": { \"v\": [\"Smayllar va Hissiyotlar\"] }, \"Symbols\": { \"v\": [\"Belgilar\"] }, \"Travel & Places\": { \"v\": [\"Sayohat va Joylar\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Activities\": { \"v\": [\"活动\"] }, \"Animals & Nature\": { \"v\": [\"动物 & 自然\"] }, \"Custom\": { \"v\": [\"自定义\"] }, \"Dark skin tone\": { \"v\": [\"深色皮肤\"] }, \"Emoji picker\": { \"v\": [\"表情拾取器\"] }, \"Flags\": { \"v\": [\"旗帜\"] }, \"Food & Drink\": { \"v\": [\"食物 & 饮品\"] }, \"Frequently used\": { \"v\": [\"经常使用\"] }, \"Light skin tone\": { \"v\": [\"浅色皮肤\"] }, \"Medium dark skin tone\": { \"v\": [\"中等深色皮肤\"] }, \"Medium light skin tone\": { \"v\": [\"中等浅色皮肤\"] }, \"Medium skin tone\": { \"v\": [\"中等皮肤\"] }, \"Neutral skin color\": { \"v\": [\"中性皮肤颜色\"] }, \"Objects\": { \"v\": [\"物体\"] }, \"People & Body\": { \"v\": [\"人 & 身体\"] }, \"Pick an emoji\": { \"v\": [\"选择一个表情\"] }, \"Search emoji\": { \"v\": [\"搜索表情\"] }, \"Search results\": { \"v\": [\"搜索结果\"] }, \"Selected\": { \"v\": [\"选择\"] }, \"Skin tone\": { \"v\": [\"皮肤\"] }, \"Smileys & Emotion\": { \"v\": [\"笑脸 & 情感\"] }, \"Symbols\": { \"v\": [\"符号\"] }, \"Travel & Places\": { \"v\": [\"旅游 & 地点\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Activities\": { \"v\": [\"活動\"] }, \"Animals & Nature\": { \"v\": [\"動物與自然\"] }, \"Custom\": { \"v\": [\"自定義\"] }, \"Dark skin tone\": { \"v\": [\"深膚色\"] }, \"Emoji picker\": { \"v\": [\"表情符號選擇器\"] }, \"Flags\": { \"v\": [\"旗幟\"] }, \"Food & Drink\": { \"v\": [\"食物與飲料\"] }, \"Frequently used\": { \"v\": [\"經常使用\"] }, \"Light skin tone\": { \"v\": [\"淺膚色\"] }, \"Medium dark skin tone\": { \"v\": [\"中等深膚色\"] }, \"Medium light skin tone\": { \"v\": [\"中等淺膚色\"] }, \"Medium skin tone\": { \"v\": [\"中等膚色\"] }, \"Neutral skin color\": { \"v\": [\"中性色膚色\"] }, \"Objects\": { \"v\": [\"物件\"] }, \"People & Body\": { \"v\": [\"人物\"] }, \"Pick an emoji\": { \"v\": [\"選擇表情符號\"] }, \"Search emoji\": { \"v\": [\"搜尋表情符號\"] }, \"Search results\": { \"v\": [\"搜尋結果\"] }, \"Selected\": { \"v\": [\"已選\"] }, \"Skin tone\": { \"v\": [\"膚色\"] }, \"Smileys & Emotion\": { \"v\": [\"表情\"] }, \"Symbols\": { \"v\": [\"標誌\"] }, \"Travel & Places\": { \"v\": [\"旅遊與景點\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Activities\": { \"v\": [\"活動\"] }, \"Animals & Nature\": { \"v\": [\"動物與自然\"] }, \"Custom\": { \"v\": [\"自定義\"] }, \"Dark skin tone\": { \"v\": [\"深膚色\"] }, \"Emoji picker\": { \"v\": [\"表情符號挑選器\"] }, \"Flags\": { \"v\": [\"旗幟\"] }, \"Food & Drink\": { \"v\": [\"食物與飲料\"] }, \"Frequently used\": { \"v\": [\"最近使用\"] }, \"Light skin tone\": { \"v\": [\"淺膚色\"] }, \"Medium dark skin tone\": { \"v\": [\"中等深膚色\"] }, \"Medium light skin tone\": { \"v\": [\"中等淺膚色\"] }, \"Medium skin tone\": { \"v\": [\"中等膚色\"] }, \"Neutral skin color\": { \"v\": [\"中性膚色\"] }, \"Objects\": { \"v\": [\"物件\"] }, \"People & Body\": { \"v\": [\"人物\"] }, \"Pick an emoji\": { \"v\": [\"選擇表情符號\"] }, \"Search emoji\": { \"v\": [\"搜尋表情符號\"] }, \"Search results\": { \"v\": [\"搜尋結果\"] }, \"Selected\": { \"v\": [\"已選取\"] }, \"Skin tone\": { \"v\": [\"膚色\"] }, \"Smileys & Emotion\": { \"v\": [\"表情\"] }, \"Symbols\": { \"v\": [\"標誌\"] }, \"Travel & Places\": { \"v\": [\"旅遊與景點\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t6 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Add to a project\": { \"v\": [\"أضف إلى مشروع\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"ربط عناصر بمشروع لتسهيل العثور عليها\"] }, \"Failed to add the item to the project\": { \"v\": [\"تعذر ربط عنصر بمشروع\"] }, \"Failed to create a project\": { \"v\": [\"تعذر إنشاء مشروع\"] }, \"Failed to rename the project\": { \"v\": [\"تعذّر تغيير اسم المشروع\"] }, \"Type to search for existing projects\": { \"v\": [\"أكتُب للبحث في المشاريع الموجودة\"] } } }, { \"l\": \"ast\", \"t\": {} }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Add to a project\": { \"v\": [\"Přidat do projektu\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Připojte položky k projektu, čímž budou snáze dohledatelné\"] }, \"Failed to add the item to the project\": { \"v\": [\"Položku se nepodařilo přidat do projektu\"] }, \"Failed to create a project\": { \"v\": [\"Projekt se nepodařilo vytvořit\"] }, \"Failed to rename the project\": { \"v\": [\"Projekt se nepodařilo přejmenovat\"] }, \"Type to search for existing projects\": { \"v\": [\"Psaním vyhledávejte existující projekty\"] } } }, { \"l\": \"cs-CZ\", \"t\": {} }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Add to a project\": { \"v\": [\"Tilføj til et projekt\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Knyt elementer til et projekt, så de er nemmere at finde\"] }, \"Failed to add the item to the project\": { \"v\": [\"Elementet kunne ikke føjes til projektet\"] }, \"Failed to create a project\": { \"v\": [\"Projektet kunne ikke oprettes\"] }, \"Failed to rename the project\": { \"v\": [\"Projektet kunne ikke omdøbes\"] }, \"Type to search for existing projects\": { \"v\": [\"Skriv for at søge efter eksisterende projekter\"] } } }, { \"l\": \"de\", \"t\": { \"Add to a project\": { \"v\": [\"Einem Projekt hinzufügen\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Verbinde Elemente mit einem Projekt, um sie leichter zu finden\"] }, \"Failed to add the item to the project\": { \"v\": [\"Das Element konnte nicht zum Projekt hinzugefügt werden\"] }, \"Failed to create a project\": { \"v\": [\"Projekt konnte nicht erstellt werden\"] }, \"Failed to rename the project\": { \"v\": [\"Das Projekt konnte nicht umbenannt werden\"] }, \"Type to search for existing projects\": { \"v\": [\"Tippen, um nach vorhandenen Projekten zu suchen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Add to a project\": { \"v\": [\"Einem Projekt hinzufügen\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Verbinden Sie Elemente mit einem Projekt, um sie leichter zu finden\"] }, \"Failed to add the item to the project\": { \"v\": [\"Das Element konnte nicht zum Projekt hinzugefügt werden\"] }, \"Failed to create a project\": { \"v\": [\"Projekt konnte nicht erstellt werden\"] }, \"Failed to rename the project\": { \"v\": [\"Das Projekt konnte nicht umbenannt werden\"] }, \"Type to search for existing projects\": { \"v\": [\"Tippen, um nach vorhandenen Projekten zu suchen\"] } } }, { \"l\": \"el\", \"t\": { \"Add to a project\": { \"v\": [\"Προσθήκη σε ένα έργο\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Συνδέστε αντικείμενα σε ένα έργο για να τα βρίσκετε πιο εύκολα\"] }, \"Failed to add the item to the project\": { \"v\": [\"Αποτυχία προσθήκης του αντικειμένου στο έργο\"] }, \"Failed to create a project\": { \"v\": [\"Αποτυχία δημιουργίας έργου\"] }, \"Failed to rename the project\": { \"v\": [\"Αποτυχία μετονομασίας του έργου\"] }, \"Type to search for existing projects\": { \"v\": [\"Πληκτρολογήστε για αναζήτηση υπαρχόντων έργων\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Add to a project\": { \"v\": [\"Add to a project\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Connect items to a project to make them easier to find\"] }, \"Failed to add the item to the project\": { \"v\": [\"Failed to add the item to the project\"] }, \"Failed to create a project\": { \"v\": [\"Failed to create a project\"] }, \"Failed to rename the project\": { \"v\": [\"Failed to rename the project\"] }, \"Type to search for existing projects\": { \"v\": [\"Type to search for existing projects\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": {} }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Add to a project\": { \"v\": [\"Agregar a un proyecto\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Conecte items a un proyecto para hacerlos más fáciles de encontrar\"] }, \"Failed to add the item to the project\": { \"v\": [\"No se pudo agregar el elemento al proyecto\"] }, \"Failed to create a project\": { \"v\": [\"No se pudo crear un proyecto\"] }, \"Failed to rename the project\": { \"v\": [\"No se pudo renombrar el proyecto\"] }, \"Type to search for existing projects\": { \"v\": [\"Escriba para buscar proyectos existentes\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": {} }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Add to a project\": { \"v\": [\"Agregar a un proyecto\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Conecte elementos a un proyecto para hacerlos más fáciles de encontrar\"] }, \"Failed to add the item to the project\": { \"v\": [\"No se pudo agregar el elemento al proyecto\"] }, \"Failed to create a project\": { \"v\": [\"No se pudo crear el proyecto\"] }, \"Failed to rename the project\": { \"v\": [\"No se pudo renombrar el proyecto\"] }, \"Type to search for existing projects\": { \"v\": [\"Escriba para buscar proyectos existentes\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Add to a project\": { \"v\": [\"Lisa projekti\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Selleks, et objekte oleks lihtsam leida, seo nad projektiga\"] }, \"Failed to add the item to the project\": { \"v\": [\"Objekti lisamine projekti ei õnnestunud\"] }, \"Failed to create a project\": { \"v\": [\"Projekti loomine ei õnnestunud\"] }, \"Failed to rename the project\": { \"v\": [\"Projekti nime muutmine ei õnnestunud\"] }, \"Type to search for existing projects\": { \"v\": [\"Olemasolevate projektide otsimiseks kirjuta\"] } } }, { \"l\": \"eu\", \"t\": {} }, { \"l\": \"fa\", \"t\": { \"Add to a project\": { \"v\": [\"افزودن به پروژه\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"برای پیدا کردن راحت‌تر، مواردی را به پروژه متصل کنید\"] }, \"Failed to add the item to the project\": { \"v\": [\"موارد به پروژه اضافه نشد\"] }, \"Failed to create a project\": { \"v\": [\"ایجاد پروژه نامؤفق بود\"] }, \"Failed to rename the project\": { \"v\": [\"تغییر نام پروژه انجام نشد\"] }, \"Type to search for existing projects\": { \"v\": [\"برای جستجوی پروژه‌های موجود تایپ کنید\"] } } }, { \"l\": \"fi\", \"t\": { \"Add to a project\": { \"v\": [\"Lisää projektiin\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Yhdistä kohteet projektiin, jotta ne olisivat helpompia löytää\"] }, \"Failed to add the item to the project\": { \"v\": [\"Kohteiden lisääminen projektiin epäonnistui\"] }, \"Failed to create a project\": { \"v\": [\"Projektin luominen epäonnistui\"] }, \"Failed to rename the project\": { \"v\": [\"Projektin nimeäminen epäonnistui\"] }, \"Type to search for existing projects\": { \"v\": [\"Kirjoita etsiäksesi olemassaolevia projekteja\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Add to a project\": { \"v\": [\"Ajouter à un projet\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Connectez des éléments à un projet pour les retrouver plus facilement\"] }, \"Failed to add the item to the project\": { \"v\": [\"Impossible d'ajouter l'élément au projet\"] }, \"Failed to create a project\": { \"v\": [\"Impossible de créer un projet\"] }, \"Failed to rename the project\": { \"v\": [\"Impossible de renommer le projet\"] }, \"Type to search for existing projects\": { \"v\": [\"Tapez pour rechercher des projets existants\"] } } }, { \"l\": \"ga\", \"t\": { \"Add to a project\": { \"v\": [\"Cuir le tionscadal\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Ceangail míreanna le tionscadal chun iad a dhéanamh níos éasca iad a aimsiú\"] }, \"Failed to add the item to the project\": { \"v\": [\"Theip ar an mír a chur leis an tionscadal\"] }, \"Failed to create a project\": { \"v\": [\"Theip ar thionscadal a chruthú\"] }, \"Failed to rename the project\": { \"v\": [\"Theip ar an tionscadal a athainmniú\"] }, \"Type to search for existing projects\": { \"v\": [\"Clóscríobh chun tionscadail atá ann cheana a chuardach\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Add to a project\": { \"v\": [\"Engadir a un proxecto\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Conectar elementos a un proxecto para facelos máis doados de atopar\"] }, \"Failed to add the item to the project\": { \"v\": [\"Produciuse un fallo ao engadir o elemento ao proxecto\"] }, \"Failed to create a project\": { \"v\": [\"Produciuse un fallo ao crear un proxecto\"] }, \"Failed to rename the project\": { \"v\": [\"Produciuse un fallo ao cambiarlle o nome ao proxecto\"] }, \"Type to search for existing projects\": { \"v\": [\"Escriba para buscar proxectos existentes\"] } } }, { \"l\": \"he\", \"t\": {} }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Add to a project\": { \"v\": [\"Dodaj u projekt\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Povežite stavke s projektom kako biste ih lakše pronašli\"] }, \"Failed to add the item to the project\": { \"v\": [\"Neuspjelo dodavanje stavke u projekt\"] }, \"Failed to create a project\": { \"v\": [\"Neuspjelo stvaranje projekta\"] }, \"Failed to rename the project\": { \"v\": [\"Neuspjelo preimenovanje projekta\"] }, \"Type to search for existing projects\": { \"v\": [\"Upišite za pretraživanje postojećih projekata\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Add to a project\": { \"v\": [\"Hozzáadás egy projekthez\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Kapcsoljon elemeket egy projekthez, hogy könnyebben megtalálhatók legyenek\"] }, \"Failed to add the item to the project\": { \"v\": [\"Nem sikerült az elem projekthez adása\"] }, \"Failed to create a project\": { \"v\": [\"Nem sikerült a projekt létrehozása\"] }, \"Failed to rename the project\": { \"v\": [\"Nem sikerült a projekt átnevezése\"] }, \"Type to search for existing projects\": { \"v\": [\"Gépeljen a meglévő projektek kereséséhez\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Add to a project\": { \"v\": [\"Tambahkan ke proyek\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Hubungkan item ke proyek agar lebih mudah ditemukan\"] }, \"Failed to add the item to the project\": { \"v\": [\"Gagal menambahkan item ke proyek\"] }, \"Failed to create a project\": { \"v\": [\"Gagal membuat proyek\"] }, \"Failed to rename the project\": { \"v\": [\"Gagal mengganti nama proyek\"] }, \"Type to search for existing projects\": { \"v\": [\"Ketik untuk mencari proyek yang sudah ada\"] } } }, { \"l\": \"is\", \"t\": { \"Add to a project\": { \"v\": [\"Bæta við verkefni\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Tengdu atriði við verkefni til að gera einfaldara að finna þau\"] }, \"Failed to add the item to the project\": { \"v\": [\"Mistókst að bæta atriðinu í verkefnið\"] }, \"Failed to create a project\": { \"v\": [\"Mistókst að útbúa verkefni\"] }, \"Failed to rename the project\": { \"v\": [\"Mistókst að endurnefna verkefnið\"] }, \"Type to search for existing projects\": { \"v\": [\"Skrifaðu hér til að leita að fyrirliggjandi verkefnum\"] } } }, { \"l\": \"it\", \"t\": {} }, { \"l\": \"ja\", \"t\": { \"Add to a project\": { \"v\": [\"プロジェクトに追加する\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"項目をプロジェクトに接続して検索しやすくする\"] }, \"Failed to add the item to the project\": { \"v\": [\"プロジェクトへのアイテムの追加に失敗しました\"] }, \"Failed to create a project\": { \"v\": [\"プロジェクトの作成に失敗しました\"] }, \"Failed to rename the project\": { \"v\": [\"プロジェクトの名前変更に失敗しました\"] }, \"Type to search for existing projects\": { \"v\": [\"既存のプロジェクトを検索するために入力します\"] } } }, { \"l\": \"ja-JP\", \"t\": {} }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Add to a project\": { \"v\": [\"프로젝트에 추가\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"항목을 더 쉽게 찾을 수 있도록 프로젝트에 연결하세요.\"] }, \"Failed to add the item to the project\": { \"v\": [\"항목을 프로젝트에 추가하는 데 실패함\"] }, \"Failed to create a project\": { \"v\": [\"프로젝트를 만드는 데 실패함\"] }, \"Failed to rename the project\": { \"v\": [\"프로젝트의 이름을 바꾸는 데 실패함\"] }, \"Type to search for existing projects\": { \"v\": [\"입력하여 프로젝트를 검색\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Add to a project\": { \"v\": [\"ເພີ່ມໃສ່ໂຄງການ\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"ເຊື່ອມຕໍ່ລາຍການຕ່າງໆໃສ່ໂຄງການ ເພື່ອເຮັດໃຫ້ຊອກຫາງ່າຍຂຶ້ນ\"] }, \"Failed to add the item to the project\": { \"v\": [\"ບໍ່ສາມາດເພີ່ມລາຍການໃສ່ໂຄງການໄດ້\"] }, \"Failed to create a project\": { \"v\": [\"ບໍ່ສາມາດສ້າງໂຄງການໄດ້\"] }, \"Failed to rename the project\": { \"v\": [\"ບໍ່ສາມາດປ່ຽນຊື່ໂຄງການໄດ້\"] }, \"Type to search for existing projects\": { \"v\": [\"ພິມເພື່ອຄົ້ນຫາໂຄງການທີ່ມີຢູ່\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Add to a project\": { \"v\": [\"Pridėti prie projekto\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Priskirkite elementus prie projekto, kad juos būtų lengviau rasti\"] }, \"Failed to add the item to the project\": { \"v\": [\"Nepavyko pridėti elemento prie projekto\"] }, \"Failed to create a project\": { \"v\": [\"Nepavyko sukurti projekto\"] }, \"Failed to rename the project\": { \"v\": [\"Nepavyko pervadinti projekto\"] }, \"Type to search for existing projects\": { \"v\": [\"Įveskite tekstą, kad surastumėte esamus projektus\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Add to a project\": { \"v\": [\"Додај во проект\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Поврзете ги елементите со проект за да биде полесно да се најдат\"] }, \"Failed to add the item to the project\": { \"v\": [\"Неуспешно додавање на елементот во проектот\"] }, \"Failed to create a project\": { \"v\": [\"Неуспешно креирање на проект\"] }, \"Failed to rename the project\": { \"v\": [\"Неуспешно преименување на проектот\"] }, \"Type to search for existing projects\": { \"v\": [\"Пишувај за пребарување постоечки проекти\"] } } }, { \"l\": \"mn\", \"t\": { \"Add to a project\": { \"v\": [\"Төсөлд нэмэх\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Хялбар олохын тулд зүйлсийг төсөлтэй холбоно уу\"] }, \"Failed to add the item to the project\": { \"v\": [\"Зүйлийг төсөлд нэмж чадсангүй\"] }, \"Failed to create a project\": { \"v\": [\"Төсөл үүсгэж чадсангүй\"] }, \"Failed to rename the project\": { \"v\": [\"Төслийн нэрийг солиж чадсангүй\"] }, \"Type to search for existing projects\": { \"v\": [\"Одоо байгаа төслүүдийг хайхын тулд бичнэ үү\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Add to a project\": { \"v\": [\"Legge til i et prosjekt\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Koble elementer til et prosjekt for å gjøre det enklere å finne dem\"] }, \"Failed to add the item to the project\": { \"v\": [\"Kan ikke legge til elementet i prosjektet\"] }, \"Failed to create a project\": { \"v\": [\"Kan ikke opprette et prosjekt\"] }, \"Failed to rename the project\": { \"v\": [\"Kunne ikke gi prosjektet nytt navn\"] }, \"Type to search for existing projects\": { \"v\": [\"Skriv for å søke for eksisterende prosjekter\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Add to a project\": { \"v\": [\"Toevoegen aan een project\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Items aan een project koppelen om ze eenvoudiger te vinden\"] }, \"Failed to add the item to the project\": { \"v\": [\"Toevoegen van item aan project mislukt\"] }, \"Failed to create a project\": { \"v\": [\"Project aanmaken mislukt\"] }, \"Failed to rename the project\": { \"v\": [\"Project hernoemen mislukt\"] }, \"Type to search for existing projects\": { \"v\": [\"Typ om te zoeken naar bestaande projecten\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Add to a project\": { \"v\": [\"Dodaj do projektu\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Połącz elementy z projektem, aby ułatwić ich znalezienie\"] }, \"Failed to add the item to the project\": { \"v\": [\"Nie udało się dodać elementu do projektu\"] }, \"Failed to create a project\": { \"v\": [\"Nie udało się utworzyć projektu\"] }, \"Failed to rename the project\": { \"v\": [\"Nie udało się zmienić nazwy projektu\"] }, \"Type to search for existing projects\": { \"v\": [\"Wpisz, aby wyszukać istniejące projekty\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Add to a project\": { \"v\": [\"Adicionar a um projeto\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Conectar itens a um projeto para encontrá-los mais facilmente\"] }, \"Failed to add the item to the project\": { \"v\": [\"Falha ao adicionar itens ao projeto\"] }, \"Failed to create a project\": { \"v\": [\"Falha ao criar um projeto\"] }, \"Failed to rename the project\": { \"v\": [\"Falha ao renomear o projeto\"] }, \"Type to search for existing projects\": { \"v\": [\"Digite para pesquisar projetos existentes\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Add to a project\": { \"v\": [\"Adicionar a um projeto\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Ligar itens a um projeto para serem mais facilmente encontrados\"] }, \"Failed to add the item to the project\": { \"v\": [\"Não foi possível adicionar item ao projeto\"] }, \"Failed to create a project\": { \"v\": [\"Não foi possível criar um projeto\"] }, \"Failed to rename the project\": { \"v\": [\"Não foi possível alterar o nome do projeto\"] }, \"Type to search for existing projects\": { \"v\": [\"Digite para procurar projetos existentes\"] } } }, { \"l\": \"ro\", \"t\": { \"Add to a project\": { \"v\": [\"Adaugă la un proiect\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Conectează elemente la un proiect pentru a le găsi mai ușor\"] }, \"Failed to add the item to the project\": { \"v\": [\"Elementul nu a putut fi adăugat la proiect\"] }, \"Failed to create a project\": { \"v\": [\"Crearea proiectului a eșuat\"] }, \"Failed to rename the project\": { \"v\": [\"Redenumirea proiectului a eșuat\"] }, \"Type to search for existing projects\": { \"v\": [\"Tastează pentru a căuta proiecte existente\"] } } }, { \"l\": \"ru\", \"t\": { \"Add to a project\": { \"v\": [\"Добавить в проект\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Связывайте элементы с проектом, чтобы их было легче найти\"] }, \"Failed to add the item to the project\": { \"v\": [\"Не удалось добавить элемент в проект\"] }, \"Failed to create a project\": { \"v\": [\"Не удалось создать проект\"] }, \"Failed to rename the project\": { \"v\": [\"Не удалось переименовать проект\"] }, \"Type to search for existing projects\": { \"v\": [\"Введите название проекта для поиска\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Add to a project\": { \"v\": [\"Pridať do projektu\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Pridať položky do projektu pre jednoduchšie vyhľadávanie\"] }, \"Failed to add the item to the project\": { \"v\": [\"Nepodarilo sa pridať položku do projektu\"] }, \"Failed to create a project\": { \"v\": [\"Nepodarilo sa vytvoriť projekt\"] }, \"Failed to rename the project\": { \"v\": [\"Nepodarilo sa premenovať projekt\"] }, \"Type to search for existing projects\": { \"v\": [\"Začnite písať pre vyhľadávanie v existujúcich projektoch\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Add to a project\": { \"v\": [\"Додај у пројекат\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Повезује ставке у пројекат како би се лакше пронашле\"] }, \"Failed to add the item to the project\": { \"v\": [\"Није успело додавање ставке у пројекат\"] }, \"Failed to create a project\": { \"v\": [\"Није успело креирање пројекта\"] }, \"Failed to rename the project\": { \"v\": [\"Није успела промена имена пројекта\"] }, \"Type to search for existing projects\": { \"v\": [\"Куцајте да претражите постојеће пројекте\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Add to a project\": { \"v\": [\"Lägg till i ett projekt\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Koppla objekt till ett projekt så blir de lättare att hitta\"] }, \"Failed to add the item to the project\": { \"v\": [\"Det gick inte att lägga till objektet i projektet\"] }, \"Failed to create a project\": { \"v\": [\"Det gick inte att skapa ett projekt\"] }, \"Failed to rename the project\": { \"v\": [\"Det gick inte att byta namn på projektet\"] }, \"Type to search for existing projects\": { \"v\": [\"Skriv för att söka efter befintliga projekt\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Add to a project\": { \"v\": [\"Bir projeye ekle\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Ögeleri daha kolay bulmak için bir proje ile ilişkilendirin\"] }, \"Failed to add the item to the project\": { \"v\": [\"Öge projeye eklenemedi\"] }, \"Failed to create a project\": { \"v\": [\"Bir proje oluşturulamadı\"] }, \"Failed to rename the project\": { \"v\": [\"Proje yeniden adlandırılamadı\"] }, \"Type to search for existing projects\": { \"v\": [\"Var olan projeleri aramak için yazmaya başlayın\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Add to a project\": { \"v\": [\"Додати до проєкту\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Приєднайте ресурси до проєкту для швидшого пошуку\"] }, \"Failed to add the item to the project\": { \"v\": [\"Не вдалося приєднати ресурс до проєкту\"] }, \"Failed to create a project\": { \"v\": [\"Не вдалося створити проєкт\"] }, \"Failed to rename the project\": { \"v\": [\"Не вдалося перейменувати проєкт\"] }, \"Type to search for existing projects\": { \"v\": [\"Почніть вводити, щоб знайти проєкт\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Add to a project\": { \"v\": [\"Loyihaga qo'shish\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"Elementlarni topishni osonlashtirish uchun ularni loyihaga ulang\"] }, \"Failed to add the item to the project\": { \"v\": [\"Ob'ektni loyihaga qo'shib bo'lmadi\"] }, \"Failed to create a project\": { \"v\": [\"Loyiha yaratib bo‘lmadi\"] }, \"Failed to rename the project\": { \"v\": [\"Loyiha nomini o‘zgartirib bo‘lmadi\"] }, \"Type to search for existing projects\": { \"v\": [\"Mavjud loyihalarni qidirish uchun kiriting\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Add to a project\": { \"v\": [\"添加至一个项目\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"将条目连接至一个项目以易于查找\"] }, \"Failed to add the item to the project\": { \"v\": [\"添加条目至项目失败\"] }, \"Failed to create a project\": { \"v\": [\"创建项目失败\"] }, \"Failed to rename the project\": { \"v\": [\"重命名项目失败\"] }, \"Type to search for existing projects\": { \"v\": [\"输入以搜索现存项目\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Add to a project\": { \"v\": [\"添加到方案中\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"將項目連接到方案中,以便更容易找到。\"] }, \"Failed to add the item to the project\": { \"v\": [\"無法將項目添加到方案中\"] }, \"Failed to create a project\": { \"v\": [\"無法創建方案\"] }, \"Failed to rename the project\": { \"v\": [\"無法重命名方案\"] }, \"Type to search for existing projects\": { \"v\": [\"輸入以搜索現有方案\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Add to a project\": { \"v\": [\"新增至專案中\"] }, \"Connect items to a project to make them easier to find\": { \"v\": [\"將項目連結至專案中以方便尋找\"] }, \"Failed to add the item to the project\": { \"v\": [\"新增項目至專案失敗\"] }, \"Failed to create a project\": { \"v\": [\"建立專案失敗\"] }, \"Failed to rename the project\": { \"v\": [\"重新命名專案失敗\"] }, \"Type to search for existing projects\": { \"v\": [\"輸入以搜尋既有專案\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t7 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": {} }, { \"l\": \"ast\", \"t\": {} }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Delete\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Esc\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Mezerník\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"cs-CZ\", \"t\": {} }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Delete\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Esc\"] }, \"Shift\": { \"v\": [\"Skift\"] }, \"Space\": { \"v\": [\"Mellemrum\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"de\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Strg\"] }, \"Delete\": { \"v\": [\"Entf\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Esc\"] }, \"Shift\": { \"v\": [\"Umschalt\"] }, \"Space\": { \"v\": [\"Leertaste\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Strg\"] }, \"Delete\": { \"v\": [\"Entf\"] }, \"Enter\": { \"v\": [\"Eingabe\"] }, \"Escape\": { \"v\": [\"Esc\"] }, \"Shift\": { \"v\": [\"Umschalt\"] }, \"Space\": { \"v\": [\"Leertaste\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"el\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Delete\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Space\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Delete\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Space\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": {} }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": {} }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": {} }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": {} }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Kustutusklahv\"] }, \"Enter\": { \"v\": [\"Sisestusklahv\"] }, \"Escape\": { \"v\": [\"Esc-klahv\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Tühikuklahv\"] }, \"Tab\": { \"v\": [\"Tabulaator\"] } } }, { \"l\": \"eu\", \"t\": {} }, { \"l\": \"fa\", \"t\": {} }, { \"l\": \"fi\", \"t\": {} }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Suppr\"] }, \"Enter\": { \"v\": [\"Entrée\"] }, \"Escape\": { \"v\": [\"Échap\"] }, \"Shift\": { \"v\": [\"Maj\"] }, \"Space\": { \"v\": [\"Espace\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"ga\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Scrios\"] }, \"Enter\": { \"v\": [\"Iontráil\"] }, \"Escape\": { \"v\": [\"Éalú\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Spás\"] }, \"Tab\": { \"v\": [\"Táb\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Eliminar\"] }, \"Enter\": { \"v\": [\"Intro\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Maiús.\"] }, \"Space\": { \"v\": [\"Espazo\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"he\", \"t\": {} }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Obriši\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Space\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Törlés\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Szóköz\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Hapus\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Spasi\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"is\", \"t\": {} }, { \"l\": \"it\", \"t\": {} }, { \"l\": \"ja\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Delete\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Space\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"ja-JP\", \"t\": {} }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Delete\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Space\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"ລຶບ\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Space\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Ištrinti\"] }, \"Enter\": { \"v\": [\"Įvesti\"] }, \"Escape\": { \"v\": [\"Išeiti\"] }, \"Shift\": { \"v\": ['\"Shift\"'] }, \"Space\": { \"v\": ['\"Space\"'] }, \"Tab\": { \"v\": ['\"Tab\"'] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Избриши\"] }, \"Enter\": { \"v\": [\"Ентер\"] }, \"Escape\": { \"v\": [\"Esc\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Празно место\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"mn\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Устгах\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Space\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": {} }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Delete\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Space\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": {} }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Excluir\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Barra de espaço\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"pt-PT\", \"t\": {} }, { \"l\": \"ro\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Delete\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Spațiu\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"ru\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Delete\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Пробел\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": {} }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Обриши\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Space\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Delete\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Mellanslag\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Delete\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Space\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": {} }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"O'chirish\"] }, \"Enter\": { \"v\": [\"Kirish\"] }, \"Escape\": { \"v\": [\"Orqaga\"] }, \"Shift\": { \"v\": [\"Yuqorigi\"] }, \"Space\": { \"v\": [\"Bo'shliq\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"zh-CN\", \"t\": {} }, { \"l\": \"zh-HK\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Delete\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Escape\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"Space\"] }, \"Tab\": { \"v\": [\"Tab\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Alt\": { \"v\": [\"Alt\"] }, \"Ctrl\": { \"v\": [\"Ctrl\"] }, \"Delete\": { \"v\": [\"Delete\"] }, \"Enter\": { \"v\": [\"Enter\"] }, \"Escape\": { \"v\": [\"Esc\"] }, \"Shift\": { \"v\": [\"Shift\"] }, \"Space\": { \"v\": [\"空白鍵\"] }, \"Tab\": { \"v\": [\"Tab鍵\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t8 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Any link\": { \"v\": [\"أيَّ رابط\"] } } }, { \"l\": \"ast\", \"t\": { \"Any link\": { \"v\": [\"Cualesquier enllaz\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Any link\": { \"v\": [\"Jakýkoli odkaz\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Any link\": { \"v\": [\"Jakýkoli odkaz\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Any link\": { \"v\": [\"Ethvert link\"] } } }, { \"l\": \"de\", \"t\": { \"Any link\": { \"v\": [\"Irgendein Link\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Any link\": { \"v\": [\"Irgendein Link\"] } } }, { \"l\": \"el\", \"t\": { \"Any link\": { \"v\": [\"Οποιοσδήποτε σύνδεσμος\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Any link\": { \"v\": [\"Any link\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Any link\": { \"v\": [\"Cualquier enlace\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Any link\": { \"v\": [\"Cualquier enlace\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Any link\": { \"v\": [\"Cualquier enlace\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Any link\": { \"v\": [\"Cualquier enlace\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Any link\": { \"v\": [\"Mistahes link\"] } } }, { \"l\": \"eu\", \"t\": { \"Any link\": { \"v\": [\"Edozein esteka\"] } } }, { \"l\": \"fa\", \"t\": { \"Any link\": { \"v\": [\"هر پیوندی\"] } } }, { \"l\": \"fi\", \"t\": { \"Any link\": { \"v\": [\"Mikä tahansa linkki\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Any link\": { \"v\": [\"N'importe quel lien\"] } } }, { \"l\": \"ga\", \"t\": { \"Any link\": { \"v\": [\"Aon nasc\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Any link\": { \"v\": [\"Calquera ligazón\"] } } }, { \"l\": \"he\", \"t\": { \"Any link\": { \"v\": [\"קישור כלשהו\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Any link\": { \"v\": [\"Bilo koja poveznica\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Any link\": { \"v\": [\"Bármely hivatkozás\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Any link\": { \"v\": [\"Semua tautan\"] } } }, { \"l\": \"is\", \"t\": { \"Any link\": { \"v\": [\"Einhver tengill\"] } } }, { \"l\": \"it\", \"t\": { \"Any link\": { \"v\": [\"Qualsiasi link\"] } } }, { \"l\": \"ja\", \"t\": { \"Any link\": { \"v\": [\"任意のリンク\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Any link\": { \"v\": [\"任意のリンク\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Any link\": { \"v\": [\"아무 링크\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Any link\": { \"v\": [\"ລິງໃດກໍໄດ້\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Any link\": { \"v\": [\"Bet kuri nuoroda\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Any link\": { \"v\": [\"Секој линк\"] } } }, { \"l\": \"mn\", \"t\": { \"Any link\": { \"v\": [\"Аливаа холбоос\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Any link\": { \"v\": [\"Enhver lenke\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Any link\": { \"v\": [\"Elke link\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Any link\": { \"v\": [\"Dowolny link\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Any link\": { \"v\": [\"Qualquer link\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Any link\": { \"v\": [\"Qualquer hiperligação\"] } } }, { \"l\": \"ro\", \"t\": { \"Any link\": { \"v\": [\"Orice link\"] } } }, { \"l\": \"ru\", \"t\": { \"Any link\": { \"v\": [\"Любая ссылка\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Any link\": { \"v\": [\"Akýkoľvek odkaz\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Any link\": { \"v\": [\"Било који линк\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Any link\": { \"v\": [\"Valfri länk\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Any link\": { \"v\": [\"Herhangi bir bağlantı\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Any link\": { \"v\": [\"Будь-яке посилання\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Any link\": { \"v\": [\"Har qanday havola\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Any link\": { \"v\": [\"任何链接\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Any link\": { \"v\": [\"任何連結\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Any link\": { \"v\": [\"任何連結\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t9 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"أيّ مادة تمت مشاركتها مع نفس المجموعة من الأشخاص سيتم عرضها هنا\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"خطأ في الحصول على الموارد ذات الصلة. يرجى الاتصال بمشرف النظام عندك إذا كان لديك أيّ أسئلة.\"] }, \"Related resources\": { \"v\": [\"مصادر ذات صلة\"] } } }, { \"l\": \"ast\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Equí va apaecer tolo que compartas col mesmu grupu de persones\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Hebo un error al consiguir los recursos rellacionaos. Ponte en contautu col alministrador del sistema si tienes dalguna entruga.\"] }, \"Related resources\": { \"v\": [\"Recursos rellacionao\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Qualsevol cosa compartida amb el mateix grup de persones es mostrarà aquí\"] }, \"Related resources\": { \"v\": [\"Recursos relacionats\"] } } }, { \"l\": \"cs\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Cokoli nasdíleného stejné skupině lidí se zobrazí zde\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Chyba při získávání souvisejících prostředků. Pokud máte jakékoli dotazy, obraťte se na správce vámi využívaného systému.\"] }, \"Related resources\": { \"v\": [\"Související prostředky\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Cokoli nasdíleného stejné skupině lidí se zobrazí zde\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Chyba při získávání souvisejících prostředků. Pokud máte jakékoli dotazy, obraťte se na správce vámi využívaného systému.\"] }, \"Related resources\": { \"v\": [\"Související prostředky\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Alt, der deles med den samme gruppe personer, vises her\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Fejl ved hentning af relaterede ressourcer. Kontakt din systemadministrator, hvis du har spørgsmål.\"] }, \"Related resources\": { \"v\": [\"Relaterede ressourcer\"] } } }, { \"l\": \"de\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Alles, das mit derselben Gruppe von Personen geteilt wird, wird hier angezeigt\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Fehler beim Abrufen verwandter Ressourcen. Bei Fragen wende dich bitte an deinen Systemadministrator.\"] }, \"Related resources\": { \"v\": [\"Verwandte Ressourcen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Alles, das mit derselben Gruppe von Personen geteilt wird, wird hier angezeigt\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Fehler beim Abrufen verwandter Ressourcen. Bei Fragen wenden Sie sich bitte an Ihre Systemadministration.\"] }, \"Related resources\": { \"v\": [\"Verwandte Ressourcen\"] } } }, { \"l\": \"el\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Οτιδήποτε μοιράζεται με την ίδια ομάδα ατόμων θα εμφανίζεται εδώ\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Σφάλμα λήψης σχετικών πόρων. Παρακαλούμε επικοινωνήστε με τον διαχειριστή του συστήματός σας εάν έχετε οποιεσδήποτε ερωτήσεις.\"] }, \"Related resources\": { \"v\": [\"Σχετικοί πόροι\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Anything shared with the same group of people will show up here\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Error getting related resources. Please contact your system administrator if you have any questions.\"] }, \"Related resources\": { \"v\": [\"Related resources\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Cualquier cosa que esté compartida con el mismo grupo de personas se mostrará aquí\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Error al obtener recursos relacionados. Por favor, contacte a su administrador del sistema si tiene alguna pregunta.\"] }, \"Related resources\": { \"v\": [\"Recursos relacionados\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Cualquier cosa compartida con el mismo grupo de personas aparecerá aquí.\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Error al obtener recursos relacionados. Por favor, contacte a su administrador del sistema si tiene alguna pregunta.\"] }, \"Related resources\": { \"v\": [\"Recursos relacionados\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Cualquier cosa compartida con el mismo grupo de personas aparecerá aquí.\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Error al obtener recursos relacionados. Por favor, contacta a tu administrador del sistema si tienes alguna pregunta.\"] }, \"Related resources\": { \"v\": [\"Recursos relacionados\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Todo lo que se comparta con el mismo grupo de personas se mostrará aquí\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Error al obtener recursos relacionados. Por favor contacte al administrador si tiene alguna pregunta.\"] }, \"Related resources\": { \"v\": [\"Recursos relacionados\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Siin kuvatakse kõik, mida jagatakse sama kasutajagrupiga\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Viga seotud ressursside saamisel. Küsimuste korral võtke ühendust oma süsteemi haldajaga.\"] }, \"Related resources\": { \"v\": [\"Seotud ressursid\"] } } }, { \"l\": \"eu\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Pertsona-talde berarekin partekatutako edozer agertuko da hemen\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Errore bat gertatu da erlazionatutako baliabideak eskuratzean. Jarri harremanetan zure sistemaren administratzailearekin galderarik baduzu.\"] }, \"Related resources\": { \"v\": [\"Erlazionatutako baliabideak\"] } } }, { \"l\": \"fa\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"هر چیزی که با گروه مشابهی هم‌رسانی شود در این قسمت نمایش می‌یابد\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"خطا در دریافت منابع مرتبط. لطفاً در صورت داشتن هر گونه سؤال با مدیر سیستم خود تماس بگیرید.\"] }, \"Related resources\": { \"v\": [\"منابع مرتبط\"] } } }, { \"l\": \"fi\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Kaikki saman ryhmän kesken jaettu näkyy tässä\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Virhe resurssien haussa. Ota yhteyttä järjestelmän ylläpitäjään, mikäli sinulla on kysyttävää.\"] }, \"Related resources\": { \"v\": [\"Liittyvät resurssit\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Tout ce qui est partagé avec le même groupe de personnes apparaîtra ici\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Erreur lors de la récupération des ressources liées. Si vous avez des questions, contactez votre administrateur système.\"] }, \"Related resources\": { \"v\": [\"Ressources liées\"] } } }, { \"l\": \"ga\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Taispeánfar aon rud a roinntear leis an ngrúpa céanna daoine anseo\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Earráid agus acmhainní gaolmhara á bhfáil. Déan teagmháil le riarthóir do chórais má tá aon cheist agat.\"] }, \"Related resources\": { \"v\": [\"Acmhainní gaolmhara\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Todo o que se comparta co mesmo grupo de persoas aparecerá aquí\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Produciuse un erro ao obter os recursos relacionados. Póñase en contacto coa administración do seu sistema se ten algunha dúbida.\"] }, \"Related resources\": { \"v\": [\"Recursos relacionados\"] } } }, { \"l\": \"he\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"כל מה שמשותף עם אותה קבוצת האנשים יופיע כאן\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"שגיאה בקבלת המשאבים הקשורים. נא ליצור קשר עם הנהלת המערכת אם יש לך שאלות.\"] }, \"Related resources\": { \"v\": [\"משאבים קשורים\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Sve što je podijeljeno s istom grupom ljudi prikazat će se ovdje\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Pogreška pri dohvaćanju povezanih resursa. Ako imate pitanja, obratite se svom administratoru sustava.\"] }, \"Related resources\": { \"v\": [\"Povezani resursi\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Minden, amit ugyanazzal a csoporttal oszt meg, itt fog megjelenni\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Hiba a kapcsolódó erőforrások lekérése során. Ha kérdése van, vegye fel a kapcsolatot a rendszergazdával.\"] }, \"Related resources\": { \"v\": [\"Kapcsolódó erőforrások\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Apa pun yang dibagikan dengan grup orang yang sama akan muncul di sini\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Kesalahan saat mengambil sumber daya terkait. Hubungi administrator sistem Anda jika ada pertanyaan.\"] }, \"Related resources\": { \"v\": [\"Sumber daya terkait\"] } } }, { \"l\": \"is\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Allt sem deilt er með sama hópi fólks mun birtast hér\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Villa við að sækja tengd tilföng. Hafðu samband við kerfisstjórann þinn ef þú ert með einhverjar spurningar.\"] }, \"Related resources\": { \"v\": [\"Tengd tilföng\"] } } }, { \"l\": \"it\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Tutto ciò che è stato condiviso con lo stesso gruppo di persone viene visualizzato qui\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Errore nell'ottenere le risorse correlate. Per qualsiasi domanda, contattare l'amministratore di sistema.\"] }, \"Related resources\": { \"v\": [\"Risorse correlate\"] } } }, { \"l\": \"ja\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"同じグループで共有しているものは、全てここに表示されます\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"関連リソースの取得エラー。ご不明な点がございましたら、システム管理者にお問い合わせください。\"] }, \"Related resources\": { \"v\": [\"関連リソース\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"同じグループで共有しているものは、全てここに表示されます\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"関連リソースの取得エラー。ご不明な点がございましたら、システム管理者にお問い合わせください。\"] }, \"Related resources\": { \"v\": [\"関連リソース\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"같은 그룹의 사용자와 공유된 모든 것들이 이곳에 나타납니다.\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"관련 리소스를 가져오는 중 오류가 발생했습니다. 궁금한 것이 있는 경우 시스템 관리자에게 연락해 주세요.\"] }, \"Related resources\": { \"v\": [\"관련 리소스\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"ທຸກຢ່າງທີ່ແບ່ງປັນກັບກຸ່ມຄົນດຽວກັນຈະສະແດງຢູ່ບ່ອນນີ້\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"ເກີດຂໍ້ຜິດພາດໃນການເອີ້ນຂໍ້ມູນຊັບພະຍາກອນທີ່ກ່ຽວຂ້ອງ. ກະລຸນາຕິດຕໍ່ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ ຖ້າທ່ານມີຄຳຖາມ.\"] }, \"Related resources\": { \"v\": [\"ຊັບພະຍາກອນທີ່ກ່ຽວຂ້ອງ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Čia bus rodomi visi įrašai, kuriais pasidalinta su ta pačia žmonių grupe\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Kilo klaida gaunant susijusius išteklius. Jei turite klausimų, kreipkitės į sistemos administratorių.\"] }, \"Related resources\": { \"v\": [\"Susiję ištekliai\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Сè што е споделено со истата група луѓе ќе се појави овде\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Грешка при добивање поврзани ресурси. Ве молиме контактирајте го вашиот систем администратор ако имате прашања.\"] }, \"Related resources\": { \"v\": [\"Поврзани ресурси\"] } } }, { \"l\": \"mn\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Ижил бүлэг хүмүүстэй хуваалцсан бүх зүйл энд харагдана\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Холбогдох нөөцүүдийг авахад алдаа гарлаа. Асуулт байвал системийн администратортай холбогдоно уу.\"] }, \"Related resources\": { \"v\": [\"Холбогдох нөөцүүд\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Alt som er delt med den samme gruppen vil vises her\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Feil ved henting av relaterte ressurser. Kontakt systemansvarlig hvis du har spørsmål.\"] }, \"Related resources\": { \"v\": [\"Relaterte ressurser\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Alles dat gedeeld is met dezelfde groep mensen zal hier getoond worden\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Fout bij het ophalen van gerelateerde bronnen. Neem contact op met uw systeembeheerder als u vragen heeft.\"] }, \"Related resources\": { \"v\": [\"Gerelateerde bronnen\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Tutaj pojawi się wszystko, co zostało udostępnione tej samej grupie osób\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Błąd podczas pobierania powiązanych zasobów. Jeśli masz jakiekolwiek pytania, skontaktuj się z administratorem systemu.\"] }, \"Related resources\": { \"v\": [\"Powiązane zasoby\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Qualquer coisa compartilhada com o mesmo grupo de pessoas aparecerá aqui\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Erro ao obter recursos relacionados. Por favor, entre em contato com o administrador do sistema se tiver alguma dúvida.\"] }, \"Related resources\": { \"v\": [\"Recursos relacionados\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Qualquer coisa partilhada com o mesmo grupo de pessoas irá aparecer aqui\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Erro ao obter os recursos relacionados. Por favor, contacte o administrador do sistema se tiver quaisquer perguntas.\"] }, \"Related resources\": { \"v\": [\"Recursos relacionados\"] } } }, { \"l\": \"ro\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Tot ceea ce este partajat cu același grup de persoane va fi afișat aici\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Eroare la preluarea resurselor asociate. Contactează administratorul de sistem dacă ai întrebări.\"] }, \"Related resources\": { \"v\": [\"Resurse asociate\"] } } }, { \"l\": \"ru\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Здесь появится всё, чем поделились с той же группой людей\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Не удалось получить связанные ресурсы. С вопросами обращайтесь к системному администратору.\"] }, \"Related resources\": { \"v\": [\"Связанные ресурсы\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Tu sa zobrazí čokoľvek zdieľané s rovnakou skupinou ľudí\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Chyba pri získavaní súvisiacich zdrojov. V prípade otázok kontaktujte prosím svojho systemového administrátora.\"] }, \"Related resources\": { \"v\": [\"Súvisiace zdroje\"] } } }, { \"l\": \"sl\", \"t\": { \"Related resources\": { \"v\": [\"Povezani viri\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Све што се дели са истом групом људи ће се појавити овде\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Грешка код прибављања везаних ресурса. Молимо вас да се обратите администратору ако имате питања.\"] }, \"Related resources\": { \"v\": [\"Повезани ресурси\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Allt som delas med samma grupp av personer visas här\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Det gick inte att hämta relaterade resurser. Kontakta systemadministratören om du har frågor.\"] }, \"Related resources\": { \"v\": [\"Relaterade resurser\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Aynı kişi grubu ile paylaşılan herşey burada görüntülenir\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"İlgili kaynaklara ulaşılırken sorun çıktı. Herhangi bir sorunuz varsa lütfen sistem yöneticiniz ile görüşün \"] }, \"Related resources\": { \"v\": [\"İlgili kaynaklar\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Будь-що доступне для цієї же групи людей буде показано тут\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Помилка під час отримання пов'язаних ресурсів. Будь ласка, сконтактуйте з системним адміністратором, якщо у вас виникли запитання.\"] }, \"Related resources\": { \"v\": [\"Пов'язані ресурси\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"Xuddi shu guruhdagi odamlarga ulashilgan hamma narsa shu yerda chiqadi\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"Tegishli manbalarni olishda xatolik yuz berdi. Savollaringiz bo'lsa, tizim administratoriga murojaat qiling.\"] }, \"Related resources\": { \"v\": [\"Tegishli manbalar\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"与同组用户分享的所有内容都会显示于此\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"获取相关资源出现错误。如果你有任何问题,请联系系统管理员。\"] }, \"Related resources\": { \"v\": [\"相关资源\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"與同一組人共享的任何內容都會顯示在此處\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"取得相關資源時發生錯誤。如果有任何問題,請聯絡系統管理員。\"] }, \"Related resources\": { \"v\": [\"相關資源\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Anything shared with the same group of people will show up here\": { \"v\": [\"與相同群組分享的所有內容都會顯示於此\"] }, \"Error getting related resources. Please contact your system administrator if you have any questions.\": { \"v\": [\"取得相關資源時發生錯誤。如果有任何問題,請聯絡系統管理員。\"] }, \"Related resources\": { \"v\": [\"相關資源\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t10 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"صورة الملف الشخصي الرمزية لــ {displayName} \"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"صورة الملف الشخصي الرمزية لــ {displayName}، {status}\"] } } }, { \"l\": \"ast\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar de: {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar de: {displayName}, {status}\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar de {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar de {displayName}, {status}\"] } } }, { \"l\": \"cs\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Zástupný obrázek uživatele {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Zástupný obrázek uživatele {displayName}, {status}\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Zástupný obrázek uživatele {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Zástupný obrázek uživatele {displayName}, {status}\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar af {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar af {displayName}, {status}\"] } } }, { \"l\": \"de\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar von {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar von {displayName}, {status}\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar von {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar von {displayName}, {status}\"] } } }, { \"l\": \"el\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Άβαταρ του {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Άβαταρ του {displayName}, {status}\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar of {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar of {displayName}, {status}\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar de {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar de {displayName}, {status}\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar de {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar de {displayName}, {status}\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar de {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar de {displayName}, {status}\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar de {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar de {displayName}, {status}\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Tunnuspilt: {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Tunnuspilt: {displayName}, {status}\"] } } }, { \"l\": \"eu\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"{displayName}-(e)n irudia\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"{displayName} -(e)n irudia, {status}\"] } } }, { \"l\": \"fa\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"آواتار {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"آواتار {displayName} ، {status}\"] } } }, { \"l\": \"fi\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"{displayName}n avatar\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"{displayName}n avatar, {status}\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar de {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar de {displayName}, {status}\"] } } }, { \"l\": \"ga\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar de {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar de {displayName}, {status}\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar de {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar de {displayName}, {status}\"] } } }, { \"l\": \"he\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"תמונה ייצוגית של {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"תמונה ייצוגית של {displayName}, {status}\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar od {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar od {displayName}, {status}\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"{displayName} profilképe\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"{displayName} profilképe, {status}\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar {displayName}, {status}\"] } } }, { \"l\": \"is\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Auðkennismynd fyrir {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Auðkennismynd fyrir {displayName}, {status}\"] } } }, { \"l\": \"it\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar di {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar di {displayName}, {status}\"] } } }, { \"l\": \"ja\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"{displayName} のアバター\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"{displayName}, {status} のアバター\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"{displayName} のアバター\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"{displayName}, {status} のアバター\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"{displayName}님의 아바타\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"{displayName}, {status}님의 아바타\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"ຮູບແທນຕົວຂອງ {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"ຮູບແທນຕົວຂອງ {displayName}, {status}\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"{displayName} avataras\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"{displayName} avataras, {status}\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Аватар на {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Аватар на {displayName}, {status}\"] } } }, { \"l\": \"mn\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"{displayName}-ийн аватар\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"{displayName}-ийн аватар, {status}\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"{displayName} ၏ ကိုယ်ပွား\"] } } }, { \"l\": \"nb\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avataren til {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"{displayName}'s avatar, {status}\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar van {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar van {displayName}, {status}\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Awatar {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Awatar {displayName}, {status}\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar de {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar de {displayName}, {status}\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar de {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar de {displayName}, {status}\"] } } }, { \"l\": \"ro\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatarul lui {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatarul lui {displayName}, {status}\"] } } }, { \"l\": \"ru\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Аватар {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Аватар {displayName}, {status}\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar {displayName}, {status}\"] } } }, { \"l\": \"sl\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Podoba {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Prikazna slika {displayName}, {status}\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Аватар за {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar za {displayName}, {status}\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Avatar för {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Avatar för {displayName}, {status}\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"{displayName} avatarı\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"{displayName}, {status} avatarı\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"Аватар {displayName}\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"Аватар {displayName}, {status}\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\" {displayName}Avatari\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"{displayName}, {status} Avatari\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"{displayName}的头像\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"{displayName}的头像,{status}\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"{displayName} 的頭像\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"{displayName} 的頭像,{status}\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Avatar of {displayName}\": { \"v\": [\"{displayName} 的大頭照\"] }, \"Avatar of {displayName}, {status}\": { \"v\": [\"{displayName}, {status} 的大頭照\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t11 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"away\": { \"v\": [\"غير موجود\"] }, \"busy\": { \"v\": [\"مشغول\"] }, \"do not disturb\": { \"v\": [\"يُرجى عدم الإزعاج\"] }, \"invisible\": { \"v\": [\"غير مرئي\"] }, \"offline\": { \"v\": [\"غير متصل\"] }, \"online\": { \"v\": [\"متصل\"] } } }, { \"l\": \"ast\", \"t\": { \"away\": { \"v\": [\"ausente\"] }, \"busy\": { \"v\": [\"ocupáu\"] }, \"do not disturb\": { \"v\": [\"nun molestar\"] }, \"invisible\": { \"v\": [\"invisible\"] }, \"offline\": { \"v\": [\"desconectáu\"] }, \"online\": { \"v\": [\"en llinia\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"away\": { \"v\": [\"pryč\"] }, \"busy\": { \"v\": [\"zaneprádněn/a\"] }, \"do not disturb\": { \"v\": [\"nerušit\"] }, \"invisible\": { \"v\": [\"neviditelné\"] }, \"offline\": { \"v\": [\"offline\"] }, \"online\": { \"v\": [\"online\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"away\": { \"v\": [\"pryč\"] }, \"busy\": { \"v\": [\"zaneprádněn(a)\"] }, \"do not disturb\": { \"v\": [\"nerušit\"] }, \"invisible\": { \"v\": [\"neviditelné\"] }, \"offline\": { \"v\": [\"offline\"] }, \"online\": { \"v\": [\"online\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"away\": { \"v\": [\"væk\"] }, \"busy\": { \"v\": [\"optaget\"] }, \"do not disturb\": { \"v\": [\"forstyr ikke\"] }, \"invisible\": { \"v\": [\"usynlig\"] }, \"offline\": { \"v\": [\"offline\"] }, \"online\": { \"v\": [\"online\"] } } }, { \"l\": \"de\", \"t\": { \"away\": { \"v\": [\"Abwesend\"] }, \"busy\": { \"v\": [\"Beschäftigt\"] }, \"do not disturb\": { \"v\": [\"Bitte nicht stören\"] }, \"invisible\": { \"v\": [\"Unsichtbar\"] }, \"offline\": { \"v\": [\"Offline\"] }, \"online\": { \"v\": [\"Online\"] } } }, { \"l\": \"de-DE\", \"t\": { \"away\": { \"v\": [\"Abwesend\"] }, \"busy\": { \"v\": [\"Beschäftigt\"] }, \"do not disturb\": { \"v\": [\"Bitte nicht stören\"] }, \"invisible\": { \"v\": [\"Unsichtbar\"] }, \"offline\": { \"v\": [\"Offline\"] }, \"online\": { \"v\": [\"Online\"] } } }, { \"l\": \"el\", \"t\": { \"away\": { \"v\": [\"μακριά\"] }, \"busy\": { \"v\": [\"απασχολημένος\"] }, \"do not disturb\": { \"v\": [\"μην ενοχλείτε\"] }, \"invisible\": { \"v\": [\"αόρατο\"] }, \"offline\": { \"v\": [\"εκτός σύνδεσης\"] }, \"online\": { \"v\": [\"συνδεδεμένος\"] } } }, { \"l\": \"en-GB\", \"t\": { \"away\": { \"v\": [\"away\"] }, \"busy\": { \"v\": [\"busy\"] }, \"do not disturb\": { \"v\": [\"do not disturb\"] }, \"invisible\": { \"v\": [\"invisible\"] }, \"offline\": { \"v\": [\"offline\"] }, \"online\": { \"v\": [\"online\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"away\": { \"v\": [\"ausente\"] }, \"busy\": { \"v\": [\"ocupado\"] }, \"do not disturb\": { \"v\": [\"no molestar\"] }, \"invisible\": { \"v\": [\"invisible\"] }, \"offline\": { \"v\": [\"fuera de línea\"] }, \"online\": { \"v\": [\"en línea\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"away\": { \"v\": [\"ausente\"] }, \"busy\": { \"v\": [\"ocupado\"] }, \"do not disturb\": { \"v\": [\"no molestar\"] }, \"invisible\": { \"v\": [\"invisible\"] }, \"offline\": { \"v\": [\"desconectado\"] }, \"online\": { \"v\": [\"en línea\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": {} }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"away\": { \"v\": [\"ausente\"] }, \"busy\": { \"v\": [\"ocupado\"] }, \"do not disturb\": { \"v\": [\"no molestar\"] }, \"invisible\": { \"v\": [\"invisible\"] }, \"offline\": { \"v\": [\"fuera de línea\"] }, \"online\": { \"v\": [\"en línea\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"away\": { \"v\": [\"eemal\"] }, \"busy\": { \"v\": [\"hõivatud\"] }, \"do not disturb\": { \"v\": [\"ära sega\"] }, \"invisible\": { \"v\": [\"nähtamatu\"] }, \"offline\": { \"v\": [\"pole võrgus\"] }, \"online\": { \"v\": [\"võrgus\"] } } }, { \"l\": \"eu\", \"t\": {} }, { \"l\": \"fa\", \"t\": { \"away\": { \"v\": [\"دور از دستگاه\"] }, \"busy\": { \"v\": [\"مشغول\"] }, \"do not disturb\": { \"v\": [\"مزاحم نشوید\"] }, \"invisible\": { \"v\": [\"مخفی\"] }, \"offline\": { \"v\": [\"برون‌خط\"] }, \"online\": { \"v\": [\"برخط\"] } } }, { \"l\": \"fi\", \"t\": { \"away\": { \"v\": [\"poissa\"] }, \"busy\": { \"v\": [\"varattu\"] }, \"do not disturb\": { \"v\": [\"älä häiritse\"] }, \"invisible\": { \"v\": [\"näkymätön\"] }, \"offline\": { \"v\": [\"ei linjalla\"] }, \"online\": { \"v\": [\"linjalla\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"away\": { \"v\": [\"absent\"] }, \"busy\": { \"v\": [\"occupé\"] }, \"do not disturb\": { \"v\": [\"ne pas déranger\"] }, \"invisible\": { \"v\": [\"invisible\"] }, \"offline\": { \"v\": [\"hors ligne\"] }, \"online\": { \"v\": [\"en ligne\"] } } }, { \"l\": \"ga\", \"t\": { \"away\": { \"v\": [\"ar shiúl\"] }, \"busy\": { \"v\": [\"gnóthach\"] }, \"do not disturb\": { \"v\": [\"ná cur as\"] }, \"invisible\": { \"v\": [\"dofheicthe\"] }, \"offline\": { \"v\": [\"as líne\"] }, \"online\": { \"v\": [\"ar líne\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"away\": { \"v\": [\"ausente\"] }, \"busy\": { \"v\": [\"ocupado\"] }, \"do not disturb\": { \"v\": [\"non molestar\"] }, \"invisible\": { \"v\": [\"invisíbel\"] }, \"offline\": { \"v\": [\"desconectado\"] }, \"online\": { \"v\": [\"conectado\"] } } }, { \"l\": \"he\", \"t\": {} }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"away\": { \"v\": [\"odsutan\"] }, \"busy\": { \"v\": [\"zauzet\"] }, \"do not disturb\": { \"v\": [\"ne smetaj\"] }, \"invisible\": { \"v\": [\"nevidljiv\"] }, \"offline\": { \"v\": [\"izvan mreže\"] }, \"online\": { \"v\": [\"na mreži\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"away\": { \"v\": [\"távol\"] }, \"busy\": { \"v\": [\"foglalt\"] }, \"do not disturb\": { \"v\": [\"ne zavarjanak\"] }, \"invisible\": { \"v\": [\"láthatatlan\"] }, \"offline\": { \"v\": [\"offline\"] }, \"online\": { \"v\": [\"online\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"away\": { \"v\": [\"tidak tersedia\"] }, \"busy\": { \"v\": [\"sibuk\"] }, \"do not disturb\": { \"v\": [\"jangan ganggu\"] }, \"invisible\": { \"v\": [\"tidak terlihat\"] }, \"offline\": { \"v\": [\"luring\"] }, \"online\": { \"v\": [\"daring\"] } } }, { \"l\": \"is\", \"t\": { \"away\": { \"v\": [\"í burtu\"] }, \"busy\": { \"v\": [\"upptekin/n\"] }, \"do not disturb\": { \"v\": [\"ekki ónáða\"] }, \"invisible\": { \"v\": [\"ósýnilegt\"] }, \"offline\": { \"v\": [\"ónettengt\"] }, \"online\": { \"v\": [\"nettengt\"] } } }, { \"l\": \"it\", \"t\": { \"away\": { \"v\": [\"via\"] }, \"do not disturb\": { \"v\": [\"non disturbare\"] }, \"offline\": { \"v\": [\"offline\"] }, \"online\": { \"v\": [\"online\"] } } }, { \"l\": \"ja\", \"t\": { \"away\": { \"v\": [\"離れる\"] }, \"busy\": { \"v\": [\"ビジー\"] }, \"do not disturb\": { \"v\": [\"邪魔をしないでください\"] }, \"invisible\": { \"v\": [\"不可視\"] }, \"offline\": { \"v\": [\"オフライン\"] }, \"online\": { \"v\": [\"オンライン\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"away\": { \"v\": [\"離れる\"] }, \"busy\": { \"v\": [\"ビジー\"] }, \"do not disturb\": { \"v\": [\"邪魔をしないでください\"] }, \"invisible\": { \"v\": [\"不可視\"] }, \"offline\": { \"v\": [\"オフライン\"] }, \"online\": { \"v\": [\"オンライン\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"away\": { \"v\": [\"자리 비움\"] }, \"busy\": { \"v\": [\"바쁨\"] }, \"do not disturb\": { \"v\": [\"방해 금지\"] }, \"invisible\": { \"v\": [\"보이지 않음\"] }, \"offline\": { \"v\": [\"오프라인\"] }, \"online\": { \"v\": [\"온라인\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"away\": { \"v\": [\"ບໍ່ຢູ່\"] }, \"busy\": { \"v\": [\"ບໍ່ວ່າງ\"] }, \"do not disturb\": { \"v\": [\"ຫ້າມລົບກວນ\"] }, \"invisible\": { \"v\": [\"ບໍ່ສະແດງ\"] }, \"offline\": { \"v\": [\"ອອບໄລນ໌\"] }, \"online\": { \"v\": [\"ອອນໄລນ໌\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"away\": { \"v\": [\"pasišalinęs\"] }, \"busy\": { \"v\": [\"užsiėmęs\"] }, \"do not disturb\": { \"v\": [\"netrukdyti\"] }, \"invisible\": { \"v\": [\"nematomas\"] }, \"offline\": { \"v\": [\"neprisijungęs\"] }, \"online\": { \"v\": [\"prisijungęs\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"away\": { \"v\": [\"оддалечен\"] }, \"busy\": { \"v\": [\"зафатен\"] }, \"do not disturb\": { \"v\": [\"не вознемирувај\"] }, \"invisible\": { \"v\": [\"невидливо\"] }, \"offline\": { \"v\": [\"офлајн\"] }, \"online\": { \"v\": [\"онлајн\"] } } }, { \"l\": \"mn\", \"t\": { \"away\": { \"v\": [\"хол байна\"] }, \"busy\": { \"v\": [\"завгүй\"] }, \"do not disturb\": { \"v\": [\"бүү саад бол\"] }, \"invisible\": { \"v\": [\"үл харагдах\"] }, \"offline\": { \"v\": [\"офлайн\"] }, \"online\": { \"v\": [\"онлайн\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"away\": { \"v\": [\"borte\"] }, \"busy\": { \"v\": [\"opptatt\"] }, \"do not disturb\": { \"v\": [\"ikke forstyrr\"] }, \"invisible\": { \"v\": [\"usynlig\"] }, \"offline\": { \"v\": [\"frakoblet\"] }, \"online\": { \"v\": [\"tilkoblet\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"away\": { \"v\": [\"weg\"] }, \"busy\": { \"v\": [\"bezig\"] }, \"do not disturb\": { \"v\": [\"niet storen\"] }, \"invisible\": { \"v\": [\"Onzichtbaar\"] }, \"offline\": { \"v\": [\"offline\"] }, \"online\": { \"v\": [\"online\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"away\": { \"v\": [\"stąd\"] }, \"busy\": { \"v\": [\"zajęty\"] }, \"do not disturb\": { \"v\": [\"nie przeszkadzać\"] }, \"invisible\": { \"v\": [\"niewidzialny\"] }, \"offline\": { \"v\": [\"offline\"] }, \"online\": { \"v\": [\"online\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"away\": { \"v\": [\"ausente\"] }, \"busy\": { \"v\": [\"ocupado\"] }, \"do not disturb\": { \"v\": [\"não perturbe\"] }, \"invisible\": { \"v\": [\"invisível\"] }, \"offline\": { \"v\": [\"off-line\"] }, \"online\": { \"v\": [\"on-line\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"away\": { \"v\": [\"longe\"] }, \"busy\": { \"v\": [\"ocupado\"] }, \"do not disturb\": { \"v\": [\"não incomodar\"] }, \"invisible\": { \"v\": [\"invisível\"] }, \"offline\": { \"v\": [\"offline\"] }, \"online\": { \"v\": [\"online\"] } } }, { \"l\": \"ro\", \"t\": { \"away\": { \"v\": [\"absent\"] }, \"busy\": { \"v\": [\"ocupat\"] }, \"do not disturb\": { \"v\": [\"nu deranja\"] }, \"invisible\": { \"v\": [\"invizibil\"] }, \"offline\": { \"v\": [\"offline\"] }, \"online\": { \"v\": [\"online\"] } } }, { \"l\": \"ru\", \"t\": { \"away\": { \"v\": [\"неактивен\"] }, \"busy\": { \"v\": [\"занят\"] }, \"do not disturb\": { \"v\": [\"не беспокоить\"] }, \"invisible\": { \"v\": [\"невидимый\"] }, \"offline\": { \"v\": [\"не в сети\"] }, \"online\": { \"v\": [\"в сети\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"away\": { \"v\": [\"neprítomný\"] }, \"busy\": { \"v\": [\"zaneprázdnený\"] }, \"do not disturb\": { \"v\": [\"nerušiť\"] }, \"invisible\": { \"v\": [\"neviditeľný\"] }, \"offline\": { \"v\": [\"Odpojený - offline\"] }, \"online\": { \"v\": [\"Pripojený - online\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"away\": { \"v\": [\"одсутан\"] }, \"busy\": { \"v\": [\"заузет\"] }, \"do not disturb\": { \"v\": [\"не узнемиравај\"] }, \"invisible\": { \"v\": [\"невидљиво\"] }, \"offline\": { \"v\": [\"ван мреже\"] }, \"online\": { \"v\": [\"на мрежи\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"away\": { \"v\": [\"borta\"] }, \"busy\": { \"v\": [\"upptagen\"] }, \"do not disturb\": { \"v\": [\"stör ej\"] }, \"invisible\": { \"v\": [\"osynlig\"] }, \"offline\": { \"v\": [\"offline\"] }, \"online\": { \"v\": [\"online\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"away\": { \"v\": [\"Uzakta\"] }, \"busy\": { \"v\": [\"Meşgul\"] }, \"do not disturb\": { \"v\": [\"Rahatsız etmeyin\"] }, \"invisible\": { \"v\": [\"görünmez\"] }, \"offline\": { \"v\": [\"Çevrim dışı\"] }, \"online\": { \"v\": [\"Çevrim içi\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"away\": { \"v\": [\"відсутній\"] }, \"busy\": { \"v\": [\"зайнято\"] }, \"do not disturb\": { \"v\": [\"не турбувати\"] }, \"invisible\": { \"v\": [\"Невидимий\"] }, \"offline\": { \"v\": [\"не в мережі\"] }, \"online\": { \"v\": [\"в мережі\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"away\": { \"v\": [\"uzoqda\"] }, \"busy\": { \"v\": [\"band\"] }, \"do not disturb\": { \"v\": [\"bezovta qilmang\"] }, \"invisible\": { \"v\": [\"ko'rinmas\"] }, \"offline\": { \"v\": [\"offline\"] }, \"online\": { \"v\": [\"online\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"away\": { \"v\": [\"离开\"] }, \"busy\": { \"v\": [\"繁忙\"] }, \"do not disturb\": { \"v\": [\"请勿打扰\"] }, \"invisible\": { \"v\": [\"隐藏的\"] }, \"offline\": { \"v\": [\"离线\"] }, \"online\": { \"v\": [\"在线\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"away\": { \"v\": [\"離開\"] }, \"busy\": { \"v\": [\"忙碌\"] }, \"do not disturb\": { \"v\": [\"請勿打擾\"] }, \"invisible\": { \"v\": [\"隐藏的\"] }, \"offline\": { \"v\": [\"離線\"] }, \"online\": { \"v\": [\"在線\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"away\": { \"v\": [\"離開\"] }, \"busy\": { \"v\": [\"忙碌\"] }, \"do not disturb\": { \"v\": [\"請勿打擾\"] }, \"invisible\": { \"v\": [\"不可見\"] }, \"offline\": { \"v\": [\"離線\"] }, \"online\": { \"v\": [\"線上\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t12 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Back to provider selection\": { \"v\": [\"عودة إلى اختيار المزوّد\"] }, \"Close Smart Picker\": { \"v\": [\"إغلاق المحدد الذكي\"] }, \"Smart Picker\": { \"v\": [\"اللاقط الذكي smart picker\"] } } }, { \"l\": \"ast\", \"t\": { \"Back to provider selection\": { \"v\": [\"Volver a la seleición de fornidores\"] }, \"Close Smart Picker\": { \"v\": [\"Zarrar la seleición intelixente\"] }, \"Smart Picker\": { \"v\": [\"Selector intelixente\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Back to provider selection\": { \"v\": [\"Zpět na výběr poskytovatele\"] }, \"Close Smart Picker\": { \"v\": [\"Zavřít inteligentní výběr\"] }, \"Smart Picker\": { \"v\": [\"Inteligentní výběr\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Back to provider selection\": { \"v\": [\"Zpět na výběr poskytovatele\"] }, \"Close Smart Picker\": { \"v\": [\"Zavřít inteligentní výběr\"] }, \"Smart Picker\": { \"v\": [\"Inteligentní výběr\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Back to provider selection\": { \"v\": [\"Tilbage til udbydervalg\"] }, \"Close Smart Picker\": { \"v\": [\"Luk Smart Picker\"] }, \"Smart Picker\": { \"v\": [\"Smart Picker\"] } } }, { \"l\": \"de\", \"t\": { \"Back to provider selection\": { \"v\": [\"Zurück zur Anbieterauswahl\"] }, \"Close Smart Picker\": { \"v\": [\"Smart Picker schließen\"] }, \"Smart Picker\": { \"v\": [\"Smart Picker\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Back to provider selection\": { \"v\": [\"Zurück zur Anbieterauswahl\"] }, \"Close Smart Picker\": { \"v\": [\"Smart Picker schließen\"] }, \"Smart Picker\": { \"v\": [\"Smart Picker\"] } } }, { \"l\": \"el\", \"t\": { \"Back to provider selection\": { \"v\": [\"Επιστροφή στην επιλογή παρόχου\"] }, \"Close Smart Picker\": { \"v\": [\"Κλείσιμο Έξυπνης Επιλογής\"] }, \"Smart Picker\": { \"v\": [\"Έξυπνη Επιλογή\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Back to provider selection\": { \"v\": [\"Back to provider selection\"] }, \"Close Smart Picker\": { \"v\": [\"Close Smart Picker\"] }, \"Smart Picker\": { \"v\": [\"Smart Picker\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Back to provider selection\": { \"v\": [\"Volver a la selección de proveedor\"] }, \"Close Smart Picker\": { \"v\": [\"Cerrar selector inteligente\"] }, \"Smart Picker\": { \"v\": [\"Selector inteligente\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Back to provider selection\": { \"v\": [\"Volver a la selección de proveedor\"] }, \"Close Smart Picker\": { \"v\": [\"Cerrar selector inteligente\"] }, \"Smart Picker\": { \"v\": [\"Selector inteligente\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Back to provider selection\": { \"v\": [\"Volver a la selección de proveedor\"] }, \"Close Smart Picker\": { \"v\": [\"Cerrar selector inteligente\"] }, \"Smart Picker\": { \"v\": [\"Selector inteligente\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Back to provider selection\": { \"v\": [\"Volver a la selección de proveedor\"] }, \"Close Smart Picker\": { \"v\": [\"Cerrar selector inteligente\"] }, \"Smart Picker\": { \"v\": [\"Selector inteligente\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Back to provider selection\": { \"v\": [\"Tagasi teenusepakkuja valiku juurde\"] }, \"Close Smart Picker\": { \"v\": [\"Sulge nutivalija\"] }, \"Smart Picker\": { \"v\": [\"Nutivalija\"] } } }, { \"l\": \"eu\", \"t\": { \"Back to provider selection\": { \"v\": [\"Itzuli hornitzaileen hautapenera\"] }, \"Close Smart Picker\": { \"v\": [\"Itxi hautatzaile adimenduna\"] }, \"Smart Picker\": { \"v\": [\"Hautatzaile adimenduna\"] } } }, { \"l\": \"fa\", \"t\": { \"Back to provider selection\": { \"v\": [\"بازگشت به انتخاب ارائه دهنده\"] }, \"Close Smart Picker\": { \"v\": [\"بستن انتخاب‌گر هوشمند\"] }, \"Smart Picker\": { \"v\": [\"انتخابگر هوشمند\"] } } }, { \"l\": \"fi\", \"t\": { \"Back to provider selection\": { \"v\": [\"Takaisin toimittajavalintaan\"] }, \"Close Smart Picker\": { \"v\": [\"Sulje älykas valitsin\"] }, \"Smart Picker\": { \"v\": [\"Älykäs valitsin\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Back to provider selection\": { \"v\": [\"Revenir à la sélection du fournisseur\"] }, \"Close Smart Picker\": { \"v\": [\"Fermer le sélecteur intelligent\"] }, \"Smart Picker\": { \"v\": [\"Sélecteur intelligent\"] } } }, { \"l\": \"ga\", \"t\": { \"Back to provider selection\": { \"v\": [\"Ar ais go roghnú soláthróra\"] }, \"Close Smart Picker\": { \"v\": [\"Dún Piocálaí Cliste\"] }, \"Smart Picker\": { \"v\": [\"Roghnóir Cliste\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Back to provider selection\": { \"v\": [\"Volver á selección do provedor\"] }, \"Close Smart Picker\": { \"v\": [\"Pechar o Selector intelixente\"] }, \"Smart Picker\": { \"v\": [\"Selector intelixente\"] } } }, { \"l\": \"he\", \"t\": { \"Back to provider selection\": { \"v\": [\"חזרה לבחירת ספק\"] }, \"Close Smart Picker\": { \"v\": [\"סגירת הבורר החכם\"] }, \"Smart Picker\": { \"v\": [\"בורר חכם\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Back to provider selection\": { \"v\": [\"Natrag na odabir pružatelja\"] }, \"Close Smart Picker\": { \"v\": [\"Zatvori pametni odabir\"] }, \"Smart Picker\": { \"v\": [\"Pametni odabir\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Back to provider selection\": { \"v\": [\"Vissza a szolgáltatóválasztáshoz\"] }, \"Close Smart Picker\": { \"v\": [\"Okos választó bezárása\"] }, \"Smart Picker\": { \"v\": [\"Okos választó\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Back to provider selection\": { \"v\": [\"Kembali ke pemilihan penyedia\"] }, \"Close Smart Picker\": { \"v\": [\"Tutup Pemilih Cerdas\"] }, \"Smart Picker\": { \"v\": [\"Pemilih Cerdas\"] } } }, { \"l\": \"is\", \"t\": { \"Back to provider selection\": { \"v\": [\"Til baka í val á þjónustuveitu\"] }, \"Close Smart Picker\": { \"v\": [\"Loka snjall-veljara\"] }, \"Smart Picker\": { \"v\": [\"Snjall-veljari\"] } } }, { \"l\": \"it\", \"t\": { \"Back to provider selection\": { \"v\": [\"Torna alla selezione del provider\"] }, \"Close Smart Picker\": { \"v\": [\"Chiudere lo Smart Picker\"] }, \"Smart Picker\": { \"v\": [\"Picker intelligente\"] } } }, { \"l\": \"ja\", \"t\": { \"Back to provider selection\": { \"v\": [\"プロバイダーの選択に戻る\"] }, \"Close Smart Picker\": { \"v\": [\"スマートピッカーを閉じる\"] }, \"Smart Picker\": { \"v\": [\"スマートピッカー\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Back to provider selection\": { \"v\": [\"プロバイダーの選択に戻る\"] }, \"Close Smart Picker\": { \"v\": [\"スマートピッカーを閉じる\"] }, \"Smart Picker\": { \"v\": [\"スマートピッカー\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Back to provider selection\": { \"v\": [\"제공자 선택으로 돌아가기\"] }, \"Close Smart Picker\": { \"v\": [\"스마트 선택기 닫기\"] }, \"Smart Picker\": { \"v\": [\"스마트 선택기\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Back to provider selection\": { \"v\": [\"ກັບໄປທີ່ການເລືອກຜູ້ໃຫ້ບໍລິການ\"] }, \"Close Smart Picker\": { \"v\": [\"ປິດໂຕເລືອກອັດສະລິຍະ\"] }, \"Smart Picker\": { \"v\": [\"ໂຕເລືອກອັດສະລິຍະ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Back to provider selection\": { \"v\": [\"Grįžti į teikėjo pasirinkimą\"] }, \"Close Smart Picker\": { \"v\": [\"Uždaryti „Smart Picker“\"] }, \"Smart Picker\": { \"v\": ['\"Smart Picker\"'] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Back to provider selection\": { \"v\": [\"Назад до избор на провајдер\"] }, \"Close Smart Picker\": { \"v\": [\"Затвори паметен избирач\"] }, \"Smart Picker\": { \"v\": [\"Паметен избирач\"] } } }, { \"l\": \"mn\", \"t\": { \"Back to provider selection\": { \"v\": [\"Үйлчилгээ үзүүлэгчийн сонголт руу буцах\"] }, \"Close Smart Picker\": { \"v\": [\"Ухаалаг сонгогчийг хаах\"] }, \"Smart Picker\": { \"v\": [\"Ухаалаг сонгогч\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Back to provider selection\": { \"v\": [\"Tilbake til leverandørvalg\"] }, \"Close Smart Picker\": { \"v\": [\"Lukk Smart Velger\"] }, \"Smart Picker\": { \"v\": [\"Smart Velger\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Back to provider selection\": { \"v\": [\"Terug naar provider selectie\"] }, \"Close Smart Picker\": { \"v\": [\"Slimme Kiezer sluiten\"] }, \"Smart Picker\": { \"v\": [\"Slimme Kiezer\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Back to provider selection\": { \"v\": [\"Powrót do wyboru dostawcy\"] }, \"Close Smart Picker\": { \"v\": [\"Zamknij inteligentny selektor\"] }, \"Smart Picker\": { \"v\": [\"Inteligentne wybieranie\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Back to provider selection\": { \"v\": [\"Voltar para seleção de provedor\"] }, \"Close Smart Picker\": { \"v\": [\"Fechar Seletor Inteligente\"] }, \"Smart Picker\": { \"v\": [\"Seletor Inteligente\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Back to provider selection\": { \"v\": [\"Voltar à seleção de fornecedor\"] }, \"Close Smart Picker\": { \"v\": ['Fechar \"Smart Picker\"'] }, \"Smart Picker\": { \"v\": [\"Smart Picker\"] } } }, { \"l\": \"ro\", \"t\": { \"Back to provider selection\": { \"v\": [\"Înapoi la selectarea furnizorului\"] }, \"Close Smart Picker\": { \"v\": [\"Închide Smart Picker\"] }, \"Smart Picker\": { \"v\": [\"Smart Picker\"] } } }, { \"l\": \"ru\", \"t\": { \"Back to provider selection\": { \"v\": [\"Вернуться к выбору поставщика\"] }, \"Close Smart Picker\": { \"v\": [\"Закрыть умный подборщик\"] }, \"Smart Picker\": { \"v\": [\"Умный подборщик\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Back to provider selection\": { \"v\": [\"Späť na výber poskytovateľa\"] }, \"Close Smart Picker\": { \"v\": [\"Zavrieť inteligentný výber\"] }, \"Smart Picker\": { \"v\": [\"Inteligentný výber\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Back to provider selection\": { \"v\": [\"Назад на избор пружаоца\"] }, \"Close Smart Picker\": { \"v\": [\"Затвори паметни бирач\"] }, \"Smart Picker\": { \"v\": [\"Паметни бирач\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Back to provider selection\": { \"v\": [\"Tillbaka till leverantörsvalet\"] }, \"Close Smart Picker\": { \"v\": [\"Stäng smartväljaren\"] }, \"Smart Picker\": { \"v\": [\"Smartväljare\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Back to provider selection\": { \"v\": [\"Hizmet sağlayıcı seçimine dön\"] }, \"Close Smart Picker\": { \"v\": [\"Akıllı seçimi kapat\"] }, \"Smart Picker\": { \"v\": [\"Akıllı seçim\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Back to provider selection\": { \"v\": [\"Назад до вибору постачальника\"] }, \"Close Smart Picker\": { \"v\": [\"Закрити асистент вибору\"] }, \"Smart Picker\": { \"v\": [\"Асистент вибору\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Back to provider selection\": { \"v\": [\"Provayder tanloviga qaytish\"] }, \"Close Smart Picker\": { \"v\": [\"Smart Picker-ni yoping\"] }, \"Smart Picker\": { \"v\": [\"Aqlli tanlovchi\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Back to provider selection\": { \"v\": [\"返回至提供者选择列表\"] }, \"Close Smart Picker\": { \"v\": [\"关闭智能拾取器\"] }, \"Smart Picker\": { \"v\": [\"智能拾取器\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Back to provider selection\": { \"v\": [\"回到提供者選擇\"] }, \"Close Smart Picker\": { \"v\": [\"關閉 Smart Picker\"] }, \"Smart Picker\": { \"v\": [\"Smart Picker\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Back to provider selection\": { \"v\": [\"回到提供者選擇\"] }, \"Close Smart Picker\": { \"v\": [\"關閉智慧型挑選器\"] }, \"Smart Picker\": { \"v\": [\"智慧型挑選器\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t13 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Cancel changes\": { \"v\": [\"إلغاء التغييرات\"] }, \"Confirm changes\": { \"v\": [\"تأكيد التغييرات\"] } } }, { \"l\": \"ast\", \"t\": { \"Cancel changes\": { \"v\": [\"Encaboxar los cambeos\"] }, \"Confirm changes\": { \"v\": [\"Confirmar los cambeos\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Cancel changes\": { \"v\": [\"Cancel·la els canvis\"] }, \"Confirm changes\": { \"v\": [\"Confirmeu els canvis\"] } } }, { \"l\": \"cs\", \"t\": { \"Cancel changes\": { \"v\": [\"Zrušit změny\"] }, \"Confirm changes\": { \"v\": [\"Potvrdit změny\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Cancel changes\": { \"v\": [\"Zrušit změny\"] }, \"Confirm changes\": { \"v\": [\"Potvrdit změny\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Cancel changes\": { \"v\": [\"Annuller ændringer\"] }, \"Confirm changes\": { \"v\": [\"Bekræft ændringer\"] } } }, { \"l\": \"de\", \"t\": { \"Cancel changes\": { \"v\": [\"Änderungen verwerfen\"] }, \"Confirm changes\": { \"v\": [\"Änderungen bestätigen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Cancel changes\": { \"v\": [\"Änderungen verwerfen\"] }, \"Confirm changes\": { \"v\": [\"Änderungen bestätigen\"] } } }, { \"l\": \"el\", \"t\": { \"Cancel changes\": { \"v\": [\"Ακύρωση αλλαγών\"] }, \"Confirm changes\": { \"v\": [\"Επιβεβαίωση αλλαγών\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Cancel changes\": { \"v\": [\"Cancel changes\"] }, \"Confirm changes\": { \"v\": [\"Confirm changes\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Cancel changes\": { \"v\": [\"Cancelar cambios\"] }, \"Confirm changes\": { \"v\": [\"Confirmar cambios\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Cancel changes\": { \"v\": [\"Cancelar cambios\"] }, \"Confirm changes\": { \"v\": [\"Confirmar cambios\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Cancel changes\": { \"v\": [\"Cancelar cambios\"] }, \"Confirm changes\": { \"v\": [\"Confirmar cambios\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Cancel changes\": { \"v\": [\"Cancelar cambios\"] }, \"Confirm changes\": { \"v\": [\"Confirmar cambios\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Cancel changes\": { \"v\": [\"Tühista muudatused\"] }, \"Confirm changes\": { \"v\": [\"Kinnita muudatused\"] } } }, { \"l\": \"eu\", \"t\": { \"Cancel changes\": { \"v\": [\"Ezeztatu aldaketak\"] }, \"Confirm changes\": { \"v\": [\"Baieztatu aldaketak\"] } } }, { \"l\": \"fa\", \"t\": { \"Cancel changes\": { \"v\": [\"لغو تغییرات\"] }, \"Confirm changes\": { \"v\": [\"تایید تغییرات\"] } } }, { \"l\": \"fi\", \"t\": { \"Cancel changes\": { \"v\": [\"Peruuta muutokset\"] }, \"Confirm changes\": { \"v\": [\"Vahvista muutokset\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Cancel changes\": { \"v\": [\"Annuler les modifications\"] }, \"Confirm changes\": { \"v\": [\"Confirmer les modifications\"] } } }, { \"l\": \"ga\", \"t\": { \"Cancel changes\": { \"v\": [\"Cealaigh athruithe\"] }, \"Confirm changes\": { \"v\": [\"Deimhnigh na hathruithe\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Cancel changes\": { \"v\": [\"Cancelar os cambios\"] }, \"Confirm changes\": { \"v\": [\"Confirma os cambios\"] } } }, { \"l\": \"he\", \"t\": { \"Cancel changes\": { \"v\": [\"ביטול שינויים\"] }, \"Confirm changes\": { \"v\": [\"אישור השינויים\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Cancel changes\": { \"v\": [\"Otkaži promjene\"] }, \"Confirm changes\": { \"v\": [\"Potvrdi promjene\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Cancel changes\": { \"v\": [\"Változtatások elvetése\"] }, \"Confirm changes\": { \"v\": [\"Változtatások megerősítése\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Cancel changes\": { \"v\": [\"Batalkan perubahan\"] }, \"Confirm changes\": { \"v\": [\"Konfirmasikan perubahan\"] } } }, { \"l\": \"is\", \"t\": { \"Cancel changes\": { \"v\": [\"Hætta við breytingar\"] }, \"Confirm changes\": { \"v\": [\"Staðfesta breytingar\"] } } }, { \"l\": \"it\", \"t\": { \"Cancel changes\": { \"v\": [\"Annulla modifiche\"] }, \"Confirm changes\": { \"v\": [\"Conferma modifiche\"] } } }, { \"l\": \"ja\", \"t\": { \"Cancel changes\": { \"v\": [\"変更をキャンセル\"] }, \"Confirm changes\": { \"v\": [\"変更を承認\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Cancel changes\": { \"v\": [\"変更をキャンセル\"] }, \"Confirm changes\": { \"v\": [\"変更を承認\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Cancel changes\": { \"v\": [\"변경 취소\"] }, \"Confirm changes\": { \"v\": [\"변경 사항 확인\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Cancel changes\": { \"v\": [\"ຍົກເລີກການປ່ຽນແປງ\"] }, \"Confirm changes\": { \"v\": [\"ຢືນຢັນການປ່ຽນແປງ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Cancel changes\": { \"v\": [\"Atsisakyti pakeitimų\"] }, \"Confirm changes\": { \"v\": [\"Patvirtinti pakeitimus\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Cancel changes\": { \"v\": [\"Откажи ги промените\"] }, \"Confirm changes\": { \"v\": [\"Потврди ги промените\"] } } }, { \"l\": \"mn\", \"t\": { \"Cancel changes\": { \"v\": [\"Өөрчлөлтийг цуцлах\"] }, \"Confirm changes\": { \"v\": [\"Өөрчлөлтийг баталгаажуулах\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": { \"Cancel changes\": { \"v\": [\"ပြောင်းလဲမှုများ ပယ်ဖျက်ရန်\"] }, \"Confirm changes\": { \"v\": [\"ပြောင်းလဲမှုများ အတည်ပြုရန်\"] } } }, { \"l\": \"nb\", \"t\": { \"Cancel changes\": { \"v\": [\"Avbryt endringer\"] }, \"Confirm changes\": { \"v\": [\"Bekreft endringer\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Cancel changes\": { \"v\": [\"Wijzigingen annuleren\"] }, \"Confirm changes\": { \"v\": [\"Wijzigingen bevestigen\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Cancel changes\": { \"v\": [\"Anuluj zmiany\"] }, \"Confirm changes\": { \"v\": [\"Potwierdź zmiany\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Cancel changes\": { \"v\": [\"Cancelar alterações\"] }, \"Confirm changes\": { \"v\": [\"Confirmar alterações\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Cancel changes\": { \"v\": [\"Cancelar alterações\"] }, \"Confirm changes\": { \"v\": [\"Confirmar alterações\"] } } }, { \"l\": \"ro\", \"t\": { \"Cancel changes\": { \"v\": [\"Anulează modificările\"] }, \"Confirm changes\": { \"v\": [\"Confirmă modificările\"] } } }, { \"l\": \"ru\", \"t\": { \"Cancel changes\": { \"v\": [\"Отменить изменения\"] }, \"Confirm changes\": { \"v\": [\"Подтвердить изменения\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Cancel changes\": { \"v\": [\"Zrušiť zmeny\"] }, \"Confirm changes\": { \"v\": [\"Potvrdiť zmeny\"] } } }, { \"l\": \"sl\", \"t\": { \"Cancel changes\": { \"v\": [\"Prekliči spremembe\"] }, \"Confirm changes\": { \"v\": [\"Potrdi spremembe\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Cancel changes\": { \"v\": [\"Откажи измене\"] }, \"Confirm changes\": { \"v\": [\"Потврдите измене\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Cancel changes\": { \"v\": [\"Avbryt ändringar\"] }, \"Confirm changes\": { \"v\": [\"Bekräfta ändringar\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Cancel changes\": { \"v\": [\"Değişiklikleri iptal et\"] }, \"Confirm changes\": { \"v\": [\"Değişiklikleri onayla\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Cancel changes\": { \"v\": [\"Скасувати зміни\"] }, \"Confirm changes\": { \"v\": [\"Підтвердити зміни\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Cancel changes\": { \"v\": [\"O'zgarishlarni bekor qilish\"] }, \"Confirm changes\": { \"v\": [\"O'zgarishlarni tasdiqlang\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Cancel changes\": { \"v\": [\"取消更改\"] }, \"Confirm changes\": { \"v\": [\"确认更改\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Cancel changes\": { \"v\": [\"取消更改\"] }, \"Confirm changes\": { \"v\": [\"確認更改\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Cancel changes\": { \"v\": [\"取消變更\"] }, \"Confirm changes\": { \"v\": [\"確認變更\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t14 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Change name\": { \"v\": [\"تغيير الاسم\"] }, \"Close sidebar\": { \"v\": [\"قفل الشريط الجانبي\"] }, \"Favorite\": { \"v\": [\"المفضلة\"] }, \"Open sidebar\": { \"v\": [\"إفتَح الشريط الجانبي\"] } } }, { \"l\": \"ast\", \"t\": { \"Change name\": { \"v\": [\"Camudar el nome\"] }, \"Close sidebar\": { \"v\": [\"Zarrar la barra llateral\"] }, \"Favorite\": { \"v\": [\"Favoritu\"] }, \"Open sidebar\": { \"v\": [\"Abrir la barra llateral\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Close sidebar\": { \"v\": [\"Tancar la barra lateral\"] }, \"Favorite\": { \"v\": [\"Preferit\"] } } }, { \"l\": \"cs\", \"t\": { \"Change name\": { \"v\": [\"Změnit název\"] }, \"Close sidebar\": { \"v\": [\"Zavřít postranní panel\"] }, \"Favorite\": { \"v\": [\"Oblíbené\"] }, \"Open sidebar\": { \"v\": [\"Otevřít postranní panel\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Change name\": { \"v\": [\"Změnit název\"] }, \"Close sidebar\": { \"v\": [\"Zavřít postranní panel\"] }, \"Favorite\": { \"v\": [\"Oblíbené\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Change name\": { \"v\": [\"Skift navn\"] }, \"Close sidebar\": { \"v\": [\"Luk sidepanel\"] }, \"Favorite\": { \"v\": [\"Favorit\"] }, \"Open sidebar\": { \"v\": [\"Åbn sidepanel\"] } } }, { \"l\": \"de\", \"t\": { \"Change name\": { \"v\": [\"Namen ändern\"] }, \"Close sidebar\": { \"v\": [\"Seitenleiste schließen\"] }, \"Favorite\": { \"v\": [\"Favorit\"] }, \"Open sidebar\": { \"v\": [\"Seitenleiste öffnen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Change name\": { \"v\": [\"Namen ändern\"] }, \"Close sidebar\": { \"v\": [\"Seitenleiste schließen\"] }, \"Favorite\": { \"v\": [\"Favorit\"] }, \"Open sidebar\": { \"v\": [\"Seitenleiste öffnen\"] } } }, { \"l\": \"el\", \"t\": { \"Change name\": { \"v\": [\"Αλλαγή ονόματος\"] }, \"Close sidebar\": { \"v\": [\"Κλείσιμο πλευρικής μπάρας\"] }, \"Favorite\": { \"v\": [\"Αγαπημένα\"] }, \"Open sidebar\": { \"v\": [\"Άνοιγμα πλευρικής μπάρας\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Change name\": { \"v\": [\"Change name\"] }, \"Close sidebar\": { \"v\": [\"Close sidebar\"] }, \"Favorite\": { \"v\": [\"Favourite\"] }, \"Open sidebar\": { \"v\": [\"Open sidebar\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Change name\": { \"v\": [\"Cambiar nombre\"] }, \"Close sidebar\": { \"v\": [\"Cerrar barra lateral\"] }, \"Favorite\": { \"v\": [\"Favorito\"] }, \"Open sidebar\": { \"v\": [\"Abrir barra lateral\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Change name\": { \"v\": [\"Cambiar nombre\"] }, \"Close sidebar\": { \"v\": [\"Cerrar barra lateral\"] }, \"Favorite\": { \"v\": [\"Favorito\"] }, \"Open sidebar\": { \"v\": [\"Abrir barra lateral\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Change name\": { \"v\": [\"Cambiar nombre\"] }, \"Close sidebar\": { \"v\": [\"Cerrar barra lateral\"] }, \"Favorite\": { \"v\": [\"Favorito\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Change name\": { \"v\": [\"Cambiar nombre\"] }, \"Close sidebar\": { \"v\": [\"Cerrar barra lateral\"] }, \"Favorite\": { \"v\": [\"Favorito\"] }, \"Open sidebar\": { \"v\": [\"Abrir barra lateral\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Change name\": { \"v\": [\"Muuda nime\"] }, \"Close sidebar\": { \"v\": [\"Sulge külgriba\"] }, \"Favorite\": { \"v\": [\"Lemmik\"] }, \"Open sidebar\": { \"v\": [\"Ava külgriba\"] } } }, { \"l\": \"eu\", \"t\": { \"Change name\": { \"v\": [\"Aldatu izena\"] }, \"Close sidebar\": { \"v\": [\"Itxi albo-barra\"] }, \"Favorite\": { \"v\": [\"Gogokoa\"] } } }, { \"l\": \"fa\", \"t\": { \"Change name\": { \"v\": [\"تغییر نام\"] }, \"Close sidebar\": { \"v\": [\"بستن نوار کناری\"] }, \"Favorite\": { \"v\": [\"مورد علاقه\"] }, \"Open sidebar\": { \"v\": [\"باز کردن نوار کنار\"] } } }, { \"l\": \"fi\", \"t\": { \"Change name\": { \"v\": [\"Vaihda nimi\"] }, \"Close sidebar\": { \"v\": [\"Sulje sivupalkki\"] }, \"Favorite\": { \"v\": [\"Suosikki\"] }, \"Open sidebar\": { \"v\": [\"Avaa sivupalkki\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Change name\": { \"v\": [\"Modifier le nom\"] }, \"Close sidebar\": { \"v\": [\"Fermer le panneau latéral\"] }, \"Favorite\": { \"v\": [\"Favori\"] }, \"Open sidebar\": { \"v\": [\"Ouvrir le panneau latéral\"] } } }, { \"l\": \"ga\", \"t\": { \"Change name\": { \"v\": [\"Athrú ainm\"] }, \"Close sidebar\": { \"v\": [\"Dún barra taoibh\"] }, \"Favorite\": { \"v\": [\"is fearr leat\"] }, \"Open sidebar\": { \"v\": [\"Oscail barra taoibh\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Change name\": { \"v\": [\"Cambiar o nome\"] }, \"Close sidebar\": { \"v\": [\"Pechar a barra lateral\"] }, \"Favorite\": { \"v\": [\"Favorito\"] }, \"Open sidebar\": { \"v\": [\"Abrir a barra lateral\"] } } }, { \"l\": \"he\", \"t\": { \"Change name\": { \"v\": [\"החלפת שם\"] }, \"Close sidebar\": { \"v\": [\"סגירת סרגל הצד\"] }, \"Favorite\": { \"v\": [\"למועדפים\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Change name\": { \"v\": [\"Promjeni naziv\"] }, \"Close sidebar\": { \"v\": [\"Zatvori bočnu traku\"] }, \"Favorite\": { \"v\": [\"Favorit\"] }, \"Open sidebar\": { \"v\": [\"Otvori bočnu traku\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Change name\": { \"v\": [\"Név módosítása\"] }, \"Close sidebar\": { \"v\": [\"Oldalsáv bezárása\"] }, \"Favorite\": { \"v\": [\"Kedvenc\"] }, \"Open sidebar\": { \"v\": [\"Oldalsáv megnyitása\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Change name\": { \"v\": [\"Ubah nama\"] }, \"Close sidebar\": { \"v\": [\"Tutup bilah sisi\"] }, \"Favorite\": { \"v\": [\"Favorit\"] }, \"Open sidebar\": { \"v\": [\"Buka bilah sisi\"] } } }, { \"l\": \"is\", \"t\": { \"Change name\": { \"v\": [\"Breyta nafni\"] }, \"Close sidebar\": { \"v\": [\"Loka hliðarstiku\"] }, \"Favorite\": { \"v\": [\"Eftirlæti\"] }, \"Open sidebar\": { \"v\": [\"Opna hliðarspjald\"] } } }, { \"l\": \"it\", \"t\": { \"Change name\": { \"v\": [\"Cambia nome\"] }, \"Close sidebar\": { \"v\": [\"Chiudi la barra laterale\"] }, \"Favorite\": { \"v\": [\"Preferito\"] } } }, { \"l\": \"ja\", \"t\": { \"Change name\": { \"v\": [\"名前の変更\"] }, \"Close sidebar\": { \"v\": [\"サイドバーを閉じる\"] }, \"Favorite\": { \"v\": [\"お気に入り\"] }, \"Open sidebar\": { \"v\": [\"サイドバーを開く\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Change name\": { \"v\": [\"名前の変更\"] }, \"Close sidebar\": { \"v\": [\"サイドバーを閉じる\"] }, \"Favorite\": { \"v\": [\"お気に入り\"] }, \"Open sidebar\": { \"v\": [\"サイドバーを開く\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Change name\": { \"v\": [\"이름 변경\"] }, \"Close sidebar\": { \"v\": [\"사이드바 닫기\"] }, \"Favorite\": { \"v\": [\"즐겨찾기\"] }, \"Open sidebar\": { \"v\": [\"사이드바 열기\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Change name\": { \"v\": [\"ປ່ຽນຊື່\"] }, \"Close sidebar\": { \"v\": [\"ປິດແຖບດ້ານຂ້າງ\"] }, \"Favorite\": { \"v\": [\"ລາຍການທີ່ມັກ\"] }, \"Open sidebar\": { \"v\": [\"ເປີດແຖບດ້ານຂ້າງ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Change name\": { \"v\": [\"Pakeisti vardą\"] }, \"Close sidebar\": { \"v\": [\"Užverti šoninę juostą\"] }, \"Favorite\": { \"v\": [\"Mėgstamiausias\"] }, \"Open sidebar\": { \"v\": [\"Atverti šoninę juostą\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Change name\": { \"v\": [\"Промени име\"] }, \"Close sidebar\": { \"v\": [\"Затвори странична лента\"] }, \"Favorite\": { \"v\": [\"Фаворити\"] }, \"Open sidebar\": { \"v\": [\"Отвори странична лента\"] } } }, { \"l\": \"mn\", \"t\": { \"Change name\": { \"v\": [\"Нэр солих\"] }, \"Close sidebar\": { \"v\": [\"Хажуугийн самбарыг хаах\"] }, \"Favorite\": { \"v\": [\"Дуртай\"] }, \"Open sidebar\": { \"v\": [\"Хажуугийн самбарыг нээх\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Change name\": { \"v\": [\"Endre navn\"] }, \"Close sidebar\": { \"v\": [\"Lukk sidepanel\"] }, \"Favorite\": { \"v\": [\"Favoritt\"] }, \"Open sidebar\": { \"v\": [\"Åpne sidefelt\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Change name\": { \"v\": [\"Naam wijzigen\"] }, \"Close sidebar\": { \"v\": [\"Zijbalk sluiten\"] }, \"Favorite\": { \"v\": [\"Favoriet\"] }, \"Open sidebar\": { \"v\": [\"Zijbalk openen\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Change name\": { \"v\": [\"Zmień nazwę\"] }, \"Close sidebar\": { \"v\": [\"Zamknij pasek boczny\"] }, \"Favorite\": { \"v\": [\"Ulubiony\"] }, \"Open sidebar\": { \"v\": [\"Otwórz pasek boczny\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Change name\": { \"v\": [\"Mudar nome\"] }, \"Close sidebar\": { \"v\": [\"Fechar barra lateral\"] }, \"Favorite\": { \"v\": [\"Favorito\"] }, \"Open sidebar\": { \"v\": [\"Abrir barra lateral\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Change name\": { \"v\": [\"Alterar nome\"] }, \"Close sidebar\": { \"v\": [\"Fechar barra lateral\"] }, \"Favorite\": { \"v\": [\"Favorito\"] }, \"Open sidebar\": { \"v\": [\"Abrir barra lateral\"] } } }, { \"l\": \"ro\", \"t\": { \"Change name\": { \"v\": [\"Modifică numele\"] }, \"Close sidebar\": { \"v\": [\"Închide bara laterală\"] }, \"Favorite\": { \"v\": [\"Favorit\"] }, \"Open sidebar\": { \"v\": [\"Deschide bara laterală\"] } } }, { \"l\": \"ru\", \"t\": { \"Change name\": { \"v\": [\"Изменить имя\"] }, \"Close sidebar\": { \"v\": [\"Закрыть боковую панель\"] }, \"Favorite\": { \"v\": [\"Избранное\"] }, \"Open sidebar\": { \"v\": [\"Открыть боковую панель\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Change name\": { \"v\": [\"Zmeniť názov\"] }, \"Close sidebar\": { \"v\": [\"Zavrieť bočný panel\"] }, \"Favorite\": { \"v\": [\"Obľúbené\"] }, \"Open sidebar\": { \"v\": [\"Otvoriť bočný panel\"] } } }, { \"l\": \"sl\", \"t\": { \"Close sidebar\": { \"v\": [\"Zapri stransko vrstico\"] }, \"Favorite\": { \"v\": [\"Priljubljeno\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Change name\": { \"v\": [\"Измени назив\"] }, \"Close sidebar\": { \"v\": [\"Затвори бочну траку\"] }, \"Favorite\": { \"v\": [\"Омиљени\"] }, \"Open sidebar\": { \"v\": [\"Отвори бочну траку\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Change name\": { \"v\": [\"Ändra namn\"] }, \"Close sidebar\": { \"v\": [\"Stäng sidofältet\"] }, \"Favorite\": { \"v\": [\"Favorit\"] }, \"Open sidebar\": { \"v\": [\"Öppna sidofältet\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Change name\": { \"v\": [\"Adı değiştir\"] }, \"Close sidebar\": { \"v\": [\"Yan çubuğu kapat\"] }, \"Favorite\": { \"v\": [\"Sık kullanılanlara ekle\"] }, \"Open sidebar\": { \"v\": [\"Yan çubuğu aç\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Change name\": { \"v\": [\"Змінити назву\"] }, \"Close sidebar\": { \"v\": [\"Закрити бічну панель\"] }, \"Favorite\": { \"v\": [\"Із зірочкою\"] }, \"Open sidebar\": { \"v\": [\"Бокове меню\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Change name\": { \"v\": [\"Ismni o'zgartirish\"] }, \"Close sidebar\": { \"v\": [\"Yon panelni yoping\"] }, \"Favorite\": { \"v\": [\"Tanlangan\"] }, \"Open sidebar\": { \"v\": [\"Yon panelni oching\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Change name\": { \"v\": [\"修改名称\"] }, \"Close sidebar\": { \"v\": [\"关闭侧边栏\"] }, \"Favorite\": { \"v\": [\"喜爱\"] }, \"Open sidebar\": { \"v\": [\"打开侧边栏\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Change name\": { \"v\": [\"更改名稱\"] }, \"Close sidebar\": { \"v\": [\"關閉側邊欄\"] }, \"Favorite\": { \"v\": [\"喜愛\"] }, \"Open sidebar\": { \"v\": [\"打開側邊欄\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Change name\": { \"v\": [\"變更名稱\"] }, \"Close sidebar\": { \"v\": [\"關閉側邊欄\"] }, \"Favorite\": { \"v\": [\"最愛\"] }, \"Open sidebar\": { \"v\": [\"開啟側邊欄\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t15 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Clear search\": { \"v\": [\"محو البحث\"] } } }, { \"l\": \"ast\", \"t\": { \"Clear search\": { \"v\": [\"Borrar la busca\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Clear search\": { \"v\": [\"Vyčistit vyhledávání\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Clear search\": { \"v\": [\"Vyčistit vyhledávání\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Clear search\": { \"v\": [\"Ryd søgning\"] } } }, { \"l\": \"de\", \"t\": { \"Clear search\": { \"v\": [\"Suche leeren\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Clear search\": { \"v\": [\"Suche leeren\"] } } }, { \"l\": \"el\", \"t\": { \"Clear search\": { \"v\": [\"Εκκαθάριση αναζήτησης\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Clear search\": { \"v\": [\"Clear search\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Clear search\": { \"v\": [\"Limpiar búsqueda\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Clear search\": { \"v\": [\"Limpiar búsqueda\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Clear search\": { \"v\": [\"Limpiar búsqueda\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Clear search\": { \"v\": [\"Limpiar búsqueda\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Clear search\": { \"v\": [\"Tühjenda otsing\"] } } }, { \"l\": \"eu\", \"t\": { \"Clear search\": { \"v\": [\"Garbitu bilaketa\"] } } }, { \"l\": \"fa\", \"t\": { \"Clear search\": { \"v\": [\"پاک کردن جستجو\"] } } }, { \"l\": \"fi\", \"t\": { \"Clear search\": { \"v\": [\"Tyhjennä haku\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Clear search\": { \"v\": [\"Effacer la recherche\"] } } }, { \"l\": \"ga\", \"t\": { \"Clear search\": { \"v\": [\"Glan cuardach\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Clear search\": { \"v\": [\"Limpar a busca\"] } } }, { \"l\": \"he\", \"t\": { \"Clear search\": { \"v\": [\"פינוי חיפוש\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Clear search\": { \"v\": [\"Očisti pretraživanje\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Clear search\": { \"v\": [\"Keresés törlése\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Clear search\": { \"v\": [\"Bersihkan pencarian\"] } } }, { \"l\": \"is\", \"t\": { \"Clear search\": { \"v\": [\"Hreinsa leit\"] } } }, { \"l\": \"it\", \"t\": { \"Clear search\": { \"v\": [\"online\"] } } }, { \"l\": \"ja\", \"t\": { \"Clear search\": { \"v\": [\"検索をクリア\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Clear search\": { \"v\": [\"検索をクリア\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Clear search\": { \"v\": [\"검색 지우기\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Clear search\": { \"v\": [\"ລຶບການຄົ້ນຫາ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Clear search\": { \"v\": [\"Išvalyti paiešką\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Clear search\": { \"v\": [\"Исчисти пребарување\"] } } }, { \"l\": \"mn\", \"t\": { \"Clear search\": { \"v\": [\"Хайлтыг цэвэрлэх\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Clear search\": { \"v\": [\"Tøm søk\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Clear search\": { \"v\": [\"Zoekopdracht wissen\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Clear search\": { \"v\": [\"Wyczyść wyszukiwanie\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Clear search\": { \"v\": [\"Limpar pesquisa\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Clear search\": { \"v\": [\"Limpar pesquisa\"] } } }, { \"l\": \"ro\", \"t\": { \"Clear search\": { \"v\": [\"Golește căutarea\"] } } }, { \"l\": \"ru\", \"t\": { \"Clear search\": { \"v\": [\"Очистить поиск\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Clear search\": { \"v\": [\"Vymazať vyhľadávanie\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Clear search\": { \"v\": [\"Обриши претрагу\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Clear search\": { \"v\": [\"Rensa sökningen\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Clear search\": { \"v\": [\"Aramayı temizle\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Clear search\": { \"v\": [\"Очистити пошук\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Clear search\": { \"v\": [\"Qidiruvni tozalash\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Clear search\": { \"v\": [\"清除搜索\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Clear search\": { \"v\": [\"清除搜索\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Clear search\": { \"v\": [\"清除搜尋\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t16 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Clear selected\": { \"v\": [\"محو المحدّد\"] }, \"Deselect {option}\": { \"v\": [\"إلغاء تحديد {option}\"] }, \"Options\": { \"v\": [\"خيارات\"] } } }, { \"l\": \"ast\", \"t\": { \"Clear selected\": { \"v\": [\"Borrar lo seleicionao\"] }, \"Deselect {option}\": { \"v\": [\"Deseleicionar «{option}»\"] }, \"Options\": { \"v\": [\"Opciones\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Clear selected\": { \"v\": [\"Vyčistit vybrané\"] }, \"Deselect {option}\": { \"v\": [\"Zrušit výběr {option}\"] }, \"Options\": { \"v\": [\"Možnosti\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Clear selected\": { \"v\": [\"Vyčistit vybrané\"] }, \"Deselect {option}\": { \"v\": [\"Zrušit výběr {option}\"] }, \"Options\": { \"v\": [\"Možnosti\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Clear selected\": { \"v\": [\"Ryd valgte\"] }, \"Deselect {option}\": { \"v\": [\"Fravælg {option}\"] }, \"Options\": { \"v\": [\"Indstillinger\"] } } }, { \"l\": \"de\", \"t\": { \"Clear selected\": { \"v\": [\"Auswahl leeren\"] }, \"Deselect {option}\": { \"v\": [\"{option} abwählen\"] }, \"Options\": { \"v\": [\"Optionen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Clear selected\": { \"v\": [\"Auswahl leeren\"] }, \"Deselect {option}\": { \"v\": [\"{option} abwählen\"] }, \"Options\": { \"v\": [\"Optionen\"] } } }, { \"l\": \"el\", \"t\": { \"Clear selected\": { \"v\": [\"Εκκαθάριση επιλογής\"] }, \"Deselect {option}\": { \"v\": [\"Αποεπιλογή {option}\"] }, \"Options\": { \"v\": [\"Επιλογές\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Clear selected\": { \"v\": [\"Clear selected\"] }, \"Deselect {option}\": { \"v\": [\"Deselect {option}\"] }, \"Options\": { \"v\": [\"Options\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Clear selected\": { \"v\": [\"Limpiar selección\"] }, \"Deselect {option}\": { \"v\": [\"Deseleccionar {option}\"] }, \"Options\": { \"v\": [\"Opciones\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Clear selected\": { \"v\": [\"Limpiar selección\"] }, \"Deselect {option}\": { \"v\": [\"Deseleccionar {option}\"] }, \"Options\": { \"v\": [\"Opciones\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": {} }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Clear selected\": { \"v\": [\"Limpiar selección\"] }, \"Deselect {option}\": { \"v\": [\"Deseleccionar {option}\"] }, \"Options\": { \"v\": [\"Opciones\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Clear selected\": { \"v\": [\"Tühjenda valik\"] }, \"Deselect {option}\": { \"v\": [\"Eemalda {option} valik\"] }, \"Options\": { \"v\": [\"Valikud\"] } } }, { \"l\": \"eu\", \"t\": {} }, { \"l\": \"fa\", \"t\": { \"Clear selected\": { \"v\": [\"پاک کردن مورد انتخاب شده\"] }, \"Deselect {option}\": { \"v\": [\"لغو انتخاب {option}\"] }, \"Options\": { \"v\": [\"گزینه‌ها\"] } } }, { \"l\": \"fi\", \"t\": { \"Clear selected\": { \"v\": [\"Tyhjennä valitut\"] }, \"Deselect {option}\": { \"v\": [\"Poista valinta {option}\"] }, \"Options\": { \"v\": [\"Valinnat\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Clear selected\": { \"v\": [\"Vider la sélection\"] }, \"Deselect {option}\": { \"v\": [\"Désélectionner {option}\"] }, \"Options\": { \"v\": [\"Options\"] } } }, { \"l\": \"ga\", \"t\": { \"Clear selected\": { \"v\": [\"Glan roghnaithe\"] }, \"Deselect {option}\": { \"v\": [\"Díroghnaigh {option}\"] }, \"Options\": { \"v\": [\"Roghanna\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Clear selected\": { \"v\": [\"Limpar o seleccionado\"] }, \"Deselect {option}\": { \"v\": [\"Desmarcar {option}\"] }, \"Options\": { \"v\": [\"Opcións\"] } } }, { \"l\": \"he\", \"t\": {} }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Clear selected\": { \"v\": [\"Očisti odabir\"] }, \"Deselect {option}\": { \"v\": [\"Odznači {option}\"] }, \"Options\": { \"v\": [\"Mogućnosti\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Clear selected\": { \"v\": [\"Kijelölés törlése\"] }, \"Deselect {option}\": { \"v\": [\"{option} kijelölésének megszüntetése\"] }, \"Options\": { \"v\": [\"Beállítások\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Clear selected\": { \"v\": [\"Hapus terpilih\"] }, \"Deselect {option}\": { \"v\": [\"Batalkan pemilihan {option}\"] }, \"Options\": { \"v\": [\"Opsi\"] } } }, { \"l\": \"is\", \"t\": { \"Clear selected\": { \"v\": [\"Hreinsa valið\"] }, \"Deselect {option}\": { \"v\": [\"Afvelja {option}\"] }, \"Options\": { \"v\": [\"Valkostir\"] } } }, { \"l\": \"it\", \"t\": { \"Clear selected\": { \"v\": [\"Cancella selezionati\"] }, \"Deselect {option}\": { \"v\": [\"Deselezionare {option}\"] } } }, { \"l\": \"ja\", \"t\": { \"Clear selected\": { \"v\": [\"選択を解除\"] }, \"Deselect {option}\": { \"v\": [\"{option} の選択を解除\"] }, \"Options\": { \"v\": [\"オプション\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Clear selected\": { \"v\": [\"選択を解除\"] }, \"Deselect {option}\": { \"v\": [\"{option} の選択を解除\"] }, \"Options\": { \"v\": [\"オプション\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Clear selected\": { \"v\": [\"선택 항목 지우기\"] }, \"Deselect {option}\": { \"v\": [\"{option} 선택 해제\"] }, \"Options\": { \"v\": [\"옵션\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Clear selected\": { \"v\": [\"ລຶບສິ່ງທີ່ເລືອກ\"] }, \"Deselect {option}\": { \"v\": [\"ຍົກເລີກການເລືອກ {option}\"] }, \"Options\": { \"v\": [\"ຕົວເລືອກ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Clear selected\": { \"v\": [\"Išvalyti pasirinkimą\"] }, \"Deselect {option}\": { \"v\": [\"Panaikinkite {option} pasirinkimą\"] }, \"Options\": { \"v\": [\"Parinktys\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Clear selected\": { \"v\": [\"Исчисти означени\"] }, \"Deselect {option}\": { \"v\": [\"Откажи избор на {option}\"] }, \"Options\": { \"v\": [\"Опции\"] } } }, { \"l\": \"mn\", \"t\": { \"Clear selected\": { \"v\": [\"Сонголтыг цэвэрлэх\"] }, \"Deselect {option}\": { \"v\": [\"{option}-г сонголтоос хасах\"] }, \"Options\": { \"v\": [\"Тохиргоо\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Clear selected\": { \"v\": [\"Tøm merket\"] }, \"Deselect {option}\": { \"v\": [\"Opphev valg {option}\"] }, \"Options\": { \"v\": [\"Alternativer\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Clear selected\": { \"v\": [\"Selectie wissen\"] }, \"Deselect {option}\": { \"v\": [\"Selectie {option} opheffen\"] }, \"Options\": { \"v\": [\"Opties\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Clear selected\": { \"v\": [\"Wyczyść wybrane\"] }, \"Deselect {option}\": { \"v\": [\"Odznacz {option}\"] }, \"Options\": { \"v\": [\"Opcje\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Clear selected\": { \"v\": [\"Limpar selecionado\"] }, \"Deselect {option}\": { \"v\": [\"Desselecionar {option}\"] }, \"Options\": { \"v\": [\"Opções\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Clear selected\": { \"v\": [\"Limpeza selecionada\"] }, \"Deselect {option}\": { \"v\": [\"Desmarcar {option}\"] }, \"Options\": { \"v\": [\"Opções\"] } } }, { \"l\": \"ro\", \"t\": { \"Clear selected\": { \"v\": [\"Șterge selecția\"] }, \"Deselect {option}\": { \"v\": [\"Deselectează {option}\"] }, \"Options\": { \"v\": [\"Opțiuni\"] } } }, { \"l\": \"ru\", \"t\": { \"Clear selected\": { \"v\": [\"Снять выбор\"] }, \"Deselect {option}\": { \"v\": [\"Отменить выбор {option}\"] }, \"Options\": { \"v\": [\"Варианты\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Clear selected\": { \"v\": [\"Vymazať vybraté\"] }, \"Deselect {option}\": { \"v\": [\"Zrušiť výber {option}\"] }, \"Options\": { \"v\": [\"možnosti\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Clear selected\": { \"v\": [\"Обриши изабрано\"] }, \"Deselect {option}\": { \"v\": [\"Уклони избор {option}\"] }, \"Options\": { \"v\": [\"Опције\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Clear selected\": { \"v\": [\"Rensa valda\"] }, \"Deselect {option}\": { \"v\": [\"Avmarkera {option}\"] }, \"Options\": { \"v\": [\"Alternativ\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Clear selected\": { \"v\": [\"Seçilmişleri temizle\"] }, \"Deselect {option}\": { \"v\": [\"{option} bırak\"] }, \"Options\": { \"v\": [\"Seçenekler\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Clear selected\": { \"v\": [\"Очистити вибране\"] }, \"Deselect {option}\": { \"v\": [\"Зняти вибір {option}\"] }, \"Options\": { \"v\": [\"Параметри\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Clear selected\": { \"v\": [\"Tanlanganni tozalash\"] }, \"Deselect {option}\": { \"v\": [\"{option}tanlovni bekor qiling\"] }, \"Options\": { \"v\": [\"Variantlar\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Clear selected\": { \"v\": [\"清除所选\"] }, \"Deselect {option}\": { \"v\": [\"取消选择 {option}\"] }, \"Options\": { \"v\": [\"选项\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Clear selected\": { \"v\": [\"清除所選項目\"] }, \"Deselect {option}\": { \"v\": [\"取消選擇 {option}\"] }, \"Options\": { \"v\": [\"選項\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Clear selected\": { \"v\": [\"清除選定項目\"] }, \"Deselect {option}\": { \"v\": [\"取消選取 {option}\"] }, \"Options\": { \"v\": [\"選項\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t17 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Clear text\": { \"v\": [\"محو النص\"] }, \"Save changes\": { \"v\": [\"حفظ التغييرات\"] } } }, { \"l\": \"ast\", \"t\": { \"Clear text\": { \"v\": [\"Borrar el testu\"] }, \"Save changes\": { \"v\": [\"Guardar los cambeos\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Clear text\": { \"v\": [\"Netejar text\"] } } }, { \"l\": \"cs\", \"t\": { \"Clear text\": { \"v\": [\"Čitelný text\"] }, \"Save changes\": { \"v\": [\"Uložit změny\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Clear text\": { \"v\": [\"Čitelný text\"] }, \"Save changes\": { \"v\": [\"Uložit změny\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Clear text\": { \"v\": [\"Ryd tekst\"] }, \"Save changes\": { \"v\": [\"Gem ændringer\"] } } }, { \"l\": \"de\", \"t\": { \"Clear text\": { \"v\": [\"Klartext\"] }, \"Save changes\": { \"v\": [\"Änderungen speichern\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Clear text\": { \"v\": [\"Klartext\"] }, \"Save changes\": { \"v\": [\"Änderungen speichern\"] } } }, { \"l\": \"el\", \"t\": { \"Clear text\": { \"v\": [\"Εκκαθάριση κειμένου\"] }, \"Save changes\": { \"v\": [\"Αποθήκευση αλλαγών\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Clear text\": { \"v\": [\"Clear text\"] }, \"Save changes\": { \"v\": [\"Save changes\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Clear text\": { \"v\": [\"Limpiar texto\"] }, \"Save changes\": { \"v\": [\"Guardar cambios\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Clear text\": { \"v\": [\"Limpiar texto\"] }, \"Save changes\": { \"v\": [\"Guardar cambios\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Clear text\": { \"v\": [\"Limpiar texto\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Clear text\": { \"v\": [\"Limpiar texto\"] }, \"Save changes\": { \"v\": [\"Guardar cambios\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Clear text\": { \"v\": [\"Kustuta tekst\"] }, \"Save changes\": { \"v\": [\"Salvesta muudatused\"] } } }, { \"l\": \"eu\", \"t\": { \"Clear text\": { \"v\": [\"Garbitu testua\"] } } }, { \"l\": \"fa\", \"t\": { \"Clear text\": { \"v\": [\"پاک کردن متن\"] }, \"Save changes\": { \"v\": [\"ذخیرهٔ تغییرات\"] } } }, { \"l\": \"fi\", \"t\": { \"Clear text\": { \"v\": [\"Tyhjennä teksti\"] }, \"Save changes\": { \"v\": [\"Tallenna muutokset\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Clear text\": { \"v\": [\"Effacer le texte\"] }, \"Save changes\": { \"v\": [\"Enregistrer les modifications\"] } } }, { \"l\": \"ga\", \"t\": { \"Clear text\": { \"v\": [\"Glan téacs\"] }, \"Save changes\": { \"v\": [\"Sabháil na hathruithe\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Clear text\": { \"v\": [\"Limpar o texto\"] }, \"Save changes\": { \"v\": [\"Gardar os cambios\"] } } }, { \"l\": \"he\", \"t\": { \"Clear text\": { \"v\": [\"פינוי טקסט\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Clear text\": { \"v\": [\"Očisti tekst\"] }, \"Save changes\": { \"v\": [\"Spremi promjene\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Clear text\": { \"v\": [\"Szöveg törlése\"] }, \"Save changes\": { \"v\": [\"Változtatások mentése\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Clear text\": { \"v\": [\"Bersihkan teks\"] }, \"Save changes\": { \"v\": [\"Simpan perubahan\"] } } }, { \"l\": \"is\", \"t\": { \"Clear text\": { \"v\": [\"Hreinsa texta\"] }, \"Save changes\": { \"v\": [\"Vista breytingar\"] } } }, { \"l\": \"it\", \"t\": { \"Clear text\": { \"v\": [\"Cancella il testo\"] }, \"Save changes\": { \"v\": [\"Salva le modifiche\"] } } }, { \"l\": \"ja\", \"t\": { \"Clear text\": { \"v\": [\"テキストをクリア\"] }, \"Save changes\": { \"v\": [\"変更を保存\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Clear text\": { \"v\": [\"テキストをクリア\"] }, \"Save changes\": { \"v\": [\"変更を保存\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Clear text\": { \"v\": [\"텍스트 지우기\"] }, \"Save changes\": { \"v\": [\"변경 사항 저장\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Clear text\": { \"v\": [\"ລຶບຂໍ້ຄວາມ\"] }, \"Save changes\": { \"v\": [\"ບັນທຶກການປ່ຽນແປງ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Clear text\": { \"v\": [\"Išvalyti tekstą\"] }, \"Save changes\": { \"v\": [\"Įrašyti pakeitimus\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Clear text\": { \"v\": [\"Исчисти текст\"] }, \"Save changes\": { \"v\": [\"Зачувај промени\"] } } }, { \"l\": \"mn\", \"t\": { \"Clear text\": { \"v\": [\"Текстийг цэвэрлэх\"] }, \"Save changes\": { \"v\": [\"Өөрчлөлтийг хадгалах\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Clear text\": { \"v\": [\"Fjern tekst\"] }, \"Save changes\": { \"v\": [\"Lagre endringer\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Clear text\": { \"v\": [\"Tekst wissen\"] }, \"Save changes\": { \"v\": [\"Wijzigingen opslaan\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Clear text\": { \"v\": [\"Wyczyść tekst\"] }, \"Save changes\": { \"v\": [\"Zapisz zmiany\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Clear text\": { \"v\": [\"Limpar texto\"] }, \"Save changes\": { \"v\": [\"Salvar alterações\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Clear text\": { \"v\": [\"Limpar texto\"] }, \"Save changes\": { \"v\": [\"Gravar alterações\"] } } }, { \"l\": \"ro\", \"t\": { \"Clear text\": { \"v\": [\"Golește textul\"] }, \"Save changes\": { \"v\": [\"Salvează modificările\"] } } }, { \"l\": \"ru\", \"t\": { \"Clear text\": { \"v\": [\"Очистить текст\"] }, \"Save changes\": { \"v\": [\"Сохранить изменения\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Clear text\": { \"v\": [\"Vamazať text\"] }, \"Save changes\": { \"v\": [\"Uložiť zmeny\"] } } }, { \"l\": \"sl\", \"t\": { \"Clear text\": { \"v\": [\"Počisti besedilo\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Clear text\": { \"v\": [\"Обриши текст\"] }, \"Save changes\": { \"v\": [\"Сачувај измене\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Clear text\": { \"v\": [\"Rensa text\"] }, \"Save changes\": { \"v\": [\"Spara ändringar\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Clear text\": { \"v\": [\"Metni temizle\"] }, \"Save changes\": { \"v\": [\"Değişiklikleri kaydet\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Clear text\": { \"v\": [\"Очистити текст\"] }, \"Save changes\": { \"v\": [\"Зберегти зміни\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Clear text\": { \"v\": [\"Matnni tozalash\"] }, \"Save changes\": { \"v\": [\"O'zgarishlarni saqlang\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Clear text\": { \"v\": [\"清除文本\"] }, \"Save changes\": { \"v\": [\"保存修改\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Clear text\": { \"v\": [\"清除文本\"] }, \"Save changes\": { \"v\": [\"保存更改\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Clear text\": { \"v\": [\"清除文字\"] }, \"Save changes\": { \"v\": [\"儲存變更\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t18 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Close\": { \"v\": [\"إغلاق\"] } } }, { \"l\": \"ast\", \"t\": { \"Close\": { \"v\": [\"Zarrar\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": { \"Close\": { \"v\": [\"Serriñ\"] } } }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Close\": { \"v\": [\"Tanca\"] } } }, { \"l\": \"cs\", \"t\": { \"Close\": { \"v\": [\"Zavřít\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Close\": { \"v\": [\"Zavřít\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Close\": { \"v\": [\"Luk\"] } } }, { \"l\": \"de\", \"t\": { \"Close\": { \"v\": [\"Schließen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Close\": { \"v\": [\"Schließen\"] } } }, { \"l\": \"el\", \"t\": { \"Close\": { \"v\": [\"Κλείσιμο\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Close\": { \"v\": [\"Close\"] } } }, { \"l\": \"eo\", \"t\": { \"Close\": { \"v\": [\"Fermu\"] } } }, { \"l\": \"es\", \"t\": { \"Close\": { \"v\": [\"Cerrar\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Close\": { \"v\": [\"Cerrar\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Close\": { \"v\": [\"Cerrar\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Close\": { \"v\": [\"Cerrar\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Close\": { \"v\": [\"Sulge\"] } } }, { \"l\": \"eu\", \"t\": { \"Close\": { \"v\": [\"Itxi\"] } } }, { \"l\": \"fa\", \"t\": { \"Close\": { \"v\": [\"بستن\"] } } }, { \"l\": \"fi\", \"t\": { \"Close\": { \"v\": [\"Sulje\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Close\": { \"v\": [\"Fermer\"] } } }, { \"l\": \"ga\", \"t\": { \"Close\": { \"v\": [\"Dún\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Close\": { \"v\": [\"Pechar\"] } } }, { \"l\": \"he\", \"t\": { \"Close\": { \"v\": [\"סגירה\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Close\": { \"v\": [\"Zatvori\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Close\": { \"v\": [\"Bezárás\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Close\": { \"v\": [\"Tutup\"] } } }, { \"l\": \"is\", \"t\": { \"Close\": { \"v\": [\"Loka\"] } } }, { \"l\": \"it\", \"t\": { \"Close\": { \"v\": [\"Chiudi\"] } } }, { \"l\": \"ja\", \"t\": { \"Close\": { \"v\": [\"閉じる\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Close\": { \"v\": [\"閉じる\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Close\": { \"v\": [\"닫기\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Close\": { \"v\": [\"ປິດ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Close\": { \"v\": [\"Užverti\"] } } }, { \"l\": \"lv\", \"t\": { \"Close\": { \"v\": [\"Aizvērt\"] } } }, { \"l\": \"mk\", \"t\": { \"Close\": { \"v\": [\"Затвори\"] } } }, { \"l\": \"mn\", \"t\": { \"Close\": { \"v\": [\"Хаах\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": { \"Close\": { \"v\": [\"ပိတ်ရန်\"] } } }, { \"l\": \"nb\", \"t\": { \"Close\": { \"v\": [\"Lukk\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Close\": { \"v\": [\"Sluiten\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": { \"Close\": { \"v\": [\"Tampar\"] } } }, { \"l\": \"pl\", \"t\": { \"Close\": { \"v\": [\"Zamknij\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Close\": { \"v\": [\"Fechar\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Close\": { \"v\": [\"Fechar\"] } } }, { \"l\": \"ro\", \"t\": { \"Close\": { \"v\": [\"Închide\"] } } }, { \"l\": \"ru\", \"t\": { \"Close\": { \"v\": [\"Закрыть\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Close\": { \"v\": [\"Zavrieť\"] } } }, { \"l\": \"sl\", \"t\": { \"Close\": { \"v\": [\"Zapri\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Close\": { \"v\": [\"Затвори\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Close\": { \"v\": [\"Stäng\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Close\": { \"v\": [\"Kapat\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Close\": { \"v\": [\"Закрити\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Close\": { \"v\": [\"Yopish\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Close\": { \"v\": [\"关闭\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Close\": { \"v\": [\"關閉\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Close\": { \"v\": [\"關閉\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t19 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Close navigation\": { \"v\": [\"إغلاق التصفح\"] }, \"Open navigation {shortcut}\": { \"v\": [\"إفتَح المتصفح {shortcut}\"] } } }, { \"l\": \"ast\", \"t\": { \"Close navigation\": { \"v\": [\"Zarrar la navegación\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Close navigation\": { \"v\": [\"Tanca la navegació\"] } } }, { \"l\": \"cs\", \"t\": { \"Close navigation\": { \"v\": [\"Zavřít navigaci\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Otevřít navigaci {shortcut}\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Close navigation\": { \"v\": [\"Zavřít navigaci\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Close navigation\": { \"v\": [\"Luk navigation\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Åbn navigation {shortcut}\"] } } }, { \"l\": \"de\", \"t\": { \"Close navigation\": { \"v\": [\"Navigation schließen\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Navigation öffnen {shortcut}\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Close navigation\": { \"v\": [\"Navigation schließen\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Navigation öffnen {shortcut}\"] } } }, { \"l\": \"el\", \"t\": { \"Close navigation\": { \"v\": [\"Κλείσιμο πλοήγησης\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Άνοιγμα πλοήγησης {shortcut}\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Close navigation\": { \"v\": [\"Close navigation\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Open navigation {shortcut}\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Close navigation\": { \"v\": [\"Cerrar navegación\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Abrir navegación {shortcut}\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Close navigation\": { \"v\": [\"Cerrar navegación\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Abrir navegación {shortcut}\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Close navigation\": { \"v\": [\"Cerrar navegación\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Close navigation\": { \"v\": [\"Cerrar navegación\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Close navigation\": { \"v\": [\"Sulge navigatsioon\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Ava valik {shortcut}\"] } } }, { \"l\": \"eu\", \"t\": { \"Close navigation\": { \"v\": [\"Itxi nabigazioa\"] } } }, { \"l\": \"fa\", \"t\": { \"Close navigation\": { \"v\": [\"بستن بخش ناوبری\"] } } }, { \"l\": \"fi\", \"t\": { \"Close navigation\": { \"v\": [\"Sulje navigaatio\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Avaa navigaatio {shortcut}\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Close navigation\": { \"v\": [\"Fermer la navigation\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Ouvrir la navigation {shortcut}\"] } } }, { \"l\": \"ga\", \"t\": { \"Close navigation\": { \"v\": [\"Dún nascleanúint\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Oscail nascleanúint {shortcut}\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Close navigation\": { \"v\": [\"Pechar a navegación\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Abrir a navegación {shortcut}\"] } } }, { \"l\": \"he\", \"t\": { \"Close navigation\": { \"v\": [\"סגירת הניווט\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Close navigation\": { \"v\": [\"Zatvori navigaciju\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Close navigation\": { \"v\": [\"Navigáció bezárása\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Close navigation\": { \"v\": [\"Tutup navigasi\"] } } }, { \"l\": \"is\", \"t\": { \"Close navigation\": { \"v\": [\"Loka leiðsagnarsleða\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Opna flakkstýringu {shortcut}\"] } } }, { \"l\": \"it\", \"t\": { \"Close navigation\": { \"v\": [\"Chiudi la navigazione\"] } } }, { \"l\": \"ja\", \"t\": { \"Close navigation\": { \"v\": [\"ナビゲーションを閉じる\"] }, \"Open navigation {shortcut}\": { \"v\": [\"ナビゲーションを開く {shortcut}\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Close navigation\": { \"v\": [\"ナビゲーションを閉じる\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Close navigation\": { \"v\": [\"탐색 닫기\"] }, \"Open navigation {shortcut}\": { \"v\": [\"{shortcut} 탐색 열기\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Close navigation\": { \"v\": [\"ປິດການນຳທາງ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Close navigation\": { \"v\": [\"Užverti naršymą\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Close navigation\": { \"v\": [\"Затвори навигација\"] } } }, { \"l\": \"mn\", \"t\": { \"Close navigation\": { \"v\": [\"Навигацийг хаах\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Close navigation\": { \"v\": [\"Lukk navigasjon\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Close navigation\": { \"v\": [\"Navigatie sluiten\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Navigatie openen {shortcut}\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Close navigation\": { \"v\": [\"Zamknij nawigację\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Otwórz nawigację {shortcut}\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Close navigation\": { \"v\": [\"Fechar navegação\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Abrir navegação {shortcut}\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Close navigation\": { \"v\": [\"Fechar navegação\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Abrir navegação {shortcut}\"] } } }, { \"l\": \"ro\", \"t\": { \"Close navigation\": { \"v\": [\"Închide navigarea\"] } } }, { \"l\": \"ru\", \"t\": { \"Close navigation\": { \"v\": [\"Закрыть навигацию\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Открыть навигацию {shortcut}\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Close navigation\": { \"v\": [\"Zavrieť navigáciu\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Otvoriť navigáciu {shortcut}\"] } } }, { \"l\": \"sl\", \"t\": { \"Close navigation\": { \"v\": [\"Zapri krmarjenje\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Close navigation\": { \"v\": [\"Затвори навигацију\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Отвори навигацију {shortcut}\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Close navigation\": { \"v\": [\"Stäng navigeringen\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Öppna navigering {shortcut}\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Close navigation\": { \"v\": [\"Gezinmeyi kapat\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Gezinmeyi aç {shortcut}\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Close navigation\": { \"v\": [\"Закрити навігацію\"] }, \"Open navigation {shortcut}\": { \"v\": [\"Відкрити навігацію {shortcut}\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Close navigation\": { \"v\": [\"Navigatsiyani yopish\"] }, \"Open navigation {shortcut}\": { \"v\": [\" {shortcut} navigatsiyani oching\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Close navigation\": { \"v\": [\"关闭导航\"] }, \"Open navigation {shortcut}\": { \"v\": [\"打开导览{shortcut}\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Close navigation\": { \"v\": [\"關閉導航\"] }, \"Open navigation {shortcut}\": { \"v\": [\"開啟導航 {shortcut}\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Close navigation\": { \"v\": [\"關閉導航\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t20 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Collapse menu\": { \"v\": [\"طي القائمة\"] }, \"Open menu\": { \"v\": [\"إفتَح القائمة\"] } } }, { \"l\": \"ast\", \"t\": { \"Collapse menu\": { \"v\": [\"Recoyer el menú\"] }, \"Open menu\": { \"v\": [\"Abrir le menú\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Collapse menu\": { \"v\": [\"Sbalit nabídku\"] }, \"Open menu\": { \"v\": [\"Otevřít nabídku\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Collapse menu\": { \"v\": [\"Sbalit nabídku\"] }, \"Open menu\": { \"v\": [\"Otevřít nabídku\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Collapse menu\": { \"v\": [\"Skjul menuen\"] }, \"Open menu\": { \"v\": [\"Åbn menu\"] } } }, { \"l\": \"de\", \"t\": { \"Collapse menu\": { \"v\": [\"Menü einklappen\"] }, \"Open menu\": { \"v\": [\"Menü öffnen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Collapse menu\": { \"v\": [\"Menü einklappen\"] }, \"Open menu\": { \"v\": [\"Menü öffnen\"] } } }, { \"l\": \"el\", \"t\": { \"Collapse menu\": { \"v\": [\"Σύμπτυξη μενού\"] }, \"Open menu\": { \"v\": [\"Άνοιγμα μενού\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Collapse menu\": { \"v\": [\"Collapse menu\"] }, \"Open menu\": { \"v\": [\"Open menu\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Collapse menu\": { \"v\": [\"Ocultar menú\"] }, \"Open menu\": { \"v\": [\"Abrir menú\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Collapse menu\": { \"v\": [\"Ocultar menú\"] }, \"Open menu\": { \"v\": [\"Abrir menú\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Collapse menu\": { \"v\": [\"Ocultar menú\"] }, \"Open menu\": { \"v\": [\"Abrir menú\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Collapse menu\": { \"v\": [\"Ocultar menú\"] }, \"Open menu\": { \"v\": [\"Abrir menú\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Collapse menu\": { \"v\": [\"Ahenda menüü\"] }, \"Open menu\": { \"v\": [\"Ava menüü\"] } } }, { \"l\": \"eu\", \"t\": { \"Collapse menu\": { \"v\": [\"Tolestu menua\"] }, \"Open menu\": { \"v\": [\"Ireki menua\"] } } }, { \"l\": \"fa\", \"t\": { \"Collapse menu\": { \"v\": [\"بستن فهرست\"] }, \"Open menu\": { \"v\": [\"باز کردن فهرست\"] } } }, { \"l\": \"fi\", \"t\": { \"Collapse menu\": { \"v\": [\"Supista valikko\"] }, \"Open menu\": { \"v\": [\"Avaa valikko\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Collapse menu\": { \"v\": [\"Réduire le menu\"] }, \"Open menu\": { \"v\": [\"Ouvrir le menu\"] } } }, { \"l\": \"ga\", \"t\": { \"Collapse menu\": { \"v\": [\"Roghchlár Laghdaigh\"] }, \"Open menu\": { \"v\": [\"Roghchlár a oscailt\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Collapse menu\": { \"v\": [\"Contraer o menú\"] }, \"Open menu\": { \"v\": [\"Abrir o menú\"] } } }, { \"l\": \"he\", \"t\": { \"Collapse menu\": { \"v\": [\"צמצום התפריט\"] }, \"Open menu\": { \"v\": [\"פתיחת תפריט\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Collapse menu\": { \"v\": [\"Sakrij izbornik\"] }, \"Open menu\": { \"v\": [\"Otvori izbornik\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Collapse menu\": { \"v\": [\"Menü összecsukása\"] }, \"Open menu\": { \"v\": [\"Menü megnyitása\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Collapse menu\": { \"v\": [\"Ciutkan menu\"] }, \"Open menu\": { \"v\": [\"Buka menu\"] } } }, { \"l\": \"is\", \"t\": { \"Collapse menu\": { \"v\": [\"Fella valmynd saman\"] }, \"Open menu\": { \"v\": [\"Opna valmynd\"] } } }, { \"l\": \"it\", \"t\": { \"Collapse menu\": { \"v\": [\"Chiudi Menu\"] }, \"Open menu\": { \"v\": [\"Apri il menu\"] } } }, { \"l\": \"ja\", \"t\": { \"Collapse menu\": { \"v\": [\"メニューの折りたたみ\"] }, \"Open menu\": { \"v\": [\"メニューを開く\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Collapse menu\": { \"v\": [\"メニューの折りたたみ\"] }, \"Open menu\": { \"v\": [\"メニューを開く\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Collapse menu\": { \"v\": [\"메뉴 접기\"] }, \"Open menu\": { \"v\": [\"메뉴 열기\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Collapse menu\": { \"v\": [\"ຫຍໍ້ເມນູ\"] }, \"Open menu\": { \"v\": [\"ເປີດເມນູ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Collapse menu\": { \"v\": [\"Suskleisti meniu\"] }, \"Open menu\": { \"v\": [\"Atverti meniu\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Collapse menu\": { \"v\": [\"Скриј мени\"] }, \"Open menu\": { \"v\": [\"Отвори мени\"] } } }, { \"l\": \"mn\", \"t\": { \"Collapse menu\": { \"v\": [\"Цэсийг хураах\"] }, \"Open menu\": { \"v\": [\"Цэсийг нээх\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Collapse menu\": { \"v\": [\"Skjul meny\"] }, \"Open menu\": { \"v\": [\"Åpne meny\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Collapse menu\": { \"v\": [\"Menu inklappen\"] }, \"Open menu\": { \"v\": [\"Menu openen\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Collapse menu\": { \"v\": [\"Zwiń menu\"] }, \"Open menu\": { \"v\": [\"Otwórz menu\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Collapse menu\": { \"v\": [\"Recolher menu\"] }, \"Open menu\": { \"v\": [\"Abrir menu\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Collapse menu\": { \"v\": [\"Ocultar menu\"] }, \"Open menu\": { \"v\": [\"Abrir menu\"] } } }, { \"l\": \"ro\", \"t\": { \"Collapse menu\": { \"v\": [\"Restrânge meniul\"] }, \"Open menu\": { \"v\": [\"Deschide meniul\"] } } }, { \"l\": \"ru\", \"t\": { \"Collapse menu\": { \"v\": [\"Свернуть меню\"] }, \"Open menu\": { \"v\": [\"Открыть меню\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Collapse menu\": { \"v\": [\"Zbaliť menu\"] }, \"Open menu\": { \"v\": [\"Otvoriť menu\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Collapse menu\": { \"v\": [\"Сажми мени\"] }, \"Open menu\": { \"v\": [\"Отвори мени\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Collapse menu\": { \"v\": [\"Fäll ihop menyn\"] }, \"Open menu\": { \"v\": [\"Öppna menyn\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Collapse menu\": { \"v\": [\"Menüyü daralt\"] }, \"Open menu\": { \"v\": [\"Menüyü aç\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Collapse menu\": { \"v\": [\"Згорнути меню\"] }, \"Open menu\": { \"v\": [\"Відкрити меню\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Collapse menu\": { \"v\": [\"Menyuni yig‘ish\"] }, \"Open menu\": { \"v\": [\"Menyuni oching\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Collapse menu\": { \"v\": [\"收起菜单\"] }, \"Open menu\": { \"v\": [\"打开菜单\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Collapse menu\": { \"v\": [\"折疊選單\"] }, \"Open menu\": { \"v\": [\"開啟選單\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Collapse menu\": { \"v\": [\"折疊選單\"] }, \"Open menu\": { \"v\": [\"開啟選單\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t21 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": {} }, { \"l\": \"ast\", \"t\": {} }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Copied\": { \"v\": [\"Zkopírováno\"] }, \"Copy to clipboard\": { \"v\": [\"Zkopírovat do schránky\"] } } }, { \"l\": \"cs-CZ\", \"t\": {} }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Copied\": { \"v\": [\"Kopieret\"] }, \"Copy to clipboard\": { \"v\": [\"Kopiér til udklipsholderen\"] } } }, { \"l\": \"de\", \"t\": { \"Copied\": { \"v\": [\"Kopiert\"] }, \"Copy to clipboard\": { \"v\": [\"In die Zwischenablage kopieren\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Copied\": { \"v\": [\"Kopiert\"] }, \"Copy to clipboard\": { \"v\": [\"In die Zwischenablage kopieren\"] } } }, { \"l\": \"el\", \"t\": {} }, { \"l\": \"en-GB\", \"t\": { \"Copied\": { \"v\": [\"Copied\"] }, \"Copy to clipboard\": { \"v\": [\"Copy to clipboard\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": {} }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": {} }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": {} }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": {} }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Copied\": { \"v\": [\"Kopeeritud\"] }, \"Copy to clipboard\": { \"v\": [\"Kopeeri lõikelauale\"] } } }, { \"l\": \"eu\", \"t\": {} }, { \"l\": \"fa\", \"t\": {} }, { \"l\": \"fi\", \"t\": {} }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Copied\": { \"v\": [\"Copié\"] }, \"Copy to clipboard\": { \"v\": [\"Copier dans le presse-papiers\"] } } }, { \"l\": \"ga\", \"t\": { \"Copied\": { \"v\": [\"Cóipeáilte\"] }, \"Copy to clipboard\": { \"v\": [\"Cóipeáil chuig an ghearrthaisce\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Copied\": { \"v\": [\"Copiado\"] }, \"Copy to clipboard\": { \"v\": [\"Copiar ao portapapeis\"] } } }, { \"l\": \"he\", \"t\": {} }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Copied\": { \"v\": [\"Kopirano\"] }, \"Copy to clipboard\": { \"v\": [\"Kopiraj u međuspremnik\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Copied\": { \"v\": [\"Másolva\"] }, \"Copy to clipboard\": { \"v\": [\"Vágólapra másolás\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Copied\": { \"v\": [\"Disalin\"] }, \"Copy to clipboard\": { \"v\": [\"Salin ke clipboard\"] } } }, { \"l\": \"is\", \"t\": {} }, { \"l\": \"it\", \"t\": {} }, { \"l\": \"ja\", \"t\": { \"Copied\": { \"v\": [\"コピーされました\"] }, \"Copy to clipboard\": { \"v\": [\"クリップボードにコピー\"] } } }, { \"l\": \"ja-JP\", \"t\": {} }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Copied\": { \"v\": [\"복사됨\"] }, \"Copy to clipboard\": { \"v\": [\"클립보드로 복사\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Copied\": { \"v\": [\"ສຳເນົາແລ້ວ\"] }, \"Copy to clipboard\": { \"v\": [\"ສຳເນົາໃສ່ຄລິບບອດ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Copied\": { \"v\": [\"Nukopijuota\"] }, \"Copy to clipboard\": { \"v\": [\"Kopijuoti į iškarpinę\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Copied\": { \"v\": [\"Копирано\"] }, \"Copy to clipboard\": { \"v\": [\"Копирај во клипбоард\"] } } }, { \"l\": \"mn\", \"t\": { \"Copied\": { \"v\": [\"Хуулагдлаа\"] }, \"Copy to clipboard\": { \"v\": [\"Санах ой руу хуулах\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": {} }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Copied\": { \"v\": [\"Gekopieerd\"] }, \"Copy to clipboard\": { \"v\": [\"Kopieer naar klembord\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": {} }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Copied\": { \"v\": [\"Copiado\"] }, \"Copy to clipboard\": { \"v\": [\"Copiar para a área de transferência\"] } } }, { \"l\": \"pt-PT\", \"t\": {} }, { \"l\": \"ro\", \"t\": { \"Copied\": { \"v\": [\"Copiat\"] }, \"Copy to clipboard\": { \"v\": [\"Copiază în clipboard\"] } } }, { \"l\": \"ru\", \"t\": { \"Copied\": { \"v\": [\"Скопировано\"] }, \"Copy to clipboard\": { \"v\": [\"Скопировать в буфер обмена\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": {} }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": {} }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Copied\": { \"v\": [\"Kopierat\"] }, \"Copy to clipboard\": { \"v\": [\"Kopiera till urklipp\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Copied\": { \"v\": [\"Kopyalandı\"] }, \"Copy to clipboard\": { \"v\": [\"Panoya kopyalandı\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": {} }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Copied\": { \"v\": [\"Nusxalandi\"] }, \"Copy to clipboard\": { \"v\": [\"Buferga nusxalash\"] } } }, { \"l\": \"zh-CN\", \"t\": {} }, { \"l\": \"zh-HK\", \"t\": { \"Copied\": { \"v\": [\"已被複製\"] }, \"Copy to clipboard\": { \"v\": [\"複製到剪貼簿\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Copied\": { \"v\": [\"已被複製\"] }, \"Copy to clipboard\": { \"v\": [\"複製到剪貼簿\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t22 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Edit item\": { \"v\": [\"تعديل عنصر\"] } } }, { \"l\": \"ast\", \"t\": { \"Edit item\": { \"v\": [\"Editar l'elementu\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Edit item\": { \"v\": [\"Edita l'element\"] } } }, { \"l\": \"cs\", \"t\": { \"Edit item\": { \"v\": [\"Upravit položku\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Edit item\": { \"v\": [\"Upravit položku\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Edit item\": { \"v\": [\"Rediger element\"] } } }, { \"l\": \"de\", \"t\": { \"Edit item\": { \"v\": [\"Element bearbeiten\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Edit item\": { \"v\": [\"Element bearbeiten\"] } } }, { \"l\": \"el\", \"t\": { \"Edit item\": { \"v\": [\"Επεξεργασία αντικειμένου\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Edit item\": { \"v\": [\"Edit item\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Edit item\": { \"v\": [\"Editar elemento\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Edit item\": { \"v\": [\"Editar elemento\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Edit item\": { \"v\": [\"Editar elemento\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Edit item\": { \"v\": [\"Editar elemento\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Edit item\": { \"v\": [\"Muuda objekti\"] } } }, { \"l\": \"eu\", \"t\": { \"Edit item\": { \"v\": [\"Editatu elementua\"] } } }, { \"l\": \"fa\", \"t\": { \"Edit item\": { \"v\": [\"ویرایش مورد\"] } } }, { \"l\": \"fi\", \"t\": { \"Edit item\": { \"v\": [\"Muokkaa kohdetta\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Edit item\": { \"v\": [\"Modifier l’élément\"] } } }, { \"l\": \"ga\", \"t\": { \"Edit item\": { \"v\": [\"Cuir mír in eagar\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Edit item\": { \"v\": [\"Editar o elemento\"] } } }, { \"l\": \"he\", \"t\": { \"Edit item\": { \"v\": [\"עריכת פריט\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Edit item\": { \"v\": [\"Uredi stavku\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Edit item\": { \"v\": [\"Elem szerkesztése\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Edit item\": { \"v\": [\"Edit item\"] } } }, { \"l\": \"is\", \"t\": { \"Edit item\": { \"v\": [\"Breyta atriði\"] } } }, { \"l\": \"it\", \"t\": { \"Edit item\": { \"v\": [\"Modifica l'elemento\"] } } }, { \"l\": \"ja\", \"t\": { \"Edit item\": { \"v\": [\"編集\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Edit item\": { \"v\": [\"編集\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Edit item\": { \"v\": [\"항목 수정\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Edit item\": { \"v\": [\"ແກ້ໄຂລາຍການ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Edit item\": { \"v\": [\"Taisyti elementą\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Edit item\": { \"v\": [\"Уреди\"] } } }, { \"l\": \"mn\", \"t\": { \"Edit item\": { \"v\": [\"Зүйлийг засварлах\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Edit item\": { \"v\": [\"Rediger\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Edit item\": { \"v\": [\"Item bewerken\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Edit item\": { \"v\": [\"Edytuj element\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Edit item\": { \"v\": [\"Editar item\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Edit item\": { \"v\": [\"Editar item\"] } } }, { \"l\": \"ro\", \"t\": { \"Edit item\": { \"v\": [\"Editează elementul\"] } } }, { \"l\": \"ru\", \"t\": { \"Edit item\": { \"v\": [\"Изменить элемент\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Edit item\": { \"v\": [\"Upraviť položku\"] } } }, { \"l\": \"sl\", \"t\": { \"Edit item\": { \"v\": [\"Uredi predmet\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Edit item\": { \"v\": [\"Уреди ставку\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Edit item\": { \"v\": [\"Redigera objektet\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Edit item\": { \"v\": [\"Ögeyi düzenle\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Edit item\": { \"v\": [\"Редагувати елемент\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Edit item\": { \"v\": [\"Elementni tahrirlash\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Edit item\": { \"v\": [\"编辑项目\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Edit item\": { \"v\": [\"編輯項目\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Edit item\": { \"v\": [\"編輯項目\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t23 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": {} }, { \"l\": \"ast\", \"t\": {} }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Edit profile\": { \"v\": [\"Upravit profil\"] }, \"Loading actions\": { \"v\": [\"Načítání akcí\"] }, \"Loading profile\": { \"v\": [\"Načítání profilu\"] }, \"Local time: {time}\": { \"v\": [\"Místní čas: {time}\"] }, \"Profile of {user}\": { \"v\": [\"Profil uživatele {user}\"] }, \"Send message\": { \"v\": [\"Odeslat zprávu\"] }, \"Start call\": { \"v\": [\"Zahájit hovor\"] }, \"View profile\": { \"v\": [\"Zobrazit profil\"] } } }, { \"l\": \"cs-CZ\", \"t\": {} }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Edit profile\": { \"v\": [\"Rediger profil\"] }, \"Loading actions\": { \"v\": [\"Indlæser handlinger\"] }, \"Loading profile\": { \"v\": [\"Indlæser profil\"] }, \"Local time: {time}\": { \"v\": [\"Lokal tid: {time}\"] }, \"Profile of {user}\": { \"v\": [\"Profil for {user}\"] }, \"Send message\": { \"v\": [\"Send besked\"] }, \"Start call\": { \"v\": [\"Start opkald\"] }, \"View profile\": { \"v\": [\"Vis profil\"] } } }, { \"l\": \"de\", \"t\": { \"Edit profile\": { \"v\": [\"Profil bearbeiten\"] }, \"Loading actions\": { \"v\": [\"Aktionen werden geladen\"] }, \"Loading profile\": { \"v\": [\"Profil wird geladen\"] }, \"Local time: {time}\": { \"v\": [\"Ortszeit: {time}\"] }, \"Profile of {user}\": { \"v\": [\"Profil von {user}\"] }, \"Send message\": { \"v\": [\"Nachricht senden\"] }, \"Start call\": { \"v\": [\"Anruf starten\"] }, \"View profile\": { \"v\": [\"Profil anzeigen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Edit profile\": { \"v\": [\"Profil bearbeiten\"] }, \"Loading actions\": { \"v\": [\"Aktionen werden geladen\"] }, \"Loading profile\": { \"v\": [\"Profil wird geladen\"] }, \"Local time: {time}\": { \"v\": [\"Ortszeit: {time}\"] }, \"Profile of {user}\": { \"v\": [\"Profil von {user}\"] }, \"Send message\": { \"v\": [\"Nachricht senden\"] }, \"Start call\": { \"v\": [\"Anruf starten\"] }, \"View profile\": { \"v\": [\"Profil anzeigen\"] } } }, { \"l\": \"el\", \"t\": {} }, { \"l\": \"en-GB\", \"t\": { \"Edit profile\": { \"v\": [\"Edit profile\"] }, \"Loading actions\": { \"v\": [\"Loading actions\"] }, \"Loading profile\": { \"v\": [\"Loading profile\"] }, \"Local time: {time}\": { \"v\": [\"Local time: {time}\"] }, \"Profile of {user}\": { \"v\": [\"Profile of {user}\"] }, \"Send message\": { \"v\": [\"Send message\"] }, \"Start call\": { \"v\": [\"Start call\"] }, \"View profile\": { \"v\": [\"View profile\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": {} }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": {} }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": {} }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": {} }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Edit profile\": { \"v\": [\"Muuda profiili\"] }, \"Loading actions\": { \"v\": [\"Laadin tegevusi\"] }, \"Loading profile\": { \"v\": [\"Laadin profiili\"] }, \"Local time: {time}\": { \"v\": [\"Kohalik aeg: {time}\"] }, \"Profile of {user}\": { \"v\": [\"Kasutaja profiil: {user}\"] }, \"Send message\": { \"v\": [\"Saada sõnum\"] }, \"Start call\": { \"v\": [\"Helista\"] }, \"View profile\": { \"v\": [\"Vaata profiili\"] } } }, { \"l\": \"eu\", \"t\": {} }, { \"l\": \"fa\", \"t\": {} }, { \"l\": \"fi\", \"t\": {} }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Edit profile\": { \"v\": [\"Modifier le profil\"] }, \"Loading actions\": { \"v\": [\"Chargement des actions\"] }, \"Loading profile\": { \"v\": [\"Chargement du profil\"] }, \"Local time: {time}\": { \"v\": [\"Heure locale : {time}\"] }, \"Profile of {user}\": { \"v\": [\"Profil de {user}\"] }, \"Send message\": { \"v\": [\"Envoyer un message\"] }, \"Start call\": { \"v\": [\"Lancer un appel\"] }, \"View profile\": { \"v\": [\"Voir le profil\"] } } }, { \"l\": \"ga\", \"t\": { \"Edit profile\": { \"v\": [\"Cuir an phróifíl in eagar\"] }, \"Loading actions\": { \"v\": [\"Ag luchtú gníomhartha\"] }, \"Loading profile\": { \"v\": [\"Ag luchtú an phróifíle\"] }, \"Local time: {time}\": { \"v\": [\"Am áitiúil: {time}\"] }, \"Profile of {user}\": { \"v\": [\"Próifíl {user}\"] }, \"Send message\": { \"v\": [\"Seol teachtaireacht\"] }, \"Start call\": { \"v\": [\"Cuir tús leis an nglao\"] }, \"View profile\": { \"v\": [\"Féach ar an bpróifíl\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": {} }, { \"l\": \"he\", \"t\": {} }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": {} }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": {} }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": {} }, { \"l\": \"is\", \"t\": {} }, { \"l\": \"it\", \"t\": {} }, { \"l\": \"ja\", \"t\": { \"Edit profile\": { \"v\": [\"プロフィールを編集する\"] }, \"Loading actions\": { \"v\": [\"アクションの読み込み中\"] }, \"Loading profile\": { \"v\": [\"プロフィールを読み込み中\"] }, \"Local time: {time}\": { \"v\": [\"現地時間:{time}\"] }, \"Profile of {user}\": { \"v\": [\"{user}のプロフィール\"] }, \"Send message\": { \"v\": [\"メッセージを送信\"] }, \"Start call\": { \"v\": [\"通話を開始する\"] }, \"View profile\": { \"v\": [\"プロフィールを表示\"] } } }, { \"l\": \"ja-JP\", \"t\": {} }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": {} }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": {} }, { \"l\": \"lt-LT\", \"t\": {} }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": {} }, { \"l\": \"mn\", \"t\": {} }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": {} }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": {} }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": {} }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Edit profile\": { \"v\": [\"Editar perfil\"] }, \"Loading actions\": { \"v\": [\"Carregando ações\"] }, \"Loading profile\": { \"v\": [\"Carregando perfil\"] }, \"Local time: {time}\": { \"v\": [\"Hora local: {time}\"] }, \"Profile of {user}\": { \"v\": [\"Perfil de {user}\"] }, \"Send message\": { \"v\": [\"Enviar mensagem\"] }, \"Start call\": { \"v\": [\"Iniciar chamada\"] }, \"View profile\": { \"v\": [\"Ver perfil\"] } } }, { \"l\": \"pt-PT\", \"t\": {} }, { \"l\": \"ro\", \"t\": { \"Edit profile\": { \"v\": [\"Editează profilul\"] }, \"Loading actions\": { \"v\": [\"Se încarcă acțiunile\"] }, \"Loading profile\": { \"v\": [\"Se încarcă profilul\"] }, \"Local time: {time}\": { \"v\": [\"Ora locală: {time}\"] }, \"Profile of {user}\": { \"v\": [\"Profilul lui {user}\"] }, \"Send message\": { \"v\": [\"Trimite mesajul\"] }, \"Start call\": { \"v\": [\"Începe apelul\"] }, \"View profile\": { \"v\": [\"Vezi profilul\"] } } }, { \"l\": \"ru\", \"t\": { \"Edit profile\": { \"v\": [\"Изменить профиль\"] }, \"Loading actions\": { \"v\": [\"Загрузка действий\"] }, \"Loading profile\": { \"v\": [\"Загрузка профиля\"] }, \"Local time: {time}\": { \"v\": [\"Местное время: {time}\"] }, \"Profile of {user}\": { \"v\": [\"Профиль {user}\"] }, \"Send message\": { \"v\": [\"Отправить сообщение\"] }, \"Start call\": { \"v\": [\"Начать звонок\"] }, \"View profile\": { \"v\": [\"Открыть профиль\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": {} }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": {} }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Edit profile\": { \"v\": [\"Redigera profil\"] }, \"Loading actions\": { \"v\": [\"Läser in åtgärder\"] }, \"Loading profile\": { \"v\": [\"Läser in profil\"] }, \"Local time: {time}\": { \"v\": [\"Lokal tid: {time}\"] }, \"Profile of {user}\": { \"v\": [\"Profil för {user}\"] }, \"Send message\": { \"v\": [\"Skicka meddelande\"] }, \"Start call\": { \"v\": [\"Starta samtal\"] }, \"View profile\": { \"v\": [\"Visa profil\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Edit profile\": { \"v\": [\"Profili düzenle\"] }, \"Loading actions\": { \"v\": [\"İşlemler yükleniyor\"] }, \"Loading profile\": { \"v\": [\"Profil yükleniyor\"] }, \"Local time: {time}\": { \"v\": [\"Yerel zaman: {time}\"] }, \"Profile of {user}\": { \"v\": [\"{user} profili\"] }, \"Send message\": { \"v\": [\"İleti gönder\"] }, \"Start call\": { \"v\": [\"Çağrı başlat\"] }, \"View profile\": { \"v\": [\"Profili görüntüle\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": {} }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": {} }, { \"l\": \"zh-CN\", \"t\": {} }, { \"l\": \"zh-HK\", \"t\": { \"Edit profile\": { \"v\": [\"編輯個人資料\"] }, \"Loading actions\": { \"v\": [\"正在載入操作\"] }, \"Loading profile\": { \"v\": [\"正在載入個人資料\"] }, \"Local time: {time}\": { \"v\": [\"當地時間:{time}\"] }, \"Profile of {user}\": { \"v\": [\"{user} 的個人資料\"] }, \"Send message\": { \"v\": [\"傳送訊息\"] }, \"Start call\": { \"v\": [\"開始通話\"] }, \"View profile\": { \"v\": [\"查看個人資料\"] } } }, { \"l\": \"zh-TW\", \"t\": {} }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t24 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Enable interactive view\": { \"v\": [\"تمكين المنظور التفاعلي\"] } } }, { \"l\": \"ast\", \"t\": { \"Enable interactive view\": { \"v\": [\"Activar la vista interactiva\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Enable interactive view\": { \"v\": [\"Zapnout interaktivní zobrazení\"] }, \"Widget height\": { \"v\": [\"Výška ovládacího prvku\"] } } }, { \"l\": \"cs-CZ\", \"t\": {} }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Enable interactive view\": { \"v\": [\"Aktivér interaktiv visning\"] }, \"Widget height\": { \"v\": [\"Widgethøjde\"] } } }, { \"l\": \"de\", \"t\": { \"Enable interactive view\": { \"v\": [\"Die interaktive Ansicht aktivieren\"] }, \"Widget height\": { \"v\": [\"Widget-Höhe\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Enable interactive view\": { \"v\": [\"Die interaktive Ansicht aktivieren\"] }, \"Widget height\": { \"v\": [\"Widget-Höhe\"] } } }, { \"l\": \"el\", \"t\": { \"Enable interactive view\": { \"v\": [\"Ενεργοποίηση διαδραστικής προβολής\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Enable interactive view\": { \"v\": [\"Enable interactive view\"] }, \"Widget height\": { \"v\": [\"Widget height\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Enable interactive view\": { \"v\": [\"Habilitar vista interactiva\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Enable interactive view\": { \"v\": [\"Habilitar vista interactiva\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": {} }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Enable interactive view\": { \"v\": [\"Habilitar vista interactiva\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Enable interactive view\": { \"v\": [\"Lülita interaktiivne vaade sisse\"] }, \"Widget height\": { \"v\": [\"Vidina kõrgus\"] } } }, { \"l\": \"eu\", \"t\": {} }, { \"l\": \"fa\", \"t\": { \"Enable interactive view\": { \"v\": [\"فعال‌سازی نمای تعاملی\"] } } }, { \"l\": \"fi\", \"t\": { \"Enable interactive view\": { \"v\": [\"Näytä vuorovaikutteinen näkymä\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Enable interactive view\": { \"v\": [\"Activer la vue interactive\"] }, \"Widget height\": { \"v\": [\"Hauteur du widget\"] } } }, { \"l\": \"ga\", \"t\": { \"Enable interactive view\": { \"v\": [\"Cumasaigh amharc idirghníomhach\"] }, \"Widget height\": { \"v\": [\"Airde an ghiuirléid\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Enable interactive view\": { \"v\": [\"Activar a vista interactiva\"] } } }, { \"l\": \"he\", \"t\": {} }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Enable interactive view\": { \"v\": [\"Omogući interaktivni prikaz\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Enable interactive view\": { \"v\": [\"Interaktív nézet engedélyezése\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Enable interactive view\": { \"v\": [\"Aktifkan tampilan interaktif\"] } } }, { \"l\": \"is\", \"t\": { \"Enable interactive view\": { \"v\": [\"Virkja gagnvirka sýn\"] } } }, { \"l\": \"it\", \"t\": {} }, { \"l\": \"ja\", \"t\": { \"Enable interactive view\": { \"v\": [\"インタラクティブ・ビューを有効にする\"] }, \"Widget height\": { \"v\": [\"ウィジェットの高さ\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Enable interactive view\": { \"v\": [\"インタラクティブ・ビューを有効にする\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Enable interactive view\": { \"v\": [\"대화형 보기 활성화\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Enable interactive view\": { \"v\": [\"ເປີດໃຊ້ງານມຸມມອງໂຕ້ຕອບ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Enable interactive view\": { \"v\": [\"Įgalinti interaktyvų vaizdą\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Enable interactive view\": { \"v\": [\"Овозможи интерактивен приказ\"] } } }, { \"l\": \"mn\", \"t\": { \"Enable interactive view\": { \"v\": [\"Интерактив харагдацыг идэвхжүүлэх\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Enable interactive view\": { \"v\": [\"Aktiver interaktiv visning\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Enable interactive view\": { \"v\": [\"Interactieve weergave inschakelen\"] }, \"Widget height\": { \"v\": [\"Hoogte van widget\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Enable interactive view\": { \"v\": [\"Włącz widok interaktywny\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Enable interactive view\": { \"v\": [\"Ativar visualização interativa\"] }, \"Widget height\": { \"v\": [\"Altura do widget\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Enable interactive view\": { \"v\": [\"Ativar vista interativa\"] } } }, { \"l\": \"ro\", \"t\": { \"Enable interactive view\": { \"v\": [\"Activează vizualizarea interactivă\"] }, \"Widget height\": { \"v\": [\"Înălțimea widgetului\"] } } }, { \"l\": \"ru\", \"t\": { \"Enable interactive view\": { \"v\": [\"Включить интерактивный просмотр\"] }, \"Widget height\": { \"v\": [\"Высота виджета\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Enable interactive view\": { \"v\": [\"Povoliť interaktívny pohľad\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Enable interactive view\": { \"v\": [\"Укључи интерактивни приказ\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Enable interactive view\": { \"v\": [\"Aktivera interaktiv vy\"] }, \"Widget height\": { \"v\": [\"Widgethöjd\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Enable interactive view\": { \"v\": [\"Etkileşimli görünümü aç\"] }, \"Widget height\": { \"v\": [\"Araç takımı yüksekliği\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Enable interactive view\": { \"v\": [\"Увімкнути інтерактивний перегляд\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Enable interactive view\": { \"v\": [\"Interaktiv ko'rinishni yoqing\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Enable interactive view\": { \"v\": [\"启用交互视窗\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Enable interactive view\": { \"v\": [\"啟用互動視圖\"] }, \"Widget height\": { \"v\": [\"小工具高度\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Enable interactive view\": { \"v\": [\"啟用互動檢視\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t25 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Enter link\": { \"v\": [\"أدخِل الرابط\"] } } }, { \"l\": \"ast\", \"t\": { \"Enter link\": { \"v\": [\"Introducir l'enllaz\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Enter link\": { \"v\": [\"Zadat odkaz\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Enter link\": { \"v\": [\"Zadat odkaz\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Enter link\": { \"v\": [\"Indtast link\"] } } }, { \"l\": \"de\", \"t\": { \"Enter link\": { \"v\": [\"Link eingeben\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Enter link\": { \"v\": [\"Link eingeben\"] } } }, { \"l\": \"el\", \"t\": { \"Enter link\": { \"v\": [\"Εισάγετε σύνδεσμο\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Enter link\": { \"v\": [\"Enter link\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Enter link\": { \"v\": [\"Ingrese enlace\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Enter link\": { \"v\": [\"Ingresar enlace\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Enter link\": { \"v\": [\"Ingresar enlace\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Enter link\": { \"v\": [\"Ingresar enlace\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Enter link\": { \"v\": [\"Sisesta link\"] } } }, { \"l\": \"eu\", \"t\": { \"Enter link\": { \"v\": [\"Sartu esteka\"] } } }, { \"l\": \"fa\", \"t\": { \"Enter link\": { \"v\": [\"لینک را وارد کنید\"] } } }, { \"l\": \"fi\", \"t\": { \"Enter link\": { \"v\": [\"Kirjoita linkki\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Enter link\": { \"v\": [\"Saisissez le lien\"] } } }, { \"l\": \"ga\", \"t\": { \"Enter link\": { \"v\": [\"Cuir isteach nasc\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Enter link\": { \"v\": [\"Introducir a ligazón\"] } } }, { \"l\": \"he\", \"t\": { \"Enter link\": { \"v\": [\"מילוי קישור\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Enter link\": { \"v\": [\"Unesi poveznicu\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Enter link\": { \"v\": [\"Adja meg a hivatkozást\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Enter link\": { \"v\": [\"Masukkan tautan\"] } } }, { \"l\": \"is\", \"t\": { \"Enter link\": { \"v\": [\"Settu inn tengil\"] } } }, { \"l\": \"it\", \"t\": { \"Enter link\": { \"v\": [\"Inserire il link\"] } } }, { \"l\": \"ja\", \"t\": { \"Enter link\": { \"v\": [\"リンクを入力する\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Enter link\": { \"v\": [\"リンクを入力する\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Enter link\": { \"v\": [\"링크 입력\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Enter link\": { \"v\": [\"ປ້ອນລິງ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Enter link\": { \"v\": [\"Įvesti nuorodą\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Enter link\": { \"v\": [\"Внеси линк\"] } } }, { \"l\": \"mn\", \"t\": { \"Enter link\": { \"v\": [\"Холбоос оруулах\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Enter link\": { \"v\": [\"Skriv inn lenken\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Enter link\": { \"v\": [\"Link invoeren\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Enter link\": { \"v\": [\"Wprowadź link\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Enter link\": { \"v\": [\"Insira o link\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Enter link\": { \"v\": [\"Inserir hiperligação\"] } } }, { \"l\": \"ro\", \"t\": { \"Enter link\": { \"v\": [\"Introdu linkul\"] } } }, { \"l\": \"ru\", \"t\": { \"Enter link\": { \"v\": [\"Введите ссылку\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Enter link\": { \"v\": [\"Vložiť link\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Enter link\": { \"v\": [\"Унесите линк\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Enter link\": { \"v\": [\"Ange en länk\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Enter link\": { \"v\": [\"Bağlantıyı yazın\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Enter link\": { \"v\": [\"Зазначте посилання\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Enter link\": { \"v\": [\"Havolani kiriting\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Enter link\": { \"v\": [\"输入链接\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Enter link\": { \"v\": [\"輸入連結\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Enter link\": { \"v\": [\"輸入連結\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t26 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"External documentation for {name}\": { \"v\": [\"التوثيق الخارجي لـ {name}\"] } } }, { \"l\": \"ast\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Documentación esterna pa: {name}\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Externí dokumentace pro {name}\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Externí dokumentace pro {name}\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Ekstern dokumentation for {name}\"] } } }, { \"l\": \"de\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Externe Dokumentation für {name}\"] } } }, { \"l\": \"de-DE\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Externe Dokumentation für {name}\"] } } }, { \"l\": \"el\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Εξωτερική τεκμηρίωση για {name}\"] } } }, { \"l\": \"en-GB\", \"t\": { \"External documentation for {name}\": { \"v\": [\"External documentation for {name}\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Documentación externa para {name}\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Documentación externa para {name}\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Documentación externa para {name}\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Documentación externa para {name}\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Väline dokumentatsioon {nimi}\"] } } }, { \"l\": \"eu\", \"t\": { \"External documentation for {name}\": { \"v\": [\"{name}-ren kanpoko dokumentazioa\"] } } }, { \"l\": \"fa\", \"t\": { \"External documentation for {name}\": { \"v\": [\"اسناد بیرونی برای {name}\"] } } }, { \"l\": \"fi\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Ulkoinen dokumentaatio {name}lle\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Documentation externe pour {name}\"] } } }, { \"l\": \"ga\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Doiciméadúchán seachtrach le haghaidh {name}\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Documentación externa para {name}\"] } } }, { \"l\": \"he\", \"t\": { \"External documentation for {name}\": { \"v\": [\"תיעוד חיצוני עבור {name}\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": {} }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": {} }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Dokumentasi eksternal untuk {name}\"] } } }, { \"l\": \"is\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Utanaðkomandi leiðbeiningar fyrir {name}\"] } } }, { \"l\": \"it\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Documentazione esterna per {name}\"] } } }, { \"l\": \"ja\", \"t\": { \"External documentation for {name}\": { \"v\": [\"{name} の外部ドキュメント\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"External documentation for {name}\": { \"v\": [\"{name} の外部ドキュメント\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"External documentation for {name}\": { \"v\": [\"{name}의 외부 문서\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": {} }, { \"l\": \"lt-LT\", \"t\": {} }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": {} }, { \"l\": \"mn\", \"t\": {} }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Ekstern dokumentasjon for {name}\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Externe documentatie voor {name}\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Dokumentacja zewnętrzna dla {name}\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Documentação externa para {name}\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Documentação externa para {name}\"] } } }, { \"l\": \"ro\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Documentație externă pentru {name}\"] } } }, { \"l\": \"ru\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Внешняя документация для {name}\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Externá dokumentácia pre {name}\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Спољна документација за {name}\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Extern dokumentation för {name}\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"External documentation for {name}\": { \"v\": [\"{name} için dış belgeler\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"External documentation for {name}\": { \"v\": [\"Зовнішня документація для {name}\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"External documentation for {name}\": { \"v\": [\"{name}uchun tashqi hujjatlar\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"External documentation for {name}\": { \"v\": [\"{name} 的外部文档\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"External documentation for {name}\": { \"v\": [\"{name} 的外部文件\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"External documentation for {name}\": { \"v\": [\"{name} 的外部文件\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t27 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Go back to the list\": { \"v\": [\"عودة إلى القائمة\"] } } }, { \"l\": \"ast\", \"t\": { \"Go back to the list\": { \"v\": [\"Volver a la llista\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Go back to the list\": { \"v\": [\"Torna a la llista\"] } } }, { \"l\": \"cs\", \"t\": { \"Go back to the list\": { \"v\": [\"Jít zpět na seznam\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Go back to the list\": { \"v\": [\"Jít zpět na seznam\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Go back to the list\": { \"v\": [\"Tilbage til listen\"] } } }, { \"l\": \"de\", \"t\": { \"Go back to the list\": { \"v\": [\"Zurück zur Liste\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Go back to the list\": { \"v\": [\"Zurück zur Liste\"] } } }, { \"l\": \"el\", \"t\": { \"Go back to the list\": { \"v\": [\"Επιστροφή στην αρχική λίστα\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Go back to the list\": { \"v\": [\"Go back to the list\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Go back to the list\": { \"v\": [\"Volver a la lista\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Go back to the list\": { \"v\": [\"Volver a la lista\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Go back to the list\": { \"v\": [\"Volver a la lista\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Go back to the list\": { \"v\": [\"Regresar a la lista\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Go back to the list\": { \"v\": [\"Tagasi nimekirja juurde\"] } } }, { \"l\": \"eu\", \"t\": { \"Go back to the list\": { \"v\": [\"Bueltatu zerrendara\"] } } }, { \"l\": \"fa\", \"t\": { \"Go back to the list\": { \"v\": [\"برگشت به لیست\"] } } }, { \"l\": \"fi\", \"t\": { \"Go back to the list\": { \"v\": [\"Takaisin listaan\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Go back to the list\": { \"v\": [\"Retourner à la liste\"] } } }, { \"l\": \"ga\", \"t\": { \"Go back to the list\": { \"v\": [\"Téigh ar ais go dtí an liosta\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Go back to the list\": { \"v\": [\"Volver á lista\"] } } }, { \"l\": \"he\", \"t\": { \"Go back to the list\": { \"v\": [\"חזרה לרשימה\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Go back to the list\": { \"v\": [\"Vrati se na popis\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Go back to the list\": { \"v\": [\"Ugrás vissza a listához\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Go back to the list\": { \"v\": [\"Kembali ke daftar\"] } } }, { \"l\": \"is\", \"t\": { \"Go back to the list\": { \"v\": [\"Fara til baka í listann\"] } } }, { \"l\": \"it\", \"t\": { \"Go back to the list\": { \"v\": [\"Torna all'elenco\"] } } }, { \"l\": \"ja\", \"t\": { \"Go back to the list\": { \"v\": [\"リストに戻る\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Go back to the list\": { \"v\": [\"リストに戻る\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Go back to the list\": { \"v\": [\"목록으로 돌아가기\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Go back to the list\": { \"v\": [\"ກັບໄປທີ່ລາຍການ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Go back to the list\": { \"v\": [\"Grįžti į sąrašą\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Go back to the list\": { \"v\": [\"Врати се на листата\"] } } }, { \"l\": \"mn\", \"t\": { \"Go back to the list\": { \"v\": [\"Жагсаалт руу буцах\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Go back to the list\": { \"v\": [\"Gå tilbake til listen\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Go back to the list\": { \"v\": [\"Ga terug naar de lijst\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Go back to the list\": { \"v\": [\"Powrót do listy\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Go back to the list\": { \"v\": [\"Voltar para a lista\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Go back to the list\": { \"v\": [\"Voltar para a lista\"] } } }, { \"l\": \"ro\", \"t\": { \"Go back to the list\": { \"v\": [\"Înapoi la listă\"] } } }, { \"l\": \"ru\", \"t\": { \"Go back to the list\": { \"v\": [\"Вернуться к списку\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Go back to the list\": { \"v\": [\"Späť na zoznam\"] } } }, { \"l\": \"sl\", \"t\": { \"Go back to the list\": { \"v\": [\"Vrni se na seznam\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Go back to the list\": { \"v\": [\"Назад на листу\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Go back to the list\": { \"v\": [\"Gå tillbaka till listan\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Go back to the list\": { \"v\": [\"Listeye dön\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Go back to the list\": { \"v\": [\"Повернутися до списку\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Go back to the list\": { \"v\": [\"Ro'yxatga qayting\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Go back to the list\": { \"v\": [\"返回至列表\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Go back to the list\": { \"v\": [\"返回清單\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Go back to the list\": { \"v\": [\"回到清單\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t28 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Hide details\": { \"v\": [\"أخفِ التفاصيل\"] }, \"Rename project\": { \"v\": [\"تغيير اسم المشروع\"] }, \"Show details\": { \"v\": [\"أظهِر التفاصيل\"] } } }, { \"l\": \"ast\", \"t\": {} }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Hide details\": { \"v\": [\"Skrýt podrobnosti\"] }, \"Rename project\": { \"v\": [\"Přejmenovat projekt\"] }, \"Show details\": { \"v\": [\"Zobrazit podrobnosti\"] } } }, { \"l\": \"cs-CZ\", \"t\": {} }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Hide details\": { \"v\": [\"Skjul detaljer\"] }, \"Rename project\": { \"v\": [\"Omdøb projekt\"] }, \"Show details\": { \"v\": [\"Vis detaljer\"] } } }, { \"l\": \"de\", \"t\": { \"Hide details\": { \"v\": [\"Details ausblenden\"] }, \"Rename project\": { \"v\": [\"Projekt umbenennen\"] }, \"Show details\": { \"v\": [\"Details anzeigen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Hide details\": { \"v\": [\"Details ausblenden\"] }, \"Rename project\": { \"v\": [\"Projekt umbenennen\"] }, \"Show details\": { \"v\": [\"Details anzeigen\"] } } }, { \"l\": \"el\", \"t\": { \"Hide details\": { \"v\": [\"Απόκρυψη λεπτομερειών\"] }, \"Rename project\": { \"v\": [\"Μετονομασία έργου\"] }, \"Show details\": { \"v\": [\"Εμφάνιση λεπτομερειών\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Hide details\": { \"v\": [\"Hide details\"] }, \"Rename project\": { \"v\": [\"Rename project\"] }, \"Show details\": { \"v\": [\"Show details\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": {} }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Hide details\": { \"v\": [\"Ocultar detalles\"] }, \"Rename project\": { \"v\": [\"Renombrar proyecto\"] }, \"Show details\": { \"v\": [\"Mostrar detalles\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": {} }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Hide details\": { \"v\": [\"Ocultar detalles\"] }, \"Rename project\": { \"v\": [\"Renombrar proyecto\"] }, \"Show details\": { \"v\": [\"Mostrar detalles\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Hide details\": { \"v\": [\"Peida üksikasjad\"] }, \"Rename project\": { \"v\": [\"Muuda projekti nime\"] }, \"Show details\": { \"v\": [\"Näita üksikasju\"] } } }, { \"l\": \"eu\", \"t\": {} }, { \"l\": \"fa\", \"t\": { \"Hide details\": { \"v\": [\"پنهان کردن جزئیات\"] }, \"Rename project\": { \"v\": [\"تغییر نام پروژه\"] }, \"Show details\": { \"v\": [\"نمایش جزئیات\"] } } }, { \"l\": \"fi\", \"t\": { \"Hide details\": { \"v\": [\"Piilota yksityiskohdat\"] }, \"Rename project\": { \"v\": [\"Nimeä projekti\"] }, \"Show details\": { \"v\": [\"Näytä yksityiskohdat\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Hide details\": { \"v\": [\"Masquer les détails\"] }, \"Rename project\": { \"v\": [\"Renommer le projet\"] }, \"Show details\": { \"v\": [\"Afficher les détails\"] } } }, { \"l\": \"ga\", \"t\": { \"Hide details\": { \"v\": [\"Folaigh sonraí\"] }, \"Rename project\": { \"v\": [\"Athainmnigh an tionscadal\"] }, \"Show details\": { \"v\": [\"Taispeáin sonraí\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Hide details\": { \"v\": [\"Agochar os detalles\"] }, \"Rename project\": { \"v\": [\"Cambiar o nome do proxecto\"] }, \"Show details\": { \"v\": [\"Amosar os detalles\"] } } }, { \"l\": \"he\", \"t\": {} }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Hide details\": { \"v\": [\"Sakrij detalje\"] }, \"Rename project\": { \"v\": [\"Preimenuj projekt\"] }, \"Show details\": { \"v\": [\"Prikaži detalje\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Hide details\": { \"v\": [\"Részletek elrejtése\"] }, \"Rename project\": { \"v\": [\"Projekt átnevezése\"] }, \"Show details\": { \"v\": [\"Részletek megjelenítése\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Hide details\": { \"v\": [\"Sembunyikan detail\"] }, \"Rename project\": { \"v\": [\"Ganti nama proyek\"] }, \"Show details\": { \"v\": [\"Tampilkan detail\"] } } }, { \"l\": \"is\", \"t\": { \"Hide details\": { \"v\": [\"Fela nánari upplýsingar\"] }, \"Rename project\": { \"v\": [\"Endurnefna verkefni\"] }, \"Show details\": { \"v\": [\"Birta nánari upplýsingar\"] } } }, { \"l\": \"it\", \"t\": {} }, { \"l\": \"ja\", \"t\": { \"Hide details\": { \"v\": [\"詳細を非表示\"] }, \"Rename project\": { \"v\": [\"プロジェクト名を変更\"] }, \"Show details\": { \"v\": [\"詳細の表示\"] } } }, { \"l\": \"ja-JP\", \"t\": {} }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Hide details\": { \"v\": [\"세부 사항 숨기기\"] }, \"Rename project\": { \"v\": [\"프로젝트 이름 변경\"] }, \"Show details\": { \"v\": [\"세부 사항 보기\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Hide details\": { \"v\": [\"ເຊື່ອງລາຍລະອຽດ\"] }, \"Rename project\": { \"v\": [\"ປ່ຽນຊື່ໂຄງການ\"] }, \"Show details\": { \"v\": [\"ສະແດງລາຍລະອຽດ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Hide details\": { \"v\": [\"Slėpti detales\"] }, \"Rename project\": { \"v\": [\"Pervadinti projektą\"] }, \"Show details\": { \"v\": [\"Rodyti detales\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Hide details\": { \"v\": [\"Сокриј детали\"] }, \"Rename project\": { \"v\": [\"Преименувај проект\"] }, \"Show details\": { \"v\": [\"Прикажи детали\"] } } }, { \"l\": \"mn\", \"t\": { \"Hide details\": { \"v\": [\"Дэлгэрэнгүйг нуух\"] }, \"Rename project\": { \"v\": [\"Төслийн нэр солих\"] }, \"Show details\": { \"v\": [\"Дэлгэрэнгүйг харуулах\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Hide details\": { \"v\": [\"Skjul detaljer\"] }, \"Rename project\": { \"v\": [\"Gi prosjekt nytt navn\"] }, \"Show details\": { \"v\": [\"Vis detaljer\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Hide details\": { \"v\": [\"Details verbergen\"] }, \"Rename project\": { \"v\": [\"Project hernoemen\"] }, \"Show details\": { \"v\": [\"Details weergeven\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Hide details\": { \"v\": [\"Ukryj szczegóły\"] }, \"Rename project\": { \"v\": [\"Zmień nazwę projektu\"] }, \"Show details\": { \"v\": [\"Pokaż szczegóły\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Hide details\": { \"v\": [\"Ocultar detalhes\"] }, \"Rename project\": { \"v\": [\"Renomear projeto\"] }, \"Show details\": { \"v\": [\"Mostrar detalhes\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Hide details\": { \"v\": [\"Ocultar detalhes\"] }, \"Rename project\": { \"v\": [\"Alterar nome do projeto\"] }, \"Show details\": { \"v\": [\"Ver detalhes\"] } } }, { \"l\": \"ro\", \"t\": { \"Hide details\": { \"v\": [\"Ascunde detaliile\"] }, \"Rename project\": { \"v\": [\"Redenumește proiectul\"] }, \"Show details\": { \"v\": [\"Arată detaliile\"] } } }, { \"l\": \"ru\", \"t\": { \"Hide details\": { \"v\": [\"Скрыть подробности\"] }, \"Rename project\": { \"v\": [\"Переименовать проект\"] }, \"Show details\": { \"v\": [\"Показать подробности\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Hide details\": { \"v\": [\"Skryť detaily\"] }, \"Rename project\": { \"v\": [\"Premenovať projekt\"] }, \"Show details\": { \"v\": [\"Zobraziť detaily\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Hide details\": { \"v\": [\"Сакриј детаље\"] }, \"Rename project\": { \"v\": [\"Промени име пројекта\"] }, \"Show details\": { \"v\": [\"Прикажи детаље\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Hide details\": { \"v\": [\"Dölj detaljer\"] }, \"Rename project\": { \"v\": [\"Byt namn på projektet\"] }, \"Show details\": { \"v\": [\"Visa detaljer\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Hide details\": { \"v\": [\"Ayrıntıları gizle\"] }, \"Rename project\": { \"v\": [\"Projeyi yeniden adlandır\"] }, \"Show details\": { \"v\": [\"Ayrıntıları görüntüle\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Hide details\": { \"v\": [\"Сховати деталі\"] }, \"Rename project\": { \"v\": [\"Перейменувати проєкт\"] }, \"Show details\": { \"v\": [\"Показати деталі\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Hide details\": { \"v\": [\"Tafsilotlarni yashirish\"] }, \"Rename project\": { \"v\": [\"Loyiha nomini o'zgartirish\"] }, \"Show details\": { \"v\": [\"Tafsilotlarni ko'rsatish\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Hide details\": { \"v\": [\"隐藏细节\"] }, \"Rename project\": { \"v\": [\"重命名项目\"] }, \"Show details\": { \"v\": [\"显示细节\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Hide details\": { \"v\": [\"隱藏詳情\"] }, \"Rename project\": { \"v\": [\"重命名方案\"] }, \"Show details\": { \"v\": [\"顯示詳情\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Hide details\": { \"v\": [\"隱藏詳細資料\"] }, \"Rename project\": { \"v\": [\"重新命名專案\"] }, \"Show details\": { \"v\": [\"顯示詳細資訊\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t29 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Hide password\": { \"v\": [\"إخفاء كلمة المرور\"] }, \"Password is secure\": { \"v\": [\"كلمة المرور آمنة\"] }, \"Show password\": { \"v\": [\"أظهِر كلمة المرور\"] } } }, { \"l\": \"ast\", \"t\": { \"Hide password\": { \"v\": [\"Anubrir la contraseña\"] }, \"Password is secure\": { \"v\": [\"La contraseña ye segura\"] }, \"Show password\": { \"v\": [\"Amosar la contraseña\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Hide password\": { \"v\": [\"Amagar contrasenya\"] }, \"Password is secure\": { \"v\": [\"Contrasenya segura
\"] }, \"Show password\": { \"v\": [\"Mostrar contrasenya\"] } } }, { \"l\": \"cs\", \"t\": { \"Hide password\": { \"v\": [\"Skrýt heslo\"] }, \"Password is secure\": { \"v\": [\"Heslo je bezpečné\"] }, \"Show password\": { \"v\": [\"Zobrazit heslo\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Hide password\": { \"v\": [\"Skrýt heslo\"] }, \"Password is secure\": { \"v\": [\"Heslo je bezpečné\"] }, \"Show password\": { \"v\": [\"Zobrazit heslo\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Hide password\": { \"v\": [\"Skjul adgangskode\"] }, \"Password is secure\": { \"v\": [\"Adgangskoden er sikker\"] }, \"Show password\": { \"v\": [\"Vis adgangskode\"] } } }, { \"l\": \"de\", \"t\": { \"Hide password\": { \"v\": [\"Passwort verbergen\"] }, \"Password is secure\": { \"v\": [\"Passwort ist sicher\"] }, \"Show password\": { \"v\": [\"Passwort anzeigen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Hide password\": { \"v\": [\"Passwort verbergen\"] }, \"Password is secure\": { \"v\": [\"Passwort ist sicher\"] }, \"Show password\": { \"v\": [\"Passwort anzeigen\"] } } }, { \"l\": \"el\", \"t\": { \"Hide password\": { \"v\": [\"Απόκρυψη συνθηματικού\"] }, \"Password is secure\": { \"v\": [\"Το συνθηματικό είναι ασφαλές\"] }, \"Show password\": { \"v\": [\"Εμφάνιση κωδικού πρόσβασης\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Hide password\": { \"v\": [\"Hide password\"] }, \"Password is secure\": { \"v\": [\"Password is secure\"] }, \"Show password\": { \"v\": [\"Show password\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Hide password\": { \"v\": [\"Ocultar contraseña\"] }, \"Password is secure\": { \"v\": [\"La contraseña es segura\"] }, \"Show password\": { \"v\": [\"Mostrar contraseña\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Hide password\": { \"v\": [\"Ocultar contraseña\"] }, \"Password is secure\": { \"v\": [\"La contraseña es segura\"] }, \"Show password\": { \"v\": [\"Mostrar contraseña\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Hide password\": { \"v\": [\"Ocultar contraseña\"] }, \"Password is secure\": { \"v\": [\"La contraseña es segura\"] }, \"Show password\": { \"v\": [\"Mostrar contraseña\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Hide password\": { \"v\": [\"Ocultar contraseña\"] }, \"Password is secure\": { \"v\": [\"La contraseña es segura\"] }, \"Show password\": { \"v\": [\"Mostrar contraseña\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Hide password\": { \"v\": [\"Peida salasõna\"] }, \"Password is secure\": { \"v\": [\"Salasõna on turvaline\"] }, \"Show password\": { \"v\": [\"Näita salasõna\"] } } }, { \"l\": \"eu\", \"t\": { \"Hide password\": { \"v\": [\"Ezkutatu pasahitza\"] }, \"Password is secure\": { \"v\": [\"Pasahitza segurua da\"] }, \"Show password\": { \"v\": [\"Erakutsi pasahitza\"] } } }, { \"l\": \"fa\", \"t\": { \"Hide password\": { \"v\": [\"پنهان کردن رمز عبور\"] }, \"Password is secure\": { \"v\": [\"گذرواژه امن است\"] }, \"Show password\": { \"v\": [\"نمایش گذرواژه\"] } } }, { \"l\": \"fi\", \"t\": { \"Hide password\": { \"v\": [\"Piilota salasana\"] }, \"Password is secure\": { \"v\": [\"Salasana on turvallinen\"] }, \"Show password\": { \"v\": [\"Näytä salasana\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Hide password\": { \"v\": [\"Masquer le mot de passe\"] }, \"Password is secure\": { \"v\": [\"Le mot de passe est sécurisé\"] }, \"Show password\": { \"v\": [\"Afficher le mot de passe\"] } } }, { \"l\": \"ga\", \"t\": { \"Hide password\": { \"v\": [\"Folaigh pasfhocal\"] }, \"Password is secure\": { \"v\": [\"Tá pasfhocal slán\"] }, \"Show password\": { \"v\": [\"Taispeáin pasfhocal\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Hide password\": { \"v\": [\"Agochar o contrasinal\"] }, \"Password is secure\": { \"v\": [\"O contrasinal é seguro\"] }, \"Show password\": { \"v\": [\"Amosar o contrasinal\"] } } }, { \"l\": \"he\", \"t\": { \"Hide password\": { \"v\": [\"הסתרת סיסמה\"] }, \"Password is secure\": { \"v\": [\"הסיסמה מאובטחת\"] }, \"Show password\": { \"v\": [\"הצגת סיסמה\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Hide password\": { \"v\": [\"Sakrij lozinku\"] }, \"Password is secure\": { \"v\": [\"Lozinka je zaštićena\"] }, \"Show password\": { \"v\": [\"Prikaži lozinku\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Hide password\": { \"v\": [\"Jelszó elrejtése\"] }, \"Password is secure\": { \"v\": [\"A jelszó biztonságos\"] }, \"Show password\": { \"v\": [\"Jelszó megjelenítése\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Hide password\": { \"v\": [\"Sembunyikan sandi\"] }, \"Password is secure\": { \"v\": [\"Kata sandi sudah aman\"] }, \"Show password\": { \"v\": [\"Tampilkan sandi\"] } } }, { \"l\": \"is\", \"t\": { \"Hide password\": { \"v\": [\"Fela lykilorð\"] }, \"Password is secure\": { \"v\": [\"Lykilorðið er öruggt\"] }, \"Show password\": { \"v\": [\"Birta lykilorð\"] } } }, { \"l\": \"it\", \"t\": { \"Hide password\": { \"v\": [\"Nascondi la password\"] }, \"Password is secure\": { \"v\": [\"La password è sicura\"] }, \"Show password\": { \"v\": [\"Mostra la password\"] } } }, { \"l\": \"ja\", \"t\": { \"Hide password\": { \"v\": [\"パスワードを非表示\"] }, \"Password is secure\": { \"v\": [\"パスワードは保護されています\"] }, \"Show password\": { \"v\": [\"パスワードを表示\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Hide password\": { \"v\": [\"パスワードを非表示\"] }, \"Password is secure\": { \"v\": [\"パスワードは保護されています\"] }, \"Show password\": { \"v\": [\"パスワードを表示\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Hide password\": { \"v\": [\"암호 숨기기\"] }, \"Password is secure\": { \"v\": [\"암호가 안전합니다.\"] }, \"Show password\": { \"v\": [\"암호 표시\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Hide password\": { \"v\": [\"ເຊື່ອງລະຫັດຜ່ານ\"] }, \"Password is secure\": { \"v\": [\"ລະຫັດຜ່ານປອດໄພ\"] }, \"Show password\": { \"v\": [\"ສະແດງລະຫັດຜ່ານ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Hide password\": { \"v\": [\"Slėpti slaptažodį\"] }, \"Password is secure\": { \"v\": [\"Slaptažodis yra saugus\"] }, \"Show password\": { \"v\": [\"Rodyti slaptažodį\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Hide password\": { \"v\": [\"Сокриј лозинка\"] }, \"Password is secure\": { \"v\": [\"Лозинката е безбедна\"] }, \"Show password\": { \"v\": [\"Прикажи лозинка\"] } } }, { \"l\": \"mn\", \"t\": { \"Hide password\": { \"v\": [\"Нууц үгийг нуух\"] }, \"Password is secure\": { \"v\": [\"Нууц үг найдвартай байна\"] }, \"Show password\": { \"v\": [\"Нууц үгийг харуулах\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Hide password\": { \"v\": [\"Skjul passord\"] }, \"Password is secure\": { \"v\": [\"Passordet er sikkert\"] }, \"Show password\": { \"v\": [\"Vis passord\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Hide password\": { \"v\": [\"Wachtwoord verbergen\"] }, \"Password is secure\": { \"v\": [\"Wachtwoord is veilig\"] }, \"Show password\": { \"v\": [\"Wachtwoord weergeven\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Hide password\": { \"v\": [\"Ukryj hasło\"] }, \"Password is secure\": { \"v\": [\"Hasło jest bezpieczne\"] }, \"Show password\": { \"v\": [\"Pokaż hasło\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Hide password\": { \"v\": [\"Ocultar senha\"] }, \"Password is secure\": { \"v\": [\"A senha é segura\"] }, \"Show password\": { \"v\": [\"Mostrar senha\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Hide password\": { \"v\": [\"Ocultar palavra-passe\"] }, \"Password is secure\": { \"v\": [\"A palavra-passe é segura\"] }, \"Show password\": { \"v\": [\"Mostrar palavra-passe\"] } } }, { \"l\": \"ro\", \"t\": { \"Hide password\": { \"v\": [\"Ascunde parola\"] }, \"Password is secure\": { \"v\": [\"Parola este sigură\"] }, \"Show password\": { \"v\": [\"Arată parola\"] } } }, { \"l\": \"ru\", \"t\": { \"Hide password\": { \"v\": [\"Скрыть пароль\"] }, \"Password is secure\": { \"v\": [\"Пароль надёжный\"] }, \"Show password\": { \"v\": [\"Показать пароль\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Hide password\": { \"v\": [\"Skryť heslo\"] }, \"Password is secure\": { \"v\": [\"Heslo je bezpečné\"] }, \"Show password\": { \"v\": [\"Zobraziť heslo\"] } } }, { \"l\": \"sl\", \"t\": { \"Hide password\": { \"v\": [\"Skrij geslo\"] }, \"Password is secure\": { \"v\": [\"Geslo je varno\"] }, \"Show password\": { \"v\": [\"Pokaži geslo\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Hide password\": { \"v\": [\"Сакриј лозинку\"] }, \"Password is secure\": { \"v\": [\"Лозинка је безбедна\"] }, \"Show password\": { \"v\": [\"Прикажи лозинку\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Hide password\": { \"v\": [\"Dölj lösenordet\"] }, \"Password is secure\": { \"v\": [\"Lösenordet är säkert\"] }, \"Show password\": { \"v\": [\"Visa lösenordet\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Hide password\": { \"v\": [\"Parolayı gizle\"] }, \"Password is secure\": { \"v\": [\"Parola güvenli\"] }, \"Show password\": { \"v\": [\"Parolayı görüntüle\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Hide password\": { \"v\": [\"Приховати пароль\"] }, \"Password is secure\": { \"v\": [\"Пароль безпечний\"] }, \"Show password\": { \"v\": [\"Показати пароль\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Hide password\": { \"v\": [\"Parolni yashirish\"] }, \"Password is secure\": { \"v\": [\"Parol xavfsiz\"] }, \"Show password\": { \"v\": [\"Parolni ko'rsatish\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Hide password\": { \"v\": [\"隐藏密码\"] }, \"Password is secure\": { \"v\": [\"密码安全\"] }, \"Show password\": { \"v\": [\"显示密码\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Hide password\": { \"v\": [\"隱藏密碼\"] }, \"Password is secure\": { \"v\": [\"密碼是安全的\"] }, \"Show password\": { \"v\": [\"顯示密碼\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Hide password\": { \"v\": [\"隱藏密碼\"] }, \"Password is secure\": { \"v\": [\"密碼安全\"] }, \"Show password\": { \"v\": [\"顯示密碼\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t30 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"مساعدة في التنقل باستعمال لوحة المفاتيح\"] }, \"Skip to app navigation\": { \"v\": [\"تجاوَز إلى التنقل في التطبيق\"] }, \"Skip to main content\": { \"v\": [\"تجاوَز إلى المحتوى الرئيسي\"] } } }, { \"l\": \"ast\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Ayuda de la navegación pente'l tecláu\"] }, \"Skip to app navigation\": { \"v\": [\"Dir a la navegación d'aplicaciones\"] }, \"Skip to main content\": { \"v\": [\"Dir al conteníu principal\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Nápověda pro pohyb pomocí klávesnice\"] }, \"Skip to app navigation\": { \"v\": [\"Přeskočit na navigaci aplikace\"] }, \"Skip to main content\": { \"v\": [\"Přeskočit na hlavní obsah\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Nápověda pro pohyb pomocí klávesnice\"] }, \"Skip to app navigation\": { \"v\": [\"Přeskočit na navigaci aplikace\"] }, \"Skip to main content\": { \"v\": [\"Přeskočit na hlavní obsah\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Hjælp til tastaturnavigation\"] }, \"Skip to app navigation\": { \"v\": [\"Spring til appnavigation\"] }, \"Skip to main content\": { \"v\": [\"Spring til hovedindhold\"] } } }, { \"l\": \"de\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Tastatur-Navigationshilfe\"] }, \"Skip to app navigation\": { \"v\": [\"Zur App-Navigation springen\"] }, \"Skip to main content\": { \"v\": [\"Zum Hauptinhalt springen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Tastatur-Navigationshilfe\"] }, \"Skip to app navigation\": { \"v\": [\"Zur App-Navigation springen\"] }, \"Skip to main content\": { \"v\": [\"Zum Hauptinhalt springen\"] } } }, { \"l\": \"el\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Βοήθεια πλοήγησης με πληκτρολόγιο\"] }, \"Skip to app navigation\": { \"v\": [\"Μετάβαση στην πλοήγηση της εφαρμογής\"] }, \"Skip to main content\": { \"v\": [\"Μετάβαση στο κύριο περιεχόμενο\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Keyboard navigation help\"] }, \"Skip to app navigation\": { \"v\": [\"Skip to app navigation\"] }, \"Skip to main content\": { \"v\": [\"Skip to main content\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Ayuda de navegación del teclado\"] }, \"Skip to app navigation\": { \"v\": [\"Saltar a la navegación de apps\"] }, \"Skip to main content\": { \"v\": [\"Saltar al contenido principal\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Ayuda de navegación del teclado\"] }, \"Skip to app navigation\": { \"v\": [\"Saltar a la navegación de app\"] }, \"Skip to main content\": { \"v\": [\"Saltar al contenido principal\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": {} }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Ayuda de navegación del teclado\"] }, \"Skip to app navigation\": { \"v\": [\"Saltar a la navegación de app\"] }, \"Skip to main content\": { \"v\": [\"Saltar al contenido principal\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Klahvistiku kasutuse abiteave\"] }, \"Skip to app navigation\": { \"v\": [\"Suundu rakenduses liikumise valikute juurde\"] }, \"Skip to main content\": { \"v\": [\"Suundu põhisisu juurde\"] } } }, { \"l\": \"eu\", \"t\": {} }, { \"l\": \"fa\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"راهنمای ناوبری صفحه کلید\"] }, \"Skip to app navigation\": { \"v\": [\"رفتن به پیمایش برنامه\"] }, \"Skip to main content\": { \"v\": [\"رفتن به محتوای اصلی\"] } } }, { \"l\": \"fi\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Näppäimistönavigoinnin ohje\"] }, \"Skip to app navigation\": { \"v\": [\"Siirry sovelluksen navigaatioon\"] }, \"Skip to main content\": { \"v\": [\"Siirry pääsisältöön\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Aide à la navigation au clavier\"] }, \"Skip to app navigation\": { \"v\": [\"Passer à la navigation de l’application\"] }, \"Skip to main content\": { \"v\": [\"Passer au contenu principal\"] } } }, { \"l\": \"ga\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Cabhair le nascleanúint méarchláir\"] }, \"Skip to app navigation\": { \"v\": [\"Téigh ar aghaidh chuig nascleanúint aip\"] }, \"Skip to main content\": { \"v\": [\"Téigh ar aghaidh chuig an bpríomhábhar\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Axuda á navegación co teclado\"] }, \"Skip to app navigation\": { \"v\": [\"Ir á navegación da aplicación\"] }, \"Skip to main content\": { \"v\": [\"Ir ao contido principal\"] } } }, { \"l\": \"he\", \"t\": {} }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Pomoć za navigaciju tipkovnicom\"] }, \"Skip to app navigation\": { \"v\": [\"Preskoči na navigaciju aplikacije\"] }, \"Skip to main content\": { \"v\": [\"Preskoči na glavni sadržaj\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Billentyűzetes navigáció súgója\"] }, \"Skip to app navigation\": { \"v\": [\"Ugrás az alkalmazásnavigációhoz\"] }, \"Skip to main content\": { \"v\": [\"Ugrás a fő tartalomhoz\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Bantuan navigasi keyboard\"] }, \"Skip to app navigation\": { \"v\": [\"Lewati ke navigasi aplikasi\"] }, \"Skip to main content\": { \"v\": [\"Lewati ke konten utama\"] } } }, { \"l\": \"is\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Aðstoð við rötun á lyklaborði\"] }, \"Skip to app navigation\": { \"v\": [\"Sleppa og fara í flakk innan forrits\"] }, \"Skip to main content\": { \"v\": [\"Sleppa og fara í meginefni\"] } } }, { \"l\": \"it\", \"t\": {} }, { \"l\": \"ja\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"キーボード・ナビゲーション・ヘルプ\"] }, \"Skip to app navigation\": { \"v\": [\"アプリのナビゲーションへ移動\"] }, \"Skip to main content\": { \"v\": [\"メインコンテンツへ移動\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"キーボード・ナビゲーション・ヘルプ\"] }, \"Skip to app navigation\": { \"v\": [\"アプリのナビゲーションへ移動\"] }, \"Skip to main content\": { \"v\": [\"メインコンテンツへ移動\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"키보드 탐색 도움말\"] }, \"Skip to app navigation\": { \"v\": [\"앱 탐색으로 건너뛰기\"] }, \"Skip to main content\": { \"v\": [\"본 내용으로 건너뛰기\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"ການຊ່ວຍເຫຼືອການນຳທາງດ້ວຍຄີບອດ\"] }, \"Skip to app navigation\": { \"v\": [\"ຂ້າມໄປທີ່ການນຳທາງຂອງແອັບ\"] }, \"Skip to main content\": { \"v\": [\"ຂ້າມໄປທີ່ເນື້ອຫາຫຼັກ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Klaviatūros navigacijos pagalba\"] }, \"Skip to app navigation\": { \"v\": [\"Pereiti prie programėlės naršymo\"] }, \"Skip to main content\": { \"v\": [\"Pereiti prie pagrindinio turinio\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Навигација со тастатура\"] }, \"Skip to app navigation\": { \"v\": [\"Прескокни на навигација на апликацијата\"] }, \"Skip to main content\": { \"v\": [\"Прескокни на главна содржина\"] } } }, { \"l\": \"mn\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Гарын навигацийн тусламж\"] }, \"Skip to app navigation\": { \"v\": [\"Аппын навигаци руу алгасах\"] }, \"Skip to main content\": { \"v\": [\"Үндсэн агуулга руу алгасах\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Hjelp for tastaturnavigering\"] }, \"Skip to app navigation\": { \"v\": [\"Hopp til appnavigering\"] }, \"Skip to main content\": { \"v\": [\"Hopp til hovedinnhold\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Hulp voor toetsenbordnavigatie\"] }, \"Skip to app navigation\": { \"v\": [\"Doorgaan naar app-navigatie\"] }, \"Skip to main content\": { \"v\": [\"Naar hoofdinhoud gaan\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Pomoc w nawigacji za pomocą klawiatury\"] }, \"Skip to app navigation\": { \"v\": [\"Przewiń do nawigacji\"] }, \"Skip to main content\": { \"v\": [\"Przewiń do głównych treści\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Ajuda para navegação pelo teclado\"] }, \"Skip to app navigation\": { \"v\": [\"Ir para navegação de aplicativo\"] }, \"Skip to main content\": { \"v\": [\"Ir para conteúdo principal\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Ajuda à navegação no teclado\"] }, \"Skip to app navigation\": { \"v\": [\"Saltar para navegação da app\"] }, \"Skip to main content\": { \"v\": [\"Saltar para conteúdo principal\"] } } }, { \"l\": \"ro\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Ajutor pentru navigarea cu tastatura\"] }, \"Skip to app navigation\": { \"v\": [\"Salt la navigarea aplicației\"] }, \"Skip to main content\": { \"v\": [\"Salt la conținutul principal\"] } } }, { \"l\": \"ru\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Справка по навигации с помощью клавиатуры\"] }, \"Skip to app navigation\": { \"v\": [\"Перейти к навигации по приложению\"] }, \"Skip to main content\": { \"v\": [\"Перейти к основному содержанию\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Pomoc pri navigácii pomocou klávesnice\"] }, \"Skip to app navigation\": { \"v\": [\"Preskočiť na navigáciu v aplikácii\"] }, \"Skip to main content\": { \"v\": [\"Preskočiť na hlavný obsah\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Помоћ за навигацију тастатуром\"] }, \"Skip to app navigation\": { \"v\": [\"Прескочи на навигацију апликацијом\"] }, \"Skip to main content\": { \"v\": [\"Прескочи на главни садржај\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Hjälp för tangentbordsnavigering\"] }, \"Skip to app navigation\": { \"v\": [\"Hoppa till appnavigeringen\"] }, \"Skip to main content\": { \"v\": [\"Hoppa till huvudinnehåll\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Klavye ile gezinme yardımı\"] }, \"Skip to app navigation\": { \"v\": [\"Uygulama gezinmesine git\"] }, \"Skip to main content\": { \"v\": [\"Ana içeriğe git\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Допомога з навігацією клавішами\"] }, \"Skip to app navigation\": { \"v\": [\"Пропустити навігацію по застосунках\"] }, \"Skip to main content\": { \"v\": [\"Перейти одразу до головного вмісту\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"Klaviatura navigatsiyasi yordami\"] }, \"Skip to app navigation\": { \"v\": [\"Ilova navigatsiyasiga oʻtish\"] }, \"Skip to main content\": { \"v\": [\"Asosiy tarkibga o'tish\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"键盘导航栏帮助\"] }, \"Skip to app navigation\": { \"v\": [\"跳转至应用程序导航页\"] }, \"Skip to main content\": { \"v\": [\"跳转至主要内容\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"鍵盤導航幫助\"] }, \"Skip to app navigation\": { \"v\": [\"跳至應用程式導航\"] }, \"Skip to main content\": { \"v\": [\"跳至主要內容\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Keyboard navigation help\": { \"v\": [\"鍵盤導航說明\"] }, \"Skip to app navigation\": { \"v\": [\"略過應用程式導覽\"] }, \"Skip to main content\": { \"v\": [\"跳至主要內容\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t31 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": {} }, { \"l\": \"ast\", \"t\": {} }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Klávesové zkratky\"] } } }, { \"l\": \"cs-CZ\", \"t\": {} }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Tastaturgenveje\"] } } }, { \"l\": \"de\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Tastaturkürzel\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Tastaturkürzel\"] } } }, { \"l\": \"el\", \"t\": {} }, { \"l\": \"en-GB\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Keyboard shortcuts\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": {} }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": {} }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": {} }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": {} }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Klahvistiku kiirklahvid\"] } } }, { \"l\": \"eu\", \"t\": {} }, { \"l\": \"fa\", \"t\": {} }, { \"l\": \"fi\", \"t\": {} }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Raccourcis clavier\"] } } }, { \"l\": \"ga\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Aicearraí méarchláir\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Atallos de teclado\"] } } }, { \"l\": \"he\", \"t\": {} }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Tipkovnički prečaci\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Gyorsbillentyűk\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Shortcut keyboard\"] } } }, { \"l\": \"is\", \"t\": {} }, { \"l\": \"it\", \"t\": {} }, { \"l\": \"ja\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"キーボードショートカット\"] } } }, { \"l\": \"ja-JP\", \"t\": {} }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"키보드 바로가기\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"ທາງລັດຄີບອດ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Spartieji klavišai\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Кратенки со тастатура\"] } } }, { \"l\": \"mn\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Гарын товчлол\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": {} }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Toetsenbord sneltoetsen\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": {} }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Atalhos de teclado\"] } } }, { \"l\": \"pt-PT\", \"t\": {} }, { \"l\": \"ro\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Scurtături de tastatură\"] } } }, { \"l\": \"ru\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Комбинации клавиш\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": {} }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": {} }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Kortkommandon\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Klavye kısayolları\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": {} }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"Klaviatura yorliqlari\"] } } }, { \"l\": \"zh-CN\", \"t\": {} }, { \"l\": \"zh-HK\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"鍵盤快速鍵\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Keyboard shortcuts\": { \"v\": [\"鍵盤快速鍵\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t32 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { 'Load more \"{options}\"': { \"v\": ['تحميل المزيد من \"{options}\" '] }, \"Raw link {options}\": { \"v\": [\" الرابط الخام raw link ـ {options}\"] }, \"Start typing to search\": { \"v\": [\"إبدإ كتابة مفردات البحث\"] } } }, { \"l\": \"ast\", \"t\": { 'Load more \"{options}\"': { \"v\": [\"Cargar más «{options}»\"] }, \"Raw link {options}\": { \"v\": [\"Enllaz en bruto {optiones}\"] }, \"Start typing to search\": { \"v\": [\"Comienza a escribir pa buscar\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { 'Load more \"{options}\"': { \"v\": [\"Načíst další „{options}“\"] }, \"Raw link {options}\": { \"v\": [\"Holý odkaz {options}\"] }, \"Start typing to search\": { \"v\": [\"Vyhledávejte psaním\"] } } }, { \"l\": \"cs-CZ\", \"t\": { 'Load more \"{options}\"': { \"v\": [\"Načíst další „{options}“\"] }, \"Raw link {options}\": { \"v\": [\"Holý odkaz {options}\"] }, \"Start typing to search\": { \"v\": [\"Vyhledávejte psaním\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Indlæs flere \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Råt link {options}\"] }, \"Start typing to search\": { \"v\": [\"Begynd at skrive for at søge\"] } } }, { \"l\": \"de\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Weitere \"{options}\" laden'] }, \"Raw link {options}\": { \"v\": [\"Unverarbeiteter Link {options}\"] }, \"Start typing to search\": { \"v\": [\"Mit der Eingabe beginnen, um zu suchen\"] } } }, { \"l\": \"de-DE\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Weitere \"{options}\" laden'] }, \"Raw link {options}\": { \"v\": [\"Unverarbeiteter Link {options}\"] }, \"Start typing to search\": { \"v\": [\"Mit der Eingabe beginnen, um zu suchen\"] } } }, { \"l\": \"el\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Φόρτωση περισσότερων \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Ακατέργαστος σύνδεσμος {options}\"] }, \"Start typing to search\": { \"v\": [\"Ξεκινήστε να πληκτρολογείτε για αναζήτηση\"] } } }, { \"l\": \"en-GB\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Load more \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Raw link {options}\"] }, \"Start typing to search\": { \"v\": [\"Start typing to search\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Cargar más \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Enlace directo {options}\"] }, \"Start typing to search\": { \"v\": [\"Comience a escribir para buscar\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Cargar más \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Enlace directo {options}\"] }, \"Start typing to search\": { \"v\": [\"Comience a escribir para buscar\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Raw link {options}\": { \"v\": [\"Enlace directo {options}\"] }, \"Start typing to search\": { \"v\": [\"Comienza a escribir para buscar\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Cargar más \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Enlace directo {options}\"] }, \"Start typing to search\": { \"v\": [\"Comience a escribir para buscar\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { 'Load more \"{options}\"': { \"v\": [\"Laadi veel „{options}“\"] }, \"Raw link {options}\": { \"v\": [\"Töötlemata link: {options}\"] }, \"Start typing to search\": { \"v\": [\"Otsimiseks kirjuta midagi\"] } } }, { \"l\": \"eu\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Kargatu \"{options}\" gehiago'] }, \"Raw link {options}\": { \"v\": [\"Formaturik gabeko esteka {aukerak}\"] }, \"Start typing to search\": { \"v\": [\"Hasi idazten bilatzeko\"] } } }, { \"l\": \"fa\", \"t\": { 'Load more \"{options}\"': { \"v\": ['بارگذاری بیشتر \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"پیوند خام {options}\"] }, \"Start typing to search\": { \"v\": [\"برای جستجو تایپ کنید\"] } } }, { \"l\": \"fi\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Lataa lisää \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Raaka linkki {options}\"] }, \"Start typing to search\": { \"v\": [\"Aloita kirjoittaminen hakeaksesi\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { 'Load more \"{options}\"': { \"v\": [\"Charger davantage « {options} »\"] }, \"Raw link {options}\": { \"v\": [\"Lien brut {options}\"] }, \"Start typing to search\": { \"v\": [\"Commencez à écrire pour rechercher\"] } } }, { \"l\": \"ga\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Luchtaigh tuilleadh \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Nasc amh {roghanna}\"] }, \"Start typing to search\": { \"v\": [\"Tosaigh ag clóscríobh chun cuardach a dhéanamh\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { 'Load more \"{options}\"': { \"v\": [\"Cargar máis «{options}»\"] }, \"Raw link {options}\": { \"v\": [\"Ligazón sen procesar {options}\"] }, \"Start typing to search\": { \"v\": [\"Comece a escribir para buscar\"] } } }, { \"l\": \"he\", \"t\": { \"Raw link {options}\": { \"v\": [\"קישור גולמי {options}\"] }, \"Start typing to search\": { \"v\": [\"התחלת הקלדה מחפשת\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { 'Load more \"{options}\"': { \"v\": [\"Učitaj još „{options}”\"] }, \"Raw link {options}\": { \"v\": [\"Izravna poveznica {options}\"] }, \"Start typing to search\": { \"v\": [\"Počnite tipkati za pretraživanje\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { 'Load more \"{options}\"': { \"v\": [\"További „{options}” betöltése\"] }, \"Raw link {options}\": { \"v\": [\"Nyers hivatkozás: {options}\"] }, \"Start typing to search\": { \"v\": [\"Kezdjen gépelni a kereséshez\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Muat \"{options}\" lainnya'] }, \"Raw link {options}\": { \"v\": [\"Tautan mentah {options}\"] }, \"Start typing to search\": { \"v\": [\"Ketik untuk mulai mencari\"] } } }, { \"l\": \"is\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Hlaða inn fleiri \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Hrár tengill {options}\"] }, \"Start typing to search\": { \"v\": [\"Byrjaðu að skrifa til að leita\"] } } }, { \"l\": \"it\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Carica più \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Raw link {options}\"] }, \"Start typing to search\": { \"v\": [\"Iniziare a digitare per effettuare la ricerca\"] } } }, { \"l\": \"ja\", \"t\": { 'Load more \"{options}\"': { \"v\": ['\"{options}\" をもっと読み込む'] }, \"Raw link {options}\": { \"v\": [\"未加工のリンク {options}\"] }, \"Start typing to search\": { \"v\": [\"入力を開始して検索します\"] } } }, { \"l\": \"ja-JP\", \"t\": { 'Load more \"{options}\"': { \"v\": ['\"{options}\" をもっと読み込む'] }, \"Raw link {options}\": { \"v\": [\"未加工のリンク {options}\"] }, \"Start typing to search\": { \"v\": [\"入力を開始して検索します\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { 'Load more \"{options}\"': { \"v\": ['\"{options}\" 더 불러오기'] }, \"Raw link {options}\": { \"v\": [\"{options} 원본 링크\"] }, \"Start typing to search\": { \"v\": [\"입력하여 검색\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { 'Load more \"{options}\"': { \"v\": [\"ໂຫຼດ “{options}” ເພີ່ມເຕີມ\"] }, \"Raw link {options}\": { \"v\": [\"ລິງດິບ {options}\"] }, \"Start typing to search\": { \"v\": [\"ເລີ່ມພິມເພື່ອຄົ້ນຫາ\"] } } }, { \"l\": \"lt-LT\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Įkelti daugiau \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Neapdorota nuoroda {options}\"] }, \"Start typing to search\": { \"v\": [\"Rašykite norėdami atlikti paiešką\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Вчитај повеќе \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Суров линк {options}\"] }, \"Start typing to search\": { \"v\": [\"Почни да пишуваш за пребарување\"] } } }, { \"l\": \"mn\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Илүү ихийг ачаалах \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Түүхий холбоос {options}\"] }, \"Start typing to search\": { \"v\": [\"Хайхын тулд бичиж эхлэнэ үү\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Last inn flere \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Rå lenke {options}\"] }, \"Start typing to search\": { \"v\": [\"Start å skrive for å søke\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Meer \"{options}\" laden'] }, \"Raw link {options}\": { \"v\": [\"Ruwe link {options}\"] }, \"Start typing to search\": { \"v\": [\"Start met typen om te zoeken\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Załaduj więcej \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Surowy odnośnik {options}\"] }, \"Start typing to search\": { \"v\": [\"Zacznij pisać, aby wyszukać\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Carregar mais \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Link bruto {options}\"] }, \"Start typing to search\": { \"v\": [\"Comece a digitar para pesquisar\"] } } }, { \"l\": \"pt-PT\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Carregar mais \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Link inicial {options}\"] }, \"Start typing to search\": { \"v\": [\"Comece a digitar para pesquisar\"] } } }, { \"l\": \"ro\", \"t\": { 'Load more \"{options}\"': { \"v\": [\"Încarcă mai multe „{options}”\"] }, \"Raw link {options}\": { \"v\": [\"Link brut {options}\"] }, \"Start typing to search\": { \"v\": [\"Începe să tastezi pentru a căuta\"] } } }, { \"l\": \"ru\", \"t\": { 'Load more \"{options}\"': { \"v\": [\"Загрузить ещё «{options}»\"] }, \"Raw link {options}\": { \"v\": [\"Необработанная ссылка {options}\"] }, \"Start typing to search\": { \"v\": [\"Начните вводить текст для поиска\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Načítať viac \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Raw odkaz {options}\"] }, \"Start typing to search\": { \"v\": [\"Začnite písať pre vyhľadávanie\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { 'Load more \"{options}\"': { \"v\": [\"Учитај још „{options}”\"] }, \"Raw link {options}\": { \"v\": [\"Сирови линк {options}\"] }, \"Start typing to search\": { \"v\": [\"Покрените претрагу куцањем\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Läs in fler \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Oformaterad länk {options}\"] }, \"Start typing to search\": { \"v\": [\"Börja skriva för att söka\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Diğer \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Ham bağlantı {options}\"] }, \"Start typing to search\": { \"v\": [\"Aramak için yazmaya başlayın\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { 'Load more \"{options}\"': { \"v\": ['Завантажити більше \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"Пряме посилання {options}\"] }, \"Start typing to search\": { \"v\": [\"Почніть вводити для пошуку\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { 'Load more \"{options}\"': { \"v\": [`Ko'proq yuklash \"{options}\"`] }, \"Raw link {options}\": { \"v\": [\" {options}satr havolasi\"] }, \"Start typing to search\": { \"v\": [\"Qidirish uchun yozishni boshlang\"] } } }, { \"l\": \"zh-CN\", \"t\": { 'Load more \"{options}\"': { \"v\": [\"加载更多 “{options}”\"] }, \"Raw link {options}\": { \"v\": [\"原始链接 {options}\"] }, \"Start typing to search\": { \"v\": [\"开始输入以进行搜索\"] } } }, { \"l\": \"zh-HK\", \"t\": { 'Load more \"{options}\"': { \"v\": ['載入更多 \"{options}\"'] }, \"Raw link {options}\": { \"v\": [\"原始連結 {options}\"] }, \"Start typing to search\": { \"v\": [\"開始輸入以進行搜尋\"] } } }, { \"l\": \"zh-TW\", \"t\": { 'Load more \"{options}\"': { \"v\": [\"載入更多「{options}」\"] }, \"Raw link {options}\": { \"v\": [\"原始連結 {options}\"] }, \"Start typing to search\": { \"v\": [\"開始輸入以進行搜尋\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t33 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Loading …\": { \"v\": [\"التحميل جارٍ ...\"] } } }, { \"l\": \"ast\", \"t\": {} }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Loading …\": { \"v\": [\"Načítání …\"] } } }, { \"l\": \"cs-CZ\", \"t\": {} }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Loading …\": { \"v\": [\"Indlæser …\"] } } }, { \"l\": \"de\", \"t\": { \"Loading …\": { \"v\": [\"Wird geladen …\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Loading …\": { \"v\": [\"Wird geladen …\"] } } }, { \"l\": \"el\", \"t\": { \"Loading …\": { \"v\": [\"Φόρτωση  …\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Loading …\": { \"v\": [\"Loading …\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": {} }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": {} }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": {} }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": {} }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Loading …\": { \"v\": [\"Laadin…\"] } } }, { \"l\": \"eu\", \"t\": {} }, { \"l\": \"fa\", \"t\": { \"Loading …\": { \"v\": [\"در حال بارگذاری ...\"] } } }, { \"l\": \"fi\", \"t\": { \"Loading …\": { \"v\": [\"Ladataan ...\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Loading …\": { \"v\": [\"Chargement…\"] } } }, { \"l\": \"ga\", \"t\": { \"Loading …\": { \"v\": [\"Ag lódáil …\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Loading …\": { \"v\": [\"Cargando…\"] } } }, { \"l\": \"he\", \"t\": {} }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Loading …\": { \"v\": [\"Učitavanje …\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Loading …\": { \"v\": [\"Betöltés…\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Loading …\": { \"v\": [\"Memuat …\"] } } }, { \"l\": \"is\", \"t\": { \"Loading …\": { \"v\": [\"Hleð inn …\"] } } }, { \"l\": \"it\", \"t\": {} }, { \"l\": \"ja\", \"t\": { \"Loading …\": { \"v\": [\"読み込み中 …\"] } } }, { \"l\": \"ja-JP\", \"t\": {} }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Loading …\": { \"v\": [\"로딩 중 ...\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Loading …\": { \"v\": [\"ກຳລັງໂຫຼດ…\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Loading …\": { \"v\": [\"Įkeliama …\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Loading …\": { \"v\": [\"Вчитување …\"] } } }, { \"l\": \"mn\", \"t\": { \"Loading …\": { \"v\": [\"Ачаалж байна …\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Loading …\": { \"v\": [\"Laster inn...\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Loading …\": { \"v\": [\"Laden …\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Loading …\": { \"v\": [\"Wczytywanie…\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Loading …\": { \"v\": [\"Carregando …\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Loading …\": { \"v\": [\"A carregar...\"] } } }, { \"l\": \"ro\", \"t\": { \"Loading …\": { \"v\": [\"Se încarcă …\"] } } }, { \"l\": \"ru\", \"t\": { \"Loading …\": { \"v\": [\"Загрузка …\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Loading …\": { \"v\": [\"Nahrávam ...\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Loading …\": { \"v\": [\"Учитава се…\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Loading …\": { \"v\": [\"Läser in …\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Loading …\": { \"v\": [\"Yükleniyor…\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Loading …\": { \"v\": [\"Завантаження …\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Loading …\": { \"v\": [\"Yuklanmoqda...\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Loading …\": { \"v\": [\"加载中...\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Loading …\": { \"v\": [\"加載中 …\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Loading …\": { \"v\": [\"載入中......\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t34 = [{ \"l\": \"af\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"ar\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\", \"\", \"\", \"\"] }, \"No link provider found\": { \"v\": [\"لا يوجد أيّ مزود روابط link provider\"] }, \"Write a message …\": { \"v\": [\"أكتب رسالة ...\"] } } }, { \"l\": \"ast\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] }, \"No link provider found\": { \"v\": [\"Nun s'atopó nengún fornidor d'enllaces\"] }, \"Write a message …\": { \"v\": [\"Escribi un mensaxe…\"] } } }, { \"l\": \"az\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"be\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\", \"\"] } } }, { \"l\": \"bg\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"bn-BD\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"br\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\", \"\", \"\"] } } }, { \"l\": \"bs\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] } } }, { \"l\": \"ca\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"cs\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Dosaženo limitu počtu %n znaku zprávy\", \"Dosaženo limitu počtu %n znaků zprávy\", \"Dosaženo limitu počtu %n znaků zprávy\", \"Dosaženo limitu počtu %n znaků zprávy\"] }, \"No link provider found\": { \"v\": [\"Nenalezen žádný poskytovatel odkazů\"] }, \"Write a message …\": { \"v\": [\"Napište zprávu …\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\", \"\"] }, \"No link provider found\": { \"v\": [\"Nenalezen žádný poskytovatel odkazů\"] }, \"Write a message …\": { \"v\": [\"Napsat zprávu…\"] } } }, { \"l\": \"cy-GB\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\", \"\"] } } }, { \"l\": \"da\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Beskedgrænsen på %n tegn er nået\", \"Beskedgrænsen på %n tegn er nået\"] }, \"No link provider found\": { \"v\": [\"Ingen linkudbyder fundet\"] }, \"Write a message …\": { \"v\": [\"Skriv en besked …\"] } } }, { \"l\": \"de\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Nachrichtenlimit von %n Zeichen erreicht\", \"Nachrichtenlimit von %n Zeichen erreicht\"] }, \"No link provider found\": { \"v\": [\"Kein Linkanbieter gefunden\"] }, \"Write a message …\": { \"v\": [\"Nachricht schreiben …\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Nachrichtenlimit von %n Zeichen erreicht\", \"Nachrichtenlimit von %n Zeichen erreicht\"] }, \"No link provider found\": { \"v\": [\"Kein Linkanbieter gefunden\"] }, \"Write a message …\": { \"v\": [\"Nachricht schreiben …\"] } } }, { \"l\": \"el\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Έφτασε το όριο μηνύματος των %n χαρακτήρων\", \"Έφτασε το όριο μηνύματος των %n χαρακτήρων\"] }, \"No link provider found\": { \"v\": [\"Δεν βρέθηκε πάροχος συνδέσμου\"] }, \"Write a message …\": { \"v\": [\"Γράψτε ένα μήνυμα …\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Message limit of %n character reached\", \"Message limit of %n characters reached\"] }, \"No link provider found\": { \"v\": [\"No link provider found\"] }, \"Write a message …\": { \"v\": [\"Write a message …\"] } } }, { \"l\": \"eo\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"es\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Se ha alcanzado el límite de %n caracteres en el mensaje\", \"Se ha alcanzado el límite de %n caractere en el mensaje\", \"Se ha alcanzado el límite de %n caracteres en el mensaje\"] }, \"No link provider found\": { \"v\": [\"No se encontró ningún proveedor de enlaces\"] }, \"Write a message …\": { \"v\": [\"Escriba un mensaje ...\"] } } }, { \"l\": \"es-419\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] } } }, { \"l\": \"es-AR\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] }, \"No link provider found\": { \"v\": [\"No se encontró ningún proveedor de enlaces\"] }, \"Write a message …\": { \"v\": [\"Escriba un mensaje ...\"] } } }, { \"l\": \"es-CL\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] } } }, { \"l\": \"es-CO\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] } } }, { \"l\": \"es-CR\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] } } }, { \"l\": \"es-DO\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] } } }, { \"l\": \"es-EC\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] }, \"No link provider found\": { \"v\": [\"No se encontró ningún proveedor de enlaces\"] } } }, { \"l\": \"es-GT\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] } } }, { \"l\": \"es-HN\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] } } }, { \"l\": \"es-MX\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] }, \"No link provider found\": { \"v\": [\"No se encontró ningún proveedor de enlaces\"] }, \"Write a message …\": { \"v\": [\"Escriba un mensaje ...\"] } } }, { \"l\": \"es-NI\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] } } }, { \"l\": \"es-PA\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] } } }, { \"l\": \"es-PE\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] } } }, { \"l\": \"es-PR\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] } } }, { \"l\": \"es-PY\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] } } }, { \"l\": \"es-SV\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] } } }, { \"l\": \"es-UY\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] } } }, { \"l\": \"et-EE\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Sõnumi piirarv %n tähemärk on käes\", \"Sõnumi piirarv %n tähemärki on käes\"] }, \"No link provider found\": { \"v\": [\"Lingi pakkujat ei leitud\"] }, \"Write a message …\": { \"v\": [\"Koosta sõnum…\"] } } }, { \"l\": \"eu\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] }, \"No link provider found\": { \"v\": [\"Ez da aurkitu esteka-hornitzailerik\"] }, \"Write a message …\": { \"v\": [\"Idatzi mezu bat…\"] } } }, { \"l\": \"fa\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] }, \"No link provider found\": { \"v\": [\"هیچ ارائه‌دهنده پیوندی یافت نشد\"] }, \"Write a message …\": { \"v\": [\"یک پیام بنویسید ...\"] } } }, { \"l\": \"fi\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] }, \"No link provider found\": { \"v\": [\"Linkin tarjoajia ei löydetty\"] }, \"Write a message …\": { \"v\": [\"Kirjoita viesti…\"] } } }, { \"l\": \"fo\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"fr\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"La limite de %n caractère par message a été atteinte\", \"La limite de %n caractères par message a été atteinte\", \"La limite de %n caractères par message a été atteinte\"] }, \"No link provider found\": { \"v\": [\"Aucun fournisseur de lien trouvé\"] }, \"Write a message …\": { \"v\": [\"Écrire un message…\"] } } }, { \"l\": \"ga\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Sroicheadh ​​teorainn teachtaireachta de %n carachtar\", \"Sroicheadh ​​teorainn teachtaireachta de %n carachtar\", \"Sroicheadh ​​teorainn teachtaireachta de %n carachtar\", \"Sroicheadh ​​teorainn teachtaireachta de %n carachtar\", \"Sroicheadh ​​teorainn teachtaireachta de %n carachtar\"] }, \"No link provider found\": { \"v\": [\"Níor aimsíodh aon soláthraí naisc\"] }, \"Write a message …\": { \"v\": [\"Scríobh teachtaireacht …\"] } } }, { \"l\": \"gd\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\", \"\"] } } }, { \"l\": \"gl\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Acadouse o límite de %n caracter por mensaxe\", \"Acadouse o límite de %n caracteres por mensaxe\"] }, \"No link provider found\": { \"v\": [\"Non se atopou ningún provedor de ligazóns\"] }, \"Write a message …\": { \"v\": [\"Escribir unha mensaxe…\"] } } }, { \"l\": \"he\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\", \"\"] }, \"No link provider found\": { \"v\": [\"לא נמצא ספק קישורים\"] } } }, { \"l\": \"hi-IN\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"hr\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Dosegnuto je ograničenje poruke od %n znaka\", \"Dosegnuto je ograničenje poruke od %n znaka\", \"Dosegnuto je ograničenje poruke od %n znakova\"] }, \"No link provider found\": { \"v\": [\"Nije pronađen nijedan pružatelj poveznica\"] }, \"Write a message …\": { \"v\": [\"Napiši poruku …\"] } } }, { \"l\": \"hsb\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\", \"\"] } } }, { \"l\": \"hu\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"%n karakteres üzenetkorlát elérve\", \"%n karakteres üzenetkorlát elérve\"] }, \"No link provider found\": { \"v\": [\"Nem található hivatkozásszolgáltató\"] }, \"Write a message …\": { \"v\": [\"Írjon egy üzenetet…\"] } } }, { \"l\": \"hy\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"ia\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"id\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Batas pesan %n karakter telah tercapai\"] }, \"No link provider found\": { \"v\": [\"Tidak ada penyedia tautan yang ditemukan\"] }, \"Write a message …\": { \"v\": [\"Tulis pesan …\"] } } }, { \"l\": \"is\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] }, \"No link provider found\": { \"v\": [\"Engin tenglaveita fannst\"] }, \"Write a message …\": { \"v\": [\"Skrifaðu skilaboð …\"] } } }, { \"l\": \"it\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] }, \"No link provider found\": { \"v\": [\"Nessun fornitore di link trovato\"] }, \"Write a message …\": { \"v\": [\"Scrivi un messaggio ...\"] } } }, { \"l\": \"ja\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"メッセージの%n文字の制限に達しました\"] }, \"No link provider found\": { \"v\": [\"リンクプロバイダーが見つかりません\"] }, \"Write a message …\": { \"v\": [\"メッセージを書く ...\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"No link provider found\": { \"v\": [\"リンクプロバイダーが見つかりません\"] }, \"Write a message …\": { \"v\": [\"メッセージを書く ...\"] } } }, { \"l\": \"ka\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"ka-GE\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"kab\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"kk\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"kn\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"ko\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"메시지 제한 %n자에 도달\"] }, \"No link provider found\": { \"v\": [\"링크 제공자 없음\"] }, \"Write a message …\": { \"v\": [\"메시지 쓰는 중 ...\"] } } }, { \"l\": \"la\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"lb\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"lo\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"ຮອດຂີດຈຳກັດຂໍ້ຄວາມ %n ໂຕອັກສອນແລ້ວ\"] }, \"No link provider found\": { \"v\": [\"ບໍ່ພົບຜູ້ໃຫ້ບໍລິການລິງ\"] }, \"Write a message …\": { \"v\": [\"ຂຽນຂໍ້ຄວາມ…\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Pasiektas %n pranešimo simbolio skaičiaus limitas\", \"Pasiektas %n pranešimų simbolių skaičiaus limitas\", \"Pasiektas %n pranešimo simbolių skaičių limitas\", \"Pasiektas %n pranešimo simbolių skaičių limitas\"] }, \"No link provider found\": { \"v\": [\"Nerasta nuorodų teikėjo\"] }, \"Write a message …\": { \"v\": [\"Rašyti žinutę  …\"] } } }, { \"l\": \"lv\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] } } }, { \"l\": \"mk\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Достигнат е лимит од %n карактер\", \"Достигнат е лимит од %n карактери за порака\"] }, \"No link provider found\": { \"v\": [\"Не е пронајден давател на линк\"] }, \"Write a message …\": { \"v\": [\"Напиши порака …\"] } } }, { \"l\": \"mn\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"%n тэмдэгтийн зурвасын хязгаарт хүрлээ\", \"%n тэмдэгтийн зурвасын хязгаарт хүрлээ\"] }, \"No link provider found\": { \"v\": [\"Холбоосын үйлчилгээ үзүүлэгч олдсонгүй\"] }, \"Write a message …\": { \"v\": [\"Зурвас бичих …\"] } } }, { \"l\": \"mr\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] }, \"No link provider found\": { \"v\": [\"Finner ingen lenkeleverandør\"] }, \"Write a message …\": { \"v\": [\"Skriv en melding...\"] } } }, { \"l\": \"ne\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"nl\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Berichtlimiet van %n teken bereikt\", \"Berichtlimiet van %n tekens bereikt\"] }, \"No link provider found\": { \"v\": [\"Geen link provider gevonden\"] }, \"Write a message …\": { \"v\": [\"Schrijf een bericht …\"] } } }, { \"l\": \"nn-NO\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"oc\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"pl\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\", \"\"] }, \"No link provider found\": { \"v\": [\"Nie znaleziono dostawcy linków\"] }, \"Write a message …\": { \"v\": [\"Napisz wiadomość…\"] } } }, { \"l\": \"ps\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"pt-BR\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Limite de mensagem de %n caractere atingido\", \"Limite de mensagem de %n de caracteres atingido\", \"Limite de mensagem de %n caracteres atingido\"] }, \"No link provider found\": { \"v\": [\"Nenhum provedor de link encontrado\"] }, \"Write a message …\": { \"v\": [\"Escreva uma mensagem …\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Limite de mensagem de %n carácter atingido\", \"Limite de mensagem de %n caracteres atingido\", \"Limite de mensagem de %n caracteres atingido\"] }, \"No link provider found\": { \"v\": [\"Nenhum fornecedor de link encontrado\"] }, \"Write a message …\": { \"v\": [\"Escreva uma mensagem...\"] } } }, { \"l\": \"ro\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"A fost atinsă limita mesajului de %n caracter\", \"A fost atinsă limita mesajului de %n caractere\", \"A fost atinsă limita mesajului de %n de caractere\"] }, \"No link provider found\": { \"v\": [\"Nu a fost găsit niciun furnizor de linkuri\"] }, \"Write a message …\": { \"v\": [\"Scrie un mesaj …\"] } } }, { \"l\": \"ru\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Достигнут лимит в %n символ\", \"Достигнут лимит в %n символа\", \"Достигнут лимит в %n символов\", \"Достигнут лимит в %n символов\"] }, \"No link provider found\": { \"v\": [\"Поставщик ссылок не найден\"] }, \"Write a message …\": { \"v\": [\"Напишите сообщение …\"] } } }, { \"l\": \"sc\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"si\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"sk\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\", \"\"] }, \"No link provider found\": { \"v\": [\"Žiaden odkaz poskytovateľa nebol nájdený\"] }, \"Write a message …\": { \"v\": [\"Napíšte správu…\"] } } }, { \"l\": \"sl\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\", \"\"] } } }, { \"l\": \"sq\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"sr\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Достигнуто је ограничење величине поруке од %n карактер\", \"Достигнуто је ограничење величине поруке од %n карактера\", \"Достигнуто је ограничење величине поруке од %n карактера\"] }, \"No link provider found\": { \"v\": [\"Није пронађен ниједан пружалац линка\"] }, \"Write a message …\": { \"v\": [\"Напишите поруку…\"] } } }, { \"l\": \"sr-Latn\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\", \"\"] } } }, { \"l\": \"sv\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Meddelandets gräns på %n tecken har nåtts\", \"Meddelandets gräns på %n tecken har nåtts\"] }, \"No link provider found\": { \"v\": [\"Ingen länkleverantör hittades\"] }, \"Write a message …\": { \"v\": [\"Skriv ett meddelande …\"] } } }, { \"l\": \"sw\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"ta\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"tk\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"tr\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"İleti için %n karakter sayısı sınırına ulaşıldı\", \"İleti için %n karakter sayısı sınırına ulaşıldı\"] }, \"No link provider found\": { \"v\": [\"Bağlantı hizmeti sağlayıcısı bulunamadı\"] }, \"Write a message …\": { \"v\": [\"Bir ileti yazın…\"] } } }, { \"l\": \"ug\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"uk\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"Досягнуто обмеження на довжину повідомлення у %n символ.\", \"Досягнуто обмеження на довжину повідомлення у %n символи.\", \"Досягнуто обмеження на довжину повідомлення у%n символів.\", \"Досягнуто обмеження на довжину повідомлення у %n символів.\"] }, \"No link provider found\": { \"v\": [\"Не наведено посилання\"] }, \"Write a message …\": { \"v\": [\"Створити повідомлення …\"] } } }, { \"l\": \"ur-PK\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }, { \"l\": \"uz\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\" %n ta belgidan iborat xabar chegarasiga yetdi\"] }, \"No link provider found\": { \"v\": [\"Hech qanday havola provayderi topilmadi\"] }, \"Write a message …\": { \"v\": [\"Xabar yozish...\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"No link provider found\": { \"v\": [\"未找到任何链接提供者\"] }, \"Write a message …\": { \"v\": [\"编写信息 ...\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"已達到訊息最多 %n 字元限制\"] }, \"No link provider found\": { \"v\": [\"找不到連結提供者\"] }, \"Write a message …\": { \"v\": [\"編寫訊息 …\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"已達到訊息最多 %n 字元限制\"] }, \"No link provider found\": { \"v\": [\"找不到連結提供者\"] }, \"Write a message …\": { \"v\": [\"編寫訊息……\"] } } }, { \"l\": \"zu-ZA\", \"t\": { \"Message limit of %n character reached\": { \"p\": \"Message limit of %n characters reached\", \"v\": [\"\", \"\"] } } }];\nconst t35 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"More items …\": { \"v\": [\"عناصر أخرى ...\"] } } }, { \"l\": \"ast\", \"t\": { \"More items …\": { \"v\": [\"Más elementos…\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"More items …\": { \"v\": [\"Més artícles...\"] } } }, { \"l\": \"cs\", \"t\": { \"More items …\": { \"v\": [\"Další položky …\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"More items …\": { \"v\": [\"Další položky…\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"More items …\": { \"v\": [\"Flere elementer …\"] } } }, { \"l\": \"de\", \"t\": { \"More items …\": { \"v\": [\"Weitere Elemente …\"] } } }, { \"l\": \"de-DE\", \"t\": { \"More items …\": { \"v\": [\"Weitere Elemente …\"] } } }, { \"l\": \"el\", \"t\": { \"More items …\": { \"v\": [\"Περισσότερα στοιχεία …\"] } } }, { \"l\": \"en-GB\", \"t\": { \"More items …\": { \"v\": [\"More items …\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"More items …\": { \"v\": [\"Más ítems ...\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"More items …\": { \"v\": [\"Más elementos...\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"More items …\": { \"v\": [\"Más elementos...\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"More items …\": { \"v\": [\"Más Elementos ...\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"More items …\": { \"v\": [\"Vaata veel…\"] } } }, { \"l\": \"eu\", \"t\": { \"More items …\": { \"v\": [\"Elementu gehiago …\"] } } }, { \"l\": \"fa\", \"t\": { \"More items …\": { \"v\": [\"موارد بیشتر ...\"] } } }, { \"l\": \"fi\", \"t\": { \"More items …\": { \"v\": [\"Lisää kohteita…\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"More items …\": { \"v\": [\"Plus d’éléments…\"] } } }, { \"l\": \"ga\", \"t\": { \"More items …\": { \"v\": [\"Tuilleadh míreanna …\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"More items …\": { \"v\": [\"Máis elementos…\"] } } }, { \"l\": \"he\", \"t\": { \"More items …\": { \"v\": [\"פריטים נוספים…\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"More items …\": { \"v\": [\"Još stavki …\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"More items …\": { \"v\": [\"További elemek…\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"More items …\": { \"v\": [\"Item lainnya …\"] } } }, { \"l\": \"is\", \"t\": { \"More items …\": { \"v\": [\"Fleiri atriði …\"] } } }, { \"l\": \"it\", \"t\": { \"More items …\": { \"v\": [\"Più elementi ...\"] } } }, { \"l\": \"ja\", \"t\": { \"More items …\": { \"v\": [\"他のアイテム …\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"More items …\": { \"v\": [\"他のアイテム\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"More items …\": { \"v\": [\"더 많은 아이템 ...\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"More items …\": { \"v\": [\"ລາຍການເພີ່ມເຕີມ…\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"More items …\": { \"v\": [\"Daugiau elementų …\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"More items …\": { \"v\": [\"Повеќе елементи …\"] } } }, { \"l\": \"mn\", \"t\": { \"More items …\": { \"v\": [\"Илүү олон зүйлс …\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"More items …\": { \"v\": [\"Flere gjenstander...\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"More items …\": { \"v\": [\"Meer items …\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"More items …\": { \"v\": [\"Więcej pozycji…\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"More items …\": { \"v\": [\"Mais itens …\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"More items …\": { \"v\": [\"Mais itens…\"] } } }, { \"l\": \"ro\", \"t\": { \"More items …\": { \"v\": [\"Mai multe elemente …\"] } } }, { \"l\": \"ru\", \"t\": { \"More items …\": { \"v\": [\"Больше элементов …\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"More items …\": { \"v\": [\"Viac položiek...\"] } } }, { \"l\": \"sl\", \"t\": { \"More items …\": { \"v\": [\"Več predmetov ...\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"More items …\": { \"v\": [\"Још ставки...\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"More items …\": { \"v\": [\"Fler objekt …\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"More items …\": { \"v\": [\"Diğer ögeler…\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"More items …\": { \"v\": [\"Більше …\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"More items …\": { \"v\": [\"Yana elementlar...\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"More items …\": { \"v\": [\"更多项目…\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"More items …\": { \"v\": [\"更多項目 …\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"More items …\": { \"v\": [\"更多項目……\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t36 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Next\": { \"v\": [\"التالي\"] }, \"Pause slideshow\": { \"v\": [\"تجميد عرض الشرائح\"] }, \"Previous\": { \"v\": [\"السابق\"] }, \"Start slideshow\": { \"v\": [\"إبدإ العرض\"] } } }, { \"l\": \"ast\", \"t\": { \"Next\": { \"v\": [\"Siguiente\"] }, \"Pause slideshow\": { \"v\": [\"Posar la presentación de diapositives\"] }, \"Previous\": { \"v\": [\"Anterior\"] }, \"Start slideshow\": { \"v\": [\"Aniciar la presentación de diapositives\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": { \"Next\": { \"v\": [\"Da heul\"] }, \"Pause slideshow\": { \"v\": [\"Arsav an diaporama\"] }, \"Previous\": { \"v\": [\"A-raok\"] }, \"Start slideshow\": { \"v\": [\"Kregiñ an diaporama\"] } } }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Next\": { \"v\": [\"Següent\"] }, \"Pause slideshow\": { \"v\": [\"Atura la presentació\"] }, \"Previous\": { \"v\": [\"Anterior\"] }, \"Start slideshow\": { \"v\": [\"Inicia la presentació\"] } } }, { \"l\": \"cs\", \"t\": { \"Next\": { \"v\": [\"Následující\"] }, \"Pause slideshow\": { \"v\": [\"Pozastavit prezentaci\"] }, \"Previous\": { \"v\": [\"Předchozí\"] }, \"Start slideshow\": { \"v\": [\"Spustit prezentaci\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Next\": { \"v\": [\"Následující\"] }, \"Pause slideshow\": { \"v\": [\"Pozastavit prezentaci\"] }, \"Previous\": { \"v\": [\"Předchozí\"] }, \"Start slideshow\": { \"v\": [\"Spustit prezentaci\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Next\": { \"v\": [\"Næste\"] }, \"Pause slideshow\": { \"v\": [\"Sæt slideshowet på pause\"] }, \"Previous\": { \"v\": [\"Forrige\"] }, \"Start slideshow\": { \"v\": [\"Start slideshow\"] } } }, { \"l\": \"de\", \"t\": { \"Next\": { \"v\": [\"Weiter\"] }, \"Pause slideshow\": { \"v\": [\"Diashow pausieren\"] }, \"Previous\": { \"v\": [\"Vorherige\"] }, \"Start slideshow\": { \"v\": [\"Diashow starten\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Next\": { \"v\": [\"Weiter\"] }, \"Pause slideshow\": { \"v\": [\"Diashow pausieren\"] }, \"Previous\": { \"v\": [\"Vorherige\"] }, \"Start slideshow\": { \"v\": [\"Diashow starten\"] } } }, { \"l\": \"el\", \"t\": { \"Next\": { \"v\": [\"Επόμενο\"] }, \"Pause slideshow\": { \"v\": [\"Παύση προβολής διαφανειών\"] }, \"Previous\": { \"v\": [\"Προηγούμενο\"] }, \"Start slideshow\": { \"v\": [\"Έναρξη προβολής διαφανειών\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Next\": { \"v\": [\"Next\"] }, \"Pause slideshow\": { \"v\": [\"Pause slideshow\"] }, \"Previous\": { \"v\": [\"Previous\"] }, \"Start slideshow\": { \"v\": [\"Start slideshow\"] } } }, { \"l\": \"eo\", \"t\": { \"Next\": { \"v\": [\"Sekva\"] }, \"Pause slideshow\": { \"v\": [\"Payzi bildprezenton\"] }, \"Previous\": { \"v\": [\"Antaŭa\"] }, \"Start slideshow\": { \"v\": [\"Komenci bildprezenton\"] } } }, { \"l\": \"es\", \"t\": { \"Next\": { \"v\": [\"Siguiente\"] }, \"Pause slideshow\": { \"v\": [\"Pausar la presentación \"] }, \"Previous\": { \"v\": [\"Anterior\"] }, \"Start slideshow\": { \"v\": [\"Iniciar la presentación\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Next\": { \"v\": [\"Siguiente\"] }, \"Pause slideshow\": { \"v\": [\"Pausar la presentación \"] }, \"Previous\": { \"v\": [\"Anterior\"] }, \"Start slideshow\": { \"v\": [\"Iniciar la presentación\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Next\": { \"v\": [\"Siguiente\"] }, \"Pause slideshow\": { \"v\": [\"Pausar presentación de diapositivas\"] }, \"Previous\": { \"v\": [\"Anterior\"] }, \"Start slideshow\": { \"v\": [\"Iniciar presentación de diapositivas\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Next\": { \"v\": [\"Siguiente\"] }, \"Pause slideshow\": { \"v\": [\"Pausar presentación de diapositivas\"] }, \"Previous\": { \"v\": [\"Anterior\"] }, \"Start slideshow\": { \"v\": [\"Iniciar presentación de diapositivas\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Next\": { \"v\": [\"Edasi\"] }, \"Pause slideshow\": { \"v\": [\"Slaidiesitluse paus\"] }, \"Previous\": { \"v\": [\"Eelmine\"] }, \"Start slideshow\": { \"v\": [\"Alusta slaidiesitust\"] } } }, { \"l\": \"eu\", \"t\": { \"Next\": { \"v\": [\"Hurrengoa\"] }, \"Pause slideshow\": { \"v\": [\"Pausatu diaporama\"] }, \"Previous\": { \"v\": [\"Aurrekoa\"] }, \"Start slideshow\": { \"v\": [\"Hasi diaporama\"] } } }, { \"l\": \"fa\", \"t\": { \"Next\": { \"v\": [\"بعدی\"] }, \"Pause slideshow\": { \"v\": [\"توقف نمایش اسلاید\"] }, \"Previous\": { \"v\": [\"قبلی\"] }, \"Start slideshow\": { \"v\": [\"شروع نمایش اسلاید\"] } } }, { \"l\": \"fi\", \"t\": { \"Next\": { \"v\": [\"Seuraava\"] }, \"Pause slideshow\": { \"v\": [\"Keskeytä diaesitys\"] }, \"Previous\": { \"v\": [\"Edellinen\"] }, \"Start slideshow\": { \"v\": [\"Aloita diaesitys\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Next\": { \"v\": [\"Suivant\"] }, \"Pause slideshow\": { \"v\": [\"Mettre le diaporama en pause\"] }, \"Previous\": { \"v\": [\"Précédent\"] }, \"Start slideshow\": { \"v\": [\"Démarrer le diaporama\"] } } }, { \"l\": \"ga\", \"t\": { \"Next\": { \"v\": [\"Ar aghaidh\"] }, \"Pause slideshow\": { \"v\": [\"Cuir taispeántas sleamhnán ar sos\"] }, \"Previous\": { \"v\": [\"Roimhe Seo\"] }, \"Start slideshow\": { \"v\": [\"Tosaigh taispeántas sleamhnán\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Next\": { \"v\": [\"Seguinte\"] }, \"Pause slideshow\": { \"v\": [\"Pausar o diaporama\"] }, \"Previous\": { \"v\": [\"Anterir\"] }, \"Start slideshow\": { \"v\": [\"Iniciar o diaporama\"] } } }, { \"l\": \"he\", \"t\": { \"Next\": { \"v\": [\"הבא\"] }, \"Pause slideshow\": { \"v\": [\"השהיית מצגת\"] }, \"Previous\": { \"v\": [\"הקודם\"] }, \"Start slideshow\": { \"v\": [\"התחלת המצגת\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Next\": { \"v\": [\"Sljedeće\"] }, \"Pause slideshow\": { \"v\": [\"Pauziraj dijaprojekciju\"] }, \"Previous\": { \"v\": [\"Prethodno\"] }, \"Start slideshow\": { \"v\": [\"Pokreni dijaprojekciju\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Next\": { \"v\": [\"Következő\"] }, \"Pause slideshow\": { \"v\": [\"Diavetítés szüneteltetése\"] }, \"Previous\": { \"v\": [\"Előző\"] }, \"Start slideshow\": { \"v\": [\"Diavetítés indítása\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Next\": { \"v\": [\"Selanjutnya\"] }, \"Pause slideshow\": { \"v\": [\"Jeda tayangan slide\"] }, \"Previous\": { \"v\": [\"Sebelumnya\"] }, \"Start slideshow\": { \"v\": [\"Mulai salindia\"] } } }, { \"l\": \"is\", \"t\": { \"Next\": { \"v\": [\"Næsta\"] }, \"Pause slideshow\": { \"v\": [\"Gera hlé á skyggnusýningu\"] }, \"Previous\": { \"v\": [\"Fyrri\"] }, \"Start slideshow\": { \"v\": [\"Byrja skyggnusýningu\"] } } }, { \"l\": \"it\", \"t\": { \"Next\": { \"v\": [\"Successivo\"] }, \"Pause slideshow\": { \"v\": [\"Presentazione in pausa\"] }, \"Previous\": { \"v\": [\"Precedente\"] }, \"Start slideshow\": { \"v\": [\"Avvia presentazione\"] } } }, { \"l\": \"ja\", \"t\": { \"Next\": { \"v\": [\"次\"] }, \"Pause slideshow\": { \"v\": [\"スライドショーを一時停止\"] }, \"Previous\": { \"v\": [\"前\"] }, \"Start slideshow\": { \"v\": [\"スライドショーを開始\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Next\": { \"v\": [\"次\"] }, \"Pause slideshow\": { \"v\": [\"スライドショーを一時停止\"] }, \"Previous\": { \"v\": [\"前\"] }, \"Start slideshow\": { \"v\": [\"スライドショーを開始\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Next\": { \"v\": [\"다음\"] }, \"Pause slideshow\": { \"v\": [\"슬라이드쇼 일시정지\"] }, \"Previous\": { \"v\": [\"이전\"] }, \"Start slideshow\": { \"v\": [\"슬라이드쇼 시작\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Next\": { \"v\": [\"ຕໍ່ໄປ\"] }, \"Pause slideshow\": { \"v\": [\"ຢຸດສະໄລ້ໂຊຊົ່ວຄາວ\"] }, \"Previous\": { \"v\": [\"ກ່ອນໜ້າ\"] }, \"Start slideshow\": { \"v\": [\"ເລີ່ມສະໄລ້ໂຊ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Next\": { \"v\": [\"Kitas\"] }, \"Pause slideshow\": { \"v\": [\"Pristabdyti skaidrių rodymą\"] }, \"Previous\": { \"v\": [\"Ankstesnis\"] }, \"Start slideshow\": { \"v\": [\"Pradėti skaidrių rodymą\"] } } }, { \"l\": \"lv\", \"t\": { \"Next\": { \"v\": [\"Nākamais\"] }, \"Pause slideshow\": { \"v\": [\"Pauzēt slaidrādi\"] }, \"Previous\": { \"v\": [\"Iepriekšējais\"] }, \"Start slideshow\": { \"v\": [\"Sākt slaidrādi\"] } } }, { \"l\": \"mk\", \"t\": { \"Next\": { \"v\": [\"Следно\"] }, \"Pause slideshow\": { \"v\": [\"Пузирај слајдшоу\"] }, \"Previous\": { \"v\": [\"Предходно\"] }, \"Start slideshow\": { \"v\": [\"Стартувај слајдшоу\"] } } }, { \"l\": \"mn\", \"t\": { \"Next\": { \"v\": [\"Дараах\"] }, \"Pause slideshow\": { \"v\": [\"Слайд шоуг түр зогсоох\"] }, \"Previous\": { \"v\": [\"Өмнөх\"] }, \"Start slideshow\": { \"v\": [\"Слайд шоуг эхлүүлэх\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": { \"Next\": { \"v\": [\"နောက်သို့ဆက်ရန်\"] }, \"Pause slideshow\": { \"v\": [\"စလိုက်ရှိုး ခေတ္တရပ်ရန်\"] }, \"Previous\": { \"v\": [\"ယခင်\"] }, \"Start slideshow\": { \"v\": [\"စလိုက်ရှိုးအား စတင်ရန်\"] } } }, { \"l\": \"nb\", \"t\": { \"Next\": { \"v\": [\"Neste\"] }, \"Pause slideshow\": { \"v\": [\"Pause lysbildefremvisning\"] }, \"Previous\": { \"v\": [\"Forrige\"] }, \"Start slideshow\": { \"v\": [\"Start lysbildefremvisning\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Next\": { \"v\": [\"Volgende\"] }, \"Pause slideshow\": { \"v\": [\"Diavoorstelling pauzeren\"] }, \"Previous\": { \"v\": [\"Vorige\"] }, \"Start slideshow\": { \"v\": [\"Diavoorstelling starten\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": { \"Next\": { \"v\": [\"Seguent\"] }, \"Pause slideshow\": { \"v\": [\"Metre en pausa lo diaporama\"] }, \"Previous\": { \"v\": [\"Precedent\"] }, \"Start slideshow\": { \"v\": [\"Lançar lo diaporama\"] } } }, { \"l\": \"pl\", \"t\": { \"Next\": { \"v\": [\"Następny\"] }, \"Pause slideshow\": { \"v\": [\"Wstrzymaj pokaz slajdów\"] }, \"Previous\": { \"v\": [\"Poprzedni\"] }, \"Start slideshow\": { \"v\": [\"Rozpocznij pokaz slajdów\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Next\": { \"v\": [\"Próximo\"] }, \"Pause slideshow\": { \"v\": [\"Pausar apresentação de slides\"] }, \"Previous\": { \"v\": [\"Anterior\"] }, \"Start slideshow\": { \"v\": [\"Iniciar apresentação de slides\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Next\": { \"v\": [\"Seguinte\"] }, \"Pause slideshow\": { \"v\": [\"Pausar diaporama\"] }, \"Previous\": { \"v\": [\"Anterior\"] }, \"Start slideshow\": { \"v\": [\"Iniciar diaporama\"] } } }, { \"l\": \"ro\", \"t\": { \"Next\": { \"v\": [\"Următorul\"] }, \"Pause slideshow\": { \"v\": [\"Întrerupe prezentarea\"] }, \"Previous\": { \"v\": [\"Anterior\"] }, \"Start slideshow\": { \"v\": [\"Pornește prezentarea\"] } } }, { \"l\": \"ru\", \"t\": { \"Next\": { \"v\": [\"Следующее\"] }, \"Pause slideshow\": { \"v\": [\"Приостановить показ слайдов\"] }, \"Previous\": { \"v\": [\"Предыдущее\"] }, \"Start slideshow\": { \"v\": [\"Начать показ слайдов\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Next\": { \"v\": [\"Ďalej\"] }, \"Pause slideshow\": { \"v\": [\"Pozastaviť prezentáciu\"] }, \"Previous\": { \"v\": [\"Predchádzajúce\"] }, \"Start slideshow\": { \"v\": [\"Začať prezentáciu\"] } } }, { \"l\": \"sl\", \"t\": { \"Next\": { \"v\": [\"Naslednji\"] }, \"Pause slideshow\": { \"v\": [\"Ustavi predstavitev\"] }, \"Previous\": { \"v\": [\"Predhodni\"] }, \"Start slideshow\": { \"v\": [\"Začni predstavitev\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Next\": { \"v\": [\"Следеће\"] }, \"Pause slideshow\": { \"v\": [\"Паузирај слајд шоу\"] }, \"Previous\": { \"v\": [\"Претходно\"] }, \"Start slideshow\": { \"v\": [\"Покрени слајд шоу\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Next\": { \"v\": [\"Nästa\"] }, \"Pause slideshow\": { \"v\": [\"Pausa bildspelet\"] }, \"Previous\": { \"v\": [\"Föregående\"] }, \"Start slideshow\": { \"v\": [\"Starta bildspelet\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Next\": { \"v\": [\"Sonraki\"] }, \"Pause slideshow\": { \"v\": [\"Slayt sunumunu duraklat\"] }, \"Previous\": { \"v\": [\"Önceki\"] }, \"Start slideshow\": { \"v\": [\"Slayt sunumunu başlat\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Next\": { \"v\": [\"Вперед\"] }, \"Pause slideshow\": { \"v\": [\"Пауза у показі слайдів\"] }, \"Previous\": { \"v\": [\"Назад\"] }, \"Start slideshow\": { \"v\": [\"Почати показ слайдів\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Next\": { \"v\": [\"Keyingi\"] }, \"Pause slideshow\": { \"v\": [\"Slayd-shouni to'xtatib turish\"] }, \"Previous\": { \"v\": [\"Oldingi\"] }, \"Start slideshow\": { \"v\": [\"Slayd-shouni boshlash\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Next\": { \"v\": [\"下一个\"] }, \"Pause slideshow\": { \"v\": [\"暂停幻灯片\"] }, \"Previous\": { \"v\": [\"上一个\"] }, \"Start slideshow\": { \"v\": [\"开始幻灯片\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Next\": { \"v\": [\"下一個\"] }, \"Pause slideshow\": { \"v\": [\"暫停幻燈片\"] }, \"Previous\": { \"v\": [\"上一個\"] }, \"Start slideshow\": { \"v\": [\"開始幻燈片\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Next\": { \"v\": [\"下一個\"] }, \"Pause slideshow\": { \"v\": [\"暫停幻燈片\"] }, \"Previous\": { \"v\": [\"上一個\"] }, \"Start slideshow\": { \"v\": [\"開始幻燈片\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t37 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"No emoji found\": { \"v\": [\"لم يتم العثور على أي إيموجي emoji\"] } } }, { \"l\": \"ast\", \"t\": { \"No emoji found\": { \"v\": [\"Nun s'atopó nengún fustaxe\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": { \"No emoji found\": { \"v\": [\"Emoji ebet kavet\"] } } }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"No emoji found\": { \"v\": [\"No s'ha trobat cap emoji\"] } } }, { \"l\": \"cs\", \"t\": { \"No emoji found\": { \"v\": [\"Nenalezeno žádné emoji\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"No emoji found\": { \"v\": [\"Nenalezeno žádné emoji\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"No emoji found\": { \"v\": [\"Ingen emoji fundet\"] } } }, { \"l\": \"de\", \"t\": { \"No emoji found\": { \"v\": [\"Kein Emoji gefunden\"] } } }, { \"l\": \"de-DE\", \"t\": { \"No emoji found\": { \"v\": [\"Kein Emoji gefunden\"] } } }, { \"l\": \"el\", \"t\": { \"No emoji found\": { \"v\": [\"Δεν βρέθηκε emoji\"] } } }, { \"l\": \"en-GB\", \"t\": { \"No emoji found\": { \"v\": [\"No emoji found\"] } } }, { \"l\": \"eo\", \"t\": { \"No emoji found\": { \"v\": [\"La emoĝio forestas\"] } } }, { \"l\": \"es\", \"t\": { \"No emoji found\": { \"v\": [\"No se encontró ningún emoji\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"No emoji found\": { \"v\": [\"No se encontró ningún emoji\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"No emoji found\": { \"v\": [\"No se encontró ningún emoji\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"No emoji found\": { \"v\": [\"No se encontró ningún emoji\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"No emoji found\": { \"v\": [\"Emojit ei leitud\"] } } }, { \"l\": \"eu\", \"t\": { \"No emoji found\": { \"v\": [\"Ez da emojirik aurkitu\"] } } }, { \"l\": \"fa\", \"t\": { \"No emoji found\": { \"v\": [\"هیچ شکلکی یافت نشد\"] } } }, { \"l\": \"fi\", \"t\": { \"No emoji found\": { \"v\": [\"Emojia ei löytynyt\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"No emoji found\": { \"v\": [\"Pas d’émoji trouvé\"] } } }, { \"l\": \"ga\", \"t\": { \"No emoji found\": { \"v\": [\"Níor aimsíodh emoji\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"No emoji found\": { \"v\": [\"Non se atopou ningún «emoji»\"] } } }, { \"l\": \"he\", \"t\": { \"No emoji found\": { \"v\": [\"לא נמצא אמוג׳י\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"No emoji found\": { \"v\": [\"Nije pronađen nijedan emoji\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"No emoji found\": { \"v\": [\"Nem található emodzsi\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"No emoji found\": { \"v\": [\"Tidak ada emoji yang ditemukan\"] } } }, { \"l\": \"is\", \"t\": { \"No emoji found\": { \"v\": [\"Ekkert tjáningartákn fannst\"] } } }, { \"l\": \"it\", \"t\": { \"No emoji found\": { \"v\": [\"Nessun emoji trovato\"] } } }, { \"l\": \"ja\", \"t\": { \"No emoji found\": { \"v\": [\"絵文字が見つかりません\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"No emoji found\": { \"v\": [\"絵文字が見つかりません\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"No emoji found\": { \"v\": [\"이모지 없음\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"No emoji found\": { \"v\": [\"ບໍ່ພົບອີໂມຈິ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"No emoji found\": { \"v\": [\"Nerasta emociukių\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"No emoji found\": { \"v\": [\"Не се пронајдени емотикони\"] } } }, { \"l\": \"mn\", \"t\": { \"No emoji found\": { \"v\": [\"Эможи олдсонгүй\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": { \"No emoji found\": { \"v\": [\"အီမိုဂျီ ရှာဖွေမတွေ့နိုင်ပါ\"] } } }, { \"l\": \"nb\", \"t\": { \"No emoji found\": { \"v\": [\"Fant ingen emoji\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"No emoji found\": { \"v\": [\"Geen emoji gevonden\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"No emoji found\": { \"v\": [\"Nie znaleziono emoji\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"No emoji found\": { \"v\": [\"Nenhum emoji encontrado\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"No emoji found\": { \"v\": [\"Nenhum emoji encontrado\"] } } }, { \"l\": \"ro\", \"t\": { \"No emoji found\": { \"v\": [\"Nu s-a găsit niciun emoji\"] } } }, { \"l\": \"ru\", \"t\": { \"No emoji found\": { \"v\": [\"Эмодзи не найдено\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"No emoji found\": { \"v\": [\"Nenašli sa žiadne emodži\"] } } }, { \"l\": \"sl\", \"t\": { \"No emoji found\": { \"v\": [\"Ni najdenih izraznih ikon\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"No emoji found\": { \"v\": [\"Није пронађен ниједан емођи\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"No emoji found\": { \"v\": [\"Ingen emoji hittades\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"No emoji found\": { \"v\": [\"Herhangi bir emoji bulunamadı\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"No emoji found\": { \"v\": [\"Емоційки відсутні\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"No emoji found\": { \"v\": [\"Hech qanday emoji topilmadi\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"No emoji found\": { \"v\": [\"表情未找到\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"No emoji found\": { \"v\": [\"未找到表情符號\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"No emoji found\": { \"v\": [\"未找到表情符號\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t38 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"No results\": { \"v\": [\"ليس هناك أية نتيجة\"] } } }, { \"l\": \"ast\", \"t\": { \"No results\": { \"v\": [\"Nun hai nengún resultáu\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": { \"No results\": { \"v\": [\"Disoc'h ebet\"] } } }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"No results\": { \"v\": [\"Sense resultats\"] } } }, { \"l\": \"cs\", \"t\": { \"No results\": { \"v\": [\"Nic nenalezeno\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"No results\": { \"v\": [\"Nic nenalezeno\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"No results\": { \"v\": [\"Ingen resultater\"] } } }, { \"l\": \"de\", \"t\": { \"No results\": { \"v\": [\"Keine Ergebnisse\"] } } }, { \"l\": \"de-DE\", \"t\": { \"No results\": { \"v\": [\"Keine Ergebnisse\"] } } }, { \"l\": \"el\", \"t\": { \"No results\": { \"v\": [\"Κανένα αποτέλεσμα\"] } } }, { \"l\": \"en-GB\", \"t\": { \"No results\": { \"v\": [\"No results\"] } } }, { \"l\": \"eo\", \"t\": { \"No results\": { \"v\": [\"La rezulto forestas\"] } } }, { \"l\": \"es\", \"t\": { \"No results\": { \"v\": [\" Ningún resultado\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"No results\": { \"v\": [\"Sin resultados\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"No results\": { \"v\": [\"Sin resultados\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"No results\": { \"v\": [\"Sin resultados\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"No results\": { \"v\": [\"Tulemusi pole\"] } } }, { \"l\": \"eu\", \"t\": { \"No results\": { \"v\": [\"Emaitzarik ez\"] } } }, { \"l\": \"fa\", \"t\": { \"No results\": { \"v\": [\"بدون هیچ نتیجه‌ای\"] } } }, { \"l\": \"fi\", \"t\": { \"No results\": { \"v\": [\"Ei tuloksia\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"No results\": { \"v\": [\"Aucun résultat\"] } } }, { \"l\": \"ga\", \"t\": { \"No results\": { \"v\": [\"Gan torthaí\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"No results\": { \"v\": [\"Sen resultados\"] } } }, { \"l\": \"he\", \"t\": { \"No results\": { \"v\": [\"אין תוצאות\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"No results\": { \"v\": [\"Nema rezultata\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"No results\": { \"v\": [\"Nincs találat\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"No results\": { \"v\": [\"Tidak ada hasil\"] } } }, { \"l\": \"is\", \"t\": { \"No results\": { \"v\": [\"Engar niðurstöður\"] } } }, { \"l\": \"it\", \"t\": { \"No results\": { \"v\": [\"Nessun risultato\"] } } }, { \"l\": \"ja\", \"t\": { \"No results\": { \"v\": [\"結果無し\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"No results\": { \"v\": [\"結果無し\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"No results\": { \"v\": [\"결과 없음\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"No results\": { \"v\": [\"ບໍ່ມີຜົນລັບ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"No results\": { \"v\": [\"Nėra rezultatų\"] } } }, { \"l\": \"lv\", \"t\": { \"No results\": { \"v\": [\"Nav rezultātu\"] } } }, { \"l\": \"mk\", \"t\": { \"No results\": { \"v\": [\"Нема резултати\"] } } }, { \"l\": \"mn\", \"t\": { \"No results\": { \"v\": [\"Үр дүн алга\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": { \"No results\": { \"v\": [\"ရလဒ်မရှိပါ\"] } } }, { \"l\": \"nb\", \"t\": { \"No results\": { \"v\": [\"Ingen resultater\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"No results\": { \"v\": [\"Geen resultaten\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": { \"No results\": { \"v\": [\"Cap de resultat\"] } } }, { \"l\": \"pl\", \"t\": { \"No results\": { \"v\": [\"Brak wyników\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"No results\": { \"v\": [\"Sem resultados\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"No results\": { \"v\": [\"Sem resultados\"] } } }, { \"l\": \"ro\", \"t\": { \"No results\": { \"v\": [\"Niciun rezultat\"] } } }, { \"l\": \"ru\", \"t\": { \"No results\": { \"v\": [\"Ничего не найдено\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"No results\": { \"v\": [\"Žiadne výsledky\"] } } }, { \"l\": \"sl\", \"t\": { \"No results\": { \"v\": [\"Ni zadetkov\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"No results\": { \"v\": [\"Нема резултата\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"No results\": { \"v\": [\"Inga resultat\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"No results\": { \"v\": [\"Herhangi bir sonuç bulunamadı\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"No results\": { \"v\": [\"Відсутні результати\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"No results\": { \"v\": [\"Natija yoʻq\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"No results\": { \"v\": [\"无结果\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"No results\": { \"v\": [\"無結果\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"No results\": { \"v\": [\"無結果\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t39 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['إفتَح الرابط إلى \"{resourceName}\"'] } } }, { \"l\": \"ast\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [\"Abrir l'enllaz a «{resourceName}»\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [\"Otevřít odkaz na „{resourceName}“\"] } } }, { \"l\": \"cs-CZ\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [\"Otevřít odkaz na „{resourceName}“\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Åbn link til \"{resourceName}\"'] } } }, { \"l\": \"de\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Link zu \"{resourceName}\" öffnen'] } } }, { \"l\": \"de-DE\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Link zu \"{resourceName}\" öffnen'] } } }, { \"l\": \"el\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Άνοιγμα συνδέσμου για \"{resourceName}\"'] } } }, { \"l\": \"en-GB\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Open link to \"{resourceName}\"'] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Abrir enlace a \"{resourceName}\"'] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Abrir enlace a \"{resourceName}\"'] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Abrir enlace a \"{resourceName}\"'] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Abrir enlace a \"{resourceName}\"'] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [\"Ava link „{resourceName}“\"] } } }, { \"l\": \"eu\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Ireki \"{resourceName}\" esteka'] } } }, { \"l\": \"fa\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [\"باز کردن پیوند به «{resourceName}»\"] } } }, { \"l\": \"fi\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Avaa linkki \"{resourceName}\"'] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [\"Ouvrir le lien vers « {resourceName} »\"] } } }, { \"l\": \"ga\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Oscail nasc chuig \"{resourceName}\"'] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [\"Abrir a ligazón a «{resourceName}»\"] } } }, { \"l\": \"he\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [\"פתיחת קישור אל „{resourceName}”\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Otvori poveznicu za \"{resourceName}\"'] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [\"A(z) „{resourceName}” hivatkozásának megnyitása\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Buka tautan ke \"{resourceName}\"'] } } }, { \"l\": \"is\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Opna tengil í \"{resourceName}\"'] } } }, { \"l\": \"it\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Apri il link a \"{resourceName}\"'] } } }, { \"l\": \"ja\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['\"{resourceName}\" へのリンクを開く'] } } }, { \"l\": \"ja-JP\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['\"{resourceName}\" へのリンクを開く'] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['\"{resourceName}\"의 링크 열기'] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [\"ເປີດລິງໄປທີ່ “{resourceName}”\"] } } }, { \"l\": \"lt-LT\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [\"Atidaryti nuorodą į „{resourceName}“\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Отвори линк до \"{resourceName}\"'] } } }, { \"l\": \"mn\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['\"{resourceName}\" руу холбоос нээх'] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Åpne lenken til \"{resourceName}\"'] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Link naar \"{resourceName}\" openen'] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Otwórz link do \"{resourceName}\"'] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Abrir o link para \"{resourceName}\"'] } } }, { \"l\": \"pt-PT\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Abrir link para \"{resourceName}\"'] } } }, { \"l\": \"ro\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [\"Deschide linkul către „{resourceName}”\"] } } }, { \"l\": \"ru\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [\"Открыть ссылку на «{resourceName}»\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Otvoriť link v \"{resourceName}\"'] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [\"Отвори линк на „{resourceName}”\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Öppna länken till \"{resourceName}\"'] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Bağlantıyı \"{resourceName}\" üzerine aç'] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": ['Відкрити посилання на \"{resourceName}\"'] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [' \"{resourceName}\" ga havolani ochish'] } } }, { \"l\": \"zh-CN\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [\"打开 “{resourceName}” 的链接\"] } } }, { \"l\": \"zh-HK\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [\"開啟到「{resourceName}」的連結\"] } } }, { \"l\": \"zh-TW\", \"t\": { 'Open link to \"{resourceName}\"': { \"v\": [\"開啟到「{resourceName}」的連結\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t40 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Pick a date\": { \"v\": [\"إختَر التاريخ\"] }, \"Pick a date and a time\": { \"v\": [\"إختَر التاريخ و الوقت\"] }, \"Pick a month\": { \"v\": [\"إختَر الشهر\"] }, \"Pick a time\": { \"v\": [\"إختَر الوقت\"] }, \"Pick a week\": { \"v\": [\"إختَر الأسبوع\"] }, \"Pick a year\": { \"v\": [\"إختَر السنة\"] }, \"Please select a time zone:\": { \"v\": [\"الرجاء تحديد المنطقة الزمنية:\"] } } }, { \"l\": \"ast\", \"t\": { \"Pick a date\": { \"v\": [\"Escueyi una data\"] }, \"Pick a date and a time\": { \"v\": [\"Escueyi una data y hora\"] }, \"Pick a month\": { \"v\": [\"Escueyi un mes\"] }, \"Pick a time\": { \"v\": [\"Escueyi una hora\"] }, \"Pick a week\": { \"v\": [\"Escueyi una selmana\"] }, \"Pick a year\": { \"v\": [\"Escueyi un añu\"] }, \"Please select a time zone:\": { \"v\": [\"Seleiciona un fusu horariu:\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Please select a time zone:\": { \"v\": [\"Seleccioneu una zona horària:\"] } } }, { \"l\": \"cs\", \"t\": { \"Pick a date\": { \"v\": [\"Vybrat datum\"] }, \"Pick a date and a time\": { \"v\": [\"Vybrat datum a čas\"] }, \"Pick a month\": { \"v\": [\"Vybrat měsíc\"] }, \"Pick a time\": { \"v\": [\"Vybrat čas\"] }, \"Pick a week\": { \"v\": [\"Vybrat týden\"] }, \"Pick a year\": { \"v\": [\"Vybrat rok\"] }, \"Please select a time zone:\": { \"v\": [\"Vyberte časovou zónu:\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Pick a date\": { \"v\": [\"Vybrat datum\"] }, \"Pick a date and a time\": { \"v\": [\"Vybrat datum a čas\"] }, \"Pick a month\": { \"v\": [\"Vybrat měsíc\"] }, \"Pick a time\": { \"v\": [\"Vybrat čas\"] }, \"Pick a week\": { \"v\": [\"Vybrat týden\"] }, \"Pick a year\": { \"v\": [\"Vybrat rok\"] }, \"Please select a time zone:\": { \"v\": [\"Vyberte časovou zónu:\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Pick a date\": { \"v\": [\"Vælg en dato\"] }, \"Pick a date and a time\": { \"v\": [\"Vælg en dato og tidspunkt\"] }, \"Pick a month\": { \"v\": [\"Vælg en måned\"] }, \"Pick a time\": { \"v\": [\"Vælg et tidspunkt\"] }, \"Pick a week\": { \"v\": [\"Vælg en uge\"] }, \"Pick a year\": { \"v\": [\"Vælg et år\"] }, \"Please select a time zone:\": { \"v\": [\"Vælg venligst en tidszone:\"] } } }, { \"l\": \"de\", \"t\": { \"Pick a date\": { \"v\": [\"Ein Datum auswählen\"] }, \"Pick a date and a time\": { \"v\": [\"Datum und Uhrzeit auswählen\"] }, \"Pick a month\": { \"v\": [\"Einen Monat auswählen\"] }, \"Pick a time\": { \"v\": [\"Eine Uhrzeit auswählen\"] }, \"Pick a week\": { \"v\": [\"Eine Woche auswählen\"] }, \"Pick a year\": { \"v\": [\"Ein Jahr auswählen\"] }, \"Please select a time zone:\": { \"v\": [\"Bitte eine Zeitzone auswählen:\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Pick a date\": { \"v\": [\"Ein Datum auswählen\"] }, \"Pick a date and a time\": { \"v\": [\"Datum und Uhrzeit auswählen\"] }, \"Pick a month\": { \"v\": [\"Einen Monat auswählen\"] }, \"Pick a time\": { \"v\": [\"Eine Uhrzeit auswählen\"] }, \"Pick a week\": { \"v\": [\"Eine Woche auswählen\"] }, \"Pick a year\": { \"v\": [\"Ein Jahr auswählen\"] }, \"Please select a time zone:\": { \"v\": [\"Bitte eine Zeitzone auswählen:\"] } } }, { \"l\": \"el\", \"t\": { \"Pick a date\": { \"v\": [\"Επιλέξτε ημερομηνία\"] }, \"Pick a date and a time\": { \"v\": [\"Επιλέξτε ημερομηνία και ώρα\"] }, \"Pick a month\": { \"v\": [\"Επιλέξτε μήνα\"] }, \"Pick a time\": { \"v\": [\"Επιλέξτε ώρα\"] }, \"Pick a week\": { \"v\": [\"Επιλέξτε εβδομάδα\"] }, \"Pick a year\": { \"v\": [\"Επιλέξτε έτος\"] }, \"Please select a time zone:\": { \"v\": [\"Παρακαλούμε επιλέξτε μια ζώνη ώρας:\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Pick a date\": { \"v\": [\"Pick a date\"] }, \"Pick a date and a time\": { \"v\": [\"Pick a date and a time\"] }, \"Pick a month\": { \"v\": [\"Pick a month\"] }, \"Pick a time\": { \"v\": [\"Pick a time\"] }, \"Pick a week\": { \"v\": [\"Pick a week\"] }, \"Pick a year\": { \"v\": [\"Pick a year\"] }, \"Please select a time zone:\": { \"v\": [\"Please select a time zone:\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Pick a date\": { \"v\": [\"Seleccione una fecha\"] }, \"Pick a date and a time\": { \"v\": [\"Seleccione una fecha y hora\"] }, \"Pick a month\": { \"v\": [\"Seleccione un mes\"] }, \"Pick a time\": { \"v\": [\"Seleccione una hora\"] }, \"Pick a week\": { \"v\": [\"Seleccione una semana\"] }, \"Pick a year\": { \"v\": [\"Seleccione un año\"] }, \"Please select a time zone:\": { \"v\": [\"Por favor elija un huso horario:\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Pick a date\": { \"v\": [\"Elija una fecha\"] }, \"Pick a date and a time\": { \"v\": [\"Elija una fecha y hora\"] }, \"Pick a month\": { \"v\": [\"Elija un mes\"] }, \"Pick a time\": { \"v\": [\"Elija una hora\"] }, \"Pick a week\": { \"v\": [\"Elija una semana\"] }, \"Pick a year\": { \"v\": [\"Elija un año\"] }, \"Please select a time zone:\": { \"v\": [\"Por favor, elija una zona horaria:\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Pick a date\": { \"v\": [\"Seleccionar una fecha\"] }, \"Pick a date and a time\": { \"v\": [\"Seleccionar una fecha y una hora\"] }, \"Pick a month\": { \"v\": [\"Seleccionar un mes\"] }, \"Pick a time\": { \"v\": [\"Seleccionar una semana\"] }, \"Pick a week\": { \"v\": [\"Seleccionar una semana\"] }, \"Pick a year\": { \"v\": [\"Seleccionar un año\"] }, \"Please select a time zone:\": { \"v\": [\"Por favor, selecciona una zona horaria:\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Pick a date\": { \"v\": [\"Seleccionar una fecha\"] }, \"Pick a date and a time\": { \"v\": [\"Seleccionar una fecha y hora\"] }, \"Pick a month\": { \"v\": [\"Seleccionar un mes\"] }, \"Pick a time\": { \"v\": [\"Seleccionar una hora\"] }, \"Pick a week\": { \"v\": [\"Seleccionar una semana\"] }, \"Pick a year\": { \"v\": [\"Seleccionar un año\"] }, \"Please select a time zone:\": { \"v\": [\"Por favor seleccione una zona horaria:\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Pick a date\": { \"v\": [\"Vali kuupäev\"] }, \"Pick a date and a time\": { \"v\": [\"Vali kuupäev ja kellaaeg\"] }, \"Pick a month\": { \"v\": [\"Vali kuu\"] }, \"Pick a time\": { \"v\": [\"Vali kellaaeg\"] }, \"Pick a week\": { \"v\": [\"Vali nädal\"] }, \"Pick a year\": { \"v\": [\"Vali aasta\"] }, \"Please select a time zone:\": { \"v\": [\"Vali ajatsoon\"] } } }, { \"l\": \"eu\", \"t\": { \"Pick a date\": { \"v\": [\"Aukeratu data bat\"] }, \"Pick a date and a time\": { \"v\": [\"Aukeratu data eta ordu bat\"] }, \"Pick a month\": { \"v\": [\"Aukeratu hilabete bat\"] }, \"Pick a time\": { \"v\": [\"Aukeratu ordu bat\"] }, \"Pick a week\": { \"v\": [\"Aukeratu aste bat\"] }, \"Pick a year\": { \"v\": [\"Aukeratu urte bat\"] }, \"Please select a time zone:\": { \"v\": [\"Mesedez hautatu ordu-zona bat:\"] } } }, { \"l\": \"fa\", \"t\": { \"Pick a date\": { \"v\": [\"انتخاب تاریخ\"] }, \"Pick a date and a time\": { \"v\": [\"انتخاب تاریخ و زمان\"] }, \"Pick a month\": { \"v\": [\"انتخاب ماه\"] }, \"Pick a time\": { \"v\": [\"انتخاب زمان\"] }, \"Pick a week\": { \"v\": [\"انتخاب هفته\"] }, \"Pick a year\": { \"v\": [\"انتخاب سال\"] }, \"Please select a time zone:\": { \"v\": [\"لطفا یک منطقهٔ زمانی را انتخاب کنید:\"] } } }, { \"l\": \"fi\", \"t\": { \"Pick a date\": { \"v\": [\"Valitse päivä\"] }, \"Pick a date and a time\": { \"v\": [\"Valitse päivä ja kellonaika\"] }, \"Pick a month\": { \"v\": [\"Valitse kuukausi\"] }, \"Pick a time\": { \"v\": [\"Valitse kellonaika\"] }, \"Pick a week\": { \"v\": [\"Valitse viikko\"] }, \"Pick a year\": { \"v\": [\"Valitse vuosi\"] }, \"Please select a time zone:\": { \"v\": [\"Valitse aikavyöhyke:\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Pick a date\": { \"v\": [\"Sélectionner une date\"] }, \"Pick a date and a time\": { \"v\": [\"Sélectionner une date et une heure\"] }, \"Pick a month\": { \"v\": [\"Sélectionner un mois\"] }, \"Pick a time\": { \"v\": [\"Sélectionner une heure\"] }, \"Pick a week\": { \"v\": [\"Sélectionner une semaine\"] }, \"Pick a year\": { \"v\": [\"Sélectionner une année\"] }, \"Please select a time zone:\": { \"v\": [\"Sélectionnez un fuseau horaire : \"] } } }, { \"l\": \"ga\", \"t\": { \"Pick a date\": { \"v\": [\"Roghnaigh dáta\"] }, \"Pick a date and a time\": { \"v\": [\"Roghnaigh dáta agus am\"] }, \"Pick a month\": { \"v\": [\"Roghnaigh mí\"] }, \"Pick a time\": { \"v\": [\"Roghnaigh am\"] }, \"Pick a week\": { \"v\": [\"Roghnaigh seachtain\"] }, \"Pick a year\": { \"v\": [\"Roghnaigh bliain\"] }, \"Please select a time zone:\": { \"v\": [\"Roghnaigh crios ama le do thoil:\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Pick a date\": { \"v\": [\"Escolla unha data\"] }, \"Pick a date and a time\": { \"v\": [\"Escolle unha data e unha hora\"] }, \"Pick a month\": { \"v\": [\"Escolla un mes\"] }, \"Pick a time\": { \"v\": [\"Escolla unha hora\"] }, \"Pick a week\": { \"v\": [\"Escolla unha semana\"] }, \"Pick a year\": { \"v\": [\"Escolla un ano\"] }, \"Please select a time zone:\": { \"v\": [\"Escolla un fuso horario:\"] } } }, { \"l\": \"he\", \"t\": { \"Pick a date\": { \"v\": [\"נא לבחור תאריך\"] }, \"Pick a date and a time\": { \"v\": [\"נא לבחור תאריך ושעה\"] }, \"Pick a month\": { \"v\": [\"נא לבחור חודש\"] }, \"Pick a time\": { \"v\": [\"נא לבחור שעה\"] }, \"Pick a week\": { \"v\": [\"נא לבחור שבוע\"] }, \"Pick a year\": { \"v\": [\"נא לבחור שנה\"] }, \"Please select a time zone:\": { \"v\": [\"נא לבחור אזור זמן:\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": {} }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Please select a time zone:\": { \"v\": [\"Válasszon időzónát:\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Pick a date\": { \"v\": [\"Pilih tanggal\"] }, \"Pick a date and a time\": { \"v\": [\"Pilih tanggal dan waktu\"] }, \"Pick a month\": { \"v\": [\"Pilih bulan\"] }, \"Pick a time\": { \"v\": [\"Pilih waktu\"] }, \"Pick a week\": { \"v\": [\"Pilih pekan\"] }, \"Pick a year\": { \"v\": [\"Pilih tahun\"] }, \"Please select a time zone:\": { \"v\": [\"Mohon pilih zona waktu\"] } } }, { \"l\": \"is\", \"t\": { \"Pick a date\": { \"v\": [\"Veldu dagsetningu\"] }, \"Pick a date and a time\": { \"v\": [\"Veldu dagsetningu og tíma\"] }, \"Pick a month\": { \"v\": [\"Veldu mánuð\"] }, \"Pick a time\": { \"v\": [\"Veldu tíma\"] }, \"Pick a week\": { \"v\": [\"Veldu viku\"] }, \"Pick a year\": { \"v\": [\"Veldu ár\"] }, \"Please select a time zone:\": { \"v\": [\"Veldu tímabelti:\"] } } }, { \"l\": \"it\", \"t\": { \"Pick a date\": { \"v\": [\"Scegli una data\"] }, \"Pick a date and a time\": { \"v\": [\"Scegli una data e un orario\"] }, \"Pick a month\": { \"v\": [\"Scegli un mese\"] }, \"Pick a time\": { \"v\": [\"Scegli un momento\"] }, \"Pick a week\": { \"v\": [\"Scegli una settimana\"] }, \"Pick a year\": { \"v\": [\"Scegli un anno\"] }, \"Please select a time zone:\": { \"v\": [\"Si prega di selezionare un fuso orario:\"] } } }, { \"l\": \"ja\", \"t\": { \"Pick a date\": { \"v\": [\"日付を選択してください\"] }, \"Pick a date and a time\": { \"v\": [\"日付と時刻を選択してください\"] }, \"Pick a month\": { \"v\": [\"月を選択してください\"] }, \"Pick a time\": { \"v\": [\"時間を選択してください\"] }, \"Pick a week\": { \"v\": [\"週を選択してください\"] }, \"Pick a year\": { \"v\": [\"年を選択してください\"] }, \"Please select a time zone:\": { \"v\": [\"タイムゾーンを選んで下さい:\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Pick a date\": { \"v\": [\"日付を選択してください\"] }, \"Pick a date and a time\": { \"v\": [\"日付と時刻を選択してください\"] }, \"Pick a month\": { \"v\": [\"月を選択してください\"] }, \"Pick a time\": { \"v\": [\"時間を選択してください\"] }, \"Pick a week\": { \"v\": [\"週を選択してください\"] }, \"Pick a year\": { \"v\": [\"年を選択してください\"] }, \"Please select a time zone:\": { \"v\": [\"タイムゾーンを選んで下さい:\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Pick a date\": { \"v\": [\"날짜 선택\"] }, \"Pick a date and a time\": { \"v\": [\"날짜와 시간 선택\"] }, \"Pick a month\": { \"v\": [\"달 선택\"] }, \"Pick a time\": { \"v\": [\"시간 선택\"] }, \"Pick a week\": { \"v\": [\"주 선택\"] }, \"Pick a year\": { \"v\": [\"연도 선택\"] }, \"Please select a time zone:\": { \"v\": [\"시간대를 선택하세요:\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": {} }, { \"l\": \"lt-LT\", \"t\": {} }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Please select a time zone:\": { \"v\": [\"Изберете временска зона:\"] } } }, { \"l\": \"mn\", \"t\": {} }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": { \"Please select a time zone:\": { \"v\": [\"ဒေသစံတော်ချိန် ရွေးချယ်ပေးပါ\"] } } }, { \"l\": \"nb\", \"t\": { \"Pick a date\": { \"v\": [\"Velg en dato\"] }, \"Pick a date and a time\": { \"v\": [\"Velg en dato og et tidspunkt\"] }, \"Pick a month\": { \"v\": [\"Velg en måned\"] }, \"Pick a time\": { \"v\": [\"Velg et tidspunkt\"] }, \"Pick a week\": { \"v\": [\"Velg en uke\"] }, \"Pick a year\": { \"v\": [\"Velg et år\"] }, \"Please select a time zone:\": { \"v\": [\"Vennligst velg tidssone\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Pick a date\": { \"v\": [\"Selecteer een datum\"] }, \"Pick a date and a time\": { \"v\": [\"Selecteer een datum en tijd\"] }, \"Pick a month\": { \"v\": [\"Selecteer een maand\"] }, \"Pick a time\": { \"v\": [\"Selecteer een tijd\"] }, \"Pick a week\": { \"v\": [\"Selecteer een week\"] }, \"Pick a year\": { \"v\": [\"Selecteer een jaar\"] }, \"Please select a time zone:\": { \"v\": [\"Selecteer een tijdzone:\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Pick a date\": { \"v\": [\"Wybierz datę\"] }, \"Pick a date and a time\": { \"v\": [\"Wybierz datę i godzinę\"] }, \"Pick a month\": { \"v\": [\"Wybierz miesiąc\"] }, \"Pick a time\": { \"v\": [\"Wybierz czas\"] }, \"Pick a week\": { \"v\": [\"Wybierz tydzień\"] }, \"Pick a year\": { \"v\": [\"Wybierz rok\"] }, \"Please select a time zone:\": { \"v\": [\"Wybierz strefę czasową:\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Pick a date\": { \"v\": [\"Escolha uma data\"] }, \"Pick a date and a time\": { \"v\": [\"Escolha uma data e um horário\"] }, \"Pick a month\": { \"v\": [\"Escolha um mês\"] }, \"Pick a time\": { \"v\": [\"Escolha um horário\"] }, \"Pick a week\": { \"v\": [\"Escolha uma semana\"] }, \"Pick a year\": { \"v\": [\"Escolha um ano\"] }, \"Please select a time zone:\": { \"v\": [\"Selecione um fuso horário: \"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Pick a date\": { \"v\": [\"Escolha uma data\"] }, \"Pick a date and a time\": { \"v\": [\"Escolha uma data e uma hora\"] }, \"Pick a month\": { \"v\": [\"Escolha um mês\"] }, \"Pick a time\": { \"v\": [\"Escolha uma hora\"] }, \"Pick a week\": { \"v\": [\"Escolha uma semana\"] }, \"Pick a year\": { \"v\": [\"Escolha um ano\"] }, \"Please select a time zone:\": { \"v\": [\"Por favor, selecione um fuso horário: \"] } } }, { \"l\": \"ro\", \"t\": { \"Pick a date\": { \"v\": [\"Selectați o dată\"] }, \"Pick a date and a time\": { \"v\": [\"Selectați data și timpul\"] }, \"Pick a month\": { \"v\": [\"Selectați o lună\"] }, \"Pick a time\": { \"v\": [\"Selectați timpul\"] }, \"Pick a week\": { \"v\": [\"Selectați o săptămână\"] }, \"Pick a year\": { \"v\": [\"Selectați anul\"] }, \"Please select a time zone:\": { \"v\": [\"Vă rugăm să selectați un fus orar:\"] } } }, { \"l\": \"ru\", \"t\": { \"Pick a date\": { \"v\": [\"Выберите дату\"] }, \"Pick a date and a time\": { \"v\": [\"Выберите дату и время\"] }, \"Pick a month\": { \"v\": [\"Выберите месяц\"] }, \"Pick a time\": { \"v\": [\"Выберите время\"] }, \"Pick a week\": { \"v\": [\"Выберите неделю\"] }, \"Pick a year\": { \"v\": [\"Выберите год\"] }, \"Please select a time zone:\": { \"v\": [\"Пожалуйста, выберите часовой пояс:\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Pick a date\": { \"v\": [\"Vybrať dátum\"] }, \"Pick a date and a time\": { \"v\": [\"Vybrať dátum a čas\"] }, \"Pick a month\": { \"v\": [\"Vybrať mesiac\"] }, \"Pick a time\": { \"v\": [\"Vybrať čas\"] }, \"Pick a week\": { \"v\": [\"Vybrať týždeň\"] }, \"Pick a year\": { \"v\": [\"Vybrať rok\"] }, \"Please select a time zone:\": { \"v\": [\"Prosím vyberte časovú zónu:\"] } } }, { \"l\": \"sl\", \"t\": { \"Pick a date\": { \"v\": [\"Izbor datuma\"] }, \"Pick a date and a time\": { \"v\": [\"Izbor datuma in časa\"] }, \"Pick a month\": { \"v\": [\"Izbor meseca\"] }, \"Pick a time\": { \"v\": [\"Izbor časa\"] }, \"Pick a week\": { \"v\": [\"Izbor tedna\"] }, \"Pick a year\": { \"v\": [\"Izbor leta\"] }, \"Please select a time zone:\": { \"v\": [\"Izbor časovnega pasu:\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Pick a date\": { \"v\": [\"Изаберите датум\"] }, \"Pick a date and a time\": { \"v\": [\"Изаберите датум и време\"] }, \"Pick a month\": { \"v\": [\"Изаберите месец\"] }, \"Pick a time\": { \"v\": [\"Изаберите време\"] }, \"Pick a week\": { \"v\": [\"Изаберите недељу\"] }, \"Pick a year\": { \"v\": [\"Изаберите годину\"] }, \"Please select a time zone:\": { \"v\": [\"Молимо вас да изаберете временску зону:\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Pick a date\": { \"v\": [\"Välj datum\"] }, \"Pick a date and a time\": { \"v\": [\"Välj datum och tid\"] }, \"Pick a month\": { \"v\": [\"Välj månad\"] }, \"Pick a time\": { \"v\": [\"Välj tid\"] }, \"Pick a week\": { \"v\": [\"Välj vecka\"] }, \"Pick a year\": { \"v\": [\"Välj år\"] }, \"Please select a time zone:\": { \"v\": [\"Välj tidszon:\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Pick a date\": { \"v\": [\"Bir tarih seçin\"] }, \"Pick a date and a time\": { \"v\": [\"Bir tarih ve saat seçin\"] }, \"Pick a month\": { \"v\": [\"Bir ay seçin\"] }, \"Pick a time\": { \"v\": [\"Bir saat seçin\"] }, \"Pick a week\": { \"v\": [\"Bir hafta seçin\"] }, \"Pick a year\": { \"v\": [\"Bir yıl seçin\"] }, \"Please select a time zone:\": { \"v\": [\"Lütfen bir saat dilimi seçin:\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Pick a date\": { \"v\": [\"Вибрати дату\"] }, \"Pick a date and a time\": { \"v\": [\"Виберіть дату та час\"] }, \"Pick a month\": { \"v\": [\"Виберіть місяць\"] }, \"Pick a time\": { \"v\": [\"Виберіть час\"] }, \"Pick a week\": { \"v\": [\"Виберіть тиждень\"] }, \"Pick a year\": { \"v\": [\"Виберіть рік\"] }, \"Please select a time zone:\": { \"v\": [\"Виберіть часовий пояс:\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Pick a date\": { \"v\": [\"Sana tanlang\"] }, \"Pick a date and a time\": { \"v\": [\"Sana va vaqtni tanlang\"] }, \"Pick a month\": { \"v\": [\"Oyni tanlang\"] }, \"Pick a time\": { \"v\": [\"Vaqtni tanlang\"] }, \"Pick a week\": { \"v\": [\"Haftani tanlang\"] }, \"Pick a year\": { \"v\": [\"Yilni tanlang\"] }, \"Please select a time zone:\": { \"v\": [\"Vaqt mintaqasini tanlang:\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Pick a date\": { \"v\": [\"选择日期\"] }, \"Pick a date and a time\": { \"v\": [\"选择日期和时间\"] }, \"Pick a month\": { \"v\": [\"选择月份\"] }, \"Pick a time\": { \"v\": [\"选择时间\"] }, \"Pick a week\": { \"v\": [\"选择星期\"] }, \"Pick a year\": { \"v\": [\"选择年份\"] }, \"Please select a time zone:\": { \"v\": [\"请选择一个时区:\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Pick a date\": { \"v\": [\"挑選日期\"] }, \"Pick a date and a time\": { \"v\": [\"挑選日期與時間\"] }, \"Pick a month\": { \"v\": [\"挑選月份\"] }, \"Pick a time\": { \"v\": [\"挑選時間\"] }, \"Pick a week\": { \"v\": [\"挑選星期\"] }, \"Pick a year\": { \"v\": [\"挑選年份\"] }, \"Please select a time zone:\": { \"v\": [\"請選擇時區:\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Pick a date\": { \"v\": [\"挑選日期\"] }, \"Pick a date and a time\": { \"v\": [\"挑選日期與時間\"] }, \"Pick a month\": { \"v\": [\"挑選月份\"] }, \"Pick a time\": { \"v\": [\"挑選時間\"] }, \"Pick a week\": { \"v\": [\"挑選星期\"] }, \"Pick a year\": { \"v\": [\"挑選年份\"] }, \"Please select a time zone:\": { \"v\": [\"請選取時區:\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t41 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": {} }, { \"l\": \"ast\", \"t\": {} }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Pick file\": { \"v\": [\"Vybrat soubor\"] }, \"Pick files\": { \"v\": [\"Vybrat soubory\"] }, \"Pick folder\": { \"v\": [\"Vybrat složku\"] }, \"Upload file\": { \"v\": [\"Nahrát soubor\"] }, \"Upload files\": { \"v\": [\"Nahrát soubory\"] }, \"Upload folder\": { \"v\": [\"Nahrát složku\"] }, \"Uploading …\": { \"v\": [\"Nahrávání …\"] } } }, { \"l\": \"cs-CZ\", \"t\": {} }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Pick file\": { \"v\": [\"Vælg fil\"] }, \"Pick files\": { \"v\": [\"Vælg filer\"] }, \"Pick folder\": { \"v\": [\"Vælg mappe\"] }, \"Upload file\": { \"v\": [\"Overfør fil\"] }, \"Upload files\": { \"v\": [\"Overfør filer\"] }, \"Upload folder\": { \"v\": [\"Overfør mappe\"] }, \"Uploading …\": { \"v\": [\"Overfører …\"] } } }, { \"l\": \"de\", \"t\": { \"Pick file\": { \"v\": [\"Datei auswählen\"] }, \"Pick files\": { \"v\": [\"Dateien auswählen\"] }, \"Pick folder\": { \"v\": [\"Ordner auswählen\"] }, \"Upload file\": { \"v\": [\"Datei hochladen\"] }, \"Upload files\": { \"v\": [\"Dateien hochladen\"] }, \"Upload folder\": { \"v\": [\"Ordner hochladen\"] }, \"Uploading …\": { \"v\": [\"Wird hochgeladen …\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Pick file\": { \"v\": [\"Datei auswählen\"] }, \"Pick files\": { \"v\": [\"Dateien auswählen\"] }, \"Pick folder\": { \"v\": [\"Ordner auswählen\"] }, \"Upload file\": { \"v\": [\"Datei hochladen\"] }, \"Upload files\": { \"v\": [\"Dateien hochladen\"] }, \"Upload folder\": { \"v\": [\"Ordner hochladen\"] }, \"Uploading …\": { \"v\": [\"Wird hochgeladen …\"] } } }, { \"l\": \"el\", \"t\": {} }, { \"l\": \"en-GB\", \"t\": { \"Pick file\": { \"v\": [\"Pick file\"] }, \"Pick files\": { \"v\": [\"Pick files\"] }, \"Pick folder\": { \"v\": [\"Pick folder\"] }, \"Upload file\": { \"v\": [\"Upload file\"] }, \"Upload files\": { \"v\": [\"Upload files\"] }, \"Upload folder\": { \"v\": [\"Upload folder\"] }, \"Uploading …\": { \"v\": [\"Uploading …\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": {} }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": {} }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": {} }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": {} }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Pick file\": { \"v\": [\"Vali fail\"] }, \"Pick files\": { \"v\": [\"Vali failid\"] }, \"Pick folder\": { \"v\": [\"Vali kaust\"] }, \"Upload file\": { \"v\": [\"Laadi fail üles\"] }, \"Upload files\": { \"v\": [\"Laadi failid üles\"] }, \"Upload folder\": { \"v\": [\"Laadi kaust üles\"] }, \"Uploading …\": { \"v\": [\"Üleslaadimisel…\"] } } }, { \"l\": \"eu\", \"t\": {} }, { \"l\": \"fa\", \"t\": {} }, { \"l\": \"fi\", \"t\": {} }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Pick file\": { \"v\": [\"Choisir un fichier\"] }, \"Pick files\": { \"v\": [\"Choisir des fichiers\"] }, \"Pick folder\": { \"v\": [\"Choisir un dossier\"] }, \"Upload file\": { \"v\": [\"Téléverser un fichier\"] }, \"Upload files\": { \"v\": [\"Téléverser des fichiers\"] }, \"Upload folder\": { \"v\": [\"Téléverser un dossier\"] }, \"Uploading …\": { \"v\": [\"Téléversement en cours…\"] } } }, { \"l\": \"ga\", \"t\": { \"Pick file\": { \"v\": [\"Roghnaigh comhad\"] }, \"Pick files\": { \"v\": [\"Roghnaigh comhaid\"] }, \"Pick folder\": { \"v\": [\"Roghnaigh fillteán\"] }, \"Upload file\": { \"v\": [\"Uaslódáil comhad\"] }, \"Upload files\": { \"v\": [\"Uaslódáil comhaid\"] }, \"Upload folder\": { \"v\": [\"Uaslódáil fillteán\"] }, \"Uploading …\": { \"v\": [\"Ag uaslódáil …\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Pick file\": { \"v\": [\"Escoller ficheiro\"] }, \"Pick files\": { \"v\": [\"Escoller ficheiros\"] }, \"Pick folder\": { \"v\": [\"Escoller cartafol\"] }, \"Upload file\": { \"v\": [\"Enviar ficheiro\"] }, \"Upload files\": { \"v\": [\"Enviar ficheiros\"] }, \"Upload folder\": { \"v\": [\"Enviar cartafol\"] }, \"Uploading …\": { \"v\": [\"Enviando…\"] } } }, { \"l\": \"he\", \"t\": {} }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Pick file\": { \"v\": [\"Odaberi datoteku\"] }, \"Pick files\": { \"v\": [\"Odaberi datoteke\"] }, \"Pick folder\": { \"v\": [\"Odaberi mapu\"] }, \"Upload file\": { \"v\": [\"Prenesi datoteku\"] }, \"Upload files\": { \"v\": [\"Prenesi datoteke\"] }, \"Upload folder\": { \"v\": [\"Prenesi mapu\"] }, \"Uploading …\": { \"v\": [\"Prijenos u tijeku …\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Pick file\": { \"v\": [\"Válasszon fájlt\"] }, \"Pick files\": { \"v\": [\"Válasszon fájlokat\"] }, \"Pick folder\": { \"v\": [\"Válasszon mappát\"] }, \"Upload file\": { \"v\": [\"Fájl feltöltése\"] }, \"Upload files\": { \"v\": [\"Fájlok feltöltése\"] }, \"Upload folder\": { \"v\": [\"Mappa feltöltése\"] }, \"Uploading …\": { \"v\": [\"Feltöltés…\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": {} }, { \"l\": \"is\", \"t\": {} }, { \"l\": \"it\", \"t\": {} }, { \"l\": \"ja\", \"t\": { \"Pick file\": { \"v\": [\"ファイルを選択してください\"] }, \"Pick files\": { \"v\": [\"ファイルを選択してください\"] }, \"Pick folder\": { \"v\": [\"フォルダーを選択してください\"] }, \"Upload file\": { \"v\": [\"ファイルをアップロード\"] }, \"Upload files\": { \"v\": [\"ファイルをアップロード\"] }, \"Upload folder\": { \"v\": [\"フォルダーをアップロード\"] }, \"Uploading …\": { \"v\": [\"アップロード中...\"] } } }, { \"l\": \"ja-JP\", \"t\": {} }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": {} }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Pick file\": { \"v\": [\"ເລືອກໄຟລ໌\"] }, \"Pick files\": { \"v\": [\"ເລືອກໄຟລ໌\"] }, \"Pick folder\": { \"v\": [\"ເລືອກໂຟນເດີ\"] }, \"Upload file\": { \"v\": [\"ອັບໂຫຼດໄຟລ໌\"] }, \"Upload files\": { \"v\": [\"ອັບໂຫຼດໄຟລ໌\"] }, \"Upload folder\": { \"v\": [\"ອັບໂຫຼດໂຟນເດີ\"] }, \"Uploading …\": { \"v\": [\"ກຳລັງອັບໂຫຼດ...\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Pick file\": { \"v\": [\"Pasirinkti failą\"] }, \"Pick files\": { \"v\": [\"Pasirinkti failus\"] }, \"Pick folder\": { \"v\": [\"Pasirinkti aplanką\"] }, \"Upload file\": { \"v\": [\"Įkelti failą\"] }, \"Upload files\": { \"v\": [\"Įkelti failus\"] }, \"Upload folder\": { \"v\": [\"Įkelti aplanką\"] }, \"Uploading …\": { \"v\": [\"Įkeliama  ...\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Pick file\": { \"v\": [\"Избери датотека\"] }, \"Pick files\": { \"v\": [\"Избери датотеки\"] }, \"Pick folder\": { \"v\": [\"Избери папка\"] }, \"Upload file\": { \"v\": [\"Прикачи датотека\"] }, \"Upload files\": { \"v\": [\"Прикачи датотеки\"] }, \"Upload folder\": { \"v\": [\"Прикачи папка\"] }, \"Uploading …\": { \"v\": [\"Прикачување …\"] } } }, { \"l\": \"mn\", \"t\": { \"Pick file\": { \"v\": [\"Файл сонгох\"] }, \"Pick files\": { \"v\": [\"Файлууд сонгох\"] }, \"Pick folder\": { \"v\": [\"Хавтас сонгох\"] }, \"Upload file\": { \"v\": [\"Файл байршуулах\"] }, \"Upload files\": { \"v\": [\"Файлууд байршуулах\"] }, \"Upload folder\": { \"v\": [\"Хавтас байршуулах\"] }, \"Uploading …\": { \"v\": [\"Байршуулж байна …\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": {} }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Pick file\": { \"v\": [\"Selecteer bestand\"] }, \"Pick files\": { \"v\": [\"Selecteer bestanden\"] }, \"Pick folder\": { \"v\": [\"Selecteer map\"] }, \"Upload file\": { \"v\": [\"Upload bestand\"] }, \"Upload files\": { \"v\": [\"Upload bestanden\"] }, \"Upload folder\": { \"v\": [\"Upload mappen\"] }, \"Uploading …\": { \"v\": [\"Bezig met uploaden ...\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": {} }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Pick file\": { \"v\": [\"Selecionar arquivo\"] }, \"Pick files\": { \"v\": [\"Selecionar arquivos\"] }, \"Pick folder\": { \"v\": [\"Selecionar pasta\"] }, \"Upload file\": { \"v\": [\"Enviar arquivo\"] }, \"Upload files\": { \"v\": [\"Enviar arquivos\"] }, \"Upload folder\": { \"v\": [\"Enviar pasta\"] }, \"Uploading …\": { \"v\": [\"Enviando …´\"] } } }, { \"l\": \"pt-PT\", \"t\": {} }, { \"l\": \"ro\", \"t\": { \"Pick file\": { \"v\": [\"Alege fișierul\"] }, \"Pick files\": { \"v\": [\"Alege fișierele\"] }, \"Pick folder\": { \"v\": [\"Alege dosarul\"] }, \"Upload file\": { \"v\": [\"Încarcă un fișier\"] }, \"Upload files\": { \"v\": [\"Încarcă fișiere\"] }, \"Upload folder\": { \"v\": [\"Încarcă un dosar\"] }, \"Uploading …\": { \"v\": [\"Încărcare în curs …\"] } } }, { \"l\": \"ru\", \"t\": { \"Pick file\": { \"v\": [\"Выберите файл\"] }, \"Pick files\": { \"v\": [\"Выберите файлы\"] }, \"Pick folder\": { \"v\": [\"Выберите папку\"] }, \"Upload file\": { \"v\": [\"Загрузить файл\"] }, \"Upload files\": { \"v\": [\"Загрузить файлы\"] }, \"Upload folder\": { \"v\": [\"Загрузить папку\"] }, \"Uploading …\": { \"v\": [\"Загрузка …\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": {} }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": {} }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Pick file\": { \"v\": [\"Välj fil\"] }, \"Pick files\": { \"v\": [\"Välj filer\"] }, \"Pick folder\": { \"v\": [\"Välj mapp\"] }, \"Upload file\": { \"v\": [\"Ladda upp fil\"] }, \"Upload files\": { \"v\": [\"Ladda upp filer\"] }, \"Upload folder\": { \"v\": [\"Ladda upp mapp\"] }, \"Uploading …\": { \"v\": [\"Laddar upp …\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Pick file\": { \"v\": [\"Dosyayı seçin\"] }, \"Pick files\": { \"v\": [\"Dosyaları seçin\"] }, \"Pick folder\": { \"v\": [\"Klasörü seçin\"] }, \"Upload file\": { \"v\": [\"Dosyayı yükle\"] }, \"Upload files\": { \"v\": [\"Dosyaları yükle\"] }, \"Upload folder\": { \"v\": [\"Klasörü yükle\"] }, \"Uploading …\": { \"v\": [\"Yükleniyor…\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": {} }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Pick file\": { \"v\": [\"Faylni tanlang\"] }, \"Pick files\": { \"v\": [\"Fayllarni tanlang\"] }, \"Pick folder\": { \"v\": [\"Jildni tanlang\"] }, \"Upload file\": { \"v\": [\"Faylni yuklash\"] }, \"Upload files\": { \"v\": [\"Fayllarni yuklash\"] }, \"Upload folder\": { \"v\": [\"Yuklash jildi\"] }, \"Uploading …\": { \"v\": [\"Yuklanmoqda…\"] } } }, { \"l\": \"zh-CN\", \"t\": {} }, { \"l\": \"zh-HK\", \"t\": { \"Pick file\": { \"v\": [\"選取檔案\"] }, \"Pick files\": { \"v\": [\"選取多個檔案\"] }, \"Pick folder\": { \"v\": [\"選取資料夾\"] }, \"Upload file\": { \"v\": [\"上傳檔案\"] }, \"Upload files\": { \"v\": [\"上傳多個檔案\"] }, \"Upload folder\": { \"v\": [\"上傳資料夾\"] }, \"Uploading …\": { \"v\": [\"上傳中 ...\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Pick file\": { \"v\": [\"選取單一檔案\"] }, \"Pick files\": { \"v\": [\"選取多個檔案\"] }, \"Pick folder\": { \"v\": [\"選擇資料夾\"] }, \"Upload file\": { \"v\": [\"上傳單一檔案\"] }, \"Upload files\": { \"v\": [\"上傳多個檔案\"] }, \"Upload folder\": { \"v\": [\"上傳資料夾\"] }, \"Uploading …\": { \"v\": [\"上傳中......\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t42 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Provider icon\": { \"v\": [\"أيقونة المزوّد\"] } } }, { \"l\": \"ast\", \"t\": { \"Provider icon\": { \"v\": [\"Iconu del fornidor\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Provider icon\": { \"v\": [\"Ikona poskytovatele\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Provider icon\": { \"v\": [\"Ikona poskytovatele\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Provider icon\": { \"v\": [\"Udbyderikon\"] } } }, { \"l\": \"de\", \"t\": { \"Provider icon\": { \"v\": [\"Anbietersymbol\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Provider icon\": { \"v\": [\"Anbietersymbol\"] } } }, { \"l\": \"el\", \"t\": { \"Provider icon\": { \"v\": [\"Εικονίδιο παρόχου\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Provider icon\": { \"v\": [\"Provider icon\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Provider icon\": { \"v\": [\"Ícono del proveedor\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Provider icon\": { \"v\": [\"Ícono del proveedor\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Provider icon\": { \"v\": [\"Ícono del proveedor\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Provider icon\": { \"v\": [\"Ícono del proveedor\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Provider icon\": { \"v\": [\"Teenusepakkuja ikoon\"] } } }, { \"l\": \"eu\", \"t\": { \"Provider icon\": { \"v\": [\"Hornitzailearen ikonoa\"] } } }, { \"l\": \"fa\", \"t\": { \"Provider icon\": { \"v\": [\"آیکون ارائه دهنده\"] } } }, { \"l\": \"fi\", \"t\": { \"Provider icon\": { \"v\": [\"Palveluntarjoajan kuvake\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Provider icon\": { \"v\": [\"Icône du fournisseur\"] } } }, { \"l\": \"ga\", \"t\": { \"Provider icon\": { \"v\": [\"Deilbhín soláthraí\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Provider icon\": { \"v\": [\"Icona do provedor\"] } } }, { \"l\": \"he\", \"t\": { \"Provider icon\": { \"v\": [\"סמל ספק\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Provider icon\": { \"v\": [\"Ikona pružatelja\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Provider icon\": { \"v\": [\"Szolgáltató ikonja\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Provider icon\": { \"v\": [\"Ikon penyedia\"] } } }, { \"l\": \"is\", \"t\": { \"Provider icon\": { \"v\": [\"Táknmynd þjónustuveitu\"] } } }, { \"l\": \"it\", \"t\": { \"Provider icon\": { \"v\": [\"Icona del provider\"] } } }, { \"l\": \"ja\", \"t\": { \"Provider icon\": { \"v\": [\"プロバイダーのアイコン\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Provider icon\": { \"v\": [\"プロバイダーのアイコン\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Provider icon\": { \"v\": [\"제공자 아이콘\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Provider icon\": { \"v\": [\"ໄອຄອນຜູ້ໃຫ້ບໍລິການ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Provider icon\": { \"v\": [\"Tiekėjo piktograma\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Provider icon\": { \"v\": [\"Икона на давател\"] } } }, { \"l\": \"mn\", \"t\": { \"Provider icon\": { \"v\": [\"Үйлчилгээ үзүүлэгчийн дүрс\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Provider icon\": { \"v\": [\"Leverandørikon\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Provider icon\": { \"v\": [\"Provider-pictogram\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Provider icon\": { \"v\": [\"Dostawca ikony\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Provider icon\": { \"v\": [\"Ícone do provedor\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Provider icon\": { \"v\": [\"Ícone do fornecedor\"] } } }, { \"l\": \"ro\", \"t\": { \"Provider icon\": { \"v\": [\"Pictograma furnizorului\"] } } }, { \"l\": \"ru\", \"t\": { \"Provider icon\": { \"v\": [\"Значок поставщика\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Provider icon\": { \"v\": [\"Ikonka poskytovateľa\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Provider icon\": { \"v\": [\"Икона пружаоца\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Provider icon\": { \"v\": [\"Leverantörsikon\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Provider icon\": { \"v\": [\"Hizmet sağlayıcı simgesi\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Provider icon\": { \"v\": [\"Піктограма постачальника\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Provider icon\": { \"v\": [\"Provayder belgisi\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Provider icon\": { \"v\": [\"提供者图标\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Provider icon\": { \"v\": [\"提供者圖示\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Provider icon\": { \"v\": [\"提供者圖示\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t43 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Related team resources\": { \"v\": [\"موارد للفريق ذات صلة\"] }, \"View team\": { \"v\": [\"عرض الفريق\"] } } }, { \"l\": \"ast\", \"t\": { \"Related team resources\": { \"v\": [\"Recursos rellacionaos colos equipos\"] }, \"View team\": { \"v\": [\"Ver l'equipu\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Related team resources\": { \"v\": [\"Související prostředky kolektivu\"] }, \"View team\": { \"v\": [\"Zobrazit kolektiv\"] } } }, { \"l\": \"cs-CZ\", \"t\": {} }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Related team resources\": { \"v\": [\"Relaterede teamressourcer\"] }, \"View team\": { \"v\": [\"Se teamet\"] } } }, { \"l\": \"de\", \"t\": { \"Related team resources\": { \"v\": [\"Verwandte Team-Ressourcen\"] }, \"View team\": { \"v\": [\"Team anzeigen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Related team resources\": { \"v\": [\"Verwandte Team-Ressourcen\"] }, \"View team\": { \"v\": [\"Team anzeigen\"] } } }, { \"l\": \"el\", \"t\": { \"Related team resources\": { \"v\": [\"Σχετικοί πόροι ομάδας\"] }, \"View team\": { \"v\": [\"Προβολή ομάδας\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Related team resources\": { \"v\": [\"Related team resources\"] }, \"View team\": { \"v\": [\"View team\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Related team resources\": { \"v\": [\"Recursos de equipo relacionados\"] }, \"View team\": { \"v\": [\"Ver equipo\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Related team resources\": { \"v\": [\"Recursos de equipo relacionados\"] }, \"View team\": { \"v\": [\"Ver equipo\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": {} }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Related team resources\": { \"v\": [\"Recursos de equipo relacionados\"] }, \"View team\": { \"v\": [\"Ver equipo\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Related team resources\": { \"v\": [\"Tiimi seotud ressursid\"] }, \"View team\": { \"v\": [\"Vaata tiimi\"] } } }, { \"l\": \"eu\", \"t\": {} }, { \"l\": \"fa\", \"t\": { \"Related team resources\": { \"v\": [\"منابع تیمی مرتبط\"] }, \"View team\": { \"v\": [\"مشاهده گروه\"] } } }, { \"l\": \"fi\", \"t\": { \"Related team resources\": { \"v\": [\"Liittyvät tiimiresurssit\"] }, \"View team\": { \"v\": [\"Näytä tiimi\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Related team resources\": { \"v\": [\"Ressources d'équipe associées\"] }, \"View team\": { \"v\": [\"Voir l'équipe\"] } } }, { \"l\": \"ga\", \"t\": { \"Related team resources\": { \"v\": [\"Acmhainní foirne gaolmhara\"] }, \"View team\": { \"v\": [\"Féach ar an bhfoireann\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Related team resources\": { \"v\": [\"Recursos de equipo relacionados\"] }, \"View team\": { \"v\": [\"Ver o equipo\"] } } }, { \"l\": \"he\", \"t\": {} }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Related team resources\": { \"v\": [\"Povezani timski resursi\"] }, \"View team\": { \"v\": [\"Prikaži tim\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Related team resources\": { \"v\": [\"Kapcsolódó csapaterőforrások\"] }, \"View team\": { \"v\": [\"Csapat megtekintése\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Related team resources\": { \"v\": [\"Sumber daya team terkait\"] }, \"View team\": { \"v\": [\"Lihat team\"] } } }, { \"l\": \"is\", \"t\": { \"Related team resources\": { \"v\": [\"Tengd tilföng teymis\"] }, \"View team\": { \"v\": [\"Skoða teymi\"] } } }, { \"l\": \"it\", \"t\": {} }, { \"l\": \"ja\", \"t\": { \"Related team resources\": { \"v\": [\"チームの関連リソース\"] }, \"View team\": { \"v\": [\"チームを表示\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Related team resources\": { \"v\": [\"チームの関連リソース\"] }, \"View team\": { \"v\": [\"チームを表示\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Related team resources\": { \"v\": [\"관련 팀 리소스\"] }, \"View team\": { \"v\": [\"팀 보기\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Related team resources\": { \"v\": [\"ຊັບພະຍາກອນຂອງທີມທີ່ກ່ຽວຂ້ອງ\"] }, \"View team\": { \"v\": [\"ເບິ່ງທີມ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Related team resources\": { \"v\": [\"Susiję komandos ištekliai\"] }, \"View team\": { \"v\": [\"Peržiūrėti komandą\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Related team resources\": { \"v\": [\"Поврзани ресурси на тимот\"] }, \"View team\": { \"v\": [\"Прикажи тим\"] } } }, { \"l\": \"mn\", \"t\": { \"Related team resources\": { \"v\": [\"Багийн холбогдох нөөцүүд\"] }, \"View team\": { \"v\": [\"Багийг харах\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Related team resources\": { \"v\": [\"Relaterte lagressurser\"] }, \"View team\": { \"v\": [\"Se lag\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Related team resources\": { \"v\": [\"Verwante teambronnen\"] }, \"View team\": { \"v\": [\"Team bekijken\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Related team resources\": { \"v\": [\"Powiązane zasoby grupowe\"] }, \"View team\": { \"v\": [\"Zobacz grupę\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Related team resources\": { \"v\": [\"Recursos de equipe relacionados\"] }, \"View team\": { \"v\": [\"Ver equipe\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Related team resources\": { \"v\": [\"Recursos relacionados com a equipa\"] }, \"View team\": { \"v\": [\"Ver equipa\"] } } }, { \"l\": \"ro\", \"t\": { \"Related team resources\": { \"v\": [\"Resurse asociate echipei\"] }, \"View team\": { \"v\": [\"Vezi echipa\"] } } }, { \"l\": \"ru\", \"t\": { \"Related team resources\": { \"v\": [\"Связанные ресурсы команды\"] }, \"View team\": { \"v\": [\"Открыть команду\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Related team resources\": { \"v\": [\"Súvisiace tímové zdroje\"] }, \"View team\": { \"v\": [\"Zobraziť tím\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Related team resources\": { \"v\": [\"Повезани тимски ресурси\"] }, \"View team\": { \"v\": [\"Прикажи тим\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Related team resources\": { \"v\": [\"Relaterade teamresurser\"] }, \"View team\": { \"v\": [\"Visa teamet\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Related team resources\": { \"v\": [\"İlgili takım kaynakları\"] }, \"View team\": { \"v\": [\"Takımı görüntüle\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Related team resources\": { \"v\": [\"Пов'язані ресурси команди\"] }, \"View team\": { \"v\": [\"Переглянути команду\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Related team resources\": { \"v\": [\"Tegishli jamoa resurslari\"] }, \"View team\": { \"v\": [\"Jamoani ko'rish\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Related team resources\": { \"v\": [\"相关团队资源\"] }, \"View team\": { \"v\": [\"查看团队\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Related team resources\": { \"v\": [\"相關團隊資源\"] }, \"View team\": { \"v\": [\"查看團隊\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Related team resources\": { \"v\": [\"相關團隊資源\"] }, \"View team\": { \"v\": [\"檢視團隊\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t44 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Search\": { \"v\": [\"بحث\"] } } }, { \"l\": \"ast\", \"t\": { \"Search\": { \"v\": [\"Buscar\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": { \"Search\": { \"v\": [\"Klask\"] } } }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Search\": { \"v\": [\"Cerca\"] } } }, { \"l\": \"cs\", \"t\": { \"Search\": { \"v\": [\"Hledat\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Search\": { \"v\": [\"Hledat\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Search\": { \"v\": [\"Søg\"] } } }, { \"l\": \"de\", \"t\": { \"Search\": { \"v\": [\"Suche\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Search\": { \"v\": [\"Suche\"] } } }, { \"l\": \"el\", \"t\": { \"Search\": { \"v\": [\"Αναζήτηση\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Search\": { \"v\": [\"Search\"] } } }, { \"l\": \"eo\", \"t\": { \"Search\": { \"v\": [\"Serĉi\"] } } }, { \"l\": \"es\", \"t\": { \"Search\": { \"v\": [\"Buscar\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Search\": { \"v\": [\"Buscar\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Search\": { \"v\": [\"Buscar\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Search\": { \"v\": [\"Buscar\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Search\": { \"v\": [\"Otsing\"] } } }, { \"l\": \"eu\", \"t\": { \"Search\": { \"v\": [\"Bilatu\"] } } }, { \"l\": \"fa\", \"t\": { \"Search\": { \"v\": [\"جستجو\"] } } }, { \"l\": \"fi\", \"t\": { \"Search\": { \"v\": [\"Etsi\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Search\": { \"v\": [\"Rechercher\"] } } }, { \"l\": \"ga\", \"t\": { \"Search\": { \"v\": [\"Cuardach\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Search\": { \"v\": [\"Buscar\"] } } }, { \"l\": \"he\", \"t\": { \"Search\": { \"v\": [\"חיפוש\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Search\": { \"v\": [\"Traži\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Search\": { \"v\": [\"Keresés\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Search\": { \"v\": [\"Cari\"] } } }, { \"l\": \"is\", \"t\": { \"Search\": { \"v\": [\"Leita\"] } } }, { \"l\": \"it\", \"t\": { \"Search\": { \"v\": [\"Cerca\"] } } }, { \"l\": \"ja\", \"t\": { \"Search\": { \"v\": [\"検索\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Search\": { \"v\": [\"検索\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Search\": { \"v\": [\"검색\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Search\": { \"v\": [\"ຄົ້ນຫາ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Search\": { \"v\": [\"Ieškoti\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Search\": { \"v\": [\"Барај\"] } } }, { \"l\": \"mn\", \"t\": { \"Search\": { \"v\": [\"Хайх\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": { \"Search\": { \"v\": [\"ရှာဖွေရန်\"] } } }, { \"l\": \"nb\", \"t\": { \"Search\": { \"v\": [\"Søk\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Search\": { \"v\": [\"Zoeken\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Search\": { \"v\": [\"Szukaj\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Search\": { \"v\": [\"Pesquisar\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Search\": { \"v\": [\"Pesquisar\"] } } }, { \"l\": \"ro\", \"t\": { \"Search\": { \"v\": [\"Căutare\"] } } }, { \"l\": \"ru\", \"t\": { \"Search\": { \"v\": [\"Поиск\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Search\": { \"v\": [\"Hľadať\"] } } }, { \"l\": \"sl\", \"t\": { \"Search\": { \"v\": [\"Iskanje\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Search\": { \"v\": [\"Претражи\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Search\": { \"v\": [\"Sök\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Search\": { \"v\": [\"Ara\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Search\": { \"v\": [\"Пошук\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Search\": { \"v\": [\"Qidiruv\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Search\": { \"v\": [\"搜索\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Search\": { \"v\": [\"搜尋\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Search\": { \"v\": [\"搜尋\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t45 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": {} }, { \"l\": \"ast\", \"t\": {} }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Search …\": { \"v\": [\"Hledat …\"] } } }, { \"l\": \"cs-CZ\", \"t\": {} }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Search …\": { \"v\": [\"Søg …\"] } } }, { \"l\": \"de\", \"t\": { \"Search …\": { \"v\": [\"Suche …\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Search …\": { \"v\": [\"Suche …\"] } } }, { \"l\": \"el\", \"t\": { \"Search …\": { \"v\": [\"Αναζήτηση …\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Search …\": { \"v\": [\"Search …\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": {} }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Search …\": { \"v\": [\"Buscar …\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": {} }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": {} }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Search …\": { \"v\": [\"Otsi…\"] } } }, { \"l\": \"eu\", \"t\": {} }, { \"l\": \"fa\", \"t\": {} }, { \"l\": \"fi\", \"t\": {} }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Search …\": { \"v\": [\"Rechercher…\"] } } }, { \"l\": \"ga\", \"t\": { \"Search …\": { \"v\": [\"Cuardaigh …\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Search …\": { \"v\": [\"Buscar…\"] } } }, { \"l\": \"he\", \"t\": {} }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Search …\": { \"v\": [\"Traži …\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Search …\": { \"v\": [\"Keresés…\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Search …\": { \"v\": [\"Cari …\"] } } }, { \"l\": \"is\", \"t\": {} }, { \"l\": \"it\", \"t\": {} }, { \"l\": \"ja\", \"t\": { \"Search …\": { \"v\": [\"検索…\"] } } }, { \"l\": \"ja-JP\", \"t\": {} }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Search …\": { \"v\": [\"찾는 중 ...\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Search …\": { \"v\": [\"ຄົ້ນຫາ…\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Search …\": { \"v\": [\"Ieškoti …\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Search …\": { \"v\": [\"Барај…\"] } } }, { \"l\": \"mn\", \"t\": { \"Search …\": { \"v\": [\"Хайх …\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": {} }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Search …\": { \"v\": [\"Zoeken …\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": {} }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Search …\": { \"v\": [\"Pesquisar …\"] } } }, { \"l\": \"pt-PT\", \"t\": {} }, { \"l\": \"ro\", \"t\": { \"Search …\": { \"v\": [\"Caută …\"] } } }, { \"l\": \"ru\", \"t\": { \"Search …\": { \"v\": [\"Поиск …\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": {} }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Search …\": { \"v\": [\"Претражи…\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Search …\": { \"v\": [\"Sök …\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Search …\": { \"v\": [\"Ara…\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": {} }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Search …\": { \"v\": [\"Izlash...\"] } } }, { \"l\": \"zh-CN\", \"t\": {} }, { \"l\": \"zh-HK\", \"t\": { \"Search …\": { \"v\": [\"搜尋 …\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Search …\": { \"v\": [\"搜尋......\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t46 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Search for time zone\": { \"v\": [\"البحث عن منطقة زمنية\"] }, \"Type to search time zone\": { \"v\": [\"أكتُب للبحث عن منطقة زمنية\"] } } }, { \"l\": \"ast\", \"t\": { \"Search for time zone\": { \"v\": [\"Buscar fusos horarios\"] }, \"Type to search time zone\": { \"v\": [\"Escribi pa buscar un fusu horariu\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Type to search time zone\": { \"v\": [\"Escriviu per cercar la zona horària\"] } } }, { \"l\": \"cs\", \"t\": { \"Search for time zone\": { \"v\": [\"Vyhledat časové pásmo\"] }, \"Type to search time zone\": { \"v\": [\"Psaním vyhledejte časovou zónu\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Search for time zone\": { \"v\": [\"Vyhledat časové pásmo\"] }, \"Type to search time zone\": { \"v\": [\"Psaním vyhledejte časovou zónu\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Search for time zone\": { \"v\": [\"Søg efter tidszone\"] }, \"Type to search time zone\": { \"v\": [\"Skriv for at søge efter tidszone\"] } } }, { \"l\": \"de\", \"t\": { \"Search for time zone\": { \"v\": [\"Nach Zeitzone suchen\"] }, \"Type to search time zone\": { \"v\": [\"Tippen, um eine Zeitzone zu suchen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Search for time zone\": { \"v\": [\"Nach Zeitzone suchen\"] }, \"Type to search time zone\": { \"v\": [\"Tippen, um eine Zeitzone zu suchen\"] } } }, { \"l\": \"el\", \"t\": { \"Search for time zone\": { \"v\": [\"Αναζήτηση ζώνης ώρας\"] }, \"Type to search time zone\": { \"v\": [\"Πληκτρολογήστε για αναζήτηση ζώνης ώρας\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Search for time zone\": { \"v\": [\"Search for time zone\"] }, \"Type to search time zone\": { \"v\": [\"Type to search time zone\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Search for time zone\": { \"v\": [\"Buscar huso horario\"] }, \"Type to search time zone\": { \"v\": [\"Escriba para buscar un huso horario\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Search for time zone\": { \"v\": [\"Buscar zona horaria\"] }, \"Type to search time zone\": { \"v\": [\"Escriba para buscar la zona horaria\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Type to search time zone\": { \"v\": [\"Escribe para buscar la zona horaria\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Search for time zone\": { \"v\": [\"Buscar zona horaria\"] }, \"Type to search time zone\": { \"v\": [\"Escriba para buscar la zona horaria\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Search for time zone\": { \"v\": [\"Otsi ajavööndit\"] }, \"Type to search time zone\": { \"v\": [\"Ajavööndi otsimiseks kirjuta midagi\"] } } }, { \"l\": \"eu\", \"t\": { \"Type to search time zone\": { \"v\": [\"Idatzi ordu-zona bat bilatzeko\"] } } }, { \"l\": \"fa\", \"t\": { \"Search for time zone\": { \"v\": [\"جستجو برای منطقهٔ زمانی\"] }, \"Type to search time zone\": { \"v\": [\"برای جستجوی منطقه زمانی تایپ کنید\"] } } }, { \"l\": \"fi\", \"t\": { \"Search for time zone\": { \"v\": [\"Etsi aikavyöhykettä\"] }, \"Type to search time zone\": { \"v\": [\"Kirjoita etsiäksesi aikavyöhykettä\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Search for time zone\": { \"v\": [\"Rechercher un fuseau horaire\"] }, \"Type to search time zone\": { \"v\": [\"Saisissez du texte pour rechercher un fuseau horaire\"] } } }, { \"l\": \"ga\", \"t\": { \"Search for time zone\": { \"v\": [\"Cuardaigh crios ama\"] }, \"Type to search time zone\": { \"v\": [\"Clóscríobh chun crios ama a chuardach\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Search for time zone\": { \"v\": [\"Buscar por fuso horario\"] }, \"Type to search time zone\": { \"v\": [\"Escriba para buscar o fuso horario\"] } } }, { \"l\": \"he\", \"t\": { \"Type to search time zone\": { \"v\": [\"יש להקליד כדי לחפש אזור זמן\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Search for time zone\": { \"v\": [\"Pretraži vremensku zonu\"] }, \"Type to search time zone\": { \"v\": [\"Upišite za pretraživanje vremenske zone\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Search for time zone\": { \"v\": [\"Időzóna keresése\"] }, \"Type to search time zone\": { \"v\": [\"Gépeljen az időzóna kereséséhez\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Search for time zone\": { \"v\": [\"Cari zona waktu\"] }, \"Type to search time zone\": { \"v\": [\"Ketik untuk mencari zona waktu\"] } } }, { \"l\": \"is\", \"t\": { \"Search for time zone\": { \"v\": [\"Leita að tímabelti\"] }, \"Type to search time zone\": { \"v\": [\"Skrifaðu til að leita að tímabelti\"] } } }, { \"l\": \"it\", \"t\": { \"Search for time zone\": { \"v\": [\"Ricerca del fuso orario\"] }, \"Type to search time zone\": { \"v\": [\"Digita per cercare un fuso orario\"] } } }, { \"l\": \"ja\", \"t\": { \"Search for time zone\": { \"v\": [\"タイムゾーンを検索\"] }, \"Type to search time zone\": { \"v\": [\"タイムゾーン検索のため入力してください\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Search for time zone\": { \"v\": [\"タイムゾーンを検索\"] }, \"Type to search time zone\": { \"v\": [\"タイムゾーン検索のため入力してください\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Search for time zone\": { \"v\": [\"시간대 찾기\"] }, \"Type to search time zone\": { \"v\": [\"입력하여 시간대를 검색\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Search for time zone\": { \"v\": [\"ຄົ້ນຫາເຂດເວລາ\"] }, \"Type to search time zone\": { \"v\": [\"ພິມເພື່ອຄົ້ນຫາເຂດເວລາ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Search for time zone\": { \"v\": [\"Ieškoti laiko juostų\"] }, \"Type to search time zone\": { \"v\": [\"Įveskite, kad surastumėte laiko juostą\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Search for time zone\": { \"v\": [\"Барај временска зона\"] }, \"Type to search time zone\": { \"v\": [\"Напишете за да пребарате временска зона\"] } } }, { \"l\": \"mn\", \"t\": { \"Search for time zone\": { \"v\": [\"Цагийн бүс хайх\"] }, \"Type to search time zone\": { \"v\": [\"Цагийн бүс хайхын тулд бичнэ үү\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": { \"Type to search time zone\": { \"v\": [\"ဒေသစံတော်ချိန်များ ရှာဖွေရန် စာရိုက်ပါ\"] } } }, { \"l\": \"nb\", \"t\": { \"Search for time zone\": { \"v\": [\"Søk etter tidssone\"] }, \"Type to search time zone\": { \"v\": [\"Tast for å søke etter tidssone\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Search for time zone\": { \"v\": [\"Zoeken naar tijdzone\"] }, \"Type to search time zone\": { \"v\": [\"Typ om een tijdzone te zoeken\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Search for time zone\": { \"v\": [\"Szukaj strefy czasowej\"] }, \"Type to search time zone\": { \"v\": [\"Wpisz, aby wyszukać strefę czasową\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Search for time zone\": { \"v\": [\"Pesquisar fuso horário\"] }, \"Type to search time zone\": { \"v\": [\"Digite para pesquisar o fuso horário \"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Search for time zone\": { \"v\": [\"Pesquisar fuso horário\"] }, \"Type to search time zone\": { \"v\": [\"Digite para pesquisar o fuso horário \"] } } }, { \"l\": \"ro\", \"t\": { \"Search for time zone\": { \"v\": [\"Caută fusul orar\"] }, \"Type to search time zone\": { \"v\": [\"Tastează pentru a căuta fusul orar\"] } } }, { \"l\": \"ru\", \"t\": { \"Search for time zone\": { \"v\": [\"Поиск часового пояса\"] }, \"Type to search time zone\": { \"v\": [\"Введите название часового пояса\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Search for time zone\": { \"v\": [\"Vyhľadať časové pásmo\"] }, \"Type to search time zone\": { \"v\": [\"Začníte písať pre vyhľadávanie časovej zóny\"] } } }, { \"l\": \"sl\", \"t\": { \"Type to search time zone\": { \"v\": [\"Vpišite niz za iskanje časovnega pasu\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Search for time zone\": { \"v\": [\"Претрага временске зоне\"] }, \"Type to search time zone\": { \"v\": [\"Куцајте да претражите временске зоне\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Search for time zone\": { \"v\": [\"Sök efter en tidszon\"] }, \"Type to search time zone\": { \"v\": [\"Skriv för att söka efter en tidszon\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Search for time zone\": { \"v\": [\"Saat dilimi ara\"] }, \"Type to search time zone\": { \"v\": [\"Saat dilimi aramak için yazmaya başlayın\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Search for time zone\": { \"v\": [\"Шукати часові зони\"] }, \"Type to search time zone\": { \"v\": [\"Введіть для пошуку часовий пояс\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Search for time zone\": { \"v\": [\"Vaqt mintaqasini qidirish\"] }, \"Type to search time zone\": { \"v\": [\"Vaqt mintaqasini qidirish uchun kiriting\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Search for time zone\": { \"v\": [\"搜索时区\"] }, \"Type to search time zone\": { \"v\": [\"打字以搜索时区\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Search for time zone\": { \"v\": [\"搜索時區\"] }, \"Type to search time zone\": { \"v\": [\"鍵入以搜索時區\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Search for time zone\": { \"v\": [\"搜尋時區\"] }, \"Type to search time zone\": { \"v\": [\"輸入以搜尋時區\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t47 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": {} }, { \"l\": \"ast\", \"t\": {} }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": {} }, { \"l\": \"cs-CZ\", \"t\": {} }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": {} }, { \"l\": \"de\", \"t\": {} }, { \"l\": \"de-DE\", \"t\": {} }, { \"l\": \"el\", \"t\": {} }, { \"l\": \"en-GB\", \"t\": {} }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": {} }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": {} }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": {} }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": {} }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": {} }, { \"l\": \"eu\", \"t\": {} }, { \"l\": \"fa\", \"t\": {} }, { \"l\": \"fi\", \"t\": {} }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": {} }, { \"l\": \"ga\", \"t\": {} }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": {} }, { \"l\": \"he\", \"t\": {} }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": {} }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": {} }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": {} }, { \"l\": \"is\", \"t\": {} }, { \"l\": \"it\", \"t\": {} }, { \"l\": \"ja\", \"t\": {} }, { \"l\": \"ja-JP\", \"t\": {} }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": {} }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": {} }, { \"l\": \"lt-LT\", \"t\": {} }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": {} }, { \"l\": \"mn\", \"t\": {} }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": {} }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": {} }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": {} }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": {} }, { \"l\": \"pt-PT\", \"t\": {} }, { \"l\": \"ro\", \"t\": {} }, { \"l\": \"ru\", \"t\": {} }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": {} }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": {} }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": {} }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": {} }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": {} }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": {} }, { \"l\": \"zh-CN\", \"t\": {} }, { \"l\": \"zh-HK\", \"t\": {} }, { \"l\": \"zh-TW\", \"t\": {} }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t48 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Select provider\": { \"v\": [\"اختر مزود\"] } } }, { \"l\": \"ast\", \"t\": { \"Select provider\": { \"v\": [\"Seleicionar el fornidor\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"Select provider\": { \"v\": [\"Vybrat poskytovatele\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Select provider\": { \"v\": [\"Vybrat poskytovatele\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Select provider\": { \"v\": [\"Vælg udbyder\"] } } }, { \"l\": \"de\", \"t\": { \"Select provider\": { \"v\": [\"Anbieter auswählen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Select provider\": { \"v\": [\"Anbieter auswählen\"] } } }, { \"l\": \"el\", \"t\": { \"Select provider\": { \"v\": [\"Επιλογή παρόχου\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Select provider\": { \"v\": [\"Select provider\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Select provider\": { \"v\": [\"Seleccione proveedor\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Select provider\": { \"v\": [\"Elija proveedor\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Select provider\": { \"v\": [\"Seleccionar proveedor\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Select provider\": { \"v\": [\"Seleccionar proveedor\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Select provider\": { \"v\": [\"Vali teenuspakkuja\"] } } }, { \"l\": \"eu\", \"t\": { \"Select provider\": { \"v\": [\"Hautatu hornitzailea\"] } } }, { \"l\": \"fa\", \"t\": { \"Select provider\": { \"v\": [\"ارائه دهنده را انتخاب کنید\"] } } }, { \"l\": \"fi\", \"t\": { \"Select provider\": { \"v\": [\"Valitse tarjoaja\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Select provider\": { \"v\": [\"Sélectionner un fournisseur\"] } } }, { \"l\": \"ga\", \"t\": { \"Select provider\": { \"v\": [\"Roghnaigh soláthraí\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Select provider\": { \"v\": [\"Seleccione o provedor\"] } } }, { \"l\": \"he\", \"t\": { \"Select provider\": { \"v\": [\"בחירת ספק\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Select provider\": { \"v\": [\"Odaberi pružatelja\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Select provider\": { \"v\": [\"Válasszon szolgáltatót\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Select provider\": { \"v\": [\"Pilih penyedia\"] } } }, { \"l\": \"is\", \"t\": { \"Select provider\": { \"v\": [\"Veldu þjónustuveitu\"] } } }, { \"l\": \"it\", \"t\": { \"Select provider\": { \"v\": [\"Selezionare il provider\"] } } }, { \"l\": \"ja\", \"t\": { \"Select provider\": { \"v\": [\"プロバイダーを選択\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Select provider\": { \"v\": [\"プロバイダーを選択\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Select provider\": { \"v\": [\"제공자 선택\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Select provider\": { \"v\": [\"ເລືອກຜູ້ໃຫ້ບໍລິການ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Select provider\": { \"v\": [\"Pasirinkti tiekėją\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Select provider\": { \"v\": [\"Избери провајдер\"] } } }, { \"l\": \"mn\", \"t\": { \"Select provider\": { \"v\": [\"Үйлчилгээ үзүүлэгч сонгох\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Select provider\": { \"v\": [\"Velg leverandør\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Select provider\": { \"v\": [\"Selecteer provider\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Select provider\": { \"v\": [\"Wybierz dostawcę\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Select provider\": { \"v\": [\"Selecione provedor\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Select provider\": { \"v\": [\"Selecionar fornecedor\"] } } }, { \"l\": \"ro\", \"t\": { \"Select provider\": { \"v\": [\"Selectează furnizorul\"] } } }, { \"l\": \"ru\", \"t\": { \"Select provider\": { \"v\": [\"Выбрать поставщика\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Select provider\": { \"v\": [\"Vybrať poskytovateľa\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Select provider\": { \"v\": [\"Изаберите пружаоца\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Select provider\": { \"v\": [\"Välj leverantör\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Select provider\": { \"v\": [\"Hizmet sağlayıcı seçin\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Select provider\": { \"v\": [\"Виберіть постачальника\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Select provider\": { \"v\": [\"Provayderni tanlang\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Select provider\": { \"v\": [\"选择提供者\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Select provider\": { \"v\": [\"選擇提供者\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Select provider\": { \"v\": [\"選取提供者\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t49 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Settings\": { \"v\": [\"الإعدادات\"] } } }, { \"l\": \"ast\", \"t\": { \"Settings\": { \"v\": [\"Configuración\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": { \"Settings\": { \"v\": [\"Arventennoù\"] } } }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Settings\": { \"v\": [\"Paràmetres\"] } } }, { \"l\": \"cs\", \"t\": { \"Settings\": { \"v\": [\"Nastavení\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Settings\": { \"v\": [\"Nastavení\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Settings\": { \"v\": [\"Indstillinger\"] } } }, { \"l\": \"de\", \"t\": { \"Settings\": { \"v\": [\"Einstellungen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Settings\": { \"v\": [\"Einstellungen\"] } } }, { \"l\": \"el\", \"t\": { \"Settings\": { \"v\": [\"Ρυθμίσεις\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Settings\": { \"v\": [\"Settings\"] } } }, { \"l\": \"eo\", \"t\": { \"Settings\": { \"v\": [\"Agordo\"] } } }, { \"l\": \"es\", \"t\": { \"Settings\": { \"v\": [\"Ajustes\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Settings\": { \"v\": [\"Configuraciones\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Settings\": { \"v\": [\"Configuraciones\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Settings\": { \"v\": [\"Configuración\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Settings\": { \"v\": [\"Seadistused\"] } } }, { \"l\": \"eu\", \"t\": { \"Settings\": { \"v\": [\"Ezarpenak\"] } } }, { \"l\": \"fa\", \"t\": { \"Settings\": { \"v\": [\"تنظیمات\"] } } }, { \"l\": \"fi\", \"t\": { \"Settings\": { \"v\": [\"Asetukset\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Settings\": { \"v\": [\"Paramètres\"] } } }, { \"l\": \"ga\", \"t\": { \"Settings\": { \"v\": [\"Socruithe\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Settings\": { \"v\": [\"Axustes\"] } } }, { \"l\": \"he\", \"t\": { \"Settings\": { \"v\": [\"הגדרות\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Settings\": { \"v\": [\"Postavke\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Settings\": { \"v\": [\"Beállítások\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Settings\": { \"v\": [\"Pengaturan\"] } } }, { \"l\": \"is\", \"t\": { \"Settings\": { \"v\": [\"Stillingar\"] } } }, { \"l\": \"it\", \"t\": { \"Settings\": { \"v\": [\"Impostazioni\"] } } }, { \"l\": \"ja\", \"t\": { \"Settings\": { \"v\": [\"設定\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Settings\": { \"v\": [\"設定\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Settings\": { \"v\": [\"선택\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Settings\": { \"v\": [\"ການຕັ້ງຄ່າ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Settings\": { \"v\": [\"Nustatymai\"] } } }, { \"l\": \"lv\", \"t\": { \"Settings\": { \"v\": [\"Iestatījumi\"] } } }, { \"l\": \"mk\", \"t\": { \"Settings\": { \"v\": [\"Параметри\"] } } }, { \"l\": \"mn\", \"t\": { \"Settings\": { \"v\": [\"Тохиргоо\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": { \"Settings\": { \"v\": [\"ချိန်ညှိချက်များ\"] } } }, { \"l\": \"nb\", \"t\": { \"Settings\": { \"v\": [\"Innstillinger\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Settings\": { \"v\": [\"Instellingen\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": { \"Settings\": { \"v\": [\"Paramètres\"] } } }, { \"l\": \"pl\", \"t\": { \"Settings\": { \"v\": [\"Ustawienia\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Settings\": { \"v\": [\"Configurações\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Settings\": { \"v\": [\"Definições\"] } } }, { \"l\": \"ro\", \"t\": { \"Settings\": { \"v\": [\"Setări\"] } } }, { \"l\": \"ru\", \"t\": { \"Settings\": { \"v\": [\"Параметры\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Settings\": { \"v\": [\"Nastavenia\"] } } }, { \"l\": \"sl\", \"t\": { \"Settings\": { \"v\": [\"Nastavitve\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Settings\": { \"v\": [\"Поставке\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Settings\": { \"v\": [\"Inställningar\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Settings\": { \"v\": [\"Ayarlar\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Settings\": { \"v\": [\"Налаштування\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Settings\": { \"v\": [\"Sozlamalar\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Settings\": { \"v\": [\"设置\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Settings\": { \"v\": [\"設定\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Settings\": { \"v\": [\"設定\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t50 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Settings navigation\": { \"v\": [\"إعدادات التّصفُّح\"] } } }, { \"l\": \"ast\", \"t\": { \"Settings navigation\": { \"v\": [\"Navegación pela configuración\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Settings navigation\": { \"v\": [\"Navegació d'opcions\"] } } }, { \"l\": \"cs\", \"t\": { \"Settings navigation\": { \"v\": [\"Pohyb po nastavení\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Settings navigation\": { \"v\": [\"Pohyb po nastavení\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Settings navigation\": { \"v\": [\"Navigation i indstillinger\"] } } }, { \"l\": \"de\", \"t\": { \"Settings navigation\": { \"v\": [\"Einstellungen für die Navigation\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Settings navigation\": { \"v\": [\"Einstellungen für die Navigation\"] } } }, { \"l\": \"el\", \"t\": { \"Settings navigation\": { \"v\": [\"Πλοήγηση ρυθμίσεων\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Settings navigation\": { \"v\": [\"Settings navigation\"] } } }, { \"l\": \"eo\", \"t\": { \"Settings navigation\": { \"v\": [\"Agorda navigado\"] } } }, { \"l\": \"es\", \"t\": { \"Settings navigation\": { \"v\": [\"Navegación de ajustes\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Settings navigation\": { \"v\": [\"Navegación de configuraciones\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Settings navigation\": { \"v\": [\"Navegación de configuraciones\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Settings navigation\": { \"v\": [\"Navegación por ajustes\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Settings navigation\": { \"v\": [\"Liikumine seadistustes\"] } } }, { \"l\": \"eu\", \"t\": { \"Settings navigation\": { \"v\": [\"Nabigazio ezarpenak\"] } } }, { \"l\": \"fa\", \"t\": { \"Settings navigation\": { \"v\": [\"ناوبری تنظیمات\"] } } }, { \"l\": \"fi\", \"t\": { \"Settings navigation\": { \"v\": [\"Asetusten navigointi\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Settings navigation\": { \"v\": [\"Navigation dans les paramètres\"] } } }, { \"l\": \"ga\", \"t\": { \"Settings navigation\": { \"v\": [\"Nascleanúint socruithe\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Settings navigation\": { \"v\": [\"Navegación polos axustes\"] } } }, { \"l\": \"he\", \"t\": { \"Settings navigation\": { \"v\": [\"ניווט בהגדרות\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Settings navigation\": { \"v\": [\"Navigacija postavki\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Settings navigation\": { \"v\": [\"Navigáció a beállításokban\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Settings navigation\": { \"v\": [\"Navigasi pengaturan\"] } } }, { \"l\": \"is\", \"t\": { \"Settings navigation\": { \"v\": [\"Flakk um stillingar\"] } } }, { \"l\": \"it\", \"t\": { \"Settings navigation\": { \"v\": [\"Navigazione delle impostazioni\"] } } }, { \"l\": \"ja\", \"t\": { \"Settings navigation\": { \"v\": [\"ナビゲーション設定\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Settings navigation\": { \"v\": [\"ナビゲーション設定\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Settings navigation\": { \"v\": [\"세팅 탐색\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Settings navigation\": { \"v\": [\"ການນຳທາງການຕັ້ງຄ່າ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Settings navigation\": { \"v\": [\"Naršymas nustatymuose\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Settings navigation\": { \"v\": [\"Параметри за навигација\"] } } }, { \"l\": \"mn\", \"t\": { \"Settings navigation\": { \"v\": [\"Тохиргооны навигаци\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": { \"Settings navigation\": { \"v\": [\"ချိန်ညှိချက်အညွှန်း\"] } } }, { \"l\": \"nb\", \"t\": { \"Settings navigation\": { \"v\": [\"Navigasjonsinstillinger\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Settings navigation\": { \"v\": [\"Instellingen navigatie\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Settings navigation\": { \"v\": [\"Ustawienia nawigacji\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Settings navigation\": { \"v\": [\"Navegação de configurações\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Settings navigation\": { \"v\": [\"Navegação de configurações\"] } } }, { \"l\": \"ro\", \"t\": { \"Settings navigation\": { \"v\": [\"Navigare setări\"] } } }, { \"l\": \"ru\", \"t\": { \"Settings navigation\": { \"v\": [\"Навигация по параметрам\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Settings navigation\": { \"v\": [\"Navigácia v nastaveniach\"] } } }, { \"l\": \"sl\", \"t\": { \"Settings navigation\": { \"v\": [\"Krmarjenje nastavitev\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Settings navigation\": { \"v\": [\"Кретање по подешавањима\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Settings navigation\": { \"v\": [\"Navigering för inställningar\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Settings navigation\": { \"v\": [\"Gezinme ayarları\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Settings navigation\": { \"v\": [\"Навігація у налаштуваннях\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Settings navigation\": { \"v\": [\"Sozlamalar navigatsiyasi\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Settings navigation\": { \"v\": [\"设置向导\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Settings navigation\": { \"v\": [\"設定值導覽\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Settings navigation\": { \"v\": [\"設定值導覽\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t51 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Submit\": { \"v\": [\"إرسال\"] } } }, { \"l\": \"ast\", \"t\": { \"Submit\": { \"v\": [\"Unviar\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Submit\": { \"v\": [\"Envia\"] } } }, { \"l\": \"cs\", \"t\": { \"Submit\": { \"v\": [\"Odeslat\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Submit\": { \"v\": [\"Odeslat\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Submit\": { \"v\": [\"Send\"] } } }, { \"l\": \"de\", \"t\": { \"Submit\": { \"v\": [\"Einreichen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Submit\": { \"v\": [\"Einreichen\"] } } }, { \"l\": \"el\", \"t\": { \"Submit\": { \"v\": [\"Υποβολή\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Submit\": { \"v\": [\"Submit\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Submit\": { \"v\": [\"Enviar\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Submit\": { \"v\": [\"Enviar\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Submit\": { \"v\": [\"Enviar\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Submit\": { \"v\": [\"Enviar\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Submit\": { \"v\": [\"Saada\"] } } }, { \"l\": \"eu\", \"t\": { \"Submit\": { \"v\": [\"Bidali\"] } } }, { \"l\": \"fa\", \"t\": { \"Submit\": { \"v\": [\"ارسال\"] } } }, { \"l\": \"fi\", \"t\": { \"Submit\": { \"v\": [\"Lähetä\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Submit\": { \"v\": [\"Valider\"] } } }, { \"l\": \"ga\", \"t\": { \"Submit\": { \"v\": [\"Cuir isteach\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Submit\": { \"v\": [\"Enviar\"] } } }, { \"l\": \"he\", \"t\": { \"Submit\": { \"v\": [\"הגשה\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Submit\": { \"v\": [\"Pošalji\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Submit\": { \"v\": [\"Beküldés\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Submit\": { \"v\": [\"Kirimkan\"] } } }, { \"l\": \"is\", \"t\": { \"Submit\": { \"v\": [\"Senda inn\"] } } }, { \"l\": \"it\", \"t\": { \"Submit\": { \"v\": [\"Invia\"] } } }, { \"l\": \"ja\", \"t\": { \"Submit\": { \"v\": [\"提出\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Submit\": { \"v\": [\"提出\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Submit\": { \"v\": [\"제출\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Submit\": { \"v\": [\"ສົ່ງ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Submit\": { \"v\": [\"Pateikti\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Submit\": { \"v\": [\"Испрати\"] } } }, { \"l\": \"mn\", \"t\": { \"Submit\": { \"v\": [\"Илгээх\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": { \"Submit\": { \"v\": [\"တင်သွင်းရန်\"] } } }, { \"l\": \"nb\", \"t\": { \"Submit\": { \"v\": [\"Send\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Submit\": { \"v\": [\"Indienen\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Submit\": { \"v\": [\"Wyślij\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Submit\": { \"v\": [\"Enviar\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Submit\": { \"v\": [\"Submeter\"] } } }, { \"l\": \"ro\", \"t\": { \"Submit\": { \"v\": [\"Trimite\"] } } }, { \"l\": \"ru\", \"t\": { \"Submit\": { \"v\": [\"Отправить\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Submit\": { \"v\": [\"Odoslať\"] } } }, { \"l\": \"sl\", \"t\": { \"Submit\": { \"v\": [\"Pošlji\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Submit\": { \"v\": [\"Поднеси\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Submit\": { \"v\": [\"Skicka\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Submit\": { \"v\": [\"Gönder\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Submit\": { \"v\": [\"Надіслати\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Submit\": { \"v\": [\"Yuborish\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Submit\": { \"v\": [\"提交\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Submit\": { \"v\": [\"提交\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Submit\": { \"v\": [\"遞交\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t52 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Unable to search the group\": { \"v\": [\"تعذّر البحث في المجموعة\"] } } }, { \"l\": \"ast\", \"t\": { \"Unable to search the group\": { \"v\": [\"Nun ye posible buscar el grupu\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": { \"Unable to search the group\": { \"v\": [\"Dibosupl eo klask ar strollad\"] } } }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Unable to search the group\": { \"v\": [\"No es pot cercar el grup\"] } } }, { \"l\": \"cs\", \"t\": { \"Unable to search the group\": { \"v\": [\"Nedaří se hledat skupinu\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Unable to search the group\": { \"v\": [\"Nedaří se hledat skupinu\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Unable to search the group\": { \"v\": [\"Der kunne ikke søges i gruppen\"] } } }, { \"l\": \"de\", \"t\": { \"Unable to search the group\": { \"v\": [\"Die Gruppe kann nicht durchsucht werden\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Unable to search the group\": { \"v\": [\"Die Gruppe kann nicht durchsucht werden\"] } } }, { \"l\": \"el\", \"t\": { \"Unable to search the group\": { \"v\": [\"Δεν είναι δυνατή η αναζήτηση της ομάδας\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Unable to search the group\": { \"v\": [\"Unable to search the group\"] } } }, { \"l\": \"eo\", \"t\": { \"Unable to search the group\": { \"v\": [\"Ne eblas serĉi en la grupo\"] } } }, { \"l\": \"es\", \"t\": { \"Unable to search the group\": { \"v\": [\"No es posible buscar en el grupo\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Unable to search the group\": { \"v\": [\"No se puede buscar el grupo\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Unable to search the group\": { \"v\": [\"No se puede buscar en el grupo\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Unable to search the group\": { \"v\": [\"No fue posible buscar en el grupo\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Unable to search the group\": { \"v\": [\"Gruppi ei ole võimalik otsida\"] } } }, { \"l\": \"eu\", \"t\": { \"Unable to search the group\": { \"v\": [\"Ezin izan da taldea bilatu\"] } } }, { \"l\": \"fa\", \"t\": { \"Unable to search the group\": { \"v\": [\"امکان جستجوی گروه وجود ندارد\"] } } }, { \"l\": \"fi\", \"t\": { \"Unable to search the group\": { \"v\": [\"Ryhmää ei voi hakea\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Unable to search the group\": { \"v\": [\"Impossible de chercher le groupe\"] } } }, { \"l\": \"ga\", \"t\": { \"Unable to search the group\": { \"v\": [\"Ní féidir an grúpa a chuardach\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Unable to search the group\": { \"v\": [\"Non foi posíbel buscar o grupo\"] } } }, { \"l\": \"he\", \"t\": { \"Unable to search the group\": { \"v\": [\"לא ניתן לחפש בקבוצה\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Unable to search the group\": { \"v\": [\"Nije moguće pretražiti grupu\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Unable to search the group\": { \"v\": [\"A csoport nem kereshető\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Unable to search the group\": { \"v\": [\"Tidak dapat mencari dalam grup\"] } } }, { \"l\": \"is\", \"t\": { \"Unable to search the group\": { \"v\": [\"Get ekki leitað í hópnum\"] } } }, { \"l\": \"it\", \"t\": { \"Unable to search the group\": { \"v\": [\"Impossibile cercare il gruppo\"] } } }, { \"l\": \"ja\", \"t\": { \"Unable to search the group\": { \"v\": [\"グループを検索できません\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Unable to search the group\": { \"v\": [\"グループを検索できません\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Unable to search the group\": { \"v\": [\"그룹을 검색할 수 없음\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Unable to search the group\": { \"v\": [\"ບໍ່ສາມາດຄົ້ນຫາກຸ່ມໄດ້\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Unable to search the group\": { \"v\": [\"Nepavyko atlikti paiešką grupėje\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Unable to search the group\": { \"v\": [\"Неможе да се пронајде групата\"] } } }, { \"l\": \"mn\", \"t\": { \"Unable to search the group\": { \"v\": [\"Бүлгийг хайж чадсангүй\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": { \"Unable to search the group\": { \"v\": [\"အဖွဲ့အား ရှာဖွေ၍ မရနိုင်ပါ\"] } } }, { \"l\": \"nb\", \"t\": { \"Unable to search the group\": { \"v\": [\"Kunne ikke søke i gruppen\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Unable to search the group\": { \"v\": [\"Kan niet zoeken in de groep\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Unable to search the group\": { \"v\": [\"Nie można przeszukać grupy\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Unable to search the group\": { \"v\": [\"Não foi possível pesquisar o grupo\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Unable to search the group\": { \"v\": [\"Não é possível pesquisar o grupo\"] } } }, { \"l\": \"ro\", \"t\": { \"Unable to search the group\": { \"v\": [\"Căutarea în grup nu a reușit\"] } } }, { \"l\": \"ru\", \"t\": { \"Unable to search the group\": { \"v\": [\"Не удалось выполнить поиск в группе\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Unable to search the group\": { \"v\": [\"Skupinu sa nepodarilo nájsť\"] } } }, { \"l\": \"sl\", \"t\": { \"Unable to search the group\": { \"v\": [\"Ni mogoče iskati po skupini\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Unable to search the group\": { \"v\": [\"Група не може да се претражи\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Unable to search the group\": { \"v\": [\"Det gick inte att söka i gruppen\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Unable to search the group\": { \"v\": [\"Grupta arama yapılamadı\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Unable to search the group\": { \"v\": [\"Неможливо шукати в групі\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Unable to search the group\": { \"v\": [\"Guruhni qidirish imkonsiz\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Unable to search the group\": { \"v\": [\"无法搜索分组\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Unable to search the group\": { \"v\": [\"無法搜尋群組\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Unable to search the group\": { \"v\": [\"無法搜尋群組\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t53 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"Undo changes\": { \"v\": [\"تراجَع عن التغييرات\"] } } }, { \"l\": \"ast\", \"t\": { \"Undo changes\": { \"v\": [\"Desfacer los cambeos\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": { \"Undo changes\": { \"v\": [\"Desfés els canvis\"] } } }, { \"l\": \"cs\", \"t\": { \"Undo changes\": { \"v\": [\"Vzít změny zpět\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"Undo changes\": { \"v\": [\"Vzít změny zpět\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"Undo changes\": { \"v\": [\"Fortryd ændringer\"] } } }, { \"l\": \"de\", \"t\": { \"Undo changes\": { \"v\": [\"Änderungen rückgängig machen\"] } } }, { \"l\": \"de-DE\", \"t\": { \"Undo changes\": { \"v\": [\"Änderungen rückgängig machen\"] } } }, { \"l\": \"el\", \"t\": { \"Undo changes\": { \"v\": [\"Αναίρεση Αλλαγών\"] } } }, { \"l\": \"en-GB\", \"t\": { \"Undo changes\": { \"v\": [\"Undo changes\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"Undo changes\": { \"v\": [\"Deshacer cambios\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"Undo changes\": { \"v\": [\"Deshacer cambios\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": { \"Undo changes\": { \"v\": [\"Deshacer cambios\"] } } }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"Undo changes\": { \"v\": [\"Deshacer cambios\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"Undo changes\": { \"v\": [\"Pööra muudatused tagasi\"] } } }, { \"l\": \"eu\", \"t\": { \"Undo changes\": { \"v\": [\"Aldaketak desegin\"] } } }, { \"l\": \"fa\", \"t\": { \"Undo changes\": { \"v\": [\"لغو تغییرات\"] } } }, { \"l\": \"fi\", \"t\": { \"Undo changes\": { \"v\": [\"Kumoa muutokset\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"Undo changes\": { \"v\": [\"Annuler les modifications\"] } } }, { \"l\": \"ga\", \"t\": { \"Undo changes\": { \"v\": [\"Cealaigh athruithe\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"Undo changes\": { \"v\": [\"Desfacer os cambios\"] } } }, { \"l\": \"he\", \"t\": { \"Undo changes\": { \"v\": [\"ביטול שינויים\"] } } }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"Undo changes\": { \"v\": [\"Poništi promjene\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"Undo changes\": { \"v\": [\"Változtatások visszavonása\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"Undo changes\": { \"v\": [\"Urungkan perubahan\"] } } }, { \"l\": \"is\", \"t\": { \"Undo changes\": { \"v\": [\"Afturkalla breytingar\"] } } }, { \"l\": \"it\", \"t\": { \"Undo changes\": { \"v\": [\"Cancella i cambiamenti\"] } } }, { \"l\": \"ja\", \"t\": { \"Undo changes\": { \"v\": [\"変更を取り消し\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"Undo changes\": { \"v\": [\"変更を取り消し\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"Undo changes\": { \"v\": [\"변경 되돌리기\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"Undo changes\": { \"v\": [\"ຍ້ອນຄືນການປ່ຽນແປງ\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"Undo changes\": { \"v\": [\"Atšaukti pakeitimus\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"Undo changes\": { \"v\": [\"Врати ги промените\"] } } }, { \"l\": \"mn\", \"t\": { \"Undo changes\": { \"v\": [\"Өөрчлөлтийг буцаах\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"Undo changes\": { \"v\": [\"Tilbakestill endringer\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"Undo changes\": { \"v\": [\"Wijzigingen ongedaan maken\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"Undo changes\": { \"v\": [\"Cofnij zmiany\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"Undo changes\": { \"v\": [\"Desfazer modificações\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"Undo changes\": { \"v\": [\"Anular alterações\"] } } }, { \"l\": \"ro\", \"t\": { \"Undo changes\": { \"v\": [\"Revino asupra modificărilor\"] } } }, { \"l\": \"ru\", \"t\": { \"Undo changes\": { \"v\": [\"Отменить изменения\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"Undo changes\": { \"v\": [\"Vrátiť zmeny\"] } } }, { \"l\": \"sl\", \"t\": { \"Undo changes\": { \"v\": [\"Razveljavi spremembe\"] } } }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"Undo changes\": { \"v\": [\"Поништи измене\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"Undo changes\": { \"v\": [\"Ångra ändringar\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"Undo changes\": { \"v\": [\"Değişiklikleri geri al\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"Undo changes\": { \"v\": [\"Скасувати зміни\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"Undo changes\": { \"v\": [\"O'zgarishlarni bekor qilish\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"Undo changes\": { \"v\": [\"撤销更改\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"Undo changes\": { \"v\": [\"取消更改\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"Undo changes\": { \"v\": [\"還原變更\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nconst t54 = [{ \"l\": \"af\", \"t\": {} }, { \"l\": \"ar\", \"t\": { \"User status: {status}\": { \"v\": [\"حالة المستخدِم: {status}\"] } } }, { \"l\": \"ast\", \"t\": { \"User status: {status}\": { \"v\": [\"Estáu del usuariu: {status}\"] } } }, { \"l\": \"az\", \"t\": {} }, { \"l\": \"be\", \"t\": {} }, { \"l\": \"bg\", \"t\": {} }, { \"l\": \"bn-BD\", \"t\": {} }, { \"l\": \"br\", \"t\": {} }, { \"l\": \"bs\", \"t\": {} }, { \"l\": \"ca\", \"t\": {} }, { \"l\": \"cs\", \"t\": { \"User status: {status}\": { \"v\": [\"Stav uživatele: {status}\"] } } }, { \"l\": \"cs-CZ\", \"t\": { \"User status: {status}\": { \"v\": [\"Stav uživatele: {status}\"] } } }, { \"l\": \"cy-GB\", \"t\": {} }, { \"l\": \"da\", \"t\": { \"User status: {status}\": { \"v\": [\"Brugerstatus: {status}\"] } } }, { \"l\": \"de\", \"t\": { \"User status: {status}\": { \"v\": [\"Benutzerstatus: {status}\"] } } }, { \"l\": \"de-DE\", \"t\": { \"User status: {status}\": { \"v\": [\"Benutzerstatus: {status}\"] } } }, { \"l\": \"el\", \"t\": { \"User status: {status}\": { \"v\": [\"Κατάσταση χρήστη: {status}\"] } } }, { \"l\": \"en-GB\", \"t\": { \"User status: {status}\": { \"v\": [\"User status: {status}\"] } } }, { \"l\": \"eo\", \"t\": {} }, { \"l\": \"es\", \"t\": { \"User status: {status}\": { \"v\": [\"Estatus del usuario: {status}\"] } } }, { \"l\": \"es-419\", \"t\": {} }, { \"l\": \"es-AR\", \"t\": { \"User status: {status}\": { \"v\": [\"Estado del usuario: {status}\"] } } }, { \"l\": \"es-CL\", \"t\": {} }, { \"l\": \"es-CO\", \"t\": {} }, { \"l\": \"es-CR\", \"t\": {} }, { \"l\": \"es-DO\", \"t\": {} }, { \"l\": \"es-EC\", \"t\": {} }, { \"l\": \"es-GT\", \"t\": {} }, { \"l\": \"es-HN\", \"t\": {} }, { \"l\": \"es-MX\", \"t\": { \"User status: {status}\": { \"v\": [\"Estado del usuario: {status}\"] } } }, { \"l\": \"es-NI\", \"t\": {} }, { \"l\": \"es-PA\", \"t\": {} }, { \"l\": \"es-PE\", \"t\": {} }, { \"l\": \"es-PR\", \"t\": {} }, { \"l\": \"es-PY\", \"t\": {} }, { \"l\": \"es-SV\", \"t\": {} }, { \"l\": \"es-UY\", \"t\": {} }, { \"l\": \"et-EE\", \"t\": { \"User status: {status}\": { \"v\": [\"Kasutaja olek: {status}\"] } } }, { \"l\": \"eu\", \"t\": {} }, { \"l\": \"fa\", \"t\": { \"User status: {status}\": { \"v\": [\"وضعیت کاربر: {status}\"] } } }, { \"l\": \"fi\", \"t\": { \"User status: {status}\": { \"v\": [\"Käyttäjän tila: {status}\"] } } }, { \"l\": \"fo\", \"t\": {} }, { \"l\": \"fr\", \"t\": { \"User status: {status}\": { \"v\": [\"Statut de l'utilisateur : {status}\"] } } }, { \"l\": \"ga\", \"t\": { \"User status: {status}\": { \"v\": [\"Stádas úsáideora: {status}\"] } } }, { \"l\": \"gd\", \"t\": {} }, { \"l\": \"gl\", \"t\": { \"User status: {status}\": { \"v\": [\"Estado do usuario: {status}\"] } } }, { \"l\": \"he\", \"t\": {} }, { \"l\": \"hi-IN\", \"t\": {} }, { \"l\": \"hr\", \"t\": { \"User status: {status}\": { \"v\": [\"Status korisnika: {status}\"] } } }, { \"l\": \"hsb\", \"t\": {} }, { \"l\": \"hu\", \"t\": { \"User status: {status}\": { \"v\": [\"Felhasználó állapota: {status}\"] } } }, { \"l\": \"hy\", \"t\": {} }, { \"l\": \"ia\", \"t\": {} }, { \"l\": \"id\", \"t\": { \"User status: {status}\": { \"v\": [\"Status pengguna: {status}\"] } } }, { \"l\": \"is\", \"t\": { \"User status: {status}\": { \"v\": [\"Staða notanda: {status}\"] } } }, { \"l\": \"it\", \"t\": { \"User status: {status}\": { \"v\": [\"Stato dell'utente: {status}\"] } } }, { \"l\": \"ja\", \"t\": { \"User status: {status}\": { \"v\": [\"ユーザのステータス: {status}\"] } } }, { \"l\": \"ja-JP\", \"t\": { \"User status: {status}\": { \"v\": [\"ユーザのステータス: {status}\"] } } }, { \"l\": \"ka\", \"t\": {} }, { \"l\": \"ka-GE\", \"t\": {} }, { \"l\": \"kab\", \"t\": {} }, { \"l\": \"kk\", \"t\": {} }, { \"l\": \"kn\", \"t\": {} }, { \"l\": \"ko\", \"t\": { \"User status: {status}\": { \"v\": [\"사용자 상태: {status}\"] } } }, { \"l\": \"la\", \"t\": {} }, { \"l\": \"lb\", \"t\": {} }, { \"l\": \"lo\", \"t\": { \"User status: {status}\": { \"v\": [\"ສະຖານະຜູ້ໃຊ້: {status}\"] } } }, { \"l\": \"lt-LT\", \"t\": { \"User status: {status}\": { \"v\": [\"Naudotojo būsena: {status}\"] } } }, { \"l\": \"lv\", \"t\": {} }, { \"l\": \"mk\", \"t\": { \"User status: {status}\": { \"v\": [\"Статус: {status}\"] } } }, { \"l\": \"mn\", \"t\": { \"User status: {status}\": { \"v\": [\"Хэрэглэгчийн төлөв: {status}\"] } } }, { \"l\": \"mr\", \"t\": {} }, { \"l\": \"my\", \"t\": {} }, { \"l\": \"nb\", \"t\": { \"User status: {status}\": { \"v\": [\"Brukerstatus: {status}\"] } } }, { \"l\": \"ne\", \"t\": {} }, { \"l\": \"nl\", \"t\": { \"User status: {status}\": { \"v\": [\"Gebruikersstatus: {status}\"] } } }, { \"l\": \"nn-NO\", \"t\": {} }, { \"l\": \"oc\", \"t\": {} }, { \"l\": \"pl\", \"t\": { \"User status: {status}\": { \"v\": [\"Status użytkownika: {status}\"] } } }, { \"l\": \"ps\", \"t\": {} }, { \"l\": \"pt-BR\", \"t\": { \"User status: {status}\": { \"v\": [\"Status do usuário: {status}\"] } } }, { \"l\": \"pt-PT\", \"t\": { \"User status: {status}\": { \"v\": [\"Estado do utilizador: {status}\"] } } }, { \"l\": \"ro\", \"t\": { \"User status: {status}\": { \"v\": [\"Stare utilizator: {status}\"] } } }, { \"l\": \"ru\", \"t\": { \"User status: {status}\": { \"v\": [\"Статус пользователя: {status}\"] } } }, { \"l\": \"sc\", \"t\": {} }, { \"l\": \"si\", \"t\": {} }, { \"l\": \"sk\", \"t\": { \"User status: {status}\": { \"v\": [\"Stav užívateľa: {status}\"] } } }, { \"l\": \"sl\", \"t\": {} }, { \"l\": \"sq\", \"t\": {} }, { \"l\": \"sr\", \"t\": { \"User status: {status}\": { \"v\": [\"Статус корисника: {status}\"] } } }, { \"l\": \"sr-Latn\", \"t\": {} }, { \"l\": \"sv\", \"t\": { \"User status: {status}\": { \"v\": [\"Användarstatus: {status}\"] } } }, { \"l\": \"sw\", \"t\": {} }, { \"l\": \"ta\", \"t\": {} }, { \"l\": \"tk\", \"t\": {} }, { \"l\": \"tr\", \"t\": { \"User status: {status}\": { \"v\": [\"Kullanıcı durumu: {status}\"] } } }, { \"l\": \"ug\", \"t\": {} }, { \"l\": \"uk\", \"t\": { \"User status: {status}\": { \"v\": [\"Статус користувача: {status}\"] } } }, { \"l\": \"ur-PK\", \"t\": {} }, { \"l\": \"uz\", \"t\": { \"User status: {status}\": { \"v\": [\"Foydalanuvchi holati: {status}\"] } } }, { \"l\": \"zh-CN\", \"t\": { \"User status: {status}\": { \"v\": [\"用户状态:{status}\"] } } }, { \"l\": \"zh-HK\", \"t\": { \"User status: {status}\": { \"v\": [\"用戶狀態:{status}\"] } } }, { \"l\": \"zh-TW\", \"t\": { \"User status: {status}\": { \"v\": [\"使用者狀態:{status}\"] } } }, { \"l\": \"zu-ZA\", \"t\": {} }];\nexport {\n t48 as $,\n t44 as A,\n t37 as B,\n t5 as C,\n t1 as D,\n t19 as E,\n t4 as F,\n t29 as G,\n t27 as H,\n t34 as I,\n n as J,\n t30 as K,\n t36 as L,\n t41 as M,\n t50 as N,\n t40 as O,\n t28 as P,\n t6 as Q,\n t14 as R,\n t20 as S,\n t22 as T,\n t23 as U,\n t39 as V,\n t43 as W,\n t9 as X,\n t54 as Y,\n t11 as Z,\n t8 as _,\n t as a,\n t42 as a0,\n t25 as a1,\n t32 as a2,\n t12 as a3,\n t53 as b,\n t17 as c,\n t21 as d,\n t33 as e,\n t2 as f,\n t38 as g,\n t16 as h,\n t52 as i,\n t51 as j,\n t0 as k,\n t24 as l,\n t35 as m,\n t18 as n,\n t49 as o,\n t45 as p,\n t15 as q,\n register as r,\n t13 as s,\n t3 as t,\n t10 as u,\n t46 as v,\n t26 as w,\n t47 as x,\n t7 as y,\n t31 as z\n};\n//# sourceMappingURL=_l10n-Dv1YKfKS.mjs.map\n","function normalizeComponent(scriptExports, render, staticRenderFns, functionalTemplate, injectStyles, scopeId, moduleIdentifier, shadowMode) {\n var options = typeof scriptExports === \"function\" ? scriptExports.options : scriptExports;\n if (render) {\n options.render = render;\n options.staticRenderFns = staticRenderFns;\n options._compiled = true;\n }\n if (scopeId) {\n options._scopeId = \"data-v-\" + scopeId;\n }\n var hook;\n if (injectStyles) {\n hook = injectStyles;\n }\n if (hook) {\n if (options.functional) {\n options._injectStyles = hook;\n var originalRender = options.render;\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context);\n return originalRender(h, context);\n };\n } else {\n var existing = options.beforeCreate;\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook];\n }\n }\n return {\n exports: scriptExports,\n options\n };\n}\nexport {\n normalizeComponent as n\n};\n//# sourceMappingURL=_plugin-vue2_normalizer-DU4iP6Vu.mjs.map\n","const ActionGlobalMixin = {\n beforeUpdate() {\n this.text = this.getText();\n },\n data() {\n return {\n // $slots are not reactive.\n // We need to update the content manually\n text: this.getText()\n };\n },\n computed: {\n isLongText() {\n return this.text && this.text.trim().length > 20;\n }\n },\n methods: {\n getText() {\n return this.$slots.default ? this.$slots.default[0].text.trim() : \"\";\n }\n }\n};\nexport {\n ActionGlobalMixin as A\n};\n//# sourceMappingURL=actionGlobal-DqVa7c7G.mjs.map\n","import { A as ActionGlobalMixin } from \"./actionGlobal-DqVa7c7G.mjs\";\nfunction GetParent(context, name) {\n let parent = context.$parent;\n while (parent) {\n if (parent.$options.name === name) {\n return parent;\n }\n parent = parent.$parent;\n }\n}\nconst ActionTextMixin = {\n mixins: [ActionGlobalMixin],\n props: {\n /**\n * Icon to show with the action, can be either a CSS class or an URL\n */\n icon: {\n type: String,\n default: \"\"\n },\n /**\n * The main text content of the entry.\n */\n name: {\n type: String,\n default: \"\"\n },\n /**\n * The title attribute of the element.\n */\n title: {\n type: String,\n default: \"\"\n },\n /**\n * Whether we close the Actions menu after the click\n */\n closeAfterClick: {\n type: Boolean,\n default: false\n },\n /**\n * Aria label for the button. Not needed if the button has text.\n */\n ariaLabel: {\n type: String,\n default: null\n },\n /**\n * @deprecated To be removed in @nextcloud/vue 9. Migration guide: remove ariaHidden prop from NcAction* components.\n * @todo Add a check in @nextcloud/vue 9 that this prop is not provided,\n * otherwise root element will inherit incorrect aria-hidden.\n */\n ariaHidden: {\n type: Boolean,\n default: null\n }\n },\n emits: [\n \"click\"\n ],\n computed: {\n /**\n * Check if icon prop is an URL\n *\n * @return {boolean} Whether the icon prop is an URL\n */\n isIconUrl() {\n try {\n return !!new URL(this.icon, this.icon.startsWith(\"/\") ? window.location.origin : void 0);\n } catch {\n return false;\n }\n }\n },\n methods: {\n onClick(event) {\n this.$emit(\"click\", event);\n if (this.closeAfterClick) {\n const parent = GetParent(this, \"NcActions\");\n if (parent && parent.closeMenu) {\n parent.closeMenu(false);\n }\n }\n }\n }\n};\nexport {\n ActionTextMixin as A\n};\n//# sourceMappingURL=actionText-BMig9Egt.mjs.map\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./autolink-oZo-1y2n.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./autolink-oZo-1y2n.css\";\n export default content && content.locals ? content.locals : undefined;\n","import '../assets/autolink-oZo-1y2n.css';\nimport { getBaseUrl, getRootUrl } from \"@nextcloud/router\";\nimport { u } from \"unist-builder\";\nimport { visitParents, SKIP } from \"unist-util-visit-parents\";\nimport { defineComponent } from \"vue\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcRichTextExternalLink\",\n props: {\n href: null,\n decorateExternal: { type: Boolean }\n },\n setup(__props) {\n const { href, decorateExternal = false } = __props;\n return { __sfc: true };\n }\n});\nconst externalLink = \"_externalLink_aFEAG\";\nconst externalLink_decorated = \"_externalLink_decorated_D-MKg\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_GNzpp\",\n externalLink,\n externalLink_decorated\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n _vm._self._setupProxy;\n return _c(\"a\", { class: [_vm.$style.externalLink, {\n [_vm.$style.externalLink_decorated]: _vm.decorateExternal\n }], attrs: { \"href\": _vm.href, \"rel\": \"noopener noreferrer\", \"target\": \"_blank\" } }, [_vm._t(\"default\", function() {\n return [_vm._v(_vm._s(_vm.href))];\n })], 2);\n};\nvar _sfc_staticRenderFns = [];\nconst __cssModules = {\n \"$style\": style0\n};\nfunction _sfc_injectStyles(ctx) {\n for (var key in __cssModules) {\n this[key] = __cssModules[key];\n }\n}\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n _sfc_injectStyles,\n null\n);\nconst NcRichTextExternalLink = __component__.exports;\nconst URL_PATTERN = /(\\s|^)(https?:\\/\\/)([-A-Z0-9+_.]+(?::[0-9]+)?(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\\s|$)/ig;\nconst URL_PATTERN_AUTOLINK = /(\\s|\\(|^)((https?:\\/\\/)([-A-Z0-9+_.]+[-A-Z0-9]+(?::[0-9]+)?(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*))(?=\\s|\\)|$)/ig;\nfunction remarkAutolink({ autolink, useMarkdown, useExtendedMarkdown }) {\n return function(tree) {\n if (useExtendedMarkdown || !useMarkdown || !autolink) {\n return;\n }\n visitParents(tree, (node) => node.type === \"text\", (node, ancestors) => {\n if (ancestors.some((ancestor) => ancestor.type === \"link\" || ancestor.type === \"linkReference\")) {\n return;\n }\n const parent = ancestors.at(-1);\n const index = parent.children.indexOf(node) ?? 0;\n let parsed = parseUrl(node.value);\n parsed = parsed.map((n) => {\n if (typeof n === \"string\") {\n return u(\"text\", n);\n }\n return u(\"link\", {\n url: n.props.href\n }, [u(\"text\", n.props.href)]);\n }).filter((x) => x);\n parent.children.splice(index, 1, ...parsed.flat());\n return [SKIP, index + parsed.flat().length];\n });\n };\n}\nfunction parseUrl(text) {\n let match = URL_PATTERN_AUTOLINK.exec(text);\n const list = [];\n let start = 0;\n while (match !== null) {\n let href = match[2];\n let textAfter;\n let textBefore = text.substring(start, match.index + match[1].length);\n if (href[0] === \" \") {\n textBefore += href[0];\n href = href.substring(1).trim();\n }\n const lastChar = href[href.length - 1];\n if (lastChar === \".\" || lastChar === \",\" || lastChar === \";\" || match[0][0] === \"(\" && lastChar === \")\") {\n href = href.substring(0, href.length - 1);\n textAfter = lastChar;\n }\n list.push(textBefore);\n list.push({ component: NcRichTextExternalLink, props: { href: href.trim(), decorateExternal: true } });\n if (textAfter) {\n list.push(textAfter);\n }\n start = match.index + match[0].length;\n match = URL_PATTERN_AUTOLINK.exec(text);\n }\n list.push(text.substring(start));\n const joinedText = list.map((item) => typeof item === \"string\" ? item : item.props.href).join(\"\");\n if (text === joinedText) {\n return list;\n }\n logger.error(\"Failed to reassemble the chunked text: \" + text);\n return text;\n}\nfunction getRoute(router, url) {\n const removePrefix = (str, prefix) => str.startsWith(prefix) ? str.slice(prefix.length) : str;\n const removePrefixes = (str, ...prefixes) => prefixes.reduce((acc, prefix) => removePrefix(acc, prefix), str);\n if (!router) {\n return null;\n }\n const isAbsoluteURL = /^https?:\\/\\//.test(url);\n const isNonHttpLink = /^[a-z][a-z0-9+.-]*:.+/.test(url);\n if (!isAbsoluteURL && isNonHttpLink) {\n return null;\n }\n if (isAbsoluteURL && !url.startsWith(getBaseUrl())) {\n return null;\n }\n if (!isAbsoluteURL && !url.startsWith(\"/\")) {\n return null;\n }\n const relativeUrl = isAbsoluteURL ? removePrefixes(url, getBaseUrl(), \"/index.php\") : url;\n const relativeRouterBase = removePrefixes(router.history.base, getRootUrl(), \"/index.php\");\n const potentialRouterPath = removePrefixes(relativeUrl, relativeRouterBase) || \"/\";\n const route = router.resolve(potentialRouterPath).route;\n if (!route.matched.length) {\n return null;\n }\n return route.fullPath;\n}\nexport {\n NcRichTextExternalLink as N,\n URL_PATTERN as U,\n getRoute as g,\n parseUrl as p,\n remarkAutolink as r\n};\n//# sourceMappingURL=autolink-BoBR7PZC.mjs.map\n","import { r as register, t as t3, a as t } from \"./_l10n-Dv1YKfKS.mjs\";\nregister(t3);\nclass Color {\n /**\n * @param r - The red value\n * @param g - The green value\n * @param b - The blue value\n * @param name - The name of the color\n */\n constructor(r, g, b, name) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.name = name;\n this.r = Math.min(r, 255);\n this.g = Math.min(g, 255);\n this.b = Math.min(b, 255);\n this.name = name;\n }\n r;\n g;\n b;\n name;\n /**\n * The hexadecimal color string.\n */\n get color() {\n const toHex = (int) => `00${int.toString(16)}`.slice(-2);\n return `#${toHex(this.r)}${toHex(this.g)}${toHex(this.b)}`;\n }\n}\nfunction calculateStepIncrement(steps, color1, color2) {\n return {\n r: (color2.r - color1.r) / steps,\n g: (color2.g - color1.g) / steps,\n b: (color2.b - color1.b) / steps\n };\n}\nfunction mixPalette(steps, color1, color2) {\n const palette = [];\n palette.push(color1);\n const increment = calculateStepIncrement(steps, color1, color2);\n for (let i = 1; i < steps; i++) {\n const r = Math.floor(color1.r + increment.r * i);\n const g = Math.floor(color1.g + increment.g * i);\n const b = Math.floor(color1.b + increment.b * i);\n palette.push(new Color(r, g, b));\n }\n return palette;\n}\nconst COLOR_RED = new Color(182, 70, 157, t(\"Purple\"));\nconst COLOR_YELLOW = new Color(221, 203, 85, t(\"Gold\"));\nconst COLOR_BLUE = new Color(0, 130, 201, t(\"Nextcloud blue\"));\nconst COLOR_BLACK = new Color(0, 0, 0, t(\"Black\"));\nconst COLOR_WHITE = new Color(255, 255, 255, t(\"White\"));\nconst defaultPalette = [\n COLOR_RED,\n new Color(\n ...[191, 103, 139],\n t(\"Rosy brown\")\n // TRANSLATORS: A color name for RGB(191, 103, 139)\n ),\n new Color(\n ...[201, 136, 121],\n t(\"Feldspar\")\n // TRANSLATORS: A color name for RGB(201, 136, 121)\n ),\n new Color(\n ...[211, 169, 103],\n t(\"Whiskey\")\n // TRANSLATORS: A color name for RGB(211, 169, 103)\n ),\n COLOR_YELLOW,\n new Color(\n ...[165, 184, 114],\n t(\"Olivine\")\n // TRANSLATORS: A color name for RGB(165, 184, 114)\n ),\n new Color(\n ...[110, 166, 143],\n t(\"Acapulco\")\n // TRANSLATORS: A color name for RGB(110, 166, 143)\n ),\n new Color(\n ...[55, 148, 172],\n t(\"Boston Blue\")\n // TRANSLATORS: A color name for RGB(55, 148, 172)\n ),\n COLOR_BLUE,\n new Color(\n ...[45, 115, 190],\n t(\"Mariner\")\n // TRANSLATORS: A color name for RGB(45, 115, 190)\n ),\n new Color(\n ...[91, 100, 179],\n t(\"Blue Violet\")\n // TRANSLATORS: A color name for RGB(91, 100, 179)\n ),\n new Color(\n ...[136, 85, 168],\n t(\"Deluge\")\n // TRANSLATORS: A color name for RGB(136, 85, 168)\n )\n];\nfunction generatePalette(steps) {\n const palette1 = mixPalette(steps, COLOR_RED, COLOR_YELLOW);\n const palette2 = mixPalette(steps, COLOR_YELLOW, COLOR_BLUE);\n const palette3 = mixPalette(steps, COLOR_BLUE, COLOR_RED);\n return palette1.concat(palette2).concat(palette3);\n}\nexport {\n Color as C,\n COLOR_BLACK as a,\n COLOR_WHITE as b,\n defaultPalette as d,\n generatePalette as g\n};\n//# sourceMappingURL=colors-CF9oiOgn.mjs.map\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nconst INJECTION_KEY_THEME = /* @__PURE__ */ Symbol.for(\"nc:theme:enforced\");\nexport {\n INJECTION_KEY_THEME as I\n};\n//# sourceMappingURL=constants-wIEKSp2G.mjs.map\n","window._nc_vue_element_id = window._nc_vue_element_id ?? 0;\nfunction createElementId() {\n return `nc-vue-${window._nc_vue_element_id++}`;\n}\nexport {\n createElementId as c\n};\n//# sourceMappingURL=createElementId-DhjFt1I9.mjs.map\n","function getTrapStack() {\n window._nc_focus_trap ??= [];\n return window._nc_focus_trap;\n}\nfunction createTrapStackController() {\n let pausedStack = [];\n return {\n /**\n * Pause the current focus-trap stack\n */\n pause() {\n pausedStack = [...getTrapStack()];\n for (const trap of pausedStack) {\n trap.pause();\n }\n },\n /**\n * Unpause the paused focus trap stack\n * If the actual stack is different from the paused one, ignore unpause.\n */\n unpause() {\n if (pausedStack.length === getTrapStack().length) {\n for (const trap of pausedStack) {\n trap.unpause();\n }\n }\n pausedStack = [];\n }\n };\n}\nexport {\n createTrapStackController as c,\n getTrapStack as g\n};\n//# sourceMappingURL=focusTrap-HJQ4pqHV.mjs.map\n","import { generateUrl } from \"@nextcloud/router\";\nimport { checkIfDarkTheme } from \"../Functions/isDarkTheme.mjs\";\nfunction getAvatarUrl(user, options) {\n const size = (options?.size || 64) <= 64 ? 64 : 512;\n const guestUrl = options?.isGuest ? \"/guest\" : \"\";\n const themeUrl = options?.isDarkTheme ?? checkIfDarkTheme(document.body) ? \"/dark\" : \"\";\n return generateUrl(`/avatar${guestUrl}/{user}/{size}${themeUrl}?guestFallback=true`, {\n user,\n size\n });\n}\nexport {\n getAvatarUrl as g\n};\n//# sourceMappingURL=getAvatarUrl-BGOeDmNO.mjs.map\n","import { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nfunction FindRanges(text, search) {\n const ranges = [];\n let currentIndex = 0;\n let index = text.toLowerCase().indexOf(search.toLowerCase(), currentIndex);\n let i = 0;\n while (index > -1 && i < text.length) {\n currentIndex = index + search.length;\n ranges.push({ start: index, end: currentIndex });\n index = text.toLowerCase().indexOf(search.toLowerCase(), currentIndex);\n i++;\n }\n return ranges;\n}\nconst _sfc_main = {\n name: \"NcHighlight\",\n props: {\n /**\n * The string to display\n */\n text: {\n type: String,\n default: \"\"\n },\n /**\n * The string to match and highlight\n */\n search: {\n type: String,\n default: \"\"\n },\n /**\n * The ranges to highlight, takes precedence over the search prop.\n */\n highlight: {\n type: Array,\n default: () => []\n }\n },\n computed: {\n /**\n * The indice ranges which should be highlighted.\n * If an array with ranges is provided, we use it. Otherwise\n * we calculate it based on the provided substring to highlight.\n *\n * @return {Array} The array of ranges to highlight\n */\n ranges() {\n let ranges = [];\n if (!this.search && this.highlight.length === 0) {\n return ranges;\n }\n if (this.highlight.length > 0) {\n ranges = this.highlight;\n } else {\n ranges = FindRanges(this.text, this.search);\n }\n ranges.forEach((range, i) => {\n if (range.end < range.start) {\n ranges[i] = {\n start: range.end,\n end: range.start\n };\n }\n });\n ranges = ranges.reduce((validRanges, range) => {\n if (range.start < this.text.length && range.end > 0) {\n validRanges.push({\n start: range.start < 0 ? 0 : range.start,\n end: range.end > this.text.length ? this.text.length : range.end\n });\n }\n return validRanges;\n }, []);\n ranges.sort((a, b) => {\n return a.start - b.start;\n });\n ranges = ranges.reduce((mergedRanges, range) => {\n if (!mergedRanges.length) {\n mergedRanges.push(range);\n } else {\n const idx = mergedRanges.length - 1;\n if (mergedRanges[idx].end >= range.start) {\n mergedRanges[idx] = {\n start: mergedRanges[idx].start,\n end: Math.max(mergedRanges[idx].end, range.end)\n };\n } else {\n mergedRanges.push(range);\n }\n }\n return mergedRanges;\n }, []);\n return ranges;\n },\n /**\n * Calculate the different chunks to show based on the ranges to highlight.\n *\n * @return {Array} The chunks\n */\n chunks() {\n if (this.ranges.length === 0) {\n return [{\n start: 0,\n end: this.text.length,\n highlight: false,\n text: this.text\n }];\n }\n const chunks = [];\n let currentIndex = 0;\n let currentRange = 0;\n while (currentIndex < this.text.length) {\n const range = this.ranges[currentRange];\n if (range.start === currentIndex) {\n chunks.push({\n ...range,\n highlight: true,\n text: this.text.slice(range.start, range.end)\n });\n currentRange++;\n currentIndex = range.end;\n if (currentRange >= this.ranges.length && currentIndex < this.text.length) {\n chunks.push({\n start: currentIndex,\n end: this.text.length,\n highlight: false,\n text: this.text.slice(currentIndex)\n });\n currentIndex = this.text.length;\n }\n continue;\n }\n chunks.push({\n start: currentIndex,\n end: range.start,\n highlight: false,\n text: this.text.slice(currentIndex, range.start)\n });\n currentIndex = range.start;\n }\n return chunks;\n }\n },\n /**\n * The render function to display the component\n *\n * @param {Function} h The function to create VNodes\n * @return {object} The created VNode\n */\n render(h) {\n if (!this.ranges.length) {\n return h(\"span\", {}, this.text);\n }\n return h(\"span\", {}, this.chunks.map((chunk) => {\n return chunk.highlight ? h(\"strong\", {}, chunk.text) : chunk.text;\n }));\n }\n};\nconst _sfc_render = null;\nconst _sfc_staticRenderFns = null;\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n null\n);\nconst NcHighlight = __component__.exports;\nexport {\n FindRanges as F,\n NcHighlight as N\n};\n//# sourceMappingURL=index-CxTT94_h.mjs.map\n","const version = window.OC?.config?.version?.split(\".\")[0] || \"35\";\nconst major = Number.parseInt(version);\nconst isLegacy32 = major < 32;\nconst isLegacy34 = major < 34;\nconst isLegacy35 = major < 35;\nexport {\n isLegacy32 as a,\n isLegacy35 as b,\n isLegacy34 as i\n};\n//# sourceMappingURL=legacy-Cy3dCXuB.mjs.map\n","import { getLoggerBuilder } from \"@nextcloud/logger\";\nconst logger = getLoggerBuilder().detectUser().setApp(\"@nextcloud/vue\").build();\nexport {\n logger as l\n};\n//# sourceMappingURL=logger-D3RVzcfQ.mjs.map\n","var mdiAlertCircleOutline = \"M11,15H13V17H11V15M11,7H13V13H11V7M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20Z\";\nvar mdiArrowLeft = \"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z\";\nvar mdiArrowRight = \"M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z\";\nvar mdiArrowTopRight = \"M5,17.59L15.59,7H9V5H19V15H17V8.41L6.41,19L5,17.59Z\";\nvar mdiCheck = \"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\";\nvar mdiCheckboxBlankOutline = \"M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3M19,5V19H5V5H19Z\";\nvar mdiCheckboxMarked = \"M10,17L5,12L6.41,10.58L10,14.17L17.59,6.58L19,8M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z\";\nvar mdiChevronLeft = \"M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z\";\nvar mdiChevronRight = \"M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z\";\nvar mdiClose = \"M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z\";\nvar mdiCloseCircleOutline = \"M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2C6.47,2 2,6.47 2,12C2,17.53 6.47,22 12,22C17.53,22 22,17.53 22,12C22,6.47 17.53,2 12,2M14.59,8L12,10.59L9.41,8L8,9.41L10.59,12L8,14.59L9.41,16L12,13.41L14.59,16L16,14.59L13.41,12L16,9.41L14.59,8Z\";\nvar mdiCog = \"M12,15.5A3.5,3.5 0 0,1 8.5,12A3.5,3.5 0 0,1 12,8.5A3.5,3.5 0 0,1 15.5,12A3.5,3.5 0 0,1 12,15.5M19.43,12.97C19.47,12.65 19.5,12.33 19.5,12C19.5,11.67 19.47,11.34 19.43,11L21.54,9.37C21.73,9.22 21.78,8.95 21.66,8.73L19.66,5.27C19.54,5.05 19.27,4.96 19.05,5.05L16.56,6.05C16.04,5.66 15.5,5.32 14.87,5.07L14.5,2.42C14.46,2.18 14.25,2 14,2H10C9.75,2 9.54,2.18 9.5,2.42L9.13,5.07C8.5,5.32 7.96,5.66 7.44,6.05L4.95,5.05C4.73,4.96 4.46,5.05 4.34,5.27L2.34,8.73C2.21,8.95 2.27,9.22 2.46,9.37L4.57,11C4.53,11.34 4.5,11.67 4.5,12C4.5,12.33 4.53,12.65 4.57,12.97L2.46,14.63C2.27,14.78 2.21,15.05 2.34,15.27L4.34,18.73C4.46,18.95 4.73,19.03 4.95,18.95L7.44,17.94C7.96,18.34 8.5,18.68 9.13,18.93L9.5,21.58C9.54,21.82 9.75,22 10,22H14C14.25,22 14.46,21.82 14.5,21.58L14.87,18.93C15.5,18.67 16.04,18.34 16.56,17.94L19.05,18.95C19.27,19.03 19.54,18.95 19.66,18.73L21.66,15.27C21.78,15.05 21.73,14.78 21.54,14.63L19.43,12.97Z\";\nvar mdiCogOutline = \"M12,8A4,4 0 0,1 16,12A4,4 0 0,1 12,16A4,4 0 0,1 8,12A4,4 0 0,1 12,8M12,10A2,2 0 0,0 10,12A2,2 0 0,0 12,14A2,2 0 0,0 14,12A2,2 0 0,0 12,10M10,22C9.75,22 9.54,21.82 9.5,21.58L9.13,18.93C8.5,18.68 7.96,18.34 7.44,17.94L4.95,18.95C4.73,19.03 4.46,18.95 4.34,18.73L2.34,15.27C2.21,15.05 2.27,14.78 2.46,14.63L4.57,12.97L4.5,12L4.57,11L2.46,9.37C2.27,9.22 2.21,8.95 2.34,8.73L4.34,5.27C4.46,5.05 4.73,4.96 4.95,5.05L7.44,6.05C7.96,5.66 8.5,5.32 9.13,5.07L9.5,2.42C9.54,2.18 9.75,2 10,2H14C14.25,2 14.46,2.18 14.5,2.42L14.87,5.07C15.5,5.32 16.04,5.66 16.56,6.05L19.05,5.05C19.27,4.96 19.54,5.05 19.66,5.27L21.66,8.73C21.79,8.95 21.73,9.22 21.54,9.37L19.43,11L19.5,12L19.43,13L21.54,14.63C21.73,14.78 21.79,15.05 21.66,15.27L19.66,18.73C19.54,18.95 19.27,19.04 19.05,18.95L16.56,17.95C16.04,18.34 15.5,18.68 14.87,18.93L14.5,21.58C14.46,21.82 14.25,22 14,22H10M11.25,4L10.88,6.61C9.68,6.86 8.62,7.5 7.85,8.39L5.44,7.35L4.69,8.65L6.8,10.2C6.4,11.37 6.4,12.64 6.8,13.8L4.68,15.36L5.43,16.66L7.86,15.62C8.63,16.5 9.68,17.14 10.87,17.38L11.24,20H12.76L13.13,17.39C14.32,17.14 15.37,16.5 16.14,15.62L18.57,16.66L19.32,15.36L17.2,13.81C17.6,12.64 17.6,11.37 17.2,10.2L19.31,8.65L18.56,7.35L16.15,8.39C15.38,7.5 14.32,6.86 13.12,6.62L12.75,4H11.25Z\";\nvar mdiContentCopy = \"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\";\nvar mdiCreation = \"M19,1L17.74,3.75L15,5L17.74,6.26L19,9L20.25,6.26L23,5L20.25,3.75M9,4L6.5,9.5L1,12L6.5,14.5L9,20L11.5,14.5L17,12L11.5,9.5M19,15L17.74,17.74L15,19L17.74,20.25L19,23L20.25,20.25L23,19L20.25,17.74\";\nvar mdiDotsHorizontal = \"M16,12A2,2 0 0,1 18,10A2,2 0 0,1 20,12A2,2 0 0,1 18,14A2,2 0 0,1 16,12M10,12A2,2 0 0,1 12,10A2,2 0 0,1 14,12A2,2 0 0,1 12,14A2,2 0 0,1 10,12M4,12A2,2 0 0,1 6,10A2,2 0 0,1 8,12A2,2 0 0,1 6,14A2,2 0 0,1 4,12Z\";\nvar mdiOpenInNew = \"M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V19Z\";\nvar mdiRadioboxBlank = \"M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\";\nvar mdiRadioboxMarked = \"M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,7A5,5 0 0,0 7,12A5,5 0 0,0 12,17A5,5 0 0,0 17,12A5,5 0 0,0 12,7Z\";\nvar mdiUndo = \"M12.5,8C9.85,8 7.45,9 5.6,10.6L2,7V16H11L7.38,12.38C8.77,11.22 10.54,10.5 12.5,10.5C16.04,10.5 19.05,12.81 20.1,16L22.47,15.22C21.08,11.03 17.15,8 12.5,8Z\";\nexport {\n mdiCheck as a,\n mdiUndo as b,\n mdiClose as c,\n mdiArrowRight as d,\n mdiContentCopy as e,\n mdiCreation as f,\n mdiRadioboxMarked as g,\n mdiRadioboxBlank as h,\n mdiCheckboxMarked as i,\n mdiCheckboxBlankOutline as j,\n mdiAlertCircleOutline as k,\n mdiCogOutline as l,\n mdiChevronRight as m,\n mdiCog as n,\n mdiOpenInNew as o,\n mdiArrowTopRight as p,\n mdiDotsHorizontal as q,\n mdiCloseCircleOutline as r,\n mdiArrowLeft as s,\n mdiChevronLeft as t\n};\n//# sourceMappingURL=mdi-DtJ8HsM-.mjs.map\n","import { a as mdiCheck, e as mdiContentCopy } from \"./mdi-DtJ8HsM-.mjs\";\nimport { toValue } from \"@vueuse/core\";\nimport { ref, computed } from \"vue\";\nimport { r as register, d as t21, a as t } from \"./_l10n-Dv1YKfKS.mjs\";\nregister(t21);\n/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nconst DELAY = 2e3;\nfunction useCopy(content) {\n const isCopied = ref(false);\n const icon = computed(() => isCopied.value ? mdiCheck : mdiContentCopy);\n const altText = computed(() => isCopied.value ? t(\"Copied\") : t(\"Copy to clipboard\"));\n async function copy() {\n if (isCopied.value) {\n return;\n }\n const value = toValue(content);\n try {\n await navigator.clipboard.writeText(value);\n } catch {\n prompt(\"\", value);\n }\n isCopied.value = true;\n setTimeout(() => {\n isCopied.value = false;\n }, DELAY);\n }\n return {\n isCopied,\n copy,\n icon,\n altText\n };\n}\nexport {\n useCopy as u\n};\n//# sourceMappingURL=useCopy-B3ugZOgV.mjs.map\n","import Vue, { getCurrentInstance, computed } from \"vue\";\nfunction useModelMigration(oldModelName, oldModelEvent, required = false) {\n const vm = getCurrentInstance().proxy;\n if (required && vm.$props[oldModelName] === void 0 && vm.$props.modelValue === void 0) {\n Vue.util.warn(`Missing required prop: \"modelValue\" or old \"${oldModelName}\"`);\n }\n const model = computed({\n get() {\n if (vm.$props[oldModelName] !== void 0) {\n return vm.$props[oldModelName];\n }\n return vm.$props.modelValue;\n },\n set(value) {\n vm.$emit(\"update:modelValue\", value);\n vm.$emit(\"update:model-value\", value);\n vm.$emit(oldModelEvent, value);\n }\n });\n return model;\n}\nexport {\n useModelMigration as u\n};\n//# sourceMappingURL=useModelMigration-EhAWvqDD.mjs.map\n","import { inject } from \"vue\";\nconst NC_FORM_BOX_CONTEXT_KEY = /* @__PURE__ */ Symbol.for(\"NcFormBox:context\");\nfunction useNcFormBox() {\n return inject(NC_FORM_BOX_CONTEXT_KEY, {\n isInFormBox: false,\n formBoxItemClass: void 0\n });\n}\nexport {\n NC_FORM_BOX_CONTEXT_KEY as N,\n useNcFormBox as u\n};\n//# sourceMappingURL=useNcFormBox-Djlh582y.mjs.map\n","import { inject } from \"vue\";\n/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nconst INSIDE_RADIO_GROUP_KEY = /* @__PURE__ */ Symbol.for(\"insideRadioGroup\");\nfunction useInsideRadioGroup() {\n return inject(INSIDE_RADIO_GROUP_KEY, void 0);\n}\nexport {\n INSIDE_RADIO_GROUP_KEY as I,\n useInsideRadioGroup as u\n};\n//# sourceMappingURL=useNcRadioGroup-D6llQmAl.mjs.map\n","import { toValue } from \"@vueuse/core\";\nimport { watch, onUnmounted } from \"vue\";\nimport { c as createTrapStackController } from \"./focusTrap-HJQ4pqHV.mjs\";\nfunction useTrapStackControl(shouldPause, options = {}) {\n const trapStackController = createTrapStackController();\n watch(shouldPause, () => {\n if (toValue(options.disabled)) {\n return;\n }\n if (toValue(shouldPause)) {\n trapStackController.pause();\n } else {\n trapStackController.unpause();\n }\n });\n onUnmounted(() => {\n trapStackController.unpause();\n });\n}\nexport {\n useTrapStackControl as u\n};\n//# sourceMappingURL=useTrapStackControl-BnLfCgGU.mjs.map\n","import { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nwindow._vue_richtext_widgets ??= {};\nwindow._registerWidget ??= (id, callback, onDestroy, props) => {\n registerWidget(id, callback, onDestroy, props);\n};\nfunction registerWidget(id, callback, onDestroy = () => {\n}, props) {\n const propsWithDefaults = {\n hasInteractiveView: true,\n fullWidth: false,\n isResizable: false,\n ...props\n };\n if (window._vue_richtext_widgets[id]) {\n logger.error(`[ReferencePicker]: Widget for id ${id} already registered`);\n return;\n }\n window._vue_richtext_widgets[id] = {\n id,\n callback,\n onDestroy,\n ...propsWithDefaults\n };\n}\nfunction renderWidget(el, options) {\n const { richObjectType, richObject, accessible, interactive } = options;\n if (richObjectType === \"open-graph\") {\n return;\n }\n if (!window._vue_richtext_widgets[richObjectType]) {\n logger.error(\"Widget for rich object type \" + richObjectType + \" not registered\");\n return;\n }\n window._vue_richtext_widgets[richObjectType].callback(el, { richObjectType, richObject, accessible, interactive });\n}\nfunction destroyWidget(richObjectType, el) {\n if (richObjectType === \"open-graph\") {\n return;\n }\n if (!window._vue_richtext_widgets[richObjectType]) {\n return;\n }\n window._vue_richtext_widgets[richObjectType].onDestroy(el);\n}\nfunction isWidgetRegistered(id) {\n return !!window._vue_richtext_widgets[id];\n}\nfunction hasInteractiveView(id) {\n return !!window._vue_richtext_widgets[id]?.hasInteractiveView;\n}\nfunction hasFullWidth(id) {\n return !!window._vue_richtext_widgets[id]?.fullWidth;\n}\nfunction isResizable(id) {\n return !!window._vue_richtext_widgets[id]?.isResizable;\n}\nexport {\n renderWidget as a,\n isResizable as b,\n hasFullWidth as c,\n destroyWidget as d,\n hasInteractiveView as h,\n isWidgetRegistered as i,\n registerWidget as r\n};\n//# sourceMappingURL=widgets-XxirL-2f.mjs.map\n","function loadState(app, key, fallback) {\n const elem = document.querySelector(`#initial-state-${app}-${key}`);\n if (elem === null) {\n if (fallback !== void 0) {\n return fallback;\n }\n throw new Error(`Could not find initial state ${key} of ${app}`);\n }\n try {\n return JSON.parse(atob(elem.value));\n } catch (e) {\n throw new Error(`Could not parse initial state ${key} of ${app}`);\n }\n}\nexport {\n loadState\n};\n","import Vue from 'vue'\nimport { getCurrentInstance } from 'vue'\n\nvar isVue2 = true\nvar isVue3 = false\nvar Vue2 = Vue\nvar warn = Vue.util.warn\n\nfunction install() {}\n\n// createApp polyfill\nexport function createApp(rootComponent, rootProps) {\n var vm\n var provide = {}\n var app = {\n config: Vue.config,\n use: Vue.use.bind(Vue),\n mixin: Vue.mixin.bind(Vue),\n component: Vue.component.bind(Vue),\n provide: function (key, value) {\n provide[key] = value\n return this\n },\n directive: function (name, dir) {\n if (dir) {\n Vue.directive(name, dir)\n return app\n } else {\n return Vue.directive(name)\n }\n },\n mount: function (el, hydrating) {\n if (!vm) {\n vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))\n vm.$mount(el, hydrating)\n return vm\n } else {\n return vm\n }\n },\n unmount: function () {\n if (vm) {\n vm.$destroy()\n vm = undefined\n }\n },\n }\n return app\n}\n\nexport {\n Vue,\n Vue2,\n isVue2,\n isVue3,\n install,\n warn\n}\n\n// Vue 3 components mock\nfunction createMockComponent(name) {\n return {\n setup() {\n throw new Error('[vue-demi] ' + name + ' is not supported in Vue 2. It\\'s provided to avoid compiler errors.')\n }\n }\n}\nexport var Fragment = /*#__PURE__*/ createMockComponent('Fragment')\nexport var Transition = /*#__PURE__*/ createMockComponent('Transition')\nexport var TransitionGroup = /*#__PURE__*/ createMockComponent('TransitionGroup')\nexport var Teleport = /*#__PURE__*/ createMockComponent('Teleport')\nexport var Suspense = /*#__PURE__*/ createMockComponent('Suspense')\nexport var KeepAlive = /*#__PURE__*/ createMockComponent('KeepAlive')\n\nexport * from 'vue'\n\n// Not implemented https://github.com/vuejs/core/pull/8111, falls back to getCurrentInstance()\nexport function hasInjectionContext() {\n return !!getCurrentInstance()\n}\n","import { onClickOutside as onClickOutside$1, useActiveElement, useBattery, useBrowserLocation, useClipboard, useDark, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDocumentVisibility, useStorage as useStorage$1, isClient as isClient$1, useDraggable, useElementBounding, useElementSize as useElementSize$1, useElementVisibility as useElementVisibility$1, useEyeDropper, useFullscreen, useGeolocation, useIdle, useMouse, useMouseInElement, useMousePressed, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, usePointer, usePointerLock, usePreferredColorScheme, usePreferredContrast, usePreferredDark as usePreferredDark$1, usePreferredLanguages, usePreferredReducedMotion, useTimeAgo, useTimestamp, useVirtualList, useWindowFocus, useWindowSize } from '@vueuse/core';\nimport { defineComponent, ref, h, watch, computed, reactive, getCurrentInstance, onMounted, isVue2, watchEffect, shallowRef, nextTick, toRefs } from 'vue-demi';\nimport { isClient, toValue, noop, isObject, tryOnScopeDispose, isIOS, directiveHooks, pausableWatch, tryOnMounted, toRef, useToggle, notNullish, promiseTimeout, until, useDebounceFn, useThrottleFn, tryOnUnmounted } from '@vueuse/shared';\n\nconst OnClickOutside = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"OnClickOutside\",\n props: [\"as\", \"options\"],\n emits: [\"trigger\"],\n setup(props, { slots, emit }) {\n const target = ref();\n onClickOutside$1(target, (e) => {\n emit(\"trigger\", e);\n }, props.options);\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default());\n };\n }\n});\n\nconst defaultWindow = isClient ? window : void 0;\n\nfunction unrefElement(elRef) {\n var _a;\n const plain = toValue(elRef);\n return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nfunction useEventListener(...args) {\n let target;\n let events;\n let listeners;\n let options;\n if (typeof args[0] === \"string\" || Array.isArray(args[0])) {\n [events, listeners, options] = args;\n target = defaultWindow;\n } else {\n [target, events, listeners, options] = args;\n }\n if (!target)\n return noop;\n if (!Array.isArray(events))\n events = [events];\n if (!Array.isArray(listeners))\n listeners = [listeners];\n const cleanups = [];\n const cleanup = () => {\n cleanups.forEach((fn) => fn());\n cleanups.length = 0;\n };\n const register = (el, event, listener, options2) => {\n el.addEventListener(event, listener, options2);\n return () => el.removeEventListener(event, listener, options2);\n };\n const stopWatch = watch(\n () => [unrefElement(target), toValue(options)],\n ([el, options2]) => {\n cleanup();\n if (!el)\n return;\n const optionsClone = isObject(options2) ? { ...options2 } : options2;\n cleanups.push(\n ...events.flatMap((event) => {\n return listeners.map((listener) => register(el, event, listener, optionsClone));\n })\n );\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n if (!window)\n return noop;\n if (isIOS && !_iOSWorkaround) {\n _iOSWorkaround = true;\n Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n window.document.documentElement.addEventListener(\"click\", noop);\n }\n let shouldListen = true;\n const shouldIgnore = (event) => {\n return toValue(ignore).some((target2) => {\n if (typeof target2 === \"string\") {\n return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n } else {\n const el = unrefElement(target2);\n return el && (event.target === el || event.composedPath().includes(el));\n }\n });\n };\n function hasMultipleRoots(target2) {\n const vm = toValue(target2);\n return vm && vm.$.subTree.shapeFlag === 16;\n }\n function checkMultipleRoots(target2, event) {\n const vm = toValue(target2);\n const children = vm.$.subTree && vm.$.subTree.children;\n if (children == null || !Array.isArray(children))\n return false;\n return children.some((child) => child.el === event.target || event.composedPath().includes(child.el));\n }\n const listener = (event) => {\n const el = unrefElement(target);\n if (event.target == null)\n return;\n if (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event))\n return;\n if (!el || el === event.target || event.composedPath().includes(el))\n return;\n if (event.detail === 0)\n shouldListen = !shouldIgnore(event);\n if (!shouldListen) {\n shouldListen = true;\n return;\n }\n handler(event);\n };\n let isProcessingClick = false;\n const cleanup = [\n useEventListener(window, \"click\", (event) => {\n if (!isProcessingClick) {\n isProcessingClick = true;\n setTimeout(() => {\n isProcessingClick = false;\n }, 0);\n listener(event);\n }\n }, { passive: true, capture }),\n useEventListener(window, \"pointerdown\", (e) => {\n const el = unrefElement(target);\n shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n }, { passive: true }),\n detectIframe && useEventListener(window, \"blur\", (event) => {\n setTimeout(() => {\n var _a;\n const el = unrefElement(target);\n if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement))) {\n handler(event);\n }\n }, 0);\n })\n ].filter(Boolean);\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nconst vOnClickOutside = {\n [directiveHooks.mounted](el, binding) {\n const capture = !binding.modifiers.bubble;\n if (typeof binding.value === \"function\") {\n el.__onClickOutside_stop = onClickOutside(el, binding.value, { capture });\n } else {\n const [handler, options] = binding.value;\n el.__onClickOutside_stop = onClickOutside(el, handler, Object.assign({ capture }, options));\n }\n },\n [directiveHooks.unmounted](el) {\n el.__onClickOutside_stop();\n }\n};\n\nfunction createKeyPredicate(keyFilter) {\n if (typeof keyFilter === \"function\")\n return keyFilter;\n else if (typeof keyFilter === \"string\")\n return (event) => event.key === keyFilter;\n else if (Array.isArray(keyFilter))\n return (event) => keyFilter.includes(event.key);\n return () => true;\n}\nfunction onKeyStroke(...args) {\n let key;\n let handler;\n let options = {};\n if (args.length === 3) {\n key = args[0];\n handler = args[1];\n options = args[2];\n } else if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n key = true;\n handler = args[0];\n options = args[1];\n } else {\n key = args[0];\n handler = args[1];\n }\n } else {\n key = true;\n handler = args[0];\n }\n const {\n target = defaultWindow,\n eventName = \"keydown\",\n passive = false,\n dedupe = false\n } = options;\n const predicate = createKeyPredicate(key);\n const listener = (e) => {\n if (e.repeat && toValue(dedupe))\n return;\n if (predicate(e))\n handler(e);\n };\n return useEventListener(target, eventName, listener, passive);\n}\n\nconst vOnKeyStroke = {\n [directiveHooks.mounted](el, binding) {\n var _a, _b;\n const keys = (_b = (_a = binding.arg) == null ? void 0 : _a.split(\",\")) != null ? _b : true;\n if (typeof binding.value === \"function\") {\n onKeyStroke(keys, binding.value, {\n target: el\n });\n } else {\n const [handler, options] = binding.value;\n onKeyStroke(keys, handler, {\n target: el,\n ...options\n });\n }\n }\n};\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n var _a, _b;\n const elementRef = computed(() => unrefElement(target));\n let timeout;\n let posStart;\n let startTimestamp;\n let hasLongPressed = false;\n function clear() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = void 0;\n }\n posStart = void 0;\n startTimestamp = void 0;\n hasLongPressed = false;\n }\n function onRelease(ev) {\n var _a2, _b2, _c;\n const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed];\n clear();\n if (!(options == null ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp)\n return;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - _posStart.x;\n const dy = ev.y - _posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\n }\n function onDown(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n clear();\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n posStart = {\n x: ev.x,\n y: ev.y\n };\n startTimestamp = ev.timeStamp;\n timeout = setTimeout(\n () => {\n hasLongPressed = true;\n handler(ev);\n },\n (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n );\n }\n function onMove(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - posStart.x;\n const dy = ev.y - posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n clear();\n }\n const listenerOptions = {\n capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n };\n const cleanup = [\n useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n ];\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nconst OnLongPress = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"OnLongPress\",\n props: [\"as\", \"options\"],\n emits: [\"trigger\"],\n setup(props, { slots, emit }) {\n const target = ref();\n onLongPress(\n target,\n (e) => {\n emit(\"trigger\", e);\n },\n props.options\n );\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default());\n };\n }\n});\n\nconst vOnLongPress = {\n [directiveHooks.mounted](el, binding) {\n if (typeof binding.value === \"function\")\n onLongPress(el, binding.value, { modifiers: binding.modifiers });\n else\n onLongPress(el, ...binding.value);\n }\n};\n\nconst UseActiveElement = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseActiveElement\",\n setup(props, { slots }) {\n const data = reactive({\n element: useActiveElement()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseBattery = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseBattery\",\n setup(props, { slots }) {\n const data = reactive(useBattery(props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseBrowserLocation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseBrowserLocation\",\n setup(props, { slots }) {\n const data = reactive(useBrowserLocation());\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseClipboard = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseClipboard\",\n props: [\n \"source\",\n \"read\",\n \"navigator\",\n \"copiedDuring\",\n \"legacy\"\n ],\n setup(props, { slots }) {\n const data = reactive(useClipboard(props));\n return () => {\n var _a;\n return (_a = slots.default) == null ? void 0 : _a.call(slots, data);\n };\n }\n});\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n if (!(globalKey in _global))\n _global[globalKey] = _global[globalKey] || {};\n return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n return handlers[key] || fallback;\n}\n\nfunction useMounted() {\n const isMounted = ref(false);\n const instance = getCurrentInstance();\n if (instance) {\n onMounted(() => {\n isMounted.value = true;\n }, isVue2 ? void 0 : instance);\n }\n return isMounted;\n}\n\nfunction useSupported(callback) {\n const isMounted = useMounted();\n return computed(() => {\n isMounted.value;\n return Boolean(callback());\n });\n}\n\nfunction useMediaQuery(query, options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n let mediaQuery;\n const matches = ref(false);\n const handler = (event) => {\n matches.value = event.matches;\n };\n const cleanup = () => {\n if (!mediaQuery)\n return;\n if (\"removeEventListener\" in mediaQuery)\n mediaQuery.removeEventListener(\"change\", handler);\n else\n mediaQuery.removeListener(handler);\n };\n const stopWatch = watchEffect(() => {\n if (!isSupported.value)\n return;\n cleanup();\n mediaQuery = window.matchMedia(toValue(query));\n if (\"addEventListener\" in mediaQuery)\n mediaQuery.addEventListener(\"change\", handler);\n else\n mediaQuery.addListener(handler);\n matches.value = mediaQuery.matches;\n });\n tryOnScopeDispose(() => {\n stopWatch();\n cleanup();\n mediaQuery = void 0;\n });\n return matches;\n}\n\nfunction usePreferredDark(options) {\n return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nfunction guessSerializerType(rawInit) {\n return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n boolean: {\n read: (v) => v === \"true\",\n write: (v) => String(v)\n },\n object: {\n read: (v) => JSON.parse(v),\n write: (v) => JSON.stringify(v)\n },\n number: {\n read: (v) => Number.parseFloat(v),\n write: (v) => String(v)\n },\n any: {\n read: (v) => v,\n write: (v) => String(v)\n },\n string: {\n read: (v) => v,\n write: (v) => String(v)\n },\n map: {\n read: (v) => new Map(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v.entries()))\n },\n set: {\n read: (v) => new Set(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v))\n },\n date: {\n read: (v) => new Date(v),\n write: (v) => v.toISOString()\n }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n },\n initOnMounted\n } = options;\n const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n if (!storage)\n return data;\n const rawInit = toValue(defaults);\n const type = guessSerializerType(rawInit);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n data,\n () => write(data.value),\n { flush, deep, eventFilter }\n );\n if (window && listenToStorageChanges) {\n tryOnMounted(() => {\n if (storage instanceof Storage)\n useEventListener(window, \"storage\", update);\n else\n useEventListener(window, customStorageEventName, updateFromCustomEvent);\n if (initOnMounted)\n update();\n });\n }\n if (!initOnMounted)\n update();\n function dispatchWriteEvent(oldValue, newValue) {\n if (window) {\n const payload = {\n key,\n oldValue,\n newValue,\n storageArea: storage\n };\n window.dispatchEvent(storage instanceof Storage ? new StorageEvent(\"storage\", payload) : new CustomEvent(customStorageEventName, {\n detail: payload\n }));\n }\n }\n function write(v) {\n try {\n const oldValue = storage.getItem(key);\n if (v == null) {\n dispatchWriteEvent(oldValue, null);\n storage.removeItem(key);\n } else {\n const serialized = serializer.write(v);\n if (oldValue !== serialized) {\n storage.setItem(key, serialized);\n dispatchWriteEvent(oldValue, serialized);\n }\n }\n } catch (e) {\n onError(e);\n }\n }\n function read(event) {\n const rawValue = event ? event.newValue : storage.getItem(key);\n if (rawValue == null) {\n if (writeDefaults && rawInit != null)\n storage.setItem(key, serializer.write(rawInit));\n return rawInit;\n } else if (!event && mergeDefaults) {\n const value = serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n return mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n return { ...rawInit, ...value };\n return value;\n } else if (typeof rawValue !== \"string\") {\n return rawValue;\n } else {\n return serializer.read(rawValue);\n }\n }\n function update(event) {\n if (event && event.storageArea !== storage)\n return;\n if (event && event.key == null) {\n data.value = rawInit;\n return;\n }\n if (event && event.key !== key)\n return;\n pauseWatch();\n try {\n if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n data.value = read(event);\n } catch (e) {\n onError(e);\n } finally {\n if (event)\n nextTick(resumeWatch);\n else\n resumeWatch();\n }\n }\n function updateFromCustomEvent(event) {\n update(event.detail);\n }\n return data;\n}\n\nconst CSS_DISABLE_TRANS = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\nfunction useColorMode(options = {}) {\n const {\n selector = \"html\",\n attribute = \"class\",\n initialValue = \"auto\",\n window = defaultWindow,\n storage,\n storageKey = \"vueuse-color-scheme\",\n listenToStorageChanges = true,\n storageRef,\n emitAuto,\n disableTransition = true\n } = options;\n const modes = {\n auto: \"\",\n light: \"light\",\n dark: \"dark\",\n ...options.modes || {}\n };\n const preferredDark = usePreferredDark({ window });\n const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n const updateHTMLAttrs = getSSRHandler(\n \"updateHTMLAttrs\",\n (selector2, attribute2, value) => {\n const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n if (!el)\n return;\n const classesToAdd = /* @__PURE__ */ new Set();\n const classesToRemove = /* @__PURE__ */ new Set();\n let attributeToChange = null;\n if (attribute2 === \"class\") {\n const current = value.split(/\\s/g);\n Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n if (current.includes(v))\n classesToAdd.add(v);\n else\n classesToRemove.add(v);\n });\n } else {\n attributeToChange = { key: attribute2, value };\n }\n if (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null)\n return;\n let style;\n if (disableTransition) {\n style = window.document.createElement(\"style\");\n style.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n window.document.head.appendChild(style);\n }\n for (const c of classesToAdd) {\n el.classList.add(c);\n }\n for (const c of classesToRemove) {\n el.classList.remove(c);\n }\n if (attributeToChange) {\n el.setAttribute(attributeToChange.key, attributeToChange.value);\n }\n if (disableTransition) {\n window.getComputedStyle(style).opacity;\n document.head.removeChild(style);\n }\n }\n );\n function defaultOnChanged(mode) {\n var _a;\n updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n }\n function onChanged(mode) {\n if (options.onChanged)\n options.onChanged(mode, defaultOnChanged);\n else\n defaultOnChanged(mode);\n }\n watch(state, onChanged, { flush: \"post\", immediate: true });\n tryOnMounted(() => onChanged(state.value));\n const auto = computed({\n get() {\n return emitAuto ? store.value : state.value;\n },\n set(v) {\n store.value = v;\n }\n });\n try {\n return Object.assign(auto, { store, system, state });\n } catch (e) {\n return auto;\n }\n}\n\nconst UseColorMode = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseColorMode\",\n props: [\"selector\", \"attribute\", \"modes\", \"onChanged\", \"storageKey\", \"storage\", \"emitAuto\"],\n setup(props, { slots }) {\n const mode = useColorMode(props);\n const data = reactive({\n mode,\n system: mode.system,\n store: mode.store\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDark = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDark\",\n props: [\"selector\", \"attribute\", \"valueDark\", \"valueLight\", \"onChanged\", \"storageKey\", \"storage\"],\n setup(props, { slots }) {\n const isDark = useDark(props);\n const data = reactive({\n isDark,\n toggleDark: useToggle(isDark)\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDeviceMotion = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDeviceMotion\",\n setup(props, { slots }) {\n const data = reactive(useDeviceMotion());\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDeviceOrientation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDeviceOrientation\",\n setup(props, { slots }) {\n const data = reactive(useDeviceOrientation());\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDevicePixelRatio = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDevicePixelRatio\",\n setup(props, { slots }) {\n const data = reactive({\n pixelRatio: useDevicePixelRatio()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDevicesList = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDevicesList\",\n props: [\"onUpdated\", \"requestPermissions\", \"constraints\"],\n setup(props, { slots }) {\n const data = reactive(useDevicesList(props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDocumentVisibility = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDocumentVisibility\",\n setup(props, { slots }) {\n const data = reactive({\n visibility: useDocumentVisibility()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDraggable = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDraggable\",\n props: [\n \"storageKey\",\n \"storageType\",\n \"initialValue\",\n \"exact\",\n \"preventDefault\",\n \"stopPropagation\",\n \"pointerTypes\",\n \"as\",\n \"handle\",\n \"axis\",\n \"onStart\",\n \"onMove\",\n \"onEnd\",\n \"disabled\",\n \"buttons\",\n \"containerElement\"\n ],\n setup(props, { slots }) {\n const target = ref();\n const handle = computed(() => {\n var _a;\n return (_a = props.handle) != null ? _a : target.value;\n });\n const containerElement = computed(() => {\n var _a;\n return (_a = props.containerElement) != null ? _a : void 0;\n });\n const disabled = computed(() => !!props.disabled);\n const storageValue = props.storageKey && useStorage$1(\n props.storageKey,\n toValue(props.initialValue) || { x: 0, y: 0 },\n isClient$1 ? props.storageType === \"session\" ? sessionStorage : localStorage : void 0\n );\n const initialValue = storageValue || props.initialValue || { x: 0, y: 0 };\n const onEnd = (position, event) => {\n var _a;\n (_a = props.onEnd) == null ? void 0 : _a.call(props, position, event);\n if (!storageValue)\n return;\n storageValue.value.x = position.x;\n storageValue.value.y = position.y;\n };\n const data = reactive(useDraggable(target, {\n ...props,\n handle,\n initialValue,\n onEnd,\n disabled,\n containerElement\n }));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target, style: `touch-action:none;${data.style}` }, slots.default(data));\n };\n }\n});\n\nconst UseElementBounding = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseElementBounding\",\n props: [\"box\", \"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(useElementBounding(target));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nfunction useElementHover(el, options = {}) {\n const {\n delayEnter = 0,\n delayLeave = 0,\n window = defaultWindow\n } = options;\n const isHovered = ref(false);\n let timer;\n const toggle = (entering) => {\n const delay = entering ? delayEnter : delayLeave;\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n }\n if (delay)\n timer = setTimeout(() => isHovered.value = entering, delay);\n else\n isHovered.value = entering;\n };\n if (!window)\n return isHovered;\n useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n return isHovered;\n}\n\nconst vElementHover = {\n [directiveHooks.mounted](el, binding) {\n const value = binding.value;\n if (typeof value === \"function\") {\n const isHovered = useElementHover(el);\n watch(isHovered, (v) => value(v));\n } else {\n const [handler, options] = value;\n const isHovered = useElementHover(el, options);\n watch(isHovered, (v) => handler(v));\n }\n }\n};\n\nconst UseElementSize = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseElementSize\",\n props: [\"width\", \"height\", \"box\", \"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(useElementSize$1(target, { width: props.width, height: props.height }, { box: props.box }));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nfunction useResizeObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...observerOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => {\n const _targets = toValue(target);\n return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];\n });\n const stopWatch = watch(\n targets,\n (els) => {\n cleanup();\n if (isSupported.value && window) {\n observer = new ResizeObserver(callback);\n for (const _el of els) {\n if (_el)\n observer.observe(_el, observerOptions);\n }\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n const { window = defaultWindow, box = \"content-box\" } = options;\n const isSVG = computed(() => {\n var _a, _b;\n return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n });\n const width = ref(initialSize.width);\n const height = ref(initialSize.height);\n const { stop: stop1 } = useResizeObserver(\n target,\n ([entry]) => {\n const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n if (window && isSVG.value) {\n const $elem = unrefElement(target);\n if ($elem) {\n const rect = $elem.getBoundingClientRect();\n width.value = rect.width;\n height.value = rect.height;\n }\n } else {\n if (boxSize) {\n const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n } else {\n width.value = entry.contentRect.width;\n height.value = entry.contentRect.height;\n }\n }\n },\n options\n );\n tryOnMounted(() => {\n const ele = unrefElement(target);\n if (ele) {\n width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n }\n });\n const stop2 = watch(\n () => unrefElement(target),\n (ele) => {\n width.value = ele ? initialSize.width : 0;\n height.value = ele ? initialSize.height : 0;\n }\n );\n function stop() {\n stop1();\n stop2();\n }\n return {\n width,\n height,\n stop\n };\n}\n\nconst vElementSize = {\n [directiveHooks.mounted](el, binding) {\n var _a;\n const handler = typeof binding.value === \"function\" ? binding.value : (_a = binding.value) == null ? void 0 : _a[0];\n const options = typeof binding.value === \"function\" ? [] : binding.value.slice(1);\n const { width, height } = useElementSize(el, ...options);\n watch([width, height], ([width2, height2]) => handler({ width: width2, height: height2 }));\n }\n};\n\nconst UseElementVisibility = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseElementVisibility\",\n props: [\"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive({\n isVisible: useElementVisibility$1(target)\n });\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n const {\n root,\n rootMargin = \"0px\",\n threshold = 0,\n window = defaultWindow,\n immediate = true\n } = options;\n const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n const targets = computed(() => {\n const _target = toValue(target);\n return (Array.isArray(_target) ? _target : [_target]).map(unrefElement).filter(notNullish);\n });\n let cleanup = noop;\n const isActive = ref(immediate);\n const stopWatch = isSupported.value ? watch(\n () => [targets.value, unrefElement(root), isActive.value],\n ([targets2, root2]) => {\n cleanup();\n if (!isActive.value)\n return;\n if (!targets2.length)\n return;\n const observer = new IntersectionObserver(\n callback,\n {\n root: unrefElement(root2),\n rootMargin,\n threshold\n }\n );\n targets2.forEach((el) => el && observer.observe(el));\n cleanup = () => {\n observer.disconnect();\n cleanup = noop;\n };\n },\n { immediate, flush: \"post\" }\n ) : noop;\n const stop = () => {\n cleanup();\n stopWatch();\n isActive.value = false;\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n isActive,\n pause() {\n cleanup();\n isActive.value = false;\n },\n resume() {\n isActive.value = true;\n },\n stop\n };\n}\n\nfunction useElementVisibility(element, options = {}) {\n const { window = defaultWindow, scrollTarget, threshold = 0 } = options;\n const elementIsVisible = ref(false);\n useIntersectionObserver(\n element,\n (intersectionObserverEntries) => {\n let isIntersecting = elementIsVisible.value;\n let latestTime = 0;\n for (const entry of intersectionObserverEntries) {\n if (entry.time >= latestTime) {\n latestTime = entry.time;\n isIntersecting = entry.isIntersecting;\n }\n }\n elementIsVisible.value = isIntersecting;\n },\n {\n root: scrollTarget,\n window,\n threshold\n }\n );\n return elementIsVisible;\n}\n\nconst vElementVisibility = {\n [directiveHooks.mounted](el, binding) {\n if (typeof binding.value === \"function\") {\n const handler = binding.value;\n const isVisible = useElementVisibility(el);\n watch(isVisible, (v) => handler(v), { immediate: true });\n } else {\n const [handler, options] = binding.value;\n const isVisible = useElementVisibility(el, options);\n watch(isVisible, (v) => handler(v), { immediate: true });\n }\n }\n};\n\nconst UseEyeDropper = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseEyeDropper\",\n props: {\n sRGBHex: String\n },\n setup(props, { slots }) {\n const data = reactive(useEyeDropper());\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseFullscreen = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseFullscreen\",\n props: [\"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(useFullscreen(target));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nconst UseGeolocation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseGeolocation\",\n props: [\"enableHighAccuracy\", \"maximumAge\", \"timeout\", \"navigator\"],\n setup(props, { slots }) {\n const data = reactive(useGeolocation(props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseIdle = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseIdle\",\n props: [\"timeout\", \"events\", \"listenForVisibilityChange\", \"initialState\"],\n setup(props, { slots }) {\n const data = reactive(useIdle(props.timeout, props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nfunction useAsyncState(promise, initialState, options) {\n const {\n immediate = true,\n delay = 0,\n onError = noop,\n onSuccess = noop,\n resetOnExecute = true,\n shallow = true,\n throwError\n } = options != null ? options : {};\n const state = shallow ? shallowRef(initialState) : ref(initialState);\n const isReady = ref(false);\n const isLoading = ref(false);\n const error = shallowRef(void 0);\n async function execute(delay2 = 0, ...args) {\n if (resetOnExecute)\n state.value = initialState;\n error.value = void 0;\n isReady.value = false;\n isLoading.value = true;\n if (delay2 > 0)\n await promiseTimeout(delay2);\n const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n try {\n const data = await _promise;\n state.value = data;\n isReady.value = true;\n onSuccess(data);\n } catch (e) {\n error.value = e;\n onError(e);\n if (throwError)\n throw e;\n } finally {\n isLoading.value = false;\n }\n return state.value;\n }\n if (immediate)\n execute(delay);\n const shell = {\n state,\n isReady,\n isLoading,\n error,\n execute\n };\n function waitUntilIsLoaded() {\n return new Promise((resolve, reject) => {\n until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n });\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilIsLoaded().then(onFulfilled, onRejected);\n }\n };\n}\n\nasync function loadImage(options) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy } = options;\n img.src = src;\n if (srcset)\n img.srcset = srcset;\n if (sizes)\n img.sizes = sizes;\n if (clazz)\n img.className = clazz;\n if (loading)\n img.loading = loading;\n if (crossorigin)\n img.crossOrigin = crossorigin;\n if (referrerPolicy)\n img.referrerPolicy = referrerPolicy;\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n const state = useAsyncState(\n () => loadImage(toValue(options)),\n void 0,\n {\n resetOnExecute: true,\n ...asyncStateOptions\n }\n );\n watch(\n () => toValue(options),\n () => state.execute(asyncStateOptions.delay),\n { deep: true }\n );\n return state;\n}\n\nconst UseImage = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseImage\",\n props: [\n \"src\",\n \"srcset\",\n \"sizes\",\n \"as\",\n \"alt\",\n \"class\",\n \"loading\",\n \"crossorigin\",\n \"referrerPolicy\"\n ],\n setup(props, { slots }) {\n const data = reactive(useImage(props));\n return () => {\n if (data.isLoading && slots.loading)\n return slots.loading(data);\n else if (data.error && slots.error)\n return slots.error(data.error);\n if (slots.default)\n return slots.default(data);\n return h(props.as || \"img\", props);\n };\n }\n});\n\nfunction resolveElement(el) {\n if (typeof Window !== \"undefined\" && el instanceof Window)\n return el.document.documentElement;\n if (typeof Document !== \"undefined\" && el instanceof Document)\n return el.documentElement;\n return el;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n const {\n throttle = 0,\n idle = 200,\n onStop = noop,\n onScroll = noop,\n offset = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n },\n eventListenerOptions = {\n capture: false,\n passive: true\n },\n behavior = \"auto\",\n window = defaultWindow,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const internalX = ref(0);\n const internalY = ref(0);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo(x2, void 0);\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo(void 0, y2);\n }\n });\n function scrollTo(_x, _y) {\n var _a, _b, _c, _d;\n if (!window)\n return;\n const _element = toValue(element);\n if (!_element)\n return;\n (_c = _element instanceof Document ? window.document.body : _element) == null ? void 0 : _c.scrollTo({\n top: (_a = toValue(_y)) != null ? _a : y.value,\n left: (_b = toValue(_x)) != null ? _b : x.value,\n behavior: toValue(behavior)\n });\n const scrollContainer = ((_d = _element == null ? void 0 : _element.document) == null ? void 0 : _d.documentElement) || (_element == null ? void 0 : _element.documentElement) || _element;\n if (x != null)\n internalX.value = scrollContainer.scrollLeft;\n if (y != null)\n internalY.value = scrollContainer.scrollTop;\n }\n const isScrolling = ref(false);\n const arrivedState = reactive({\n left: true,\n right: false,\n top: true,\n bottom: false\n });\n const directions = reactive({\n left: false,\n right: false,\n top: false,\n bottom: false\n });\n const onScrollEnd = (e) => {\n if (!isScrolling.value)\n return;\n isScrolling.value = false;\n directions.left = false;\n directions.right = false;\n directions.top = false;\n directions.bottom = false;\n onStop(e);\n };\n const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n const setArrivedState = (target) => {\n var _a;\n if (!window)\n return;\n const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(target);\n const { display, flexDirection } = getComputedStyle(el);\n const scrollLeft = el.scrollLeft;\n directions.left = scrollLeft < internalX.value;\n directions.right = scrollLeft > internalX.value;\n const left = Math.abs(scrollLeft) <= (offset.left || 0);\n const right = Math.abs(scrollLeft) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"row-reverse\") {\n arrivedState.left = right;\n arrivedState.right = left;\n } else {\n arrivedState.left = left;\n arrivedState.right = right;\n }\n internalX.value = scrollLeft;\n let scrollTop = el.scrollTop;\n if (target === window.document && !scrollTop)\n scrollTop = window.document.body.scrollTop;\n directions.top = scrollTop < internalY.value;\n directions.bottom = scrollTop > internalY.value;\n const top = Math.abs(scrollTop) <= (offset.top || 0);\n const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"column-reverse\") {\n arrivedState.top = bottom;\n arrivedState.bottom = top;\n } else {\n arrivedState.top = top;\n arrivedState.bottom = bottom;\n }\n internalY.value = scrollTop;\n };\n const onScrollHandler = (e) => {\n var _a;\n if (!window)\n return;\n const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n setArrivedState(eventTarget);\n isScrolling.value = true;\n onScrollEndDebounced(e);\n onScroll(e);\n };\n useEventListener(\n element,\n \"scroll\",\n throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n eventListenerOptions\n );\n tryOnMounted(() => {\n try {\n const _element = toValue(element);\n if (!_element)\n return;\n setArrivedState(_element);\n } catch (e) {\n onError(e);\n }\n });\n useEventListener(\n element,\n \"scrollend\",\n onScrollEnd,\n eventListenerOptions\n );\n return {\n x,\n y,\n isScrolling,\n arrivedState,\n directions,\n measure() {\n const _element = toValue(element);\n if (window && _element)\n setArrivedState(_element);\n }\n };\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n var _a;\n const {\n direction = \"bottom\",\n interval = 100,\n canLoadMore = () => true\n } = options;\n const state = reactive(useScroll(\n element,\n {\n ...options,\n offset: {\n [direction]: (_a = options.distance) != null ? _a : 0,\n ...options.offset\n }\n }\n ));\n const promise = ref();\n const isLoading = computed(() => !!promise.value);\n const observedElement = computed(() => {\n return resolveElement(toValue(element));\n });\n const isElementVisible = useElementVisibility(observedElement);\n function checkAndLoad() {\n state.measure();\n if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n return;\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n if (state.arrivedState[direction] || isNarrower) {\n if (!promise.value) {\n promise.value = Promise.all([\n onLoadMore(state),\n new Promise((resolve) => setTimeout(resolve, interval))\n ]).finally(() => {\n promise.value = null;\n nextTick(() => checkAndLoad());\n });\n }\n }\n }\n const stop = watch(\n () => [state.arrivedState[direction], isElementVisible.value],\n checkAndLoad,\n { immediate: true }\n );\n tryOnUnmounted(stop);\n return {\n isLoading,\n reset() {\n nextTick(() => checkAndLoad());\n }\n };\n}\n\nconst vInfiniteScroll = {\n [directiveHooks.mounted](el, binding) {\n if (typeof binding.value === \"function\")\n useInfiniteScroll(el, binding.value);\n else\n useInfiniteScroll(el, ...binding.value);\n }\n};\n\nconst vIntersectionObserver = {\n [directiveHooks.mounted](el, binding) {\n if (typeof binding.value === \"function\")\n useIntersectionObserver(el, binding.value);\n else\n useIntersectionObserver(el, ...binding.value);\n }\n};\n\nconst UseMouse = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseMouse\",\n props: [\"touch\", \"resetOnTouchEnds\", \"initialValue\"],\n setup(props, { slots }) {\n const data = reactive(useMouse(props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseMouseInElement = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseMouseElement\",\n props: [\"handleOutside\", \"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(useMouseInElement(target, props));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nconst UseMousePressed = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseMousePressed\",\n props: [\"touch\", \"initialValue\", \"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(useMousePressed({ ...props, target }));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nconst UseNetwork = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseNetwork\",\n setup(props, { slots }) {\n const data = reactive(useNetwork());\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseNow = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseNow\",\n props: [\"interval\"],\n setup(props, { slots }) {\n const data = reactive(useNow({ ...props, controls: true }));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseObjectUrl = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseObjectUrl\",\n props: [\n \"object\"\n ],\n setup(props, { slots }) {\n const object = toRef(props, \"object\");\n const url = useObjectUrl(object);\n return () => {\n if (slots.default && url.value)\n return slots.default(url);\n };\n }\n});\n\nconst UseOffsetPagination = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseOffsetPagination\",\n props: [\n \"total\",\n \"page\",\n \"pageSize\",\n \"onPageChange\",\n \"onPageSizeChange\",\n \"onPageCountChange\"\n ],\n emits: [\n \"page-change\",\n \"page-size-change\",\n \"page-count-change\"\n ],\n setup(props, { slots, emit }) {\n const data = reactive(useOffsetPagination({\n ...props,\n onPageChange(...args) {\n var _a;\n (_a = props.onPageChange) == null ? void 0 : _a.call(props, ...args);\n emit(\"page-change\", ...args);\n },\n onPageSizeChange(...args) {\n var _a;\n (_a = props.onPageSizeChange) == null ? void 0 : _a.call(props, ...args);\n emit(\"page-size-change\", ...args);\n },\n onPageCountChange(...args) {\n var _a;\n (_a = props.onPageCountChange) == null ? void 0 : _a.call(props, ...args);\n emit(\"page-count-change\", ...args);\n }\n }));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseOnline = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseOnline\",\n setup(props, { slots }) {\n const data = reactive({\n isOnline: useOnline()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePageLeave = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePageLeave\",\n setup(props, { slots }) {\n const data = reactive({\n isLeft: usePageLeave()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePointer = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePointer\",\n props: [\n \"pointerTypes\",\n \"initialValue\",\n \"target\"\n ],\n setup(props, { slots }) {\n const el = ref(null);\n const data = reactive(usePointer({\n ...props,\n target: props.target === \"self\" ? el : defaultWindow\n }));\n return () => {\n if (slots.default)\n return slots.default(data, { ref: el });\n };\n }\n});\n\nconst UsePointerLock = /* #__PURE__ */ defineComponent({\n name: \"UsePointerLock\",\n props: [\"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(usePointerLock(target));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nconst UsePreferredColorScheme = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePreferredColorScheme\",\n setup(props, { slots }) {\n const data = reactive({\n colorScheme: usePreferredColorScheme()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePreferredContrast = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePreferredContrast\",\n setup(props, { slots }) {\n const data = reactive({\n contrast: usePreferredContrast()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePreferredDark = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePreferredDark\",\n setup(props, { slots }) {\n const data = reactive({\n prefersDark: usePreferredDark$1()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePreferredLanguages = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePreferredLanguages\",\n setup(props, { slots }) {\n const data = reactive({\n languages: usePreferredLanguages()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePreferredReducedMotion = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePreferredReducedMotion\",\n setup(props, { slots }) {\n const data = reactive({\n motion: usePreferredReducedMotion()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst vResizeObserver = {\n [directiveHooks.mounted](el, binding) {\n if (typeof binding.value === \"function\")\n useResizeObserver(el, binding.value);\n else\n useResizeObserver(el, ...binding.value);\n }\n};\n\nfunction useMutationObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...mutationOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => {\n const value = toValue(target);\n const items = (Array.isArray(value) ? value : [value]).map(unrefElement).filter(notNullish);\n return new Set(items);\n });\n const stopWatch = watch(\n () => targets.value,\n (targets2) => {\n cleanup();\n if (isSupported.value && targets2.size) {\n observer = new MutationObserver(callback);\n targets2.forEach((el) => observer.observe(el, mutationOptions));\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const takeRecords = () => {\n return observer == null ? void 0 : observer.takeRecords();\n };\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop,\n takeRecords\n };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n const { window = defaultWindow, initialValue, observe = false } = options;\n const variable = ref(initialValue);\n const elRef = computed(() => {\n var _a;\n return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n });\n function updateCssVar() {\n var _a;\n const key = toValue(prop);\n const el = toValue(elRef);\n if (el && window && key) {\n const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n variable.value = value || initialValue;\n }\n }\n if (observe) {\n useMutationObserver(elRef, updateCssVar, {\n attributeFilter: [\"style\", \"class\"],\n window\n });\n }\n watch(\n [elRef, () => toValue(prop)],\n (_, old) => {\n if (old[0] && old[1])\n old[0].style.removeProperty(old[1]);\n updateCssVar();\n },\n { immediate: true }\n );\n watch(\n variable,\n (val) => {\n var _a;\n const raw_prop = toValue(prop);\n if (((_a = elRef.value) == null ? void 0 : _a.style) && raw_prop) {\n if (val == null)\n elRef.value.style.removeProperty(raw_prop);\n else\n elRef.value.style.setProperty(raw_prop, val);\n }\n }\n );\n return variable;\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n const top = ref(\"\");\n const right = ref(\"\");\n const bottom = ref(\"\");\n const left = ref(\"\");\n if (isClient) {\n const topCssVar = useCssVar(topVarName);\n const rightCssVar = useCssVar(rightVarName);\n const bottomCssVar = useCssVar(bottomVarName);\n const leftCssVar = useCssVar(leftVarName);\n topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n update();\n useEventListener(\"resize\", useDebounceFn(update));\n }\n function update() {\n top.value = getValue(topVarName);\n right.value = getValue(rightVarName);\n bottom.value = getValue(bottomVarName);\n left.value = getValue(leftVarName);\n }\n return {\n top,\n right,\n bottom,\n left,\n update\n };\n}\nfunction getValue(position) {\n return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nconst UseScreenSafeArea = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseScreenSafeArea\",\n props: {\n top: Boolean,\n right: Boolean,\n bottom: Boolean,\n left: Boolean\n },\n setup(props, { slots }) {\n const {\n top,\n right,\n bottom,\n left\n } = useScreenSafeArea();\n return () => {\n if (slots.default) {\n return h(\"div\", {\n style: {\n paddingTop: props.top ? top.value : \"\",\n paddingRight: props.right ? right.value : \"\",\n paddingBottom: props.bottom ? bottom.value : \"\",\n paddingLeft: props.left ? left.value : \"\",\n boxSizing: \"border-box\",\n maxHeight: \"100vh\",\n maxWidth: \"100vw\",\n overflow: \"auto\"\n }\n }, slots.default());\n }\n };\n }\n});\n\nconst vScroll = {\n [directiveHooks.mounted](el, binding) {\n if (typeof binding.value === \"function\") {\n const handler = binding.value;\n const state = useScroll(el, {\n onScroll() {\n handler(state);\n },\n onStop() {\n handler(state);\n }\n });\n } else {\n const [handler, options] = binding.value;\n const state = useScroll(el, {\n ...options,\n onScroll(e) {\n var _a;\n (_a = options.onScroll) == null ? void 0 : _a.call(options, e);\n handler(state);\n },\n onStop(e) {\n var _a;\n (_a = options.onStop) == null ? void 0 : _a.call(options, e);\n handler(state);\n }\n });\n }\n }\n};\n\nfunction checkOverflowScroll(ele) {\n const style = window.getComputedStyle(ele);\n if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n return true;\n } else {\n const parent = ele.parentNode;\n if (!parent || parent.tagName === \"BODY\")\n return false;\n return checkOverflowScroll(parent);\n }\n}\nfunction preventDefault(rawEvent) {\n const e = rawEvent || window.event;\n const _target = e.target;\n if (checkOverflowScroll(_target))\n return false;\n if (e.touches.length > 1)\n return true;\n if (e.preventDefault)\n e.preventDefault();\n return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n const isLocked = ref(initialState);\n let stopTouchMoveListener = null;\n let initialOverflow = \"\";\n watch(toRef(element), (el) => {\n const target = resolveElement(toValue(el));\n if (target) {\n const ele = target;\n if (!elInitialOverflow.get(ele))\n elInitialOverflow.set(ele, ele.style.overflow);\n if (ele.style.overflow !== \"hidden\")\n initialOverflow = ele.style.overflow;\n if (ele.style.overflow === \"hidden\")\n return isLocked.value = true;\n if (isLocked.value)\n return ele.style.overflow = \"hidden\";\n }\n }, {\n immediate: true\n });\n const lock = () => {\n const el = resolveElement(toValue(element));\n if (!el || isLocked.value)\n return;\n if (isIOS) {\n stopTouchMoveListener = useEventListener(\n el,\n \"touchmove\",\n (e) => {\n preventDefault(e);\n },\n { passive: false }\n );\n }\n el.style.overflow = \"hidden\";\n isLocked.value = true;\n };\n const unlock = () => {\n const el = resolveElement(toValue(element));\n if (!el || !isLocked.value)\n return;\n if (isIOS)\n stopTouchMoveListener == null ? void 0 : stopTouchMoveListener();\n el.style.overflow = initialOverflow;\n elInitialOverflow.delete(el);\n isLocked.value = false;\n };\n tryOnScopeDispose(unlock);\n return computed({\n get() {\n return isLocked.value;\n },\n set(v) {\n if (v)\n lock();\n else unlock();\n }\n });\n}\n\nfunction onScrollLock() {\n let isMounted = false;\n const state = ref(false);\n return (el, binding) => {\n state.value = binding.value;\n if (isMounted)\n return;\n isMounted = true;\n const isLocked = useScrollLock(el, binding.value);\n watch(state, (v) => isLocked.value = v);\n };\n}\nconst vScrollLock = onScrollLock();\n\nconst UseTimeAgo = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseTimeAgo\",\n props: [\"time\", \"updateInterval\", \"max\", \"fullDateFormatter\", \"messages\", \"showSecond\"],\n setup(props, { slots }) {\n const data = reactive(useTimeAgo(() => props.time, { ...props, controls: true }));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseTimestamp = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseTimestamp\",\n props: [\"immediate\", \"interval\", \"offset\"],\n setup(props, { slots }) {\n const data = reactive(useTimestamp({ ...props, controls: true }));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseVirtualList = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseVirtualList\",\n props: [\n \"list\",\n \"options\",\n \"height\"\n ],\n setup(props, { slots, expose }) {\n const { list: listRef } = toRefs(props);\n const { list, containerProps, wrapperProps, scrollTo } = useVirtualList(listRef, props.options);\n expose({ scrollTo });\n if (containerProps.style && typeof containerProps.style === \"object\" && !Array.isArray(containerProps.style))\n containerProps.style.height = props.height || \"300px\";\n return () => h(\"div\", { ...containerProps }, [\n h(\"div\", { ...wrapperProps.value }, list.value.map((item) => h(\"div\", { style: { overflow: \"hidden\", height: item.height } }, slots.default ? slots.default(item) : \"Please set content!\")))\n ]);\n }\n});\n\nconst UseWindowFocus = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseWindowFocus\",\n setup(props, { slots }) {\n const data = reactive({\n focused: useWindowFocus()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseWindowSize = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseWindowSize\",\n props: [\"initialWidth\", \"initialHeight\"],\n setup(props, { slots }) {\n const data = reactive(useWindowSize(props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nexport { OnClickOutside, OnLongPress, UseActiveElement, UseBattery, UseBrowserLocation, UseClipboard, UseColorMode, UseDark, UseDeviceMotion, UseDeviceOrientation, UseDevicePixelRatio, UseDevicesList, UseDocumentVisibility, UseDraggable, UseElementBounding, UseElementSize, UseElementVisibility, UseEyeDropper, UseFullscreen, UseGeolocation, UseIdle, UseImage, UseMouse, UseMouseInElement, UseMousePressed, UseNetwork, UseNow, UseObjectUrl, UseOffsetPagination, UseOnline, UsePageLeave, UsePointer, UsePointerLock, UsePreferredColorScheme, UsePreferredContrast, UsePreferredDark, UsePreferredLanguages, UsePreferredReducedMotion, UseScreenSafeArea, UseTimeAgo, UseTimestamp, UseVirtualList, UseWindowFocus, UseWindowSize, vOnClickOutside as VOnClickOutside, vOnLongPress as VOnLongPress, vElementHover, vElementSize, vElementVisibility, vInfiniteScroll, vIntersectionObserver, vOnClickOutside, vOnKeyStroke, vOnLongPress, vResizeObserver, vScroll, vScrollLock };\n","import Vue from 'vue'\nimport { getCurrentInstance } from 'vue'\n\nvar isVue2 = true\nvar isVue3 = false\nvar Vue2 = Vue\nvar warn = Vue.util.warn\n\nfunction install() {}\n\n// createApp polyfill\nexport function createApp(rootComponent, rootProps) {\n var vm\n var provide = {}\n var app = {\n config: Vue.config,\n use: Vue.use.bind(Vue),\n mixin: Vue.mixin.bind(Vue),\n component: Vue.component.bind(Vue),\n provide: function (key, value) {\n provide[key] = value\n return this\n },\n directive: function (name, dir) {\n if (dir) {\n Vue.directive(name, dir)\n return app\n } else {\n return Vue.directive(name)\n }\n },\n mount: function (el, hydrating) {\n if (!vm) {\n vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))\n vm.$mount(el, hydrating)\n return vm\n } else {\n return vm\n }\n },\n unmount: function () {\n if (vm) {\n vm.$destroy()\n vm = undefined\n }\n },\n }\n return app\n}\n\nexport {\n Vue,\n Vue2,\n isVue2,\n isVue3,\n install,\n warn\n}\n\n// Vue 3 components mock\nfunction createMockComponent(name) {\n return {\n setup() {\n throw new Error('[vue-demi] ' + name + ' is not supported in Vue 2. It\\'s provided to avoid compiler errors.')\n }\n }\n}\nexport var Fragment = /*#__PURE__*/ createMockComponent('Fragment')\nexport var Transition = /*#__PURE__*/ createMockComponent('Transition')\nexport var TransitionGroup = /*#__PURE__*/ createMockComponent('TransitionGroup')\nexport var Teleport = /*#__PURE__*/ createMockComponent('Teleport')\nexport var Suspense = /*#__PURE__*/ createMockComponent('Suspense')\nexport var KeepAlive = /*#__PURE__*/ createMockComponent('KeepAlive')\n\nexport * from 'vue'\n\n// Not implemented https://github.com/vuejs/core/pull/8111, falls back to getCurrentInstance()\nexport function hasInjectionContext() {\n return !!getCurrentInstance()\n}\n","import { noop, makeDestructurable, camelize, toValue, isClient, isObject, tryOnScopeDispose, isIOS, tryOnMounted, notNullish, objectOmit, promiseTimeout, until, increaseWithUnit, objectEntries, createSingletonPromise, useTimeoutFn, pausableWatch, toRef, createEventHook, computedWithControl, timestamp, pausableFilter, watchIgnorable, debounceFilter, createFilterWrapper, bypassFilter, toRefs, useIntervalFn, containsProp, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, tryOnUnmounted, clamp, syncRef, objectPick, watchWithFilter, tryOnBeforeUnmount, identity, isDef, whenever, isWorker } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, ref, shallowRef, watchEffect, computed, inject, isVue3, version, defineComponent, h, TransitionGroup, shallowReactive, Fragment, watch, getCurrentInstance, customRef, onUpdated, onMounted, isVue2, readonly, reactive, toRaw, nextTick, markRaw, unref, getCurrentScope, set, del, isReadonly, onBeforeUpdate } from 'vue-demi';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n let options;\n if (isRef(optionsOrRef)) {\n options = {\n evaluating: optionsOrRef\n };\n } else {\n options = optionsOrRef || {};\n }\n const {\n lazy = false,\n evaluating = void 0,\n shallow = true,\n onError = noop\n } = options;\n const started = ref(!lazy);\n const current = shallow ? shallowRef(initialState) : ref(initialState);\n let counter = 0;\n watchEffect(async (onInvalidate) => {\n if (!started.value)\n return;\n counter++;\n const counterAtBeginning = counter;\n let hasFinished = false;\n if (evaluating) {\n Promise.resolve().then(() => {\n evaluating.value = true;\n });\n }\n try {\n const result = await evaluationCallback((cancelCallback) => {\n onInvalidate(() => {\n if (evaluating)\n evaluating.value = false;\n if (!hasFinished)\n cancelCallback();\n });\n });\n if (counterAtBeginning === counter)\n current.value = result;\n } catch (e) {\n onError(e);\n } finally {\n if (evaluating && counterAtBeginning === counter)\n evaluating.value = false;\n hasFinished = true;\n }\n });\n if (lazy) {\n return computed(() => {\n started.value = true;\n return current.value;\n });\n } else {\n return current;\n }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n let source = inject(key);\n if (defaultSource)\n source = inject(key, defaultSource);\n if (treatDefaultAsFactory)\n source = inject(key, defaultSource, treatDefaultAsFactory);\n if (typeof options === \"function\") {\n return computed((ctx) => options(source, ctx));\n } else {\n return computed({\n get: (ctx) => options.get(source, ctx),\n set: options.set\n });\n }\n}\n\nfunction createReusableTemplate(options = {}) {\n if (!isVue3 && !version.startsWith(\"2.7.\")) {\n if (process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] createReusableTemplate only works in Vue 2.7 or above.\");\n return;\n }\n const {\n inheritAttrs = true\n } = options;\n const render = shallowRef();\n const define = /* #__PURE__ */ defineComponent({\n setup(_, { slots }) {\n return () => {\n render.value = slots.default;\n };\n }\n });\n const reuse = /* #__PURE__ */ defineComponent({\n inheritAttrs,\n setup(_, { attrs, slots }) {\n return () => {\n var _a;\n if (!render.value && process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n const vnode = (_a = render.value) == null ? void 0 : _a.call(render, { ...keysToCamelKebabCase(attrs), $slots: slots });\n return inheritAttrs && (vnode == null ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n };\n }\n });\n return makeDestructurable(\n { define, reuse },\n [define, reuse]\n );\n}\nfunction keysToCamelKebabCase(obj) {\n const newObj = {};\n for (const key in obj)\n newObj[camelize(key)] = obj[key];\n return newObj;\n}\n\nfunction createTemplatePromise(options = {}) {\n if (!isVue3) {\n if (process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] createTemplatePromise only works in Vue 3 or above.\");\n return;\n }\n let index = 0;\n const instances = ref([]);\n function create(...args) {\n const props = shallowReactive({\n key: index++,\n args,\n promise: void 0,\n resolve: () => {\n },\n reject: () => {\n },\n isResolving: false,\n options\n });\n instances.value.push(props);\n props.promise = new Promise((_resolve, _reject) => {\n props.resolve = (v) => {\n props.isResolving = true;\n return _resolve(v);\n };\n props.reject = _reject;\n }).finally(() => {\n props.promise = void 0;\n const index2 = instances.value.indexOf(props);\n if (index2 !== -1)\n instances.value.splice(index2, 1);\n });\n return props.promise;\n }\n function start(...args) {\n if (options.singleton && instances.value.length > 0)\n return instances.value[0].promise;\n return create(...args);\n }\n const component = /* #__PURE__ */ defineComponent((_, { slots }) => {\n const renderList = () => instances.value.map((props) => {\n var _a;\n return h(Fragment, { key: props.key }, (_a = slots.default) == null ? void 0 : _a.call(slots, props));\n });\n if (options.transition)\n return () => h(TransitionGroup, options.transition, renderList);\n return renderList;\n });\n component.start = start;\n return component;\n}\n\nfunction createUnrefFn(fn) {\n return function(...args) {\n return fn.apply(this, args.map((i) => toValue(i)));\n };\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction unrefElement(elRef) {\n var _a;\n const plain = toValue(elRef);\n return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nfunction useEventListener(...args) {\n let target;\n let events;\n let listeners;\n let options;\n if (typeof args[0] === \"string\" || Array.isArray(args[0])) {\n [events, listeners, options] = args;\n target = defaultWindow;\n } else {\n [target, events, listeners, options] = args;\n }\n if (!target)\n return noop;\n if (!Array.isArray(events))\n events = [events];\n if (!Array.isArray(listeners))\n listeners = [listeners];\n const cleanups = [];\n const cleanup = () => {\n cleanups.forEach((fn) => fn());\n cleanups.length = 0;\n };\n const register = (el, event, listener, options2) => {\n el.addEventListener(event, listener, options2);\n return () => el.removeEventListener(event, listener, options2);\n };\n const stopWatch = watch(\n () => [unrefElement(target), toValue(options)],\n ([el, options2]) => {\n cleanup();\n if (!el)\n return;\n const optionsClone = isObject(options2) ? { ...options2 } : options2;\n cleanups.push(\n ...events.flatMap((event) => {\n return listeners.map((listener) => register(el, event, listener, optionsClone));\n })\n );\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n if (!window)\n return noop;\n if (isIOS && !_iOSWorkaround) {\n _iOSWorkaround = true;\n Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n window.document.documentElement.addEventListener(\"click\", noop);\n }\n let shouldListen = true;\n const shouldIgnore = (event) => {\n return toValue(ignore).some((target2) => {\n if (typeof target2 === \"string\") {\n return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n } else {\n const el = unrefElement(target2);\n return el && (event.target === el || event.composedPath().includes(el));\n }\n });\n };\n function hasMultipleRoots(target2) {\n const vm = toValue(target2);\n return vm && vm.$.subTree.shapeFlag === 16;\n }\n function checkMultipleRoots(target2, event) {\n const vm = toValue(target2);\n const children = vm.$.subTree && vm.$.subTree.children;\n if (children == null || !Array.isArray(children))\n return false;\n return children.some((child) => child.el === event.target || event.composedPath().includes(child.el));\n }\n const listener = (event) => {\n const el = unrefElement(target);\n if (event.target == null)\n return;\n if (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event))\n return;\n if (!el || el === event.target || event.composedPath().includes(el))\n return;\n if (event.detail === 0)\n shouldListen = !shouldIgnore(event);\n if (!shouldListen) {\n shouldListen = true;\n return;\n }\n handler(event);\n };\n let isProcessingClick = false;\n const cleanup = [\n useEventListener(window, \"click\", (event) => {\n if (!isProcessingClick) {\n isProcessingClick = true;\n setTimeout(() => {\n isProcessingClick = false;\n }, 0);\n listener(event);\n }\n }, { passive: true, capture }),\n useEventListener(window, \"pointerdown\", (e) => {\n const el = unrefElement(target);\n shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n }, { passive: true }),\n detectIframe && useEventListener(window, \"blur\", (event) => {\n setTimeout(() => {\n var _a;\n const el = unrefElement(target);\n if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement))) {\n handler(event);\n }\n }, 0);\n })\n ].filter(Boolean);\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nfunction createKeyPredicate(keyFilter) {\n if (typeof keyFilter === \"function\")\n return keyFilter;\n else if (typeof keyFilter === \"string\")\n return (event) => event.key === keyFilter;\n else if (Array.isArray(keyFilter))\n return (event) => keyFilter.includes(event.key);\n return () => true;\n}\nfunction onKeyStroke(...args) {\n let key;\n let handler;\n let options = {};\n if (args.length === 3) {\n key = args[0];\n handler = args[1];\n options = args[2];\n } else if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n key = true;\n handler = args[0];\n options = args[1];\n } else {\n key = args[0];\n handler = args[1];\n }\n } else {\n key = true;\n handler = args[0];\n }\n const {\n target = defaultWindow,\n eventName = \"keydown\",\n passive = false,\n dedupe = false\n } = options;\n const predicate = createKeyPredicate(key);\n const listener = (e) => {\n if (e.repeat && toValue(dedupe))\n return;\n if (predicate(e))\n handler(e);\n };\n return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keydown\" });\n}\nfunction onKeyPressed(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keypress\" });\n}\nfunction onKeyUp(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keyup\" });\n}\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n var _a, _b;\n const elementRef = computed(() => unrefElement(target));\n let timeout;\n let posStart;\n let startTimestamp;\n let hasLongPressed = false;\n function clear() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = void 0;\n }\n posStart = void 0;\n startTimestamp = void 0;\n hasLongPressed = false;\n }\n function onRelease(ev) {\n var _a2, _b2, _c;\n const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed];\n clear();\n if (!(options == null ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp)\n return;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - _posStart.x;\n const dy = ev.y - _posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\n }\n function onDown(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n clear();\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n posStart = {\n x: ev.x,\n y: ev.y\n };\n startTimestamp = ev.timeStamp;\n timeout = setTimeout(\n () => {\n hasLongPressed = true;\n handler(ev);\n },\n (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n );\n }\n function onMove(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - posStart.x;\n const dy = ev.y - posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n clear();\n }\n const listenerOptions = {\n capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n };\n const cleanup = [\n useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n ];\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nfunction isFocusedElementEditable() {\n const { activeElement, body } = document;\n if (!activeElement)\n return false;\n if (activeElement === body)\n return false;\n switch (activeElement.tagName) {\n case \"INPUT\":\n case \"TEXTAREA\":\n return true;\n }\n return activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({\n keyCode,\n metaKey,\n ctrlKey,\n altKey\n}) {\n if (metaKey || ctrlKey || altKey)\n return false;\n if (keyCode >= 48 && keyCode <= 57)\n return true;\n if (keyCode >= 65 && keyCode <= 90)\n return true;\n if (keyCode >= 97 && keyCode <= 122)\n return true;\n return false;\n}\nfunction onStartTyping(callback, options = {}) {\n const { document: document2 = defaultDocument } = options;\n const keydown = (event) => {\n if (!isFocusedElementEditable() && isTypedCharValid(event)) {\n callback(event);\n }\n };\n if (document2)\n useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n const instance = getCurrentInstance();\n let _trigger = () => {\n };\n const element = customRef((track, trigger) => {\n _trigger = trigger;\n return {\n get() {\n var _a, _b;\n track();\n return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n },\n set() {\n }\n };\n });\n tryOnMounted(_trigger);\n onUpdated(_trigger);\n return element;\n}\n\nfunction useMounted() {\n const isMounted = ref(false);\n const instance = getCurrentInstance();\n if (instance) {\n onMounted(() => {\n isMounted.value = true;\n }, isVue2 ? void 0 : instance);\n }\n return isMounted;\n}\n\nfunction useSupported(callback) {\n const isMounted = useMounted();\n return computed(() => {\n isMounted.value;\n return Boolean(callback());\n });\n}\n\nfunction useMutationObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...mutationOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => {\n const value = toValue(target);\n const items = (Array.isArray(value) ? value : [value]).map(unrefElement).filter(notNullish);\n return new Set(items);\n });\n const stopWatch = watch(\n () => targets.value,\n (targets2) => {\n cleanup();\n if (isSupported.value && targets2.size) {\n observer = new MutationObserver(callback);\n targets2.forEach((el) => observer.observe(el, mutationOptions));\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const takeRecords = () => {\n return observer == null ? void 0 : observer.takeRecords();\n };\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop,\n takeRecords\n };\n}\n\nfunction useActiveElement(options = {}) {\n var _a;\n const {\n window = defaultWindow,\n deep = true,\n triggerOnRemoval = false\n } = options;\n const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n const getDeepActiveElement = () => {\n var _a2;\n let element = document == null ? void 0 : document.activeElement;\n if (deep) {\n while (element == null ? void 0 : element.shadowRoot)\n element = (_a2 = element == null ? void 0 : element.shadowRoot) == null ? void 0 : _a2.activeElement;\n }\n return element;\n };\n const activeElement = ref();\n const trigger = () => {\n activeElement.value = getDeepActiveElement();\n };\n if (window) {\n useEventListener(window, \"blur\", (event) => {\n if (event.relatedTarget !== null)\n return;\n trigger();\n }, true);\n useEventListener(window, \"focus\", trigger, true);\n }\n if (triggerOnRemoval) {\n useMutationObserver(document, (mutations) => {\n mutations.filter((m) => m.removedNodes.length).map((n) => Array.from(n.removedNodes)).flat().forEach((node) => {\n if (node === activeElement.value)\n trigger();\n });\n }, {\n childList: true,\n subtree: true\n });\n }\n trigger();\n return activeElement;\n}\n\nfunction useRafFn(fn, options = {}) {\n const {\n immediate = true,\n fpsLimit = void 0,\n window = defaultWindow\n } = options;\n const isActive = ref(false);\n const intervalLimit = fpsLimit ? 1e3 / fpsLimit : null;\n let previousFrameTimestamp = 0;\n let rafId = null;\n function loop(timestamp) {\n if (!isActive.value || !window)\n return;\n if (!previousFrameTimestamp)\n previousFrameTimestamp = timestamp;\n const delta = timestamp - previousFrameTimestamp;\n if (intervalLimit && delta < intervalLimit) {\n rafId = window.requestAnimationFrame(loop);\n return;\n }\n previousFrameTimestamp = timestamp;\n fn({ delta, timestamp });\n rafId = window.requestAnimationFrame(loop);\n }\n function resume() {\n if (!isActive.value && window) {\n isActive.value = true;\n previousFrameTimestamp = 0;\n rafId = window.requestAnimationFrame(loop);\n }\n }\n function pause() {\n isActive.value = false;\n if (rafId != null && window) {\n window.cancelAnimationFrame(rafId);\n rafId = null;\n }\n }\n if (immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive: readonly(isActive),\n pause,\n resume\n };\n}\n\nfunction useAnimate(target, keyframes, options) {\n let config;\n let animateOptions;\n if (isObject(options)) {\n config = options;\n animateOptions = objectOmit(options, [\"window\", \"immediate\", \"commitStyles\", \"persist\", \"onReady\", \"onError\"]);\n } else {\n config = { duration: options };\n animateOptions = options;\n }\n const {\n window = defaultWindow,\n immediate = true,\n commitStyles,\n persist,\n playbackRate: _playbackRate = 1,\n onReady,\n onError = (e) => {\n console.error(e);\n }\n } = config;\n const isSupported = useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n const animate = shallowRef(void 0);\n const store = shallowReactive({\n startTime: null,\n currentTime: null,\n timeline: null,\n playbackRate: _playbackRate,\n pending: false,\n playState: immediate ? \"idle\" : \"paused\",\n replaceState: \"active\"\n });\n const pending = computed(() => store.pending);\n const playState = computed(() => store.playState);\n const replaceState = computed(() => store.replaceState);\n const startTime = computed({\n get() {\n return store.startTime;\n },\n set(value) {\n store.startTime = value;\n if (animate.value)\n animate.value.startTime = value;\n }\n });\n const currentTime = computed({\n get() {\n return store.currentTime;\n },\n set(value) {\n store.currentTime = value;\n if (animate.value) {\n animate.value.currentTime = value;\n syncResume();\n }\n }\n });\n const timeline = computed({\n get() {\n return store.timeline;\n },\n set(value) {\n store.timeline = value;\n if (animate.value)\n animate.value.timeline = value;\n }\n });\n const playbackRate = computed({\n get() {\n return store.playbackRate;\n },\n set(value) {\n store.playbackRate = value;\n if (animate.value)\n animate.value.playbackRate = value;\n }\n });\n const play = () => {\n if (animate.value) {\n try {\n animate.value.play();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n } else {\n update();\n }\n };\n const pause = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.pause();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const reverse = () => {\n var _a;\n if (!animate.value)\n update();\n try {\n (_a = animate.value) == null ? void 0 : _a.reverse();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n };\n const finish = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.finish();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const cancel = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.cancel();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n watch(() => unrefElement(target), (el) => {\n if (el)\n update();\n });\n watch(() => keyframes, (value) => {\n if (animate.value)\n update();\n if (!unrefElement(target) && animate.value) {\n animate.value.effect = new KeyframeEffect(\n unrefElement(target),\n toValue(value),\n animateOptions\n );\n }\n }, { deep: true });\n tryOnMounted(() => update(true), false);\n tryOnScopeDispose(cancel);\n function update(init) {\n const el = unrefElement(target);\n if (!isSupported.value || !el)\n return;\n if (!animate.value)\n animate.value = el.animate(toValue(keyframes), animateOptions);\n if (persist)\n animate.value.persist();\n if (_playbackRate !== 1)\n animate.value.playbackRate = _playbackRate;\n if (init && !immediate)\n animate.value.pause();\n else\n syncResume();\n onReady == null ? void 0 : onReady(animate.value);\n }\n useEventListener(animate, [\"cancel\", \"finish\", \"remove\"], syncPause);\n useEventListener(animate, \"finish\", () => {\n var _a;\n if (commitStyles)\n (_a = animate.value) == null ? void 0 : _a.commitStyles();\n });\n const { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n if (!animate.value)\n return;\n store.pending = animate.value.pending;\n store.playState = animate.value.playState;\n store.replaceState = animate.value.replaceState;\n store.startTime = animate.value.startTime;\n store.currentTime = animate.value.currentTime;\n store.timeline = animate.value.timeline;\n store.playbackRate = animate.value.playbackRate;\n }, { immediate: false });\n function syncResume() {\n if (isSupported.value)\n resumeRef();\n }\n function syncPause() {\n if (isSupported.value && window)\n window.requestAnimationFrame(pauseRef);\n }\n return {\n isSupported,\n animate,\n // actions\n play,\n pause,\n reverse,\n finish,\n cancel,\n // state\n pending,\n playState,\n replaceState,\n startTime,\n currentTime,\n timeline,\n playbackRate\n };\n}\n\nfunction useAsyncQueue(tasks, options) {\n const {\n interrupt = true,\n onError = noop,\n onFinished = noop,\n signal\n } = options || {};\n const promiseState = {\n aborted: \"aborted\",\n fulfilled: \"fulfilled\",\n pending: \"pending\",\n rejected: \"rejected\"\n };\n const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null }));\n const result = reactive(initialResult);\n const activeIndex = ref(-1);\n if (!tasks || tasks.length === 0) {\n onFinished();\n return {\n activeIndex,\n result\n };\n }\n function updateResult(state, res) {\n activeIndex.value++;\n result[activeIndex.value].data = res;\n result[activeIndex.value].state = state;\n }\n tasks.reduce((prev, curr) => {\n return prev.then((prevRes) => {\n var _a;\n if (signal == null ? void 0 : signal.aborted) {\n updateResult(promiseState.aborted, new Error(\"aborted\"));\n return;\n }\n if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n onFinished();\n return;\n }\n const done = curr(prevRes).then((currentRes) => {\n updateResult(promiseState.fulfilled, currentRes);\n if (activeIndex.value === tasks.length - 1)\n onFinished();\n return currentRes;\n });\n if (!signal)\n return done;\n return Promise.race([done, whenAborted(signal)]);\n }).catch((e) => {\n if (signal == null ? void 0 : signal.aborted) {\n updateResult(promiseState.aborted, e);\n return e;\n }\n updateResult(promiseState.rejected, e);\n onError();\n return e;\n });\n }, Promise.resolve());\n return {\n activeIndex,\n result\n };\n}\nfunction whenAborted(signal) {\n return new Promise((resolve, reject) => {\n const error = new Error(\"aborted\");\n if (signal.aborted)\n reject(error);\n else\n signal.addEventListener(\"abort\", () => reject(error), { once: true });\n });\n}\n\nfunction useAsyncState(promise, initialState, options) {\n const {\n immediate = true,\n delay = 0,\n onError = noop,\n onSuccess = noop,\n resetOnExecute = true,\n shallow = true,\n throwError\n } = options != null ? options : {};\n const state = shallow ? shallowRef(initialState) : ref(initialState);\n const isReady = ref(false);\n const isLoading = ref(false);\n const error = shallowRef(void 0);\n async function execute(delay2 = 0, ...args) {\n if (resetOnExecute)\n state.value = initialState;\n error.value = void 0;\n isReady.value = false;\n isLoading.value = true;\n if (delay2 > 0)\n await promiseTimeout(delay2);\n const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n try {\n const data = await _promise;\n state.value = data;\n isReady.value = true;\n onSuccess(data);\n } catch (e) {\n error.value = e;\n onError(e);\n if (throwError)\n throw e;\n } finally {\n isLoading.value = false;\n }\n return state.value;\n }\n if (immediate)\n execute(delay);\n const shell = {\n state,\n isReady,\n isLoading,\n error,\n execute\n };\n function waitUntilIsLoaded() {\n return new Promise((resolve, reject) => {\n until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n });\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilIsLoaded().then(onFulfilled, onRejected);\n }\n };\n}\n\nconst defaults = {\n array: (v) => JSON.stringify(v),\n object: (v) => JSON.stringify(v),\n set: (v) => JSON.stringify(Array.from(v)),\n map: (v) => JSON.stringify(Object.fromEntries(v)),\n null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n if (!target)\n return defaults.null;\n if (target instanceof Map)\n return defaults.map;\n else if (target instanceof Set)\n return defaults.set;\n else if (Array.isArray(target))\n return defaults.array;\n else\n return defaults.object;\n}\n\nfunction useBase64(target, options) {\n const base64 = ref(\"\");\n const promise = ref();\n function execute() {\n if (!isClient)\n return;\n promise.value = new Promise((resolve, reject) => {\n try {\n const _target = toValue(target);\n if (_target == null) {\n resolve(\"\");\n } else if (typeof _target === \"string\") {\n resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n } else if (_target instanceof Blob) {\n resolve(blobToBase64(_target));\n } else if (_target instanceof ArrayBuffer) {\n resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n } else if (_target instanceof HTMLCanvasElement) {\n resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n } else if (_target instanceof HTMLImageElement) {\n const img = _target.cloneNode(false);\n img.crossOrigin = \"Anonymous\";\n imgLoaded(img).then(() => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n }).catch(reject);\n } else if (typeof _target === \"object\") {\n const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n const serialized = _serializeFn(_target);\n return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n } else {\n reject(new Error(\"target is unsupported types\"));\n }\n } catch (error) {\n reject(error);\n }\n });\n promise.value.then((res) => base64.value = res);\n return promise.value;\n }\n if (isRef(target) || typeof target === \"function\")\n watch(target, execute, { immediate: true });\n else\n execute();\n return {\n base64,\n promise,\n execute\n };\n}\nfunction imgLoaded(img) {\n return new Promise((resolve, reject) => {\n if (!img.complete) {\n img.onload = () => {\n resolve();\n };\n img.onerror = reject;\n } else {\n resolve();\n }\n });\n}\nfunction blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const fr = new FileReader();\n fr.onload = (e) => {\n resolve(e.target.result);\n };\n fr.onerror = reject;\n fr.readAsDataURL(blob);\n });\n}\n\nfunction useBattery(options = {}) {\n const { navigator = defaultNavigator } = options;\n const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n const isSupported = useSupported(() => navigator && \"getBattery\" in navigator && typeof navigator.getBattery === \"function\");\n const charging = ref(false);\n const chargingTime = ref(0);\n const dischargingTime = ref(0);\n const level = ref(1);\n let battery;\n function updateBatteryInfo() {\n charging.value = this.charging;\n chargingTime.value = this.chargingTime || 0;\n dischargingTime.value = this.dischargingTime || 0;\n level.value = this.level;\n }\n if (isSupported.value) {\n navigator.getBattery().then((_battery) => {\n battery = _battery;\n updateBatteryInfo.call(battery);\n useEventListener(battery, events, updateBatteryInfo, { passive: true });\n });\n }\n return {\n isSupported,\n charging,\n chargingTime,\n dischargingTime,\n level\n };\n}\n\nfunction useBluetooth(options) {\n let {\n acceptAllDevices = false\n } = options || {};\n const {\n filters = void 0,\n optionalServices = void 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n const device = shallowRef(void 0);\n const error = shallowRef(null);\n watch(device, () => {\n connectToBluetoothGATTServer();\n });\n async function requestDevice() {\n if (!isSupported.value)\n return;\n error.value = null;\n if (filters && filters.length > 0)\n acceptAllDevices = false;\n try {\n device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n acceptAllDevices,\n filters,\n optionalServices\n }));\n } catch (err) {\n error.value = err;\n }\n }\n const server = ref();\n const isConnected = computed(() => {\n var _a;\n return ((_a = server.value) == null ? void 0 : _a.connected) || false;\n });\n async function connectToBluetoothGATTServer() {\n error.value = null;\n if (device.value && device.value.gatt) {\n device.value.addEventListener(\"gattserverdisconnected\", () => {\n });\n try {\n server.value = await device.value.gatt.connect();\n } catch (err) {\n error.value = err;\n }\n }\n }\n tryOnMounted(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.connect();\n });\n tryOnScopeDispose(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.disconnect();\n });\n return {\n isSupported,\n isConnected,\n // Device:\n device,\n requestDevice,\n // Server:\n server,\n // Errors:\n error\n };\n}\n\nfunction useMediaQuery(query, options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n let mediaQuery;\n const matches = ref(false);\n const handler = (event) => {\n matches.value = event.matches;\n };\n const cleanup = () => {\n if (!mediaQuery)\n return;\n if (\"removeEventListener\" in mediaQuery)\n mediaQuery.removeEventListener(\"change\", handler);\n else\n mediaQuery.removeListener(handler);\n };\n const stopWatch = watchEffect(() => {\n if (!isSupported.value)\n return;\n cleanup();\n mediaQuery = window.matchMedia(toValue(query));\n if (\"addEventListener\" in mediaQuery)\n mediaQuery.addEventListener(\"change\", handler);\n else\n mediaQuery.addListener(handler);\n matches.value = mediaQuery.matches;\n });\n tryOnScopeDispose(() => {\n stopWatch();\n cleanup();\n mediaQuery = void 0;\n });\n return matches;\n}\n\nconst breakpointsTailwind = {\n \"sm\": 640,\n \"md\": 768,\n \"lg\": 1024,\n \"xl\": 1280,\n \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400\n};\nconst breakpointsVuetifyV2 = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1264,\n xl: 1904\n};\nconst breakpointsVuetifyV3 = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n xxl: 2560\n};\nconst breakpointsVuetify = breakpointsVuetifyV2;\nconst breakpointsAntDesign = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600\n};\nconst breakpointsQuasar = {\n xs: 0,\n sm: 600,\n md: 1024,\n lg: 1440,\n xl: 1920\n};\nconst breakpointsSematic = {\n mobileS: 320,\n mobileM: 375,\n mobileL: 425,\n tablet: 768,\n laptop: 1024,\n laptopL: 1440,\n desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n \"3xs\": 360,\n \"2xs\": 480,\n \"xs\": 600,\n \"sm\": 768,\n \"md\": 1024,\n \"lg\": 1280,\n \"xl\": 1440,\n \"2xl\": 1600,\n \"3xl\": 1920,\n \"4xl\": 2560\n};\nconst breakpointsPrimeFlex = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200\n};\nconst breakpointsElement = {\n xs: 0,\n sm: 768,\n md: 992,\n lg: 1200,\n xl: 1920\n};\n\nfunction useBreakpoints(breakpoints, options = {}) {\n function getValue(k, delta) {\n let v = toValue(breakpoints[toValue(k)]);\n if (delta != null)\n v = increaseWithUnit(v, delta);\n if (typeof v === \"number\")\n v = `${v}px`;\n return v;\n }\n const { window = defaultWindow, strategy = \"min-width\" } = options;\n function match(query) {\n if (!window)\n return false;\n return window.matchMedia(query).matches;\n }\n const greaterOrEqual = (k) => {\n return useMediaQuery(() => `(min-width: ${getValue(k)})`, options);\n };\n const smallerOrEqual = (k) => {\n return useMediaQuery(() => `(max-width: ${getValue(k)})`, options);\n };\n const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n Object.defineProperty(shortcuts, k, {\n get: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n enumerable: true,\n configurable: true\n });\n return shortcuts;\n }, {});\n function current() {\n const points = Object.keys(breakpoints).map((i) => [i, greaterOrEqual(i)]);\n return computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n }\n return Object.assign(shortcutMethods, {\n greaterOrEqual,\n smallerOrEqual,\n greater(k) {\n return useMediaQuery(() => `(min-width: ${getValue(k, 0.1)})`, options);\n },\n smaller(k) {\n return useMediaQuery(() => `(max-width: ${getValue(k, -0.1)})`, options);\n },\n between(a, b) {\n return useMediaQuery(() => `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n },\n isGreater(k) {\n return match(`(min-width: ${getValue(k, 0.1)})`);\n },\n isGreaterOrEqual(k) {\n return match(`(min-width: ${getValue(k)})`);\n },\n isSmaller(k) {\n return match(`(max-width: ${getValue(k, -0.1)})`);\n },\n isSmallerOrEqual(k) {\n return match(`(max-width: ${getValue(k)})`);\n },\n isInBetween(a, b) {\n return match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n },\n current,\n active() {\n const bps = current();\n return computed(() => bps.value.length === 0 ? \"\" : bps.value.at(-1));\n }\n });\n}\n\nfunction useBroadcastChannel(options) {\n const {\n name,\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n const isClosed = ref(false);\n const channel = ref();\n const data = ref();\n const error = shallowRef(null);\n const post = (data2) => {\n if (channel.value)\n channel.value.postMessage(data2);\n };\n const close = () => {\n if (channel.value)\n channel.value.close();\n isClosed.value = true;\n };\n if (isSupported.value) {\n tryOnMounted(() => {\n error.value = null;\n channel.value = new BroadcastChannel(name);\n channel.value.addEventListener(\"message\", (e) => {\n data.value = e.data;\n }, { passive: true });\n channel.value.addEventListener(\"messageerror\", (e) => {\n error.value = e;\n }, { passive: true });\n channel.value.addEventListener(\"close\", () => {\n isClosed.value = true;\n });\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n isSupported,\n channel,\n data,\n post,\n close,\n error,\n isClosed\n };\n}\n\nconst WRITABLE_PROPERTIES = [\n \"hash\",\n \"host\",\n \"hostname\",\n \"href\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"search\"\n];\nfunction useBrowserLocation(options = {}) {\n const { window = defaultWindow } = options;\n const refs = Object.fromEntries(\n WRITABLE_PROPERTIES.map((key) => [key, ref()])\n );\n for (const [key, ref2] of objectEntries(refs)) {\n watch(ref2, (value) => {\n if (!(window == null ? void 0 : window.location) || window.location[key] === value)\n return;\n window.location[key] = value;\n });\n }\n const buildState = (trigger) => {\n var _a;\n const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n const { origin } = (window == null ? void 0 : window.location) || {};\n for (const key of WRITABLE_PROPERTIES)\n refs[key].value = (_a = window == null ? void 0 : window.location) == null ? void 0 : _a[key];\n return reactive({\n trigger,\n state: state2,\n length,\n origin,\n ...refs\n });\n };\n const state = ref(buildState(\"load\"));\n if (window) {\n useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), { passive: true });\n useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), { passive: true });\n }\n return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, watchOptions) {\n const cachedValue = ref(refValue.value);\n watch(() => refValue.value, (value) => {\n if (!comparator(value, cachedValue.value))\n cachedValue.value = value;\n }, watchOptions);\n return cachedValue;\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n const {\n controls = false,\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n const permissionStatus = shallowRef();\n const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n const state = shallowRef();\n const update = () => {\n var _a, _b;\n state.value = (_b = (_a = permissionStatus.value) == null ? void 0 : _a.state) != null ? _b : \"prompt\";\n };\n useEventListener(permissionStatus, \"change\", update);\n const query = createSingletonPromise(async () => {\n if (!isSupported.value)\n return;\n if (!permissionStatus.value) {\n try {\n permissionStatus.value = await navigator.permissions.query(desc);\n } catch (e) {\n permissionStatus.value = void 0;\n } finally {\n update();\n }\n }\n if (controls)\n return toRaw(permissionStatus.value);\n });\n query();\n if (controls) {\n return {\n state,\n isSupported,\n query\n };\n } else {\n return state;\n }\n}\n\nfunction useClipboard(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500,\n legacy = false\n } = options;\n const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const permissionRead = usePermission(\"clipboard-read\");\n const permissionWrite = usePermission(\"clipboard-write\");\n const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n const text = ref(\"\");\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n function updateText() {\n if (isClipboardApiSupported.value && isAllowed(permissionRead.value)) {\n navigator.clipboard.readText().then((value) => {\n text.value = value;\n });\n } else {\n text.value = legacyRead();\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateText);\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n if (isClipboardApiSupported.value && isAllowed(permissionWrite.value))\n await navigator.clipboard.writeText(value);\n else\n legacyCopy(value);\n text.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n function legacyCopy(value) {\n const ta = document.createElement(\"textarea\");\n ta.value = value != null ? value : \"\";\n ta.style.position = \"absolute\";\n ta.style.opacity = \"0\";\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n ta.remove();\n }\n function legacyRead() {\n var _a, _b, _c;\n return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : \"\";\n }\n function isAllowed(status) {\n return status === \"granted\" || status === \"prompt\";\n }\n return {\n isSupported,\n text,\n copied,\n copy\n };\n}\n\nfunction useClipboardItems(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500\n } = options;\n const isSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const content = ref([]);\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n function updateContent() {\n if (isSupported.value) {\n navigator.clipboard.read().then((items) => {\n content.value = items;\n });\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateContent);\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n await navigator.clipboard.write(value);\n content.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n return {\n isSupported,\n content,\n copied,\n copy\n };\n}\n\nfunction cloneFnJSON(source) {\n return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n const cloned = ref({});\n const {\n manual,\n clone = cloneFnJSON,\n // watch options\n deep = true,\n immediate = true\n } = options;\n function sync() {\n cloned.value = clone(toValue(source));\n }\n if (!manual && (isRef(source) || typeof source === \"function\")) {\n watch(source, sync, {\n ...options,\n deep,\n immediate\n });\n } else {\n sync();\n }\n return { cloned, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n if (!(globalKey in _global))\n _global[globalKey] = _global[globalKey] || {};\n return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n handlers[key] = fn;\n}\n\nfunction usePreferredDark(options) {\n return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nfunction guessSerializerType(rawInit) {\n return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n boolean: {\n read: (v) => v === \"true\",\n write: (v) => String(v)\n },\n object: {\n read: (v) => JSON.parse(v),\n write: (v) => JSON.stringify(v)\n },\n number: {\n read: (v) => Number.parseFloat(v),\n write: (v) => String(v)\n },\n any: {\n read: (v) => v,\n write: (v) => String(v)\n },\n string: {\n read: (v) => v,\n write: (v) => String(v)\n },\n map: {\n read: (v) => new Map(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v.entries()))\n },\n set: {\n read: (v) => new Set(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v))\n },\n date: {\n read: (v) => new Date(v),\n write: (v) => v.toISOString()\n }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n },\n initOnMounted\n } = options;\n const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n if (!storage)\n return data;\n const rawInit = toValue(defaults);\n const type = guessSerializerType(rawInit);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n data,\n () => write(data.value),\n { flush, deep, eventFilter }\n );\n if (window && listenToStorageChanges) {\n tryOnMounted(() => {\n if (storage instanceof Storage)\n useEventListener(window, \"storage\", update);\n else\n useEventListener(window, customStorageEventName, updateFromCustomEvent);\n if (initOnMounted)\n update();\n });\n }\n if (!initOnMounted)\n update();\n function dispatchWriteEvent(oldValue, newValue) {\n if (window) {\n const payload = {\n key,\n oldValue,\n newValue,\n storageArea: storage\n };\n window.dispatchEvent(storage instanceof Storage ? new StorageEvent(\"storage\", payload) : new CustomEvent(customStorageEventName, {\n detail: payload\n }));\n }\n }\n function write(v) {\n try {\n const oldValue = storage.getItem(key);\n if (v == null) {\n dispatchWriteEvent(oldValue, null);\n storage.removeItem(key);\n } else {\n const serialized = serializer.write(v);\n if (oldValue !== serialized) {\n storage.setItem(key, serialized);\n dispatchWriteEvent(oldValue, serialized);\n }\n }\n } catch (e) {\n onError(e);\n }\n }\n function read(event) {\n const rawValue = event ? event.newValue : storage.getItem(key);\n if (rawValue == null) {\n if (writeDefaults && rawInit != null)\n storage.setItem(key, serializer.write(rawInit));\n return rawInit;\n } else if (!event && mergeDefaults) {\n const value = serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n return mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n return { ...rawInit, ...value };\n return value;\n } else if (typeof rawValue !== \"string\") {\n return rawValue;\n } else {\n return serializer.read(rawValue);\n }\n }\n function update(event) {\n if (event && event.storageArea !== storage)\n return;\n if (event && event.key == null) {\n data.value = rawInit;\n return;\n }\n if (event && event.key !== key)\n return;\n pauseWatch();\n try {\n if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n data.value = read(event);\n } catch (e) {\n onError(e);\n } finally {\n if (event)\n nextTick(resumeWatch);\n else\n resumeWatch();\n }\n }\n function updateFromCustomEvent(event) {\n update(event.detail);\n }\n return data;\n}\n\nconst CSS_DISABLE_TRANS = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\nfunction useColorMode(options = {}) {\n const {\n selector = \"html\",\n attribute = \"class\",\n initialValue = \"auto\",\n window = defaultWindow,\n storage,\n storageKey = \"vueuse-color-scheme\",\n listenToStorageChanges = true,\n storageRef,\n emitAuto,\n disableTransition = true\n } = options;\n const modes = {\n auto: \"\",\n light: \"light\",\n dark: \"dark\",\n ...options.modes || {}\n };\n const preferredDark = usePreferredDark({ window });\n const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n const updateHTMLAttrs = getSSRHandler(\n \"updateHTMLAttrs\",\n (selector2, attribute2, value) => {\n const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n if (!el)\n return;\n const classesToAdd = /* @__PURE__ */ new Set();\n const classesToRemove = /* @__PURE__ */ new Set();\n let attributeToChange = null;\n if (attribute2 === \"class\") {\n const current = value.split(/\\s/g);\n Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n if (current.includes(v))\n classesToAdd.add(v);\n else\n classesToRemove.add(v);\n });\n } else {\n attributeToChange = { key: attribute2, value };\n }\n if (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null)\n return;\n let style;\n if (disableTransition) {\n style = window.document.createElement(\"style\");\n style.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n window.document.head.appendChild(style);\n }\n for (const c of classesToAdd) {\n el.classList.add(c);\n }\n for (const c of classesToRemove) {\n el.classList.remove(c);\n }\n if (attributeToChange) {\n el.setAttribute(attributeToChange.key, attributeToChange.value);\n }\n if (disableTransition) {\n window.getComputedStyle(style).opacity;\n document.head.removeChild(style);\n }\n }\n );\n function defaultOnChanged(mode) {\n var _a;\n updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n }\n function onChanged(mode) {\n if (options.onChanged)\n options.onChanged(mode, defaultOnChanged);\n else\n defaultOnChanged(mode);\n }\n watch(state, onChanged, { flush: \"post\", immediate: true });\n tryOnMounted(() => onChanged(state.value));\n const auto = computed({\n get() {\n return emitAuto ? store.value : state.value;\n },\n set(v) {\n store.value = v;\n }\n });\n try {\n return Object.assign(auto, { store, system, state });\n } catch (e) {\n return auto;\n }\n}\n\nfunction useConfirmDialog(revealed = ref(false)) {\n const confirmHook = createEventHook();\n const cancelHook = createEventHook();\n const revealHook = createEventHook();\n let _resolve = noop;\n const reveal = (data) => {\n revealHook.trigger(data);\n revealed.value = true;\n return new Promise((resolve) => {\n _resolve = resolve;\n });\n };\n const confirm = (data) => {\n revealed.value = false;\n confirmHook.trigger(data);\n _resolve({ data, isCanceled: false });\n };\n const cancel = (data) => {\n revealed.value = false;\n cancelHook.trigger(data);\n _resolve({ data, isCanceled: true });\n };\n return {\n isRevealed: computed(() => revealed.value),\n reveal,\n confirm,\n cancel,\n onReveal: revealHook.on,\n onConfirm: confirmHook.on,\n onCancel: cancelHook.on\n };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n const { window = defaultWindow, initialValue, observe = false } = options;\n const variable = ref(initialValue);\n const elRef = computed(() => {\n var _a;\n return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n });\n function updateCssVar() {\n var _a;\n const key = toValue(prop);\n const el = toValue(elRef);\n if (el && window && key) {\n const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n variable.value = value || initialValue;\n }\n }\n if (observe) {\n useMutationObserver(elRef, updateCssVar, {\n attributeFilter: [\"style\", \"class\"],\n window\n });\n }\n watch(\n [elRef, () => toValue(prop)],\n (_, old) => {\n if (old[0] && old[1])\n old[0].style.removeProperty(old[1]);\n updateCssVar();\n },\n { immediate: true }\n );\n watch(\n variable,\n (val) => {\n var _a;\n const raw_prop = toValue(prop);\n if (((_a = elRef.value) == null ? void 0 : _a.style) && raw_prop) {\n if (val == null)\n elRef.value.style.removeProperty(raw_prop);\n else\n elRef.value.style.setProperty(raw_prop, val);\n }\n }\n );\n return variable;\n}\n\nfunction useCurrentElement(rootComponent) {\n const vm = getCurrentInstance();\n const currentElement = computedWithControl(\n () => null,\n () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el\n );\n onUpdated(currentElement.trigger);\n onMounted(currentElement.trigger);\n return currentElement;\n}\n\nfunction useCycleList(list, options) {\n const state = shallowRef(getInitialValue());\n const listRef = toRef(list);\n const index = computed({\n get() {\n var _a;\n const targetList = listRef.value;\n let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n if (index2 < 0)\n index2 = (_a = options == null ? void 0 : options.fallbackIndex) != null ? _a : 0;\n return index2;\n },\n set(v) {\n set(v);\n }\n });\n function set(i) {\n const targetList = listRef.value;\n const length = targetList.length;\n const index2 = (i % length + length) % length;\n const value = targetList[index2];\n state.value = value;\n return value;\n }\n function shift(delta = 1) {\n return set(index.value + delta);\n }\n function next(n = 1) {\n return shift(n);\n }\n function prev(n = 1) {\n return shift(-n);\n }\n function getInitialValue() {\n var _a, _b;\n return (_b = toValue((_a = options == null ? void 0 : options.initialValue) != null ? _a : toValue(list)[0])) != null ? _b : void 0;\n }\n watch(listRef, () => set(index.value));\n return {\n state,\n index,\n next,\n prev,\n go: set\n };\n}\n\nfunction useDark(options = {}) {\n const {\n valueDark = \"dark\",\n valueLight = \"\",\n window = defaultWindow\n } = options;\n const mode = useColorMode({\n ...options,\n onChanged: (mode2, defaultHandler) => {\n var _a;\n if (options.onChanged)\n (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\", defaultHandler, mode2);\n else\n defaultHandler(mode2);\n },\n modes: {\n dark: valueDark,\n light: valueLight\n }\n });\n const system = computed(() => {\n if (mode.system) {\n return mode.system.value;\n } else {\n const preferredDark = usePreferredDark({ window });\n return preferredDark.value ? \"dark\" : \"light\";\n }\n });\n const isDark = computed({\n get() {\n return mode.value === \"dark\";\n },\n set(v) {\n const modeVal = v ? \"dark\" : \"light\";\n if (system.value === modeVal)\n mode.value = \"auto\";\n else\n mode.value = modeVal;\n }\n });\n return isDark;\n}\n\nfunction fnBypass(v) {\n return v;\n}\nfunction fnSetSource(source, value) {\n return source.value = value;\n}\nfunction defaultDump(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n const {\n clone = false,\n dump = defaultDump(clone),\n parse = defaultParse(clone),\n setSource = fnSetSource\n } = options;\n function _createHistoryRecord() {\n return markRaw({\n snapshot: dump(source.value),\n timestamp: timestamp()\n });\n }\n const last = ref(_createHistoryRecord());\n const undoStack = ref([]);\n const redoStack = ref([]);\n const _setSource = (record) => {\n setSource(source, parse(record.snapshot));\n last.value = record;\n };\n const commit = () => {\n undoStack.value.unshift(last.value);\n last.value = _createHistoryRecord();\n if (options.capacity && undoStack.value.length > options.capacity)\n undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n if (redoStack.value.length)\n redoStack.value.splice(0, redoStack.value.length);\n };\n const clear = () => {\n undoStack.value.splice(0, undoStack.value.length);\n redoStack.value.splice(0, redoStack.value.length);\n };\n const undo = () => {\n const state = undoStack.value.shift();\n if (state) {\n redoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const redo = () => {\n const state = redoStack.value.shift();\n if (state) {\n undoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const reset = () => {\n _setSource(last.value);\n };\n const history = computed(() => [last.value, ...undoStack.value]);\n const canUndo = computed(() => undoStack.value.length > 0);\n const canRedo = computed(() => redoStack.value.length > 0);\n return {\n source,\n undoStack,\n redoStack,\n last,\n history,\n canUndo,\n canRedo,\n clear,\n commit,\n reset,\n undo,\n redo\n };\n}\n\nfunction useRefHistory(source, options = {}) {\n const {\n deep = false,\n flush = \"pre\",\n eventFilter\n } = options;\n const {\n eventFilter: composedFilter,\n pause,\n resume: resumeTracking,\n isActive: isTracking\n } = pausableFilter(eventFilter);\n const {\n ignoreUpdates,\n ignorePrevAsyncUpdates,\n stop\n } = watchIgnorable(\n source,\n commit,\n { deep, flush, eventFilter: composedFilter }\n );\n function setSource(source2, value) {\n ignorePrevAsyncUpdates();\n ignoreUpdates(() => {\n source2.value = value;\n });\n }\n const manualHistory = useManualRefHistory(source, { ...options, clone: options.clone || deep, setSource });\n const { clear, commit: manualCommit } = manualHistory;\n function commit() {\n ignorePrevAsyncUpdates();\n manualCommit();\n }\n function resume(commitNow) {\n resumeTracking();\n if (commitNow)\n commit();\n }\n function batch(fn) {\n let canceled = false;\n const cancel = () => canceled = true;\n ignoreUpdates(() => {\n fn(cancel);\n });\n if (!canceled)\n commit();\n }\n function dispose() {\n stop();\n clear();\n }\n return {\n ...manualHistory,\n isTracking,\n pause,\n resume,\n commit,\n batch,\n dispose\n };\n}\n\nfunction useDebouncedRefHistory(source, options = {}) {\n const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nfunction useDeviceMotion(options = {}) {\n const {\n window = defaultWindow,\n eventFilter = bypassFilter\n } = options;\n const acceleration = ref({ x: null, y: null, z: null });\n const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n const interval = ref(0);\n const accelerationIncludingGravity = ref({\n x: null,\n y: null,\n z: null\n });\n if (window) {\n const onDeviceMotion = createFilterWrapper(\n eventFilter,\n (event) => {\n acceleration.value = event.acceleration;\n accelerationIncludingGravity.value = event.accelerationIncludingGravity;\n rotationRate.value = event.rotationRate;\n interval.value = event.interval;\n }\n );\n useEventListener(window, \"devicemotion\", onDeviceMotion);\n }\n return {\n acceleration,\n accelerationIncludingGravity,\n rotationRate,\n interval\n };\n}\n\nfunction useDeviceOrientation(options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n const isAbsolute = ref(false);\n const alpha = ref(null);\n const beta = ref(null);\n const gamma = ref(null);\n if (window && isSupported.value) {\n useEventListener(window, \"deviceorientation\", (event) => {\n isAbsolute.value = event.absolute;\n alpha.value = event.alpha;\n beta.value = event.beta;\n gamma.value = event.gamma;\n });\n }\n return {\n isSupported,\n isAbsolute,\n alpha,\n beta,\n gamma\n };\n}\n\nfunction useDevicePixelRatio(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const pixelRatio = ref(1);\n if (window) {\n let observe2 = function() {\n pixelRatio.value = window.devicePixelRatio;\n cleanup2();\n media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);\n media.addEventListener(\"change\", observe2, { once: true });\n }, cleanup2 = function() {\n media == null ? void 0 : media.removeEventListener(\"change\", observe2);\n };\n let media;\n observe2();\n tryOnScopeDispose(cleanup2);\n }\n return { pixelRatio };\n}\n\nfunction useDevicesList(options = {}) {\n const {\n navigator = defaultNavigator,\n requestPermissions = false,\n constraints = { audio: true, video: true },\n onUpdated\n } = options;\n const devices = ref([]);\n const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n const permissionGranted = ref(false);\n let stream;\n async function update() {\n if (!isSupported.value)\n return;\n devices.value = await navigator.mediaDevices.enumerateDevices();\n onUpdated == null ? void 0 : onUpdated(devices.value);\n if (stream) {\n stream.getTracks().forEach((t) => t.stop());\n stream = null;\n }\n }\n async function ensurePermissions() {\n if (!isSupported.value)\n return false;\n if (permissionGranted.value)\n return true;\n const { state, query } = usePermission(\"camera\", { controls: true });\n await query();\n if (state.value !== \"granted\") {\n let granted = true;\n try {\n stream = await navigator.mediaDevices.getUserMedia(constraints);\n } catch (e) {\n stream = null;\n granted = false;\n }\n update();\n permissionGranted.value = granted;\n } else {\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n }\n if (isSupported.value) {\n if (requestPermissions)\n ensurePermissions();\n useEventListener(navigator.mediaDevices, \"devicechange\", update);\n update();\n }\n return {\n devices,\n ensurePermissions,\n permissionGranted,\n videoInputs,\n audioInputs,\n audioOutputs,\n isSupported\n };\n}\n\nfunction useDisplayMedia(options = {}) {\n var _a;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const video = options.video;\n const audio = options.audio;\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;\n });\n const constraint = { audio, video };\n const stream = shallowRef();\n async function _start() {\n var _a2;\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.addEventListener(\"ended\", stop));\n return stream.value;\n }\n async function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else\n _stop();\n },\n { immediate: true }\n );\n return {\n isSupported,\n stream,\n start,\n stop,\n enabled\n };\n}\n\nfunction useDocumentVisibility(options = {}) {\n const { document = defaultDocument } = options;\n if (!document)\n return ref(\"visible\");\n const visibility = ref(document.visibilityState);\n useEventListener(document, \"visibilitychange\", () => {\n visibility.value = document.visibilityState;\n });\n return visibility;\n}\n\nfunction useDraggable(target, options = {}) {\n var _a, _b;\n const {\n pointerTypes,\n preventDefault,\n stopPropagation,\n exact,\n onMove,\n onEnd,\n onStart,\n initialValue,\n axis = \"both\",\n draggingElement = defaultWindow,\n containerElement,\n handle: draggingHandle = target,\n buttons = [0]\n } = options;\n const position = ref(\n (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 }\n );\n const pressedDelta = ref();\n const filterEvent = (e) => {\n if (pointerTypes)\n return pointerTypes.includes(e.pointerType);\n return true;\n };\n const handleEvent = (e) => {\n if (toValue(preventDefault))\n e.preventDefault();\n if (toValue(stopPropagation))\n e.stopPropagation();\n };\n const start = (e) => {\n var _a2;\n if (!toValue(buttons).includes(e.button))\n return;\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (toValue(exact) && e.target !== toValue(target))\n return;\n const container = toValue(containerElement);\n const containerRect = (_a2 = container == null ? void 0 : container.getBoundingClientRect) == null ? void 0 : _a2.call(container);\n const targetRect = toValue(target).getBoundingClientRect();\n const pos = {\n x: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left),\n y: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top)\n };\n if ((onStart == null ? void 0 : onStart(pos, e)) === false)\n return;\n pressedDelta.value = pos;\n handleEvent(e);\n };\n const move = (e) => {\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n const container = toValue(containerElement);\n const targetRect = toValue(target).getBoundingClientRect();\n let { x, y } = position.value;\n if (axis === \"x\" || axis === \"both\") {\n x = e.clientX - pressedDelta.value.x;\n if (container)\n x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n }\n if (axis === \"y\" || axis === \"both\") {\n y = e.clientY - pressedDelta.value.y;\n if (container)\n y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n }\n position.value = {\n x,\n y\n };\n onMove == null ? void 0 : onMove(position.value, e);\n handleEvent(e);\n };\n const end = (e) => {\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n pressedDelta.value = void 0;\n onEnd == null ? void 0 : onEnd(position.value, e);\n handleEvent(e);\n };\n if (isClient) {\n const config = { capture: (_b = options.capture) != null ? _b : true };\n useEventListener(draggingHandle, \"pointerdown\", start, config);\n useEventListener(draggingElement, \"pointermove\", move, config);\n useEventListener(draggingElement, \"pointerup\", end, config);\n }\n return {\n ...toRefs(position),\n position,\n isDragging: computed(() => !!pressedDelta.value),\n style: computed(\n () => `left:${position.value.x}px;top:${position.value.y}px;`\n )\n };\n}\n\nfunction useDropZone(target, options = {}) {\n var _a, _b;\n const isOverDropZone = ref(false);\n const files = shallowRef(null);\n let counter = 0;\n let isValid = true;\n if (isClient) {\n const _options = typeof options === \"function\" ? { onDrop: options } : options;\n const multiple = (_a = _options.multiple) != null ? _a : true;\n const preventDefaultForUnhandled = (_b = _options.preventDefaultForUnhandled) != null ? _b : false;\n const getFiles = (event) => {\n var _a2, _b2;\n const list = Array.from((_b2 = (_a2 = event.dataTransfer) == null ? void 0 : _a2.files) != null ? _b2 : []);\n return list.length === 0 ? null : multiple ? list : [list[0]];\n };\n const checkDataTypes = (types) => {\n if (_options.dataTypes) {\n const dataTypes = unref(_options.dataTypes);\n return typeof dataTypes === \"function\" ? dataTypes(types) : dataTypes ? dataTypes.some((item) => types.includes(item)) : true;\n }\n return true;\n };\n const checkValidity = (event) => {\n var _a2, _b2;\n const items = Array.from((_b2 = (_a2 = event.dataTransfer) == null ? void 0 : _a2.items) != null ? _b2 : []);\n const types = items.map((item) => item.type);\n const dataTypesValid = checkDataTypes(types);\n const multipleFilesValid = multiple || items.length <= 1;\n return dataTypesValid && multipleFilesValid;\n };\n const handleDragEvent = (event, eventType) => {\n var _a2, _b2, _c, _d;\n isValid = checkValidity(event);\n if (!isValid) {\n if (preventDefaultForUnhandled) {\n event.preventDefault();\n }\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = \"none\";\n }\n return;\n }\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = \"copy\";\n }\n const currentFiles = getFiles(event);\n switch (eventType) {\n case \"enter\":\n counter += 1;\n isOverDropZone.value = true;\n (_a2 = _options.onEnter) == null ? void 0 : _a2.call(_options, null, event);\n break;\n case \"over\":\n (_b2 = _options.onOver) == null ? void 0 : _b2.call(_options, null, event);\n break;\n case \"leave\":\n counter -= 1;\n if (counter === 0)\n isOverDropZone.value = false;\n (_c = _options.onLeave) == null ? void 0 : _c.call(_options, null, event);\n break;\n case \"drop\":\n counter = 0;\n isOverDropZone.value = false;\n if (isValid) {\n files.value = currentFiles;\n (_d = _options.onDrop) == null ? void 0 : _d.call(_options, currentFiles, event);\n }\n break;\n }\n };\n useEventListener(target, \"dragenter\", (event) => handleDragEvent(event, \"enter\"));\n useEventListener(target, \"dragover\", (event) => handleDragEvent(event, \"over\"));\n useEventListener(target, \"dragleave\", (event) => handleDragEvent(event, \"leave\"));\n useEventListener(target, \"drop\", (event) => handleDragEvent(event, \"drop\"));\n }\n return {\n files,\n isOverDropZone\n };\n}\n\nfunction useResizeObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...observerOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => {\n const _targets = toValue(target);\n return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];\n });\n const stopWatch = watch(\n targets,\n (els) => {\n cleanup();\n if (isSupported.value && window) {\n observer = new ResizeObserver(callback);\n for (const _el of els) {\n if (_el)\n observer.observe(_el, observerOptions);\n }\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nfunction useElementBounding(target, options = {}) {\n const {\n reset = true,\n windowResize = true,\n windowScroll = true,\n immediate = true,\n updateTiming = \"sync\"\n } = options;\n const height = ref(0);\n const bottom = ref(0);\n const left = ref(0);\n const right = ref(0);\n const top = ref(0);\n const width = ref(0);\n const x = ref(0);\n const y = ref(0);\n function recalculate() {\n const el = unrefElement(target);\n if (!el) {\n if (reset) {\n height.value = 0;\n bottom.value = 0;\n left.value = 0;\n right.value = 0;\n top.value = 0;\n width.value = 0;\n x.value = 0;\n y.value = 0;\n }\n return;\n }\n const rect = el.getBoundingClientRect();\n height.value = rect.height;\n bottom.value = rect.bottom;\n left.value = rect.left;\n right.value = rect.right;\n top.value = rect.top;\n width.value = rect.width;\n x.value = rect.x;\n y.value = rect.y;\n }\n function update() {\n if (updateTiming === \"sync\")\n recalculate();\n else if (updateTiming === \"next-frame\")\n requestAnimationFrame(() => recalculate());\n }\n useResizeObserver(target, update);\n watch(() => unrefElement(target), (ele) => !ele && update());\n useMutationObserver(target, update, {\n attributeFilter: [\"style\", \"class\"]\n });\n if (windowScroll)\n useEventListener(\"scroll\", update, { capture: true, passive: true });\n if (windowResize)\n useEventListener(\"resize\", update, { passive: true });\n tryOnMounted(() => {\n if (immediate)\n update();\n });\n return {\n height,\n bottom,\n left,\n right,\n top,\n width,\n x,\n y,\n update\n };\n}\n\nfunction useElementByPoint(options) {\n const {\n x,\n y,\n document = defaultDocument,\n multiple,\n interval = \"requestAnimationFrame\",\n immediate = true\n } = options;\n const isSupported = useSupported(() => {\n if (toValue(multiple))\n return document && \"elementsFromPoint\" in document;\n return document && \"elementFromPoint\" in document;\n });\n const element = ref(null);\n const cb = () => {\n var _a, _b;\n element.value = toValue(multiple) ? (_a = document == null ? void 0 : document.elementsFromPoint(toValue(x), toValue(y))) != null ? _a : [] : (_b = document == null ? void 0 : document.elementFromPoint(toValue(x), toValue(y))) != null ? _b : null;\n };\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n return {\n isSupported,\n element,\n ...controls\n };\n}\n\nfunction useElementHover(el, options = {}) {\n const {\n delayEnter = 0,\n delayLeave = 0,\n window = defaultWindow\n } = options;\n const isHovered = ref(false);\n let timer;\n const toggle = (entering) => {\n const delay = entering ? delayEnter : delayLeave;\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n }\n if (delay)\n timer = setTimeout(() => isHovered.value = entering, delay);\n else\n isHovered.value = entering;\n };\n if (!window)\n return isHovered;\n useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n const { window = defaultWindow, box = \"content-box\" } = options;\n const isSVG = computed(() => {\n var _a, _b;\n return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n });\n const width = ref(initialSize.width);\n const height = ref(initialSize.height);\n const { stop: stop1 } = useResizeObserver(\n target,\n ([entry]) => {\n const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n if (window && isSVG.value) {\n const $elem = unrefElement(target);\n if ($elem) {\n const rect = $elem.getBoundingClientRect();\n width.value = rect.width;\n height.value = rect.height;\n }\n } else {\n if (boxSize) {\n const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n } else {\n width.value = entry.contentRect.width;\n height.value = entry.contentRect.height;\n }\n }\n },\n options\n );\n tryOnMounted(() => {\n const ele = unrefElement(target);\n if (ele) {\n width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n }\n });\n const stop2 = watch(\n () => unrefElement(target),\n (ele) => {\n width.value = ele ? initialSize.width : 0;\n height.value = ele ? initialSize.height : 0;\n }\n );\n function stop() {\n stop1();\n stop2();\n }\n return {\n width,\n height,\n stop\n };\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n const {\n root,\n rootMargin = \"0px\",\n threshold = 0,\n window = defaultWindow,\n immediate = true\n } = options;\n const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n const targets = computed(() => {\n const _target = toValue(target);\n return (Array.isArray(_target) ? _target : [_target]).map(unrefElement).filter(notNullish);\n });\n let cleanup = noop;\n const isActive = ref(immediate);\n const stopWatch = isSupported.value ? watch(\n () => [targets.value, unrefElement(root), isActive.value],\n ([targets2, root2]) => {\n cleanup();\n if (!isActive.value)\n return;\n if (!targets2.length)\n return;\n const observer = new IntersectionObserver(\n callback,\n {\n root: unrefElement(root2),\n rootMargin,\n threshold\n }\n );\n targets2.forEach((el) => el && observer.observe(el));\n cleanup = () => {\n observer.disconnect();\n cleanup = noop;\n };\n },\n { immediate, flush: \"post\" }\n ) : noop;\n const stop = () => {\n cleanup();\n stopWatch();\n isActive.value = false;\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n isActive,\n pause() {\n cleanup();\n isActive.value = false;\n },\n resume() {\n isActive.value = true;\n },\n stop\n };\n}\n\nfunction useElementVisibility(element, options = {}) {\n const { window = defaultWindow, scrollTarget, threshold = 0 } = options;\n const elementIsVisible = ref(false);\n useIntersectionObserver(\n element,\n (intersectionObserverEntries) => {\n let isIntersecting = elementIsVisible.value;\n let latestTime = 0;\n for (const entry of intersectionObserverEntries) {\n if (entry.time >= latestTime) {\n latestTime = entry.time;\n isIntersecting = entry.isIntersecting;\n }\n }\n elementIsVisible.value = isIntersecting;\n },\n {\n root: scrollTarget,\n window,\n threshold\n }\n );\n return elementIsVisible;\n}\n\nconst events = /* @__PURE__ */ new Map();\n\nfunction useEventBus(key) {\n const scope = getCurrentScope();\n function on(listener) {\n var _a;\n const listeners = events.get(key) || /* @__PURE__ */ new Set();\n listeners.add(listener);\n events.set(key, listeners);\n const _off = () => off(listener);\n (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);\n return _off;\n }\n function once(listener) {\n function _listener(...args) {\n off(_listener);\n listener(...args);\n }\n return on(_listener);\n }\n function off(listener) {\n const listeners = events.get(key);\n if (!listeners)\n return;\n listeners.delete(listener);\n if (!listeners.size)\n reset();\n }\n function reset() {\n events.delete(key);\n }\n function emit(event, payload) {\n var _a;\n (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n }\n return { on, once, off, emit, reset };\n}\n\nfunction resolveNestedOptions$1(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useEventSource(url, events = [], options = {}) {\n const event = ref(null);\n const data = ref(null);\n const status = ref(\"CONNECTING\");\n const eventSource = ref(null);\n const error = shallowRef(null);\n const urlRef = toRef(url);\n const lastEventId = shallowRef(null);\n let explicitlyClosed = false;\n let retried = 0;\n const {\n withCredentials = false,\n immediate = true\n } = options;\n const close = () => {\n if (isClient && eventSource.value) {\n eventSource.value.close();\n eventSource.value = null;\n status.value = \"CLOSED\";\n explicitlyClosed = true;\n }\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const es = new EventSource(urlRef.value, { withCredentials });\n status.value = \"CONNECTING\";\n eventSource.value = es;\n es.onopen = () => {\n status.value = \"OPEN\";\n error.value = null;\n };\n es.onerror = (e) => {\n status.value = \"CLOSED\";\n error.value = e;\n if (es.readyState === 2 && !explicitlyClosed && options.autoReconnect) {\n es.close();\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions$1(options.autoReconnect);\n retried += 1;\n if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n setTimeout(_init, delay);\n else if (typeof retries === \"function\" && retries())\n setTimeout(_init, delay);\n else\n onFailed == null ? void 0 : onFailed();\n }\n };\n es.onmessage = (e) => {\n event.value = null;\n data.value = e.data;\n lastEventId.value = e.lastEventId;\n };\n for (const event_name of events) {\n useEventListener(es, event_name, (e) => {\n event.value = event_name;\n data.value = e.data || null;\n });\n }\n };\n const open = () => {\n if (!isClient)\n return;\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n watch(urlRef, open, { immediate: true });\n tryOnScopeDispose(close);\n return {\n eventSource,\n event,\n data,\n status,\n error,\n open,\n close,\n lastEventId\n };\n}\n\nfunction useEyeDropper(options = {}) {\n const { initialValue = \"\" } = options;\n const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n const sRGBHex = ref(initialValue);\n async function open(openOptions) {\n if (!isSupported.value)\n return;\n const eyeDropper = new window.EyeDropper();\n const result = await eyeDropper.open(openOptions);\n sRGBHex.value = result.sRGBHex;\n return result;\n }\n return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n const {\n baseUrl = \"\",\n rel = \"icon\",\n document = defaultDocument\n } = options;\n const favicon = toRef(newIcon);\n const applyIcon = (icon) => {\n const elements = document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n if (!elements || elements.length === 0) {\n const link = document == null ? void 0 : document.createElement(\"link\");\n if (link) {\n link.rel = rel;\n link.href = `${baseUrl}${icon}`;\n link.type = `image/${icon.split(\".\").pop()}`;\n document == null ? void 0 : document.head.append(link);\n }\n return;\n }\n elements == null ? void 0 : elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n };\n watch(\n favicon,\n (i, o) => {\n if (typeof i === \"string\" && i !== o)\n applyIcon(i);\n },\n { immediate: true }\n );\n return favicon;\n}\n\nconst payloadMapping = {\n json: \"application/json\",\n text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nconst reAbsolute = /^(?:[a-z][a-z\\d+\\-.]*:)?\\/\\//i;\nfunction isAbsoluteURL(url) {\n return reAbsolute.test(url);\n}\nfunction headersToObject(headers) {\n if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n return Object.fromEntries(headers.entries());\n return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n if (combination === \"overwrite\") {\n return async (ctx) => {\n const callback = callbacks[callbacks.length - 1];\n if (callback)\n return { ...ctx, ...await callback(ctx) };\n return ctx;\n };\n } else {\n return async (ctx) => {\n for (const callback of callbacks) {\n if (callback)\n ctx = { ...ctx, ...await callback(ctx) };\n }\n return ctx;\n };\n }\n}\nfunction createFetch(config = {}) {\n const _combination = config.combination || \"chain\";\n const _options = config.options || {};\n const _fetchOptions = config.fetchOptions || {};\n function useFactoryFetch(url, ...args) {\n const computedUrl = computed(() => {\n const baseUrl = toValue(config.baseUrl);\n const targetUrl = toValue(url);\n return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n });\n let options = _options;\n let fetchOptions = _fetchOptions;\n if (args.length > 0) {\n if (isFetchOptions(args[0])) {\n options = {\n ...options,\n ...args[0],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n };\n } else {\n fetchOptions = {\n ...fetchOptions,\n ...args[0],\n headers: {\n ...headersToObject(fetchOptions.headers) || {},\n ...headersToObject(args[0].headers) || {}\n }\n };\n }\n }\n if (args.length > 1 && isFetchOptions(args[1])) {\n options = {\n ...options,\n ...args[1],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n };\n }\n return useFetch(computedUrl, fetchOptions, options);\n }\n return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n var _a;\n const supportsAbort = typeof AbortController === \"function\";\n let fetchOptions = {};\n let options = {\n immediate: true,\n refetch: false,\n timeout: 0,\n updateDataOnError: false\n };\n const config = {\n method: \"GET\",\n type: \"text\",\n payload: void 0\n };\n if (args.length > 0) {\n if (isFetchOptions(args[0]))\n options = { ...options, ...args[0] };\n else\n fetchOptions = args[0];\n }\n if (args.length > 1) {\n if (isFetchOptions(args[1]))\n options = { ...options, ...args[1] };\n }\n const {\n fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n initialData,\n timeout\n } = options;\n const responseEvent = createEventHook();\n const errorEvent = createEventHook();\n const finallyEvent = createEventHook();\n const isFinished = ref(false);\n const isFetching = ref(false);\n const aborted = ref(false);\n const statusCode = ref(null);\n const response = shallowRef(null);\n const error = shallowRef(null);\n const data = shallowRef(initialData || null);\n const canAbort = computed(() => supportsAbort && isFetching.value);\n let controller;\n let timer;\n const abort = () => {\n if (supportsAbort) {\n controller == null ? void 0 : controller.abort();\n controller = new AbortController();\n controller.signal.onabort = () => aborted.value = true;\n fetchOptions = {\n ...fetchOptions,\n signal: controller.signal\n };\n }\n };\n const loading = (isLoading) => {\n isFetching.value = isLoading;\n isFinished.value = !isLoading;\n };\n if (timeout)\n timer = useTimeoutFn(abort, timeout, { immediate: false });\n let executeCounter = 0;\n const execute = async (throwOnFailed = false) => {\n var _a2, _b;\n abort();\n loading(true);\n error.value = null;\n statusCode.value = null;\n aborted.value = false;\n executeCounter += 1;\n const currentExecuteCounter = executeCounter;\n const defaultFetchOptions = {\n method: config.method,\n headers: {}\n };\n if (config.payload) {\n const headers = headersToObject(defaultFetchOptions.headers);\n const payload = toValue(config.payload);\n const proto = Object.getPrototypeOf(payload);\n if (!config.payloadType && payload && (proto === Object.prototype || Array.isArray(proto)) && !(payload instanceof FormData))\n config.payloadType = \"json\";\n if (config.payloadType)\n headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n }\n let isCanceled = false;\n const context = {\n url: toValue(url),\n options: {\n ...defaultFetchOptions,\n ...fetchOptions\n },\n cancel: () => {\n isCanceled = true;\n }\n };\n if (options.beforeFetch)\n Object.assign(context, await options.beforeFetch(context));\n if (isCanceled || !fetch) {\n loading(false);\n return Promise.resolve(null);\n }\n let responseData = null;\n if (timer)\n timer.start();\n return fetch(\n context.url,\n {\n ...defaultFetchOptions,\n ...context.options,\n headers: {\n ...headersToObject(defaultFetchOptions.headers),\n ...headersToObject((_b = context.options) == null ? void 0 : _b.headers)\n }\n }\n ).then(async (fetchResponse) => {\n response.value = fetchResponse;\n statusCode.value = fetchResponse.status;\n responseData = await fetchResponse.clone()[config.type]();\n if (!fetchResponse.ok) {\n data.value = initialData || null;\n throw new Error(fetchResponse.statusText);\n }\n if (options.afterFetch) {\n ({ data: responseData } = await options.afterFetch({\n data: responseData,\n response: fetchResponse\n }));\n }\n data.value = responseData;\n responseEvent.trigger(fetchResponse);\n return fetchResponse;\n }).catch(async (fetchError) => {\n let errorData = fetchError.message || fetchError.name;\n if (options.onFetchError) {\n ({ error: errorData, data: responseData } = await options.onFetchError({\n data: responseData,\n error: fetchError,\n response: response.value\n }));\n }\n error.value = errorData;\n if (options.updateDataOnError)\n data.value = responseData;\n errorEvent.trigger(fetchError);\n if (throwOnFailed)\n throw fetchError;\n return null;\n }).finally(() => {\n if (currentExecuteCounter === executeCounter)\n loading(false);\n if (timer)\n timer.stop();\n finallyEvent.trigger(null);\n });\n };\n const refetch = toRef(options.refetch);\n watch(\n [\n refetch,\n toRef(url)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n const shell = {\n isFinished: readonly(isFinished),\n isFetching: readonly(isFetching),\n statusCode,\n response,\n error,\n data,\n canAbort,\n aborted,\n abort,\n execute,\n onFetchResponse: responseEvent.on,\n onFetchError: errorEvent.on,\n onFetchFinally: finallyEvent.on,\n // method\n get: setMethod(\"GET\"),\n put: setMethod(\"PUT\"),\n post: setMethod(\"POST\"),\n delete: setMethod(\"DELETE\"),\n patch: setMethod(\"PATCH\"),\n head: setMethod(\"HEAD\"),\n options: setMethod(\"OPTIONS\"),\n // type\n json: setType(\"json\"),\n text: setType(\"text\"),\n blob: setType(\"blob\"),\n arrayBuffer: setType(\"arrayBuffer\"),\n formData: setType(\"formData\")\n };\n function setMethod(method) {\n return (payload, payloadType) => {\n if (!isFetching.value) {\n config.method = method;\n config.payload = payload;\n config.payloadType = payloadType;\n if (isRef(config.payload)) {\n watch(\n [\n refetch,\n toRef(config.payload)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return void 0;\n };\n }\n function waitUntilFinished() {\n return new Promise((resolve, reject) => {\n until(isFinished).toBe(true).then(() => resolve(shell)).catch(reject);\n });\n }\n function setType(type) {\n return () => {\n if (!isFetching.value) {\n config.type = type;\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return void 0;\n };\n }\n if (options.immediate)\n Promise.resolve().then(() => execute());\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n}\nfunction joinPaths(start, end) {\n if (!start.endsWith(\"/\") && !end.startsWith(\"/\")) {\n return `${start}/${end}`;\n }\n if (start.endsWith(\"/\") && end.startsWith(\"/\")) {\n return `${start.slice(0, -1)}${end}`;\n }\n return `${start}${end}`;\n}\n\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: \"*\",\n reset: false,\n directory: false\n};\nfunction useFileDialog(options = {}) {\n const {\n document = defaultDocument\n } = options;\n const files = ref(null);\n const { on: onChange, trigger: changeTrigger } = createEventHook();\n const { on: onCancel, trigger: cancelTrigger } = createEventHook();\n let input;\n if (document) {\n input = document.createElement(\"input\");\n input.type = \"file\";\n input.onchange = (event) => {\n const result = event.target;\n files.value = result.files;\n changeTrigger(files.value);\n };\n input.oncancel = () => {\n cancelTrigger();\n };\n }\n const reset = () => {\n files.value = null;\n if (input && input.value) {\n input.value = \"\";\n changeTrigger(null);\n }\n };\n const open = (localOptions) => {\n if (!input)\n return;\n const _options = {\n ...DEFAULT_OPTIONS,\n ...options,\n ...localOptions\n };\n input.multiple = _options.multiple;\n input.accept = _options.accept;\n input.webkitdirectory = _options.directory;\n if (hasOwn(_options, \"capture\"))\n input.capture = _options.capture;\n if (_options.reset)\n reset();\n input.click();\n };\n return {\n files: readonly(files),\n open,\n reset,\n onCancel,\n onChange\n };\n}\n\nfunction useFileSystemAccess(options = {}) {\n const {\n window: _window = defaultWindow,\n dataType = \"Text\"\n } = options;\n const window = _window;\n const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n const fileHandle = ref();\n const data = ref();\n const file = ref();\n const fileName = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n });\n const fileMIME = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n });\n const fileSize = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n });\n const fileLastModified = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n });\n async function open(_options = {}) {\n if (!isSupported.value)\n return;\n const [handle] = await window.showOpenFilePicker({ ...toValue(options), ..._options });\n fileHandle.value = handle;\n await updateData();\n }\n async function create(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n data.value = void 0;\n await updateData();\n }\n async function save(_options = {}) {\n if (!isSupported.value)\n return;\n if (!fileHandle.value)\n return saveAs(_options);\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function saveAs(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function updateFile() {\n var _a;\n file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n }\n async function updateData() {\n var _a, _b;\n await updateFile();\n const type = toValue(dataType);\n if (type === \"Text\")\n data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n else if (type === \"ArrayBuffer\")\n data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n else if (type === \"Blob\")\n data.value = file.value;\n }\n watch(() => toValue(dataType), updateData);\n return {\n isSupported,\n data,\n file,\n fileName,\n fileMIME,\n fileSize,\n fileLastModified,\n open,\n create,\n save,\n saveAs,\n updateData\n };\n}\n\nfunction useFocus(target, options = {}) {\n const { initialValue = false, focusVisible = false, preventScroll = false } = options;\n const innerFocused = ref(false);\n const targetElement = computed(() => unrefElement(target));\n useEventListener(targetElement, \"focus\", (event) => {\n var _a, _b;\n if (!focusVisible || ((_b = (_a = event.target).matches) == null ? void 0 : _b.call(_a, \":focus-visible\")))\n innerFocused.value = true;\n });\n useEventListener(targetElement, \"blur\", () => innerFocused.value = false);\n const focused = computed({\n get: () => innerFocused.value,\n set(value) {\n var _a, _b;\n if (!value && innerFocused.value)\n (_a = targetElement.value) == null ? void 0 : _a.blur();\n else if (value && !innerFocused.value)\n (_b = targetElement.value) == null ? void 0 : _b.focus({ preventScroll });\n }\n });\n watch(\n targetElement,\n () => {\n focused.value = initialValue;\n },\n { immediate: true, flush: \"post\" }\n );\n return { focused };\n}\n\nconst EVENT_FOCUS_IN = \"focusin\";\nconst EVENT_FOCUS_OUT = \"focusout\";\nfunction useFocusWithin(target, options = {}) {\n const { window = defaultWindow } = options;\n const targetElement = computed(() => unrefElement(target));\n const _focused = ref(false);\n const focused = computed(() => _focused.value);\n const activeElement = useActiveElement(options);\n if (!window || !activeElement.value) {\n return { focused };\n }\n useEventListener(targetElement, EVENT_FOCUS_IN, () => _focused.value = true);\n useEventListener(targetElement, EVENT_FOCUS_OUT, () => _focused.value = false);\n return { focused };\n}\n\nfunction useFps(options) {\n var _a;\n const fps = ref(0);\n if (typeof performance === \"undefined\")\n return fps;\n const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n let last = performance.now();\n let ticks = 0;\n useRafFn(() => {\n ticks += 1;\n if (ticks >= every) {\n const now = performance.now();\n const diff = now - last;\n fps.value = Math.round(1e3 / (diff / ticks));\n last = now;\n ticks = 0;\n }\n });\n return fps;\n}\n\nconst eventHandlers = [\n \"fullscreenchange\",\n \"webkitfullscreenchange\",\n \"webkitendfullscreen\",\n \"mozfullscreenchange\",\n \"MSFullscreenChange\"\n];\nfunction useFullscreen(target, options = {}) {\n const {\n document = defaultDocument,\n autoExit = false\n } = options;\n const targetRef = computed(() => {\n var _a;\n return (_a = unrefElement(target)) != null ? _a : document == null ? void 0 : document.querySelector(\"html\");\n });\n const isFullscreen = ref(false);\n const requestMethod = computed(() => {\n return [\n \"requestFullscreen\",\n \"webkitRequestFullscreen\",\n \"webkitEnterFullscreen\",\n \"webkitEnterFullScreen\",\n \"webkitRequestFullScreen\",\n \"mozRequestFullScreen\",\n \"msRequestFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const exitMethod = computed(() => {\n return [\n \"exitFullscreen\",\n \"webkitExitFullscreen\",\n \"webkitExitFullScreen\",\n \"webkitCancelFullScreen\",\n \"mozCancelFullScreen\",\n \"msExitFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenEnabled = computed(() => {\n return [\n \"fullScreen\",\n \"webkitIsFullScreen\",\n \"webkitDisplayingFullscreen\",\n \"mozFullScreen\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenElementMethod = [\n \"fullscreenElement\",\n \"webkitFullscreenElement\",\n \"mozFullScreenElement\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document);\n const isSupported = useSupported(() => targetRef.value && document && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\n const isCurrentElementFullScreen = () => {\n if (fullscreenElementMethod)\n return (document == null ? void 0 : document[fullscreenElementMethod]) === targetRef.value;\n return false;\n };\n const isElementFullScreen = () => {\n if (fullscreenEnabled.value) {\n if (document && document[fullscreenEnabled.value] != null) {\n return document[fullscreenEnabled.value];\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? void 0 : target2[fullscreenEnabled.value]) != null) {\n return Boolean(target2[fullscreenEnabled.value]);\n }\n }\n }\n return false;\n };\n async function exit() {\n if (!isSupported.value || !isFullscreen.value)\n return;\n if (exitMethod.value) {\n if ((document == null ? void 0 : document[exitMethod.value]) != null) {\n await document[exitMethod.value]();\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? void 0 : target2[exitMethod.value]) != null)\n await target2[exitMethod.value]();\n }\n }\n isFullscreen.value = false;\n }\n async function enter() {\n if (!isSupported.value || isFullscreen.value)\n return;\n if (isElementFullScreen())\n await exit();\n const target2 = targetRef.value;\n if (requestMethod.value && (target2 == null ? void 0 : target2[requestMethod.value]) != null) {\n await target2[requestMethod.value]();\n isFullscreen.value = true;\n }\n }\n async function toggle() {\n await (isFullscreen.value ? exit() : enter());\n }\n const handlerCallback = () => {\n const isElementFullScreenValue = isElementFullScreen();\n if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen())\n isFullscreen.value = isElementFullScreenValue;\n };\n useEventListener(document, eventHandlers, handlerCallback, false);\n useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, false);\n if (autoExit)\n tryOnScopeDispose(exit);\n return {\n isSupported,\n isFullscreen,\n enter,\n exit,\n toggle\n };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n return computed(() => {\n if (gamepad.value) {\n return {\n buttons: {\n a: gamepad.value.buttons[0],\n b: gamepad.value.buttons[1],\n x: gamepad.value.buttons[2],\n y: gamepad.value.buttons[3]\n },\n bumper: {\n left: gamepad.value.buttons[4],\n right: gamepad.value.buttons[5]\n },\n triggers: {\n left: gamepad.value.buttons[6],\n right: gamepad.value.buttons[7]\n },\n stick: {\n left: {\n horizontal: gamepad.value.axes[0],\n vertical: gamepad.value.axes[1],\n button: gamepad.value.buttons[10]\n },\n right: {\n horizontal: gamepad.value.axes[2],\n vertical: gamepad.value.axes[3],\n button: gamepad.value.buttons[11]\n }\n },\n dpad: {\n up: gamepad.value.buttons[12],\n down: gamepad.value.buttons[13],\n left: gamepad.value.buttons[14],\n right: gamepad.value.buttons[15]\n },\n back: gamepad.value.buttons[8],\n start: gamepad.value.buttons[9]\n };\n }\n return null;\n });\n}\nfunction useGamepad(options = {}) {\n const {\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n const gamepads = ref([]);\n const onConnectedHook = createEventHook();\n const onDisconnectedHook = createEventHook();\n const stateFromGamepad = (gamepad) => {\n const hapticActuators = [];\n const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n if (vibrationActuator)\n hapticActuators.push(vibrationActuator);\n if (gamepad.hapticActuators)\n hapticActuators.push(...gamepad.hapticActuators);\n return {\n id: gamepad.id,\n index: gamepad.index,\n connected: gamepad.connected,\n mapping: gamepad.mapping,\n timestamp: gamepad.timestamp,\n vibrationActuator: gamepad.vibrationActuator,\n hapticActuators,\n axes: gamepad.axes.map((axes) => axes),\n buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n };\n };\n const updateGamepadState = () => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n for (const gamepad of _gamepads) {\n if (gamepad && gamepads.value[gamepad.index])\n gamepads.value[gamepad.index] = stateFromGamepad(gamepad);\n }\n };\n const { isActive, pause, resume } = useRafFn(updateGamepadState);\n const onGamepadConnected = (gamepad) => {\n if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n gamepads.value.push(stateFromGamepad(gamepad));\n onConnectedHook.trigger(gamepad.index);\n }\n resume();\n };\n const onGamepadDisconnected = (gamepad) => {\n gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n onDisconnectedHook.trigger(gamepad.index);\n };\n useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad));\n useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad));\n tryOnMounted(() => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n for (const gamepad of _gamepads) {\n if (gamepad && gamepads.value[gamepad.index])\n onGamepadConnected(gamepad);\n }\n });\n pause();\n return {\n isSupported,\n onConnected: onConnectedHook.on,\n onDisconnected: onDisconnectedHook.on,\n gamepads,\n pause,\n resume,\n isActive\n };\n}\n\nfunction useGeolocation(options = {}) {\n const {\n enableHighAccuracy = true,\n maximumAge = 3e4,\n timeout = 27e3,\n navigator = defaultNavigator,\n immediate = true\n } = options;\n const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n const locatedAt = ref(null);\n const error = shallowRef(null);\n const coords = ref({\n accuracy: 0,\n latitude: Number.POSITIVE_INFINITY,\n longitude: Number.POSITIVE_INFINITY,\n altitude: null,\n altitudeAccuracy: null,\n heading: null,\n speed: null\n });\n function updatePosition(position) {\n locatedAt.value = position.timestamp;\n coords.value = position.coords;\n error.value = null;\n }\n let watcher;\n function resume() {\n if (isSupported.value) {\n watcher = navigator.geolocation.watchPosition(\n updatePosition,\n (err) => error.value = err,\n {\n enableHighAccuracy,\n maximumAge,\n timeout\n }\n );\n }\n }\n if (immediate)\n resume();\n function pause() {\n if (watcher && navigator)\n navigator.geolocation.clearWatch(watcher);\n }\n tryOnScopeDispose(() => {\n pause();\n });\n return {\n isSupported,\n coords,\n locatedAt,\n error,\n resume,\n pause\n };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n const {\n initialState = false,\n listenForVisibilityChange = true,\n events = defaultEvents$1,\n window = defaultWindow,\n eventFilter = throttleFilter(50)\n } = options;\n const idle = ref(initialState);\n const lastActive = ref(timestamp());\n let timer;\n const reset = () => {\n idle.value = false;\n clearTimeout(timer);\n timer = setTimeout(() => idle.value = true, timeout);\n };\n const onEvent = createFilterWrapper(\n eventFilter,\n () => {\n lastActive.value = timestamp();\n reset();\n }\n );\n if (window) {\n const document = window.document;\n for (const event of events)\n useEventListener(window, event, onEvent, { passive: true });\n if (listenForVisibilityChange) {\n useEventListener(document, \"visibilitychange\", () => {\n if (!document.hidden)\n onEvent();\n });\n }\n reset();\n }\n return {\n idle,\n lastActive,\n reset\n };\n}\n\nasync function loadImage(options) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy } = options;\n img.src = src;\n if (srcset)\n img.srcset = srcset;\n if (sizes)\n img.sizes = sizes;\n if (clazz)\n img.className = clazz;\n if (loading)\n img.loading = loading;\n if (crossorigin)\n img.crossOrigin = crossorigin;\n if (referrerPolicy)\n img.referrerPolicy = referrerPolicy;\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n const state = useAsyncState(\n () => loadImage(toValue(options)),\n void 0,\n {\n resetOnExecute: true,\n ...asyncStateOptions\n }\n );\n watch(\n () => toValue(options),\n () => state.execute(asyncStateOptions.delay),\n { deep: true }\n );\n return state;\n}\n\nfunction resolveElement(el) {\n if (typeof Window !== \"undefined\" && el instanceof Window)\n return el.document.documentElement;\n if (typeof Document !== \"undefined\" && el instanceof Document)\n return el.documentElement;\n return el;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n const {\n throttle = 0,\n idle = 200,\n onStop = noop,\n onScroll = noop,\n offset = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n },\n eventListenerOptions = {\n capture: false,\n passive: true\n },\n behavior = \"auto\",\n window = defaultWindow,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const internalX = ref(0);\n const internalY = ref(0);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo(x2, void 0);\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo(void 0, y2);\n }\n });\n function scrollTo(_x, _y) {\n var _a, _b, _c, _d;\n if (!window)\n return;\n const _element = toValue(element);\n if (!_element)\n return;\n (_c = _element instanceof Document ? window.document.body : _element) == null ? void 0 : _c.scrollTo({\n top: (_a = toValue(_y)) != null ? _a : y.value,\n left: (_b = toValue(_x)) != null ? _b : x.value,\n behavior: toValue(behavior)\n });\n const scrollContainer = ((_d = _element == null ? void 0 : _element.document) == null ? void 0 : _d.documentElement) || (_element == null ? void 0 : _element.documentElement) || _element;\n if (x != null)\n internalX.value = scrollContainer.scrollLeft;\n if (y != null)\n internalY.value = scrollContainer.scrollTop;\n }\n const isScrolling = ref(false);\n const arrivedState = reactive({\n left: true,\n right: false,\n top: true,\n bottom: false\n });\n const directions = reactive({\n left: false,\n right: false,\n top: false,\n bottom: false\n });\n const onScrollEnd = (e) => {\n if (!isScrolling.value)\n return;\n isScrolling.value = false;\n directions.left = false;\n directions.right = false;\n directions.top = false;\n directions.bottom = false;\n onStop(e);\n };\n const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n const setArrivedState = (target) => {\n var _a;\n if (!window)\n return;\n const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(target);\n const { display, flexDirection } = getComputedStyle(el);\n const scrollLeft = el.scrollLeft;\n directions.left = scrollLeft < internalX.value;\n directions.right = scrollLeft > internalX.value;\n const left = Math.abs(scrollLeft) <= (offset.left || 0);\n const right = Math.abs(scrollLeft) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"row-reverse\") {\n arrivedState.left = right;\n arrivedState.right = left;\n } else {\n arrivedState.left = left;\n arrivedState.right = right;\n }\n internalX.value = scrollLeft;\n let scrollTop = el.scrollTop;\n if (target === window.document && !scrollTop)\n scrollTop = window.document.body.scrollTop;\n directions.top = scrollTop < internalY.value;\n directions.bottom = scrollTop > internalY.value;\n const top = Math.abs(scrollTop) <= (offset.top || 0);\n const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"column-reverse\") {\n arrivedState.top = bottom;\n arrivedState.bottom = top;\n } else {\n arrivedState.top = top;\n arrivedState.bottom = bottom;\n }\n internalY.value = scrollTop;\n };\n const onScrollHandler = (e) => {\n var _a;\n if (!window)\n return;\n const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n setArrivedState(eventTarget);\n isScrolling.value = true;\n onScrollEndDebounced(e);\n onScroll(e);\n };\n useEventListener(\n element,\n \"scroll\",\n throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n eventListenerOptions\n );\n tryOnMounted(() => {\n try {\n const _element = toValue(element);\n if (!_element)\n return;\n setArrivedState(_element);\n } catch (e) {\n onError(e);\n }\n });\n useEventListener(\n element,\n \"scrollend\",\n onScrollEnd,\n eventListenerOptions\n );\n return {\n x,\n y,\n isScrolling,\n arrivedState,\n directions,\n measure() {\n const _element = toValue(element);\n if (window && _element)\n setArrivedState(_element);\n }\n };\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n var _a;\n const {\n direction = \"bottom\",\n interval = 100,\n canLoadMore = () => true\n } = options;\n const state = reactive(useScroll(\n element,\n {\n ...options,\n offset: {\n [direction]: (_a = options.distance) != null ? _a : 0,\n ...options.offset\n }\n }\n ));\n const promise = ref();\n const isLoading = computed(() => !!promise.value);\n const observedElement = computed(() => {\n return resolveElement(toValue(element));\n });\n const isElementVisible = useElementVisibility(observedElement);\n function checkAndLoad() {\n state.measure();\n if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n return;\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n if (state.arrivedState[direction] || isNarrower) {\n if (!promise.value) {\n promise.value = Promise.all([\n onLoadMore(state),\n new Promise((resolve) => setTimeout(resolve, interval))\n ]).finally(() => {\n promise.value = null;\n nextTick(() => checkAndLoad());\n });\n }\n }\n }\n const stop = watch(\n () => [state.arrivedState[direction], isElementVisible.value],\n checkAndLoad,\n { immediate: true }\n );\n tryOnUnmounted(stop);\n return {\n isLoading,\n reset() {\n nextTick(() => checkAndLoad());\n }\n };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n const {\n events = defaultEvents,\n document = defaultDocument,\n initial = null\n } = options;\n const state = ref(initial);\n if (document) {\n events.forEach((listenerEvent) => {\n useEventListener(document, listenerEvent, (evt) => {\n if (typeof evt.getModifierState === \"function\")\n state.value = evt.getModifierState(modifier);\n });\n });\n }\n return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n ctrl: \"control\",\n command: \"meta\",\n cmd: \"meta\",\n option: \"alt\",\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n const {\n reactive: useReactive = false,\n target = defaultWindow,\n aliasMap = DefaultMagicKeysAliasMap,\n passive = true,\n onEventFired = noop\n } = options;\n const current = reactive(/* @__PURE__ */ new Set());\n const obj = {\n toJSON() {\n return {};\n },\n current\n };\n const refs = useReactive ? reactive(obj) : obj;\n const metaDeps = /* @__PURE__ */ new Set();\n const usedKeys = /* @__PURE__ */ new Set();\n function setRefs(key, value) {\n if (key in refs) {\n if (useReactive)\n refs[key] = value;\n else\n refs[key].value = value;\n }\n }\n function reset() {\n current.clear();\n for (const key of usedKeys)\n setRefs(key, false);\n }\n function updateRefs(e, value) {\n var _a, _b;\n const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n const values = [code, key].filter(Boolean);\n if (key) {\n if (value)\n current.add(key);\n else\n current.delete(key);\n }\n for (const key2 of values) {\n usedKeys.add(key2);\n setRefs(key2, value);\n }\n if (key === \"meta\" && !value) {\n metaDeps.forEach((key2) => {\n current.delete(key2);\n setRefs(key2, false);\n });\n metaDeps.clear();\n } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n [...current, ...values].forEach((key2) => metaDeps.add(key2));\n }\n }\n useEventListener(target, \"keydown\", (e) => {\n updateRefs(e, true);\n return onEventFired(e);\n }, { passive });\n useEventListener(target, \"keyup\", (e) => {\n updateRefs(e, false);\n return onEventFired(e);\n }, { passive });\n useEventListener(\"blur\", reset, { passive: true });\n useEventListener(\"focus\", reset, { passive: true });\n const proxy = new Proxy(\n refs,\n {\n get(target2, prop, rec) {\n if (typeof prop !== \"string\")\n return Reflect.get(target2, prop, rec);\n prop = prop.toLowerCase();\n if (prop in aliasMap)\n prop = aliasMap[prop];\n if (!(prop in refs)) {\n if (/[+_-]/.test(prop)) {\n const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n refs[prop] = computed(() => keys.every((key) => toValue(proxy[key])));\n } else {\n refs[prop] = ref(false);\n }\n }\n const r = Reflect.get(target2, prop, rec);\n return useReactive ? toValue(r) : r;\n }\n }\n );\n return proxy;\n}\n\nfunction usingElRef(source, cb) {\n if (toValue(source))\n cb(toValue(source));\n}\nfunction timeRangeToArray(timeRanges) {\n let ranges = [];\n for (let i = 0; i < timeRanges.length; ++i)\n ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n return ranges;\n}\nfunction tracksToArray(tracks) {\n return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n src: \"\",\n tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n target = toRef(target);\n options = {\n ...defaultOptions,\n ...options\n };\n const {\n document = defaultDocument\n } = options;\n const currentTime = ref(0);\n const duration = ref(0);\n const seeking = ref(false);\n const volume = ref(1);\n const waiting = ref(false);\n const ended = ref(false);\n const playing = ref(false);\n const rate = ref(1);\n const stalled = ref(false);\n const buffered = ref([]);\n const tracks = ref([]);\n const selectedTrack = ref(-1);\n const isPictureInPicture = ref(false);\n const muted = ref(false);\n const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n const sourceErrorEvent = createEventHook();\n const playbackErrorEvent = createEventHook();\n const disableTrack = (track) => {\n usingElRef(target, (el) => {\n if (track) {\n const id = typeof track === \"number\" ? track : track.id;\n el.textTracks[id].mode = \"disabled\";\n } else {\n for (let i = 0; i < el.textTracks.length; ++i)\n el.textTracks[i].mode = \"disabled\";\n }\n selectedTrack.value = -1;\n });\n };\n const enableTrack = (track, disableTracks = true) => {\n usingElRef(target, (el) => {\n const id = typeof track === \"number\" ? track : track.id;\n if (disableTracks)\n disableTrack();\n el.textTracks[id].mode = \"showing\";\n selectedTrack.value = id;\n });\n };\n const togglePictureInPicture = () => {\n return new Promise((resolve, reject) => {\n usingElRef(target, async (el) => {\n if (supportsPictureInPicture) {\n if (!isPictureInPicture.value) {\n el.requestPictureInPicture().then(resolve).catch(reject);\n } else {\n document.exitPictureInPicture().then(resolve).catch(reject);\n }\n }\n });\n });\n };\n watchEffect(() => {\n if (!document)\n return;\n const el = toValue(target);\n if (!el)\n return;\n const src = toValue(options.src);\n let sources = [];\n if (!src)\n return;\n if (typeof src === \"string\")\n sources = [{ src }];\n else if (Array.isArray(src))\n sources = src;\n else if (isObject(src))\n sources = [src];\n el.querySelectorAll(\"source\").forEach((e) => {\n e.removeEventListener(\"error\", sourceErrorEvent.trigger);\n e.remove();\n });\n sources.forEach(({ src: src2, type }) => {\n const source = document.createElement(\"source\");\n source.setAttribute(\"src\", src2);\n source.setAttribute(\"type\", type || \"\");\n source.addEventListener(\"error\", sourceErrorEvent.trigger);\n el.appendChild(source);\n });\n el.load();\n });\n tryOnScopeDispose(() => {\n const el = toValue(target);\n if (!el)\n return;\n el.querySelectorAll(\"source\").forEach((e) => e.removeEventListener(\"error\", sourceErrorEvent.trigger));\n });\n watch([target, volume], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.volume = volume.value;\n });\n watch([target, muted], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.muted = muted.value;\n });\n watch([target, rate], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.playbackRate = rate.value;\n });\n watchEffect(() => {\n if (!document)\n return;\n const textTracks = toValue(options.tracks);\n const el = toValue(target);\n if (!textTracks || !textTracks.length || !el)\n return;\n el.querySelectorAll(\"track\").forEach((e) => e.remove());\n textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n const track = document.createElement(\"track\");\n track.default = isDefault || false;\n track.kind = kind;\n track.label = label;\n track.src = src;\n track.srclang = srcLang;\n if (track.default)\n selectedTrack.value = i;\n el.appendChild(track);\n });\n });\n const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n const el = toValue(target);\n if (!el)\n return;\n el.currentTime = time;\n });\n const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n const el = toValue(target);\n if (!el)\n return;\n if (isPlaying) {\n el.play().catch((e) => {\n playbackErrorEvent.trigger(e);\n throw e;\n });\n } else {\n el.pause();\n }\n });\n useEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime));\n useEventListener(target, \"durationchange\", () => duration.value = toValue(target).duration);\n useEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(toValue(target).buffered));\n useEventListener(target, \"seeking\", () => seeking.value = true);\n useEventListener(target, \"seeked\", () => seeking.value = false);\n useEventListener(target, [\"waiting\", \"loadstart\"], () => {\n waiting.value = true;\n ignorePlayingUpdates(() => playing.value = false);\n });\n useEventListener(target, \"loadeddata\", () => waiting.value = false);\n useEventListener(target, \"playing\", () => {\n waiting.value = false;\n ended.value = false;\n ignorePlayingUpdates(() => playing.value = true);\n });\n useEventListener(target, \"ratechange\", () => rate.value = toValue(target).playbackRate);\n useEventListener(target, \"stalled\", () => stalled.value = true);\n useEventListener(target, \"ended\", () => ended.value = true);\n useEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false));\n useEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true));\n useEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true);\n useEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false);\n useEventListener(target, \"volumechange\", () => {\n const el = toValue(target);\n if (!el)\n return;\n volume.value = el.volume;\n muted.value = el.muted;\n });\n const listeners = [];\n const stop = watch([target], () => {\n const el = toValue(target);\n if (!el)\n return;\n stop();\n listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks));\n });\n tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n return {\n currentTime,\n duration,\n waiting,\n seeking,\n ended,\n stalled,\n buffered,\n playing,\n rate,\n // Volume\n volume,\n muted,\n // Tracks\n tracks,\n selectedTrack,\n enableTrack,\n disableTrack,\n // Picture in Picture\n supportsPictureInPicture,\n togglePictureInPicture,\n isPictureInPicture,\n // Events\n onSourceError: sourceErrorEvent.on,\n onPlaybackError: playbackErrorEvent.on\n };\n}\n\nfunction getMapVue2Compat() {\n const data = shallowReactive({});\n return {\n get: (key) => data[key],\n set: (key, value) => set(data, key, value),\n has: (key) => hasOwn(data, key),\n delete: (key) => del(data, key),\n clear: () => {\n Object.keys(data).forEach((key) => {\n del(data, key);\n });\n }\n };\n}\nfunction useMemoize(resolver, options) {\n const initCache = () => {\n if (options == null ? void 0 : options.cache)\n return shallowReactive(options.cache);\n if (isVue2)\n return getMapVue2Compat();\n return shallowReactive(/* @__PURE__ */ new Map());\n };\n const cache = initCache();\n const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n const _loadData = (key, ...args) => {\n cache.set(key, resolver(...args));\n return cache.get(key);\n };\n const loadData = (...args) => _loadData(generateKey(...args), ...args);\n const deleteData = (...args) => {\n cache.delete(generateKey(...args));\n };\n const clearData = () => {\n cache.clear();\n };\n const memoized = (...args) => {\n const key = generateKey(...args);\n if (cache.has(key))\n return cache.get(key);\n return _loadData(key, ...args);\n };\n memoized.load = loadData;\n memoized.delete = deleteData;\n memoized.clear = clearData;\n memoized.generateKey = generateKey;\n memoized.cache = cache;\n return memoized;\n}\n\nfunction useMemory(options = {}) {\n const memory = ref();\n const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n if (isSupported.value) {\n const { interval = 1e3 } = options;\n useIntervalFn(() => {\n memory.value = performance.memory;\n }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n }\n return { isSupported, memory };\n}\n\nconst UseMouseBuiltinExtractors = {\n page: (event) => [event.pageX, event.pageY],\n client: (event) => [event.clientX, event.clientY],\n screen: (event) => [event.screenX, event.screenY],\n movement: (event) => event instanceof Touch ? null : [event.movementX, event.movementY]\n};\nfunction useMouse(options = {}) {\n const {\n type = \"page\",\n touch = true,\n resetOnTouchEnds = false,\n initialValue = { x: 0, y: 0 },\n window = defaultWindow,\n target = window,\n scroll = true,\n eventFilter\n } = options;\n let _prevMouseEvent = null;\n let _prevScrollX = 0;\n let _prevScrollY = 0;\n const x = ref(initialValue.x);\n const y = ref(initialValue.y);\n const sourceType = ref(null);\n const extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n const mouseHandler = (event) => {\n const result = extractor(event);\n _prevMouseEvent = event;\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"mouse\";\n }\n if (window) {\n _prevScrollX = window.scrollX;\n _prevScrollY = window.scrollY;\n }\n };\n const touchHandler = (event) => {\n if (event.touches.length > 0) {\n const result = extractor(event.touches[0]);\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"touch\";\n }\n }\n };\n const scrollHandler = () => {\n if (!_prevMouseEvent || !window)\n return;\n const pos = extractor(_prevMouseEvent);\n if (_prevMouseEvent instanceof MouseEvent && pos) {\n x.value = pos[0] + window.scrollX - _prevScrollX;\n y.value = pos[1] + window.scrollY - _prevScrollY;\n }\n };\n const reset = () => {\n x.value = initialValue.x;\n y.value = initialValue.y;\n };\n const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n const scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n if (touch && type !== \"movement\") {\n useEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n if (resetOnTouchEnds)\n useEventListener(target, \"touchend\", reset, listenerOptions);\n }\n if (scroll && type === \"page\")\n useEventListener(window, \"scroll\", scrollHandlerWrapper, { passive: true });\n }\n return {\n x,\n y,\n sourceType\n };\n}\n\nfunction useMouseInElement(target, options = {}) {\n const {\n handleOutside = true,\n window = defaultWindow\n } = options;\n const type = options.type || \"page\";\n const { x, y, sourceType } = useMouse(options);\n const targetRef = ref(target != null ? target : window == null ? void 0 : window.document.body);\n const elementX = ref(0);\n const elementY = ref(0);\n const elementPositionX = ref(0);\n const elementPositionY = ref(0);\n const elementHeight = ref(0);\n const elementWidth = ref(0);\n const isOutside = ref(true);\n let stop = () => {\n };\n if (window) {\n stop = watch(\n [targetRef, x, y],\n () => {\n const el = unrefElement(targetRef);\n if (!el || !(el instanceof Element))\n return;\n const {\n left,\n top,\n width,\n height\n } = el.getBoundingClientRect();\n elementPositionX.value = left + (type === \"page\" ? window.pageXOffset : 0);\n elementPositionY.value = top + (type === \"page\" ? window.pageYOffset : 0);\n elementHeight.value = height;\n elementWidth.value = width;\n const elX = x.value - elementPositionX.value;\n const elY = y.value - elementPositionY.value;\n isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n if (handleOutside || !isOutside.value) {\n elementX.value = elX;\n elementY.value = elY;\n }\n },\n { immediate: true }\n );\n useEventListener(document, \"mouseleave\", () => {\n isOutside.value = true;\n });\n }\n return {\n x,\n y,\n sourceType,\n elementX,\n elementY,\n elementPositionX,\n elementPositionY,\n elementHeight,\n elementWidth,\n isOutside,\n stop\n };\n}\n\nfunction useMousePressed(options = {}) {\n const {\n touch = true,\n drag = true,\n capture = false,\n initialValue = false,\n window = defaultWindow\n } = options;\n const pressed = ref(initialValue);\n const sourceType = ref(null);\n if (!window) {\n return {\n pressed,\n sourceType\n };\n }\n const onPressed = (srcType) => () => {\n pressed.value = true;\n sourceType.value = srcType;\n };\n const onReleased = () => {\n pressed.value = false;\n sourceType.value = null;\n };\n const target = computed(() => unrefElement(options.target) || window);\n useEventListener(target, \"mousedown\", onPressed(\"mouse\"), { passive: true, capture });\n useEventListener(window, \"mouseleave\", onReleased, { passive: true, capture });\n useEventListener(window, \"mouseup\", onReleased, { passive: true, capture });\n if (drag) {\n useEventListener(target, \"dragstart\", onPressed(\"mouse\"), { passive: true, capture });\n useEventListener(window, \"drop\", onReleased, { passive: true, capture });\n useEventListener(window, \"dragend\", onReleased, { passive: true, capture });\n }\n if (touch) {\n useEventListener(target, \"touchstart\", onPressed(\"touch\"), { passive: true, capture });\n useEventListener(window, \"touchend\", onReleased, { passive: true, capture });\n useEventListener(window, \"touchcancel\", onReleased, { passive: true, capture });\n }\n return {\n pressed,\n sourceType\n };\n}\n\nfunction useNavigatorLanguage(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"language\" in navigator);\n const language = ref(navigator == null ? void 0 : navigator.language);\n useEventListener(window, \"languagechange\", () => {\n if (navigator)\n language.value = navigator.language;\n });\n return {\n isSupported,\n language\n };\n}\n\nfunction useNetwork(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n const isOnline = ref(true);\n const saveData = ref(false);\n const offlineAt = ref(void 0);\n const onlineAt = ref(void 0);\n const downlink = ref(void 0);\n const downlinkMax = ref(void 0);\n const rtt = ref(void 0);\n const effectiveType = ref(void 0);\n const type = ref(\"unknown\");\n const connection = isSupported.value && navigator.connection;\n function updateNetworkInformation() {\n if (!navigator)\n return;\n isOnline.value = navigator.onLine;\n offlineAt.value = isOnline.value ? void 0 : Date.now();\n onlineAt.value = isOnline.value ? Date.now() : void 0;\n if (connection) {\n downlink.value = connection.downlink;\n downlinkMax.value = connection.downlinkMax;\n effectiveType.value = connection.effectiveType;\n rtt.value = connection.rtt;\n saveData.value = connection.saveData;\n type.value = connection.type;\n }\n }\n if (window) {\n useEventListener(window, \"offline\", () => {\n isOnline.value = false;\n offlineAt.value = Date.now();\n });\n useEventListener(window, \"online\", () => {\n isOnline.value = true;\n onlineAt.value = Date.now();\n });\n }\n if (connection)\n useEventListener(connection, \"change\", updateNetworkInformation, false);\n updateNetworkInformation();\n return {\n isSupported: readonly(isSupported),\n isOnline: readonly(isOnline),\n saveData: readonly(saveData),\n offlineAt: readonly(offlineAt),\n onlineAt: readonly(onlineAt),\n downlink: readonly(downlink),\n downlinkMax: readonly(downlinkMax),\n effectiveType: readonly(effectiveType),\n rtt: readonly(rtt),\n type: readonly(type)\n };\n}\n\nfunction useNow(options = {}) {\n const {\n controls: exposeControls = false,\n interval = \"requestAnimationFrame\"\n } = options;\n const now = ref(/* @__PURE__ */ new Date());\n const update = () => now.value = /* @__PURE__ */ new Date();\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n if (exposeControls) {\n return {\n now,\n ...controls\n };\n } else {\n return now;\n }\n}\n\nfunction useObjectUrl(object) {\n const url = ref();\n const release = () => {\n if (url.value)\n URL.revokeObjectURL(url.value);\n url.value = void 0;\n };\n watch(\n () => toValue(object),\n (newObject) => {\n release();\n if (newObject)\n url.value = URL.createObjectURL(newObject);\n },\n { immediate: true }\n );\n tryOnScopeDispose(release);\n return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n if (typeof value === \"function\" || isReadonly(value))\n return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n const _value = ref(value);\n return computed({\n get() {\n return _value.value = clamp(_value.value, toValue(min), toValue(max));\n },\n set(value2) {\n _value.value = clamp(value2, toValue(min), toValue(max));\n }\n });\n}\n\nfunction useOffsetPagination(options) {\n const {\n total = Number.POSITIVE_INFINITY,\n pageSize = 10,\n page = 1,\n onPageChange = noop,\n onPageSizeChange = noop,\n onPageCountChange = noop\n } = options;\n const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n const pageCount = computed(() => Math.max(\n 1,\n Math.ceil(toValue(total) / toValue(currentPageSize))\n ));\n const currentPage = useClamp(page, 1, pageCount);\n const isFirstPage = computed(() => currentPage.value === 1);\n const isLastPage = computed(() => currentPage.value === pageCount.value);\n if (isRef(page)) {\n syncRef(page, currentPage, {\n direction: isReadonly(page) ? \"ltr\" : \"both\"\n });\n }\n if (isRef(pageSize)) {\n syncRef(pageSize, currentPageSize, {\n direction: isReadonly(pageSize) ? \"ltr\" : \"both\"\n });\n }\n function prev() {\n currentPage.value--;\n }\n function next() {\n currentPage.value++;\n }\n const returnValue = {\n currentPage,\n currentPageSize,\n pageCount,\n isFirstPage,\n isLastPage,\n prev,\n next\n };\n watch(currentPage, () => {\n onPageChange(reactive(returnValue));\n });\n watch(currentPageSize, () => {\n onPageSizeChange(reactive(returnValue));\n });\n watch(pageCount, () => {\n onPageCountChange(reactive(returnValue));\n });\n return returnValue;\n}\n\nfunction useOnline(options = {}) {\n const { isOnline } = useNetwork(options);\n return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n const { window = defaultWindow } = options;\n const isLeft = ref(false);\n const handler = (event) => {\n if (!window)\n return;\n event = event || window.event;\n const from = event.relatedTarget || event.toElement;\n isLeft.value = !from;\n };\n if (window) {\n useEventListener(window, \"mouseout\", handler, { passive: true });\n useEventListener(window.document, \"mouseleave\", handler, { passive: true });\n useEventListener(window.document, \"mouseenter\", handler, { passive: true });\n }\n return isLeft;\n}\n\nfunction useScreenOrientation(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n const screenOrientation = isSupported.value ? window.screen.orientation : {};\n const orientation = ref(screenOrientation.type);\n const angle = ref(screenOrientation.angle || 0);\n if (isSupported.value) {\n useEventListener(window, \"orientationchange\", () => {\n orientation.value = screenOrientation.type;\n angle.value = screenOrientation.angle;\n });\n }\n const lockOrientation = (type) => {\n if (isSupported.value && typeof screenOrientation.lock === \"function\")\n return screenOrientation.lock(type);\n return Promise.reject(new Error(\"Not supported\"));\n };\n const unlockOrientation = () => {\n if (isSupported.value && typeof screenOrientation.unlock === \"function\")\n screenOrientation.unlock();\n };\n return {\n isSupported,\n orientation,\n angle,\n lockOrientation,\n unlockOrientation\n };\n}\n\nfunction useParallax(target, options = {}) {\n const {\n deviceOrientationTiltAdjust = (i) => i,\n deviceOrientationRollAdjust = (i) => i,\n mouseTiltAdjust = (i) => i,\n mouseRollAdjust = (i) => i,\n window = defaultWindow\n } = options;\n const orientation = reactive(useDeviceOrientation({ window }));\n const screenOrientation = reactive(useScreenOrientation({ window }));\n const {\n elementX: x,\n elementY: y,\n elementWidth: width,\n elementHeight: height\n } = useMouseInElement(target, { handleOutside: false, window });\n const source = computed(() => {\n if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) {\n return \"deviceOrientation\";\n }\n return \"mouse\";\n });\n const roll = computed(() => {\n if (source.value === \"deviceOrientation\") {\n let value;\n switch (screenOrientation.orientation) {\n case \"landscape-primary\":\n value = orientation.gamma / 90;\n break;\n case \"landscape-secondary\":\n value = -orientation.gamma / 90;\n break;\n case \"portrait-primary\":\n value = -orientation.beta / 90;\n break;\n case \"portrait-secondary\":\n value = orientation.beta / 90;\n break;\n default:\n value = -orientation.beta / 90;\n }\n return deviceOrientationRollAdjust(value);\n } else {\n const value = -(y.value - height.value / 2) / height.value;\n return mouseRollAdjust(value);\n }\n });\n const tilt = computed(() => {\n if (source.value === \"deviceOrientation\") {\n let value;\n switch (screenOrientation.orientation) {\n case \"landscape-primary\":\n value = orientation.beta / 90;\n break;\n case \"landscape-secondary\":\n value = -orientation.beta / 90;\n break;\n case \"portrait-primary\":\n value = orientation.gamma / 90;\n break;\n case \"portrait-secondary\":\n value = -orientation.gamma / 90;\n break;\n default:\n value = orientation.gamma / 90;\n }\n return deviceOrientationTiltAdjust(value);\n } else {\n const value = (x.value - width.value / 2) / width.value;\n return mouseTiltAdjust(value);\n }\n });\n return { roll, tilt, source };\n}\n\nfunction useParentElement(element = useCurrentElement()) {\n const parentElement = shallowRef();\n const update = () => {\n const el = unrefElement(element);\n if (el)\n parentElement.value = el.parentElement;\n };\n tryOnMounted(update);\n watch(() => toValue(element), update);\n return parentElement;\n}\n\nfunction usePerformanceObserver(options, callback) {\n const {\n window = defaultWindow,\n immediate = true,\n ...performanceOptions\n } = options;\n const isSupported = useSupported(() => window && \"PerformanceObserver\" in window);\n let observer;\n const stop = () => {\n observer == null ? void 0 : observer.disconnect();\n };\n const start = () => {\n if (isSupported.value) {\n stop();\n observer = new PerformanceObserver(callback);\n observer.observe(performanceOptions);\n }\n };\n tryOnScopeDispose(stop);\n if (immediate)\n start();\n return {\n isSupported,\n start,\n stop\n };\n}\n\nconst defaultState = {\n x: 0,\n y: 0,\n pointerId: 0,\n pressure: 0,\n tiltX: 0,\n tiltY: 0,\n width: 0,\n height: 0,\n twist: 0,\n pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n const {\n target = defaultWindow\n } = options;\n const isInside = ref(false);\n const state = ref(options.initialValue || {});\n Object.assign(state.value, defaultState, state.value);\n const handler = (event) => {\n isInside.value = true;\n if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n return;\n state.value = objectPick(event, keys, false);\n };\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"pointerdown\", \"pointermove\", \"pointerup\"], handler, listenerOptions);\n useEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n }\n return {\n ...toRefs(state),\n isInside\n };\n}\n\nfunction usePointerLock(target, options = {}) {\n const { document = defaultDocument } = options;\n const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n const element = ref();\n const triggerElement = ref();\n let targetElement;\n if (isSupported.value) {\n useEventListener(document, \"pointerlockchange\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n element.value = document.pointerLockElement;\n if (!element.value)\n targetElement = triggerElement.value = null;\n }\n });\n useEventListener(document, \"pointerlockerror\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n const action = document.pointerLockElement ? \"release\" : \"acquire\";\n throw new Error(`Failed to ${action} pointer lock.`);\n }\n });\n }\n async function lock(e) {\n var _a;\n if (!isSupported.value)\n throw new Error(\"Pointer Lock API is not supported by your browser.\");\n triggerElement.value = e instanceof Event ? e.currentTarget : null;\n targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n if (!targetElement)\n throw new Error(\"Target element undefined.\");\n targetElement.requestPointerLock();\n return await until(element).toBe(targetElement);\n }\n async function unlock() {\n if (!element.value)\n return false;\n document.exitPointerLock();\n await until(element).toBeNull();\n return true;\n }\n return {\n isSupported,\n element,\n triggerElement,\n lock,\n unlock\n };\n}\n\nfunction usePointerSwipe(target, options = {}) {\n const targetRef = toRef(target);\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n disableTextSelect = false\n } = options;\n const posStart = reactive({ x: 0, y: 0 });\n const updatePosStart = (x, y) => {\n posStart.x = x;\n posStart.y = y;\n };\n const posEnd = reactive({ x: 0, y: 0 });\n const updatePosEnd = (x, y) => {\n posEnd.x = x;\n posEnd.y = y;\n };\n const distanceX = computed(() => posStart.x - posEnd.x);\n const distanceY = computed(() => posStart.y - posEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n const isSwiping = ref(false);\n const isPointerDown = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(distanceX.value) > abs(distanceY.value)) {\n return distanceX.value > 0 ? \"left\" : \"right\";\n } else {\n return distanceY.value > 0 ? \"up\" : \"down\";\n }\n });\n const eventIsAllowed = (e) => {\n var _a, _b, _c;\n const isReleasingButton = e.buttons === 0;\n const isPrimaryButton = e.buttons === 1;\n return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n };\n const stops = [\n useEventListener(target, \"pointerdown\", (e) => {\n if (!eventIsAllowed(e))\n return;\n isPointerDown.value = true;\n const eventTarget = e.target;\n eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n const { clientX: x, clientY: y } = e;\n updatePosStart(x, y);\n updatePosEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }),\n useEventListener(target, \"pointermove\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (!isPointerDown.value)\n return;\n const { clientX: x, clientY: y } = e;\n updatePosEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }),\n useEventListener(target, \"pointerup\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isPointerDown.value = false;\n isSwiping.value = false;\n })\n ];\n tryOnMounted(() => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n if (disableTextSelect) {\n (_d = (_c = targetRef.value) == null ? void 0 : _c.style) == null ? void 0 : _d.setProperty(\"-webkit-user-select\", \"none\");\n (_f = (_e = targetRef.value) == null ? void 0 : _e.style) == null ? void 0 : _f.setProperty(\"-ms-user-select\", \"none\");\n (_h = (_g = targetRef.value) == null ? void 0 : _g.style) == null ? void 0 : _h.setProperty(\"user-select\", \"none\");\n }\n });\n const stop = () => stops.forEach((s) => s());\n return {\n isSwiping: readonly(isSwiping),\n direction: readonly(direction),\n posStart: readonly(posStart),\n posEnd: readonly(posEnd),\n distanceX,\n distanceY,\n stop\n };\n}\n\nfunction usePreferredColorScheme(options) {\n const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n return computed(() => {\n if (isDark.value)\n return \"dark\";\n if (isLight.value)\n return \"light\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredContrast(options) {\n const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n return computed(() => {\n if (isMore.value)\n return \"more\";\n if (isLess.value)\n return \"less\";\n if (isCustom.value)\n return \"custom\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredLanguages(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref([\"en\"]);\n const navigator = window.navigator;\n const value = ref(navigator.languages);\n useEventListener(window, \"languagechange\", () => {\n value.value = navigator.languages;\n });\n return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n return computed(() => {\n if (isReduced.value)\n return \"reduce\";\n return \"no-preference\";\n });\n}\n\nfunction usePrevious(value, initialValue) {\n const previous = shallowRef(initialValue);\n watch(\n toRef(value),\n (_, oldValue) => {\n previous.value = oldValue;\n },\n { flush: \"sync\" }\n );\n return readonly(previous);\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n const top = ref(\"\");\n const right = ref(\"\");\n const bottom = ref(\"\");\n const left = ref(\"\");\n if (isClient) {\n const topCssVar = useCssVar(topVarName);\n const rightCssVar = useCssVar(rightVarName);\n const bottomCssVar = useCssVar(bottomVarName);\n const leftCssVar = useCssVar(leftVarName);\n topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n update();\n useEventListener(\"resize\", useDebounceFn(update));\n }\n function update() {\n top.value = getValue(topVarName);\n right.value = getValue(rightVarName);\n bottom.value = getValue(bottomVarName);\n left.value = getValue(leftVarName);\n }\n return {\n top,\n right,\n bottom,\n left,\n update\n };\n}\nfunction getValue(position) {\n return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n const {\n immediate = true,\n manual = false,\n type = \"text/javascript\",\n async = true,\n crossOrigin,\n referrerPolicy,\n noModule,\n defer,\n document = defaultDocument,\n attrs = {}\n } = options;\n const scriptTag = ref(null);\n let _promise = null;\n const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n const resolveWithElement = (el2) => {\n scriptTag.value = el2;\n resolve(el2);\n return el2;\n };\n if (!document) {\n resolve(false);\n return;\n }\n let shouldAppend = false;\n let el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (!el) {\n el = document.createElement(\"script\");\n el.type = type;\n el.async = async;\n el.src = toValue(src);\n if (defer)\n el.defer = defer;\n if (crossOrigin)\n el.crossOrigin = crossOrigin;\n if (noModule)\n el.noModule = noModule;\n if (referrerPolicy)\n el.referrerPolicy = referrerPolicy;\n Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));\n shouldAppend = true;\n } else if (el.hasAttribute(\"data-loaded\")) {\n resolveWithElement(el);\n }\n el.addEventListener(\"error\", (event) => reject(event));\n el.addEventListener(\"abort\", (event) => reject(event));\n el.addEventListener(\"load\", () => {\n el.setAttribute(\"data-loaded\", \"true\");\n onLoaded(el);\n resolveWithElement(el);\n });\n if (shouldAppend)\n el = document.head.appendChild(el);\n if (!waitForScriptLoad)\n resolveWithElement(el);\n });\n const load = (waitForScriptLoad = true) => {\n if (!_promise)\n _promise = loadScript(waitForScriptLoad);\n return _promise;\n };\n const unload = () => {\n if (!document)\n return;\n _promise = null;\n if (scriptTag.value)\n scriptTag.value = null;\n const el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (el)\n document.head.removeChild(el);\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnUnmounted(unload);\n return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n const style = window.getComputedStyle(ele);\n if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n return true;\n } else {\n const parent = ele.parentNode;\n if (!parent || parent.tagName === \"BODY\")\n return false;\n return checkOverflowScroll(parent);\n }\n}\nfunction preventDefault(rawEvent) {\n const e = rawEvent || window.event;\n const _target = e.target;\n if (checkOverflowScroll(_target))\n return false;\n if (e.touches.length > 1)\n return true;\n if (e.preventDefault)\n e.preventDefault();\n return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n const isLocked = ref(initialState);\n let stopTouchMoveListener = null;\n let initialOverflow = \"\";\n watch(toRef(element), (el) => {\n const target = resolveElement(toValue(el));\n if (target) {\n const ele = target;\n if (!elInitialOverflow.get(ele))\n elInitialOverflow.set(ele, ele.style.overflow);\n if (ele.style.overflow !== \"hidden\")\n initialOverflow = ele.style.overflow;\n if (ele.style.overflow === \"hidden\")\n return isLocked.value = true;\n if (isLocked.value)\n return ele.style.overflow = \"hidden\";\n }\n }, {\n immediate: true\n });\n const lock = () => {\n const el = resolveElement(toValue(element));\n if (!el || isLocked.value)\n return;\n if (isIOS) {\n stopTouchMoveListener = useEventListener(\n el,\n \"touchmove\",\n (e) => {\n preventDefault(e);\n },\n { passive: false }\n );\n }\n el.style.overflow = \"hidden\";\n isLocked.value = true;\n };\n const unlock = () => {\n const el = resolveElement(toValue(element));\n if (!el || !isLocked.value)\n return;\n if (isIOS)\n stopTouchMoveListener == null ? void 0 : stopTouchMoveListener();\n el.style.overflow = initialOverflow;\n elInitialOverflow.delete(el);\n isLocked.value = false;\n };\n tryOnScopeDispose(unlock);\n return computed({\n get() {\n return isLocked.value;\n },\n set(v) {\n if (v)\n lock();\n else unlock();\n }\n });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nfunction useShare(shareOptions = {}, options = {}) {\n const { navigator = defaultNavigator } = options;\n const _navigator = navigator;\n const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n const share = async (overrideOptions = {}) => {\n if (isSupported.value) {\n const data = {\n ...toValue(shareOptions),\n ...toValue(overrideOptions)\n };\n let granted = true;\n if (data.files && _navigator.canShare)\n granted = _navigator.canShare({ files: data.files });\n if (granted)\n return _navigator.share(data);\n }\n };\n return {\n isSupported,\n share\n };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n var _a, _b, _c, _d;\n const [source] = args;\n let compareFn = defaultCompare;\n let options = {};\n if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n options = args[1];\n compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n } else {\n compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n }\n } else if (args.length > 2) {\n compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n options = (_d = args[2]) != null ? _d : {};\n }\n const {\n dirty = false,\n sortFn = defaultSortFn\n } = options;\n if (!dirty)\n return computed(() => sortFn([...toValue(source)], compareFn));\n watchEffect(() => {\n const result = sortFn(toValue(source), compareFn);\n if (isRef(source))\n source.value = result;\n else\n source.splice(0, source.length, ...result);\n });\n return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n const {\n interimResults = true,\n continuous = true,\n maxAlternatives = 1,\n window = defaultWindow\n } = options;\n const lang = toRef(options.lang || \"en-US\");\n const isListening = ref(false);\n const isFinal = ref(false);\n const result = ref(\"\");\n const error = shallowRef(void 0);\n const toggle = (value = !isListening.value) => {\n isListening.value = value;\n };\n const start = () => {\n isListening.value = true;\n };\n const stop = () => {\n isListening.value = false;\n };\n const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n const isSupported = useSupported(() => SpeechRecognition);\n let recognition;\n if (isSupported.value) {\n recognition = new SpeechRecognition();\n recognition.continuous = continuous;\n recognition.interimResults = interimResults;\n recognition.lang = toValue(lang);\n recognition.maxAlternatives = maxAlternatives;\n recognition.onstart = () => {\n isFinal.value = false;\n };\n watch(lang, (lang2) => {\n if (recognition && !isListening.value)\n recognition.lang = lang2;\n });\n recognition.onresult = (event) => {\n const currentResult = event.results[event.resultIndex];\n const { transcript } = currentResult[0];\n isFinal.value = currentResult.isFinal;\n result.value = transcript;\n error.value = void 0;\n };\n recognition.onerror = (event) => {\n error.value = event;\n };\n recognition.onend = () => {\n isListening.value = false;\n recognition.lang = toValue(lang);\n };\n watch(isListening, () => {\n if (isListening.value)\n recognition.start();\n else\n recognition.stop();\n });\n }\n tryOnScopeDispose(() => {\n isListening.value = false;\n });\n return {\n isSupported,\n isListening,\n isFinal,\n recognition,\n result,\n error,\n toggle,\n start,\n stop\n };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n const {\n pitch = 1,\n rate = 1,\n volume = 1,\n window = defaultWindow\n } = options;\n const synth = window && window.speechSynthesis;\n const isSupported = useSupported(() => synth);\n const isPlaying = ref(false);\n const status = ref(\"init\");\n const spokenText = toRef(text || \"\");\n const lang = toRef(options.lang || \"en-US\");\n const error = shallowRef(void 0);\n const toggle = (value = !isPlaying.value) => {\n isPlaying.value = value;\n };\n const bindEventsForUtterance = (utterance2) => {\n utterance2.lang = toValue(lang);\n utterance2.voice = toValue(options.voice) || null;\n utterance2.pitch = toValue(pitch);\n utterance2.rate = toValue(rate);\n utterance2.volume = volume;\n utterance2.onstart = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onpause = () => {\n isPlaying.value = false;\n status.value = \"pause\";\n };\n utterance2.onresume = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onend = () => {\n isPlaying.value = false;\n status.value = \"end\";\n };\n utterance2.onerror = (event) => {\n error.value = event;\n };\n };\n const utterance = computed(() => {\n isPlaying.value = false;\n status.value = \"init\";\n const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n bindEventsForUtterance(newUtterance);\n return newUtterance;\n });\n const speak = () => {\n synth.cancel();\n if (utterance)\n synth.speak(utterance.value);\n };\n const stop = () => {\n synth.cancel();\n isPlaying.value = false;\n };\n if (isSupported.value) {\n bindEventsForUtterance(utterance.value);\n watch(lang, (lang2) => {\n if (utterance.value && !isPlaying.value)\n utterance.value.lang = lang2;\n });\n if (options.voice) {\n watch(options.voice, () => {\n synth.cancel();\n });\n }\n watch(isPlaying, () => {\n if (isPlaying.value)\n synth.resume();\n else\n synth.pause();\n });\n }\n tryOnScopeDispose(() => {\n isPlaying.value = false;\n });\n return {\n isSupported,\n isPlaying,\n status,\n utterance,\n error,\n stop,\n toggle,\n speak\n };\n}\n\nfunction useStepper(steps, initialStep) {\n const stepsRef = ref(steps);\n const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n const current = computed(() => at(index.value));\n const isFirst = computed(() => index.value === 0);\n const isLast = computed(() => index.value === stepNames.value.length - 1);\n const next = computed(() => stepNames.value[index.value + 1]);\n const previous = computed(() => stepNames.value[index.value - 1]);\n function at(index2) {\n if (Array.isArray(stepsRef.value))\n return stepsRef.value[index2];\n return stepsRef.value[stepNames.value[index2]];\n }\n function get(step) {\n if (!stepNames.value.includes(step))\n return;\n return at(stepNames.value.indexOf(step));\n }\n function goTo(step) {\n if (stepNames.value.includes(step))\n index.value = stepNames.value.indexOf(step);\n }\n function goToNext() {\n if (isLast.value)\n return;\n index.value++;\n }\n function goToPrevious() {\n if (isFirst.value)\n return;\n index.value--;\n }\n function goBackTo(step) {\n if (isAfter(step))\n goTo(step);\n }\n function isNext(step) {\n return stepNames.value.indexOf(step) === index.value + 1;\n }\n function isPrevious(step) {\n return stepNames.value.indexOf(step) === index.value - 1;\n }\n function isCurrent(step) {\n return stepNames.value.indexOf(step) === index.value;\n }\n function isBefore(step) {\n return index.value < stepNames.value.indexOf(step);\n }\n function isAfter(step) {\n return index.value > stepNames.value.indexOf(step);\n }\n return {\n steps: stepsRef,\n stepNames,\n index,\n current,\n next,\n previous,\n isFirst,\n isLast,\n at,\n get,\n goTo,\n goToNext,\n goToPrevious,\n goBackTo,\n isNext,\n isPrevious,\n isCurrent,\n isBefore,\n isAfter\n };\n}\n\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const rawInit = toValue(initialValue);\n const type = guessSerializerType(rawInit);\n const data = (shallow ? shallowRef : ref)(initialValue);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorageAsync\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n async function read(event) {\n if (!storage || event && event.key !== key)\n return;\n try {\n const rawValue = event ? event.newValue : await storage.getItem(key);\n if (rawValue == null) {\n data.value = rawInit;\n if (writeDefaults && rawInit !== null)\n await storage.setItem(key, await serializer.write(rawInit));\n } else if (mergeDefaults) {\n const value = await serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n data.value = mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n data.value = { ...rawInit, ...value };\n else data.value = value;\n } else {\n data.value = await serializer.read(rawValue);\n }\n } catch (e) {\n onError(e);\n }\n }\n read();\n if (window && listenToStorageChanges)\n useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)));\n if (storage) {\n watchWithFilter(\n data,\n async () => {\n try {\n if (data.value == null)\n await storage.removeItem(key);\n else\n await storage.setItem(key, await serializer.write(data.value));\n } catch (e) {\n onError(e);\n }\n },\n {\n flush,\n deep,\n eventFilter\n }\n );\n }\n return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n const isLoaded = ref(false);\n const {\n document = defaultDocument,\n immediate = true,\n manual = false,\n id = `vueuse_styletag_${++_id}`\n } = options;\n const cssRef = ref(css);\n let stop = () => {\n };\n const load = () => {\n if (!document)\n return;\n const el = document.getElementById(id) || document.createElement(\"style\");\n if (!el.isConnected) {\n el.id = id;\n if (options.media)\n el.media = options.media;\n document.head.appendChild(el);\n }\n if (isLoaded.value)\n return;\n stop = watch(\n cssRef,\n (value) => {\n el.textContent = value;\n },\n { immediate: true }\n );\n isLoaded.value = true;\n };\n const unload = () => {\n if (!document || !isLoaded.value)\n return;\n stop();\n document.head.removeChild(document.getElementById(id));\n isLoaded.value = false;\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnScopeDispose(unload);\n return {\n id,\n css: cssRef,\n unload,\n load,\n isLoaded: readonly(isLoaded)\n };\n}\n\nfunction useSwipe(target, options = {}) {\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n passive = true,\n window = defaultWindow\n } = options;\n const coordsStart = reactive({ x: 0, y: 0 });\n const coordsEnd = reactive({ x: 0, y: 0 });\n const diffX = computed(() => coordsStart.x - coordsEnd.x);\n const diffY = computed(() => coordsStart.y - coordsEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n const isSwiping = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(diffX.value) > abs(diffY.value)) {\n return diffX.value > 0 ? \"left\" : \"right\";\n } else {\n return diffY.value > 0 ? \"up\" : \"down\";\n }\n });\n const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n const updateCoordsStart = (x, y) => {\n coordsStart.x = x;\n coordsStart.y = y;\n };\n const updateCoordsEnd = (x, y) => {\n coordsEnd.x = x;\n coordsEnd.y = y;\n };\n let listenerOptions;\n const isPassiveEventSupported = checkPassiveEventSupport(window == null ? void 0 : window.document);\n if (!passive)\n listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true };\n else\n listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false };\n const onTouchEnd = (e) => {\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isSwiping.value = false;\n };\n const stops = [\n useEventListener(target, \"touchstart\", (e) => {\n if (e.touches.length !== 1)\n return;\n const [x, y] = getTouchEventCoords(e);\n updateCoordsStart(x, y);\n updateCoordsEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }, listenerOptions),\n useEventListener(target, \"touchmove\", (e) => {\n if (e.touches.length !== 1)\n return;\n const [x, y] = getTouchEventCoords(e);\n updateCoordsEnd(x, y);\n if (listenerOptions.capture && !listenerOptions.passive && Math.abs(diffX.value) > Math.abs(diffY.value))\n e.preventDefault();\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }, listenerOptions),\n useEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n ];\n const stop = () => stops.forEach((s) => s());\n return {\n isPassiveEventSupported,\n isSwiping,\n direction,\n coordsStart,\n coordsEnd,\n lengthX: diffX,\n lengthY: diffY,\n stop\n };\n}\nfunction checkPassiveEventSupport(document) {\n if (!document)\n return false;\n let supportsPassive = false;\n const optionsBlock = {\n get passive() {\n supportsPassive = true;\n return false;\n }\n };\n document.addEventListener(\"x\", noop, optionsBlock);\n document.removeEventListener(\"x\", noop);\n return supportsPassive;\n}\n\nfunction useTemplateRefsList() {\n const refs = ref([]);\n refs.value.set = (el) => {\n if (el)\n refs.value.push(el);\n };\n onBeforeUpdate(() => {\n refs.value.length = 0;\n });\n return refs;\n}\n\nfunction useTextDirection(options = {}) {\n const {\n document = defaultDocument,\n selector = \"html\",\n observe = false,\n initialValue = \"ltr\"\n } = options;\n function getValue() {\n var _a, _b;\n return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n }\n const dir = ref(getValue());\n tryOnMounted(() => dir.value = getValue());\n if (observe && document) {\n useMutationObserver(\n document.querySelector(selector),\n () => dir.value = getValue(),\n { attributes: true }\n );\n }\n return computed({\n get() {\n return dir.value;\n },\n set(v) {\n var _a, _b;\n dir.value = v;\n if (!document)\n return;\n if (dir.value)\n (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute(\"dir\", dir.value);\n else\n (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute(\"dir\");\n }\n });\n}\n\nfunction getRangesFromSelection(selection) {\n var _a;\n const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\nfunction useTextSelection(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const selection = ref(null);\n const text = computed(() => {\n var _a, _b;\n return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n });\n const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n function onSelectionChange() {\n selection.value = null;\n if (window)\n selection.value = window.getSelection();\n }\n if (window)\n useEventListener(window.document, \"selectionchange\", onSelectionChange);\n return {\n text,\n rects,\n ranges,\n selection\n };\n}\n\nfunction useTextareaAutosize(options) {\n var _a;\n const textarea = ref(options == null ? void 0 : options.element);\n const input = ref(options == null ? void 0 : options.input);\n const styleProp = (_a = options == null ? void 0 : options.styleProp) != null ? _a : \"height\";\n const textareaScrollHeight = ref(1);\n const textareaOldWidth = ref(0);\n function triggerResize() {\n var _a2;\n if (!textarea.value)\n return;\n let height = \"\";\n textarea.value.style[styleProp] = \"1px\";\n textareaScrollHeight.value = (_a2 = textarea.value) == null ? void 0 : _a2.scrollHeight;\n const _styleTarget = toValue(options == null ? void 0 : options.styleTarget);\n if (_styleTarget)\n _styleTarget.style[styleProp] = `${textareaScrollHeight.value}px`;\n else\n height = `${textareaScrollHeight.value}px`;\n textarea.value.style[styleProp] = height;\n }\n watch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n watch(textareaScrollHeight, () => {\n var _a2;\n return (_a2 = options == null ? void 0 : options.onResize) == null ? void 0 : _a2.call(options);\n });\n useResizeObserver(textarea, ([{ contentRect }]) => {\n if (textareaOldWidth.value === contentRect.width)\n return;\n textareaOldWidth.value = contentRect.width;\n triggerResize();\n });\n if (options == null ? void 0 : options.watch)\n watch(options.watch, triggerResize, { immediate: true, deep: true });\n return {\n textarea,\n input,\n triggerResize\n };\n}\n\nfunction useThrottledRefHistory(source, options = {}) {\n const { throttle = 200, trailing = true } = options;\n const filter = throttleFilter(throttle, trailing);\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nconst DEFAULT_UNITS = [\n { max: 6e4, value: 1e3, name: \"second\" },\n { max: 276e4, value: 6e4, name: \"minute\" },\n { max: 72e6, value: 36e5, name: \"hour\" },\n { max: 5184e5, value: 864e5, name: \"day\" },\n { max: 24192e5, value: 6048e5, name: \"week\" },\n { max: 28512e6, value: 2592e6, name: \"month\" },\n { max: Number.POSITIVE_INFINITY, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n justNow: \"just now\",\n past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n invalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n return date.toISOString().slice(0, 10);\n}\nfunction useTimeAgo(time, options = {}) {\n const {\n controls: exposeControls = false,\n updateInterval = 3e4\n } = options;\n const { now, ...controls } = useNow({ interval: updateInterval, controls: true });\n const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n if (exposeControls) {\n return {\n timeAgo,\n ...controls\n };\n } else {\n return timeAgo;\n }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n var _a;\n const {\n max,\n messages = DEFAULT_MESSAGES,\n fullDateFormatter = DEFAULT_FORMATTER,\n units = DEFAULT_UNITS,\n showSecond = false,\n rounding = \"round\"\n } = options;\n const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n const diff = +now - +from;\n const absDiff = Math.abs(diff);\n function getValue(diff2, unit) {\n return roundFn(Math.abs(diff2) / unit.value);\n }\n function format(diff2, unit) {\n const val = getValue(diff2, unit);\n const past = diff2 > 0;\n const str = applyFormat(unit.name, val, past);\n return applyFormat(past ? \"past\" : \"future\", str, past);\n }\n function applyFormat(name, val, isPast) {\n const formatter = messages[name];\n if (typeof formatter === \"function\")\n return formatter(val, isPast);\n return formatter.replace(\"{0}\", val.toString());\n }\n if (absDiff < 6e4 && !showSecond)\n return messages.justNow;\n if (typeof max === \"number\" && absDiff > max)\n return fullDateFormatter(new Date(from));\n if (typeof max === \"string\") {\n const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;\n if (unitMax && absDiff > unitMax)\n return fullDateFormatter(new Date(from));\n }\n for (const [idx, unit] of units.entries()) {\n const val = getValue(diff, unit);\n if (val <= 0 && units[idx - 1])\n return format(diff, units[idx - 1]);\n if (absDiff < unit.max)\n return format(diff, unit);\n }\n return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, timeoutPollOptions) {\n const { start } = useTimeoutFn(loop, interval, { immediate: false });\n const isActive = ref(false);\n async function loop() {\n if (!isActive.value)\n return;\n await fn();\n start();\n }\n function resume() {\n if (!isActive.value) {\n isActive.value = true;\n loop();\n }\n }\n function pause() {\n isActive.value = false;\n }\n if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useTimestamp(options = {}) {\n const {\n controls: exposeControls = false,\n offset = 0,\n immediate = true,\n interval = \"requestAnimationFrame\",\n callback\n } = options;\n const ts = ref(timestamp() + offset);\n const update = () => ts.value = timestamp() + offset;\n const cb = callback ? () => {\n update();\n callback(ts.value);\n } : update;\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n if (exposeControls) {\n return {\n timestamp: ts,\n ...controls\n };\n } else {\n return ts;\n }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n var _a, _b, _c;\n const {\n document = defaultDocument,\n restoreOnUnmount = (t) => t\n } = options;\n const originalTitle = (_a = document == null ? void 0 : document.title) != null ? _a : \"\";\n const title = toRef((_b = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _b : null);\n const isReadonly = newTitle && typeof newTitle === \"function\";\n function format(t) {\n if (!(\"titleTemplate\" in options))\n return t;\n const template = options.titleTemplate || \"%s\";\n return typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n }\n watch(\n title,\n (t, o) => {\n if (t !== o && document)\n document.title = format(typeof t === \"string\" ? t : \"\");\n },\n { immediate: true }\n );\n if (options.observe && !options.titleTemplate && document && !isReadonly) {\n useMutationObserver(\n (_c = document.head) == null ? void 0 : _c.querySelector(\"title\"),\n () => {\n if (document && document.title !== title.value)\n title.value = format(document.title);\n },\n { childList: true }\n );\n }\n tryOnBeforeUnmount(() => {\n if (restoreOnUnmount) {\n const restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n if (restoredTitle != null && document)\n document.title = restoredTitle;\n }\n });\n return title;\n}\n\nconst _TransitionPresets = {\n easeInSine: [0.12, 0, 0.39, 0],\n easeOutSine: [0.61, 1, 0.88, 1],\n easeInOutSine: [0.37, 0, 0.63, 1],\n easeInQuad: [0.11, 0, 0.5, 0],\n easeOutQuad: [0.5, 1, 0.89, 1],\n easeInOutQuad: [0.45, 0, 0.55, 1],\n easeInCubic: [0.32, 0, 0.67, 0],\n easeOutCubic: [0.33, 1, 0.68, 1],\n easeInOutCubic: [0.65, 0, 0.35, 1],\n easeInQuart: [0.5, 0, 0.75, 0],\n easeOutQuart: [0.25, 1, 0.5, 1],\n easeInOutQuart: [0.76, 0, 0.24, 1],\n easeInQuint: [0.64, 0, 0.78, 0],\n easeOutQuint: [0.22, 1, 0.36, 1],\n easeInOutQuint: [0.83, 0, 0.17, 1],\n easeInExpo: [0.7, 0, 0.84, 0],\n easeOutExpo: [0.16, 1, 0.3, 1],\n easeInOutExpo: [0.87, 0, 0.13, 1],\n easeInCirc: [0.55, 0, 1, 0.45],\n easeOutCirc: [0, 0.55, 0.45, 1],\n easeInOutCirc: [0.85, 0, 0.15, 1],\n easeInBack: [0.36, 0, 0.66, -0.56],\n easeOutBack: [0.34, 1.56, 0.64, 1],\n easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n const b = (a1, a2) => 3 * a2 - 6 * a1;\n const c = (a1) => 3 * a1;\n const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n const getTforX = (x) => {\n let aGuessT = x;\n for (let i = 0; i < 4; ++i) {\n const currentSlope = getSlope(aGuessT, p0, p2);\n if (currentSlope === 0)\n return aGuessT;\n const currentX = calcBezier(aGuessT, p0, p2) - x;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n };\n return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n return a + alpha * (b - a);\n}\nfunction toVec(t) {\n return (typeof t === \"number\" ? [t] : t) || [];\n}\nfunction executeTransition(source, from, to, options = {}) {\n var _a, _b;\n const fromVal = toValue(from);\n const toVal = toValue(to);\n const v1 = toVec(fromVal);\n const v2 = toVec(toVal);\n const duration = (_a = toValue(options.duration)) != null ? _a : 1e3;\n const startedAt = Date.now();\n const endAt = Date.now() + duration;\n const trans = typeof options.transition === \"function\" ? options.transition : (_b = toValue(options.transition)) != null ? _b : identity;\n const ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n return new Promise((resolve) => {\n source.value = fromVal;\n const tick = () => {\n var _a2;\n if ((_a2 = options.abort) == null ? void 0 : _a2.call(options)) {\n resolve();\n return;\n }\n const now = Date.now();\n const alpha = ease((now - startedAt) / duration);\n const arr = toVec(source.value).map((n, i) => lerp(v1[i], v2[i], alpha));\n if (Array.isArray(source.value))\n source.value = arr.map((n, i) => {\n var _a3, _b2;\n return lerp((_a3 = v1[i]) != null ? _a3 : 0, (_b2 = v2[i]) != null ? _b2 : 0, alpha);\n });\n else if (typeof source.value === \"number\")\n source.value = arr[0];\n if (now < endAt) {\n requestAnimationFrame(tick);\n } else {\n source.value = toVal;\n resolve();\n }\n };\n tick();\n });\n}\nfunction useTransition(source, options = {}) {\n let currentId = 0;\n const sourceVal = () => {\n const v = toValue(source);\n return typeof v === \"number\" ? v : v.map(toValue);\n };\n const outputRef = ref(sourceVal());\n watch(sourceVal, async (to) => {\n var _a, _b;\n if (toValue(options.disabled))\n return;\n const id = ++currentId;\n if (options.delay)\n await promiseTimeout(toValue(options.delay));\n if (id !== currentId)\n return;\n const toVal = Array.isArray(to) ? to.map(toValue) : toValue(to);\n (_a = options.onStarted) == null ? void 0 : _a.call(options);\n await executeTransition(outputRef, outputRef.value, toVal, {\n ...options,\n abort: () => {\n var _a2;\n return id !== currentId || ((_a2 = options.abort) == null ? void 0 : _a2.call(options));\n }\n });\n (_b = options.onFinished) == null ? void 0 : _b.call(options);\n }, { deep: true });\n watch(() => toValue(options.disabled), (disabled) => {\n if (disabled) {\n currentId++;\n outputRef.value = sourceVal();\n }\n });\n tryOnScopeDispose(() => {\n currentId++;\n });\n return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n const {\n initialValue = {},\n removeNullishValues = true,\n removeFalsyValues = false,\n write: enableWrite = true,\n window = defaultWindow\n } = options;\n if (!window)\n return reactive(initialValue);\n const state = reactive({});\n function getRawParams() {\n if (mode === \"history\") {\n return window.location.search || \"\";\n } else if (mode === \"hash\") {\n const hash = window.location.hash || \"\";\n const index = hash.indexOf(\"?\");\n return index > 0 ? hash.slice(index) : \"\";\n } else {\n return (window.location.hash || \"\").replace(/^#/, \"\");\n }\n }\n function constructQuery(params) {\n const stringified = params.toString();\n if (mode === \"history\")\n return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n if (mode === \"hash-params\")\n return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n const hash = window.location.hash || \"#\";\n const index = hash.indexOf(\"?\");\n if (index > 0)\n return `${window.location.search || \"\"}${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n return `${window.location.search || \"\"}${hash}${stringified ? `?${stringified}` : \"\"}`;\n }\n function read() {\n return new URLSearchParams(getRawParams());\n }\n function updateState(params) {\n const unusedKeys = new Set(Object.keys(state));\n for (const key of params.keys()) {\n const paramsForKey = params.getAll(key);\n state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n unusedKeys.delete(key);\n }\n Array.from(unusedKeys).forEach((key) => delete state[key]);\n }\n const { pause, resume } = pausableWatch(\n state,\n () => {\n const params = new URLSearchParams(\"\");\n Object.keys(state).forEach((key) => {\n const mapEntry = state[key];\n if (Array.isArray(mapEntry))\n mapEntry.forEach((value) => params.append(key, value));\n else if (removeNullishValues && mapEntry == null)\n params.delete(key);\n else if (removeFalsyValues && !mapEntry)\n params.delete(key);\n else\n params.set(key, mapEntry);\n });\n write(params);\n },\n { deep: true }\n );\n function write(params, shouldUpdate) {\n pause();\n if (shouldUpdate)\n updateState(params);\n window.history.replaceState(\n window.history.state,\n window.document.title,\n window.location.pathname + constructQuery(params)\n );\n resume();\n }\n function onChanged() {\n if (!enableWrite)\n return;\n write(read(), true);\n }\n useEventListener(window, \"popstate\", onChanged, false);\n if (mode !== \"history\")\n useEventListener(window, \"hashchange\", onChanged, false);\n const initial = read();\n if (initial.keys().next().value)\n updateState(initial);\n else\n Object.assign(state, initialValue);\n return state;\n}\n\nfunction useUserMedia(options = {}) {\n var _a, _b;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);\n const constraints = ref(options.constraints);\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;\n });\n const stream = shallowRef();\n function getDeviceOptions(type) {\n switch (type) {\n case \"video\": {\n if (constraints.value)\n return constraints.value.video || false;\n break;\n }\n case \"audio\": {\n if (constraints.value)\n return constraints.value.audio || false;\n break;\n }\n }\n }\n async function _start() {\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getUserMedia({\n video: getDeviceOptions(\"video\"),\n audio: getDeviceOptions(\"audio\")\n });\n return stream.value;\n }\n function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n async function restart() {\n _stop();\n return await start();\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else _stop();\n },\n { immediate: true }\n );\n watch(\n constraints,\n () => {\n if (autoSwitch.value && stream.value)\n restart();\n },\n { immediate: true }\n );\n tryOnScopeDispose(() => {\n stop();\n });\n return {\n isSupported,\n stream,\n start,\n stop,\n restart,\n constraints,\n enabled,\n autoSwitch\n };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n var _a, _b, _c, _d, _e;\n const {\n clone = false,\n passive = false,\n eventName,\n deep = false,\n defaultValue,\n shouldEmit\n } = options;\n const vm = getCurrentInstance();\n const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));\n let event = eventName;\n if (!key) {\n if (isVue2) {\n const modelOptions = (_e = (_d = vm == null ? void 0 : vm.proxy) == null ? void 0 : _d.$options) == null ? void 0 : _e.model;\n key = (modelOptions == null ? void 0 : modelOptions.value) || \"value\";\n if (!eventName)\n event = (modelOptions == null ? void 0 : modelOptions.event) || \"input\";\n } else {\n key = \"modelValue\";\n }\n }\n event = event || `update:${key.toString()}`;\n const cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n const triggerEmit = (value) => {\n if (shouldEmit) {\n if (shouldEmit(value))\n _emit(event, value);\n } else {\n _emit(event, value);\n }\n };\n if (passive) {\n const initialValue = getValue();\n const proxy = ref(initialValue);\n let isUpdating = false;\n watch(\n () => props[key],\n (v) => {\n if (!isUpdating) {\n isUpdating = true;\n proxy.value = cloneFn(v);\n nextTick(() => isUpdating = false);\n }\n }\n );\n watch(\n proxy,\n (v) => {\n if (!isUpdating && (v !== props[key] || deep))\n triggerEmit(v);\n },\n { deep }\n );\n return proxy;\n } else {\n return computed({\n get() {\n return getValue();\n },\n set(value) {\n triggerEmit(value);\n }\n });\n }\n}\n\nfunction useVModels(props, emit, options = {}) {\n const ret = {};\n for (const key in props) {\n ret[key] = useVModel(\n props,\n key,\n emit,\n options\n );\n }\n return ret;\n}\n\nfunction useVibrate(options) {\n const {\n pattern = [],\n interval = 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n const patternRef = toRef(pattern);\n let intervalControls;\n const vibrate = (pattern2 = patternRef.value) => {\n if (isSupported.value)\n navigator.vibrate(pattern2);\n };\n const stop = () => {\n if (isSupported.value)\n navigator.vibrate(0);\n intervalControls == null ? void 0 : intervalControls.pause();\n };\n if (interval > 0) {\n intervalControls = useIntervalFn(\n vibrate,\n interval,\n {\n immediate: false,\n immediateCallback: false\n }\n );\n }\n return {\n isSupported,\n pattern,\n intervalControls,\n vibrate,\n stop\n };\n}\n\nfunction useVirtualList(list, options) {\n const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n return {\n list: currentList,\n scrollTo,\n containerProps: {\n ref: containerRef,\n onScroll: () => {\n calculateRange();\n },\n style: containerStyle\n },\n wrapperProps\n };\n}\nfunction useVirtualListResources(list) {\n const containerRef = ref(null);\n const size = useElementSize(containerRef);\n const currentList = ref([]);\n const source = shallowRef(list);\n const state = ref({ start: 0, end: 10 });\n return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n return (containerSize) => {\n if (typeof itemSize === \"number\")\n return Math.ceil(containerSize / itemSize);\n const { start = 0 } = state.value;\n let sum = 0;\n let capacity = 0;\n for (let i = start; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n capacity = i;\n if (sum > containerSize)\n break;\n }\n return capacity - start;\n };\n}\nfunction createGetOffset(source, itemSize) {\n return (scrollDirection) => {\n if (typeof itemSize === \"number\")\n return Math.floor(scrollDirection / itemSize) + 1;\n let sum = 0;\n let offset = 0;\n for (let i = 0; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n if (sum >= scrollDirection) {\n offset = i;\n break;\n }\n }\n return offset + 1;\n };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n return () => {\n const element = containerRef.value;\n if (element) {\n const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n const from = offset - overscan;\n const to = offset + viewCapacity + overscan;\n state.value = {\n start: from < 0 ? 0 : from,\n end: to > source.value.length ? source.value.length : to\n };\n currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n data: ele,\n index: index + state.value.start\n }));\n }\n };\n}\nfunction createGetDistance(itemSize, source) {\n return (index) => {\n if (typeof itemSize === \"number\") {\n const size2 = index * itemSize;\n return size2;\n }\n const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n return size;\n };\n}\nfunction useWatchForSizes(size, list, containerRef, calculateRange) {\n watch([size.width, size.height, list, containerRef], () => {\n calculateRange();\n });\n}\nfunction createComputedTotalSize(itemSize, source) {\n return computed(() => {\n if (typeof itemSize === \"number\")\n return source.value.length * itemSize;\n return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n });\n}\nconst scrollToDictionaryForElementScrollKey = {\n horizontal: \"scrollLeft\",\n vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n return (index) => {\n if (containerRef.value) {\n containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n calculateRange();\n }\n };\n}\nfunction useHorizontalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowX: \"auto\" };\n const { itemWidth, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n const getOffset = createGetOffset(source, itemWidth);\n const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceLeft = createGetDistance(itemWidth, source);\n const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n const totalWidth = createComputedTotalSize(itemWidth, source);\n useWatchForSizes(size, list, containerRef, calculateRange);\n const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n height: \"100%\",\n width: `${totalWidth.value - offsetLeft.value}px`,\n marginLeft: `${offsetLeft.value}px`,\n display: \"flex\"\n }\n };\n });\n return {\n scrollTo,\n calculateRange,\n wrapperProps,\n containerStyle,\n currentList,\n containerRef\n };\n}\nfunction useVerticalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowY: \"auto\" };\n const { itemHeight, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n const getOffset = createGetOffset(source, itemHeight);\n const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceTop = createGetDistance(itemHeight, source);\n const offsetTop = computed(() => getDistanceTop(state.value.start));\n const totalHeight = createComputedTotalSize(itemHeight, source);\n useWatchForSizes(size, list, containerRef, calculateRange);\n const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n width: \"100%\",\n height: `${totalHeight.value - offsetTop.value}px`,\n marginTop: `${offsetTop.value}px`\n }\n };\n });\n return {\n calculateRange,\n scrollTo,\n containerStyle,\n wrapperProps,\n currentList,\n containerRef\n };\n}\n\nfunction useWakeLock(options = {}) {\n const {\n navigator = defaultNavigator,\n document = defaultDocument\n } = options;\n const requestedType = ref(false);\n const sentinel = shallowRef(null);\n const documentVisibility = useDocumentVisibility({ document });\n const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n const isActive = computed(() => !!sentinel.value && documentVisibility.value === \"visible\");\n if (isSupported.value) {\n useEventListener(sentinel, \"release\", () => {\n var _a, _b;\n requestedType.value = (_b = (_a = sentinel.value) == null ? void 0 : _a.type) != null ? _b : false;\n });\n whenever(\n () => documentVisibility.value === \"visible\" && (document == null ? void 0 : document.visibilityState) === \"visible\" && requestedType.value,\n (type) => {\n requestedType.value = false;\n forceRequest(type);\n }\n );\n }\n async function forceRequest(type) {\n var _a;\n await ((_a = sentinel.value) == null ? void 0 : _a.release());\n sentinel.value = isSupported.value ? await navigator.wakeLock.request(type) : null;\n }\n async function request(type) {\n if (documentVisibility.value === \"visible\")\n await forceRequest(type);\n else\n requestedType.value = type;\n }\n async function release() {\n requestedType.value = false;\n const s = sentinel.value;\n sentinel.value = null;\n await (s == null ? void 0 : s.release());\n }\n return {\n sentinel,\n isSupported,\n isActive,\n request,\n forceRequest,\n release\n };\n}\n\nfunction useWebNotification(options = {}) {\n const {\n window = defaultWindow,\n requestPermissions: _requestForPermissions = true\n } = options;\n const defaultWebNotificationOptions = options;\n const isSupported = useSupported(() => {\n if (!window || !(\"Notification\" in window))\n return false;\n try {\n new Notification(\"\");\n } catch (e) {\n return false;\n }\n return true;\n });\n const permissionGranted = ref(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n const notification = ref(null);\n const ensurePermissions = async () => {\n if (!isSupported.value)\n return;\n if (!permissionGranted.value && Notification.permission !== \"denied\") {\n const result = await Notification.requestPermission();\n if (result === \"granted\")\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n };\n const { on: onClick, trigger: clickTrigger } = createEventHook();\n const { on: onShow, trigger: showTrigger } = createEventHook();\n const { on: onError, trigger: errorTrigger } = createEventHook();\n const { on: onClose, trigger: closeTrigger } = createEventHook();\n const show = async (overrides) => {\n if (!isSupported.value || !permissionGranted.value)\n return;\n const options2 = Object.assign({}, defaultWebNotificationOptions, overrides);\n notification.value = new Notification(options2.title || \"\", options2);\n notification.value.onclick = clickTrigger;\n notification.value.onshow = showTrigger;\n notification.value.onerror = errorTrigger;\n notification.value.onclose = closeTrigger;\n return notification.value;\n };\n const close = () => {\n if (notification.value)\n notification.value.close();\n notification.value = null;\n };\n if (_requestForPermissions)\n tryOnMounted(ensurePermissions);\n tryOnScopeDispose(close);\n if (isSupported.value && window) {\n const document = window.document;\n useEventListener(document, \"visibilitychange\", (e) => {\n e.preventDefault();\n if (document.visibilityState === \"visible\") {\n close();\n }\n });\n }\n return {\n isSupported,\n notification,\n ensurePermissions,\n permissionGranted,\n show,\n close,\n onClick,\n onShow,\n onError,\n onClose\n };\n}\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useWebSocket(url, options = {}) {\n const {\n onConnected,\n onDisconnected,\n onError,\n onMessage,\n immediate = true,\n autoClose = true,\n protocols = []\n } = options;\n const data = ref(null);\n const status = ref(\"CLOSED\");\n const wsRef = ref();\n const urlRef = toRef(url);\n let heartbeatPause;\n let heartbeatResume;\n let explicitlyClosed = false;\n let retried = 0;\n let bufferedData = [];\n let pongTimeoutWait;\n const _sendBuffer = () => {\n if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n for (const buffer of bufferedData)\n wsRef.value.send(buffer);\n bufferedData = [];\n }\n };\n const resetHeartbeat = () => {\n clearTimeout(pongTimeoutWait);\n pongTimeoutWait = void 0;\n };\n const close = (code = 1e3, reason) => {\n if (!isClient || !wsRef.value)\n return;\n explicitlyClosed = true;\n resetHeartbeat();\n heartbeatPause == null ? void 0 : heartbeatPause();\n wsRef.value.close(code, reason);\n wsRef.value = void 0;\n };\n const send = (data2, useBuffer = true) => {\n if (!wsRef.value || status.value !== \"OPEN\") {\n if (useBuffer)\n bufferedData.push(data2);\n return false;\n }\n _sendBuffer();\n wsRef.value.send(data2);\n return true;\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const ws = new WebSocket(urlRef.value, protocols);\n wsRef.value = ws;\n status.value = \"CONNECTING\";\n ws.onopen = () => {\n status.value = \"OPEN\";\n retried = 0;\n onConnected == null ? void 0 : onConnected(ws);\n heartbeatResume == null ? void 0 : heartbeatResume();\n _sendBuffer();\n };\n ws.onclose = (ev) => {\n status.value = \"CLOSED\";\n onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n if (!explicitlyClosed && options.autoReconnect && (wsRef.value == null || ws === wsRef.value)) {\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions(options.autoReconnect);\n if (typeof retries === \"number\" && (retries < 0 || retried < retries)) {\n retried += 1;\n setTimeout(_init, delay);\n } else if (typeof retries === \"function\" && retries()) {\n setTimeout(_init, delay);\n } else {\n onFailed == null ? void 0 : onFailed();\n }\n }\n };\n ws.onerror = (e) => {\n onError == null ? void 0 : onError(ws, e);\n };\n ws.onmessage = (e) => {\n if (options.heartbeat) {\n resetHeartbeat();\n const {\n message = DEFAULT_PING_MESSAGE,\n responseMessage = message\n } = resolveNestedOptions(options.heartbeat);\n if (e.data === responseMessage)\n return;\n }\n data.value = e.data;\n onMessage == null ? void 0 : onMessage(ws, e);\n };\n };\n if (options.heartbeat) {\n const {\n message = DEFAULT_PING_MESSAGE,\n interval = 1e3,\n pongTimeout = 1e3\n } = resolveNestedOptions(options.heartbeat);\n const { pause, resume } = useIntervalFn(\n () => {\n send(message, false);\n if (pongTimeoutWait != null)\n return;\n pongTimeoutWait = setTimeout(() => {\n close();\n explicitlyClosed = false;\n }, pongTimeout);\n },\n interval,\n { immediate: false }\n );\n heartbeatPause = pause;\n heartbeatResume = resume;\n }\n if (autoClose) {\n if (isClient)\n useEventListener(\"beforeunload\", () => close());\n tryOnScopeDispose(close);\n }\n const open = () => {\n if (!isClient && !isWorker)\n return;\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n open();\n watch(urlRef, open);\n return {\n data,\n status,\n close,\n send,\n open,\n ws: wsRef\n };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n const {\n window = defaultWindow\n } = options != null ? options : {};\n const data = ref(null);\n const worker = shallowRef();\n const post = (...args) => {\n if (!worker.value)\n return;\n worker.value.postMessage(...args);\n };\n const terminate = function terminate2() {\n if (!worker.value)\n return;\n worker.value.terminate();\n };\n if (window) {\n if (typeof arg0 === \"string\")\n worker.value = new Worker(arg0, workerOptions);\n else if (typeof arg0 === \"function\")\n worker.value = arg0();\n else\n worker.value = arg0;\n worker.value.onmessage = (e) => {\n data.value = e.data;\n };\n tryOnScopeDispose(() => {\n if (worker.value)\n worker.value.terminate();\n });\n }\n return {\n data,\n post,\n terminate,\n worker\n };\n}\n\nfunction depsParser(deps, localDeps) {\n if (deps.length === 0 && localDeps.length === 0)\n return \"\";\n const depsString = deps.map((dep) => `'${dep}'`).toString();\n const depsFunctionString = localDeps.filter((dep) => typeof dep === \"function\").map((fn) => {\n const str = fn.toString();\n if (str.trim().startsWith(\"function\")) {\n return str;\n } else {\n const name = fn.name;\n return `const ${name} = ${str}`;\n }\n }).join(\";\");\n const importString = `importScripts(${depsString});`;\n return `${depsString.trim() === \"\" ? \"\" : importString} ${depsFunctionString}`;\n}\n\nfunction jobRunner(userFunc) {\n return (e) => {\n const userFuncArgs = e.data[0];\n return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n postMessage([\"SUCCESS\", result]);\n }).catch((error) => {\n postMessage([\"ERROR\", error]);\n });\n };\n}\n\nfunction createWorkerBlobUrl(fn, deps, localDeps) {\n const blobCode = `${depsParser(deps, localDeps)}; onmessage=(${jobRunner})(${fn})`;\n const blob = new Blob([blobCode], { type: \"text/javascript\" });\n const url = URL.createObjectURL(blob);\n return url;\n}\n\nfunction useWebWorkerFn(fn, options = {}) {\n const {\n dependencies = [],\n localDependencies = [],\n timeout,\n window = defaultWindow\n } = options;\n const worker = ref();\n const workerStatus = ref(\"PENDING\");\n const promise = ref({});\n const timeoutId = ref();\n const workerTerminate = (status = \"PENDING\") => {\n if (worker.value && worker.value._url && window) {\n worker.value.terminate();\n URL.revokeObjectURL(worker.value._url);\n promise.value = {};\n worker.value = void 0;\n window.clearTimeout(timeoutId.value);\n workerStatus.value = status;\n }\n };\n workerTerminate();\n tryOnScopeDispose(workerTerminate);\n const generateWorker = () => {\n const blobUrl = createWorkerBlobUrl(fn, dependencies, localDependencies);\n const newWorker = new Worker(blobUrl);\n newWorker._url = blobUrl;\n newWorker.onmessage = (e) => {\n const { resolve = () => {\n }, reject = () => {\n } } = promise.value;\n const [status, result] = e.data;\n switch (status) {\n case \"SUCCESS\":\n resolve(result);\n workerTerminate(status);\n break;\n default:\n reject(result);\n workerTerminate(\"ERROR\");\n break;\n }\n };\n newWorker.onerror = (e) => {\n const { reject = () => {\n } } = promise.value;\n e.preventDefault();\n reject(e);\n workerTerminate(\"ERROR\");\n };\n if (timeout) {\n timeoutId.value = setTimeout(\n () => workerTerminate(\"TIMEOUT_EXPIRED\"),\n timeout\n );\n }\n return newWorker;\n };\n const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n var _a;\n promise.value = {\n resolve,\n reject\n };\n (_a = worker.value) == null ? void 0 : _a.postMessage([[...fnArgs]]);\n workerStatus.value = \"RUNNING\";\n });\n const workerFn = (...fnArgs) => {\n if (workerStatus.value === \"RUNNING\") {\n console.error(\n \"[useWebWorkerFn] You can only run one instance of the worker at a time.\"\n );\n return Promise.reject();\n }\n worker.value = generateWorker();\n return callWorker(...fnArgs);\n };\n return {\n workerFn,\n workerStatus,\n workerTerminate\n };\n}\n\nfunction useWindowFocus(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref(false);\n const focused = ref(window.document.hasFocus());\n useEventListener(window, \"blur\", () => {\n focused.value = false;\n });\n useEventListener(window, \"focus\", () => {\n focused.value = true;\n });\n return focused;\n}\n\nfunction useWindowScroll(options = {}) {\n const { window = defaultWindow, behavior = \"auto\" } = options;\n if (!window) {\n return {\n x: ref(0),\n y: ref(0)\n };\n }\n const internalX = ref(window.scrollX);\n const internalY = ref(window.scrollY);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo({ left: x2, behavior });\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo({ top: y2, behavior });\n }\n });\n useEventListener(\n window,\n \"scroll\",\n () => {\n internalX.value = window.scrollX;\n internalY.value = window.scrollY;\n },\n {\n capture: false,\n passive: true\n }\n );\n return { x, y };\n}\n\nfunction useWindowSize(options = {}) {\n const {\n window = defaultWindow,\n initialWidth = Number.POSITIVE_INFINITY,\n initialHeight = Number.POSITIVE_INFINITY,\n listenOrientation = true,\n includeScrollbar = true,\n type = \"inner\"\n } = options;\n const width = ref(initialWidth);\n const height = ref(initialHeight);\n const update = () => {\n if (window) {\n if (type === \"outer\") {\n width.value = window.outerWidth;\n height.value = window.outerHeight;\n } else if (includeScrollbar) {\n width.value = window.innerWidth;\n height.value = window.innerHeight;\n } else {\n width.value = window.document.documentElement.clientWidth;\n height.value = window.document.documentElement.clientHeight;\n }\n }\n };\n update();\n tryOnMounted(update);\n useEventListener(\"resize\", update, { passive: true });\n if (listenOrientation) {\n const matches = useMediaQuery(\"(orientation: portrait)\");\n watch(matches, () => update());\n }\n return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsElement, breakpointsMasterCss, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, breakpointsVuetifyV2, breakpointsVuetifyV3, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, setSSRHandler, templateRef, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePrevious, useRafFn, useRefHistory, useResizeObserver, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","import Vue from 'vue'\nimport { getCurrentInstance } from 'vue'\n\nvar isVue2 = true\nvar isVue3 = false\nvar Vue2 = Vue\nvar warn = Vue.util.warn\n\nfunction install() {}\n\n// createApp polyfill\nexport function createApp(rootComponent, rootProps) {\n var vm\n var provide = {}\n var app = {\n config: Vue.config,\n use: Vue.use.bind(Vue),\n mixin: Vue.mixin.bind(Vue),\n component: Vue.component.bind(Vue),\n provide: function (key, value) {\n provide[key] = value\n return this\n },\n directive: function (name, dir) {\n if (dir) {\n Vue.directive(name, dir)\n return app\n } else {\n return Vue.directive(name)\n }\n },\n mount: function (el, hydrating) {\n if (!vm) {\n vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))\n vm.$mount(el, hydrating)\n return vm\n } else {\n return vm\n }\n },\n unmount: function () {\n if (vm) {\n vm.$destroy()\n vm = undefined\n }\n },\n }\n return app\n}\n\nexport {\n Vue,\n Vue2,\n isVue2,\n isVue3,\n install,\n warn\n}\n\n// Vue 3 components mock\nfunction createMockComponent(name) {\n return {\n setup() {\n throw new Error('[vue-demi] ' + name + ' is not supported in Vue 2. It\\'s provided to avoid compiler errors.')\n }\n }\n}\nexport var Fragment = /*#__PURE__*/ createMockComponent('Fragment')\nexport var Transition = /*#__PURE__*/ createMockComponent('Transition')\nexport var TransitionGroup = /*#__PURE__*/ createMockComponent('TransitionGroup')\nexport var Teleport = /*#__PURE__*/ createMockComponent('Teleport')\nexport var Suspense = /*#__PURE__*/ createMockComponent('Suspense')\nexport var KeepAlive = /*#__PURE__*/ createMockComponent('KeepAlive')\n\nexport * from 'vue'\n\n// Not implemented https://github.com/vuejs/core/pull/8111, falls back to getCurrentInstance()\nexport function hasInjectionContext() {\n return !!getCurrentInstance()\n}\n","import { shallowRef, watchEffect, readonly, ref, watch, customRef, getCurrentScope, onScopeDispose, effectScope, getCurrentInstance, inject, provide, isVue3, version, isRef, unref, computed, reactive, toRefs as toRefs$1, toRef as toRef$1, isVue2, set as set$1, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue-demi';\n\nfunction computedEager(fn, options) {\n var _a;\n const result = shallowRef();\n watchEffect(() => {\n result.value = fn();\n }, {\n ...options,\n flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n });\n return readonly(result);\n}\n\nfunction computedWithControl(source, fn) {\n let v = void 0;\n let track;\n let trigger;\n const dirty = ref(true);\n const update = () => {\n dirty.value = true;\n trigger();\n };\n watch(source, update, { flush: \"sync\" });\n const get = typeof fn === \"function\" ? fn : fn.get;\n const set = typeof fn === \"function\" ? void 0 : fn.set;\n const result = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n if (dirty.value) {\n v = get(v);\n dirty.value = false;\n }\n track();\n return v;\n },\n set(v2) {\n set == null ? void 0 : set(v2);\n }\n };\n });\n if (Object.isExtensible(result))\n result.trigger = update;\n return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n if (getCurrentScope()) {\n onScopeDispose(fn);\n return true;\n }\n return false;\n}\n\nfunction createEventHook() {\n const fns = /* @__PURE__ */ new Set();\n const off = (fn) => {\n fns.delete(fn);\n };\n const on = (fn) => {\n fns.add(fn);\n const offFn = () => off(fn);\n tryOnScopeDispose(offFn);\n return {\n off: offFn\n };\n };\n const trigger = (...args) => {\n return Promise.all(Array.from(fns).map((fn) => fn(...args)));\n };\n return {\n on,\n off,\n trigger\n };\n}\n\nfunction createGlobalState(stateFactory) {\n let initialized = false;\n let state;\n const scope = effectScope(true);\n return (...args) => {\n if (!initialized) {\n state = scope.run(() => stateFactory(...args));\n initialized = true;\n }\n return state;\n };\n}\n\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\nconst injectLocal = (...args) => {\n var _a;\n const key = args[0];\n const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n if (instance == null)\n throw new Error(\"injectLocal must be called in setup\");\n if (localProvidedStateMap.has(instance) && key in localProvidedStateMap.get(instance))\n return localProvidedStateMap.get(instance)[key];\n return inject(...args);\n};\n\nconst provideLocal = (key, value) => {\n var _a;\n const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n if (instance == null)\n throw new Error(\"provideLocal must be called in setup\");\n if (!localProvidedStateMap.has(instance))\n localProvidedStateMap.set(instance, /* @__PURE__ */ Object.create(null));\n const localProvidedState = localProvidedStateMap.get(instance);\n localProvidedState[key] = value;\n provide(key, value);\n};\n\nfunction createInjectionState(composable, options) {\n const key = (options == null ? void 0 : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n const defaultValue = options == null ? void 0 : options.defaultValue;\n const useProvidingState = (...args) => {\n const state = composable(...args);\n provideLocal(key, state);\n return state;\n };\n const useInjectedState = () => injectLocal(key, defaultValue);\n return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n let subscribers = 0;\n let state;\n let scope;\n const dispose = () => {\n subscribers -= 1;\n if (scope && subscribers <= 0) {\n scope.stop();\n state = void 0;\n scope = void 0;\n }\n };\n return (...args) => {\n subscribers += 1;\n if (!scope) {\n scope = effectScope(true);\n state = scope.run(() => composable(...args));\n }\n tryOnScopeDispose(dispose);\n return state;\n };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n if (!isVue3 && !version.startsWith(\"2.7.\")) {\n if (process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] extendRef only works in Vue 2.7 or above.\");\n return;\n }\n for (const [key, value] of Object.entries(extend)) {\n if (key === \"value\")\n continue;\n if (isRef(value) && unwrap) {\n Object.defineProperty(ref, key, {\n get() {\n return value.value;\n },\n set(v) {\n value.value = v;\n },\n enumerable\n });\n } else {\n Object.defineProperty(ref, key, { value, enumerable });\n }\n }\n return ref;\n}\n\nfunction get(obj, key) {\n if (key == null)\n return unref(obj);\n return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n return unref(v) != null;\n}\n\nfunction makeDestructurable(obj, arr) {\n if (typeof Symbol !== \"undefined\") {\n const clone = { ...obj };\n Object.defineProperty(clone, Symbol.iterator, {\n enumerable: false,\n value() {\n let index = 0;\n return {\n next: () => ({\n value: arr[index++],\n done: index > arr.length\n })\n };\n }\n });\n return clone;\n } else {\n return Object.assign([...arr], obj);\n }\n}\n\nfunction toValue(r) {\n return typeof r === \"function\" ? r() : unref(r);\n}\nconst resolveUnref = toValue;\n\nfunction reactify(fn, options) {\n const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : toValue;\n return function(...args) {\n return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n let keys = [];\n let options;\n if (Array.isArray(optionsOrKeys)) {\n keys = optionsOrKeys;\n } else {\n options = optionsOrKeys;\n const { includeOwnProperties = true } = optionsOrKeys;\n keys.push(...Object.keys(obj));\n if (includeOwnProperties)\n keys.push(...Object.getOwnPropertyNames(obj));\n }\n return Object.fromEntries(\n keys.map((key) => {\n const value = obj[key];\n return [\n key,\n typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n ];\n })\n );\n}\n\nfunction toReactive(objectRef) {\n if (!isRef(objectRef))\n return reactive(objectRef);\n const proxy = new Proxy({}, {\n get(_, p, receiver) {\n return unref(Reflect.get(objectRef.value, p, receiver));\n },\n set(_, p, value) {\n if (isRef(objectRef.value[p]) && !isRef(value))\n objectRef.value[p].value = value;\n else\n objectRef.value[p] = value;\n return true;\n },\n deleteProperty(_, p) {\n return Reflect.deleteProperty(objectRef.value, p);\n },\n has(_, p) {\n return Reflect.has(objectRef.value, p);\n },\n ownKeys() {\n return Object.keys(objectRef.value);\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true\n };\n }\n });\n return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nconst directiveHooks = {\n mounted: isVue3 ? \"mounted\" : \"inserted\",\n updated: isVue3 ? \"updated\" : \"componentUpdated\",\n unmounted: isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n if (!condition)\n console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n var _a, _b;\n return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_b = window == null ? void 0 : window.navigator) == null ? void 0 : _b.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? void 0 : window.navigator.userAgent));\n}\n\nfunction createFilterWrapper(filter, fn) {\n function wrapper(...args) {\n return new Promise((resolve, reject) => {\n Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n });\n }\n return wrapper;\n}\nconst bypassFilter = (invoke) => {\n return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n let timer;\n let maxTimer;\n let lastRejector = noop;\n const _clearTimeout = (timer2) => {\n clearTimeout(timer2);\n lastRejector();\n lastRejector = noop;\n };\n const filter = (invoke) => {\n const duration = toValue(ms);\n const maxDuration = toValue(options.maxWait);\n if (timer)\n _clearTimeout(timer);\n if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n if (maxTimer) {\n _clearTimeout(maxTimer);\n maxTimer = null;\n }\n return Promise.resolve(invoke());\n }\n return new Promise((resolve, reject) => {\n lastRejector = options.rejectOnCancel ? reject : resolve;\n if (maxDuration && !maxTimer) {\n maxTimer = setTimeout(() => {\n if (timer)\n _clearTimeout(timer);\n maxTimer = null;\n resolve(invoke());\n }, maxDuration);\n }\n timer = setTimeout(() => {\n if (maxTimer)\n _clearTimeout(maxTimer);\n maxTimer = null;\n resolve(invoke());\n }, duration);\n });\n };\n return filter;\n}\nfunction throttleFilter(...args) {\n let lastExec = 0;\n let timer;\n let isLeading = true;\n let lastRejector = noop;\n let lastValue;\n let ms;\n let trailing;\n let leading;\n let rejectOnCancel;\n if (!isRef(args[0]) && typeof args[0] === \"object\")\n ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]);\n else\n [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n const clear = () => {\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n lastRejector();\n lastRejector = noop;\n }\n };\n const filter = (_invoke) => {\n const duration = toValue(ms);\n const elapsed = Date.now() - lastExec;\n const invoke = () => {\n return lastValue = _invoke();\n };\n clear();\n if (duration <= 0) {\n lastExec = Date.now();\n return invoke();\n }\n if (elapsed > duration && (leading || !isLeading)) {\n lastExec = Date.now();\n invoke();\n } else if (trailing) {\n lastValue = new Promise((resolve, reject) => {\n lastRejector = rejectOnCancel ? reject : resolve;\n timer = setTimeout(() => {\n lastExec = Date.now();\n isLeading = true;\n resolve(invoke());\n clear();\n }, Math.max(0, duration - elapsed));\n });\n }\n if (!leading && !timer)\n timer = setTimeout(() => isLeading = true, duration);\n isLeading = false;\n return lastValue;\n };\n return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n const isActive = ref(true);\n function pause() {\n isActive.value = false;\n }\n function resume() {\n isActive.value = true;\n }\n const eventFilter = (...args) => {\n if (isActive.value)\n extendFilter(...args);\n };\n return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nfunction cacheStringFunction(fn) {\n const cache = /* @__PURE__ */ Object.create(null);\n return (str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n return new Promise((resolve, reject) => {\n if (throwOnTimeout)\n setTimeout(() => reject(reason), ms);\n else\n setTimeout(resolve, ms);\n });\n}\nfunction identity(arg) {\n return arg;\n}\nfunction createSingletonPromise(fn) {\n let _promise;\n function wrapper() {\n if (!_promise)\n _promise = fn();\n return _promise;\n }\n wrapper.reset = async () => {\n const _prev = _promise;\n _promise = void 0;\n if (_prev)\n await _prev;\n };\n return wrapper;\n}\nfunction invoke(fn) {\n return fn();\n}\nfunction containsProp(obj, ...props) {\n return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n var _a;\n if (typeof target === \"number\")\n return target + delta;\n const value = ((_a = target.match(/^-?\\d+\\.?\\d*/)) == null ? void 0 : _a[0]) || \"\";\n const unit = target.slice(value.length);\n const result = Number.parseFloat(value) + delta;\n if (Number.isNaN(result))\n return target;\n return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n return keys.reduce((n, k) => {\n if (k in obj) {\n if (!omitUndefined || obj[k] !== void 0)\n n[k] = obj[k];\n }\n return n;\n }, {});\n}\nfunction objectOmit(obj, keys, omitUndefined = false) {\n return Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n return (!omitUndefined || value !== void 0) && !keys.includes(key);\n }));\n}\nfunction objectEntries(obj) {\n return Object.entries(obj);\n}\nfunction getLifeCycleTarget(target) {\n return target || getCurrentInstance();\n}\n\nfunction toRef(...args) {\n if (args.length !== 1)\n return toRef$1(...args);\n const r = args[0];\n return typeof r === \"function\" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r);\n}\nconst resolveRef = toRef;\n\nfunction reactivePick(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n return customRef((track, trigger) => {\n let value = toValue(defaultValue);\n let timer;\n const resetAfter = () => setTimeout(() => {\n value = toValue(defaultValue);\n trigger();\n }, toValue(afterMs));\n tryOnScopeDispose(() => {\n clearTimeout(timer);\n });\n return {\n get() {\n track();\n return value;\n },\n set(newValue) {\n value = newValue;\n trigger();\n clearTimeout(timer);\n timer = resetAfter();\n }\n };\n });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n return createFilterWrapper(\n debounceFilter(ms, options),\n fn\n );\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n const debounced = ref(value.value);\n const updater = useDebounceFn(() => {\n debounced.value = value.value;\n }, ms, options);\n watch(value, () => updater());\n return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n return computed({\n get() {\n var _a;\n return (_a = source.value) != null ? _a : defaultValue;\n },\n set(value) {\n source.value = value;\n }\n });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n return createFilterWrapper(\n throttleFilter(ms, trailing, leading, rejectOnCancel),\n fn\n );\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n if (delay <= 0)\n return value;\n const throttled = ref(value.value);\n const updater = useThrottleFn(() => {\n throttled.value = value.value;\n }, delay, trailing, leading);\n watch(value, () => updater());\n return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n let source = initial;\n let track;\n let trigger;\n const ref = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n return get();\n },\n set(v) {\n set(v);\n }\n };\n });\n function get(tracking = true) {\n if (tracking)\n track();\n return source;\n }\n function set(value, triggering = true) {\n var _a, _b;\n if (value === source)\n return;\n const old = source;\n if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n return;\n source = value;\n (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n if (triggering)\n trigger();\n }\n const untrackedGet = () => get(false);\n const silentSet = (v) => set(v, false);\n const peek = () => get(false);\n const lay = (v) => set(v, false);\n return extendRef(\n ref,\n {\n get,\n set,\n untrackedGet,\n silentSet,\n peek,\n lay\n },\n { enumerable: true }\n );\n}\nconst controlledRef = refWithControl;\n\nfunction set(...args) {\n if (args.length === 2) {\n const [ref, value] = args;\n ref.value = value;\n }\n if (args.length === 3) {\n if (isVue2) {\n set$1(...args);\n } else {\n const [target, key, value] = args;\n target[key] = value;\n }\n }\n}\n\nfunction watchWithFilter(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n return watch(\n source,\n createFilterWrapper(\n eventFilter,\n cb\n ),\n watchOptions\n );\n}\n\nfunction watchPausable(source, cb, options = {}) {\n const {\n eventFilter: filter,\n ...watchOptions\n } = options;\n const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n const stop = watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter\n }\n );\n return { stop, pause, resume, isActive };\n}\n\nfunction syncRef(left, right, ...[options]) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true,\n direction = \"both\",\n transform = {}\n } = options || {};\n const watchers = [];\n const transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n const transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n if (direction === \"both\" || direction === \"ltr\") {\n watchers.push(watchPausable(\n left,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n right.value = transformLTR(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n if (direction === \"both\" || direction === \"rtl\") {\n watchers.push(watchPausable(\n right,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n left.value = transformRTL(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n const stop = () => {\n watchers.forEach((w) => w.stop());\n };\n return stop;\n}\n\nfunction syncRefs(source, targets, options = {}) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true\n } = options;\n if (!Array.isArray(targets))\n targets = [targets];\n return watch(\n source,\n (newValue) => targets.forEach((target) => target.value = newValue),\n { flush, deep, immediate }\n );\n}\n\nfunction toRefs(objectRef, options = {}) {\n if (!isRef(objectRef))\n return toRefs$1(objectRef);\n const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n for (const key in objectRef.value) {\n result[key] = customRef(() => ({\n get() {\n return objectRef.value[key];\n },\n set(v) {\n var _a;\n const replaceRef = (_a = toValue(options.replaceRef)) != null ? _a : true;\n if (replaceRef) {\n if (Array.isArray(objectRef.value)) {\n const copy = [...objectRef.value];\n copy[key] = v;\n objectRef.value = copy;\n } else {\n const newObject = { ...objectRef.value, [key]: v };\n Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n objectRef.value = newObject;\n }\n } else {\n objectRef.value[key] = v;\n }\n }\n }));\n }\n return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeMount(fn, target);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeUnmount(fn, target);\n}\n\nfunction tryOnMounted(fn, sync = true, target) {\n const instance = getLifeCycleTarget();\n if (instance)\n onMounted(fn, target);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onUnmounted(fn, target);\n}\n\nfunction createUntil(r, isNot = false) {\n function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n r,\n (v) => {\n if (condition(v) !== isNot) {\n if (stop)\n stop();\n else\n nextTick(() => stop == null ? void 0 : stop());\n resolve(v);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop == null ? void 0 : stop())\n );\n }\n return Promise.race(promises);\n }\n function toBe(value, options) {\n if (!isRef(value))\n return toMatch((v) => v === value, options);\n const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n [r, value],\n ([v1, v2]) => {\n if (isNot !== (v1 === v2)) {\n if (stop)\n stop();\n else\n nextTick(() => stop == null ? void 0 : stop());\n resolve(v1);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => {\n stop == null ? void 0 : stop();\n return toValue(r);\n })\n );\n }\n return Promise.race(promises);\n }\n function toBeTruthy(options) {\n return toMatch((v) => Boolean(v), options);\n }\n function toBeNull(options) {\n return toBe(null, options);\n }\n function toBeUndefined(options) {\n return toBe(void 0, options);\n }\n function toBeNaN(options) {\n return toMatch(Number.isNaN, options);\n }\n function toContains(value, options) {\n return toMatch((v) => {\n const array = Array.from(v);\n return array.includes(value) || array.includes(toValue(value));\n }, options);\n }\n function changed(options) {\n return changedTimes(1, options);\n }\n function changedTimes(n = 1, options) {\n let count = -1;\n return toMatch(() => {\n count += 1;\n return count >= n;\n }, options);\n }\n if (Array.isArray(toValue(r))) {\n const instance = {\n toMatch,\n toContains,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n } else {\n const instance = {\n toMatch,\n toBe,\n toBeTruthy,\n toBeNull,\n toBeNaN,\n toBeUndefined,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n }\n}\nfunction until(r) {\n return createUntil(r);\n}\n\nfunction defaultComparator(value, othVal) {\n return value === othVal;\n}\nfunction useArrayDifference(...args) {\n var _a;\n const list = args[0];\n const values = args[1];\n let compareFn = (_a = args[2]) != null ? _a : defaultComparator;\n if (typeof compareFn === \"string\") {\n const key = compareFn;\n compareFn = (value, othVal) => value[key] === othVal[key];\n }\n return computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1));\n}\n\nfunction useArrayEvery(list, fn) {\n return computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n return computed(() => toValue(list).map((i) => toValue(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n return computed(() => toValue(\n toValue(list).find((element, index, array) => fn(toValue(element), index, array))\n ));\n}\n\nfunction useArrayFindIndex(list, fn) {\n return computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n let index = arr.length;\n while (index-- > 0) {\n if (cb(arr[index], index, arr))\n return arr[index];\n }\n return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n return computed(() => toValue(\n !Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array))\n ));\n}\n\nfunction isArrayIncludesOptions(obj) {\n return isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\nfunction useArrayIncludes(...args) {\n var _a;\n const list = args[0];\n const value = args[1];\n let comparator = args[2];\n let formIndex = 0;\n if (isArrayIncludesOptions(comparator)) {\n formIndex = (_a = comparator.fromIndex) != null ? _a : 0;\n comparator = comparator.comparator;\n }\n if (typeof comparator === \"string\") {\n const key = comparator;\n comparator = (element, value2) => element[key] === toValue(value2);\n }\n comparator = comparator != null ? comparator : (element, value2) => element === toValue(value2);\n return computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator(\n toValue(element),\n toValue(value),\n index,\n toValue(array)\n )));\n}\n\nfunction useArrayJoin(list, separator) {\n return computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n return computed(() => toValue(list).map((i) => toValue(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n const reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index);\n return computed(() => {\n const resolved = toValue(list);\n return args.length ? resolved.reduce(reduceCallback, typeof args[0] === \"function\" ? toValue(args[0]()) : toValue(args[0])) : resolved.reduce(reduceCallback);\n });\n}\n\nfunction useArraySome(list, fn) {\n return computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction uniq(array) {\n return Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n return array.reduce((acc, v) => {\n if (!acc.some((x) => fn(v, x, array)))\n acc.push(v);\n return acc;\n }, []);\n}\nfunction useArrayUnique(list, compareFn) {\n return computed(() => {\n const resolvedList = toValue(list).map((element) => toValue(element));\n return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n });\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n let _initialValue = unref(initialValue);\n const count = ref(initialValue);\n const {\n max = Number.POSITIVE_INFINITY,\n min = Number.NEGATIVE_INFINITY\n } = options;\n const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n const get = () => count.value;\n const set = (val) => count.value = Math.max(min, Math.min(max, val));\n const reset = (val = _initialValue) => {\n _initialValue = val;\n return set(val);\n };\n return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[T\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/i;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)\\]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n let m = hours < 12 ? \"AM\" : \"PM\";\n if (hasPeriod)\n m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n return isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n const suffixes = [\"th\", \"st\", \"nd\", \"rd\"];\n const v = num % 100;\n return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n var _a;\n const years = date.getFullYear();\n const month = date.getMonth();\n const days = date.getDate();\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n const milliseconds = date.getMilliseconds();\n const day = date.getDay();\n const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n const matches = {\n Yo: () => formatOrdinal(years),\n YY: () => String(years).slice(-2),\n YYYY: () => years,\n M: () => month + 1,\n Mo: () => formatOrdinal(month + 1),\n MM: () => `${month + 1}`.padStart(2, \"0\"),\n MMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"short\" }),\n MMMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"long\" }),\n D: () => String(days),\n Do: () => formatOrdinal(days),\n DD: () => `${days}`.padStart(2, \"0\"),\n H: () => String(hours),\n Ho: () => formatOrdinal(hours),\n HH: () => `${hours}`.padStart(2, \"0\"),\n h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n ho: () => formatOrdinal(hours % 12 || 12),\n hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n m: () => String(minutes),\n mo: () => formatOrdinal(minutes),\n mm: () => `${minutes}`.padStart(2, \"0\"),\n s: () => String(seconds),\n so: () => formatOrdinal(seconds),\n ss: () => `${seconds}`.padStart(2, \"0\"),\n SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n d: () => day,\n dd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"narrow\" }),\n ddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"short\" }),\n dddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"long\" }),\n A: () => meridiem(hours, minutes),\n AA: () => meridiem(hours, minutes, false, true),\n a: () => meridiem(hours, minutes, true),\n aa: () => meridiem(hours, minutes, true, true)\n };\n return formatStr.replace(REGEX_FORMAT, (match, $1) => {\n var _a2, _b;\n return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) != null ? _b : match;\n });\n}\nfunction normalizeDate(date) {\n if (date === null)\n return new Date(Number.NaN);\n if (date === void 0)\n return /* @__PURE__ */ new Date();\n if (date instanceof Date)\n return new Date(date);\n if (typeof date === \"string\" && !/Z$/i.test(date)) {\n const d = date.match(REGEX_PARSE);\n if (d) {\n const m = d[2] - 1 || 0;\n const ms = (d[7] || \"0\").substring(0, 3);\n return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n }\n }\n return new Date(date);\n}\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n return computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n const {\n immediate = true,\n immediateCallback = false\n } = options;\n let timer = null;\n const isActive = ref(false);\n function clean() {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n }\n function pause() {\n isActive.value = false;\n clean();\n }\n function resume() {\n const intervalValue = toValue(interval);\n if (intervalValue <= 0)\n return;\n isActive.value = true;\n if (immediateCallback)\n cb();\n clean();\n if (isActive.value)\n timer = setInterval(cb, intervalValue);\n }\n if (immediate && isClient)\n resume();\n if (isRef(interval) || typeof interval === \"function\") {\n const stopWatch = watch(interval, () => {\n if (isActive.value && isClient)\n resume();\n });\n tryOnScopeDispose(stopWatch);\n }\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useInterval(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n immediate = true,\n callback\n } = options;\n const counter = ref(0);\n const update = () => counter.value += 1;\n const reset = () => {\n counter.value = 0;\n };\n const controls = useIntervalFn(\n callback ? () => {\n update();\n callback(counter.value);\n } : update,\n interval,\n { immediate }\n );\n if (exposeControls) {\n return {\n counter,\n reset,\n ...controls\n };\n } else {\n return counter;\n }\n}\n\nfunction useLastChanged(source, options = {}) {\n var _a;\n const ms = ref((_a = options.initialValue) != null ? _a : null);\n watch(\n source,\n () => ms.value = timestamp(),\n options\n );\n return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n const {\n immediate = true\n } = options;\n const isPending = ref(false);\n let timer = null;\n function clear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function stop() {\n isPending.value = false;\n clear();\n }\n function start(...args) {\n clear();\n isPending.value = true;\n timer = setTimeout(() => {\n isPending.value = false;\n timer = null;\n cb(...args);\n }, toValue(interval));\n }\n if (immediate) {\n isPending.value = true;\n if (isClient)\n start();\n }\n tryOnScopeDispose(stop);\n return {\n isPending: readonly(isPending),\n start,\n stop\n };\n}\n\nfunction useTimeout(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n callback\n } = options;\n const controls = useTimeoutFn(\n callback != null ? callback : noop,\n interval,\n options\n );\n const ready = computed(() => !controls.isPending.value);\n if (exposeControls) {\n return {\n ready,\n ...controls\n };\n } else {\n return ready;\n }\n}\n\nfunction useToNumber(value, options = {}) {\n const {\n method = \"parseFloat\",\n radix,\n nanToZero\n } = options;\n return computed(() => {\n let resolved = toValue(value);\n if (typeof resolved === \"string\")\n resolved = Number[method](resolved, radix);\n if (nanToZero && Number.isNaN(resolved))\n resolved = 0;\n return resolved;\n });\n}\n\nfunction useToString(value) {\n return computed(() => `${toValue(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n const {\n truthyValue = true,\n falsyValue = false\n } = options;\n const valueIsRef = isRef(initialValue);\n const _value = ref(initialValue);\n function toggle(value) {\n if (arguments.length) {\n _value.value = value;\n return _value.value;\n } else {\n const truthy = toValue(truthyValue);\n _value.value = _value.value === truthy ? toValue(falsyValue) : truthy;\n return _value.value;\n }\n }\n if (valueIsRef)\n return toggle;\n else\n return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n let oldList = (options == null ? void 0 : options.immediate) ? [] : [...source instanceof Function ? source() : Array.isArray(source) ? source : toValue(source)];\n return watch(source, (newList, _, onCleanup) => {\n const oldListRemains = Array.from({ length: oldList.length });\n const added = [];\n for (const obj of newList) {\n let found = false;\n for (let i = 0; i < oldList.length; i++) {\n if (!oldListRemains[i] && obj === oldList[i]) {\n oldListRemains[i] = true;\n found = true;\n break;\n }\n }\n if (!found)\n added.push(obj);\n }\n const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n cb(newList, oldList, added, removed, onCleanup);\n oldList = [...newList];\n }, options);\n}\n\nfunction watchAtMost(source, cb, options) {\n const {\n count,\n ...watchOptions\n } = options;\n const current = ref(0);\n const stop = watchWithFilter(\n source,\n (...args) => {\n current.value += 1;\n if (current.value >= toValue(count))\n nextTick(() => stop());\n cb(...args);\n },\n watchOptions\n );\n return { count: current, stop };\n}\n\nfunction watchDebounced(source, cb, options = {}) {\n const {\n debounce = 0,\n maxWait = void 0,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: debounceFilter(debounce, { maxWait })\n }\n );\n}\n\nfunction watchDeep(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n deep: true\n }\n );\n}\n\nfunction watchIgnorable(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n const filteredCb = createFilterWrapper(\n eventFilter,\n cb\n );\n let ignoreUpdates;\n let ignorePrevAsyncUpdates;\n let stop;\n if (watchOptions.flush === \"sync\") {\n const ignore = ref(false);\n ignorePrevAsyncUpdates = () => {\n };\n ignoreUpdates = (updater) => {\n ignore.value = true;\n updater();\n ignore.value = false;\n };\n stop = watch(\n source,\n (...args) => {\n if (!ignore.value)\n filteredCb(...args);\n },\n watchOptions\n );\n } else {\n const disposables = [];\n const ignoreCounter = ref(0);\n const syncCounter = ref(0);\n ignorePrevAsyncUpdates = () => {\n ignoreCounter.value = syncCounter.value;\n };\n disposables.push(\n watch(\n source,\n () => {\n syncCounter.value++;\n },\n { ...watchOptions, flush: \"sync\" }\n )\n );\n ignoreUpdates = (updater) => {\n const syncCounterPrev = syncCounter.value;\n updater();\n ignoreCounter.value += syncCounter.value - syncCounterPrev;\n };\n disposables.push(\n watch(\n source,\n (...args) => {\n const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n ignoreCounter.value = 0;\n syncCounter.value = 0;\n if (ignore)\n return;\n filteredCb(...args);\n },\n watchOptions\n )\n );\n stop = () => {\n disposables.forEach((fn) => fn());\n };\n }\n return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchImmediate(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n immediate: true\n }\n );\n}\n\nfunction watchOnce(source, cb, options) {\n const stop = watch(source, (...args) => {\n nextTick(() => stop());\n return cb(...args);\n }, options);\n return stop;\n}\n\nfunction watchThrottled(source, cb, options = {}) {\n const {\n throttle = 0,\n trailing = true,\n leading = true,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: throttleFilter(throttle, trailing, leading)\n }\n );\n}\n\nfunction watchTriggerable(source, cb, options = {}) {\n let cleanupFn;\n function onEffect() {\n if (!cleanupFn)\n return;\n const fn = cleanupFn;\n cleanupFn = void 0;\n fn();\n }\n function onCleanup(callback) {\n cleanupFn = callback;\n }\n const _cb = (value, oldValue) => {\n onEffect();\n return cb(value, oldValue, onCleanup);\n };\n const res = watchIgnorable(source, _cb, options);\n const { ignoreUpdates } = res;\n const trigger = () => {\n let res2;\n ignoreUpdates(() => {\n res2 = _cb(getWatchSources(source), getOldValue(source));\n });\n return res2;\n };\n return {\n ...res,\n trigger\n };\n}\nfunction getWatchSources(sources) {\n if (isReactive(sources))\n return sources;\n if (Array.isArray(sources))\n return sources.map((item) => toValue(item));\n return toValue(sources);\n}\nfunction getOldValue(source) {\n return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n const stop = watch(\n source,\n (v, ov, onInvalidate) => {\n if (v) {\n if (options == null ? void 0 : options.once)\n nextTick(() => stop());\n cb(v, ov, onInvalidate);\n }\n },\n {\n ...options,\n once: false\n }\n );\n return stop;\n}\n\nexport { assert, refAutoReset as autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, watchIgnorable as ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, provideLocal, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRef, toRefs, toValue, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","export function deprecate(fn) {\n return fn\n}\n\nexport function equal() {}\n\nexport function ok() {}\n\nexport function unreachable() {}\n","/*! @license DOMPurify 3.4.17 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.17/LICENSE */\nfunction _OverloadYield(e, d) {\n\tthis.v = e, this.k = d;\n}\nfunction _arrayLikeToArray(r, a) {\n\t(null == a || a > r.length) && (a = r.length);\n\tfor (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n\treturn n;\n}\nfunction _arrayWithHoles(r) {\n\tif (Array.isArray(r)) return r;\n}\nfunction _iterableToArrayLimit(r, l) {\n\tvar t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n\tif (null != t) {\n\t\tvar e, n, i, u, a = [], f = !0, o = !1;\n\t\ttry {\n\t\t\tif (i = (t = t.call(r)).next, 0 === l) {\n\t\t\t\tif (Object(t) !== t) return;\n\t\t\t\tf = !1;\n\t\t\t} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n\t\t} catch (r) {\n\t\t\to = !0, n = r;\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tif (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n\t\t\t} finally {\n\t\t\t\tif (o) throw n;\n\t\t\t}\n\t\t}\n\t\treturn a;\n\t}\n}\nfunction _nonIterableRest() {\n\tthrow new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */\nfunction _slicedToArray(r, e) {\n\treturn _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _unsupportedIterableToArray(r, a) {\n\tif (r) {\n\t\tif (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n\t\tvar t = {}.toString.call(r).slice(8, -1);\n\t\treturn \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n\t}\n}\nfunction AsyncGenerator(e) {\n\tvar t, n;\n\tfunction resume(t, n) {\n\t\ttry {\n\t\t\tvar r = e[t](n), o = r.value, u = o instanceof _OverloadYield;\n\t\t\tPromise.resolve(u ? o.v : o).then(function(n) {\n\t\t\t\tif (u) {\n\t\t\t\t\tvar i = \"return\" === t && o.k ? t : \"next\";\n\t\t\t\t\tif (!o.k || n.done) return resume(i, n);\n\t\t\t\t\tn = e[i](n).value;\n\t\t\t\t}\n\t\t\t\tsettle(!!r.done, n);\n\t\t\t}, function(e) {\n\t\t\t\tresume(\"throw\", e);\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tsettle(2, e);\n\t\t}\n\t}\n\tfunction settle(e, r) {\n\t\t2 === e ? t.reject(r) : t.resolve({\n\t\t\tvalue: r,\n\t\t\tdone: e\n\t\t}), (t = t.next) ? resume(t.key, t.arg) : n = null;\n\t}\n\tthis._invoke = function(e, r) {\n\t\treturn new Promise(function(o, u) {\n\t\t\tvar i = {\n\t\t\t\tkey: e,\n\t\t\t\targ: r,\n\t\t\t\tresolve: o,\n\t\t\t\treject: u,\n\t\t\t\tnext: null\n\t\t\t};\n\t\t\tn ? n = n.next = i : (t = n = i, resume(e, r));\n\t\t});\n\t}, \"function\" != typeof e.return && (this.return = void 0);\n}\nAsyncGenerator.prototype[\"function\" == typeof Symbol && Symbol.asyncIterator || \"@@asyncIterator\"] = function() {\n\treturn this;\n}, AsyncGenerator.prototype.next = function(e) {\n\treturn this._invoke(\"next\", e);\n}, AsyncGenerator.prototype.throw = function(e) {\n\treturn this._invoke(\"throw\", e);\n}, AsyncGenerator.prototype.return = function(e) {\n\treturn this._invoke(\"return\", e);\n};\nconst entries = Object.entries;\nconst setPrototypeOf = Object.setPrototypeOf;\nconst isFrozen = Object.isFrozen;\nconst getPrototypeOf = Object.getPrototypeOf;\nconst getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nlet freeze = Object.freeze;\nlet seal = Object.seal;\nlet create = Object.create;\nlet _ref = typeof Reflect !== \"undefined\" && Reflect;\nlet apply = _ref.apply;\nlet construct = _ref.construct;\nif (!freeze) freeze = function freeze(x) {\n\treturn x;\n};\nif (!seal) seal = function seal(x) {\n\treturn x;\n};\nif (!apply) apply = function apply(func, thisArg) {\n\tfor (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) args[_key - 2] = arguments[_key];\n\treturn func.apply(thisArg, args);\n};\nif (!construct) construct = function construct(Func) {\n\tfor (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) args[_key2 - 1] = arguments[_key2];\n\treturn new Func(...args);\n};\nconst arrayForEach = unapply(Array.prototype.forEach);\nArray.prototype.indexOf;\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\nconst arraySplice = unapply(Array.prototype.splice);\nconst arrayIsArray = Array.isArray;\nconst setCreate = unconstruct(Set);\nconst setAdd = unapply(Set.prototype.add);\nconst setHas = unapply(Set.prototype.has);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst numberToString = unapply(Number.prototype.toString);\nconst booleanToString = unapply(Boolean.prototype.toString);\nconst bigintToString = typeof BigInt === \"undefined\" ? null : unapply(BigInt.prototype.toString);\nconst symbolToString = typeof Symbol === \"undefined\" ? null : unapply(Symbol.prototype.toString);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst objectToString = unapply(Object.prototype.toString);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n* Creates a new function that calls the given function with a specified thisArg and arguments.\n*\n* @param func - The function to be wrapped and called.\n* @returns A new function that calls the given function with a specified thisArg and arguments.\n*/\nfunction unapply(func) {\n\treturn function(thisArg) {\n\t\tif (thisArg instanceof RegExp) thisArg.lastIndex = 0;\n\t\tfor (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) args[_key3 - 1] = arguments[_key3];\n\t\treturn apply(func, thisArg, args);\n\t};\n}\n/**\n* Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n*\n* @param func - The constructor function to be wrapped and called.\n* @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n*/\nfunction unconstruct(Func) {\n\treturn function() {\n\t\tfor (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) args[_key4] = arguments[_key4];\n\t\treturn construct(Func, args);\n\t};\n}\n/**\n* Add properties to a lookup table\n*\n* @param set - The set to which elements will be added.\n* @param array - The array containing elements to be added to the set.\n* @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n* @returns The modified set with added elements.\n*/\nfunction addToSet(set, array) {\n\tlet transformCaseFunc = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : stringToLowerCase;\n\tif (setPrototypeOf) setPrototypeOf(set, null);\n\tif (!arrayIsArray(array)) return set;\n\tlet l = array.length;\n\twhile (l--) {\n\t\tlet element = array[l];\n\t\tif (typeof element === \"string\") {\n\t\t\tconst lcElement = transformCaseFunc(element);\n\t\t\tif (lcElement !== element) {\n\t\t\t\tif (!isFrozen(array)) array[l] = lcElement;\n\t\t\t\telement = lcElement;\n\t\t\t}\n\t\t}\n\t\tset[element] = true;\n\t}\n\treturn set;\n}\n/**\n* Clean up an array to harden against CSPP\n*\n* @param array - The array to be cleaned.\n* @returns The cleaned version of the array\n*/\nfunction cleanArray(array) {\n\tfor (let index = 0; index < array.length; index++) if (!objectHasOwnProperty(array, index)) array[index] = null;\n\treturn array;\n}\n/**\n* Shallow clone an object\n*\n* @param object - The object to be cloned.\n* @returns A new object that copies the original.\n*/\nfunction clone(object) {\n\tconst newObject = create(null);\n\tfor (const _ref2 of entries(object)) {\n\t\tvar _ref3 = _slicedToArray(_ref2, 2);\n\t\tconst property = _ref3[0];\n\t\tconst value = _ref3[1];\n\t\tif (objectHasOwnProperty(object, property)) {\n\t\t\tif (arrayIsArray(value)) newObject[property] = cleanArray(value);\n\t\t\telse if (value && typeof value === \"object\" && value.constructor === Object) newObject[property] = clone(value);\n\t\t\telse newObject[property] = value;\n\t\t}\n\t}\n\treturn newObject;\n}\n/**\n* Convert non-node values into strings without depending on direct property access.\n*\n* @param value - The value to stringify.\n* @returns A string representation of the provided value.\n*/\nfunction stringifyValue(value) {\n\tswitch (typeof value) {\n\t\tcase \"string\": return value;\n\t\tcase \"number\": return numberToString(value);\n\t\tcase \"boolean\": return booleanToString(value);\n\t\tcase \"bigint\": return bigintToString ? bigintToString(value) : \"0\";\n\t\tcase \"symbol\": return symbolToString ? symbolToString(value) : \"Symbol()\";\n\t\tcase \"undefined\": return objectToString(value);\n\t\tcase \"function\":\n\t\tcase \"object\": {\n\t\t\tif (value === null) return objectToString(value);\n\t\t\tconst valueAsRecord = value;\n\t\t\tconst valueToString = lookupGetter(valueAsRecord, \"toString\");\n\t\t\tif (typeof valueToString === \"function\") {\n\t\t\t\tconst stringified = valueToString(valueAsRecord);\n\t\t\t\treturn typeof stringified === \"string\" ? stringified : objectToString(stringified);\n\t\t\t}\n\t\t\treturn objectToString(value);\n\t\t}\n\t\tdefault: return objectToString(value);\n\t}\n}\n/**\n* This method automatically checks if the prop is function or getter and behaves accordingly.\n*\n* @param object - The object to look up the getter function in its prototype chain.\n* @param prop - The property name for which to find the getter function.\n* @returns The getter function found in the prototype chain or a fallback function.\n*/\nfunction lookupGetter(object, prop) {\n\twhile (object !== null) {\n\t\tconst desc = getOwnPropertyDescriptor(object, prop);\n\t\tif (desc) {\n\t\t\tif (desc.get) return unapply(desc.get);\n\t\t\tif (typeof desc.value === \"function\") return unapply(desc.value);\n\t\t}\n\t\tobject = getPrototypeOf(object);\n\t}\n\tfunction fallbackValue() {\n\t\treturn null;\n\t}\n\treturn fallbackValue;\n}\n/**\n* Like lookupGetter, but for accessor properties only, and returns null\n* instead of a null-returning fallback when no getter exists on the chain.\n* Lets a caller fall back to a direct property read in environments that\n* lack the getter, where a fallback returning null would be indistinguishable\n* from a legitimate null value (e.g. namespaceURI of a no-namespace element).\n*\n* @param object - The object (usually a prototype) to start the lookup at.\n* @param prop - The accessor property name.\n* @returns The unapplied getter, or null if none was found.\n*/\nfunction lookupAccessor(object, prop) {\n\twhile (object !== null) {\n\t\tconst desc = getOwnPropertyDescriptor(object, prop);\n\t\tif (desc) return desc.get ? unapply(desc.get) : null;\n\t\tobject = getPrototypeOf(object);\n\t}\n\treturn null;\n}\nfunction isRegex(value) {\n\ttry {\n\t\tregExpTest(value, \"\");\n\t\treturn true;\n\t} catch (_unused) {\n\t\treturn false;\n\t}\n}\nconst html$1 = freeze([\n\t\"a\",\n\t\"abbr\",\n\t\"acronym\",\n\t\"address\",\n\t\"area\",\n\t\"article\",\n\t\"aside\",\n\t\"audio\",\n\t\"b\",\n\t\"bdi\",\n\t\"bdo\",\n\t\"big\",\n\t\"blink\",\n\t\"blockquote\",\n\t\"body\",\n\t\"br\",\n\t\"button\",\n\t\"canvas\",\n\t\"caption\",\n\t\"center\",\n\t\"cite\",\n\t\"code\",\n\t\"col\",\n\t\"colgroup\",\n\t\"content\",\n\t\"data\",\n\t\"datalist\",\n\t\"dd\",\n\t\"decorator\",\n\t\"del\",\n\t\"details\",\n\t\"dfn\",\n\t\"dialog\",\n\t\"dir\",\n\t\"div\",\n\t\"dl\",\n\t\"dt\",\n\t\"element\",\n\t\"em\",\n\t\"fieldset\",\n\t\"figcaption\",\n\t\"figure\",\n\t\"font\",\n\t\"footer\",\n\t\"form\",\n\t\"h1\",\n\t\"h2\",\n\t\"h3\",\n\t\"h4\",\n\t\"h5\",\n\t\"h6\",\n\t\"head\",\n\t\"header\",\n\t\"hgroup\",\n\t\"hr\",\n\t\"html\",\n\t\"i\",\n\t\"img\",\n\t\"input\",\n\t\"ins\",\n\t\"kbd\",\n\t\"label\",\n\t\"legend\",\n\t\"li\",\n\t\"main\",\n\t\"map\",\n\t\"mark\",\n\t\"marquee\",\n\t\"menu\",\n\t\"menuitem\",\n\t\"meter\",\n\t\"nav\",\n\t\"nobr\",\n\t\"ol\",\n\t\"optgroup\",\n\t\"option\",\n\t\"output\",\n\t\"p\",\n\t\"picture\",\n\t\"pre\",\n\t\"progress\",\n\t\"q\",\n\t\"rp\",\n\t\"rt\",\n\t\"ruby\",\n\t\"s\",\n\t\"samp\",\n\t\"search\",\n\t\"section\",\n\t\"select\",\n\t\"shadow\",\n\t\"slot\",\n\t\"small\",\n\t\"source\",\n\t\"spacer\",\n\t\"span\",\n\t\"strike\",\n\t\"strong\",\n\t\"style\",\n\t\"sub\",\n\t\"summary\",\n\t\"sup\",\n\t\"table\",\n\t\"tbody\",\n\t\"td\",\n\t\"template\",\n\t\"textarea\",\n\t\"tfoot\",\n\t\"th\",\n\t\"thead\",\n\t\"time\",\n\t\"tr\",\n\t\"track\",\n\t\"tt\",\n\t\"u\",\n\t\"ul\",\n\t\"var\",\n\t\"video\",\n\t\"wbr\"\n]);\nconst svg$1 = freeze([\n\t\"svg\",\n\t\"a\",\n\t\"altglyph\",\n\t\"altglyphdef\",\n\t\"altglyphitem\",\n\t\"animatecolor\",\n\t\"animatemotion\",\n\t\"animatetransform\",\n\t\"circle\",\n\t\"clippath\",\n\t\"defs\",\n\t\"desc\",\n\t\"ellipse\",\n\t\"enterkeyhint\",\n\t\"exportparts\",\n\t\"filter\",\n\t\"font\",\n\t\"g\",\n\t\"glyph\",\n\t\"glyphref\",\n\t\"hkern\",\n\t\"image\",\n\t\"inputmode\",\n\t\"line\",\n\t\"lineargradient\",\n\t\"marker\",\n\t\"mask\",\n\t\"metadata\",\n\t\"mpath\",\n\t\"part\",\n\t\"path\",\n\t\"pattern\",\n\t\"polygon\",\n\t\"polyline\",\n\t\"radialgradient\",\n\t\"rect\",\n\t\"stop\",\n\t\"style\",\n\t\"switch\",\n\t\"symbol\",\n\t\"text\",\n\t\"textpath\",\n\t\"title\",\n\t\"tref\",\n\t\"tspan\",\n\t\"view\",\n\t\"vkern\"\n]);\nconst svgFilters = freeze([\n\t\"feBlend\",\n\t\"feColorMatrix\",\n\t\"feComponentTransfer\",\n\t\"feComposite\",\n\t\"feConvolveMatrix\",\n\t\"feDiffuseLighting\",\n\t\"feDisplacementMap\",\n\t\"feDistantLight\",\n\t\"feDropShadow\",\n\t\"feFlood\",\n\t\"feFuncA\",\n\t\"feFuncB\",\n\t\"feFuncG\",\n\t\"feFuncR\",\n\t\"feGaussianBlur\",\n\t\"feImage\",\n\t\"feMerge\",\n\t\"feMergeNode\",\n\t\"feMorphology\",\n\t\"feOffset\",\n\t\"fePointLight\",\n\t\"feSpecularLighting\",\n\t\"feSpotLight\",\n\t\"feTile\",\n\t\"feTurbulence\"\n]);\nconst svgDisallowed = freeze([\n\t\"animate\",\n\t\"color-profile\",\n\t\"cursor\",\n\t\"discard\",\n\t\"font-face\",\n\t\"font-face-format\",\n\t\"font-face-name\",\n\t\"font-face-src\",\n\t\"font-face-uri\",\n\t\"foreignobject\",\n\t\"hatch\",\n\t\"hatchpath\",\n\t\"mesh\",\n\t\"meshgradient\",\n\t\"meshpatch\",\n\t\"meshrow\",\n\t\"missing-glyph\",\n\t\"script\",\n\t\"set\",\n\t\"solidcolor\",\n\t\"unknown\",\n\t\"use\"\n]);\nconst mathMl$1 = freeze([\n\t\"math\",\n\t\"menclose\",\n\t\"merror\",\n\t\"mfenced\",\n\t\"mfrac\",\n\t\"mglyph\",\n\t\"mi\",\n\t\"mlabeledtr\",\n\t\"mmultiscripts\",\n\t\"mn\",\n\t\"mo\",\n\t\"mover\",\n\t\"mpadded\",\n\t\"mphantom\",\n\t\"mroot\",\n\t\"mrow\",\n\t\"ms\",\n\t\"mspace\",\n\t\"msqrt\",\n\t\"mstyle\",\n\t\"msub\",\n\t\"msup\",\n\t\"msubsup\",\n\t\"mtable\",\n\t\"mtd\",\n\t\"mtext\",\n\t\"mtr\",\n\t\"munder\",\n\t\"munderover\",\n\t\"mprescripts\"\n]);\nconst mathMlDisallowed = freeze([\n\t\"maction\",\n\t\"maligngroup\",\n\t\"malignmark\",\n\t\"mlongdiv\",\n\t\"mscarries\",\n\t\"mscarry\",\n\t\"msgroup\",\n\t\"mstack\",\n\t\"msline\",\n\t\"msrow\",\n\t\"semantics\",\n\t\"annotation\",\n\t\"annotation-xml\",\n\t\"mprescripts\",\n\t\"none\"\n]);\nconst text = freeze([\"#text\"]);\nconst html = freeze([\n\t\"accept\",\n\t\"action\",\n\t\"align\",\n\t\"alt\",\n\t\"autocapitalize\",\n\t\"autocomplete\",\n\t\"autopictureinpicture\",\n\t\"autoplay\",\n\t\"background\",\n\t\"bgcolor\",\n\t\"border\",\n\t\"capture\",\n\t\"cellpadding\",\n\t\"cellspacing\",\n\t\"checked\",\n\t\"cite\",\n\t\"class\",\n\t\"clear\",\n\t\"color\",\n\t\"cols\",\n\t\"colspan\",\n\t\"command\",\n\t\"commandfor\",\n\t\"controls\",\n\t\"controlslist\",\n\t\"coords\",\n\t\"crossorigin\",\n\t\"datetime\",\n\t\"decoding\",\n\t\"default\",\n\t\"dir\",\n\t\"disabled\",\n\t\"disablepictureinpicture\",\n\t\"disableremoteplayback\",\n\t\"download\",\n\t\"draggable\",\n\t\"enctype\",\n\t\"enterkeyhint\",\n\t\"exportparts\",\n\t\"face\",\n\t\"for\",\n\t\"headers\",\n\t\"height\",\n\t\"hidden\",\n\t\"high\",\n\t\"href\",\n\t\"hreflang\",\n\t\"id\",\n\t\"inert\",\n\t\"inputmode\",\n\t\"integrity\",\n\t\"ismap\",\n\t\"kind\",\n\t\"label\",\n\t\"lang\",\n\t\"list\",\n\t\"loading\",\n\t\"loop\",\n\t\"low\",\n\t\"max\",\n\t\"maxlength\",\n\t\"media\",\n\t\"method\",\n\t\"min\",\n\t\"minlength\",\n\t\"multiple\",\n\t\"muted\",\n\t\"name\",\n\t\"nonce\",\n\t\"noshade\",\n\t\"novalidate\",\n\t\"nowrap\",\n\t\"open\",\n\t\"optimum\",\n\t\"part\",\n\t\"pattern\",\n\t\"placeholder\",\n\t\"playsinline\",\n\t\"popover\",\n\t\"popovertarget\",\n\t\"popovertargetaction\",\n\t\"poster\",\n\t\"preload\",\n\t\"pubdate\",\n\t\"radiogroup\",\n\t\"readonly\",\n\t\"rel\",\n\t\"required\",\n\t\"rev\",\n\t\"reversed\",\n\t\"role\",\n\t\"rows\",\n\t\"rowspan\",\n\t\"spellcheck\",\n\t\"scope\",\n\t\"selected\",\n\t\"shape\",\n\t\"size\",\n\t\"sizes\",\n\t\"slot\",\n\t\"span\",\n\t\"srclang\",\n\t\"start\",\n\t\"src\",\n\t\"srcset\",\n\t\"step\",\n\t\"style\",\n\t\"summary\",\n\t\"tabindex\",\n\t\"title\",\n\t\"translate\",\n\t\"type\",\n\t\"usemap\",\n\t\"valign\",\n\t\"value\",\n\t\"width\",\n\t\"wrap\",\n\t\"xmlns\"\n]);\nconst svg = freeze([\n\t\"accent-height\",\n\t\"accumulate\",\n\t\"additive\",\n\t\"alignment-baseline\",\n\t\"amplitude\",\n\t\"ascent\",\n\t\"attributename\",\n\t\"attributetype\",\n\t\"azimuth\",\n\t\"basefrequency\",\n\t\"baseline-shift\",\n\t\"begin\",\n\t\"bias\",\n\t\"by\",\n\t\"class\",\n\t\"clip\",\n\t\"clippathunits\",\n\t\"clip-path\",\n\t\"clip-rule\",\n\t\"color\",\n\t\"color-interpolation\",\n\t\"color-interpolation-filters\",\n\t\"color-profile\",\n\t\"color-rendering\",\n\t\"cx\",\n\t\"cy\",\n\t\"d\",\n\t\"dx\",\n\t\"dy\",\n\t\"diffuseconstant\",\n\t\"direction\",\n\t\"display\",\n\t\"divisor\",\n\t\"dominant-baseline\",\n\t\"dur\",\n\t\"edgemode\",\n\t\"elevation\",\n\t\"end\",\n\t\"exponent\",\n\t\"fill\",\n\t\"fill-opacity\",\n\t\"fill-rule\",\n\t\"filter\",\n\t\"filterunits\",\n\t\"flood-color\",\n\t\"flood-opacity\",\n\t\"font-family\",\n\t\"font-size\",\n\t\"font-size-adjust\",\n\t\"font-stretch\",\n\t\"font-style\",\n\t\"font-variant\",\n\t\"font-weight\",\n\t\"fx\",\n\t\"fy\",\n\t\"g1\",\n\t\"g2\",\n\t\"glyph-name\",\n\t\"glyphref\",\n\t\"gradientunits\",\n\t\"gradienttransform\",\n\t\"height\",\n\t\"href\",\n\t\"id\",\n\t\"image-rendering\",\n\t\"in\",\n\t\"in2\",\n\t\"intercept\",\n\t\"k\",\n\t\"k1\",\n\t\"k2\",\n\t\"k3\",\n\t\"k4\",\n\t\"kerning\",\n\t\"keypoints\",\n\t\"keysplines\",\n\t\"keytimes\",\n\t\"lang\",\n\t\"lengthadjust\",\n\t\"letter-spacing\",\n\t\"kernelmatrix\",\n\t\"kernelunitlength\",\n\t\"lighting-color\",\n\t\"local\",\n\t\"marker-end\",\n\t\"marker-mid\",\n\t\"marker-start\",\n\t\"markerheight\",\n\t\"markerunits\",\n\t\"markerwidth\",\n\t\"maskcontentunits\",\n\t\"maskunits\",\n\t\"max\",\n\t\"mask\",\n\t\"mask-type\",\n\t\"media\",\n\t\"method\",\n\t\"mode\",\n\t\"min\",\n\t\"name\",\n\t\"numoctaves\",\n\t\"offset\",\n\t\"operator\",\n\t\"opacity\",\n\t\"order\",\n\t\"orient\",\n\t\"orientation\",\n\t\"origin\",\n\t\"overflow\",\n\t\"paint-order\",\n\t\"path\",\n\t\"pathlength\",\n\t\"patterncontentunits\",\n\t\"patterntransform\",\n\t\"patternunits\",\n\t\"pointer-events\",\n\t\"points\",\n\t\"preservealpha\",\n\t\"preserveaspectratio\",\n\t\"primitiveunits\",\n\t\"r\",\n\t\"rx\",\n\t\"ry\",\n\t\"radius\",\n\t\"refx\",\n\t\"refy\",\n\t\"repeatcount\",\n\t\"repeatdur\",\n\t\"restart\",\n\t\"result\",\n\t\"rotate\",\n\t\"scale\",\n\t\"seed\",\n\t\"shape-rendering\",\n\t\"slope\",\n\t\"specularconstant\",\n\t\"specularexponent\",\n\t\"spreadmethod\",\n\t\"startoffset\",\n\t\"stddeviation\",\n\t\"stitchtiles\",\n\t\"stop-color\",\n\t\"stop-opacity\",\n\t\"stroke-dasharray\",\n\t\"stroke-dashoffset\",\n\t\"stroke-linecap\",\n\t\"stroke-linejoin\",\n\t\"stroke-miterlimit\",\n\t\"stroke-opacity\",\n\t\"stroke\",\n\t\"stroke-width\",\n\t\"style\",\n\t\"surfacescale\",\n\t\"systemlanguage\",\n\t\"tabindex\",\n\t\"tablevalues\",\n\t\"targetx\",\n\t\"targety\",\n\t\"transform\",\n\t\"transform-origin\",\n\t\"text-anchor\",\n\t\"text-decoration\",\n\t\"text-orientation\",\n\t\"text-rendering\",\n\t\"textlength\",\n\t\"type\",\n\t\"u1\",\n\t\"u2\",\n\t\"unicode\",\n\t\"values\",\n\t\"vector-effect\",\n\t\"viewbox\",\n\t\"visibility\",\n\t\"version\",\n\t\"vert-adv-y\",\n\t\"vert-origin-x\",\n\t\"vert-origin-y\",\n\t\"width\",\n\t\"word-spacing\",\n\t\"wrap\",\n\t\"writing-mode\",\n\t\"xchannelselector\",\n\t\"ychannelselector\",\n\t\"x\",\n\t\"x1\",\n\t\"x2\",\n\t\"xmlns\",\n\t\"y\",\n\t\"y1\",\n\t\"y2\",\n\t\"z\",\n\t\"zoomandpan\"\n]);\nconst mathMl = freeze([\n\t\"accent\",\n\t\"accentunder\",\n\t\"align\",\n\t\"bevelled\",\n\t\"close\",\n\t\"columnalign\",\n\t\"columnlines\",\n\t\"columnspacing\",\n\t\"columnspan\",\n\t\"denomalign\",\n\t\"depth\",\n\t\"dir\",\n\t\"display\",\n\t\"displaystyle\",\n\t\"encoding\",\n\t\"fence\",\n\t\"frame\",\n\t\"height\",\n\t\"href\",\n\t\"id\",\n\t\"largeop\",\n\t\"length\",\n\t\"linethickness\",\n\t\"lquote\",\n\t\"lspace\",\n\t\"mathbackground\",\n\t\"mathcolor\",\n\t\"mathsize\",\n\t\"mathvariant\",\n\t\"maxsize\",\n\t\"minsize\",\n\t\"movablelimits\",\n\t\"notation\",\n\t\"numalign\",\n\t\"open\",\n\t\"rowalign\",\n\t\"rowlines\",\n\t\"rowspacing\",\n\t\"rowspan\",\n\t\"rspace\",\n\t\"rquote\",\n\t\"scriptlevel\",\n\t\"scriptminsize\",\n\t\"scriptsizemultiplier\",\n\t\"selection\",\n\t\"separator\",\n\t\"separators\",\n\t\"stretchy\",\n\t\"subscriptshift\",\n\t\"supscriptshift\",\n\t\"symmetric\",\n\t\"voffset\",\n\t\"width\",\n\t\"xmlns\"\n]);\nconst xml = freeze([\n\t\"xlink:href\",\n\t\"xml:id\",\n\t\"xlink:title\",\n\t\"xml:space\",\n\t\"xmlns:xlink\"\n]);\nconst MUSTACHE_EXPR = seal(/{{[\\w\\W]*|^[\\w\\W]*}}/g);\nconst ERB_EXPR = seal(/<%[\\w\\W]*|^[\\w\\W]*%>/g);\nconst TMPLIT_EXPR = seal(/\\${[\\w\\W]*/g);\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/);\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/);\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\nconst ELEMENT_MARKUP_PROBE = seal(/<[/\\w!]/g);\nconst COMMENT_MARKUP_PROBE = seal(/<[/\\w]/g);\nconst FALLBACK_TAG_CLOSE = seal(/<\\/no(script|embed|frames)/i);\nconst SELF_CLOSING_TAG = seal(/\\/>/i);\nconst NODE_TYPE = {\n\telement: 1,\n\tattribute: 2,\n\ttext: 3,\n\tcdataSection: 4,\n\tentityReference: 5,\n\tentityNode: 6,\n\tprocessingInstruction: 7,\n\tcomment: 8,\n\tdocument: 9,\n\tdocumentType: 10,\n\tdocumentFragment: 11,\n\tnotation: 12\n};\nconst LITERAL_TEXT_ELEMENTS = freeze(addToSet({}, [\n\t\"style\",\n\t\"script\",\n\t\"xmp\",\n\t\"iframe\",\n\t\"noembed\",\n\t\"noframes\",\n\t\"plaintext\",\n\t\"noscript\"\n]));\nconst getGlobal = function getGlobal() {\n\treturn typeof window === \"undefined\" ? null : window;\n};\n/**\n* Creates a no-op policy for internal use only.\n* Don't export this function outside this module!\n* @param trustedTypes The policy factory.\n* @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n* @return The policy created (or null, if Trusted Types\n* are not supported or creating the policy failed).\n*/\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n\tif (typeof trustedTypes !== \"object\" || typeof trustedTypes.createPolicy !== \"function\") return null;\n\tlet suffix = null;\n\tconst ATTR_NAME = \"data-tt-policy-suffix\";\n\tif (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) suffix = purifyHostElement.getAttribute(ATTR_NAME);\n\tconst policyName = \"dompurify\" + (suffix ? \"#\" + suffix : \"\");\n\ttry {\n\t\treturn trustedTypes.createPolicy(policyName, {\n\t\t\tcreateHTML(html) {\n\t\t\t\treturn html;\n\t\t\t},\n\t\t\tcreateScriptURL(scriptUrl) {\n\t\t\t\treturn scriptUrl;\n\t\t\t}\n\t\t});\n\t} catch (_) {\n\t\tconsole.warn(\"TrustedTypes policy \" + policyName + \" could not be created.\");\n\t\treturn null;\n\t}\n};\nconst _createHooksMap = function _createHooksMap() {\n\treturn {\n\t\tafterSanitizeAttributes: [],\n\t\tafterSanitizeElements: [],\n\t\tafterSanitizeShadowDOM: [],\n\t\tbeforeSanitizeAttributes: [],\n\t\tbeforeSanitizeElements: [],\n\t\tbeforeSanitizeShadowDOM: [],\n\t\tuponSanitizeAttribute: [],\n\t\tuponSanitizeElement: [],\n\t\tuponSanitizeShadowNode: []\n\t};\n};\n/**\n* Resolve a set-valued configuration option: a fresh set built from\n* cfg[key] when it is an own array property (seeded with a clone of\n* options.base when given, case-normalized via options.transform),\n* the fallback set otherwise.\n*\n* @param cfg the cloned, prototype-free configuration object\n* @param key the configuration property to read\n* @param fallback the set to use when the option is absent or not an array\n* @param options transform and optional base set to merge into\n* @returns the resolved set\n*/\nconst _resolveSetOption = function _resolveSetOption(cfg, key, fallback, options) {\n\treturn objectHasOwnProperty(cfg, key) && arrayIsArray(cfg[key]) ? addToSet(options.base ? clone(options.base) : {}, cfg[key], options.transform) : fallback;\n};\n/**\n* Resolve an object-valued configuration option: a prototype-free clone\n* of cfg[key] when it is an own, truthy object property, else a fresh\n* fallback built by makeFallback (fresh on every parse, so a previous\n* parse can never leak state into the next one).\n*\n* @param cfg the cloned, prototype-free configuration object\n* @param key the configuration property to read\n* @param makeFallback builds the fallback value when the option is absent\n* @returns the resolved object\n*/\nconst _resolveObjectOption = function _resolveObjectOption(cfg, key, makeFallback) {\n\tconst value = objectHasOwnProperty(cfg, key) ? cfg[key] : void 0;\n\treturn value && typeof value === \"object\" ? clone(value) : makeFallback();\n};\nfunction createDOMPurify() {\n\tlet window = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : getGlobal();\n\tconst DOMPurify = (root) => createDOMPurify(root);\n\tDOMPurify.version = \"3.4.17\";\n\tDOMPurify.removed = [];\n\tif (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n\t\tDOMPurify.isSupported = false;\n\t\treturn DOMPurify;\n\t}\n\tlet document = window.document;\n\tconst originalDocument = document;\n\tconst currentScript = originalDocument.currentScript;\n\twindow.DocumentFragment;\n\tconst HTMLTemplateElement = window.HTMLTemplateElement, Node = window.Node, Element = window.Element, NodeFilter = window.NodeFilter;\n\twindow.NamedNodeMap === void 0 && (window.NamedNodeMap || window.MozNamedAttrMap);\n\twindow.HTMLFormElement;\n\tconst DOMParser = window.DOMParser, trustedTypes = window.trustedTypes;\n\tconst ElementPrototype = Element.prototype;\n\tconst cloneNode = lookupGetter(ElementPrototype, \"cloneNode\");\n\tconst remove = lookupGetter(ElementPrototype, \"remove\");\n\tconst removeAttributeNode = lookupGetter(ElementPrototype, \"removeAttributeNode\");\n\tconst getNextSibling = lookupGetter(ElementPrototype, \"nextSibling\");\n\tconst getChildNodes = lookupGetter(ElementPrototype, \"childNodes\");\n\tconst getParentNode = lookupGetter(ElementPrototype, \"parentNode\");\n\tconst getShadowRoot = lookupGetter(ElementPrototype, \"shadowRoot\");\n\tconst getAttributes = lookupGetter(ElementPrototype, \"attributes\");\n\tconst getNodeType = Node && Node.prototype ? lookupGetter(Node.prototype, \"nodeType\") : null;\n\tconst getNodeName = Node && Node.prototype ? lookupGetter(Node.prototype, \"nodeName\") : null;\n\tconst getOwnerDocument = Node && Node.prototype ? lookupGetter(Node.prototype, \"ownerDocument\") : null;\n\tconst _readNodeType = function _readNodeType(node) {\n\t\treturn getNodeType ? getNodeType(node) : node.nodeType;\n\t};\n\tconst _readNodeName = function _readNodeName(node) {\n\t\treturn getNodeName ? getNodeName(node) : node.nodeName;\n\t};\n\tconst getNamespaceURI = lookupAccessor(ElementPrototype, \"namespaceURI\");\n\tconst _readNamespaceURI = function _readNamespaceURI(element) {\n\t\treturn getNamespaceURI ? getNamespaceURI(element) : element.namespaceURI;\n\t};\n\tif (typeof HTMLTemplateElement === \"function\") {\n\t\tconst template = document.createElement(\"template\");\n\t\tif (template.content && template.content.ownerDocument) document = template.content.ownerDocument;\n\t}\n\tlet trustedTypesPolicy;\n\tlet emptyHTML = \"\";\n\tlet defaultTrustedTypesPolicy;\n\tlet defaultTrustedTypesPolicyResolved = false;\n\tlet IN_TRUSTED_TYPES_POLICY = 0;\n\tconst _assertNotInTrustedTypesPolicy = function _assertNotInTrustedTypesPolicy() {\n\t\tif (IN_TRUSTED_TYPES_POLICY > 0) throw typeErrorCreate(\"A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the \\\"DOMPurify and Trusted Types\\\" section of the README.\");\n\t};\n\tconst _createTrustedHTML = function _createTrustedHTML(html) {\n\t\t_assertNotInTrustedTypesPolicy();\n\t\tIN_TRUSTED_TYPES_POLICY++;\n\t\ttry {\n\t\t\treturn trustedTypesPolicy.createHTML(html);\n\t\t} finally {\n\t\t\tIN_TRUSTED_TYPES_POLICY--;\n\t\t}\n\t};\n\tconst _createTrustedScriptURL = function _createTrustedScriptURL(scriptUrl) {\n\t\t_assertNotInTrustedTypesPolicy();\n\t\tIN_TRUSTED_TYPES_POLICY++;\n\t\ttry {\n\t\t\treturn trustedTypesPolicy.createScriptURL(scriptUrl);\n\t\t} finally {\n\t\t\tIN_TRUSTED_TYPES_POLICY--;\n\t\t}\n\t};\n\tconst _getDefaultTrustedTypesPolicy = function _getDefaultTrustedTypesPolicy() {\n\t\tif (!defaultTrustedTypesPolicyResolved) {\n\t\t\tdefaultTrustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n\t\t\tdefaultTrustedTypesPolicyResolved = true;\n\t\t}\n\t\treturn defaultTrustedTypesPolicy;\n\t};\n\tconst _document = document, implementation = _document.implementation, createNodeIterator = _document.createNodeIterator, createDocumentFragment = _document.createDocumentFragment, getElementsByTagName = _document.getElementsByTagName;\n\tconst importNode = originalDocument.importNode;\n\tlet hooks = _createHooksMap();\n\t/**\n\t* Expose whether this browser supports running the full DOMPurify.\n\t*/\n\tDOMPurify.isSupported = typeof entries === \"function\" && typeof getParentNode === \"function\" && implementation && implementation.createHTMLDocument !== void 0;\n\tconst MUSTACHE_EXPR$1 = MUSTACHE_EXPR, ERB_EXPR$1 = ERB_EXPR, TMPLIT_EXPR$1 = TMPLIT_EXPR, DATA_ATTR$1 = DATA_ATTR, ARIA_ATTR$1 = ARIA_ATTR, IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA, ATTR_WHITESPACE$1 = ATTR_WHITESPACE, CUSTOM_ELEMENT$1 = CUSTOM_ELEMENT;\n\tlet IS_ALLOWED_URI$1 = IS_ALLOWED_URI;\n\t/**\n\t* We consider the elements and attributes below to be safe. Ideally\n\t* don't add any new ones but feel free to remove unwanted ones.\n\t*/\n\tlet ALLOWED_TAGS = null;\n\tconst DEFAULT_ALLOWED_TAGS = addToSet({}, [\n\t\t...html$1,\n\t\t...svg$1,\n\t\t...svgFilters,\n\t\t...mathMl$1,\n\t\t...text\n\t]);\n\tlet ALLOWED_ATTR = null;\n\tconst DEFAULT_ALLOWED_ATTR = addToSet({}, [\n\t\t...html,\n\t\t...svg,\n\t\t...mathMl,\n\t\t...xml\n\t]);\n\tlet CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n\t\ttagNameCheck: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: null\n\t\t},\n\t\tattributeNameCheck: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: null\n\t\t},\n\t\tallowCustomizedBuiltInElements: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: false\n\t\t}\n\t}));\n\tlet FORBID_TAGS = null;\n\tlet FORBID_ATTR = null;\n\tconst EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n\t\ttagCheck: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: null\n\t\t},\n\t\tattributeCheck: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: null\n\t\t}\n\t}));\n\tlet ALLOW_ARIA_ATTR = true;\n\tlet ALLOW_DATA_ATTR = true;\n\tlet ALLOW_UNKNOWN_PROTOCOLS = false;\n\tlet ALLOW_SELF_CLOSE_IN_ATTR = true;\n\tlet SAFE_FOR_TEMPLATES = false;\n\tlet SAFE_FOR_XML = true;\n\tlet WHOLE_DOCUMENT = false;\n\tlet SET_CONFIG = false;\n\tlet SET_CONFIG_ALLOWED_TAGS = null;\n\tlet SET_CONFIG_ALLOWED_ATTR = null;\n\tlet FORCE_BODY = false;\n\tlet RETURN_DOM = false;\n\tlet RETURN_DOM_FRAGMENT = false;\n\tlet RETURN_TRUSTED_TYPE = false;\n\tlet SANITIZE_DOM = true;\n\tlet SANITIZE_NAMED_PROPS = false;\n\tconst SANITIZE_NAMED_PROPS_PREFIX = \"user-content-\";\n\tlet KEEP_CONTENT = true;\n\tlet IN_PLACE = false;\n\tlet IN_PLACE_VISITED = null;\n\tlet USE_PROFILES = {};\n\tlet FORBID_CONTENTS = null;\n\tconst DEFAULT_FORBID_CONTENTS = addToSet({}, [\n\t\t\"annotation-xml\",\n\t\t\"audio\",\n\t\t\"colgroup\",\n\t\t\"desc\",\n\t\t\"foreignobject\",\n\t\t\"head\",\n\t\t\"iframe\",\n\t\t\"math\",\n\t\t\"mi\",\n\t\t\"mn\",\n\t\t\"mo\",\n\t\t\"ms\",\n\t\t\"mtext\",\n\t\t\"noembed\",\n\t\t\"noframes\",\n\t\t\"noscript\",\n\t\t\"plaintext\",\n\t\t\"script\",\n\t\t\"selectedcontent\",\n\t\t\"style\",\n\t\t\"svg\",\n\t\t\"template\",\n\t\t\"thead\",\n\t\t\"title\",\n\t\t\"video\",\n\t\t\"xmp\"\n\t]);\n\tlet DATA_URI_TAGS = null;\n\tconst DEFAULT_DATA_URI_TAGS = addToSet({}, [\n\t\t\"audio\",\n\t\t\"video\",\n\t\t\"img\",\n\t\t\"source\",\n\t\t\"image\",\n\t\t\"track\"\n\t]);\n\tlet URI_SAFE_ATTRIBUTES = null;\n\tconst DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n\t\t\"alt\",\n\t\t\"class\",\n\t\t\"for\",\n\t\t\"id\",\n\t\t\"label\",\n\t\t\"name\",\n\t\t\"pattern\",\n\t\t\"placeholder\",\n\t\t\"role\",\n\t\t\"summary\",\n\t\t\"title\",\n\t\t\"value\",\n\t\t\"style\",\n\t\t\"xmlns\"\n\t]);\n\tconst MATHML_NAMESPACE = \"http://www.w3.org/1998/Math/MathML\";\n\tconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\n\tconst HTML_NAMESPACE = \"http://www.w3.org/1999/xhtml\";\n\tlet NAMESPACE = HTML_NAMESPACE;\n\tlet IS_EMPTY_INPUT = false;\n\tlet ALLOWED_NAMESPACES = null;\n\tconst DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [\n\t\tMATHML_NAMESPACE,\n\t\tSVG_NAMESPACE,\n\t\tHTML_NAMESPACE\n\t], stringToString);\n\tconst DEFAULT_MATHML_TEXT_INTEGRATION_POINTS = freeze([\n\t\t\"mi\",\n\t\t\"mo\",\n\t\t\"mn\",\n\t\t\"ms\",\n\t\t\"mtext\"\n\t]);\n\tlet MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, DEFAULT_MATHML_TEXT_INTEGRATION_POINTS);\n\tconst DEFAULT_HTML_INTEGRATION_POINTS = freeze([\"annotation-xml\"]);\n\tlet HTML_INTEGRATION_POINTS = addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS);\n\tconst COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n\t\t\"title\",\n\t\t\"style\",\n\t\t\"font\",\n\t\t\"a\",\n\t\t\"script\"\n\t]);\n\tlet PARSER_MEDIA_TYPE = null;\n\tconst SUPPORTED_PARSER_MEDIA_TYPES = [\"application/xhtml+xml\", \"text/html\"];\n\tconst DEFAULT_PARSER_MEDIA_TYPE = \"text/html\";\n\tlet transformCaseFunc = null;\n\tlet CONFIG = null;\n\tconst formElement = document.createElement(\"form\");\n\tconst isRegexOrFunction = function isRegexOrFunction(testValue) {\n\t\treturn testValue instanceof RegExp || testValue instanceof Function;\n\t};\n\t/**\n\t* _parseConfig\n\t*\n\t* @param cfg optional config literal\n\t*/\n\tconst _parseConfig = function _parseConfig() {\n\t\tlet cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n\t\tif (CONFIG && CONFIG === cfg) return;\n\t\tif (!cfg || typeof cfg !== \"object\") cfg = {};\n\t\tcfg = clone(cfg);\n\t\tPARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n\t\ttransformCaseFunc = PARSER_MEDIA_TYPE === \"application/xhtml+xml\" ? stringToString : stringToLowerCase;\n\t\tALLOWED_TAGS = _resolveSetOption(cfg, \"ALLOWED_TAGS\", DEFAULT_ALLOWED_TAGS, { transform: transformCaseFunc });\n\t\tALLOWED_ATTR = _resolveSetOption(cfg, \"ALLOWED_ATTR\", DEFAULT_ALLOWED_ATTR, { transform: transformCaseFunc });\n\t\tALLOWED_NAMESPACES = _resolveSetOption(cfg, \"ALLOWED_NAMESPACES\", DEFAULT_ALLOWED_NAMESPACES, { transform: stringToString });\n\t\tURI_SAFE_ATTRIBUTES = _resolveSetOption(cfg, \"ADD_URI_SAFE_ATTR\", DEFAULT_URI_SAFE_ATTRIBUTES, {\n\t\t\ttransform: transformCaseFunc,\n\t\t\tbase: DEFAULT_URI_SAFE_ATTRIBUTES\n\t\t});\n\t\tDATA_URI_TAGS = _resolveSetOption(cfg, \"ADD_DATA_URI_TAGS\", DEFAULT_DATA_URI_TAGS, {\n\t\t\ttransform: transformCaseFunc,\n\t\t\tbase: DEFAULT_DATA_URI_TAGS\n\t\t});\n\t\tFORBID_CONTENTS = _resolveSetOption(cfg, \"FORBID_CONTENTS\", DEFAULT_FORBID_CONTENTS, { transform: transformCaseFunc });\n\t\tFORBID_TAGS = _resolveSetOption(cfg, \"FORBID_TAGS\", clone({}), { transform: transformCaseFunc });\n\t\tFORBID_ATTR = _resolveSetOption(cfg, \"FORBID_ATTR\", clone({}), { transform: transformCaseFunc });\n\t\tUSE_PROFILES = objectHasOwnProperty(cfg, \"USE_PROFILES\") ? cfg.USE_PROFILES && typeof cfg.USE_PROFILES === \"object\" ? clone(cfg.USE_PROFILES) : cfg.USE_PROFILES : false;\n\t\tALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;\n\t\tALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;\n\t\tALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;\n\t\tALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false;\n\t\tSAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;\n\t\tSAFE_FOR_XML = cfg.SAFE_FOR_XML !== false;\n\t\tWHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;\n\t\tRETURN_DOM = cfg.RETURN_DOM || false;\n\t\tRETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;\n\t\tRETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;\n\t\tFORCE_BODY = cfg.FORCE_BODY || false;\n\t\tSANITIZE_DOM = cfg.SANITIZE_DOM !== false;\n\t\tSANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false;\n\t\tKEEP_CONTENT = cfg.KEEP_CONTENT !== false;\n\t\tIN_PLACE = cfg.IN_PLACE || false;\n\t\tIS_ALLOWED_URI$1 = isRegex(cfg.ALLOWED_URI_REGEXP) ? cfg.ALLOWED_URI_REGEXP : IS_ALLOWED_URI;\n\t\tNAMESPACE = typeof cfg.NAMESPACE === \"string\" ? cfg.NAMESPACE : HTML_NAMESPACE;\n\t\tMATHML_TEXT_INTEGRATION_POINTS = _resolveObjectOption(cfg, \"MATHML_TEXT_INTEGRATION_POINTS\", () => addToSet({}, DEFAULT_MATHML_TEXT_INTEGRATION_POINTS));\n\t\tHTML_INTEGRATION_POINTS = _resolveObjectOption(cfg, \"HTML_INTEGRATION_POINTS\", () => addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS));\n\t\tconst customElementHandling = _resolveObjectOption(cfg, \"CUSTOM_ELEMENT_HANDLING\", () => create(null));\n\t\tCUSTOM_ELEMENT_HANDLING = create(null);\n\t\tif (objectHasOwnProperty(customElementHandling, \"tagNameCheck\") && isRegexOrFunction(customElementHandling.tagNameCheck)) CUSTOM_ELEMENT_HANDLING.tagNameCheck = customElementHandling.tagNameCheck;\n\t\tif (objectHasOwnProperty(customElementHandling, \"attributeNameCheck\") && isRegexOrFunction(customElementHandling.attributeNameCheck)) CUSTOM_ELEMENT_HANDLING.attributeNameCheck = customElementHandling.attributeNameCheck;\n\t\tif (objectHasOwnProperty(customElementHandling, \"allowCustomizedBuiltInElements\") && typeof customElementHandling.allowCustomizedBuiltInElements === \"boolean\") CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = customElementHandling.allowCustomizedBuiltInElements;\n\t\tseal(CUSTOM_ELEMENT_HANDLING);\n\t\tif (SAFE_FOR_TEMPLATES) ALLOW_DATA_ATTR = false;\n\t\tif (RETURN_DOM_FRAGMENT) RETURN_DOM = true;\n\t\tif (USE_PROFILES) {\n\t\t\tALLOWED_TAGS = addToSet({}, text);\n\t\t\tALLOWED_ATTR = create(null);\n\t\t\tif (USE_PROFILES.html === true) {\n\t\t\t\taddToSet(ALLOWED_TAGS, html$1);\n\t\t\t\taddToSet(ALLOWED_ATTR, html);\n\t\t\t}\n\t\t\tif (USE_PROFILES.svg === true) {\n\t\t\t\taddToSet(ALLOWED_TAGS, svg$1);\n\t\t\t\taddToSet(ALLOWED_ATTR, svg);\n\t\t\t\taddToSet(ALLOWED_ATTR, xml);\n\t\t\t}\n\t\t\tif (USE_PROFILES.svgFilters === true) {\n\t\t\t\taddToSet(ALLOWED_TAGS, svgFilters);\n\t\t\t\taddToSet(ALLOWED_ATTR, svg);\n\t\t\t\taddToSet(ALLOWED_ATTR, xml);\n\t\t\t}\n\t\t\tif (USE_PROFILES.mathMl === true) {\n\t\t\t\taddToSet(ALLOWED_TAGS, mathMl$1);\n\t\t\t\taddToSet(ALLOWED_ATTR, mathMl);\n\t\t\t\taddToSet(ALLOWED_ATTR, xml);\n\t\t\t}\n\t\t}\n\t\tEXTRA_ELEMENT_HANDLING.tagCheck = null;\n\t\tEXTRA_ELEMENT_HANDLING.attributeCheck = null;\n\t\tif (objectHasOwnProperty(cfg, \"ADD_TAGS\")) {\n\t\t\tif (typeof cfg.ADD_TAGS === \"function\") EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n\t\t\telse if (arrayIsArray(cfg.ADD_TAGS)) {\n\t\t\t\tif (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) ALLOWED_TAGS = clone(ALLOWED_TAGS);\n\t\t\t\taddToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n\t\t\t}\n\t\t}\n\t\tif (objectHasOwnProperty(cfg, \"ADD_ATTR\")) {\n\t\t\tif (typeof cfg.ADD_ATTR === \"function\") EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n\t\t\telse if (arrayIsArray(cfg.ADD_ATTR)) {\n\t\t\t\tif (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) ALLOWED_ATTR = clone(ALLOWED_ATTR);\n\t\t\t\taddToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n\t\t\t}\n\t\t}\n\t\tif (objectHasOwnProperty(cfg, \"ADD_FORBID_CONTENTS\") && arrayIsArray(cfg.ADD_FORBID_CONTENTS)) {\n\t\t\tif (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) FORBID_CONTENTS = clone(FORBID_CONTENTS);\n\t\t\taddToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n\t\t}\n\t\tif (KEEP_CONTENT) ALLOWED_TAGS[\"#text\"] = true;\n\t\tif (WHOLE_DOCUMENT) addToSet(ALLOWED_TAGS, [\n\t\t\t\"html\",\n\t\t\t\"head\",\n\t\t\t\"body\"\n\t\t]);\n\t\tif (ALLOWED_TAGS.table) {\n\t\t\taddToSet(ALLOWED_TAGS, [\"tbody\"]);\n\t\t\tdelete FORBID_TAGS.tbody;\n\t\t}\n\t\tif (cfg.TRUSTED_TYPES_POLICY) {\n\t\t\tif (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== \"function\") throw typeErrorCreate(\"TRUSTED_TYPES_POLICY configuration option must provide a \\\"createHTML\\\" hook.\");\n\t\t\tif (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== \"function\") throw typeErrorCreate(\"TRUSTED_TYPES_POLICY configuration option must provide a \\\"createScriptURL\\\" hook.\");\n\t\t\tconst previousTrustedTypesPolicy = trustedTypesPolicy;\n\t\t\ttrustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\t\t\ttry {\n\t\t\t\temptyHTML = _createTrustedHTML(\"\");\n\t\t\t} catch (error) {\n\t\t\t\ttrustedTypesPolicy = previousTrustedTypesPolicy;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t} else if (cfg.TRUSTED_TYPES_POLICY === null) {\n\t\t\ttrustedTypesPolicy = void 0;\n\t\t\temptyHTML = \"\";\n\t\t} else {\n\t\t\tif (trustedTypesPolicy === void 0) trustedTypesPolicy = _getDefaultTrustedTypesPolicy();\n\t\t\tif (trustedTypesPolicy && typeof emptyHTML === \"string\") emptyHTML = _createTrustedHTML(\"\");\n\t\t}\n\t\tif (freeze) freeze(cfg);\n\t\tCONFIG = cfg;\n\t};\n\tconst ALL_SVG_TAGS = addToSet({}, [\n\t\t...svg$1,\n\t\t...svgFilters,\n\t\t...svgDisallowed\n\t]);\n\tconst ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n\t/**\n\t* Namespace rules for an element in the SVG namespace.\n\t*\n\t* @param tagName the element's lowercase tag name\n\t* @param parent the (possibly simulated) parent node\n\t* @param parentTagName the parent's lowercase tag name\n\t* @returns true if a spec-compliant parser could produce this element\n\t*/\n\tconst _checkSvgNamespace = function _checkSvgNamespace(tagName, parent, parentTagName) {\n\t\tif (parent.namespaceURI === HTML_NAMESPACE) return tagName === \"svg\";\n\t\tif (parent.namespaceURI === MATHML_NAMESPACE) return tagName === \"svg\" && (parentTagName === \"annotation-xml\" || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n\t\treturn Boolean(ALL_SVG_TAGS[tagName]);\n\t};\n\t/**\n\t* Namespace rules for an element in the MathML namespace.\n\t*\n\t* @param tagName the element's lowercase tag name\n\t* @param parent the (possibly simulated) parent node\n\t* @param parentTagName the parent's lowercase tag name\n\t* @returns true if a spec-compliant parser could produce this element\n\t*/\n\tconst _checkMathMlNamespace = function _checkMathMlNamespace(tagName, parent, parentTagName) {\n\t\tif (parent.namespaceURI === HTML_NAMESPACE) return tagName === \"math\";\n\t\tif (parent.namespaceURI === SVG_NAMESPACE) return tagName === \"math\" && HTML_INTEGRATION_POINTS[parentTagName];\n\t\treturn Boolean(ALL_MATHML_TAGS[tagName]);\n\t};\n\t/**\n\t* Namespace rules for an element in the HTML namespace.\n\t*\n\t* @param tagName the element's lowercase tag name\n\t* @param parent the (possibly simulated) parent node\n\t* @param parentTagName the parent's lowercase tag name\n\t* @returns true if a spec-compliant parser could produce this element\n\t*/\n\tconst _checkHtmlNamespace = function _checkHtmlNamespace(tagName, parent, parentTagName) {\n\t\tif (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) return false;\n\t\tif (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) return false;\n\t\treturn !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n\t};\n\t/**\n\t* @param element a DOM element whose namespace is being checked\n\t* @returns Return false if the element has a\n\t* namespace that a spec-compliant parser would never\n\t* return. Return true otherwise.\n\t*/\n\tconst _checkValidNamespace = function _checkValidNamespace(element) {\n\t\tconst elementNamespace = _readNamespaceURI(element);\n\t\tconst tagName = stringToLowerCase(_readNodeName(element));\n\t\tconst parentNode = getParentNode(element);\n\t\tlet parent;\n\t\tlet parentTagName;\n\t\tif (parentNode && _readNodeType(parentNode) === NODE_TYPE.element) {\n\t\t\tparent = { namespaceURI: _readNamespaceURI(parentNode) };\n\t\t\tparentTagName = stringToLowerCase(_readNodeName(parentNode));\n\t\t} else {\n\t\t\tparent = { namespaceURI: NAMESPACE };\n\t\t\tparentTagName = \"template\";\n\t\t}\n\t\tif (!ALLOWED_NAMESPACES[elementNamespace]) return false;\n\t\tif (elementNamespace === SVG_NAMESPACE) return _checkSvgNamespace(tagName, parent, parentTagName);\n\t\tif (elementNamespace === MATHML_NAMESPACE) return _checkMathMlNamespace(tagName, parent, parentTagName);\n\t\tif (elementNamespace === HTML_NAMESPACE) return _checkHtmlNamespace(tagName, parent, parentTagName);\n\t\tif (PARSER_MEDIA_TYPE === \"application/xhtml+xml\" && ALLOWED_NAMESPACES[elementNamespace]) return true;\n\t\treturn false;\n\t};\n\t/**\n\t* _forceRemove\n\t*\n\t* @param node a DOM node\n\t*/\n\tconst _forceRemove = function _forceRemove(node) {\n\t\tarrayPush(DOMPurify.removed, { element: node });\n\t\ttry {\n\t\t\tgetParentNode(node).removeChild(node);\n\t\t} catch (_) {\n\t\t\tremove(node);\n\t\t\tif (!getParentNode(node)) throw typeErrorCreate(\"a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place\");\n\t\t}\n\t};\n\t/**\n\t* _stripAttributeNode\n\t*\n\t* Remove a single Attr node case/namespace-exactly on an attribute-teardown\n\t* path. Name-based removeAttribute() ASCII-lowercases its lookup key for an\n\t* HTML element in an HTML document and so silently misses a case-preserved\n\t* handler (e.g. `ONERROR` off an XML/XHTML import) - the same defect\n\t* _removeAttribute() was fixed for, which a name-based call would reintroduce\n\t* on these IN_PLACE teardown paths. Unlike _removeAttribute this does not\n\t* record into DOMPurify.removed: the neutralize passes intentionally do not\n\t* book-keep. A clobbered/detached node falls back to best-effort name-based\n\t* removal.\n\t*\n\t* @param element the element to strip the attribute from\n\t* @param attribute the Attr node to remove\n\t* @param name the attribute's name, for the fallback path\n\t*/\n\tconst _stripAttributeNode = function _stripAttributeNode(element, attribute, name) {\n\t\ttry {\n\t\t\tremoveAttributeNode(element, attribute);\n\t\t} catch (_) {\n\t\t\ttry {\n\t\t\t\telement.removeAttribute(name);\n\t\t\t} catch (_) {}\n\t\t}\n\t};\n\t/**\n\t* Fail-closed teardown of an in-place root: strip every disallowed attribute\n\t* in the subtree first, so nothing armed is left behind, then remove all\n\t* children and the root's own attributes.\n\t*\n\t* @param root the in-place root to empty\n\t*/\n\tconst _neutralizeRoot = function _neutralizeRoot(root) {\n\t\t_neutralizeSubtree(root);\n\t\tconst childNodes = getChildNodes(root);\n\t\tif (childNodes) arrayForEach(arraySlice(childNodes), (child) => {\n\t\t\ttry {\n\t\t\t\tremove(child);\n\t\t\t} catch (_) {}\n\t\t});\n\t\tconst attributes = _readNodeType(root) === NODE_TYPE.element ? getAttributes(root) : null;\n\t\tif (attributes) for (let i = attributes.length - 1; i >= 0; --i) {\n\t\t\tconst attribute = attributes[i];\n\t\t\tconst name = attribute && attribute.name;\n\t\t\tif (typeof name === \"string\") _stripAttributeNode(root, attribute, name);\n\t\t}\n\t};\n\t/**\n\t* Removes an attribute, preferably as its exact Attr node: name-based\n\t* removal lowercases the name in HTML documents and misses case-preserved\n\t* names, e.g. from imported XHTML.\n\t*\n\t* @param name an Attribute name\n\t* @param element a DOM node\n\t* @param attr the exact Attr node to remove, when the caller has it\n\t*/\n\tconst _removeAttribute = function _removeAttribute(name, element, attr) {\n\t\tif (!attr) try {\n\t\t\tattr = element.getAttributeNode(name);\n\t\t} catch (_) {\n\t\t\tattr = null;\n\t\t}\n\t\tarrayPush(DOMPurify.removed, {\n\t\t\tattribute: attr || null,\n\t\t\tfrom: element\n\t\t});\n\t\ttry {\n\t\t\tif (attr) removeAttributeNode(element, attr);\n\t\t\telse element.removeAttribute(name);\n\t\t} catch (_) {\n\t\t\ttry {\n\t\t\t\telement.removeAttribute(name);\n\t\t\t} catch (_) {}\n\t\t}\n\t\tif (name === \"is\") {\n\t\t\tif (RETURN_DOM || RETURN_DOM_FRAGMENT) try {\n\t\t\t\t_forceRemove(element);\n\t\t\t} catch (_) {}\n\t\t\telse try {\n\t\t\t\telement.setAttribute(name, \"\");\n\t\t\t} catch (_) {}\n\t\t}\n\t};\n\t/**\n\t* Removes every attribute the configuration does not allow. Used to\n\t* neutralize nodes discarded from an in-place tree.\n\t*\n\t* @param element the element to strip\n\t*/\n\tconst _stripDisallowedAttributes = function _stripDisallowedAttributes(element) {\n\t\tconst attributes = getAttributes(element);\n\t\tif (!attributes) return;\n\t\tfor (let i = attributes.length - 1; i >= 0; --i) {\n\t\t\tconst attribute = attributes[i];\n\t\t\tconst name = attribute && attribute.name;\n\t\t\tif (typeof name !== \"string\" || ALLOWED_ATTR[transformCaseFunc(name)]) continue;\n\t\t\t_stripAttributeNode(element, attribute, name);\n\t\t}\n\t};\n\t/**\n\t* Iterative depth-first walk, so deep trees cannot overflow the call stack,\n\t* reading through the cached getters, so clobbering cannot hide children.\n\t* When `visit` returns false, the node's children are skipped. With\n\t* `intoShadow`, open shadow roots are walked after their host's children.\n\t*\n\t* @param root where to start\n\t* @param visit called for every node\n\t* @param intoShadow whether to enter open shadow roots\n\t*/\n\tconst _walkTree = function _walkTree(root, visit) {\n\t\tlet intoShadow = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false;\n\t\tconst stack = [root];\n\t\twhile (stack.length > 0) {\n\t\t\tconst node = stack.pop();\n\t\t\tif (visit(node) === false) continue;\n\t\t\tif (intoShadow && _readNodeType(node) === NODE_TYPE.element) {\n\t\t\t\tconst shadowRoot = getShadowRoot(node);\n\t\t\t\tif (_isDocumentFragment(shadowRoot)) stack.push(shadowRoot);\n\t\t\t}\n\t\t\tconst childNodes = getChildNodes(node);\n\t\t\tif (childNodes) for (let i = childNodes.length - 1; i >= 0; --i) stack.push(childNodes[i]);\n\t\t}\n\t};\n\t/**\n\t* Strips disallowed attributes from every element of a discarded subtree,\n\t* so a handler that is already queued (a loading image) cannot fire.\n\t*\n\t* @param root the root of a removed subtree\n\t*/\n\tconst _neutralizeSubtree = function _neutralizeSubtree(root) {\n\t\t_walkTree(root, (node) => {\n\t\t\tif (_readNodeType(node) === NODE_TYPE.element) _stripDisallowedAttributes(node);\n\t\t});\n\t};\n\t/**\n\t* All nodes under `root`, root first, including open shadow roots. Template\n\t* content is not entered, it is inert.\n\t*\n\t* @param root the in-place root\n\t* @return the nodes\n\t*/\n\tconst _collectLiveNodes = function _collectLiveNodes(root) {\n\t\tconst nodes = [];\n\t\t_walkTree(root, (node) => {\n\t\t\tnodes.push(node);\n\t\t}, true);\n\t\treturn nodes;\n\t};\n\t/**\n\t* Strips disallowed attributes from every element that was under the\n\t* in-place root when the call started and no longer is, whatever removed\n\t* or moved it.\n\t*\n\t* @param root the in-place root\n\t* @param before the root's nodes, collected before the walk\n\t*/\n\tconst _neutralizeEscapedElements = function _neutralizeEscapedElements(root, before) {\n\t\tconst reachable = setCreate();\n\t\tarrayForEach(_collectLiveNodes(root), (node) => {\n\t\t\tif (_readNodeType(node) === NODE_TYPE.element) setAdd(reachable, node);\n\t\t});\n\t\tarrayForEach(before, (node) => {\n\t\t\tif (_readNodeType(node) === NODE_TYPE.element && !setHas(reachable, node)) _stripDisallowedAttributes(node);\n\t\t});\n\t};\n\t/**\n\t* Neutralizes everything that left the in-place tree during the call: what\n\t* DOMPurify removed, and what hooks or custom elements removed or moved out.\n\t*\n\t* @param root the in-place root\n\t* @param before the root's nodes, collected before the walk\n\t* @return true if the root itself was removed\n\t*/\n\tconst _neutralizeDiscarded = function _neutralizeDiscarded(root, before) {\n\t\tlet rootRemoved = false;\n\t\tarrayForEach(DOMPurify.removed, (entry) => {\n\t\t\tif (entry.element) {\n\t\t\t\trootRemoved = rootRemoved || entry.element === root;\n\t\t\t\t_neutralizeSubtree(entry.element);\n\t\t\t}\n\t\t});\n\t\t_neutralizeEscapedElements(root, before);\n\t\treturn rootRemoved;\n\t};\n\tconst MAX_UNVISITED_ROUNDS = 8;\n\t/**\n\t* The walk only moves forward, so a node moved to a position it already\n\t* passed is never visited. Give every original node that is still in the\n\t* tree but unvisited the normal treatment, hooks included. Nodes created\n\t* during the call are left alone. Fails closed if the tree keeps changing.\n\t*\n\t* @param root the in-place root\n\t* @param before the root's nodes, collected before the walk\n\t*/\n\tconst _sanitizeUnvisitedNodes = function _sanitizeUnvisitedNodes(root, before) {\n\t\tconst visited = IN_PLACE_VISITED;\n\t\tlet original = null;\n\t\tconst getOriginal = () => {\n\t\t\tif (!original) {\n\t\t\t\toriginal = setCreate();\n\t\t\t\tarrayForEach(before, (beforeNode) => {\n\t\t\t\t\tsetAdd(original, beforeNode);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn original;\n\t\t};\n\t\tfor (let round = 0;; round++) {\n\t\t\tconst live = _collectLiveNodes(root);\n\t\t\tconst containers = [root];\n\t\t\tlet pending = false;\n\t\t\tarrayForEach(live, (node) => {\n\t\t\t\tif (_readNodeType(node) === NODE_TYPE.documentFragment) arrayPush(containers, node);\n\t\t\t\telse if (!pending && !setHas(visited, node)) pending = setHas(getOriginal(), node);\n\t\t\t});\n\t\t\tif (!pending) return;\n\t\t\tif (round >= MAX_UNVISITED_ROUNDS) throw typeErrorCreate(\"the tree kept changing during in-place sanitization; refusing to return it\");\n\t\t\tarrayForEach(containers, (container, index) => {\n\t\t\t\t_sanitizeUnvisitedIn(container, index > 0, root, getOriginal());\n\t\t\t});\n\t\t}\n\t};\n\t/**\n\t* One _sanitizeUnvisitedNodes pass over the root or an open shadow root.\n\t*\n\t* @param container the root or an open shadow root\n\t* @param inShadow whether container is a shadow root\n\t* @param root the in-place root\n\t* @param original the root's nodes collected before the walk, as a set\n\t*/\n\tconst _sanitizeUnvisitedIn = function _sanitizeUnvisitedIn(container, inShadow, root, original) {\n\t\tconst iterator = _createNodeIterator(container);\n\t\tlet node;\n\t\twhile (node = iterator.nextNode()) {\n\t\t\tif (!setHas(original, node) || setHas(IN_PLACE_VISITED, node)) continue;\n\t\t\tif (inShadow) _executeHooks(hooks.uponSanitizeShadowNode, node, null);\n\t\t\t_sanitizeElements(node, root);\n\t\t\t_sanitizeAttributes(node, root);\n\t\t\tif (_isDocumentFragment(node.content)) _sanitizeShadowDOM2(node.content);\n\t\t}\n\t};\n\t/**\n\t* Records that _sanitizeElements processed `node`. No-op outside IN_PLACE.\n\t*\n\t* @param node the node being processed\n\t*/\n\tconst _markVisited = function _markVisited(node) {\n\t\tif (IN_PLACE_VISITED) setAdd(IN_PLACE_VISITED, node);\n\t};\n\t/**\n\t* Patch-linkage attributes (declarative partial updates): `patchsrc`\n\t* always, `for` everywhere except on
\n * ^\n * |\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return effects.attempt(blankLine, ok, nok);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n name: 'htmlText',\n tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n const self = this;\n /** @type {NonNullable | undefined} */\n let marker;\n /** @type {number} */\n let index;\n /** @type {State} */\n let returnState;\n return start;\n\n /**\n * Start of HTML (text).\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"htmlText\");\n effects.enter(\"htmlTextData\");\n effects.consume(code);\n return open;\n }\n\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | a c\n * ^\n * > | a c\n * ^\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 33) {\n effects.consume(code);\n return declarationOpen;\n }\n if (code === 47) {\n effects.consume(code);\n return tagCloseStart;\n }\n if (code === 63) {\n effects.consume(code);\n return instruction;\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagOpen;\n }\n return nok(code);\n }\n\n /**\n * After ` | a c\n * ^\n * > | a c\n * ^\n * > | a &<]]> c\n * ^\n * ```\n *\n * @type {State}\n */\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code);\n return commentOpenInside;\n }\n if (code === 91) {\n effects.consume(code);\n index = 0;\n return cdataOpenInside;\n }\n if (asciiAlpha(code)) {\n effects.consume(code);\n return declaration;\n }\n return nok(code);\n }\n\n /**\n * In a comment, after ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n return nok(code);\n }\n\n /**\n * In comment.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function comment(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 45) {\n effects.consume(code);\n return commentClose;\n }\n if (markdownLineEnding(code)) {\n returnState = comment;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return comment;\n }\n\n /**\n * In comment, after `-`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentClose(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n return comment(code);\n }\n\n /**\n * In comment, after `--`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentEnd(code) {\n return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n }\n\n /**\n * After ` | a &<]]> b\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function cdataOpenInside(code) {\n const value = \"CDATA[\";\n if (code === value.charCodeAt(index++)) {\n effects.consume(code);\n return index === value.length ? cdata : cdataOpenInside;\n }\n return nok(code);\n }\n\n /**\n * In CDATA.\n *\n * ```markdown\n * > | a &<]]> b\n * ^^^\n * ```\n *\n * @type {State}\n */\n function cdata(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 93) {\n effects.consume(code);\n return cdataClose;\n }\n if (markdownLineEnding(code)) {\n returnState = cdata;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return cdata;\n }\n\n /**\n * In CDATA, after `]`, at another `]`.\n *\n * ```markdown\n * > | a &<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataClose(code) {\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n return cdata(code);\n }\n\n /**\n * In CDATA, after `]]`, at `>`.\n *\n * ```markdown\n * > | a &<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataEnd(code) {\n if (code === 62) {\n return end(code);\n }\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n return cdata(code);\n }\n\n /**\n * In declaration.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function declaration(code) {\n if (code === null || code === 62) {\n return end(code);\n }\n if (markdownLineEnding(code)) {\n returnState = declaration;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return declaration;\n }\n\n /**\n * In instruction.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function instruction(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 63) {\n effects.consume(code);\n return instructionClose;\n }\n if (markdownLineEnding(code)) {\n returnState = instruction;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return instruction;\n }\n\n /**\n * In instruction, after `?`, at `>`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function instructionClose(code) {\n return code === 62 ? end(code) : instruction(code);\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseStart(code) {\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagClose;\n }\n return nok(code);\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagClose(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagClose;\n }\n return tagCloseBetween(code);\n }\n\n /**\n * In closing tag, after tag name.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseBetween(code) {\n if (markdownLineEnding(code)) {\n returnState = tagCloseBetween;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagCloseBetween;\n }\n return end(code);\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpen(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpen;\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n return nok(code);\n }\n\n /**\n * In opening tag, after tag name.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenBetween(code) {\n if (code === 47) {\n effects.consume(code);\n return end;\n }\n\n // ASCII alphabetical and `:` and `_`.\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenBetween;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenBetween;\n }\n return end(code);\n }\n\n /**\n * In attribute name.\n *\n * ```markdown\n * > | a d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeName(code) {\n // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n return tagOpenAttributeNameAfter(code);\n }\n\n /**\n * After attribute name, before initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | a d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeNameAfter;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeNameAfter;\n }\n return tagOpenBetween(code);\n }\n\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueBefore(code) {\n if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n return nok(code);\n }\n if (code === 34 || code === 39) {\n effects.consume(code);\n marker = code;\n return tagOpenAttributeValueQuoted;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueBefore;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuoted(code) {\n if (code === marker) {\n effects.consume(code);\n marker = undefined;\n return tagOpenAttributeValueQuotedAfter;\n }\n if (code === null) {\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueQuoted;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return tagOpenAttributeValueQuoted;\n }\n\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueUnquoted(code) {\n if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n return nok(code);\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n\n /**\n * After double or single quoted attribute value, before whitespace or the end\n * of the tag.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n return nok(code);\n }\n\n /**\n * In certain circumstances of a tag where only an `>` is allowed.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function end(code) {\n if (code === 62) {\n effects.consume(code);\n effects.exit(\"htmlTextData\");\n effects.exit(\"htmlText\");\n return ok;\n }\n return nok(code);\n }\n\n /**\n * At eol.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * > | a \n * ```\n *\n * @type {State}\n */\n function lineEndingBefore(code) {\n effects.exit(\"htmlTextData\");\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return lineEndingAfter;\n }\n\n /**\n * After eol, at optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a \n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfter(code) {\n // Always populated by defaults.\n\n return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n }\n\n /**\n * After eol, after optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a \n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfterPrefix(code) {\n effects.enter(\"htmlTextData\");\n return returnState(code);\n }\n}","/**\n * @import {\n * Construct,\n * Event,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const labelEnd = {\n name: 'labelEnd',\n resolveAll: resolveAllLabelEnd,\n resolveTo: resolveToLabelEnd,\n tokenize: tokenizeLabelEnd\n};\n\n/** @type {Construct} */\nconst resourceConstruct = {\n tokenize: tokenizeResource\n};\n/** @type {Construct} */\nconst referenceFullConstruct = {\n tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n tokenize: tokenizeReferenceCollapsed\n};\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n let index = -1;\n /** @type {Array} */\n const newEvents = [];\n while (++index < events.length) {\n const token = events[index][1];\n newEvents.push(events[index]);\n if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n // Remove the marker.\n const offset = token.type === \"labelImage\" ? 4 : 2;\n token.type = \"data\";\n index += offset;\n }\n }\n\n // If the events are equal, we don't have to copy newEvents to events\n if (events.length !== newEvents.length) {\n splice(events, 0, events.length, newEvents);\n }\n return events;\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n let index = events.length;\n let offset = 0;\n /** @type {number | undefined} */\n let open;\n /** @type {number | undefined} */\n let close;\n /** @type {Array} */\n let media;\n\n // Find an opening.\n while (index--) {\n const token = events[index][1];\n if (open) {\n // If we see another link, or inactive link label, we’ve been here before.\n if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n break;\n }\n\n // Mark other link openings as inactive, as we can’t have links in\n // links.\n if (events[index][0] === 'enter' && token.type === \"labelLink\") {\n token._inactive = true;\n }\n } else if (close) {\n if (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\n open = index;\n if (token.type !== \"labelLink\") {\n offset = 2;\n break;\n }\n }\n } else if (token.type === \"labelEnd\") {\n close = index;\n }\n }\n const group = {\n type: events[open][1].type === \"labelLink\" ? \"link\" : \"image\",\n start: {\n ...events[open][1].start\n },\n end: {\n ...events[events.length - 1][1].end\n }\n };\n const label = {\n type: \"label\",\n start: {\n ...events[open][1].start\n },\n end: {\n ...events[close][1].end\n }\n };\n const text = {\n type: \"labelText\",\n start: {\n ...events[open + offset + 2][1].end\n },\n end: {\n ...events[close - 2][1].start\n }\n };\n media = [['enter', group, context], ['enter', label, context]];\n\n // Opening marker.\n media = push(media, events.slice(open + 1, open + offset + 3));\n\n // Text open.\n media = push(media, [['enter', text, context]]);\n\n // Always populated by defaults.\n\n // Between.\n media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n // Text close, marker close, label close.\n media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\n\n // Reference, resource, or so.\n media = push(media, events.slice(close + 1));\n\n // Media close.\n media = push(media, [['exit', group, context]]);\n splice(events, open, events.length, media);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n const self = this;\n const labelStarts = self._labelStarts;\n /** @type {Token} */\n let labelStart;\n /** @type {boolean} */\n let defined;\n if (labelStarts) {\n // Discard ones that failed to close,\n // they’re not needed anymore.\n while (labelStarts.length > 0 && labelStarts[labelStarts.length - 1]._balanced) {\n labelStarts.pop();\n }\n labelStart = labelStarts[labelStarts.length - 1];\n }\n return start;\n\n /**\n * Start of label end.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // If there is not an okay opening.\n if (!labelStart) {\n return nok(code);\n }\n\n // If the corresponding label (link) start is marked as inactive,\n // it means we’d be wrapping a link, like this:\n //\n // ```markdown\n // > | a [b [c](d) e](f) g.\n // ^\n // ```\n //\n // We can’t have that, so it’s just balanced brackets.\n if (labelStart._inactive) {\n return labelEndNok(code);\n }\n defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })));\n effects.enter(\"labelEnd\");\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelEnd\");\n return after;\n }\n\n /**\n * After `]`.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n // an extension.\n\n // Resource (`[asd](fgh)`)?\n if (code === 40) {\n return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n }\n\n // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n if (code === 91) {\n return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n }\n\n // Shortcut (`[asd]`) reference?\n return defined ? labelEndOk(code) : labelEndNok(code);\n }\n\n /**\n * After `]`, at `[`, but not at a full reference.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceNotFull(code) {\n return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n }\n\n /**\n * Done, we found something.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndOk(code) {\n // Note: `markdown-rs` does a bunch of stuff here.\n // This label start is now used up: discard it so it’s never found again.\n\n labelStarts.pop();\n return ok(code);\n }\n\n /**\n * Done, it’s nothing.\n *\n * There was an okay opening, but we didn’t match anything.\n *\n * ```markdown\n * > | [a](b c\n * ^\n * > | [a][b c\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndNok(code) {\n labelStart._balanced = true;\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n return resourceStart;\n\n /**\n * At a resource.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceStart(code) {\n effects.enter(\"resource\");\n effects.enter(\"resourceMarker\");\n effects.consume(code);\n effects.exit(\"resourceMarker\");\n return resourceBefore;\n }\n\n /**\n * In resource, after `(`, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBefore(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n }\n\n /**\n * In resource, after optional whitespace, at `)` or a destination.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceOpen(code) {\n if (code === 41) {\n return resourceEnd(code);\n }\n return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(code);\n }\n\n /**\n * In resource, after destination, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n }\n\n /**\n * At invalid destination.\n *\n * ```markdown\n * > | [a](<<) b\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationMissing(code) {\n return nok(code);\n }\n\n /**\n * In resource, after destination and whitespace, at `(` or title.\n *\n * ```markdown\n * > | [a](b ) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBetween(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(code);\n }\n return resourceEnd(code);\n }\n\n /**\n * In resource, after title, at optional whitespace.\n *\n * ```markdown\n * > | [a](b \"c\") d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceTitleAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n }\n\n /**\n * In resource, at `)`.\n *\n * ```markdown\n * > | [a](b) d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceEnd(code) {\n if (code === 41) {\n effects.enter(\"resourceMarker\");\n effects.consume(code);\n effects.exit(\"resourceMarker\");\n effects.exit(\"resource\");\n return ok;\n }\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n const self = this;\n return referenceFull;\n\n /**\n * In a reference (full), at the `[`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFull(code) {\n return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(code);\n }\n\n /**\n * In a reference (full), after `]`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullAfter(code) {\n return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n }\n\n /**\n * In reference (full) that was missing.\n *\n * ```markdown\n * > | [a][b d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullMissing(code) {\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n return referenceCollapsedStart;\n\n /**\n * In reference (collapsed), at `[`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedStart(code) {\n // We only attempt a collapsed label if there’s a `[`.\n\n effects.enter(\"reference\");\n effects.enter(\"referenceMarker\");\n effects.consume(code);\n effects.exit(\"referenceMarker\");\n return referenceCollapsedOpen;\n }\n\n /**\n * In reference (collapsed), at `]`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedOpen(code) {\n if (code === 93) {\n effects.enter(\"referenceMarker\");\n effects.consume(code);\n effects.exit(\"referenceMarker\");\n effects.exit(\"reference\");\n return ok;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * Token,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n name: 'labelStartImage',\n resolveAll: labelEnd.resolveAll,\n tokenize: tokenizeLabelStartImage\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n const self = this;\n /** @type {Token} */\n let labelImage;\n return start;\n\n /**\n * Start of label (image) start.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"labelImage\");\n effects.enter(\"labelImageMarker\");\n effects.consume(code);\n effects.exit(\"labelImageMarker\");\n return open;\n }\n\n /**\n * After `!`, at `[`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 91) {\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n labelImage = effects.exit(\"labelImage\");\n return after;\n }\n return nok(code);\n }\n\n /**\n * After `![`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * This is needed in because, when GFM footnotes are enabled, images never\n * form when started with a `^`.\n * Instead, links form:\n *\n * ```markdown\n * ![^a](b)\n *\n * ![^a][b]\n *\n * [b]: c\n * ```\n *\n * ```html\n *

!^a

\n *

!^a

\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // To do: use a new field to do this, this is still needed for\n // `micromark-extension-gfm-footnote`, but the `label-start-link`\n // behavior isn’t.\n // Hidden footnotes hook.\n /* c8 ignore next 6 */\n if (code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs) {\n return nok(code);\n }\n self._labelStarts = self._labelStarts || [];\n self._labelStarts.push(labelImage);\n return ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * Token,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n name: 'labelStartLink',\n resolveAll: labelEnd.resolveAll,\n tokenize: tokenizeLabelStartLink\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n const self = this;\n /** @type {Token} */\n let labelLink;\n return start;\n\n /**\n * Start of label (link) start.\n *\n * ```markdown\n * > | a [b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"labelLink\");\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n labelLink = effects.exit(\"labelLink\");\n return after;\n }\n\n /** @type {State} */\n function after(code) {\n // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n // remove.\n // Hidden footnotes hook.\n /* c8 ignore next 6 */\n if (code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs) {\n return nok(code);\n }\n self._labelStarts = self._labelStarts || [];\n self._labelStarts.push(labelLink);\n return ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const lineEnding = {\n name: 'lineEnding',\n tokenize: tokenizeLineEnding\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n return start;\n\n /** @type {State} */\n function start(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return factorySpace(effects, ok, \"linePrefix\");\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const thematicBreak = {\n name: 'thematicBreak',\n tokenize: tokenizeThematicBreak\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n let size = 0;\n /** @type {NonNullable} */\n let marker;\n return start;\n\n /**\n * Start of thematic break.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"thematicBreak\");\n // To do: parse indent like `markdown-rs`.\n return before(code);\n }\n\n /**\n * After optional whitespace, at marker.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n marker = code;\n return atBreak(code);\n }\n\n /**\n * After something, before something else.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === marker) {\n effects.enter(\"thematicBreakSequence\");\n return sequence(code);\n }\n if (size >= 3 && (code === null || markdownLineEnding(code))) {\n effects.exit(\"thematicBreak\");\n return ok(code);\n }\n return nok(code);\n }\n\n /**\n * In sequence.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function sequence(code) {\n if (code === marker) {\n effects.consume(code);\n size++;\n return sequence;\n }\n effects.exit(\"thematicBreakSequence\");\n return markdownSpace(code) ? factorySpace(effects, atBreak, \"whitespace\")(code) : atBreak(code);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * Exiter,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiDigit, markdownSpace } from 'micromark-util-character';\nimport { blankLine } from './blank-line.js';\nimport { thematicBreak } from './thematic-break.js';\n\n/** @type {Construct} */\nexport const list = {\n continuation: {\n tokenize: tokenizeListContinuation\n },\n exit: tokenizeListEnd,\n name: 'list',\n tokenize: tokenizeListStart\n};\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n partial: true,\n tokenize: tokenizeListItemPrefixWhitespace\n};\n\n/** @type {Construct} */\nconst indentConstruct = {\n partial: true,\n tokenize: tokenizeIndent\n};\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n const self = this;\n const tail = self.events[self.events.length - 1];\n let initialSize = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n let size = 0;\n return start;\n\n /** @type {State} */\n function start(code) {\n const kind = self.containerState.type || (code === 42 || code === 43 || code === 45 ? \"listUnordered\" : \"listOrdered\");\n if (kind === \"listUnordered\" ? !self.containerState.marker || code === self.containerState.marker : asciiDigit(code)) {\n if (!self.containerState.type) {\n self.containerState.type = kind;\n effects.enter(kind, {\n _container: true\n });\n }\n if (kind === \"listUnordered\") {\n effects.enter(\"listItemPrefix\");\n return code === 42 || code === 45 ? effects.check(thematicBreak, nok, atMarker)(code) : atMarker(code);\n }\n if (!self.interrupt || code === 49) {\n effects.enter(\"listItemPrefix\");\n effects.enter(\"listItemValue\");\n return inside(code);\n }\n }\n return nok(code);\n }\n\n /** @type {State} */\n function inside(code) {\n if (asciiDigit(code) && ++size < 10) {\n effects.consume(code);\n return inside;\n }\n if ((!self.interrupt || size < 2) && (self.containerState.marker ? code === self.containerState.marker : code === 41 || code === 46)) {\n effects.exit(\"listItemValue\");\n return atMarker(code);\n }\n return nok(code);\n }\n\n /**\n * @type {State}\n **/\n function atMarker(code) {\n effects.enter(\"listItemMarker\");\n effects.consume(code);\n effects.exit(\"listItemMarker\");\n self.containerState.marker = self.containerState.marker || code;\n return effects.check(blankLine,\n // Can’t be empty when interrupting.\n self.interrupt ? nok : onBlank, effects.attempt(listItemPrefixWhitespaceConstruct, endOfPrefix, otherPrefix));\n }\n\n /** @type {State} */\n function onBlank(code) {\n self.containerState.initialBlankLine = true;\n initialSize++;\n return endOfPrefix(code);\n }\n\n /** @type {State} */\n function otherPrefix(code) {\n if (markdownSpace(code)) {\n effects.enter(\"listItemPrefixWhitespace\");\n effects.consume(code);\n effects.exit(\"listItemPrefixWhitespace\");\n return endOfPrefix;\n }\n return nok(code);\n }\n\n /** @type {State} */\n function endOfPrefix(code) {\n self.containerState.size = initialSize + self.sliceSerialize(effects.exit(\"listItemPrefix\"), true).length;\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n const self = this;\n self.containerState._closeFlow = undefined;\n return effects.check(blankLine, onBlank, notBlank);\n\n /** @type {State} */\n function onBlank(code) {\n self.containerState.furtherBlankLines = self.containerState.furtherBlankLines || self.containerState.initialBlankLine;\n\n // We have a blank line.\n // Still, try to consume at most the items size.\n return factorySpace(effects, ok, \"listItemIndent\", self.containerState.size + 1)(code);\n }\n\n /** @type {State} */\n function notBlank(code) {\n if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n self.containerState.furtherBlankLines = undefined;\n self.containerState.initialBlankLine = undefined;\n return notInCurrentItem(code);\n }\n self.containerState.furtherBlankLines = undefined;\n self.containerState.initialBlankLine = undefined;\n return effects.attempt(indentConstruct, ok, notInCurrentItem)(code);\n }\n\n /** @type {State} */\n function notInCurrentItem(code) {\n // While we do continue, we signal that the flow should be closed.\n self.containerState._closeFlow = true;\n // As we’re closing flow, we’re no longer interrupting.\n self.interrupt = undefined;\n // Always populated by defaults.\n\n return factorySpace(effects, effects.attempt(list, ok, nok), \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this;\n return factorySpace(effects, afterPrefix, \"listItemIndent\", self.containerState.size + 1);\n\n /** @type {State} */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === \"listItemIndent\" && tail[2].sliceSerialize(tail[1], true).length === self.containerState.size ? ok(code) : nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Exiter}\n */\nfunction tokenizeListEnd(effects) {\n effects.exit(this.containerState.type);\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n const self = this;\n\n // Always populated by defaults.\n\n return factorySpace(effects, afterPrefix, \"listItemPrefixWhitespace\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + 1);\n\n /** @type {State} */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return !markdownSpace(code) && tail && tail[1].type === \"listItemPrefixWhitespace\" ? ok(code) : nok(code);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { EditMap } from 'micromark-util-edit-map';\n/** @type {Construct} */\nexport const setextUnderline = {\n name: 'setextUnderline',\n resolveTo: resolveToSetextUnderline,\n tokenize: tokenizeSetextUnderline\n};\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n const editMap = new EditMap();\n let index = events.length;\n /** @type {number | undefined} */\n let content;\n /** @type {number | undefined} */\n let text;\n /** @type {number | undefined} */\n let definition;\n\n // Find the opening of the content.\n // It’ll always exist: we don’t tokenize if it isn’t there.\n while (index--) {\n if (events[index][0] === 'enter') {\n if (events[index][1].type === \"content\") {\n content = index;\n break;\n }\n if (events[index][1].type === \"paragraph\") {\n text = index;\n }\n }\n // Exit\n else {\n if (events[index][1].type === \"content\") {\n // Remove the content end (if needed we’ll add it later)\n editMap.add(index, 1, []);\n }\n if (!definition && events[index][1].type === \"definition\") {\n definition = index;\n }\n }\n }\n const heading = {\n type: \"setextHeading\",\n start: {\n ...events[content][1].start\n },\n end: {\n ...events[events.length - 1][1].end\n }\n };\n\n // Change the paragraph to setext heading text.\n events[text][1].type = \"setextHeadingText\";\n\n // If we have definitions in the content, we’ll keep on having content,\n // but we need move it.\n if (definition) {\n editMap.add(text, 0, [['enter', heading, context]]);\n editMap.add(definition + 1, 0, [['exit', events[content][1], context]]);\n events[content][1].end = {\n ...events[definition][1].end\n };\n } else {\n events[content][1] = heading;\n }\n\n // Add the heading exit at the end.\n editMap.add(events.length, 0, [['exit', heading, context]]);\n editMap.consume(events);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n const self = this;\n /** @type {NonNullable} */\n let marker;\n return start;\n\n /**\n * At start of heading (setext) underline.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n let index = self.events.length;\n /** @type {boolean | undefined} */\n let paragraph;\n // Find an opening.\n while (index--) {\n // Skip enter/exit of line ending, line prefix, and content.\n // We can now either have a definition or a paragraph.\n if (self.events[index][1].type !== \"lineEnding\" && self.events[index][1].type !== \"linePrefix\" && self.events[index][1].type !== \"content\") {\n paragraph = self.events[index][1].type === \"paragraph\";\n break;\n }\n }\n\n // To do: handle lazy/pierce like `markdown-rs`.\n // To do: parse indent like `markdown-rs`.\n if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n effects.enter(\"setextHeadingLine\");\n marker = code;\n return before(code);\n }\n return nok(code);\n }\n\n /**\n * After optional whitespace, at `-` or `=`.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n effects.enter(\"setextHeadingLineSequence\");\n return inside(code);\n }\n\n /**\n * In sequence.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker) {\n effects.consume(code);\n return inside;\n }\n effects.exit(\"setextHeadingLineSequence\");\n return markdownSpace(code) ? factorySpace(effects, after, \"lineSuffix\")(code) : after(code);\n }\n\n /**\n * After sequence, after optional whitespace.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"setextHeadingLine\");\n return ok(code);\n }\n return nok(code);\n }\n}","/**\n * @import {\n * InitialConstruct,\n * Initializer,\n * State,\n * TokenizeContext\n * } from 'micromark-util-types'\n */\n\nimport { blankLine, content } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const flow = {\n tokenize: initializeFlow\n};\n\n/**\n * @this {TokenizeContext}\n * Self.\n * @type {Initializer}\n * Initializer.\n */\nfunction initializeFlow(effects) {\n const self = this;\n const initial = effects.attempt(\n // Try to parse a blank line.\n blankLine, atBlankEnding,\n // Try to parse initial flow (essentially, only code).\n effects.attempt(this.parser.constructs.flowInitial, afterConstruct, factorySpace(effects, effects.attempt(this.parser.constructs.flow, afterConstruct, effects.attempt(content, afterConstruct)), \"linePrefix\")));\n return initial;\n\n /** @type {State} */\n function atBlankEnding(code) {\n if (code === null) {\n effects.consume(code);\n return;\n }\n effects.enter(\"lineEndingBlank\");\n effects.consume(code);\n effects.exit(\"lineEndingBlank\");\n self.currentConstruct = undefined;\n return initial;\n }\n\n /** @type {State} */\n function afterConstruct(code) {\n if (code === null) {\n effects.consume(code);\n return;\n }\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n self.currentConstruct = undefined;\n return initial;\n }\n}","/**\n * @import {\n * Code,\n * InitialConstruct,\n * Initializer,\n * Resolver,\n * State,\n * TokenizeContext\n * } from 'micromark-util-types'\n */\n\nimport { EditMap } from 'micromark-util-edit-map';\nexport const resolver = {\n resolveAll: createResolver()\n};\nexport const string = initializeFactory('string');\nexport const text = initializeFactory('text');\n\n/**\n * @param {'string' | 'text'} field\n * Field.\n * @returns {InitialConstruct}\n * Construct.\n */\nfunction initializeFactory(field) {\n return {\n resolveAll: createResolver(field === 'text' ? resolveAllLineSuffixes : undefined),\n tokenize: initializeText\n };\n\n /**\n * @this {TokenizeContext}\n * Context.\n * @type {Initializer}\n */\n function initializeText(effects) {\n const self = this;\n const constructs = this.parser.constructs[field];\n const text = effects.attempt(constructs, start, notText);\n return start;\n\n /** @type {State} */\n function start(code) {\n return atBreak(code) ? text(code) : notText(code);\n }\n\n /** @type {State} */\n function notText(code) {\n if (code === null) {\n effects.consume(code);\n return;\n }\n effects.enter(\"data\");\n effects.consume(code);\n return data;\n }\n\n /** @type {State} */\n function data(code) {\n if (atBreak(code)) {\n effects.exit(\"data\");\n return text(code);\n }\n\n // Data.\n effects.consume(code);\n return data;\n }\n\n /**\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether the code is a break.\n */\n function atBreak(code) {\n if (code === null) {\n return true;\n }\n const list = constructs[code];\n let index = -1;\n if (list) {\n // Always populated by defaults.\n\n while (++index < list.length) {\n const item = list[index];\n if (!item.previous || item.previous.call(self, self.previous)) {\n return true;\n }\n }\n }\n return false;\n }\n }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n * Resolver.\n * @returns {Resolver}\n * Resolver.\n */\nfunction createResolver(extraResolver) {\n return resolveAllText;\n\n /** @type {Resolver} */\n function resolveAllText(events, context) {\n let index = -1;\n /** @type {number | undefined} */\n let enter;\n\n // A rather boring computation (to merge adjacent `data` events) which\n // improves mm performance by 29%.\n while (++index <= events.length) {\n if (enter === undefined) {\n if (events[index] && events[index][1].type === \"data\") {\n enter = index;\n index++;\n }\n } else if (!events[index] || events[index][1].type !== \"data\") {\n // Don’t do anything if there is one data token.\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end;\n events.splice(enter + 2, index - enter - 2);\n index = enter + 2;\n }\n enter = undefined;\n }\n }\n return extraResolver ? extraResolver(events, context) : events;\n }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n const editMap = new EditMap();\n let eventIndex = 0; // Skip first.\n\n while (++eventIndex <= events.length) {\n if ((eventIndex === events.length || events[eventIndex][1].type === \"lineEnding\") && events[eventIndex - 1][1].type === \"data\") {\n const data = events[eventIndex - 1][1];\n const chunks = context.sliceStream(data);\n let index = chunks.length;\n let bufferIndex = -1;\n let size = 0;\n /** @type {boolean | undefined} */\n let tabs;\n while (index--) {\n const chunk = chunks[index];\n if (typeof chunk === 'string') {\n bufferIndex = chunk.length;\n while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n size++;\n bufferIndex--;\n }\n if (bufferIndex) {\n break;\n }\n bufferIndex = -1;\n }\n // Number\n else if (chunk === -2) {\n tabs = true;\n size++;\n } else if (chunk === -1) {\n // Empty\n } else {\n // Replacement character, exit.\n index++;\n break;\n }\n }\n\n // Allow final trailing whitespace.\n if (context._contentTypeTextTrailing && eventIndex === events.length) {\n size = 0;\n }\n if (size) {\n const token = {\n type: eventIndex === events.length || tabs || size < 2 ? \"lineSuffix\" : \"hardBreakTrailing\",\n start: {\n _bufferIndex: index ? bufferIndex : data.start._bufferIndex + bufferIndex,\n _index: data.start._index + index,\n line: data.end.line,\n column: data.end.column - size,\n offset: data.end.offset - size\n },\n end: {\n ...data.end\n }\n };\n data.end = {\n ...token.start\n };\n if (data.start.offset === data.end.offset) {\n Object.assign(data, token);\n } else {\n editMap.add(eventIndex, 0, [['enter', token, context], ['exit', token, context]]);\n }\n }\n eventIndex++;\n }\n }\n editMap.consume(events);\n return events;\n}","/**\n * @import {Extension} from 'micromark-util-types'\n */\n\nimport { attention, autolink, blockQuote, characterEscape, characterReference, codeFenced, codeIndented, codeText, definition, hardBreakEscape, headingAtx, htmlFlow, htmlText, labelEnd, labelStartImage, labelStartLink, lineEnding, list, setextUnderline, thematicBreak } from 'micromark-core-commonmark';\nimport { resolver as resolveText } from './initialize/text.js';\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n [42]: list,\n [43]: list,\n [45]: list,\n [48]: list,\n [49]: list,\n [50]: list,\n [51]: list,\n [52]: list,\n [53]: list,\n [54]: list,\n [55]: list,\n [56]: list,\n [57]: list,\n [62]: blockQuote\n};\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n [91]: definition\n};\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n [-2]: codeIndented,\n [-1]: codeIndented,\n [32]: codeIndented\n};\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n [35]: headingAtx,\n [42]: thematicBreak,\n [45]: [setextUnderline, thematicBreak],\n [60]: htmlFlow,\n [61]: setextUnderline,\n [95]: thematicBreak,\n [96]: codeFenced,\n [126]: codeFenced\n};\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n [38]: characterReference,\n [92]: characterEscape\n};\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n [-5]: lineEnding,\n [-4]: lineEnding,\n [-3]: lineEnding,\n [33]: labelStartImage,\n [38]: characterReference,\n [42]: attention,\n [60]: [autolink, htmlText],\n [91]: labelStartLink,\n [92]: [hardBreakEscape, characterEscape],\n [93]: labelEnd,\n [95]: attention,\n [96]: codeText\n};\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n null: [attention, resolveText]\n};\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n null: [42, 95]\n};\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n null: []\n};","/**\n * @import {\n * Chunk,\n * Code,\n * ConstructRecord,\n * Construct,\n * Effects,\n * InitialConstruct,\n * ParseContext,\n * Point,\n * State,\n * TokenizeContext,\n * Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @callback Restore\n * Restore the state.\n * @returns {undefined}\n * Nothing.\n *\n * @typedef Info\n * Info.\n * @property {Restore} restore\n * Restore.\n * @property {number} from\n * From.\n *\n * @callback ReturnHandle\n * Handle a successful run.\n * @param {Construct} construct\n * Construct.\n * @param {Info} info\n * Info.\n * @returns {undefined}\n * Nothing.\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * Parser.\n * @param {InitialConstruct} initialize\n * Construct.\n * @param {Omit | undefined} [from]\n * Point (optional).\n * @returns {TokenizeContext}\n * Context.\n */\nexport function createTokenizer(parser, initialize, from) {\n /** @type {Point} */\n let point = {\n _bufferIndex: -1,\n _index: 0,\n line: from && from.line || 1,\n column: from && from.column || 1,\n offset: from && from.offset || 0\n };\n /** @type {Record} */\n const columnStart = {};\n /** @type {Array} */\n const resolveAllConstructs = [];\n /** @type {Array} */\n let chunks = [];\n /** @type {Array} */\n let stack = [];\n /** @type {boolean | undefined} */\n let consumed = true;\n\n /**\n * Tools used for tokenizing.\n *\n * @type {Effects}\n */\n const effects = {\n attempt: constructFactory(onsuccessfulconstruct),\n check: constructFactory(onsuccessfulcheck),\n consume,\n enter,\n exit,\n interrupt: constructFactory(onsuccessfulcheck, {\n interrupt: true\n })\n };\n\n /**\n * State and tools for resolving and serializing.\n *\n * @type {TokenizeContext}\n */\n const context = {\n code: null,\n containerState: {},\n defineSkip,\n events: [],\n now,\n parser,\n previous: null,\n sliceSerialize,\n sliceStream,\n write\n };\n\n /**\n * The state function.\n *\n * @type {State | undefined}\n */\n let state = initialize.tokenize.call(context, effects);\n\n /**\n * Track which character we expect to be consumed, to catch bugs.\n *\n * @type {Code}\n */\n let expectedCode;\n if (initialize.resolveAll) {\n resolveAllConstructs.push(initialize);\n }\n return context;\n\n /** @type {TokenizeContext['write']} */\n function write(slice) {\n chunks = push(chunks, slice);\n main();\n\n // Exit if we’re not done, resolve might change stuff.\n if (chunks[chunks.length - 1] !== null) {\n return [];\n }\n addResult(initialize, 0);\n\n // Otherwise, resolve, and exit.\n context.events = resolveAll(resolveAllConstructs, context.events, context);\n return context.events;\n }\n\n //\n // Tools.\n //\n\n /** @type {TokenizeContext['sliceSerialize']} */\n function sliceSerialize(token, expandTabs) {\n return serializeChunks(sliceStream(token), expandTabs);\n }\n\n /** @type {TokenizeContext['sliceStream']} */\n function sliceStream(token) {\n return sliceChunks(chunks, token);\n }\n\n /** @type {TokenizeContext['now']} */\n function now() {\n // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n const {\n _bufferIndex,\n _index,\n line,\n column,\n offset\n } = point;\n return {\n _bufferIndex,\n _index,\n line,\n column,\n offset\n };\n }\n\n /** @type {TokenizeContext['defineSkip']} */\n function defineSkip(value) {\n columnStart[value.line] = value.column;\n accountForPotentialSkip();\n }\n\n //\n // State management.\n //\n\n /**\n * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n * `consume`).\n * Here is where we walk through the chunks, which either include strings of\n * several characters, or numerical character codes.\n * The reason to do this in a loop instead of a call is so the stack can\n * drain.\n *\n * @returns {undefined}\n * Nothing.\n */\n function main() {\n while (point._index < chunks.length) {\n const chunk = chunks[point._index];\n\n // If we’re in a buffer chunk, loop through it.\n if (typeof chunk === 'string') {\n const chunkIndex = point._index;\n if (point._bufferIndex < 0) {\n point._bufferIndex = 0;\n }\n while (point._index === chunkIndex && point._bufferIndex < chunk.length) {\n go(chunk.charCodeAt(point._bufferIndex));\n }\n } else {\n go(chunk);\n }\n }\n }\n\n /**\n * Deal with one code.\n *\n * @param {Code} code\n * Code.\n * @returns {undefined}\n * Nothing.\n */\n function go(code) {\n consumed = undefined;\n expectedCode = code;\n state = state(code);\n }\n\n /** @type {Effects['consume']} */\n function consume(code) {\n if (markdownLineEnding(code)) {\n point.line++;\n point.column = 1;\n point.offset += code === -3 ? 2 : 1;\n accountForPotentialSkip();\n } else if (code !== -1) {\n point.column++;\n point.offset++;\n }\n\n // Not in a string chunk.\n if (point._bufferIndex < 0) {\n point._index++;\n } else {\n point._bufferIndex++;\n\n // At end of string chunk.\n if (point._bufferIndex ===\n // Points w/ non-negative `_bufferIndex` reference\n // strings.\n /** @type {string} */\n chunks[point._index].length) {\n point._bufferIndex = -1;\n point._index++;\n }\n }\n\n // Expose the previous character.\n context.previous = code;\n\n // Mark as consumed.\n consumed = true;\n }\n\n /** @type {Effects['enter']} */\n function enter(type, fields) {\n /** @type {Token} */\n // @ts-expect-error Patch instead of assign required fields to help GC.\n const token = fields || {};\n token.type = type;\n token.start = now();\n context.events.push(['enter', token, context]);\n stack.push(token);\n return token;\n }\n\n /** @type {Effects['exit']} */\n function exit(type) {\n const token = stack.pop();\n token.end = now();\n context.events.push(['exit', token, context]);\n return token;\n }\n\n /**\n * Use results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulconstruct(construct, info) {\n addResult(construct, info.from);\n }\n\n /**\n * Discard results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulcheck(_, info) {\n info.restore();\n }\n\n /**\n * Factory to attempt/check/interrupt.\n *\n * @param {ReturnHandle} onreturn\n * Callback.\n * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n * Fields.\n */\n function constructFactory(onreturn, fields) {\n return hook;\n\n /**\n * Handle either an object mapping codes to constructs, a list of\n * constructs, or a single construct.\n *\n * @param {Array | ConstructRecord | Construct} constructs\n * Constructs.\n * @param {State} returnState\n * State.\n * @param {State | undefined} [bogusState]\n * State.\n * @returns {State}\n * State.\n */\n function hook(constructs, returnState, bogusState) {\n /** @type {ReadonlyArray} */\n let listOfConstructs;\n /** @type {number} */\n let constructIndex;\n /** @type {Construct} */\n let currentConstruct;\n /** @type {Info} */\n let info;\n return Array.isArray(constructs) ? /* c8 ignore next 1 */\n handleListOfConstructs(constructs) : 'tokenize' in constructs ?\n // Looks like a construct.\n handleListOfConstructs([(/** @type {Construct} */constructs)]) : handleMapOfConstructs(constructs);\n\n /**\n * Handle a list of construct.\n *\n * @param {ConstructRecord} map\n * Constructs.\n * @returns {State}\n * State.\n */\n function handleMapOfConstructs(map) {\n return start;\n\n /** @type {State} */\n function start(code) {\n const left = code !== null && map[code];\n const all = code !== null && map.null;\n const list = [\n // To do: add more extension tests.\n /* c8 ignore next 2 */\n ...(Array.isArray(left) ? left : left ? [left] : []), ...(Array.isArray(all) ? all : all ? [all] : [])];\n return handleListOfConstructs(list)(code);\n }\n }\n\n /**\n * Handle a list of construct.\n *\n * @param {ReadonlyArray} list\n * Constructs.\n * @returns {State}\n * State.\n */\n function handleListOfConstructs(list) {\n listOfConstructs = list;\n constructIndex = 0;\n if (list.length === 0) {\n return bogusState;\n }\n return handleConstruct(list[constructIndex]);\n }\n\n /**\n * Handle a single construct.\n *\n * @param {Construct} construct\n * Construct.\n * @returns {State}\n * State.\n */\n function handleConstruct(construct) {\n return start;\n\n /** @type {State} */\n function start(code) {\n // To do: not needed to store if there is no bogus state, probably?\n // Currently doesn’t work because `inspect` in document does a check\n // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n // by not storing.\n info = store();\n currentConstruct = construct;\n if (!construct.partial) {\n context.currentConstruct = construct;\n }\n\n // Always populated by defaults.\n\n if (construct.name && context.parser.constructs.disable.null.includes(construct.name)) {\n return nok(code);\n }\n return construct.tokenize.call(\n // If we do have fields, create an object w/ `context` as its\n // prototype.\n // This allows a “live binding”, which is needed for `interrupt`.\n fields ? Object.assign(Object.create(context), fields) : context, effects, ok, nok)(code);\n }\n }\n\n /** @type {State} */\n function ok(code) {\n consumed = true;\n onreturn(currentConstruct, info);\n return returnState;\n }\n\n /** @type {State} */\n function nok(code) {\n consumed = true;\n info.restore();\n if (++constructIndex < listOfConstructs.length) {\n return handleConstruct(listOfConstructs[constructIndex]);\n }\n return bogusState;\n }\n }\n }\n\n /**\n * @param {Construct} construct\n * Construct.\n * @param {number} from\n * From.\n * @returns {undefined}\n * Nothing.\n */\n function addResult(construct, from) {\n if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n resolveAllConstructs.push(construct);\n }\n if (construct.resolve) {\n splice(context.events, from, context.events.length - from, construct.resolve(context.events.slice(from), context));\n }\n if (construct.resolveTo) {\n context.events = construct.resolveTo(context.events, context);\n }\n }\n\n /**\n * Store state.\n *\n * @returns {Info}\n * Info.\n */\n function store() {\n const startPoint = now();\n const startPrevious = context.previous;\n const startCurrentConstruct = context.currentConstruct;\n const startEventsIndex = context.events.length;\n const startStack = Array.from(stack);\n return {\n from: startEventsIndex,\n restore\n };\n\n /**\n * Restore state.\n *\n * @returns {undefined}\n * Nothing.\n */\n function restore() {\n point = startPoint;\n context.previous = startPrevious;\n context.currentConstruct = startCurrentConstruct;\n context.events.length = startEventsIndex;\n stack = startStack;\n accountForPotentialSkip();\n }\n }\n\n /**\n * Move the current point a bit forward in the line when it’s on a column\n * skip.\n *\n * @returns {undefined}\n * Nothing.\n */\n function accountForPotentialSkip() {\n if (point.line in columnStart && point.column < 2) {\n point.column = columnStart[point.line];\n point.offset += columnStart[point.line] - 1;\n }\n }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {ReadonlyArray} chunks\n * Chunks.\n * @param {Pick} token\n * Token.\n * @returns {Array}\n * Chunks.\n */\nfunction sliceChunks(chunks, token) {\n const startIndex = token.start._index;\n const startBufferIndex = token.start._bufferIndex;\n const endIndex = token.end._index;\n const endBufferIndex = token.end._bufferIndex;\n /** @type {Array} */\n let view;\n if (startIndex === endIndex) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)];\n } else {\n view = chunks.slice(startIndex, endIndex);\n if (startBufferIndex > -1) {\n const head = view[0];\n if (typeof head === 'string') {\n view[0] = head.slice(startBufferIndex);\n /* c8 ignore next 4 -- used to be used, no longer */\n } else {\n view.shift();\n }\n }\n if (endBufferIndex > 0) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view.push(chunks[endIndex].slice(0, endBufferIndex));\n }\n }\n return view;\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {ReadonlyArray} chunks\n * Chunks.\n * @param {boolean | undefined} [expandTabs=false]\n * Whether to expand tabs (default: `false`).\n * @returns {string}\n * Result.\n */\nfunction serializeChunks(chunks, expandTabs) {\n let index = -1;\n /** @type {Array} */\n const result = [];\n /** @type {boolean | undefined} */\n let atTab;\n while (++index < chunks.length) {\n const chunk = chunks[index];\n /** @type {string} */\n let value;\n if (typeof chunk === 'string') {\n value = chunk;\n } else {\n switch (chunk) {\n case -5:\n {\n value = \"\\r\";\n break;\n }\n case -4:\n {\n value = \"\\n\";\n break;\n }\n case -3:\n {\n value = \"\\r\" + \"\\n\";\n break;\n }\n case -2:\n {\n value = expandTabs ? \" \" : \"\\t\";\n break;\n }\n case -1:\n {\n if (!expandTabs && atTab) {\n continue;\n }\n value = \" \";\n break;\n }\n default:\n {\n // Currently only replacement character.\n value = String.fromCharCode(chunk);\n }\n }\n }\n atTab = chunk === -2;\n result.push(value);\n }\n return result.join('');\n}","/**\n * @import {\n * Create,\n * FullNormalizedExtension,\n * InitialConstruct,\n * ParseContext,\n * ParseOptions\n * } from 'micromark-util-types'\n */\n\nimport { combineExtensions } from 'micromark-util-combine-extensions';\nimport { content } from './initialize/content.js';\nimport { document } from './initialize/document.js';\nimport { flow } from './initialize/flow.js';\nimport { string, text } from './initialize/text.js';\nimport * as defaultConstructs from './constructs.js';\nimport { createTokenizer } from './create-tokenizer.js';\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n * Configuration (optional).\n * @returns {ParseContext}\n * Parser.\n */\nexport function parse(options) {\n const settings = options || {};\n const constructs = /** @type {FullNormalizedExtension} */\n combineExtensions([defaultConstructs, ...(settings.extensions || [])]);\n\n /** @type {ParseContext} */\n const parser = {\n constructs,\n content: create(content),\n defined: [],\n document: create(document),\n flow: create(flow),\n lazy: {},\n string: create(string),\n text: create(text)\n };\n return parser;\n\n /**\n * @param {InitialConstruct} initial\n * Construct to start with.\n * @returns {Create}\n * Create a tokenizer.\n */\n function create(initial) {\n return creator;\n /** @type {Create} */\n function creator(from) {\n return createTokenizer(parser, initial, from);\n }\n }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\nimport { subtokenize } from 'micromark-util-subtokenize';\n\n/**\n * @param {Array} events\n * Events.\n * @returns {Array}\n * Events.\n */\nexport function postprocess(events) {\n while (!subtokenize(events)) {\n // Empty\n }\n return events;\n}","/**\n * @import {Chunk, Code, Encoding, Value} from 'micromark-util-types'\n */\n\n/**\n * @callback Preprocessor\n * Preprocess a value.\n * @param {Value} value\n * Value.\n * @param {Encoding | null | undefined} [encoding]\n * Encoding when `value` is a typed array (optional).\n * @param {boolean | null | undefined} [end=false]\n * Whether this is the last chunk (default: `false`).\n * @returns {Array}\n * Chunks.\n */\n\nconst search = /[\\0\\t\\n\\r]/g;\n\n/**\n * @returns {Preprocessor}\n * Preprocess a value.\n */\nexport function preprocess() {\n let column = 1;\n let buffer = '';\n /** @type {boolean | undefined} */\n let start = true;\n /** @type {boolean | undefined} */\n let atCarriageReturn;\n return preprocessor;\n\n /** @type {Preprocessor} */\n // eslint-disable-next-line complexity\n function preprocessor(value, encoding, end) {\n value = buffer + (typeof value === 'string' ? value.toString() : new TextDecoder(encoding || undefined).decode(value));\n\n /** @type {Array} */\n const chunks = [];\n let startPosition = 0;\n buffer = '';\n if (start) {\n // To do: `markdown-rs` actually parses BOMs (byte order mark).\n if (value.charCodeAt(0) === 65279) {\n startPosition++;\n }\n start = undefined;\n }\n while (startPosition < value.length) {\n search.lastIndex = startPosition;\n const match = search.exec(value);\n const endPosition = match && match.index !== undefined ? match.index : value.length;\n const code = value.charCodeAt(endPosition);\n if (!match) {\n buffer = value.slice(startPosition);\n break;\n }\n if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n chunks.push(-3);\n atCarriageReturn = undefined;\n } else {\n if (atCarriageReturn) {\n chunks.push(-5);\n atCarriageReturn = undefined;\n }\n if (startPosition < endPosition) {\n chunks.push(value.slice(startPosition, endPosition));\n column += endPosition - startPosition;\n }\n switch (code) {\n case 0:\n {\n chunks.push(65533);\n column++;\n break;\n }\n case 9:\n {\n const next = Math.ceil(column / 4) * 4;\n chunks.push(-2);\n while (column++ < next) {\n chunks.push(-1);\n }\n break;\n }\n case 10:\n {\n chunks.push(-4);\n column = 1;\n break;\n }\n default:\n {\n atCarriageReturn = true;\n column = 1;\n }\n }\n }\n startPosition = endPosition + 1;\n }\n if (end) {\n if (atCarriageReturn) {\n chunks.push(-5);\n }\n if (buffer) {\n chunks.push(buffer);\n }\n chunks.push(null);\n }\n return chunks;\n }\n}","import { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nconst characterEscapeOrReference = /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n * Value to decode.\n * @returns {string}\n * Decoded value.\n */\nexport function decodeString(value) {\n return value.replace(characterEscapeOrReference, decode);\n}\n\n/**\n * @param {string} $0\n * Match.\n * @param {string} $1\n * Character escape.\n * @param {string} $2\n * Character reference.\n * @returns {string}\n * Decoded value\n */\nfunction decode($0, $1, $2) {\n if ($1) {\n // Escape.\n return $1;\n }\n\n // Reference.\n const head = $2.charCodeAt(0);\n if (head === 35) {\n const head = $2.charCodeAt(1);\n const hex = head === 120 || head === 88;\n return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10);\n }\n return decodeNamedCharacterReference($2) || $0;\n}","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n * Node, position, or point.\n * @returns {string}\n * Pretty printed positional info of a node (`string`).\n *\n * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n * or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n * column, `s` for `start`, and `e` for end.\n * An empty string (`''`) is returned if the given value is neither `node`,\n * `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if ('position' in value || 'type' in value) {\n return position(value.position)\n }\n\n // Position.\n if ('start' in value || 'end' in value) {\n return position(value)\n }\n\n // Point.\n if ('line' in value || 'column' in value) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @import {\n * Break,\n * Blockquote,\n * Code,\n * Definition,\n * Emphasis,\n * Heading,\n * Html,\n * Image,\n * InlineCode,\n * Link,\n * ListItem,\n * List,\n * Nodes,\n * Paragraph,\n * PhrasingContent,\n * ReferenceType,\n * Root,\n * Strong,\n * Text,\n * ThematicBreak\n * } from 'mdast'\n * @import {\n * Encoding,\n * Event,\n * Token,\n * Value\n * } from 'micromark-util-types'\n * @import {Point} from 'unist'\n * @import {\n * CompileContext,\n * CompileData,\n * Config,\n * Extension,\n * Handle,\n * OnEnterError,\n * Options\n * } from './types.js'\n */\n\nimport { toString } from 'mdast-util-to-string';\nimport { parse, postprocess, preprocess } from 'micromark';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nimport { decodeString } from 'micromark-util-decode-string';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { stringifyPosition } from 'unist-util-stringify-position';\nconst own = {}.hasOwnProperty;\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n * Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n * Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {Root}\n * mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n if (encoding && typeof encoding === 'object') {\n options = encoding;\n encoding = undefined;\n }\n return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n /** @type {Config} */\n const config = {\n afterExit: [],\n beforeEnter: [],\n transforms: [],\n canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n enter: {\n autolink: opener(link),\n autolinkProtocol: onenterdata,\n autolinkEmail: onenterdata,\n atxHeading: opener(heading),\n blockQuote: opener(blockQuote),\n characterEscape: onenterdata,\n characterReference: onenterdata,\n codeFenced: opener(codeFlow),\n codeFencedFenceInfo: buffer,\n codeFencedFenceMeta: buffer,\n codeIndented: opener(codeFlow, buffer),\n codeText: opener(codeText, buffer),\n codeTextData: onenterdata,\n data: onenterdata,\n codeFlowValue: onenterdata,\n definition: opener(definition),\n definitionDestinationString: buffer,\n definitionLabelString: buffer,\n definitionTitleString: buffer,\n emphasis: opener(emphasis),\n hardBreakEscape: opener(hardBreak),\n hardBreakTrailing: opener(hardBreak),\n htmlFlow: opener(html, buffer),\n htmlFlowData: onenterdata,\n htmlText: opener(html, buffer),\n htmlTextData: onenterdata,\n image: opener(image),\n label: buffer,\n link: opener(link),\n listItem: opener(listItem),\n listItemValue: onenterlistitemvalue,\n listOrdered: opener(list, onenterlistordered),\n listUnordered: opener(list),\n paragraph: opener(paragraph),\n reference: onenterreference,\n referenceString: buffer,\n resourceDestinationString: buffer,\n resourceTitleString: buffer,\n setextHeading: opener(heading),\n strong: opener(strong),\n thematicBreak: opener(thematicBreak)\n },\n exit: {\n atxHeading: closer(),\n atxHeadingSequence: onexitatxheadingsequence,\n autolink: closer(),\n autolinkEmail: onexitautolinkemail,\n autolinkProtocol: onexitautolinkprotocol,\n blockQuote: closer(),\n characterEscapeValue: onexitdata,\n characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n characterReferenceValue: onexitcharacterreferencevalue,\n characterReference: onexitcharacterreference,\n codeFenced: closer(onexitcodefenced),\n codeFencedFence: onexitcodefencedfence,\n codeFencedFenceInfo: onexitcodefencedfenceinfo,\n codeFencedFenceMeta: onexitcodefencedfencemeta,\n codeFlowValue: onexitdata,\n codeIndented: closer(onexitcodeindented),\n codeText: closer(onexitcodetext),\n codeTextData: onexitdata,\n data: onexitdata,\n definition: closer(),\n definitionDestinationString: onexitdefinitiondestinationstring,\n definitionLabelString: onexitdefinitionlabelstring,\n definitionTitleString: onexitdefinitiontitlestring,\n emphasis: closer(),\n hardBreakEscape: closer(onexithardbreak),\n hardBreakTrailing: closer(onexithardbreak),\n htmlFlow: closer(onexithtmlflow),\n htmlFlowData: onexitdata,\n htmlText: closer(onexithtmltext),\n htmlTextData: onexitdata,\n image: closer(onexitimage),\n label: onexitlabel,\n labelText: onexitlabeltext,\n lineEnding: onexitlineending,\n link: closer(onexitlink),\n listItem: closer(),\n listOrdered: closer(),\n listUnordered: closer(),\n paragraph: closer(),\n referenceString: onexitreferencestring,\n resourceDestinationString: onexitresourcedestinationstring,\n resourceTitleString: onexitresourcetitlestring,\n resource: onexitresource,\n setextHeading: closer(onexitsetextheading),\n setextHeadingLineSequence: onexitsetextheadinglinesequence,\n setextHeadingText: onexitsetextheadingtext,\n strong: closer(),\n thematicBreak: closer()\n }\n };\n configure(config, (options || {}).mdastExtensions || []);\n\n /** @type {CompileData} */\n const data = {};\n return compile;\n\n /**\n * Turn micromark events into an mdast tree.\n *\n * @param {Array} events\n * Events.\n * @returns {Root}\n * mdast tree.\n */\n function compile(events) {\n /** @type {Root} */\n let tree = {\n type: 'root',\n children: [],\n position: undefined\n };\n /** @type {Omit} */\n const context = {\n stack: [tree],\n tokenStack: [],\n config,\n enter,\n exit,\n buffer,\n resume,\n data\n };\n /** @type {Array} */\n const listStack = [];\n /** @type {Array} */\n const prepared = [];\n let index = -1;\n\n // Add `listItem` tokens and infer spread.\n // Each list is prepared while it is last in `prepared`, so nothing shifts.\n while (++index < events.length) {\n prepared.push(events[index]);\n if (events[index][1].type === \"listOrdered\" || events[index][1].type === \"listUnordered\") {\n if (events[index][0] === 'enter') {\n listStack.push(prepared.length - 1);\n } else {\n const tail = listStack.pop();\n prepareList(prepared, tail);\n }\n }\n }\n events = prepared;\n index = -1;\n while (++index < events.length) {\n const handler = config[events[index][0]];\n if (events[index][0] === 'enter' && config.beforeEnter.length > 0) {\n callListeners(config.beforeEnter, {\n ...context,\n sliceSerialize: events[index][2].sliceSerialize\n }, events[index][1]);\n }\n if (own.call(handler, events[index][1].type)) {\n // Note: spread first, V8 has optimizations for object shape cloning.\n handler[events[index][1].type].call({\n ...context,\n sliceSerialize: events[index][2].sliceSerialize\n }, events[index][1]);\n }\n if (events[index][0] === 'exit' && config.afterExit.length > 0) {\n callListeners(config.afterExit, {\n ...context,\n sliceSerialize: events[index][2].sliceSerialize\n }, events[index][1]);\n }\n }\n\n // Handle tokens still being open.\n if (context.tokenStack.length > 0) {\n const tail = context.tokenStack[context.tokenStack.length - 1];\n const handler = tail[1] || defaultOnError;\n handler.call(context, undefined, tail[0]);\n }\n\n // Figure out `root` position.\n tree.position = {\n start: point(events.length > 0 ? events[0][1].start : {\n line: 1,\n column: 1,\n offset: 0\n }),\n end: point(events.length > 0 ? events[events.length - 2][1].end : {\n line: 1,\n column: 1,\n offset: 0\n })\n };\n\n // Call transforms.\n index = -1;\n while (++index < config.transforms.length) {\n tree = config.transforms[index](tree) || tree;\n }\n return tree;\n }\n\n /**\n * @param {Array} listeners\n * Listeners.\n * @param {CompileContext} context\n * Context.\n * @param {Token} token\n * Token.\n * @returns {undefined}\n * Nothing.\n */\n function callListeners(listeners, context, token) {\n let index = -1;\n while (++index < listeners.length) {\n listeners[index].call(context, token);\n }\n }\n\n /**\n * @param {Array} events\n * Events, ending with the list to prepare.\n * @param {number} start\n * Index of the list enter.\n * @returns {undefined}\n */\n function prepareList(events, start) {\n const end = events.length - 1;\n let index = start - 1;\n let containerBalance = -1;\n let listSpread = false;\n /** @type {Token | undefined} */\n let listItem;\n /** @type {number | undefined} */\n let lineIndex;\n /** @type {number | undefined} */\n let firstBlankLineIndex;\n /** @type {boolean | undefined} */\n let atMarker;\n /**\n * `listItem` events to insert before the event at `at`, in walk order.\n * Merged in after the walk, as inserting while walking would shift the\n * rest of the list once per item.\n * @type {Array<{at: number, event: Event}>}\n */\n const insertions = [];\n while (++index <= end) {\n const event = events[index];\n switch (event[1].type) {\n case \"listUnordered\":\n case \"listOrdered\":\n case \"blockQuote\":\n {\n if (event[0] === 'enter') {\n containerBalance++;\n } else {\n containerBalance--;\n }\n atMarker = undefined;\n break;\n }\n case \"lineEndingBlank\":\n {\n if (event[0] === 'enter') {\n if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n firstBlankLineIndex = index;\n }\n atMarker = undefined;\n }\n break;\n }\n case \"linePrefix\":\n case \"listItemValue\":\n case \"listItemMarker\":\n case \"listItemPrefix\":\n case \"listItemPrefixWhitespace\":\n {\n // Empty.\n\n break;\n }\n default:\n {\n atMarker = undefined;\n }\n }\n if (!containerBalance && event[0] === 'enter' && event[1].type === \"listItemPrefix\" || containerBalance === -1 && event[0] === 'exit' && (event[1].type === \"listUnordered\" || event[1].type === \"listOrdered\")) {\n if (listItem) {\n let tailIndex = index;\n lineIndex = undefined;\n while (tailIndex--) {\n const tailEvent = events[tailIndex];\n if (tailEvent[1].type === \"lineEnding\" || tailEvent[1].type === \"lineEndingBlank\") {\n if (tailEvent[0] === 'exit') continue;\n if (lineIndex) {\n events[lineIndex][1].type = \"lineEndingBlank\";\n listSpread = true;\n }\n tailEvent[1].type = \"lineEnding\";\n lineIndex = tailIndex;\n } else if (tailEvent[1].type === \"linePrefix\" || tailEvent[1].type === \"blockQuotePrefix\" || tailEvent[1].type === \"blockQuotePrefixWhitespace\" || tailEvent[1].type === \"blockQuoteMarker\" || tailEvent[1].type === \"listItemIndent\") {\n // Empty\n } else {\n break;\n }\n }\n if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n listItem._spread = true;\n }\n\n // Fix position.\n listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\n insertions.push({\n at: lineIndex || index,\n event: ['exit', listItem, event[2]]\n });\n }\n\n // Create a new list item.\n if (event[1].type === \"listItemPrefix\") {\n /** @type {Token} */\n const item = {\n type: 'listItem',\n _spread: false,\n start: Object.assign({}, event[1].start),\n // @ts-expect-error: we’ll add `end` in a second.\n end: undefined\n };\n listItem = item;\n insertions.push({\n at: index,\n event: ['enter', item, event[2]]\n });\n firstBlankLineIndex = undefined;\n atMarker = true;\n }\n }\n }\n\n // The list is at the end of `events`: take it off, then push it back with\n // the insertions merged in.\n // Nothing follows the list, so nothing shifts.\n const listEvents = events.splice(start);\n let insertion = 0;\n index = -1;\n while (++index < listEvents.length) {\n while (insertion < insertions.length && insertions[insertion].at === start + index) {\n events.push(insertions[insertion++].event);\n }\n events.push(listEvents[index]);\n }\n events[start][1]._spread = listSpread;\n }\n\n /**\n * Create an opener handle.\n *\n * @param {(token: Token) => Nodes} create\n * Create a node.\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function opener(create, and) {\n return open;\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function open(token) {\n enter.call(this, create(token), token);\n if (and) and.call(this, token);\n }\n }\n\n /**\n * @type {CompileContext['buffer']}\n */\n function buffer() {\n this.stack.push({\n type: 'fragment',\n children: []\n });\n }\n\n /**\n * @type {CompileContext['enter']}\n */\n function enter(node, token, errorHandler) {\n const parent = this.stack[this.stack.length - 1];\n /** @type {Array} */\n const siblings = parent.children;\n siblings.push(node);\n this.stack.push(node);\n this.tokenStack.push([token, errorHandler || undefined]);\n node.position = {\n start: point(token.start),\n // @ts-expect-error: `end` will be patched later.\n end: undefined\n };\n }\n\n /**\n * Create a closer handle.\n *\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function closer(and) {\n return close;\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function close(token) {\n if (and) and.call(this, token);\n exit.call(this, token);\n }\n }\n\n /**\n * @type {CompileContext['exit']}\n */\n function exit(token, onExitError) {\n const node = this.stack.pop();\n const open = this.tokenStack.pop();\n if (!open) {\n throw new Error('Cannot close `' + token.type + '` (' + stringifyPosition({\n start: token.start,\n end: token.end\n }) + '): it’s not open');\n }\n if (open[0].type !== token.type) {\n if (onExitError) {\n onExitError.call(this, token, open[0]);\n } else {\n const handler = open[1] || defaultOnError;\n handler.call(this, token, open[0]);\n }\n }\n node.position.end = point(token.end);\n }\n\n /**\n * @type {CompileContext['resume']}\n */\n function resume() {\n return toString(this.stack.pop());\n }\n\n //\n // Handlers.\n //\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistordered() {\n this.data.expectingFirstListItemValue = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistitemvalue(token) {\n if (this.data.expectingFirstListItemValue) {\n const ancestor = this.stack[this.stack.length - 2];\n ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n this.data.expectingFirstListItemValue = undefined;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfenceinfo() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.lang = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfencemeta() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.meta = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfence() {\n // Exit if this is the closing fence.\n if (this.data.flowCodeInside) return;\n this.buffer();\n this.data.flowCodeInside = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefenced() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '');\n this.data.flowCodeInside = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodeindented() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data.replace(/(\\r?\\n|\\r)$/g, '');\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitionlabelstring(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.label = label;\n node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiontitlestring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.title = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiondestinationstring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.url = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitatxheadingsequence(token) {\n const node = this.stack[this.stack.length - 1];\n if (!node.depth) {\n const depth = this.sliceSerialize(token).length;\n node.depth = depth;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadingtext() {\n this.data.setextHeadingSlurpLineEnding = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadinglinesequence(token) {\n const node = this.stack[this.stack.length - 1];\n node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheading() {\n this.data.setextHeadingSlurpLineEnding = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterdata(token) {\n const node = this.stack[this.stack.length - 1];\n /** @type {Array} */\n const siblings = node.children;\n let tail = siblings[siblings.length - 1];\n if (!tail || tail.type !== 'text') {\n // Add a new text node.\n tail = text();\n tail.position = {\n start: point(token.start),\n // @ts-expect-error: we’ll add `end` later.\n end: undefined\n };\n siblings.push(tail);\n }\n this.stack.push(tail);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitdata(token) {\n const tail = this.stack.pop();\n tail.value += this.sliceSerialize(token);\n tail.position.end = point(token.end);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlineending(token) {\n const context = this.stack[this.stack.length - 1];\n // If we’re at a hard break, include the line ending in there.\n if (this.data.atHardBreak) {\n const tail = context.children[context.children.length - 1];\n tail.position.end = point(token.end);\n this.data.atHardBreak = undefined;\n return;\n }\n if (!this.data.setextHeadingSlurpLineEnding && config.canContainEols.includes(context.type)) {\n onenterdata.call(this, token);\n onexitdata.call(this, token);\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithardbreak() {\n this.data.atHardBreak = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmlflow() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmltext() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcodetext() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlink() {\n const node = this.stack[this.stack.length - 1];\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut';\n node.type += 'Reference';\n // @ts-expect-error: mutate.\n node.referenceType = referenceType;\n // @ts-expect-error: mutate.\n delete node.url;\n delete node.title;\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier;\n // @ts-expect-error: mutate.\n delete node.label;\n }\n this.data.referenceType = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitimage() {\n const node = this.stack[this.stack.length - 1];\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut';\n node.type += 'Reference';\n // @ts-expect-error: mutate.\n node.referenceType = referenceType;\n // @ts-expect-error: mutate.\n delete node.url;\n delete node.title;\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier;\n // @ts-expect-error: mutate.\n delete node.label;\n }\n this.data.referenceType = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabeltext(token) {\n const string = this.sliceSerialize(token);\n const ancestor = this.stack[this.stack.length - 2];\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n ancestor.label = decodeString(string);\n // @ts-expect-error: same as above.\n ancestor.identifier = normalizeIdentifier(string).toLowerCase();\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabel() {\n const fragment = this.stack[this.stack.length - 1];\n const value = this.resume();\n const node = this.stack[this.stack.length - 1];\n // Assume a reference.\n this.data.inReference = true;\n if (node.type === 'link') {\n /** @type {Array} */\n const children = fragment.children;\n node.children = children;\n } else {\n node.alt = value;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcedestinationstring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.url = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcetitlestring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.title = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresource() {\n this.data.inReference = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterreference() {\n this.data.referenceType = 'collapsed';\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitreferencestring(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n node.label = label;\n // @ts-expect-error: same as above.\n node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n this.data.referenceType = 'full';\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcharacterreferencemarker(token) {\n this.data.characterReferenceType = token.type;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreferencevalue(token) {\n const data = this.sliceSerialize(token);\n const type = this.data.characterReferenceType;\n /** @type {string} */\n let value;\n if (type) {\n value = decodeNumericCharacterReference(data, type === \"characterReferenceMarkerNumeric\" ? 10 : 16);\n this.data.characterReferenceType = undefined;\n } else {\n const result = decodeNamedCharacterReference(data);\n value = result;\n }\n const tail = this.stack[this.stack.length - 1];\n tail.value += value;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreference(token) {\n const tail = this.stack.pop();\n tail.position.end = point(token.end);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkprotocol(token) {\n onexitdata.call(this, token);\n const node = this.stack[this.stack.length - 1];\n node.url = this.sliceSerialize(token);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkemail(token) {\n onexitdata.call(this, token);\n const node = this.stack[this.stack.length - 1];\n node.url = 'mailto:' + this.sliceSerialize(token);\n }\n\n //\n // Creaters.\n //\n\n // Each node factory pre-declares `position` as undefined as the trailing\n // property. enter() patches it to a real value, but the property already\n // exists, so V8 sees a single hidden class for each node type from\n // construction through the rest of the pipeline. Without the pre-declare,\n // each node took a hidden-class transition when enter() added position.\n\n /** @returns {Blockquote} */\n function blockQuote() {\n return {\n type: 'blockquote',\n children: [],\n position: undefined\n };\n }\n\n /** @returns {Code} */\n function codeFlow() {\n return {\n type: 'code',\n lang: null,\n meta: null,\n value: '',\n position: undefined\n };\n }\n\n /** @returns {InlineCode} */\n function codeText() {\n return {\n type: 'inlineCode',\n value: '',\n position: undefined\n };\n }\n\n /** @returns {Definition} */\n function definition() {\n return {\n type: 'definition',\n identifier: '',\n label: null,\n title: null,\n url: '',\n position: undefined\n };\n }\n\n /** @returns {Emphasis} */\n function emphasis() {\n return {\n type: 'emphasis',\n children: [],\n position: undefined\n };\n }\n\n /** @returns {Heading} */\n function heading() {\n return {\n type: 'heading',\n // @ts-expect-error `depth` will be set later.\n depth: 0,\n children: [],\n position: undefined\n };\n }\n\n /** @returns {Break} */\n function hardBreak() {\n return {\n type: 'break',\n position: undefined\n };\n }\n\n /** @returns {Html} */\n function html() {\n return {\n type: 'html',\n value: '',\n position: undefined\n };\n }\n\n /** @returns {Image} */\n function image() {\n return {\n type: 'image',\n title: null,\n url: '',\n alt: null,\n position: undefined\n };\n }\n\n /** @returns {Link} */\n function link() {\n return {\n type: 'link',\n title: null,\n url: '',\n children: [],\n position: undefined\n };\n }\n\n /**\n * @param {Token} token\n * @returns {List}\n */\n function list(token) {\n return {\n type: 'list',\n ordered: token.type === 'listOrdered',\n start: null,\n spread: token._spread,\n children: [],\n position: undefined\n };\n }\n\n /**\n * @param {Token} token\n * @returns {ListItem}\n */\n function listItem(token) {\n return {\n type: 'listItem',\n spread: token._spread,\n checked: null,\n children: [],\n position: undefined\n };\n }\n\n /** @returns {Paragraph} */\n function paragraph() {\n return {\n type: 'paragraph',\n children: [],\n position: undefined\n };\n }\n\n /** @returns {Strong} */\n function strong() {\n return {\n type: 'strong',\n children: [],\n position: undefined\n };\n }\n\n /** @returns {Text} */\n function text() {\n return {\n type: 'text',\n value: '',\n position: undefined\n };\n }\n\n /** @returns {ThematicBreak} */\n function thematicBreak() {\n return {\n type: 'thematicBreak',\n position: undefined\n };\n }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n * Point-like value.\n * @returns {Point}\n * unist point.\n */\nfunction point(d) {\n return {\n line: d.line,\n column: d.column,\n offset: d.offset\n };\n}\n\n/**\n * @param {Config} combined\n * @param {Array | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n let index = -1;\n while (++index < extensions.length) {\n const value = extensions[index];\n if (Array.isArray(value)) {\n configure(combined, value);\n } else {\n extension(combined, value);\n }\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n /** @type {keyof Extension} */\n let key;\n for (key in extension) {\n if (own.call(extension, key)) {\n switch (key) {\n case 'canContainEols':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(...right);\n }\n break;\n }\n case 'transforms':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(...right);\n }\n break;\n }\n case 'afterExit':\n case 'beforeEnter':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(right);\n }\n break;\n }\n case 'enter':\n case 'exit':\n {\n const right = extension[key];\n if (right) {\n Object.assign(combined[key], right);\n }\n break;\n }\n // No default\n }\n }\n }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n if (left) {\n throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n start: left.start,\n end: left.end\n }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is open');\n }\n throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is still open');\n}","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser} Parser\n * @typedef {import('unified').Processor} Processor\n */\n\n/**\n * @typedef {Omit} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkParse(options) {\n /** @type {Processor} */\n // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n const self = this\n\n self.parser = parser\n\n /**\n * @type {Parser}\n */\n function parser(doc) {\n return fromMarkdown(doc, {\n ...self.data('settings'),\n ...options,\n // Note: these options are not in the readme.\n // The goal is for them to be set by plugins on `data` instead of being\n // passed by users.\n extensions: self.data('micromarkExtensions') || [],\n mdastExtensions: self.data('fromMarkdownExtensions') || []\n })\n }\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Blockquote} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Blockquote} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function blockquote(state, node) {\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'blockquote',\n properties: {},\n children: state.wrap(state.all(node), true)\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @import {Element, Text} from 'hast'\n * @import {Break} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Break} node\n * mdast node.\n * @returns {Array}\n * hast element content.\n */\nexport function hardBreak(state, node) {\n /** @type {Element} */\n const result = {type: 'element', tagName: 'br', properties: {}, children: []}\n state.patch(node, result)\n return [state.applyData(node, result), {type: 'text', value: '\\n'}]\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Code} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Code} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function code(state, node) {\n const value = node.value ? node.value + '\\n' : ''\n /** @type {Properties} */\n const properties = {}\n // Someone can write `js python ruby`.\n const language = node.lang ? node.lang.split(/\\s+/) : []\n\n // GH/CM still drop the non-first languages.\n if (language.length > 0) {\n properties.className = ['language-' + language[0]]\n }\n\n // Create ``.\n /** @type {Element} */\n let result = {\n type: 'element',\n tagName: 'code',\n properties,\n children: [{type: 'text', value}]\n }\n\n if (node.meta) {\n result.data = {meta: node.meta}\n }\n\n state.patch(node, result)\n result = state.applyData(node, result)\n\n // Create `
`.\n  result = {type: 'element', tagName: 'pre', properties: {}, children: [result]}\n  state.patch(node, result)\n  return result\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Delete} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Delete} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strikethrough(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'del',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Emphasis} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Emphasis} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function emphasis(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'em',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {FootnoteReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {FootnoteReference} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnoteReference(state, node) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const id = String(node.identifier).toUpperCase()\n  const safeId = normalizeUri(id.toLowerCase())\n  const index = state.footnoteOrder.indexOf(id)\n  /** @type {number} */\n  let counter\n\n  let reuseCounter = state.footnoteCounts.get(id)\n\n  if (reuseCounter === undefined) {\n    reuseCounter = 0\n    state.footnoteOrder.push(id)\n    counter = state.footnoteOrder.length\n  } else {\n    counter = index + 1\n  }\n\n  reuseCounter += 1\n  state.footnoteCounts.set(id, reuseCounter)\n\n  /** @type {Element} */\n  const link = {\n    type: 'element',\n    tagName: 'a',\n    properties: {\n      href: '#' + clobberPrefix + 'fn-' + safeId,\n      id:\n        clobberPrefix +\n        'fnref-' +\n        safeId +\n        (reuseCounter > 1 ? '-' + reuseCounter : ''),\n      dataFootnoteRef: true,\n      ariaDescribedBy: ['footnote-label']\n    },\n    children: [{type: 'text', value: String(counter)}]\n  }\n  state.patch(node, link)\n\n  /** @type {Element} */\n  const sup = {\n    type: 'element',\n    tagName: 'sup',\n    properties: {},\n    children: [link]\n  }\n  state.patch(node, sup)\n  return state.applyData(node, sup)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Heading} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Heading} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function heading(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'h' + node.depth,\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Html} from 'mdast'\n * @import {State} from '../state.js'\n * @import {Raw} from '../../index.js'\n */\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n *   Info passed around.\n * @param {Html} node\n *   mdast node.\n * @returns {Element | Raw | undefined}\n *   hast node.\n */\nexport function html(state, node) {\n  if (state.options.allowDangerousHtml) {\n    /** @type {Raw} */\n    const result = {type: 'raw', value: node.value}\n    state.patch(node, result)\n    return state.applyData(node, result)\n  }\n\n  return undefined\n}\n","/**\n * @import {ElementContent} from 'hast'\n * @import {Reference, Nodes} from 'mdast'\n * @import {State} from './state.js'\n */\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Extract} node\n *   Reference node (image, link).\n * @returns {Array}\n *   hast content.\n */\nexport function revert(state, node) {\n  const subtype = node.referenceType\n  let suffix = ']'\n\n  if (subtype === 'collapsed') {\n    suffix += '[]'\n  } else if (subtype === 'full') {\n    suffix += '[' + (node.label || node.identifier) + ']'\n  }\n\n  if (node.type === 'imageReference') {\n    return [{type: 'text', value: '![' + node.alt + suffix}]\n  }\n\n  const contents = state.all(node)\n  const head = contents[0]\n\n  if (head && head.type === 'text') {\n    head.value = '[' + head.value\n  } else {\n    contents.unshift({type: 'text', value: '['})\n  }\n\n  const tail = contents[contents.length - 1]\n\n  if (tail && tail.type === 'text') {\n    tail.value += suffix\n  } else {\n    contents.push({type: 'text', value: suffix})\n  }\n\n  return contents\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {ImageReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ImageReference} node\n *   mdast node.\n * @returns {Array | ElementContent}\n *   hast node.\n */\nexport function imageReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(definition.url || ''), alt: node.alt}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Image} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Image} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function image(state, node) {\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(node.url)}\n\n  if (node.alt !== null && node.alt !== undefined) {\n    properties.alt = node.alt\n  }\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Text} from 'hast'\n * @import {InlineCode} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {InlineCode} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function inlineCode(state, node) {\n  /** @type {Text} */\n  const text = {type: 'text', value: node.value.replace(/\\r?\\n|\\r/g, ' ')}\n  state.patch(node, text)\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'code',\n    properties: {},\n    children: [text]\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {LinkReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {LinkReference} node\n *   mdast node.\n * @returns {Array | ElementContent}\n *   hast node.\n */\nexport function linkReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(definition.url || '')}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Link} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Link} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function link(state, node) {\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(node.url)}\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {ListItem, Parents} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ListItem} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function listItem(state, node, parent) {\n  const results = state.all(node)\n  const loose = parent ? listLoose(parent) : listItemLoose(node)\n  /** @type {Properties} */\n  const properties = {}\n  /** @type {Array} */\n  const children = []\n\n  if (typeof node.checked === 'boolean') {\n    const head = results[0]\n    /** @type {Element} */\n    let paragraph\n\n    if (head && head.type === 'element' && head.tagName === 'p') {\n      paragraph = head\n    } else {\n      paragraph = {type: 'element', tagName: 'p', properties: {}, children: []}\n      results.unshift(paragraph)\n    }\n\n    if (paragraph.children.length > 0) {\n      paragraph.children.unshift({type: 'text', value: ' '})\n    }\n\n    paragraph.children.unshift({\n      type: 'element',\n      tagName: 'input',\n      properties: {type: 'checkbox', checked: node.checked, disabled: true},\n      children: []\n    })\n\n    // According to github-markdown-css, this class hides bullet.\n    // See: .\n    properties.className = ['task-list-item']\n  }\n\n  let index = -1\n\n  while (++index < results.length) {\n    const child = results[index]\n\n    // Add eols before nodes, except if this is a loose, first paragraph.\n    if (\n      loose ||\n      index !== 0 ||\n      child.type !== 'element' ||\n      child.tagName !== 'p'\n    ) {\n      children.push({type: 'text', value: '\\n'})\n    }\n\n    if (child.type === 'element' && child.tagName === 'p' && !loose) {\n      children.push(...child.children)\n    } else {\n      children.push(child)\n    }\n  }\n\n  const tail = results[results.length - 1]\n\n  // Add a final eol.\n  if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n    children.push({type: 'text', value: '\\n'})\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'li', properties, children}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\nfunction listLoose(node) {\n  let loose = false\n  if (node.type === 'list') {\n    loose = node.spread || false\n    const children = node.children\n    let index = -1\n\n    while (!loose && ++index < children.length) {\n      loose = listItemLoose(children[index])\n    }\n  }\n\n  return loose\n}\n\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\nfunction listItemLoose(node) {\n  const spread = node.spread\n\n  return spread === null || spread === undefined\n    ? node.children.length > 1\n    : spread\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {List} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {List} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function list(state, node) {\n  /** @type {Properties} */\n  const properties = {}\n  const results = state.all(node)\n  let index = -1\n\n  if (typeof node.start === 'number' && node.start !== 1) {\n    properties.start = node.start\n  }\n\n  // Like GitHub, add a class for custom styling.\n  while (++index < results.length) {\n    const child = results[index]\n\n    if (\n      child.type === 'element' &&\n      child.tagName === 'li' &&\n      child.properties &&\n      Array.isArray(child.properties.className) &&\n      child.properties.className.includes('task-list-item')\n    ) {\n      properties.className = ['contains-task-list']\n      break\n    }\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: node.ordered ? 'ol' : 'ul',\n    properties,\n    children: state.wrap(results, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Paragraph} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Paragraph} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function paragraph(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'p',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Parents as HastParents, Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastRoot} node\n *   mdast node.\n * @returns {HastParents}\n *   hast node.\n */\nexport function root(state, node) {\n  /** @type {HastRoot} */\n  const result = {type: 'root', children: state.wrap(state.all(node))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Strong} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Strong} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strong(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'strong',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Get the ending point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointEnd = point('end')\n\n/**\n * Get the starting point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointStart = point('start')\n\n/**\n * Get the positional info of `node`.\n *\n * @param {'end' | 'start'} type\n *   Side.\n * @returns\n *   Getter.\n */\nfunction point(type) {\n  return point\n\n  /**\n   * Get the point info of `node` at a bound side.\n   *\n   * @param {Node | NodeLike | null | undefined} [node]\n   * @returns {Point | undefined}\n   */\n  function point(node) {\n    const point = (node && node.position && node.position[type]) || {}\n\n    if (\n      typeof point.line === 'number' &&\n      point.line > 0 &&\n      typeof point.column === 'number' &&\n      point.column > 0\n    ) {\n      return {\n        line: point.line,\n        column: point.column,\n        offset:\n          typeof point.offset === 'number' && point.offset > -1\n            ? point.offset\n            : undefined\n      }\n    }\n  }\n}\n\n/**\n * Get the positional info of `node`.\n *\n * @param {Node | NodeLike | null | undefined} [node]\n *   Node.\n * @returns {Position | undefined}\n *   Position.\n */\nexport function position(node) {\n  const start = pointStart(node)\n  const end = pointEnd(node)\n\n  if (start && end) {\n    return {start, end}\n  }\n}\n","/**\n * @import {Table} from 'mdast'\n * @import {Element} from 'hast'\n * @import {State} from '../state.js'\n */\n\nimport {pointEnd, pointStart} from 'unist-util-position'\n\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Table} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function table(state, node) {\n  const rows = state.all(node)\n  const firstRow = rows.shift()\n  /** @type {Array} */\n  const tableContent = []\n\n  if (firstRow) {\n    /** @type {Element} */\n    const head = {\n      type: 'element',\n      tagName: 'thead',\n      properties: {},\n      children: state.wrap([firstRow], true)\n    }\n    state.patch(node.children[0], head)\n    tableContent.push(head)\n  }\n\n  if (rows.length > 0) {\n    /** @type {Element} */\n    const body = {\n      type: 'element',\n      tagName: 'tbody',\n      properties: {},\n      children: state.wrap(rows, true)\n    }\n\n    const start = pointStart(node.children[1])\n    const end = pointEnd(node.children[node.children.length - 1])\n    if (start && end) body.position = {start, end}\n    tableContent.push(body)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'table',\n    properties: {},\n    children: state.wrap(tableContent, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, ElementContent, Properties} from 'hast'\n * @import {Parents, TableRow} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableRow} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function tableRow(state, node, parent) {\n  const siblings = parent ? parent.children : undefined\n  // Generate a body row when without parent.\n  const rowIndex = siblings ? siblings.indexOf(node) : 1\n  const tagName = rowIndex === 0 ? 'th' : 'td'\n  // To do: option to use `style`?\n  const align = parent && parent.type === 'table' ? parent.align : undefined\n  const length = align ? align.length : node.children.length\n  let cellIndex = -1\n  /** @type {Array} */\n  const cells = []\n\n  while (++cellIndex < length) {\n    // Note: can also be undefined.\n    const cell = node.children[cellIndex]\n    /** @type {Properties} */\n    const properties = {}\n    const alignValue = align ? align[cellIndex] : undefined\n\n    if (alignValue) {\n      properties.align = alignValue\n    }\n\n    /** @type {Element} */\n    let result = {type: 'element', tagName, properties, children: []}\n\n    if (cell) {\n      result.children = state.all(cell)\n      state.patch(cell, result)\n      result = state.applyData(cell, result)\n    }\n\n    cells.push(result)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'tr',\n    properties: {},\n    children: state.wrap(cells, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {TableCell} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableCell} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function tableCell(state, node) {\n  // Note: this function is normally not called: see `table-row` for how rows\n  // and their cells are compiled.\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'td', // Assume body cell.\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Trimmed value.\n */\nexport function trimLines(value) {\n  const source = String(value)\n  const search = /\\r?\\n|\\r/g\n  let match = search.exec(source)\n  let last = 0\n  /** @type {Array} */\n  const lines = []\n\n  while (match) {\n    lines.push(\n      trimLine(source.slice(last, match.index), last > 0, true),\n      match[0]\n    )\n\n    last = match.index + match[0].length\n    match = search.exec(source)\n  }\n\n  lines.push(trimLine(source.slice(last), last > 0, false))\n\n  return lines.join('')\n}\n\n/**\n * @param {string} value\n *   Line to trim.\n * @param {boolean} start\n *   Whether to trim the start of the line.\n * @param {boolean} end\n *   Whether to trim the end of the line.\n * @returns {string}\n *   Trimmed line.\n */\nfunction trimLine(value, start, end) {\n  let startIndex = 0\n  let endIndex = value.length\n\n  if (start) {\n    let code = value.codePointAt(startIndex)\n\n    while (code === tab || code === space) {\n      startIndex++\n      code = value.codePointAt(startIndex)\n    }\n  }\n\n  if (end) {\n    let code = value.codePointAt(endIndex - 1)\n\n    while (code === tab || code === space) {\n      endIndex--\n      code = value.codePointAt(endIndex - 1)\n    }\n  }\n\n  return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n","/**\n * @import {Element as HastElement, Text as HastText} from 'hast'\n * @import {Text as MdastText} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {trimLines} from 'trim-lines'\n\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastText} node\n *   mdast node.\n * @returns {HastElement | HastText}\n *   hast node.\n */\nexport function text(state, node) {\n  /** @type {HastText} */\n  const result = {type: 'text', value: trimLines(String(node.value))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {ThematicBreak} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ThematicBreak} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function thematicBreak(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'hr',\n    properties: {},\n    children: []\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Handlers} from '../state.js'\n */\n\nimport {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {strikethrough} from './delete.js'\nimport {emphasis} from './emphasis.js'\nimport {footnoteReference} from './footnote-reference.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {imageReference} from './image-reference.js'\nimport {image} from './image.js'\nimport {inlineCode} from './inline-code.js'\nimport {linkReference} from './link-reference.js'\nimport {link} from './link.js'\nimport {listItem} from './list-item.js'\nimport {list} from './list.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {table} from './table.js'\nimport {tableRow} from './table-row.js'\nimport {tableCell} from './table-cell.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default handlers for nodes.\n *\n * @satisfies {Handlers}\n */\nexport const handlers = {\n  blockquote,\n  break: hardBreak,\n  code,\n  delete: strikethrough,\n  emphasis,\n  footnoteReference,\n  heading,\n  html,\n  imageReference,\n  image,\n  inlineCode,\n  linkReference,\n  link,\n  listItem,\n  list,\n  paragraph,\n  // @ts-expect-error: root is different, but hard to type.\n  root,\n  strong,\n  table,\n  tableCell,\n  tableRow,\n  text,\n  thematicBreak,\n  toml: ignore,\n  yaml: ignore,\n  definition: ignore,\n  footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n  return undefined\n}\n","/**\n * @import {ElementContent, Element} from 'hast'\n * @import {State} from './state.js'\n */\n\n/**\n * @callback FootnoteBackContentTemplate\n *   Generate content for the backreference dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array | ElementContent | string}\n *   Content for the backreference when linking back from definitions to their\n *   reference.\n *\n * @callback FootnoteBackLabelTemplate\n *   Generate a back label dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Back label to use when linking back from definitions to their reference.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate the default content that GitHub uses on backreferences.\n *\n * @param {number} _\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array}\n *   Content.\n */\nexport function defaultFootnoteBackContent(_, rereferenceIndex) {\n  /** @type {Array} */\n  const result = [{type: 'text', value: '↩'}]\n\n  if (rereferenceIndex > 1) {\n    result.push({\n      type: 'element',\n      tagName: 'sup',\n      properties: {},\n      children: [{type: 'text', value: String(rereferenceIndex)}]\n    })\n  }\n\n  return result\n}\n\n/**\n * Generate the default label that GitHub uses on backreferences.\n *\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Label.\n */\nexport function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n  return (\n    'Back to reference ' +\n    (referenceIndex + 1) +\n    (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n  )\n}\n\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n *   Info passed around.\n * @returns {Element | undefined}\n *   `section` element or `undefined`.\n */\n// eslint-disable-next-line complexity\nexport function footer(state) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const footnoteBackContent =\n    state.options.footnoteBackContent || defaultFootnoteBackContent\n  const footnoteBackLabel =\n    state.options.footnoteBackLabel || defaultFootnoteBackLabel\n  const footnoteLabel = state.options.footnoteLabel || 'Footnotes'\n  const footnoteLabelTagName = state.options.footnoteLabelTagName || 'h2'\n  const footnoteLabelProperties = state.options.footnoteLabelProperties || {\n    className: ['sr-only']\n  }\n  /** @type {Array} */\n  const listItems = []\n  let referenceIndex = -1\n\n  while (++referenceIndex < state.footnoteOrder.length) {\n    const definition = state.footnoteById.get(\n      state.footnoteOrder[referenceIndex]\n    )\n\n    if (!definition) {\n      continue\n    }\n\n    const content = state.all(definition)\n    const id = String(definition.identifier).toUpperCase()\n    const safeId = normalizeUri(id.toLowerCase())\n    let rereferenceIndex = 0\n    /** @type {Array} */\n    const backReferences = []\n    const counts = state.footnoteCounts.get(id)\n\n    // eslint-disable-next-line no-unmodified-loop-condition\n    while (counts !== undefined && ++rereferenceIndex <= counts) {\n      if (backReferences.length > 0) {\n        backReferences.push({type: 'text', value: ' '})\n      }\n\n      let children =\n        typeof footnoteBackContent === 'string'\n          ? footnoteBackContent\n          : footnoteBackContent(referenceIndex, rereferenceIndex)\n\n      if (typeof children === 'string') {\n        children = {type: 'text', value: children}\n      }\n\n      backReferences.push({\n        type: 'element',\n        tagName: 'a',\n        properties: {\n          href:\n            '#' +\n            clobberPrefix +\n            'fnref-' +\n            safeId +\n            (rereferenceIndex > 1 ? '-' + rereferenceIndex : ''),\n          dataFootnoteBackref: '',\n          ariaLabel:\n            typeof footnoteBackLabel === 'string'\n              ? footnoteBackLabel\n              : footnoteBackLabel(referenceIndex, rereferenceIndex),\n          className: ['data-footnote-backref']\n        },\n        children: Array.isArray(children) ? children : [children]\n      })\n    }\n\n    const tail = content[content.length - 1]\n\n    if (tail && tail.type === 'element' && tail.tagName === 'p') {\n      const tailTail = tail.children[tail.children.length - 1]\n      if (tailTail && tailTail.type === 'text') {\n        tailTail.value += ' '\n      } else {\n        tail.children.push({type: 'text', value: ' '})\n      }\n\n      tail.children.push(...backReferences)\n    } else {\n      content.push(...backReferences)\n    }\n\n    /** @type {Element} */\n    const listItem = {\n      type: 'element',\n      tagName: 'li',\n      properties: {id: clobberPrefix + 'fn-' + safeId},\n      children: state.wrap(content, true)\n    }\n\n    state.patch(definition, listItem)\n\n    listItems.push(listItem)\n  }\n\n  if (listItems.length === 0) {\n    return\n  }\n\n  return {\n    type: 'element',\n    tagName: 'section',\n    properties: {dataFootnotes: true, className: ['footnotes']},\n    children: [\n      {\n        type: 'element',\n        tagName: footnoteLabelTagName,\n        properties: {\n          ...structuredClone(footnoteLabelProperties),\n          id: 'footnote-label'\n        },\n        children: [{type: 'text', value: footnoteLabel}]\n      },\n      {type: 'text', value: '\\n'},\n      {\n        type: 'element',\n        tagName: 'ol',\n        properties: {},\n        children: state.wrap(listItems, true)\n      },\n      {type: 'text', value: '\\n'}\n    ]\n  }\n}\n","/**\n * @import {\n *   ElementContent as HastElementContent,\n *   Element as HastElement,\n *   Nodes as HastNodes,\n *   Properties as HastProperties,\n *   RootContent as HastRootContent,\n *   Text as HastText\n * } from 'hast'\n * @import {\n *   Definition as MdastDefinition,\n *   FootnoteDefinition as MdastFootnoteDefinition,\n *   Nodes as MdastNodes,\n *   Parents as MdastParents\n * } from 'mdast'\n * @import {VFile} from 'vfile'\n * @import {\n *   FootnoteBackContentTemplate,\n *   FootnoteBackLabelTemplate\n * } from './footer.js'\n */\n\n/**\n * @callback Handler\n *   Handle a node.\n * @param {State} state\n *   Info passed around.\n * @param {any} node\n *   mdast node to handle.\n * @param {MdastParents | undefined} parent\n *   Parent of `node`.\n * @returns {Array | HastElementContent | undefined}\n *   hast node.\n *\n * @typedef {Partial>} Handlers\n *   Handle nodes.\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n *   Whether to persist raw HTML in markdown in the hast tree (default:\n *   `false`).\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` property on footnotes to prevent them from\n *   *clobbering* (default: `'user-content-'`).\n *\n *   Pass `''` for trusted markdown and when you are careful with\n *   polyfilling.\n *   You could pass a different prefix.\n *\n *   DOM clobbering is this:\n *\n *   ```html\n *   

\n * \n * ```\n *\n * The above example shows that elements are made available by browsers, by\n * their ID, on the `window` object.\n * This is a security risk because you might be expecting some other variable\n * at that place.\n * It can also break polyfills.\n * Using a prefix solves these problems.\n * @property {VFile | null | undefined} [file]\n * Corresponding virtual file representing the input document (optional).\n * @property {FootnoteBackContentTemplate | string | null | undefined} [footnoteBackContent]\n * Content of the backreference back to references (default: `defaultFootnoteBackContent`).\n *\n * The default value is:\n *\n * ```js\n * function defaultFootnoteBackContent(_, rereferenceIndex) {\n * const result = [{type: 'text', value: '↩'}]\n *\n * if (rereferenceIndex > 1) {\n * result.push({\n * type: 'element',\n * tagName: 'sup',\n * properties: {},\n * children: [{type: 'text', value: String(rereferenceIndex)}]\n * })\n * }\n *\n * return result\n * }\n * ```\n *\n * This content is used in the `a` element of each backreference (the `↩`\n * links).\n * @property {FootnoteBackLabelTemplate | string | null | undefined} [footnoteBackLabel]\n * Label to describe the backreference back to references (default:\n * `defaultFootnoteBackLabel`).\n *\n * The default value is:\n *\n * ```js\n * function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n * return (\n * 'Back to reference ' +\n * (referenceIndex + 1) +\n * (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n * )\n * }\n * ```\n *\n * Change it when the markdown is not in English.\n *\n * This label is used in the `ariaLabel` property on each backreference\n * (the `↩` links).\n * It affects users of assistive technology.\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n * Textual label to use for the footnotes section (default: `'Footnotes'`).\n *\n * Change it when the markdown is not in English.\n *\n * This label is typically hidden visually (assuming a `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass different properties with the `footnoteLabelProperties` option.\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n * Properties to use on the footnote label (default: `{className:\n * ['sr-only']}`).\n *\n * Change it to show the label and add other properties.\n *\n * This label is typically hidden visually (assuming an `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass an empty string.\n * You can also add different properties.\n *\n * > **Note**: `id: 'footnote-label'` is always added, because footnote\n * > calls use it with `aria-describedby` to provide an accessible label.\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n * HTML tag name to use for the footnote label element (default: `'h2'`).\n *\n * Change it to match your document structure.\n *\n * This label is typically hidden visually (assuming a `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass different properties with the `footnoteLabelProperties` option.\n * @property {Handlers | null | undefined} [handlers]\n * Extra handlers for nodes (optional).\n * @property {Array | null | undefined} [passThrough]\n * List of custom mdast node types to pass through (keep) in hast (note that\n * the node itself is passed, but eventual children are transformed)\n * (optional).\n * @property {Handler | null | undefined} [unknownHandler]\n * Handler for all unknown nodes (optional).\n *\n * @typedef State\n * Info passed around.\n * @property {(node: MdastNodes) => Array} all\n * Transform the children of an mdast parent to hast.\n * @property {(from: MdastNodes, to: Type) => HastElement | Type} applyData\n * Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {Map} definitionById\n * Definitions by their identifier.\n * @property {Map} footnoteById\n * Footnote definitions by their identifier.\n * @property {Map} footnoteCounts\n * Counts for how often the same footnote was called.\n * @property {Array} footnoteOrder\n * Identifiers of order when footnote calls first appear in tree order.\n * @property {Handlers} handlers\n * Applied handlers.\n * @property {(node: MdastNodes, parent: MdastParents | undefined) => Array | HastElementContent | undefined} one\n * Transform an mdast node to hast.\n * @property {Options} options\n * Configuration.\n * @property {(from: MdastNodes, node: HastNodes) => undefined} patch\n * Copy a node’s positional info.\n * @property {(nodes: Array, loose?: boolean | undefined) => Array} wrap\n * Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {visit} from 'unist-util-visit'\nimport {position} from 'unist-util-position'\nimport {handlers as defaultHandlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n * mdast node to transform.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {State}\n * `state` function.\n */\nexport function createState(tree, options) {\n const settings = options || emptyOptions\n /** @type {Map} */\n const definitionById = new Map()\n /** @type {Map} */\n const footnoteById = new Map()\n /** @type {Map} */\n const footnoteCounts = new Map()\n /** @type {Handlers} */\n // @ts-expect-error: the root handler returns a root.\n // Hard to type.\n const handlers = {...defaultHandlers, ...settings.handlers}\n\n /** @type {State} */\n const state = {\n all,\n applyData,\n definitionById,\n footnoteById,\n footnoteCounts,\n footnoteOrder: [],\n handlers,\n one,\n options: settings,\n patch,\n wrap\n }\n\n visit(tree, function (node) {\n if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n const map = node.type === 'definition' ? definitionById : footnoteById\n const id = String(node.identifier).toUpperCase()\n\n // Mimick CM behavior of link definitions.\n // See: .\n if (!map.has(id)) {\n // @ts-expect-error: node type matches map.\n map.set(id, node)\n }\n }\n })\n\n return state\n\n /**\n * Transform an mdast node into a hast node.\n *\n * @param {MdastNodes} node\n * mdast node.\n * @param {MdastParents | undefined} [parent]\n * Parent of `node`.\n * @returns {Array | HastElementContent | undefined}\n * Resulting hast node.\n */\n function one(node, parent) {\n const type = node.type\n const handle = state.handlers[type]\n\n if (own.call(state.handlers, type) && handle) {\n return handle(state, node, parent)\n }\n\n if (state.options.passThrough && state.options.passThrough.includes(type)) {\n if ('children' in node) {\n const {children, ...shallow} = node\n const result = structuredClone(shallow)\n // @ts-expect-error: TS doesn’t understand…\n result.children = state.all(node)\n // @ts-expect-error: TS doesn’t understand…\n return result\n }\n\n // @ts-expect-error: it’s custom.\n return structuredClone(node)\n }\n\n const unknown = state.options.unknownHandler || defaultUnknownHandler\n\n return unknown(state, node, parent)\n }\n\n /**\n * Transform the children of an mdast node into hast nodes.\n *\n * @param {MdastNodes} parent\n * mdast node to compile\n * @returns {Array}\n * Resulting hast nodes.\n */\n function all(parent) {\n /** @type {Array} */\n const values = []\n\n if ('children' in parent) {\n const nodes = parent.children\n let index = -1\n while (++index < nodes.length) {\n const result = state.one(nodes[index], parent)\n\n // To do: see if we van clean this? Can we merge texts?\n if (result) {\n if (index && nodes[index - 1].type === 'break') {\n if (!Array.isArray(result) && result.type === 'text') {\n result.value = trimMarkdownSpaceStart(result.value)\n }\n\n if (!Array.isArray(result) && result.type === 'element') {\n const head = result.children[0]\n\n if (head && head.type === 'text') {\n head.value = trimMarkdownSpaceStart(head.value)\n }\n }\n }\n\n if (Array.isArray(result)) {\n values.push(...result)\n } else {\n values.push(result)\n }\n }\n }\n }\n\n return values\n }\n}\n\n/**\n * Copy a node’s positional info.\n *\n * @param {MdastNodes} from\n * mdast node to copy from.\n * @param {HastNodes} to\n * hast node to copy into.\n * @returns {undefined}\n * Nothing.\n */\nfunction patch(from, to) {\n if (from.position) to.position = position(from)\n}\n\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n * Node type.\n * @param {MdastNodes} from\n * mdast node to use data from.\n * @param {Type} to\n * hast node to change.\n * @returns {HastElement | Type}\n * Nothing.\n */\nfunction applyData(from, to) {\n /** @type {HastElement | Type} */\n let result = to\n\n // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n if (from && from.data) {\n const hName = from.data.hName\n const hChildren = from.data.hChildren\n const hProperties = from.data.hProperties\n\n if (typeof hName === 'string') {\n // Transforming the node resulted in an element with a different name\n // than wanted:\n if (result.type === 'element') {\n result.tagName = hName\n }\n // Transforming the node resulted in a non-element, which happens for\n // raw, text, and root nodes (unless custom handlers are passed).\n // The intent of `hName` is to create an element, but likely also to keep\n // the content around (otherwise: pass `hChildren`).\n else {\n /** @type {Array} */\n // @ts-expect-error: assume no doctypes in `root`.\n const children = 'children' in result ? result.children : [result]\n result = {type: 'element', tagName: hName, properties: {}, children}\n }\n }\n\n if (result.type === 'element' && hProperties) {\n Object.assign(result.properties, structuredClone(hProperties))\n }\n\n if (\n 'children' in result &&\n result.children &&\n hChildren !== null &&\n hChildren !== undefined\n ) {\n result.children = hChildren\n }\n }\n\n return result\n}\n\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n * Info passed around.\n * @param {MdastNodes} node\n * Unknown mdast node.\n * @returns {HastElement | HastText}\n * Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n const data = node.data || {}\n /** @type {HastElement | HastText} */\n const result =\n 'value' in node &&\n !(own.call(data, 'hProperties') || own.call(data, 'hChildren'))\n ? {type: 'text', value: node.value}\n : {\n type: 'element',\n tagName: 'div',\n properties: {},\n children: state.all(node)\n }\n\n state.patch(node, result)\n return state.applyData(node, result)\n}\n\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastRootContent} Type\n * Node type.\n * @param {Array} nodes\n * List of nodes to wrap.\n * @param {boolean | undefined} [loose=false]\n * Whether to add line endings at start and end (default: `false`).\n * @returns {Array}\n * Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n /** @type {Array} */\n const result = []\n let index = -1\n\n if (loose) {\n result.push({type: 'text', value: '\\n'})\n }\n\n while (++index < nodes.length) {\n if (index) result.push({type: 'text', value: '\\n'})\n result.push(nodes[index])\n }\n\n if (loose && nodes.length > 0) {\n result.push({type: 'text', value: '\\n'})\n }\n\n return result\n}\n\n/**\n * Trim spaces and tabs at the start of `value`.\n *\n * @param {string} value\n * Value to trim.\n * @returns {string}\n * Result.\n */\nfunction trimMarkdownSpaceStart(value) {\n let index = 0\n let code = value.charCodeAt(index)\n\n while (code === 9 || code === 32) {\n index++\n code = value.charCodeAt(index)\n }\n\n return value.slice(index)\n}\n","/**\n * @import {Nodes as HastNodes} from 'hast'\n * @import {Nodes as MdastNodes} from 'mdast'\n * @import {Options} from './state.js'\n */\n\nimport {ok as assert} from 'devlop'\nimport {footer} from './footer.js'\nimport {createState} from './state.js'\n\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don’t:\n *\n * * `hast-util-to-html` also has an option `allowDangerousHtml` which will\n * output the raw HTML.\n * This is typically discouraged as noted by the option name but is useful\n * if you completely trust authors\n * * `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n * into standard hast nodes (`element`, `text`, etc).\n * This is a heavy task as it needs a full HTML parser, but it is the only\n * way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n *

\n * \n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value` (and doesn’t have `data.hName`,\n * `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n * node\n * * otherwise, create a `
` element (which could be changed with\n * `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n * mdast tree.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {HastNodes}\n * hast tree.\n */\nexport function toHast(tree, options) {\n const state = createState(tree, options)\n const node = state.one(tree, undefined)\n const foot = footer(state)\n /** @type {HastNodes} */\n const result = Array.isArray(node)\n ? {type: 'root', children: node}\n : node || {type: 'root', children: []}\n\n if (foot) {\n // If there’s a footer, there were definitions, meaning block\n // content.\n // So `result` is a parent node.\n assert('children' in result)\n result.children.push({type: 'text', value: '\\n'}, foot)\n }\n\n return result\n}\n","/**\n * @import {Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {Options as ToHastOptions} from 'mdast-util-to-hast'\n * @import {Processor} from 'unified'\n * @import {VFile} from 'vfile'\n */\n\n/**\n * @typedef {Omit} Options\n *\n * @callback TransformBridge\n * Bridge-mode.\n *\n * Runs the destination with the new hast tree.\n * Discards result.\n * @param {MdastRoot} tree\n * Tree.\n * @param {VFile} file\n * File.\n * @returns {Promise}\n * Nothing.\n *\n * @callback TransformMutate\n * Mutate-mode.\n *\n * Further transformers run on the hast tree.\n * @param {MdastRoot} tree\n * Tree.\n * @param {VFile} file\n * File.\n * @returns {HastRoot}\n * Tree (hast).\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n/**\n * Turn markdown into HTML.\n *\n * ##### Notes\n *\n * ###### Signature\n *\n * * if a processor is given,\n * runs the (rehype) plugins used on it with a hast tree,\n * then discards the result (*bridge mode*)\n * * otherwise,\n * returns a hast tree,\n * the plugins used after `remarkRehype` are rehype plugins (*mutate mode*)\n *\n * > 👉 **Note**:\n * > It’s highly unlikely that you want to pass a `processor`.\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most plugins ignore `raw` nodes but two notable ones don’t:\n *\n * * `rehype-stringify` also has an option `allowDangerousHtml` which will\n * output the raw HTML.\n * This is typically discouraged as noted by the option name but is useful if\n * you completely trust authors\n * * `rehype-raw` can handle the raw embedded HTML strings by parsing them\n * into standard hast nodes (`element`, `text`, etc);\n * this is a heavy task as it needs a full HTML parser,\n * but it is the only way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark,\n * which we follow by default.\n * They are supported by GitHub,\n * so footnotes can be enabled in markdown with `remark-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes,\n * which is hidden for sighted users but shown to assistive technology.\n * When your page is not in English,\n * you must define translated values.\n *\n * Back references use ARIA attributes,\n * but the section label itself uses a heading that is hidden with an\n * `sr-only` class.\n * To show it to sighted users,\n * define different attributes in `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem,\n * as it links footnote calls to footnote definitions on the page through `id`\n * attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n *

\n * \n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * *Example: headings (DOM clobbering)* in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value`\n * (and doesn’t have `data.hName`, `data.hProperties`, or `data.hChildren`,\n * see later),\n * create a hast `text` node\n * * otherwise,\n * create a `
` element (which could be changed with `data.hName`),\n * with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @overload\n * @param {Processor} processor\n * @param {Readonly | null | undefined} [options]\n * @returns {TransformBridge}\n *\n * @overload\n * @param {Readonly | null | undefined} [options]\n * @returns {TransformMutate}\n *\n * @overload\n * @param {Readonly | Processor | null | undefined} [destination]\n * @param {Readonly | null | undefined} [options]\n * @returns {TransformBridge | TransformMutate}\n *\n * @param {Readonly | Processor | null | undefined} [destination]\n * Processor or configuration (optional).\n * @param {Readonly | null | undefined} [options]\n * When a processor was given,\n * configuration (optional).\n * @returns {TransformBridge | TransformMutate}\n * Transform.\n */\nexport default function remarkRehype(destination, options) {\n if (destination && 'run' in destination) {\n /**\n * @type {TransformBridge}\n */\n return async function (tree, file) {\n // Cast because root in -> root out.\n const hastTree = /** @type {HastRoot} */ (\n toHast(tree, {file, ...options})\n )\n await destination.run(hastTree, file)\n }\n }\n\n /**\n * @type {TransformMutate}\n */\n return function (tree, file) {\n // Cast because root in -> root out.\n // To do: in the future, disallow ` || options` fallback.\n // With `unified-engine`, `destination` can be `undefined` but\n // `options` will be the file set.\n // We should not pass that as `options`.\n return /** @type {HastRoot} */ (\n toHast(tree, {file, ...(destination || options)})\n )\n }\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n */\n\nimport {visit} from 'unist-util-visit'\n\n/**\n * Remove empty paragraphs in `tree`.\n *\n * @param {Nodes} tree\n * Tree to change.\n * @returns {undefined}\n * Nothing.\n */\nexport function squeezeParagraphs(tree) {\n visit(tree, function (node, index, parent) {\n if (\n index !== undefined &&\n parent &&\n node.type === 'paragraph' &&\n node.children.every(function (child) {\n return child.type === 'text' && /^\\s*$/.test(child.value)\n })\n ) {\n parent.children.splice(index, 1)\n return index\n }\n })\n}\n","/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').Root} Root\n */\n\nimport {squeezeParagraphs} from 'mdast-squeeze-paragraphs'\nimport {visit} from 'unist-util-visit'\n\n/**\n * Only keep links with the given protocols.\n *\n * @param {object} options Options\n * @param {string[]} options.except - Protocols to exclude. Defauls to `['http', 'https']`.\n * @returns\n * Transform.\n */\nexport default function remarkUnlinkProtocols(\n options = {except: ['http', 'https']}\n) {\n /**\n * Transform.\n *\n * @param {Root} tree\n * Tree.\n * @returns {undefined}\n * Nothing.\n */\n return function (tree) {\n /** @type {Map} */\n const definitions = new Map()\n\n // Find definitions to look up linkReferences.\n visit(tree, 'definition', function (node, index, parent) {\n definitions.set(node.identifier, node.url)\n if (parent && typeof index === 'number') {\n const url = node.url\n if (\n url &&\n url.includes(':') &&\n !options.except.some((proto) => url.startsWith(`${proto}:`))\n ) {\n parent.children.splice(index, 1)\n return index\n }\n }\n })\n\n visit(tree, function (node, index, parent) {\n if (\n parent &&\n typeof index === 'number' &&\n (node.type === 'link' || node.type === 'linkReference')\n ) {\n const url =\n node.type === 'link' ? node.url : definitions.get(node.identifier)\n if (\n url &&\n url.includes(':') &&\n !options.except.some((proto) => url.startsWith(`${proto}:`))\n ) {\n parent.children.splice(index, 1, ...node.children)\n return index\n }\n }\n })\n\n squeezeParagraphs(tree)\n }\n}\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n * Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n if (error) {\n throw error\n }\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array) => void} Callback\n * Callback.\n *\n * @typedef {(...input: Array) => any} Middleware\n * Ware.\n *\n * @typedef Pipeline\n * Pipeline.\n * @property {Run} run\n * Run the pipeline.\n * @property {Use} use\n * Add middleware.\n *\n * @typedef {(...input: Array) => void} Run\n * Call all middleware.\n *\n * Calls `done` on completion with either an error or the output of the\n * last middleware.\n *\n * > 👉 **Note**: as the length of input defines whether async functions get a\n * > `next` function,\n * > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n * Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n * Pipeline.\n */\nexport function trough() {\n /** @type {Array} */\n const fns = []\n /** @type {Pipeline} */\n const pipeline = {run, use}\n\n return pipeline\n\n /** @type {Run} */\n function run(...values) {\n let middlewareIndex = -1\n /** @type {Callback} */\n const callback = values.pop()\n\n if (typeof callback !== 'function') {\n throw new TypeError('Expected function as last argument, not ' + callback)\n }\n\n next(null, ...values)\n\n /**\n * Run the next `fn`, or we’re done.\n *\n * @param {Error | null | undefined} error\n * @param {Array} output\n */\n function next(error, ...output) {\n const fn = fns[++middlewareIndex]\n let index = -1\n\n if (error) {\n callback(error)\n return\n }\n\n // Copy non-nullish input into values.\n while (++index < values.length) {\n if (output[index] === null || output[index] === undefined) {\n output[index] = values[index]\n }\n }\n\n // Save the newly created `output` for the next call.\n values = output\n\n // Next or done.\n if (fn) {\n wrap(fn, next)(...output)\n } else {\n callback(null, ...output)\n }\n }\n }\n\n /** @type {Use} */\n function use(middelware) {\n if (typeof middelware !== 'function') {\n throw new TypeError(\n 'Expected `middelware` to be a function, not ' + middelware\n )\n }\n\n fns.push(middelware)\n return pipeline\n }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n * returns a promise that is rejected,\n * or calls the given `done` function with an error,\n * `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n * that value is the main output value\n * * if `middleware` calls `done`,\n * all non-nullish values except for the first one (the error) overwrite the\n * output values\n *\n * @param {Middleware} middleware\n * Function to wrap.\n * @param {Callback} callback\n * Callback called with the output of `middleware`.\n * @returns {Run}\n * Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n /** @type {boolean} */\n let called\n\n return wrapped\n\n /**\n * Call `middleware`.\n * @this {any}\n * @param {Array} parameters\n * @returns {void}\n */\n function wrapped(...parameters) {\n const fnExpectsCallback = middleware.length > parameters.length\n /** @type {any} */\n let result\n\n if (fnExpectsCallback) {\n parameters.push(done)\n }\n\n try {\n result = middleware.apply(this, parameters)\n } catch (error) {\n const exception = /** @type {Error} */ (error)\n\n // Well, this is quite the pickle.\n // `middleware` received a callback and called it synchronously, but that\n // threw an error.\n // The only thing left to do is to throw the thing instead.\n if (fnExpectsCallback && called) {\n throw exception\n }\n\n return done(exception)\n }\n\n if (!fnExpectsCallback) {\n if (result && result.then && typeof result.then === 'function') {\n result.then(then, done)\n } else if (result instanceof Error) {\n done(result)\n } else {\n then(result)\n }\n }\n }\n\n /**\n * Call `callback`, only once.\n *\n * @type {Callback}\n */\n function done(error, ...output) {\n if (!called) {\n called = true\n callback(error, ...output)\n }\n }\n\n /**\n * Call `done` with one value.\n *\n * @param {any} [value]\n */\n function then(value) {\n done(null, value)\n }\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef Options\n * Configuration.\n * @property {Array | null | undefined} [ancestors]\n * Stack of (inclusive) ancestor nodes surrounding the message (optional).\n * @property {Error | null | undefined} [cause]\n * Original error cause of the message (optional).\n * @property {Point | Position | null | undefined} [place]\n * Place of message (optional).\n * @property {string | null | undefined} [ruleId]\n * Category of message (optional, example: `'my-rule'`).\n * @property {string | null | undefined} [source]\n * Namespace of who sent the message (optional, example: `'my-package'`).\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n /**\n * Create a message for `reason`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {Options | null | undefined} [options]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns\n * Instance of `VFileMessage`.\n */\n // eslint-disable-next-line complexity\n constructor(causeOrReason, optionsOrParentOrPlace, origin) {\n super()\n\n if (typeof optionsOrParentOrPlace === 'string') {\n origin = optionsOrParentOrPlace\n optionsOrParentOrPlace = undefined\n }\n\n /** @type {string} */\n let reason = ''\n /** @type {Options} */\n let options = {}\n let legacyCause = false\n\n if (optionsOrParentOrPlace) {\n // Point.\n if (\n 'line' in optionsOrParentOrPlace &&\n 'column' in optionsOrParentOrPlace\n ) {\n options = {place: optionsOrParentOrPlace}\n }\n // Position.\n else if (\n 'start' in optionsOrParentOrPlace &&\n 'end' in optionsOrParentOrPlace\n ) {\n options = {place: optionsOrParentOrPlace}\n }\n // Node.\n else if ('type' in optionsOrParentOrPlace) {\n options = {\n ancestors: [optionsOrParentOrPlace],\n place: optionsOrParentOrPlace.position\n }\n }\n // Options.\n else {\n options = {...optionsOrParentOrPlace}\n }\n }\n\n if (typeof causeOrReason === 'string') {\n reason = causeOrReason\n }\n // Error.\n else if (!options.cause && causeOrReason) {\n legacyCause = true\n reason = causeOrReason.message\n options.cause = causeOrReason\n }\n\n if (!options.ruleId && !options.source && typeof origin === 'string') {\n const index = origin.indexOf(':')\n\n if (index === -1) {\n options.ruleId = origin\n } else {\n options.source = origin.slice(0, index)\n options.ruleId = origin.slice(index + 1)\n }\n }\n\n if (!options.place && options.ancestors && options.ancestors) {\n const parent = options.ancestors[options.ancestors.length - 1]\n\n if (parent) {\n options.place = parent.position\n }\n }\n\n const start =\n options.place && 'start' in options.place\n ? options.place.start\n : options.place\n\n /**\n * Stack of ancestor nodes surrounding the message.\n *\n * @type {Array | undefined}\n */\n this.ancestors = options.ancestors || undefined\n\n /**\n * Original error cause of the message.\n *\n * @type {Error | undefined}\n */\n this.cause = options.cause || undefined\n\n /**\n * Starting column of message.\n *\n * @type {number | undefined}\n */\n this.column = start ? start.column : undefined\n\n /**\n * State of problem.\n *\n * * `true` — error, file not usable\n * * `false` — warning, change may be needed\n * * `undefined` — change likely not needed\n *\n * @type {boolean | null | undefined}\n */\n this.fatal = undefined\n\n /**\n * Path of a file (used throughout the `VFile` ecosystem).\n *\n * @type {string | undefined}\n */\n this.file = ''\n\n // Field from `Error`.\n /**\n * Reason for message.\n *\n * @type {string}\n */\n this.message = reason\n\n /**\n * Starting line of error.\n *\n * @type {number | undefined}\n */\n this.line = start ? start.line : undefined\n\n // Field from `Error`.\n /**\n * Serialized positional info of message.\n *\n * On normal errors, this would be something like `ParseError`, buit in\n * `VFile` messages we use this space to show where an error happened.\n */\n this.name = stringifyPosition(options.place) || '1:1'\n\n /**\n * Place of message.\n *\n * @type {Point | Position | undefined}\n */\n this.place = options.place || undefined\n\n /**\n * Reason for message, should use markdown.\n *\n * @type {string}\n */\n this.reason = this.message\n\n /**\n * Category of message (example: `'my-rule'`).\n *\n * @type {string | undefined}\n */\n this.ruleId = options.ruleId || undefined\n\n /**\n * Namespace of message (example: `'my-package'`).\n *\n * @type {string | undefined}\n */\n this.source = options.source || undefined\n\n // Field from `Error`.\n /**\n * Stack of message.\n *\n * This is used by normal errors to show where something happened in\n * programming code, irrelevant for `VFile` messages,\n *\n * @type {string}\n */\n this.stack =\n legacyCause && options.cause && typeof options.cause.stack === 'string'\n ? options.cause.stack\n : ''\n\n // The following fields are “well known”.\n // Not standard.\n // Feel free to add other non-standard fields to your messages.\n\n /**\n * Specify the source value that’s being reported, which is deemed\n * incorrect.\n *\n * @type {string | undefined}\n */\n this.actual = undefined\n\n /**\n * Suggest acceptable values that can be used instead of `actual`.\n *\n * @type {Array | undefined}\n */\n this.expected = undefined\n\n /**\n * Long form description of the message (you should use markdown).\n *\n * @type {string | undefined}\n */\n this.note = undefined\n\n /**\n * Link to docs for the message.\n *\n * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n * > to `new URL(x)`.\n *\n * @type {string | undefined}\n */\n this.url = undefined\n }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.column = undefined\nVFileMessage.prototype.line = undefined\nVFileMessage.prototype.ancestors = undefined\nVFileMessage.prototype.cause = undefined\nVFileMessage.prototype.fatal = undefined\nVFileMessage.prototype.place = undefined\nVFileMessage.prototype.ruleId = undefined\nVFileMessage.prototype.source = undefined\n","// A derivative work based on:\n// .\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// .\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const minpath = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n * File path.\n * @param {string | null | undefined} [extname]\n * Extension to strip.\n * @returns {string}\n * Stem or basename.\n */\nfunction basename(path, extname) {\n if (extname !== undefined && typeof extname !== 'string') {\n throw new TypeError('\"ext\" argument must be a string')\n }\n\n assertPath(path)\n let start = 0\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let seenNonSlash\n\n if (\n extname === undefined ||\n extname.length === 0 ||\n extname.length > path.length\n ) {\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // path component.\n seenNonSlash = true\n end = index + 1\n }\n }\n\n return end < 0 ? '' : path.slice(start, end)\n }\n\n if (extname === path) {\n return ''\n }\n\n let firstNonSlashEnd = -1\n let extnameIndex = extname.length - 1\n\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else {\n if (firstNonSlashEnd < 0) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching.\n seenNonSlash = true\n firstNonSlashEnd = index + 1\n }\n\n if (extnameIndex > -1) {\n // Try to match the explicit extension.\n if (path.codePointAt(index) === extname.codePointAt(extnameIndex--)) {\n if (extnameIndex < 0) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = index\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extnameIndex = -1\n end = firstNonSlashEnd\n }\n }\n }\n }\n\n if (start === end) {\n end = firstNonSlashEnd\n } else if (end < 0) {\n end = path.length\n }\n\n return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\nfunction dirname(path) {\n assertPath(path)\n\n if (path.length === 0) {\n return '.'\n }\n\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n // Prefix `--` is important to not run on `0`.\n while (--index) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n if (unmatchedSlash) {\n end = index\n break\n }\n } else if (!unmatchedSlash) {\n // We saw the first non-path separator\n unmatchedSlash = true\n }\n }\n\n return end < 0\n ? path.codePointAt(0) === 47 /* `/` */\n ? '/'\n : '.'\n : end === 1 && path.codePointAt(0) === 47 /* `/` */\n ? '//'\n : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * Extname.\n */\nfunction extname(path) {\n assertPath(path)\n\n let index = path.length\n\n let end = -1\n let startPart = 0\n let startDot = -1\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find.\n let preDotState = 0\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n while (index--) {\n const code = path.codePointAt(index)\n\n if (code === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (unmatchedSlash) {\n startPart = index + 1\n break\n }\n\n continue\n }\n\n if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // extension.\n unmatchedSlash = true\n end = index + 1\n }\n\n if (code === 46 /* `.` */) {\n // If this is our first dot, mark it as the start of our extension.\n if (startDot < 0) {\n startDot = index\n } else if (preDotState !== 1) {\n preDotState = 1\n }\n } else if (startDot > -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension.\n preDotState = -1\n }\n }\n\n if (\n startDot < 0 ||\n end < 0 ||\n // We saw a non-dot character immediately before the dot.\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly `..`.\n (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n ) {\n return ''\n }\n\n return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array} segments\n * Path segments.\n * @returns {string}\n * File path.\n */\nfunction join(...segments) {\n let index = -1\n /** @type {string | undefined} */\n let joined\n\n while (++index < segments.length) {\n assertPath(segments[index])\n\n if (segments[index]) {\n joined =\n joined === undefined ? segments[index] : joined + '/' + segments[index]\n }\n }\n\n return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n assertPath(path)\n\n const absolute = path.codePointAt(0) === 47 /* `/` */\n\n // Normalize the path according to POSIX rules.\n let value = normalizeString(path, !absolute)\n\n if (value.length === 0 && !absolute) {\n value = '.'\n }\n\n if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n value += '/'\n }\n\n return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n * File path.\n * @param {boolean} allowAboveRoot\n * Whether `..` can move above root.\n * @returns {string}\n * File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n let result = ''\n let lastSegmentLength = 0\n let lastSlash = -1\n let dots = 0\n let index = -1\n /** @type {number | undefined} */\n let code\n /** @type {number} */\n let lastSlashIndex\n\n while (++index <= path.length) {\n if (index < path.length) {\n code = path.codePointAt(index)\n } else if (code === 47 /* `/` */) {\n break\n } else {\n code = 47 /* `/` */\n }\n\n if (code === 47 /* `/` */) {\n if (lastSlash === index - 1 || dots === 1) {\n // Empty.\n } else if (lastSlash !== index - 1 && dots === 2) {\n if (\n result.length < 2 ||\n lastSegmentLength !== 2 ||\n result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n result.codePointAt(result.length - 2) !== 46 /* `.` */\n ) {\n if (result.length > 2) {\n lastSlashIndex = result.lastIndexOf('/')\n\n if (lastSlashIndex !== result.length - 1) {\n if (lastSlashIndex < 0) {\n result = ''\n lastSegmentLength = 0\n } else {\n result = result.slice(0, lastSlashIndex)\n lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n }\n\n lastSlash = index\n dots = 0\n continue\n }\n } else if (result.length > 0) {\n result = ''\n lastSegmentLength = 0\n lastSlash = index\n dots = 0\n continue\n }\n }\n\n if (allowAboveRoot) {\n result = result.length > 0 ? result + '/..' : '..'\n lastSegmentLength = 2\n }\n } else {\n if (result.length > 0) {\n result += '/' + path.slice(lastSlash + 1, index)\n } else {\n result = path.slice(lastSlash + 1, index)\n }\n\n lastSegmentLength = index - lastSlash - 1\n }\n\n lastSlash = index\n dots = 0\n } else if (code === 46 /* `.` */ && dots > -1) {\n dots++\n } else {\n dots = -1\n }\n }\n\n return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n * File path.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError(\n 'Path must be a string. Received ' + JSON.stringify(path)\n )\n }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// .\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const minproc = {cwd}\n\nfunction cwd() {\n return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n * File path or URL.\n * @returns {fileUrlOrPath is URL}\n * Whether it’s a URL.\n */\n// From: \nexport function isUrl(fileUrlOrPath) {\n return Boolean(\n fileUrlOrPath !== null &&\n typeof fileUrlOrPath === 'object' &&\n 'href' in fileUrlOrPath &&\n fileUrlOrPath.href &&\n 'protocol' in fileUrlOrPath &&\n fileUrlOrPath.protocol &&\n // @ts-expect-error: indexing is fine.\n fileUrlOrPath.auth === undefined\n )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: \n\n/**\n * @param {URL | string} path\n * File URL.\n * @returns {string}\n * File URL.\n */\nexport function urlToPath(path) {\n if (typeof path === 'string') {\n path = new URL(path)\n } else if (!isUrl(path)) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'The \"path\" argument must be of type string or an instance of URL. Received `' +\n path +\n '`'\n )\n error.code = 'ERR_INVALID_ARG_TYPE'\n throw error\n }\n\n if (path.protocol !== 'file:') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError('The URL must be of scheme file')\n error.code = 'ERR_INVALID_URL_SCHEME'\n throw error\n }\n\n return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n * URL.\n * @returns {string}\n * File path.\n */\nfunction getPathFromURLPosix(url) {\n if (url.hostname !== '') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL host must be \"localhost\" or empty on darwin'\n )\n error.code = 'ERR_INVALID_FILE_URL_HOST'\n throw error\n }\n\n const pathname = url.pathname\n let index = -1\n\n while (++index < pathname.length) {\n if (\n pathname.codePointAt(index) === 37 /* `%` */ &&\n pathname.codePointAt(index + 1) === 50 /* `2` */\n ) {\n const third = pathname.codePointAt(index + 2)\n if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL path must not include encoded / characters'\n )\n error.code = 'ERR_INVALID_FILE_URL_PATH'\n throw error\n }\n }\n }\n\n return decodeURIComponent(pathname)\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n * @import {Options as MessageOptions} from 'vfile-message'\n * @import {Compatible, Data, Map, Options, Value} from 'vfile'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {minpath} from '#minpath'\nimport {minproc} from '#minproc'\nimport {urlToPath, isUrl} from '#minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n 'history',\n 'path',\n 'basename',\n 'stem',\n 'extname',\n 'dirname'\n])\n\nexport class VFile {\n /**\n * Create a new virtual file.\n *\n * `options` is treated as:\n *\n * * `string` or `Uint8Array` — `{value: options}`\n * * `URL` — `{path: options}`\n * * `VFile` — shallow copies its data over to the new file\n * * `object` — all fields are shallow copied over to the new file\n *\n * Path related fields are set in the following order (least specific to\n * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n * `dirname`.\n *\n * You cannot set `dirname` or `extname` without setting either `history`,\n * `path`, `basename`, or `stem` too.\n *\n * @param {Compatible | null | undefined} [value]\n * File value.\n * @returns\n * New instance.\n */\n constructor(value) {\n /** @type {Options | VFile} */\n let options\n\n if (!value) {\n options = {}\n } else if (isUrl(value)) {\n options = {path: value}\n } else if (typeof value === 'string' || isUint8Array(value)) {\n options = {value}\n } else {\n options = value\n }\n\n /* eslint-disable no-unused-expressions */\n\n /**\n * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n *\n * @type {string}\n */\n // Prevent calling `cwd` (which could be expensive) if it’s not needed;\n // the empty string will be overridden in the next block.\n this.cwd = 'cwd' in options ? '' : minproc.cwd()\n\n /**\n * Place to store custom info (default: `{}`).\n *\n * It’s OK to store custom data directly on the file but moving it to\n * `data` is recommended.\n *\n * @type {Data}\n */\n this.data = {}\n\n /**\n * List of file paths the file moved between.\n *\n * The first is the original path and the last is the current path.\n *\n * @type {Array}\n */\n this.history = []\n\n /**\n * List of messages associated with the file.\n *\n * @type {Array}\n */\n this.messages = []\n\n /**\n * Raw value.\n *\n * @type {Value}\n */\n this.value\n\n // The below are non-standard, they are “well-known”.\n // As in, used in several tools.\n /**\n * Source map.\n *\n * This type is equivalent to the `RawSourceMap` type from the `source-map`\n * module.\n *\n * @type {Map | null | undefined}\n */\n this.map\n\n /**\n * Custom, non-string, compiled, representation.\n *\n * This is used by unified to store non-string results.\n * One example is when turning markdown into React nodes.\n *\n * @type {unknown}\n */\n this.result\n\n /**\n * Whether a file was saved to disk.\n *\n * This is used by vfile reporters.\n *\n * @type {boolean}\n */\n this.stored\n /* eslint-enable no-unused-expressions */\n\n // Set path related properties in the correct order.\n let index = -1\n\n while (++index < order.length) {\n const field = order[index]\n\n // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n // `vfile`s too.\n if (\n field in options &&\n options[field] !== undefined &&\n options[field] !== null\n ) {\n // @ts-expect-error: TS doesn’t understand basic reality.\n this[field] = field === 'history' ? [...options[field]] : options[field]\n }\n }\n\n /** @type {string} */\n let field\n\n // Set non-path related properties.\n for (field in options) {\n // @ts-expect-error: fine to set other things.\n if (!order.includes(field)) {\n // @ts-expect-error: fine to set other things.\n this[field] = options[field]\n }\n }\n }\n\n /**\n * Get the basename (including extname) (example: `'index.min.js'`).\n *\n * @returns {string | undefined}\n * Basename.\n */\n get basename() {\n return typeof this.path === 'string'\n ? minpath.basename(this.path)\n : undefined\n }\n\n /**\n * Set basename (including extname) (`'index.min.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} basename\n * Basename.\n * @returns {undefined}\n * Nothing.\n */\n set basename(basename) {\n assertNonEmpty(basename, 'basename')\n assertPart(basename, 'basename')\n this.path = minpath.join(this.dirname || '', basename)\n }\n\n /**\n * Get the parent path (example: `'~'`).\n *\n * @returns {string | undefined}\n * Dirname.\n */\n get dirname() {\n return typeof this.path === 'string'\n ? minpath.dirname(this.path)\n : undefined\n }\n\n /**\n * Set the parent path (example: `'~'`).\n *\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} dirname\n * Dirname.\n * @returns {undefined}\n * Nothing.\n */\n set dirname(dirname) {\n assertPath(this.basename, 'dirname')\n this.path = minpath.join(dirname || '', this.basename)\n }\n\n /**\n * Get the extname (including dot) (example: `'.js'`).\n *\n * @returns {string | undefined}\n * Extname.\n */\n get extname() {\n return typeof this.path === 'string'\n ? minpath.extname(this.path)\n : undefined\n }\n\n /**\n * Set the extname (including dot) (example: `'.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} extname\n * Extname.\n * @returns {undefined}\n * Nothing.\n */\n set extname(extname) {\n assertPart(extname, 'extname')\n assertPath(this.dirname, 'extname')\n\n if (extname) {\n if (extname.codePointAt(0) !== 46 /* `.` */) {\n throw new Error('`extname` must start with `.`')\n }\n\n if (extname.includes('.', 1)) {\n throw new Error('`extname` cannot contain multiple dots')\n }\n }\n\n this.path = minpath.join(this.dirname, this.stem + (extname || ''))\n }\n\n /**\n * Get the full path (example: `'~/index.min.js'`).\n *\n * @returns {string}\n * Path.\n */\n get path() {\n return this.history[this.history.length - 1]\n }\n\n /**\n * Set the full path (example: `'~/index.min.js'`).\n *\n * Cannot be nullified.\n * You can set a file URL (a `URL` object with a `file:` protocol) which will\n * be turned into a path with `url.fileURLToPath`.\n *\n * @param {URL | string} path\n * Path.\n * @returns {undefined}\n * Nothing.\n */\n set path(path) {\n if (isUrl(path)) {\n path = urlToPath(path)\n }\n\n assertNonEmpty(path, 'path')\n\n if (this.path !== path) {\n this.history.push(path)\n }\n }\n\n /**\n * Get the stem (basename w/o extname) (example: `'index.min'`).\n *\n * @returns {string | undefined}\n * Stem.\n */\n get stem() {\n return typeof this.path === 'string'\n ? minpath.basename(this.path, this.extname)\n : undefined\n }\n\n /**\n * Set the stem (basename w/o extname) (example: `'index.min'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} stem\n * Stem.\n * @returns {undefined}\n * Nothing.\n */\n set stem(stem) {\n assertNonEmpty(stem, 'stem')\n assertPart(stem, 'stem')\n this.path = minpath.join(this.dirname || '', stem + (this.extname || ''))\n }\n\n // Normal prototypal methods.\n /**\n * Create a fatal message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `true` (error; file not usable)\n * and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {never}\n * Never.\n * @throws {VFileMessage}\n * Message.\n */\n fail(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = true\n\n throw message\n }\n\n /**\n * Create an info message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `undefined` (info; change\n * likely not needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n info(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = undefined\n\n return message\n }\n\n /**\n * Create a message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `false` (warning; change may be\n * needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n message(causeOrReason, optionsOrParentOrPlace, origin) {\n const message = new VFileMessage(\n // @ts-expect-error: the overloads are fine.\n causeOrReason,\n optionsOrParentOrPlace,\n origin\n )\n\n if (this.path) {\n message.name = this.path + ':' + message.name\n message.file = this.path\n }\n\n message.fatal = false\n\n this.messages.push(message)\n\n return message\n }\n\n /**\n * Serialize the file.\n *\n * > **Note**: which encodings are supported depends on the engine.\n * > For info on Node.js, see:\n * > .\n *\n * @param {string | null | undefined} [encoding='utf8']\n * Character encoding to understand `value` as when it’s a `Uint8Array`\n * (default: `'utf-8'`).\n * @returns {string}\n * Serialized file.\n */\n toString(encoding) {\n if (this.value === undefined) {\n return ''\n }\n\n if (typeof this.value === 'string') {\n return this.value\n }\n\n const decoder = new TextDecoder(encoding || undefined)\n return decoder.decode(this.value)\n }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n * File path part.\n * @param {string} name\n * Part name.\n * @returns {undefined}\n * Nothing.\n */\nfunction assertPart(part, name) {\n if (part && part.includes(minpath.sep)) {\n throw new Error(\n '`' + name + '` cannot be a path: did not expect `' + minpath.sep + '`'\n )\n }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n * Thing.\n * @param {string} name\n * Part name.\n * @returns {asserts part is string}\n * Nothing.\n */\nfunction assertNonEmpty(part, name) {\n if (!part) {\n throw new Error('`' + name + '` cannot be empty')\n }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n * Path.\n * @param {string} name\n * Dependency name.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path, name) {\n if (!path) {\n throw new Error('Setting `' + name + '` requires `path` to be set too')\n }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","export const CallableInstance =\n /**\n * @type {new , Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n */\n (\n /** @type {unknown} */\n (\n /**\n * @this {Function}\n * @param {string | symbol} property\n * @returns {(...parameters: Array) => unknown}\n */\n function (property) {\n const self = this\n const constr = self.constructor\n const proto = /** @type {Record} */ (\n // Prototypes do exist.\n // type-coverage:ignore-next-line\n constr.prototype\n )\n const value = proto[property]\n /** @type {(...parameters: Array) => unknown} */\n const apply = function () {\n return value.apply(apply, arguments)\n }\n\n Object.setPrototypeOf(apply, proto)\n\n // Not needed for us in `unified`: we only call this on the `copy`\n // function,\n // and we don't need to add its fields (`length`, `name`)\n // over.\n // See also: GH-246.\n // const names = Object.getOwnPropertyNames(value)\n //\n // for (const p of names) {\n // const descriptor = Object.getOwnPropertyDescriptor(value, p)\n // if (descriptor) Object.defineProperty(apply, p, descriptor)\n // }\n\n return apply\n }\n )\n )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n * Acceptable results from compilers.\n *\n * To register custom results, add them to\n * {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n * The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n * A **compiler** handles the compiling of a syntax tree to something else\n * (in most cases, text) (TypeScript type).\n *\n * It is used in the stringify phase and called with a {@linkcode Node}\n * and {@linkcode VFile} representation of the document to compile.\n * It should return the textual representation of the given tree (typically\n * `string`).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n * Tree to compile.\n * @param {VFile} file\n * File associated with `tree`.\n * @returns {Result}\n * New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n * something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the parser yields (default: `Node`)\n * @callback Parser\n * A **parser** handles the parsing of text to a syntax tree.\n *\n * It is used in the parse phase and is called with a `string` and\n * {@linkcode VFile} of the document to parse.\n * It must return the syntax tree representation of the given file\n * ({@linkcode Node}).\n * @param {string} document\n * Document to parse.\n * @param {VFile} file\n * File associated with `document`.\n * @returns {Tree}\n * Node representing the given file.\n */\n\n/**\n * @typedef {(\n * Plugin, any, any> |\n * PluginTuple, any, any> |\n * Preset\n * )} Pluggable\n * Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array} PluggableList\n * List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n// .\n/**\n * @template {Array} [PluginParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n * Value that is expected as input (default: `Node`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=Input]\n * Value that is yielded as output (default: `Input`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * (this: Processor, ...parameters: PluginParameters) =>\n * Input extends string ? // Parser.\n * Output extends Node | undefined ? undefined | void : never :\n * Output extends CompileResults ? // Compiler.\n * Input extends Node | undefined ? undefined | void : never :\n * Transformer<\n * Input extends Node ? Input : Node,\n * Output extends Node ? Output : Node\n * > | undefined | void\n * )} Plugin\n * Single plugin.\n *\n * Plugins configure the processors they are applied on in the following\n * ways:\n *\n * * they change the processor, such as the parser, the compiler, or by\n * configuring data\n * * they specify how to handle trees and files\n *\n * In practice, they are functions that can receive options and configure the\n * processor (`this`).\n *\n * > **Note**: plugins are called when the processor is *frozen*, not when\n * > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array} [TupleParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n * Value that is expected as input (optional).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=undefined] (optional).\n * Value that is yielded as output.\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * [\n * plugin: Plugin,\n * ...parameters: TupleParameters\n * ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n * Sharable configuration.\n *\n * They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n * List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n * Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n * The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n * Callback called when the process is done.\n *\n * Called with either an error or a result.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {File | undefined} [file]\n * Processed file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n * Callback called when transformers are done.\n *\n * Called with either an error or results.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {Tree | undefined} [tree]\n * Transformed tree (optional).\n * @param {VFile | undefined} [file]\n * File (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n * Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n * Callback passed to transforms.\n *\n * If the signature of a `transformer` accepts a third argument, the\n * transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n * Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n * New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n * New, changed, file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n * Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n * Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n * Transformers handle syntax trees and files.\n *\n * They are functions that are called each time a syntax tree and file are\n * passed through the run phase.\n * When an error occurs in them (either because it’s thrown, returned,\n * rejected, or passed to `next`), the process stops.\n *\n * The run phase is handled by [`trough`][trough], see its documentation for\n * the exact semantics of these functions.\n *\n * > **Note**: you should likely ignore `next`: don’t accept it.\n * > it supports callback-style async work.\n * > But promises are likely easier to reason about.\n *\n * [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n * Tree to handle.\n * @param {VFile} file\n * File to handle.\n * @param {TransformCallback} next\n * Callback.\n * @returns {(\n * Promise |\n * Promise | // For some reason this is needed separately.\n * Output |\n * Error |\n * undefined |\n * void\n * )}\n * If you accept `next`, nothing.\n * Otherwise:\n *\n * * `Error` — fatal error to stop the process\n * * `Promise` or `undefined` — the next transformer keeps using\n * same tree\n * * `Promise` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n * Output of `parse`.\n * @template {Node | undefined} HeadTree\n * Input for `run`.\n * @template {Node | undefined} TailTree\n * Output for `run`.\n * @template {Node | undefined} CompileTree\n * Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n * Output of `stringify`.\n * @template {Node | string | undefined} Input\n * Input of plugin.\n * @template Output\n * Output of plugin (optional).\n * @typedef {(\n * Input extends string\n * ? Output extends Node | undefined\n * ? // Parser.\n * Processor<\n * Output extends undefined ? ParseTree : Output,\n * HeadTree,\n * TailTree,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor\n * : Output extends CompileResults\n * ? Input extends Node | undefined\n * ? // Compiler.\n * Processor<\n * ParseTree,\n * HeadTree,\n * TailTree,\n * Input extends undefined ? CompileTree : Input,\n * Output extends undefined ? CompileResult : Output\n * >\n * : // Unknown.\n * Processor\n * : Input extends Node | undefined\n * ? Output extends Node | undefined\n * ? // Transform.\n * Processor<\n * ParseTree,\n * HeadTree extends undefined ? Input : HeadTree,\n * Output extends undefined ? TailTree : Output,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor\n * : // Unknown.\n * Processor\n * )} UsePlugin\n * Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n * Node type that the transformer yields.\n * @typedef {(\n * Result extends Value | undefined ?\n * VFile :\n * VFile & {result: Result}\n * )} VFileWithOutput\n * Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n * If a result that is not acceptable on a `VFile` is used, that will\n * be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n * Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n * Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n * Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n * Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n * Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor>}\n */\nexport class Processor extends CallableInstance {\n /**\n * Create a processor.\n */\n constructor() {\n // If `Processor()` is called (w/o new), `copy` is called instead.\n super('copy')\n\n /**\n * Compiler to use (deprecated).\n *\n * @deprecated\n * Use `compiler` instead.\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.Compiler = undefined\n\n /**\n * Parser to use (deprecated).\n *\n * @deprecated\n * Use `parser` instead.\n * @type {(\n * Parser |\n * undefined\n * )}\n */\n this.Parser = undefined\n\n // Note: the following fields are considered private.\n // However, they are needed for tests, and TSC generates an untyped\n // `private freezeIndex` field for, which trips `type-coverage` up.\n // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n /**\n * Internal list of configured plugins.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Array>>}\n */\n this.attachers = []\n\n /**\n * Compiler to use.\n *\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.compiler = undefined\n\n /**\n * Internal state to track where we are while freezing.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {number}\n */\n this.freezeIndex = -1\n\n /**\n * Internal state to track whether we’re frozen.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {boolean | undefined}\n */\n this.frozen = undefined\n\n /**\n * Internal state.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Data}\n */\n this.namespace = {}\n\n /**\n * Parser to use.\n *\n * @type {(\n * Parser |\n * undefined\n * )}\n */\n this.parser = undefined\n\n /**\n * Internal list of configured transformers.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Pipeline}\n */\n this.transformers = trough()\n }\n\n /**\n * Copy a processor.\n *\n * @deprecated\n * This is a private internal method and should not be used.\n * @returns {Processor}\n * New *unfrozen* processor ({@linkcode Processor}) that is\n * configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\n copy() {\n // Cast as the type parameters will be the same after attaching.\n const destination =\n /** @type {Processor} */ (\n new Processor()\n )\n let index = -1\n\n while (++index < this.attachers.length) {\n const attacher = this.attachers[index]\n destination.use(...attacher)\n }\n\n destination.data(extend(true, {}, this.namespace))\n\n return destination\n }\n\n /**\n * Configure the processor with info available to all plugins.\n * Information is stored in an object.\n *\n * Typically, options can be given to a specific plugin, but sometimes it\n * makes sense to have information shared with several plugins.\n * For example, a list of HTML elements that are self-closing, which is\n * needed during all phases.\n *\n * > **Note**: setting information cannot occur on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * > **Note**: to register custom data in TypeScript, augment the\n * > {@linkcode Data} interface.\n *\n * @example\n * This example show how to get and set info:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * const processor = unified().data('alpha', 'bravo')\n *\n * processor.data('alpha') // => 'bravo'\n *\n * processor.data() // => {alpha: 'bravo'}\n *\n * processor.data({charlie: 'delta'})\n *\n * processor.data() // => {charlie: 'delta'}\n * ```\n *\n * @template {keyof Data} Key\n *\n * @overload\n * @returns {Data}\n *\n * @overload\n * @param {Data} dataset\n * @returns {Processor}\n *\n * @overload\n * @param {Key} key\n * @returns {Data[Key]}\n *\n * @overload\n * @param {Key} key\n * @param {Data[Key]} value\n * @returns {Processor}\n *\n * @param {Data | Key} [key]\n * Key to get or set, or entire dataset to set, or nothing to get the\n * entire dataset (optional).\n * @param {Data[Key]} [value]\n * Value to set (optional).\n * @returns {unknown}\n * The current processor when setting, the value at `key` when getting, or\n * the entire dataset when getting without key.\n */\n data(key, value) {\n if (typeof key === 'string') {\n // Set `key`.\n if (arguments.length === 2) {\n assertUnfrozen('data', this.frozen)\n this.namespace[key] = value\n return this\n }\n\n // Get `key`.\n return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n }\n\n // Set space.\n if (key) {\n assertUnfrozen('data', this.frozen)\n this.namespace = key\n return this\n }\n\n // Get space.\n return this.namespace\n }\n\n /**\n * Freeze a processor.\n *\n * Frozen processors are meant to be extended and not to be configured\n * directly.\n *\n * When a processor is frozen it cannot be unfrozen.\n * New processors working the same way can be created by calling the\n * processor.\n *\n * It’s possible to freeze processors explicitly by calling `.freeze()`.\n * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n * `.stringify()`, `.process()`, or `.processSync()` are called.\n *\n * @returns {Processor}\n * The current processor.\n */\n freeze() {\n if (this.frozen) {\n return this\n }\n\n // Cast so that we can type plugins easier.\n // Plugins are supposed to be usable on different processors, not just on\n // this exact processor.\n const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n while (++this.freezeIndex < this.attachers.length) {\n const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n if (options[0] === false) {\n continue\n }\n\n if (options[0] === true) {\n options[0] = undefined\n }\n\n const transformer = attacher.call(self, ...options)\n\n if (typeof transformer === 'function') {\n this.transformers.use(transformer)\n }\n }\n\n this.frozen = true\n this.freezeIndex = Number.POSITIVE_INFINITY\n\n return this\n }\n\n /**\n * Parse text to a syntax tree.\n *\n * > **Note**: `parse` freezes the processor if not already *frozen*.\n *\n * > **Note**: `parse` performs the parse phase, not the run phase or other\n * > phases.\n *\n * @param {Compatible | undefined} [file]\n * file to parse (optional); typically `string` or `VFile`; any value\n * accepted as `x` in `new VFile(x)`.\n * @returns {ParseTree extends undefined ? Node : ParseTree}\n * Syntax tree representing `file`.\n */\n parse(file) {\n this.freeze()\n const realFile = vfile(file)\n const parser = this.parser || this.Parser\n assertParser('parse', parser)\n return parser(String(realFile), realFile)\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * > **Note**: `process` freezes the processor if not already *frozen*.\n *\n * > **Note**: `process` performs the parse, run, and stringify phases.\n *\n * @overload\n * @param {Compatible | undefined} file\n * @param {ProcessCallback>} done\n * @returns {undefined}\n *\n * @overload\n * @param {Compatible | undefined} [file]\n * @returns {Promise>}\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`]; any value accepted as\n * `x` in `new VFile(x)`.\n * @param {ProcessCallback> | undefined} [done]\n * Callback (optional).\n * @returns {Promise | undefined}\n * Nothing if `done` is given.\n * Otherwise a promise, rejected with a fatal error or resolved with the\n * processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n process(file, done) {\n const self = this\n\n this.freeze()\n assertParser('process', this.parser || this.Parser)\n assertCompiler('process', this.compiler || this.Compiler)\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {((file: VFileWithOutput) => undefined | void) | undefined} resolve\n * @param {(error: Error | undefined) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n const realFile = vfile(file)\n // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n // input of the first transform).\n const parseTree =\n /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n /** @type {unknown} */ (self.parse(realFile))\n )\n\n self.run(parseTree, realFile, function (error, tree, file) {\n if (error || !tree || !file) {\n return realDone(error)\n }\n\n // Assume `TailTree` (the output of the last transform) matches\n // `CompileTree` (the input of the compiler).\n const compileTree =\n /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n /** @type {unknown} */ (tree)\n )\n\n const compileResult = self.stringify(compileTree, file)\n\n if (looksLikeAValue(compileResult)) {\n file.value = compileResult\n } else {\n file.result = compileResult\n }\n\n realDone(error, /** @type {VFileWithOutput} */ (file))\n })\n\n /**\n * @param {Error | undefined} error\n * @param {VFileWithOutput | undefined} [file]\n * @returns {undefined}\n */\n function realDone(error, file) {\n if (error || !file) {\n reject(error)\n } else if (resolve) {\n resolve(file)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, file)\n }\n }\n }\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `processSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `processSync` performs the parse, run, and stringify phases.\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`; any value accepted as\n * `x` in `new VFile(x)`.\n * @returns {VFileWithOutput}\n * The processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n processSync(file) {\n /** @type {boolean} */\n let complete = false\n /** @type {VFileWithOutput | undefined} */\n let result\n\n this.freeze()\n assertParser('processSync', this.parser || this.Parser)\n assertCompiler('processSync', this.compiler || this.Compiler)\n\n this.process(file, realDone)\n assertDone('processSync', 'process', complete)\n assert(result, 'we either bailed on an error or have a tree')\n\n return result\n\n /**\n * @type {ProcessCallback>}\n */\n function realDone(error, file) {\n complete = true\n bail(error)\n result = file\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * > **Note**: `run` freezes the processor if not already *frozen*.\n *\n * > **Note**: `run` performs the run phase, not other phases.\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {RunCallback} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} file\n * @param {RunCallback} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} [file]\n * @returns {Promise}\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {(\n * RunCallback |\n * Compatible\n * )} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @param {RunCallback} [done]\n * Callback (optional).\n * @returns {Promise | undefined}\n * Nothing if `done` is given.\n * Otherwise, a promise rejected with a fatal error or resolved with the\n * transformed tree.\n */\n run(tree, file, done) {\n assertNode(tree)\n this.freeze()\n\n const transformers = this.transformers\n\n if (!done && typeof file === 'function') {\n done = file\n file = undefined\n }\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {(\n * ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n * undefined\n * )} resolve\n * @param {(error: Error) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n assert(\n typeof file !== 'function',\n '`file` can’t be a `done` anymore, we checked'\n )\n const realFile = vfile(file)\n transformers.run(tree, realFile, realDone)\n\n /**\n * @param {Error | undefined} error\n * @param {Node} outputTree\n * @param {VFile} file\n * @returns {undefined}\n */\n function realDone(error, outputTree, file) {\n const resultingTree =\n /** @type {TailTree extends undefined ? Node : TailTree} */ (\n outputTree || tree\n )\n\n if (error) {\n reject(error)\n } else if (resolve) {\n resolve(resultingTree)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, resultingTree, file)\n }\n }\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `runSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `runSync` performs the run phase, not other phases.\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {TailTree extends undefined ? Node : TailTree}\n * Transformed tree.\n */\n runSync(tree, file) {\n /** @type {boolean} */\n let complete = false\n /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n let result\n\n this.run(tree, file, realDone)\n\n assertDone('runSync', 'run', complete)\n assert(result, 'we either bailed on an error or have a tree')\n return result\n\n /**\n * @type {RunCallback}\n */\n function realDone(error, tree) {\n bail(error)\n result = tree\n complete = true\n }\n }\n\n /**\n * Compile a syntax tree.\n *\n * > **Note**: `stringify` freezes the processor if not already *frozen*.\n *\n * > **Note**: `stringify` performs the stringify phase, not the run phase\n * > or other phases.\n *\n * @param {CompileTree extends undefined ? Node : CompileTree} tree\n * Tree to compile.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {CompileResult extends undefined ? Value : CompileResult}\n * Textual representation of the tree (see note).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n stringify(tree, file) {\n this.freeze()\n const realFile = vfile(file)\n const compiler = this.compiler || this.Compiler\n assertCompiler('stringify', compiler)\n assertNode(tree)\n\n return compiler(tree, realFile)\n }\n\n /**\n * Configure the processor to use a plugin, a list of usable values, or a\n * preset.\n *\n * If the processor is already using a plugin, the previous plugin\n * configuration is changed based on the options that are passed in.\n * In other words, the plugin is not added a second time.\n *\n * > **Note**: `use` cannot be called on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * @example\n * There are many ways to pass plugins to `.use()`.\n * This example gives an overview:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * unified()\n * // Plugin with options:\n * .use(pluginA, {x: true, y: true})\n * // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n * .use(pluginA, {y: false, z: true})\n * // Plugins:\n * .use([pluginB, pluginC])\n * // Two plugins, the second with options:\n * .use([pluginD, [pluginE, {}]])\n * // Preset with plugins and settings:\n * .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n * // Settings only:\n * .use({settings: {position: false}})\n * ```\n *\n * @template {Array} [Parameters=[]]\n * @template {Node | string | undefined} [Input=undefined]\n * @template [Output=Input]\n *\n * @overload\n * @param {Preset | null | undefined} [preset]\n * @returns {Processor}\n *\n * @overload\n * @param {PluggableList} list\n * @returns {Processor}\n *\n * @overload\n * @param {Plugin} plugin\n * @param {...(Parameters | [boolean])} parameters\n * @returns {UsePlugin}\n *\n * @param {PluggableList | Plugin | Preset | null | undefined} value\n * Usable value.\n * @param {...unknown} parameters\n * Parameters, when a plugin is given as a usable value.\n * @returns {Processor}\n * Current processor.\n */\n use(value, ...parameters) {\n const attachers = this.attachers\n const namespace = this.namespace\n\n assertUnfrozen('use', this.frozen)\n\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'function') {\n addPlugin(value, parameters)\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n addList(value)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n\n return this\n\n /**\n * @param {Pluggable} value\n * @returns {undefined}\n */\n function add(value) {\n if (typeof value === 'function') {\n addPlugin(value, [])\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n const [plugin, ...parameters] =\n /** @type {PluginTuple>} */ (value)\n addPlugin(plugin, parameters)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n }\n\n /**\n * @param {Preset} result\n * @returns {undefined}\n */\n function addPreset(result) {\n if (!('plugins' in result) && !('settings' in result)) {\n throw new Error(\n 'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n )\n }\n\n addList(result.plugins)\n\n if (result.settings) {\n namespace.settings = extend(true, namespace.settings, result.settings)\n }\n }\n\n /**\n * @param {PluggableList | null | undefined} plugins\n * @returns {undefined}\n */\n function addList(plugins) {\n let index = -1\n\n if (plugins === null || plugins === undefined) {\n // Empty.\n } else if (Array.isArray(plugins)) {\n while (++index < plugins.length) {\n const thing = plugins[index]\n add(thing)\n }\n } else {\n throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n }\n }\n\n /**\n * @param {Plugin} plugin\n * @param {Array} parameters\n * @returns {undefined}\n */\n function addPlugin(plugin, parameters) {\n let index = -1\n let entryIndex = -1\n\n while (++index < attachers.length) {\n if (attachers[index][0] === plugin) {\n entryIndex = index\n break\n }\n }\n\n if (entryIndex === -1) {\n attachers.push([plugin, ...parameters])\n }\n // Only set if there was at least a `primary` value, otherwise we’d change\n // `arguments.length`.\n else if (parameters.length > 0) {\n let [primary, ...rest] = parameters\n const currentPrimary = attachers[entryIndex][1]\n if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n primary = extend(true, currentPrimary, primary)\n }\n\n attachers[entryIndex] = [plugin, primary, ...rest]\n }\n }\n }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n * This example shows how a new processor can be created (from `remark`) and linked\n * to **stdin**(4) and **stdout**(4).\n *\n * ```js\n * import process from 'node:process'\n * import concatStream from 'concat-stream'\n * import {remark} from 'remark'\n *\n * process.stdin.pipe(\n * concatStream(function (buf) {\n * process.stdout.write(String(remark().processSync(buf)))\n * })\n * )\n * ```\n *\n * @returns\n * New *unfrozen* processor (`processor`).\n *\n * This processor is configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `parser`')\n }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `compiler`')\n }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n if (frozen) {\n throw new Error(\n 'Cannot call `' +\n name +\n '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n )\n }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n // type-coverage:ignore-next-line\n if (!isPlainObj(node) || typeof node.type !== 'string') {\n throw new TypeError('Expected node, got `' + node + '`')\n // Fine.\n }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n if (!complete) {\n throw new Error(\n '`' + name + '` finished async. Use `' + asyncName + '` instead'\n )\n }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'message' in value &&\n 'messages' in value\n )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","/*!\n * vue-router v3.6.5\n * (c) 2022 Evan You\n * @license MIT\n */\n/* */\n\nfunction assert (condition, message) {\n if (!condition) {\n throw new Error((\"[vue-router] \" + message))\n }\n}\n\nfunction warn (condition, message) {\n if (!condition) {\n typeof console !== 'undefined' && console.warn((\"[vue-router] \" + message));\n }\n}\n\nfunction extend (a, b) {\n for (var key in b) {\n a[key] = b[key];\n }\n return a\n}\n\n/* */\n\nvar encodeReserveRE = /[!'()*]/g;\nvar encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };\nvar commaRE = /%2C/g;\n\n// fixed encodeURIComponent which is more conformant to RFC3986:\n// - escapes [!'()*]\n// - preserve commas\nvar encode = function (str) { return encodeURIComponent(str)\n .replace(encodeReserveRE, encodeReserveReplacer)\n .replace(commaRE, ','); };\n\nfunction decode (str) {\n try {\n return decodeURIComponent(str)\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"Error decoding \\\"\" + str + \"\\\". Leaving it intact.\"));\n }\n }\n return str\n}\n\nfunction resolveQuery (\n query,\n extraQuery,\n _parseQuery\n) {\n if ( extraQuery === void 0 ) extraQuery = {};\n\n var parse = _parseQuery || parseQuery;\n var parsedQuery;\n try {\n parsedQuery = parse(query || '');\n } catch (e) {\n process.env.NODE_ENV !== 'production' && warn(false, e.message);\n parsedQuery = {};\n }\n for (var key in extraQuery) {\n var value = extraQuery[key];\n parsedQuery[key] = Array.isArray(value)\n ? value.map(castQueryParamValue)\n : castQueryParamValue(value);\n }\n return parsedQuery\n}\n\nvar castQueryParamValue = function (value) { return (value == null || typeof value === 'object' ? value : String(value)); };\n\nfunction parseQuery (query) {\n var res = {};\n\n query = query.trim().replace(/^(\\?|#|&)/, '');\n\n if (!query) {\n return res\n }\n\n query.split('&').forEach(function (param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n var key = decode(parts.shift());\n var val = parts.length > 0 ? decode(parts.join('=')) : null;\n\n if (res[key] === undefined) {\n res[key] = val;\n } else if (Array.isArray(res[key])) {\n res[key].push(val);\n } else {\n res[key] = [res[key], val];\n }\n });\n\n return res\n}\n\nfunction stringifyQuery (obj) {\n var res = obj\n ? Object.keys(obj)\n .map(function (key) {\n var val = obj[key];\n\n if (val === undefined) {\n return ''\n }\n\n if (val === null) {\n return encode(key)\n }\n\n if (Array.isArray(val)) {\n var result = [];\n val.forEach(function (val2) {\n if (val2 === undefined) {\n return\n }\n if (val2 === null) {\n result.push(encode(key));\n } else {\n result.push(encode(key) + '=' + encode(val2));\n }\n });\n return result.join('&')\n }\n\n return encode(key) + '=' + encode(val)\n })\n .filter(function (x) { return x.length > 0; })\n .join('&')\n : null;\n return res ? (\"?\" + res) : ''\n}\n\n/* */\n\nvar trailingSlashRE = /\\/?$/;\n\nfunction createRoute (\n record,\n location,\n redirectedFrom,\n router\n) {\n var stringifyQuery = router && router.options.stringifyQuery;\n\n var query = location.query || {};\n try {\n query = clone(query);\n } catch (e) {}\n\n var route = {\n name: location.name || (record && record.name),\n meta: (record && record.meta) || {},\n path: location.path || '/',\n hash: location.hash || '',\n query: query,\n params: location.params || {},\n fullPath: getFullPath(location, stringifyQuery),\n matched: record ? formatMatch(record) : []\n };\n if (redirectedFrom) {\n route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery);\n }\n return Object.freeze(route)\n}\n\nfunction clone (value) {\n if (Array.isArray(value)) {\n return value.map(clone)\n } else if (value && typeof value === 'object') {\n var res = {};\n for (var key in value) {\n res[key] = clone(value[key]);\n }\n return res\n } else {\n return value\n }\n}\n\n// the starting route that represents the initial state\nvar START = createRoute(null, {\n path: '/'\n});\n\nfunction formatMatch (record) {\n var res = [];\n while (record) {\n res.unshift(record);\n record = record.parent;\n }\n return res\n}\n\nfunction getFullPath (\n ref,\n _stringifyQuery\n) {\n var path = ref.path;\n var query = ref.query; if ( query === void 0 ) query = {};\n var hash = ref.hash; if ( hash === void 0 ) hash = '';\n\n var stringify = _stringifyQuery || stringifyQuery;\n return (path || '/') + stringify(query) + hash\n}\n\nfunction isSameRoute (a, b, onlyPath) {\n if (b === START) {\n return a === b\n } else if (!b) {\n return false\n } else if (a.path && b.path) {\n return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath ||\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query))\n } else if (a.name && b.name) {\n return (\n a.name === b.name &&\n (onlyPath || (\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query) &&\n isObjectEqual(a.params, b.params))\n )\n )\n } else {\n return false\n }\n}\n\nfunction isObjectEqual (a, b) {\n if ( a === void 0 ) a = {};\n if ( b === void 0 ) b = {};\n\n // handle null value #1566\n if (!a || !b) { return a === b }\n var aKeys = Object.keys(a).sort();\n var bKeys = Object.keys(b).sort();\n if (aKeys.length !== bKeys.length) {\n return false\n }\n return aKeys.every(function (key, i) {\n var aVal = a[key];\n var bKey = bKeys[i];\n if (bKey !== key) { return false }\n var bVal = b[key];\n // query values can be null and undefined\n if (aVal == null || bVal == null) { return aVal === bVal }\n // check nested equality\n if (typeof aVal === 'object' && typeof bVal === 'object') {\n return isObjectEqual(aVal, bVal)\n }\n return String(aVal) === String(bVal)\n })\n}\n\nfunction isIncludedRoute (current, target) {\n return (\n current.path.replace(trailingSlashRE, '/').indexOf(\n target.path.replace(trailingSlashRE, '/')\n ) === 0 &&\n (!target.hash || current.hash === target.hash) &&\n queryIncludes(current.query, target.query)\n )\n}\n\nfunction queryIncludes (current, target) {\n for (var key in target) {\n if (!(key in current)) {\n return false\n }\n }\n return true\n}\n\nfunction handleRouteEntered (route) {\n for (var i = 0; i < route.matched.length; i++) {\n var record = route.matched[i];\n for (var name in record.instances) {\n var instance = record.instances[name];\n var cbs = record.enteredCbs[name];\n if (!instance || !cbs) { continue }\n delete record.enteredCbs[name];\n for (var i$1 = 0; i$1 < cbs.length; i$1++) {\n if (!instance._isBeingDestroyed) { cbs[i$1](instance); }\n }\n }\n }\n}\n\nvar View = {\n name: 'RouterView',\n functional: true,\n props: {\n name: {\n type: String,\n default: 'default'\n }\n },\n render: function render (_, ref) {\n var props = ref.props;\n var children = ref.children;\n var parent = ref.parent;\n var data = ref.data;\n\n // used by devtools to display a router-view badge\n data.routerView = true;\n\n // directly use parent context's createElement() function\n // so that components rendered by router-view can resolve named slots\n var h = parent.$createElement;\n var name = props.name;\n var route = parent.$route;\n var cache = parent._routerViewCache || (parent._routerViewCache = {});\n\n // determine current view depth, also check to see if the tree\n // has been toggled inactive but kept-alive.\n var depth = 0;\n var inactive = false;\n while (parent && parent._routerRoot !== parent) {\n var vnodeData = parent.$vnode ? parent.$vnode.data : {};\n if (vnodeData.routerView) {\n depth++;\n }\n if (vnodeData.keepAlive && parent._directInactive && parent._inactive) {\n inactive = true;\n }\n parent = parent.$parent;\n }\n data.routerViewDepth = depth;\n\n // render previous view if the tree is inactive and kept-alive\n if (inactive) {\n var cachedData = cache[name];\n var cachedComponent = cachedData && cachedData.component;\n if (cachedComponent) {\n // #2301\n // pass props\n if (cachedData.configProps) {\n fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps);\n }\n return h(cachedComponent, data, children)\n } else {\n // render previous empty view\n return h()\n }\n }\n\n var matched = route.matched[depth];\n var component = matched && matched.components[name];\n\n // render empty node if no matched route or no config component\n if (!matched || !component) {\n cache[name] = null;\n return h()\n }\n\n // cache component\n cache[name] = { component: component };\n\n // attach instance registration hook\n // this will be called in the instance's injected lifecycle hooks\n data.registerRouteInstance = function (vm, val) {\n // val could be undefined for unregistration\n var current = matched.instances[name];\n if (\n (val && current !== vm) ||\n (!val && current === vm)\n ) {\n matched.instances[name] = val;\n }\n }\n\n // also register instance in prepatch hook\n // in case the same component instance is reused across different routes\n ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {\n matched.instances[name] = vnode.componentInstance;\n };\n\n // register instance in init hook\n // in case kept-alive component be actived when routes changed\n data.hook.init = function (vnode) {\n if (vnode.data.keepAlive &&\n vnode.componentInstance &&\n vnode.componentInstance !== matched.instances[name]\n ) {\n matched.instances[name] = vnode.componentInstance;\n }\n\n // if the route transition has already been confirmed then we weren't\n // able to call the cbs during confirmation as the component was not\n // registered yet, so we call it here.\n handleRouteEntered(route);\n };\n\n var configProps = matched.props && matched.props[name];\n // save route and configProps in cache\n if (configProps) {\n extend(cache[name], {\n route: route,\n configProps: configProps\n });\n fillPropsinData(component, data, route, configProps);\n }\n\n return h(component, data, children)\n }\n};\n\nfunction fillPropsinData (component, data, route, configProps) {\n // resolve props\n var propsToPass = data.props = resolveProps(route, configProps);\n if (propsToPass) {\n // clone to prevent mutation\n propsToPass = data.props = extend({}, propsToPass);\n // pass non-declared props as attrs\n var attrs = data.attrs = data.attrs || {};\n for (var key in propsToPass) {\n if (!component.props || !(key in component.props)) {\n attrs[key] = propsToPass[key];\n delete propsToPass[key];\n }\n }\n }\n}\n\nfunction resolveProps (route, config) {\n switch (typeof config) {\n case 'undefined':\n return\n case 'object':\n return config\n case 'function':\n return config(route)\n case 'boolean':\n return config ? route.params : undefined\n default:\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n \"props in \\\"\" + (route.path) + \"\\\" is a \" + (typeof config) + \", \" +\n \"expecting an object, function or boolean.\"\n );\n }\n }\n}\n\n/* */\n\nfunction resolvePath (\n relative,\n base,\n append\n) {\n var firstChar = relative.charAt(0);\n if (firstChar === '/') {\n return relative\n }\n\n if (firstChar === '?' || firstChar === '#') {\n return base + relative\n }\n\n var stack = base.split('/');\n\n // remove trailing segment if:\n // - not appending\n // - appending to trailing slash (last segment is empty)\n if (!append || !stack[stack.length - 1]) {\n stack.pop();\n }\n\n // resolve relative path\n var segments = relative.replace(/^\\//, '').split('/');\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n if (segment === '..') {\n stack.pop();\n } else if (segment !== '.') {\n stack.push(segment);\n }\n }\n\n // ensure leading slash\n if (stack[0] !== '') {\n stack.unshift('');\n }\n\n return stack.join('/')\n}\n\nfunction parsePath (path) {\n var hash = '';\n var query = '';\n\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n hash = path.slice(hashIndex);\n path = path.slice(0, hashIndex);\n }\n\n var queryIndex = path.indexOf('?');\n if (queryIndex >= 0) {\n query = path.slice(queryIndex + 1);\n path = path.slice(0, queryIndex);\n }\n\n return {\n path: path,\n query: query,\n hash: hash\n }\n}\n\nfunction cleanPath (path) {\n return path.replace(/\\/(?:\\s*\\/)+/g, '/')\n}\n\nvar isarray = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n/**\n * Expose `pathToRegexp`.\n */\nvar pathToRegexp_1 = pathToRegexp;\nvar parse_1 = parse;\nvar compile_1 = compile;\nvar tokensToFunction_1 = tokensToFunction;\nvar tokensToRegExp_1 = tokensToRegExp;\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g');\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = [];\n var key = 0;\n var index = 0;\n var path = '';\n var defaultDelimiter = options && options.delimiter || '/';\n var res;\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0];\n var escaped = res[1];\n var offset = res.index;\n path += str.slice(index, offset);\n index = offset + m.length;\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1];\n continue\n }\n\n var next = str[index];\n var prefix = res[2];\n var name = res[3];\n var capture = res[4];\n var group = res[5];\n var modifier = res[6];\n var asterisk = res[7];\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path);\n path = '';\n }\n\n var partial = prefix != null && next != null && next !== prefix;\n var repeat = modifier === '+' || modifier === '*';\n var optional = modifier === '?' || modifier === '*';\n var delimiter = res[2] || defaultDelimiter;\n var pattern = capture || group;\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n });\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index);\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path);\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length);\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options));\n }\n }\n\n return function (obj, opts) {\n var path = '';\n var data = obj || {};\n var options = opts || {};\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n path += token;\n\n continue\n }\n\n var value = data[token.name];\n var segment;\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix;\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j]);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment;\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment;\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys;\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g);\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n });\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = [];\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source);\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n var strict = options.strict;\n var end = options.end !== false;\n var route = '';\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n route += escapeString(token);\n } else {\n var prefix = escapeString(token.prefix);\n var capture = '(?:' + token.pattern + ')';\n\n keys.push(token);\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*';\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?';\n } else {\n capture = prefix + '(' + capture + ')?';\n }\n } else {\n capture = prefix + '(' + capture + ')';\n }\n\n route += capture;\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/');\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';\n }\n\n if (end) {\n route += '$';\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\npathToRegexp_1.parse = parse_1;\npathToRegexp_1.compile = compile_1;\npathToRegexp_1.tokensToFunction = tokensToFunction_1;\npathToRegexp_1.tokensToRegExp = tokensToRegExp_1;\n\n/* */\n\n// $flow-disable-line\nvar regexpCompileCache = Object.create(null);\n\nfunction fillParams (\n path,\n params,\n routeMsg\n) {\n params = params || {};\n try {\n var filler =\n regexpCompileCache[path] ||\n (regexpCompileCache[path] = pathToRegexp_1.compile(path));\n\n // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}\n // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string\n if (typeof params.pathMatch === 'string') { params[0] = params.pathMatch; }\n\n return filler(params, { pretty: true })\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n // Fix #3072 no warn if `pathMatch` is string\n warn(typeof params.pathMatch === 'string', (\"missing param for \" + routeMsg + \": \" + (e.message)));\n }\n return ''\n } finally {\n // delete the 0 if it was added\n delete params[0];\n }\n}\n\n/* */\n\nfunction normalizeLocation (\n raw,\n current,\n append,\n router\n) {\n var next = typeof raw === 'string' ? { path: raw } : raw;\n // named target\n if (next._normalized) {\n return next\n } else if (next.name) {\n next = extend({}, raw);\n var params = next.params;\n if (params && typeof params === 'object') {\n next.params = extend({}, params);\n }\n return next\n }\n\n // relative params\n if (!next.path && next.params && current) {\n next = extend({}, next);\n next._normalized = true;\n var params$1 = extend(extend({}, current.params), next.params);\n if (current.name) {\n next.name = current.name;\n next.params = params$1;\n } else if (current.matched.length) {\n var rawPath = current.matched[current.matched.length - 1].path;\n next.path = fillParams(rawPath, params$1, (\"path \" + (current.path)));\n } else if (process.env.NODE_ENV !== 'production') {\n warn(false, \"relative params navigation requires a current route.\");\n }\n return next\n }\n\n var parsedPath = parsePath(next.path || '');\n var basePath = (current && current.path) || '/';\n var path = parsedPath.path\n ? resolvePath(parsedPath.path, basePath, append || next.append)\n : basePath;\n\n var query = resolveQuery(\n parsedPath.query,\n next.query,\n router && router.options.parseQuery\n );\n\n var hash = next.hash || parsedPath.hash;\n if (hash && hash.charAt(0) !== '#') {\n hash = \"#\" + hash;\n }\n\n return {\n _normalized: true,\n path: path,\n query: query,\n hash: hash\n }\n}\n\n/* */\n\n// work around weird flow bug\nvar toTypes = [String, Object];\nvar eventTypes = [String, Array];\n\nvar noop = function () {};\n\nvar warnedCustomSlot;\nvar warnedTagProp;\nvar warnedEventProp;\n\nvar Link = {\n name: 'RouterLink',\n props: {\n to: {\n type: toTypes,\n required: true\n },\n tag: {\n type: String,\n default: 'a'\n },\n custom: Boolean,\n exact: Boolean,\n exactPath: Boolean,\n append: Boolean,\n replace: Boolean,\n activeClass: String,\n exactActiveClass: String,\n ariaCurrentValue: {\n type: String,\n default: 'page'\n },\n event: {\n type: eventTypes,\n default: 'click'\n }\n },\n render: function render (h) {\n var this$1$1 = this;\n\n var router = this.$router;\n var current = this.$route;\n var ref = router.resolve(\n this.to,\n current,\n this.append\n );\n var location = ref.location;\n var route = ref.route;\n var href = ref.href;\n\n var classes = {};\n var globalActiveClass = router.options.linkActiveClass;\n var globalExactActiveClass = router.options.linkExactActiveClass;\n // Support global empty active class\n var activeClassFallback =\n globalActiveClass == null ? 'router-link-active' : globalActiveClass;\n var exactActiveClassFallback =\n globalExactActiveClass == null\n ? 'router-link-exact-active'\n : globalExactActiveClass;\n var activeClass =\n this.activeClass == null ? activeClassFallback : this.activeClass;\n var exactActiveClass =\n this.exactActiveClass == null\n ? exactActiveClassFallback\n : this.exactActiveClass;\n\n var compareTarget = route.redirectedFrom\n ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)\n : route;\n\n classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath);\n classes[activeClass] = this.exact || this.exactPath\n ? classes[exactActiveClass]\n : isIncludedRoute(current, compareTarget);\n\n var ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null;\n\n var handler = function (e) {\n if (guardEvent(e)) {\n if (this$1$1.replace) {\n router.replace(location, noop);\n } else {\n router.push(location, noop);\n }\n }\n };\n\n var on = { click: guardEvent };\n if (Array.isArray(this.event)) {\n this.event.forEach(function (e) {\n on[e] = handler;\n });\n } else {\n on[this.event] = handler;\n }\n\n var data = { class: classes };\n\n var scopedSlot =\n !this.$scopedSlots.$hasNormal &&\n this.$scopedSlots.default &&\n this.$scopedSlots.default({\n href: href,\n route: route,\n navigate: handler,\n isActive: classes[activeClass],\n isExactActive: classes[exactActiveClass]\n });\n\n if (scopedSlot) {\n if (process.env.NODE_ENV !== 'production' && !this.custom) {\n !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an element. Use the custom prop to remove this warning:\\n\\n');\n warnedCustomSlot = true;\n }\n if (scopedSlot.length === 1) {\n return scopedSlot[0]\n } else if (scopedSlot.length > 1 || !scopedSlot.length) {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n (\" with to=\\\"\" + (this.to) + \"\\\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.\")\n );\n }\n return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if ('tag' in this.$options.propsData && !warnedTagProp) {\n warn(\n false,\n \"'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n );\n warnedTagProp = true;\n }\n if ('event' in this.$options.propsData && !warnedEventProp) {\n warn(\n false,\n \"'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n );\n warnedEventProp = true;\n }\n }\n\n if (this.tag === 'a') {\n data.on = on;\n data.attrs = { href: href, 'aria-current': ariaCurrentValue };\n } else {\n // find the first child and apply listener and href\n var a = findAnchor(this.$slots.default);\n if (a) {\n // in case the is a static node\n a.isStatic = false;\n var aData = (a.data = extend({}, a.data));\n aData.on = aData.on || {};\n // transform existing events in both objects into arrays so we can push later\n for (var event in aData.on) {\n var handler$1 = aData.on[event];\n if (event in on) {\n aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1];\n }\n }\n // append new listeners for router-link\n for (var event$1 in on) {\n if (event$1 in aData.on) {\n // on[event] is always a function\n aData.on[event$1].push(on[event$1]);\n } else {\n aData.on[event$1] = handler;\n }\n }\n\n var aAttrs = (a.data.attrs = extend({}, a.data.attrs));\n aAttrs.href = href;\n aAttrs['aria-current'] = ariaCurrentValue;\n } else {\n // doesn't have child, apply listener to self\n data.on = on;\n }\n }\n\n return h(this.tag, data, this.$slots.default)\n }\n};\n\nfunction guardEvent (e) {\n // don't redirect with control keys\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }\n // don't redirect when preventDefault called\n if (e.defaultPrevented) { return }\n // don't redirect on right click\n if (e.button !== undefined && e.button !== 0) { return }\n // don't redirect if `target=\"_blank\"`\n if (e.currentTarget && e.currentTarget.getAttribute) {\n var target = e.currentTarget.getAttribute('target');\n if (/\\b_blank\\b/i.test(target)) { return }\n }\n // this may be a Weex event which doesn't have this method\n if (e.preventDefault) {\n e.preventDefault();\n }\n return true\n}\n\nfunction findAnchor (children) {\n if (children) {\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.tag === 'a') {\n return child\n }\n if (child.children && (child = findAnchor(child.children))) {\n return child\n }\n }\n }\n}\n\nvar _Vue;\n\nfunction install (Vue) {\n if (install.installed && _Vue === Vue) { return }\n install.installed = true;\n\n _Vue = Vue;\n\n var isDef = function (v) { return v !== undefined; };\n\n var registerInstance = function (vm, callVal) {\n var i = vm.$options._parentVnode;\n if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {\n i(vm, callVal);\n }\n };\n\n Vue.mixin({\n beforeCreate: function beforeCreate () {\n if (isDef(this.$options.router)) {\n this._routerRoot = this;\n this._router = this.$options.router;\n this._router.init(this);\n Vue.util.defineReactive(this, '_route', this._router.history.current);\n } else {\n this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;\n }\n registerInstance(this, this);\n },\n destroyed: function destroyed () {\n registerInstance(this);\n }\n });\n\n Object.defineProperty(Vue.prototype, '$router', {\n get: function get () { return this._routerRoot._router }\n });\n\n Object.defineProperty(Vue.prototype, '$route', {\n get: function get () { return this._routerRoot._route }\n });\n\n Vue.component('RouterView', View);\n Vue.component('RouterLink', Link);\n\n var strats = Vue.config.optionMergeStrategies;\n // use the same hook merging strategy for route hooks\n strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;\n}\n\n/* */\n\nvar inBrowser = typeof window !== 'undefined';\n\n/* */\n\nfunction createRouteMap (\n routes,\n oldPathList,\n oldPathMap,\n oldNameMap,\n parentRoute\n) {\n // the path list is used to control path matching priority\n var pathList = oldPathList || [];\n // $flow-disable-line\n var pathMap = oldPathMap || Object.create(null);\n // $flow-disable-line\n var nameMap = oldNameMap || Object.create(null);\n\n routes.forEach(function (route) {\n addRouteRecord(pathList, pathMap, nameMap, route, parentRoute);\n });\n\n // ensure wildcard routes are always at the end\n for (var i = 0, l = pathList.length; i < l; i++) {\n if (pathList[i] === '*') {\n pathList.push(pathList.splice(i, 1)[0]);\n l--;\n i--;\n }\n }\n\n if (process.env.NODE_ENV === 'development') {\n // warn if routes do not include leading slashes\n var found = pathList\n // check for missing leading slash\n .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; });\n\n if (found.length > 0) {\n var pathNames = found.map(function (path) { return (\"- \" + path); }).join('\\n');\n warn(false, (\"Non-nested routes must include a leading slash character. Fix the following routes: \\n\" + pathNames));\n }\n }\n\n return {\n pathList: pathList,\n pathMap: pathMap,\n nameMap: nameMap\n }\n}\n\nfunction addRouteRecord (\n pathList,\n pathMap,\n nameMap,\n route,\n parent,\n matchAs\n) {\n var path = route.path;\n var name = route.name;\n if (process.env.NODE_ENV !== 'production') {\n assert(path != null, \"\\\"path\\\" is required in a route configuration.\");\n assert(\n typeof route.component !== 'string',\n \"route config \\\"component\\\" for path: \" + (String(\n path || name\n )) + \" cannot be a \" + \"string id. Use an actual component instead.\"\n );\n\n warn(\n // eslint-disable-next-line no-control-regex\n !/[^\\u0000-\\u007F]+/.test(path),\n \"Route with path \\\"\" + path + \"\\\" contains unencoded characters, make sure \" +\n \"your path is correctly encoded before passing it to the router. Use \" +\n \"encodeURI to encode static segments of your path.\"\n );\n }\n\n var pathToRegexpOptions =\n route.pathToRegexpOptions || {};\n var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict);\n\n if (typeof route.caseSensitive === 'boolean') {\n pathToRegexpOptions.sensitive = route.caseSensitive;\n }\n\n var record = {\n path: normalizedPath,\n regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),\n components: route.components || { default: route.component },\n alias: route.alias\n ? typeof route.alias === 'string'\n ? [route.alias]\n : route.alias\n : [],\n instances: {},\n enteredCbs: {},\n name: name,\n parent: parent,\n matchAs: matchAs,\n redirect: route.redirect,\n beforeEnter: route.beforeEnter,\n meta: route.meta || {},\n props:\n route.props == null\n ? {}\n : route.components\n ? route.props\n : { default: route.props }\n };\n\n if (route.children) {\n // Warn if route is named, does not redirect and has a default child route.\n // If users navigate to this route by name, the default child will\n // not be rendered (GH Issue #629)\n if (process.env.NODE_ENV !== 'production') {\n if (\n route.name &&\n !route.redirect &&\n route.children.some(function (child) { return /^\\/?$/.test(child.path); })\n ) {\n warn(\n false,\n \"Named Route '\" + (route.name) + \"' has a default child route. \" +\n \"When navigating to this named route (:to=\\\"{name: '\" + (route.name) + \"'}\\\"), \" +\n \"the default child route will not be rendered. Remove the name from \" +\n \"this route and use the name of the default child route for named \" +\n \"links instead.\"\n );\n }\n }\n route.children.forEach(function (child) {\n var childMatchAs = matchAs\n ? cleanPath((matchAs + \"/\" + (child.path)))\n : undefined;\n addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);\n });\n }\n\n if (!pathMap[record.path]) {\n pathList.push(record.path);\n pathMap[record.path] = record;\n }\n\n if (route.alias !== undefined) {\n var aliases = Array.isArray(route.alias) ? route.alias : [route.alias];\n for (var i = 0; i < aliases.length; ++i) {\n var alias = aliases[i];\n if (process.env.NODE_ENV !== 'production' && alias === path) {\n warn(\n false,\n (\"Found an alias with the same value as the path: \\\"\" + path + \"\\\". You have to remove that alias. It will be ignored in development.\")\n );\n // skip in dev to make it work\n continue\n }\n\n var aliasRoute = {\n path: alias,\n children: route.children\n };\n addRouteRecord(\n pathList,\n pathMap,\n nameMap,\n aliasRoute,\n parent,\n record.path || '/' // matchAs\n );\n }\n }\n\n if (name) {\n if (!nameMap[name]) {\n nameMap[name] = record;\n } else if (process.env.NODE_ENV !== 'production' && !matchAs) {\n warn(\n false,\n \"Duplicate named routes definition: \" +\n \"{ name: \\\"\" + name + \"\\\", path: \\\"\" + (record.path) + \"\\\" }\"\n );\n }\n }\n}\n\nfunction compileRouteRegex (\n path,\n pathToRegexpOptions\n) {\n var regex = pathToRegexp_1(path, [], pathToRegexpOptions);\n if (process.env.NODE_ENV !== 'production') {\n var keys = Object.create(null);\n regex.keys.forEach(function (key) {\n warn(\n !keys[key.name],\n (\"Duplicate param keys in route with path: \\\"\" + path + \"\\\"\")\n );\n keys[key.name] = true;\n });\n }\n return regex\n}\n\nfunction normalizePath (\n path,\n parent,\n strict\n) {\n if (!strict) { path = path.replace(/\\/$/, ''); }\n if (path[0] === '/') { return path }\n if (parent == null) { return path }\n return cleanPath(((parent.path) + \"/\" + path))\n}\n\n/* */\n\n\n\nfunction createMatcher (\n routes,\n router\n) {\n var ref = createRouteMap(routes);\n var pathList = ref.pathList;\n var pathMap = ref.pathMap;\n var nameMap = ref.nameMap;\n\n function addRoutes (routes) {\n createRouteMap(routes, pathList, pathMap, nameMap);\n }\n\n function addRoute (parentOrRoute, route) {\n var parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined;\n // $flow-disable-line\n createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent);\n\n // add aliases of parent\n if (parent && parent.alias.length) {\n createRouteMap(\n // $flow-disable-line route is defined if parent is\n parent.alias.map(function (alias) { return ({ path: alias, children: [route] }); }),\n pathList,\n pathMap,\n nameMap,\n parent\n );\n }\n }\n\n function getRoutes () {\n return pathList.map(function (path) { return pathMap[path]; })\n }\n\n function match (\n raw,\n currentRoute,\n redirectedFrom\n ) {\n var location = normalizeLocation(raw, currentRoute, false, router);\n var name = location.name;\n\n if (name) {\n var record = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n warn(record, (\"Route with name '\" + name + \"' does not exist\"));\n }\n if (!record) { return _createRoute(null, location) }\n var paramNames = record.regex.keys\n .filter(function (key) { return !key.optional; })\n .map(function (key) { return key.name; });\n\n if (typeof location.params !== 'object') {\n location.params = {};\n }\n\n if (currentRoute && typeof currentRoute.params === 'object') {\n for (var key in currentRoute.params) {\n if (!(key in location.params) && paramNames.indexOf(key) > -1) {\n location.params[key] = currentRoute.params[key];\n }\n }\n }\n\n location.path = fillParams(record.path, location.params, (\"named route \\\"\" + name + \"\\\"\"));\n return _createRoute(record, location, redirectedFrom)\n } else if (location.path) {\n location.params = {};\n for (var i = 0; i < pathList.length; i++) {\n var path = pathList[i];\n var record$1 = pathMap[path];\n if (matchRoute(record$1.regex, location.path, location.params)) {\n return _createRoute(record$1, location, redirectedFrom)\n }\n }\n }\n // no match\n return _createRoute(null, location)\n }\n\n function redirect (\n record,\n location\n ) {\n var originalRedirect = record.redirect;\n var redirect = typeof originalRedirect === 'function'\n ? originalRedirect(createRoute(record, location, null, router))\n : originalRedirect;\n\n if (typeof redirect === 'string') {\n redirect = { path: redirect };\n }\n\n if (!redirect || typeof redirect !== 'object') {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false, (\"invalid redirect option: \" + (JSON.stringify(redirect)))\n );\n }\n return _createRoute(null, location)\n }\n\n var re = redirect;\n var name = re.name;\n var path = re.path;\n var query = location.query;\n var hash = location.hash;\n var params = location.params;\n query = re.hasOwnProperty('query') ? re.query : query;\n hash = re.hasOwnProperty('hash') ? re.hash : hash;\n params = re.hasOwnProperty('params') ? re.params : params;\n\n if (name) {\n // resolved named direct\n var targetRecord = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n assert(targetRecord, (\"redirect failed: named route \\\"\" + name + \"\\\" not found.\"));\n }\n return match({\n _normalized: true,\n name: name,\n query: query,\n hash: hash,\n params: params\n }, undefined, location)\n } else if (path) {\n // 1. resolve relative redirect\n var rawPath = resolveRecordPath(path, record);\n // 2. resolve params\n var resolvedPath = fillParams(rawPath, params, (\"redirect route with path \\\"\" + rawPath + \"\\\"\"));\n // 3. rematch with existing query and hash\n return match({\n _normalized: true,\n path: resolvedPath,\n query: query,\n hash: hash\n }, undefined, location)\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"invalid redirect option: \" + (JSON.stringify(redirect))));\n }\n return _createRoute(null, location)\n }\n }\n\n function alias (\n record,\n location,\n matchAs\n ) {\n var aliasedPath = fillParams(matchAs, location.params, (\"aliased route with path \\\"\" + matchAs + \"\\\"\"));\n var aliasedMatch = match({\n _normalized: true,\n path: aliasedPath\n });\n if (aliasedMatch) {\n var matched = aliasedMatch.matched;\n var aliasedRecord = matched[matched.length - 1];\n location.params = aliasedMatch.params;\n return _createRoute(aliasedRecord, location)\n }\n return _createRoute(null, location)\n }\n\n function _createRoute (\n record,\n location,\n redirectedFrom\n ) {\n if (record && record.redirect) {\n return redirect(record, redirectedFrom || location)\n }\n if (record && record.matchAs) {\n return alias(record, location, record.matchAs)\n }\n return createRoute(record, location, redirectedFrom, router)\n }\n\n return {\n match: match,\n addRoute: addRoute,\n getRoutes: getRoutes,\n addRoutes: addRoutes\n }\n}\n\nfunction matchRoute (\n regex,\n path,\n params\n) {\n var m = path.match(regex);\n\n if (!m) {\n return false\n } else if (!params) {\n return true\n }\n\n for (var i = 1, len = m.length; i < len; ++i) {\n var key = regex.keys[i - 1];\n if (key) {\n // Fix #1994: using * with props: true generates a param named 0\n params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i];\n }\n }\n\n return true\n}\n\nfunction resolveRecordPath (path, record) {\n return resolvePath(path, record.parent ? record.parent.path : '/', true)\n}\n\n/* */\n\n// use User Timing api (if present) for more accurate key precision\nvar Time =\n inBrowser && window.performance && window.performance.now\n ? window.performance\n : Date;\n\nfunction genStateKey () {\n return Time.now().toFixed(3)\n}\n\nvar _key = genStateKey();\n\nfunction getStateKey () {\n return _key\n}\n\nfunction setStateKey (key) {\n return (_key = key)\n}\n\n/* */\n\nvar positionStore = Object.create(null);\n\nfunction setupScroll () {\n // Prevent browser scroll behavior on History popstate\n if ('scrollRestoration' in window.history) {\n window.history.scrollRestoration = 'manual';\n }\n // Fix for #1585 for Firefox\n // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678\n // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with\n // window.location.protocol + '//' + window.location.host\n // location.host contains the port and location.hostname doesn't\n var protocolAndPath = window.location.protocol + '//' + window.location.host;\n var absolutePath = window.location.href.replace(protocolAndPath, '');\n // preserve existing history state as it could be overriden by the user\n var stateCopy = extend({}, window.history.state);\n stateCopy.key = getStateKey();\n window.history.replaceState(stateCopy, '', absolutePath);\n window.addEventListener('popstate', handlePopState);\n return function () {\n window.removeEventListener('popstate', handlePopState);\n }\n}\n\nfunction handleScroll (\n router,\n to,\n from,\n isPop\n) {\n if (!router.app) {\n return\n }\n\n var behavior = router.options.scrollBehavior;\n if (!behavior) {\n return\n }\n\n if (process.env.NODE_ENV !== 'production') {\n assert(typeof behavior === 'function', \"scrollBehavior must be a function\");\n }\n\n // wait until re-render finishes before scrolling\n router.app.$nextTick(function () {\n var position = getScrollPosition();\n var shouldScroll = behavior.call(\n router,\n to,\n from,\n isPop ? position : null\n );\n\n if (!shouldScroll) {\n return\n }\n\n if (typeof shouldScroll.then === 'function') {\n shouldScroll\n .then(function (shouldScroll) {\n scrollToPosition((shouldScroll), position);\n })\n .catch(function (err) {\n if (process.env.NODE_ENV !== 'production') {\n assert(false, err.toString());\n }\n });\n } else {\n scrollToPosition(shouldScroll, position);\n }\n });\n}\n\nfunction saveScrollPosition () {\n var key = getStateKey();\n if (key) {\n positionStore[key] = {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n }\n}\n\nfunction handlePopState (e) {\n saveScrollPosition();\n if (e.state && e.state.key) {\n setStateKey(e.state.key);\n }\n}\n\nfunction getScrollPosition () {\n var key = getStateKey();\n if (key) {\n return positionStore[key]\n }\n}\n\nfunction getElementPosition (el, offset) {\n var docEl = document.documentElement;\n var docRect = docEl.getBoundingClientRect();\n var elRect = el.getBoundingClientRect();\n return {\n x: elRect.left - docRect.left - offset.x,\n y: elRect.top - docRect.top - offset.y\n }\n}\n\nfunction isValidPosition (obj) {\n return isNumber(obj.x) || isNumber(obj.y)\n}\n\nfunction normalizePosition (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : window.pageXOffset,\n y: isNumber(obj.y) ? obj.y : window.pageYOffset\n }\n}\n\nfunction normalizeOffset (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : 0,\n y: isNumber(obj.y) ? obj.y : 0\n }\n}\n\nfunction isNumber (v) {\n return typeof v === 'number'\n}\n\nvar hashStartsWithNumberRE = /^#\\d/;\n\nfunction scrollToPosition (shouldScroll, position) {\n var isObject = typeof shouldScroll === 'object';\n if (isObject && typeof shouldScroll.selector === 'string') {\n // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]\n // but at the same time, it doesn't make much sense to select an element with an id and an extra selector\n var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line\n ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line\n : document.querySelector(shouldScroll.selector);\n\n if (el) {\n var offset =\n shouldScroll.offset && typeof shouldScroll.offset === 'object'\n ? shouldScroll.offset\n : {};\n offset = normalizeOffset(offset);\n position = getElementPosition(el, offset);\n } else if (isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n } else if (isObject && isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n\n if (position) {\n // $flow-disable-line\n if ('scrollBehavior' in document.documentElement.style) {\n window.scrollTo({\n left: position.x,\n top: position.y,\n // $flow-disable-line\n behavior: shouldScroll.behavior\n });\n } else {\n window.scrollTo(position.x, position.y);\n }\n }\n}\n\n/* */\n\nvar supportsPushState =\n inBrowser &&\n (function () {\n var ua = window.navigator.userAgent;\n\n if (\n (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&\n ua.indexOf('Mobile Safari') !== -1 &&\n ua.indexOf('Chrome') === -1 &&\n ua.indexOf('Windows Phone') === -1\n ) {\n return false\n }\n\n return window.history && typeof window.history.pushState === 'function'\n })();\n\nfunction pushState (url, replace) {\n saveScrollPosition();\n // try...catch the pushState call to get around Safari\n // DOM Exception 18 where it limits to 100 pushState calls\n var history = window.history;\n try {\n if (replace) {\n // preserve existing history state as it could be overriden by the user\n var stateCopy = extend({}, history.state);\n stateCopy.key = getStateKey();\n history.replaceState(stateCopy, '', url);\n } else {\n history.pushState({ key: setStateKey(genStateKey()) }, '', url);\n }\n } catch (e) {\n window.location[replace ? 'replace' : 'assign'](url);\n }\n}\n\nfunction replaceState (url) {\n pushState(url, true);\n}\n\n// When changing thing, also edit router.d.ts\nvar NavigationFailureType = {\n redirected: 2,\n aborted: 4,\n cancelled: 8,\n duplicated: 16\n};\n\nfunction createNavigationRedirectedError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.redirected,\n (\"Redirected when going from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (stringifyRoute(\n to\n )) + \"\\\" via a navigation guard.\")\n )\n}\n\nfunction createNavigationDuplicatedError (from, to) {\n var error = createRouterError(\n from,\n to,\n NavigationFailureType.duplicated,\n (\"Avoided redundant navigation to current location: \\\"\" + (from.fullPath) + \"\\\".\")\n );\n // backwards compatible with the first introduction of Errors\n error.name = 'NavigationDuplicated';\n return error\n}\n\nfunction createNavigationCancelledError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.cancelled,\n (\"Navigation cancelled from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" with a new navigation.\")\n )\n}\n\nfunction createNavigationAbortedError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.aborted,\n (\"Navigation aborted from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" via a navigation guard.\")\n )\n}\n\nfunction createRouterError (from, to, type, message) {\n var error = new Error(message);\n error._isRouter = true;\n error.from = from;\n error.to = to;\n error.type = type;\n\n return error\n}\n\nvar propertiesToLog = ['params', 'query', 'hash'];\n\nfunction stringifyRoute (to) {\n if (typeof to === 'string') { return to }\n if ('path' in to) { return to.path }\n var location = {};\n propertiesToLog.forEach(function (key) {\n if (key in to) { location[key] = to[key]; }\n });\n return JSON.stringify(location, null, 2)\n}\n\nfunction isError (err) {\n return Object.prototype.toString.call(err).indexOf('Error') > -1\n}\n\nfunction isNavigationFailure (err, errorType) {\n return (\n isError(err) &&\n err._isRouter &&\n (errorType == null || err.type === errorType)\n )\n}\n\n/* */\n\nfunction runQueue (queue, fn, cb) {\n var step = function (index) {\n if (index >= queue.length) {\n cb();\n } else {\n if (queue[index]) {\n fn(queue[index], function () {\n step(index + 1);\n });\n } else {\n step(index + 1);\n }\n }\n };\n step(0);\n}\n\n/* */\n\nfunction resolveAsyncComponents (matched) {\n return function (to, from, next) {\n var hasAsync = false;\n var pending = 0;\n var error = null;\n\n flatMapComponents(matched, function (def, _, match, key) {\n // if it's a function and doesn't have cid attached,\n // assume it's an async component resolve function.\n // we are not using Vue's default async resolving mechanism because\n // we want to halt the navigation until the incoming component has been\n // resolved.\n if (typeof def === 'function' && def.cid === undefined) {\n hasAsync = true;\n pending++;\n\n var resolve = once(function (resolvedDef) {\n if (isESModule(resolvedDef)) {\n resolvedDef = resolvedDef.default;\n }\n // save resolved on async factory in case it's used elsewhere\n def.resolved = typeof resolvedDef === 'function'\n ? resolvedDef\n : _Vue.extend(resolvedDef);\n match.components[key] = resolvedDef;\n pending--;\n if (pending <= 0) {\n next();\n }\n });\n\n var reject = once(function (reason) {\n var msg = \"Failed to resolve async component \" + key + \": \" + reason;\n process.env.NODE_ENV !== 'production' && warn(false, msg);\n if (!error) {\n error = isError(reason)\n ? reason\n : new Error(msg);\n next(error);\n }\n });\n\n var res;\n try {\n res = def(resolve, reject);\n } catch (e) {\n reject(e);\n }\n if (res) {\n if (typeof res.then === 'function') {\n res.then(resolve, reject);\n } else {\n // new syntax in Vue 2.3\n var comp = res.component;\n if (comp && typeof comp.then === 'function') {\n comp.then(resolve, reject);\n }\n }\n }\n }\n });\n\n if (!hasAsync) { next(); }\n }\n}\n\nfunction flatMapComponents (\n matched,\n fn\n) {\n return flatten(matched.map(function (m) {\n return Object.keys(m.components).map(function (key) { return fn(\n m.components[key],\n m.instances[key],\n m, key\n ); })\n }))\n}\n\nfunction flatten (arr) {\n return Array.prototype.concat.apply([], arr)\n}\n\nvar hasSymbol =\n typeof Symbol === 'function' &&\n typeof Symbol.toStringTag === 'symbol';\n\nfunction isESModule (obj) {\n return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')\n}\n\n// in Webpack 2, require.ensure now also returns a Promise\n// so the resolve/reject functions may get called an extra time\n// if the user uses an arrow function shorthand that happens to\n// return that Promise.\nfunction once (fn) {\n var called = false;\n return function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (called) { return }\n called = true;\n return fn.apply(this, args)\n }\n}\n\n/* */\n\nvar History = function History (router, base) {\n this.router = router;\n this.base = normalizeBase(base);\n // start with a route object that stands for \"nowhere\"\n this.current = START;\n this.pending = null;\n this.ready = false;\n this.readyCbs = [];\n this.readyErrorCbs = [];\n this.errorCbs = [];\n this.listeners = [];\n};\n\nHistory.prototype.listen = function listen (cb) {\n this.cb = cb;\n};\n\nHistory.prototype.onReady = function onReady (cb, errorCb) {\n if (this.ready) {\n cb();\n } else {\n this.readyCbs.push(cb);\n if (errorCb) {\n this.readyErrorCbs.push(errorCb);\n }\n }\n};\n\nHistory.prototype.onError = function onError (errorCb) {\n this.errorCbs.push(errorCb);\n};\n\nHistory.prototype.transitionTo = function transitionTo (\n location,\n onComplete,\n onAbort\n) {\n var this$1$1 = this;\n\n var route;\n // catch redirect option https://github.com/vuejs/vue-router/issues/3201\n try {\n route = this.router.match(location, this.current);\n } catch (e) {\n this.errorCbs.forEach(function (cb) {\n cb(e);\n });\n // Exception should still be thrown\n throw e\n }\n var prev = this.current;\n this.confirmTransition(\n route,\n function () {\n this$1$1.updateRoute(route);\n onComplete && onComplete(route);\n this$1$1.ensureURL();\n this$1$1.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n\n // fire ready cbs once\n if (!this$1$1.ready) {\n this$1$1.ready = true;\n this$1$1.readyCbs.forEach(function (cb) {\n cb(route);\n });\n }\n },\n function (err) {\n if (onAbort) {\n onAbort(err);\n }\n if (err && !this$1$1.ready) {\n // Initial redirection should not mark the history as ready yet\n // because it's triggered by the redirection instead\n // https://github.com/vuejs/vue-router/issues/3225\n // https://github.com/vuejs/vue-router/issues/3331\n if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) {\n this$1$1.ready = true;\n this$1$1.readyErrorCbs.forEach(function (cb) {\n cb(err);\n });\n }\n }\n }\n );\n};\n\nHistory.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {\n var this$1$1 = this;\n\n var current = this.current;\n this.pending = route;\n var abort = function (err) {\n // changed after adding errors with\n // https://github.com/vuejs/vue-router/pull/3047 before that change,\n // redirect and aborted navigation would produce an err == null\n if (!isNavigationFailure(err) && isError(err)) {\n if (this$1$1.errorCbs.length) {\n this$1$1.errorCbs.forEach(function (cb) {\n cb(err);\n });\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, 'uncaught error during route navigation:');\n }\n console.error(err);\n }\n }\n onAbort && onAbort(err);\n };\n var lastRouteIndex = route.matched.length - 1;\n var lastCurrentIndex = current.matched.length - 1;\n if (\n isSameRoute(route, current) &&\n // in the case the route map has been dynamically appended to\n lastRouteIndex === lastCurrentIndex &&\n route.matched[lastRouteIndex] === current.matched[lastCurrentIndex]\n ) {\n this.ensureURL();\n if (route.hash) {\n handleScroll(this.router, current, route, false);\n }\n return abort(createNavigationDuplicatedError(current, route))\n }\n\n var ref = resolveQueue(\n this.current.matched,\n route.matched\n );\n var updated = ref.updated;\n var deactivated = ref.deactivated;\n var activated = ref.activated;\n\n var queue = [].concat(\n // in-component leave guards\n extractLeaveGuards(deactivated),\n // global before hooks\n this.router.beforeHooks,\n // in-component update hooks\n extractUpdateHooks(updated),\n // in-config enter guards\n activated.map(function (m) { return m.beforeEnter; }),\n // async components\n resolveAsyncComponents(activated)\n );\n\n var iterator = function (hook, next) {\n if (this$1$1.pending !== route) {\n return abort(createNavigationCancelledError(current, route))\n }\n try {\n hook(route, current, function (to) {\n if (to === false) {\n // next(false) -> abort navigation, ensure current URL\n this$1$1.ensureURL(true);\n abort(createNavigationAbortedError(current, route));\n } else if (isError(to)) {\n this$1$1.ensureURL(true);\n abort(to);\n } else if (\n typeof to === 'string' ||\n (typeof to === 'object' &&\n (typeof to.path === 'string' || typeof to.name === 'string'))\n ) {\n // next('/') or next({ path: '/' }) -> redirect\n abort(createNavigationRedirectedError(current, route));\n if (typeof to === 'object' && to.replace) {\n this$1$1.replace(to);\n } else {\n this$1$1.push(to);\n }\n } else {\n // confirm transition and pass on the value\n next(to);\n }\n });\n } catch (e) {\n abort(e);\n }\n };\n\n runQueue(queue, iterator, function () {\n // wait until async components are resolved before\n // extracting in-component enter guards\n var enterGuards = extractEnterGuards(activated);\n var queue = enterGuards.concat(this$1$1.router.resolveHooks);\n runQueue(queue, iterator, function () {\n if (this$1$1.pending !== route) {\n return abort(createNavigationCancelledError(current, route))\n }\n this$1$1.pending = null;\n onComplete(route);\n if (this$1$1.router.app) {\n this$1$1.router.app.$nextTick(function () {\n handleRouteEntered(route);\n });\n }\n });\n });\n};\n\nHistory.prototype.updateRoute = function updateRoute (route) {\n this.current = route;\n this.cb && this.cb(route);\n};\n\nHistory.prototype.setupListeners = function setupListeners () {\n // Default implementation is empty\n};\n\nHistory.prototype.teardown = function teardown () {\n // clean up event listeners\n // https://github.com/vuejs/vue-router/issues/2341\n this.listeners.forEach(function (cleanupListener) {\n cleanupListener();\n });\n this.listeners = [];\n\n // reset current history route\n // https://github.com/vuejs/vue-router/issues/3294\n this.current = START;\n this.pending = null;\n};\n\nfunction normalizeBase (base) {\n if (!base) {\n if (inBrowser) {\n // respect tag\n var baseEl = document.querySelector('base');\n base = (baseEl && baseEl.getAttribute('href')) || '/';\n // strip full URL origin\n base = base.replace(/^https?:\\/\\/[^\\/]+/, '');\n } else {\n base = '/';\n }\n }\n // make sure there's the starting slash\n if (base.charAt(0) !== '/') {\n base = '/' + base;\n }\n // remove trailing slash\n return base.replace(/\\/$/, '')\n}\n\nfunction resolveQueue (\n current,\n next\n) {\n var i;\n var max = Math.max(current.length, next.length);\n for (i = 0; i < max; i++) {\n if (current[i] !== next[i]) {\n break\n }\n }\n return {\n updated: next.slice(0, i),\n activated: next.slice(i),\n deactivated: current.slice(i)\n }\n}\n\nfunction extractGuards (\n records,\n name,\n bind,\n reverse\n) {\n var guards = flatMapComponents(records, function (def, instance, match, key) {\n var guard = extractGuard(def, name);\n if (guard) {\n return Array.isArray(guard)\n ? guard.map(function (guard) { return bind(guard, instance, match, key); })\n : bind(guard, instance, match, key)\n }\n });\n return flatten(reverse ? guards.reverse() : guards)\n}\n\nfunction extractGuard (\n def,\n key\n) {\n if (typeof def !== 'function') {\n // extend now so that global mixins are applied.\n def = _Vue.extend(def);\n }\n return def.options[key]\n}\n\nfunction extractLeaveGuards (deactivated) {\n return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)\n}\n\nfunction extractUpdateHooks (updated) {\n return extractGuards(updated, 'beforeRouteUpdate', bindGuard)\n}\n\nfunction bindGuard (guard, instance) {\n if (instance) {\n return function boundRouteGuard () {\n return guard.apply(instance, arguments)\n }\n }\n}\n\nfunction extractEnterGuards (\n activated\n) {\n return extractGuards(\n activated,\n 'beforeRouteEnter',\n function (guard, _, match, key) {\n return bindEnterGuard(guard, match, key)\n }\n )\n}\n\nfunction bindEnterGuard (\n guard,\n match,\n key\n) {\n return function routeEnterGuard (to, from, next) {\n return guard(to, from, function (cb) {\n if (typeof cb === 'function') {\n if (!match.enteredCbs[key]) {\n match.enteredCbs[key] = [];\n }\n match.enteredCbs[key].push(cb);\n }\n next(cb);\n })\n }\n}\n\n/* */\n\nvar HTML5History = /*@__PURE__*/(function (History) {\n function HTML5History (router, base) {\n History.call(this, router, base);\n\n this._startLocation = getLocation(this.base);\n }\n\n if ( History ) HTML5History.__proto__ = History;\n HTML5History.prototype = Object.create( History && History.prototype );\n HTML5History.prototype.constructor = HTML5History;\n\n HTML5History.prototype.setupListeners = function setupListeners () {\n var this$1$1 = this;\n\n if (this.listeners.length > 0) {\n return\n }\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n this.listeners.push(setupScroll());\n }\n\n var handleRoutingEvent = function () {\n var current = this$1$1.current;\n\n // Avoiding first `popstate` event dispatched in some browsers but first\n // history route not updated since async guard at the same time.\n var location = getLocation(this$1$1.base);\n if (this$1$1.current === START && location === this$1$1._startLocation) {\n return\n }\n\n this$1$1.transitionTo(location, function (route) {\n if (supportsScroll) {\n handleScroll(router, route, current, true);\n }\n });\n };\n window.addEventListener('popstate', handleRoutingEvent);\n this.listeners.push(function () {\n window.removeEventListener('popstate', handleRoutingEvent);\n });\n };\n\n HTML5History.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HTML5History.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n pushState(cleanPath(this$1$1.base + route.fullPath));\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n replaceState(cleanPath(this$1$1.base + route.fullPath));\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.ensureURL = function ensureURL (push) {\n if (getLocation(this.base) !== this.current.fullPath) {\n var current = cleanPath(this.base + this.current.fullPath);\n push ? pushState(current) : replaceState(current);\n }\n };\n\n HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {\n return getLocation(this.base)\n };\n\n return HTML5History;\n}(History));\n\nfunction getLocation (base) {\n var path = window.location.pathname;\n var pathLowerCase = path.toLowerCase();\n var baseLowerCase = base.toLowerCase();\n // base=\"/a\" shouldn't turn path=\"/app\" into \"/a/pp\"\n // https://github.com/vuejs/vue-router/issues/3555\n // so we ensure the trailing slash in the base\n if (base && ((pathLowerCase === baseLowerCase) ||\n (pathLowerCase.indexOf(cleanPath(baseLowerCase + '/')) === 0))) {\n path = path.slice(base.length);\n }\n return (path || '/') + window.location.search + window.location.hash\n}\n\n/* */\n\nvar HashHistory = /*@__PURE__*/(function (History) {\n function HashHistory (router, base, fallback) {\n History.call(this, router, base);\n // check history fallback deeplinking\n if (fallback && checkFallback(this.base)) {\n return\n }\n ensureSlash();\n }\n\n if ( History ) HashHistory.__proto__ = History;\n HashHistory.prototype = Object.create( History && History.prototype );\n HashHistory.prototype.constructor = HashHistory;\n\n // this is delayed until the app mounts\n // to avoid the hashchange listener being fired too early\n HashHistory.prototype.setupListeners = function setupListeners () {\n var this$1$1 = this;\n\n if (this.listeners.length > 0) {\n return\n }\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n this.listeners.push(setupScroll());\n }\n\n var handleRoutingEvent = function () {\n var current = this$1$1.current;\n if (!ensureSlash()) {\n return\n }\n this$1$1.transitionTo(getHash(), function (route) {\n if (supportsScroll) {\n handleScroll(this$1$1.router, route, current, true);\n }\n if (!supportsPushState) {\n replaceHash(route.fullPath);\n }\n });\n };\n var eventType = supportsPushState ? 'popstate' : 'hashchange';\n window.addEventListener(\n eventType,\n handleRoutingEvent\n );\n this.listeners.push(function () {\n window.removeEventListener(eventType, handleRoutingEvent);\n });\n };\n\n HashHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n pushHash(route.fullPath);\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n replaceHash(route.fullPath);\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HashHistory.prototype.ensureURL = function ensureURL (push) {\n var current = this.current.fullPath;\n if (getHash() !== current) {\n push ? pushHash(current) : replaceHash(current);\n }\n };\n\n HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n return getHash()\n };\n\n return HashHistory;\n}(History));\n\nfunction checkFallback (base) {\n var location = getLocation(base);\n if (!/^\\/#/.test(location)) {\n window.location.replace(cleanPath(base + '/#' + location));\n return true\n }\n}\n\nfunction ensureSlash () {\n var path = getHash();\n if (path.charAt(0) === '/') {\n return true\n }\n replaceHash('/' + path);\n return false\n}\n\nfunction getHash () {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var index = href.indexOf('#');\n // empty path\n if (index < 0) { return '' }\n\n href = href.slice(index + 1);\n\n return href\n}\n\nfunction getUrl (path) {\n var href = window.location.href;\n var i = href.indexOf('#');\n var base = i >= 0 ? href.slice(0, i) : href;\n return (base + \"#\" + path)\n}\n\nfunction pushHash (path) {\n if (supportsPushState) {\n pushState(getUrl(path));\n } else {\n window.location.hash = path;\n }\n}\n\nfunction replaceHash (path) {\n if (supportsPushState) {\n replaceState(getUrl(path));\n } else {\n window.location.replace(getUrl(path));\n }\n}\n\n/* */\n\nvar AbstractHistory = /*@__PURE__*/(function (History) {\n function AbstractHistory (router, base) {\n History.call(this, router, base);\n this.stack = [];\n this.index = -1;\n }\n\n if ( History ) AbstractHistory.__proto__ = History;\n AbstractHistory.prototype = Object.create( History && History.prototype );\n AbstractHistory.prototype.constructor = AbstractHistory;\n\n AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index + 1).concat(route);\n this$1$1.index++;\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index).concat(route);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.go = function go (n) {\n var this$1$1 = this;\n\n var targetIndex = this.index + n;\n if (targetIndex < 0 || targetIndex >= this.stack.length) {\n return\n }\n var route = this.stack[targetIndex];\n this.confirmTransition(\n route,\n function () {\n var prev = this$1$1.current;\n this$1$1.index = targetIndex;\n this$1$1.updateRoute(route);\n this$1$1.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n },\n function (err) {\n if (isNavigationFailure(err, NavigationFailureType.duplicated)) {\n this$1$1.index = targetIndex;\n }\n }\n );\n };\n\n AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n var current = this.stack[this.stack.length - 1];\n return current ? current.fullPath : '/'\n };\n\n AbstractHistory.prototype.ensureURL = function ensureURL () {\n // noop\n };\n\n return AbstractHistory;\n}(History));\n\n/* */\n\n\n\nvar VueRouter = function VueRouter (options) {\n if ( options === void 0 ) options = {};\n\n if (process.env.NODE_ENV !== 'production') {\n warn(this instanceof VueRouter, \"Router must be called with the new operator.\");\n }\n this.app = null;\n this.apps = [];\n this.options = options;\n this.beforeHooks = [];\n this.resolveHooks = [];\n this.afterHooks = [];\n this.matcher = createMatcher(options.routes || [], this);\n\n var mode = options.mode || 'hash';\n this.fallback =\n mode === 'history' && !supportsPushState && options.fallback !== false;\n if (this.fallback) {\n mode = 'hash';\n }\n if (!inBrowser) {\n mode = 'abstract';\n }\n this.mode = mode;\n\n switch (mode) {\n case 'history':\n this.history = new HTML5History(this, options.base);\n break\n case 'hash':\n this.history = new HashHistory(this, options.base, this.fallback);\n break\n case 'abstract':\n this.history = new AbstractHistory(this, options.base);\n break\n default:\n if (process.env.NODE_ENV !== 'production') {\n assert(false, (\"invalid mode: \" + mode));\n }\n }\n};\n\nvar prototypeAccessors = { currentRoute: { configurable: true } };\n\nVueRouter.prototype.match = function match (raw, current, redirectedFrom) {\n return this.matcher.match(raw, current, redirectedFrom)\n};\n\nprototypeAccessors.currentRoute.get = function () {\n return this.history && this.history.current\n};\n\nVueRouter.prototype.init = function init (app /* Vue component instance */) {\n var this$1$1 = this;\n\n process.env.NODE_ENV !== 'production' &&\n assert(\n install.installed,\n \"not installed. Make sure to call `Vue.use(VueRouter)` \" +\n \"before creating root instance.\"\n );\n\n this.apps.push(app);\n\n // set up app destroyed handler\n // https://github.com/vuejs/vue-router/issues/2639\n app.$once('hook:destroyed', function () {\n // clean out app from this.apps array once destroyed\n var index = this$1$1.apps.indexOf(app);\n if (index > -1) { this$1$1.apps.splice(index, 1); }\n // ensure we still have a main app or null if no apps\n // we do not release the router so it can be reused\n if (this$1$1.app === app) { this$1$1.app = this$1$1.apps[0] || null; }\n\n if (!this$1$1.app) { this$1$1.history.teardown(); }\n });\n\n // main app previously initialized\n // return as we don't need to set up new history listener\n if (this.app) {\n return\n }\n\n this.app = app;\n\n var history = this.history;\n\n if (history instanceof HTML5History || history instanceof HashHistory) {\n var handleInitialScroll = function (routeOrError) {\n var from = history.current;\n var expectScroll = this$1$1.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll && 'fullPath' in routeOrError) {\n handleScroll(this$1$1, routeOrError, from, false);\n }\n };\n var setupListeners = function (routeOrError) {\n history.setupListeners();\n handleInitialScroll(routeOrError);\n };\n history.transitionTo(\n history.getCurrentLocation(),\n setupListeners,\n setupListeners\n );\n }\n\n history.listen(function (route) {\n this$1$1.apps.forEach(function (app) {\n app._route = route;\n });\n });\n};\n\nVueRouter.prototype.beforeEach = function beforeEach (fn) {\n return registerHook(this.beforeHooks, fn)\n};\n\nVueRouter.prototype.beforeResolve = function beforeResolve (fn) {\n return registerHook(this.resolveHooks, fn)\n};\n\nVueRouter.prototype.afterEach = function afterEach (fn) {\n return registerHook(this.afterHooks, fn)\n};\n\nVueRouter.prototype.onReady = function onReady (cb, errorCb) {\n this.history.onReady(cb, errorCb);\n};\n\nVueRouter.prototype.onError = function onError (errorCb) {\n this.history.onError(errorCb);\n};\n\nVueRouter.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1$1.history.push(location, resolve, reject);\n })\n } else {\n this.history.push(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1$1.history.replace(location, resolve, reject);\n })\n } else {\n this.history.replace(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.go = function go (n) {\n this.history.go(n);\n};\n\nVueRouter.prototype.back = function back () {\n this.go(-1);\n};\n\nVueRouter.prototype.forward = function forward () {\n this.go(1);\n};\n\nVueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {\n var route = to\n ? to.matched\n ? to\n : this.resolve(to).route\n : this.currentRoute;\n if (!route) {\n return []\n }\n return [].concat.apply(\n [],\n route.matched.map(function (m) {\n return Object.keys(m.components).map(function (key) {\n return m.components[key]\n })\n })\n )\n};\n\nVueRouter.prototype.resolve = function resolve (\n to,\n current,\n append\n) {\n current = current || this.history.current;\n var location = normalizeLocation(to, current, append, this);\n var route = this.match(location, current);\n var fullPath = route.redirectedFrom || route.fullPath;\n var base = this.history.base;\n var href = createHref(base, fullPath, this.mode);\n return {\n location: location,\n route: route,\n href: href,\n // for backwards compat\n normalizedTo: location,\n resolved: route\n }\n};\n\nVueRouter.prototype.getRoutes = function getRoutes () {\n return this.matcher.getRoutes()\n};\n\nVueRouter.prototype.addRoute = function addRoute (parentOrRoute, route) {\n this.matcher.addRoute(parentOrRoute, route);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nVueRouter.prototype.addRoutes = function addRoutes (routes) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.');\n }\n this.matcher.addRoutes(routes);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nObject.defineProperties( VueRouter.prototype, prototypeAccessors );\n\nvar VueRouter$1 = VueRouter;\n\nfunction registerHook (list, fn) {\n list.push(fn);\n return function () {\n var i = list.indexOf(fn);\n if (i > -1) { list.splice(i, 1); }\n }\n}\n\nfunction createHref (base, fullPath, mode) {\n var path = mode === 'hash' ? '#' + fullPath : fullPath;\n return base ? cleanPath(base + '/' + path) : path\n}\n\n// We cannot remove this as it would be a breaking change\nVueRouter.install = install;\nVueRouter.version = '3.6.5';\nVueRouter.isNavigationFailure = isNavigationFailure;\nVueRouter.NavigationFailureType = NavigationFailureType;\nVueRouter.START_LOCATION = START;\n\nif (inBrowser && window.Vue) {\n window.Vue.use(VueRouter);\n}\n\nvar version = '3.6.5';\n\nexport { NavigationFailureType, Link as RouterLink, View as RouterView, START as START_LOCATION, VueRouter$1 as default, isNavigationFailure, version };\n","/*!\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: GPL-3.0-or-later\n */\n/**\n * @module public\n */\nimport { loadState } from '@nextcloud/initial-state';\n/**\n * Check if the current page is on a public share\n */\nexport function isPublicShare() {\n // check both the new initial state version and fallback to legacy input\n return (loadState('files_sharing', 'isPublic', null)\n ?? document.querySelector('input#isPublic[type=\"hidden\"][name=\"isPublic\"][value=\"1\"]') !== null);\n}\n/**\n * Get the sharing token for the current public share\n */\nexport function getSharingToken() {\n return (loadState('files_sharing', 'sharingToken', null)\n ?? document.querySelector('input#sharingToken[type=\"hidden\"]')?.value\n ?? null);\n}\n","import { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nwindow._vue_richtext_widgets ??= {};\nwindow._registerWidget ??= (id, callback, onDestroy, props) => {\n registerWidget(id, callback, onDestroy, props);\n};\nfunction registerWidget(id, callback, onDestroy = () => {\n}, props) {\n const propsWithDefaults = {\n hasInteractiveView: true,\n fullWidth: false,\n isResizable: false,\n ...props\n };\n if (window._vue_richtext_widgets[id]) {\n logger.error(`[ReferencePicker]: Widget for id ${id} already registered`);\n return;\n }\n window._vue_richtext_widgets[id] = {\n id,\n callback,\n onDestroy,\n ...propsWithDefaults\n };\n}\nfunction renderWidget(el, options) {\n const { richObjectType, richObject, accessible, interactive } = options;\n if (richObjectType === \"open-graph\") {\n return;\n }\n if (!window._vue_richtext_widgets[richObjectType]) {\n logger.error(\"Widget for rich object type \" + richObjectType + \" not registered\");\n return;\n }\n window._vue_richtext_widgets[richObjectType].callback(el, { richObjectType, richObject, accessible, interactive });\n}\nfunction destroyWidget(richObjectType, el) {\n if (richObjectType === \"open-graph\") {\n return;\n }\n if (!window._vue_richtext_widgets[richObjectType]) {\n return;\n }\n window._vue_richtext_widgets[richObjectType].onDestroy(el);\n}\nfunction isWidgetRegistered(id) {\n return !!window._vue_richtext_widgets[id];\n}\nfunction hasInteractiveView(id) {\n return !!window._vue_richtext_widgets[id]?.hasInteractiveView;\n}\nfunction hasFullWidth(id) {\n return !!window._vue_richtext_widgets[id]?.fullWidth;\n}\nfunction isResizable(id) {\n return !!window._vue_richtext_widgets[id]?.isResizable;\n}\nexport {\n renderWidget as a,\n isResizable as b,\n hasFullWidth as c,\n destroyWidget as d,\n hasInteractiveView as h,\n isWidgetRegistered as i,\n registerWidget as r\n};\n//# sourceMappingURL=widgets-XxirL-2f.mjs.map\n","import '../assets/NcReferenceWidget-ZOKRsrMS.css';\nimport { useElementSize, useIntersectionObserver } from \"@vueuse/core\";\nimport { ref, nextTick } from \"vue\";\nimport { RouterLink } from \"vue-router\";\nimport { N as NcButton } from \"./NcButton-DAGirW_B.mjs\";\nimport { r as register, l as t24, a as t } from \"./_l10n-Dv1YKfKS.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { d as destroyWidget, a as renderWidget, i as isWidgetRegistered, h as hasInteractiveView, b as isResizable, c as hasFullWidth } from \"./widgets-XxirL-2f.mjs\";\nimport { g as getRoute } from \"./autolink-BoBR7PZC.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t24);\nconst IDLE_TIMEOUT = 3 * 60 * 1e3;\nconst RESIZE_KEYBOARD_STEP = 10;\nconst _sfc_main = {\n name: \"NcReferenceWidget\",\n components: {\n NcButton\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n reference: {\n type: Object,\n required: true\n },\n interactive: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n interactiveOptIn: {\n type: Boolean,\n default: false\n }\n },\n setup() {\n const widgetId = `nc-reference-widget-${createElementId()}`;\n const isVisible = ref(false);\n const widgetRoot = ref();\n const customWidget = ref();\n const { width } = useElementSize(widgetRoot);\n const { height: customWidgetHeight } = useElementSize(customWidget);\n useIntersectionObserver(widgetRoot, ([entry]) => {\n nextTick(() => {\n isVisible.value = entry.isIntersecting;\n });\n });\n return {\n width,\n isVisible,\n widgetRoot,\n customWidget,\n customWidgetHeight,\n widgetId,\n RESIZE_KEYBOARD_STEP\n };\n },\n data() {\n return {\n showInteractive: false,\n rendered: false,\n idleTimeout: null,\n isResizing: false,\n resizedHeight: null,\n resizeStartY: 0,\n resizeStartHeight: 0,\n resizeMinHeight: 100,\n resizeMaxHeight: window.innerHeight - 120\n };\n },\n computed: {\n isInteractive() {\n return !this.interactiveOptIn && this.interactive || this.showInteractive;\n },\n hasFullWidth() {\n return hasFullWidth(this.reference.richObjectType);\n },\n isResizable() {\n return isResizable(this.reference.richObjectType);\n },\n hasCustomWidget() {\n return isWidgetRegistered(this.reference.richObjectType);\n },\n customWidgetStyle() {\n if (!this.resizedHeight) {\n return null;\n }\n return { height: `${this.resizedHeight}px !important` };\n },\n ariaValueNow() {\n return Math.round(this.resizedHeight ?? this.customWidgetHeight);\n },\n hasInteractiveView() {\n return isWidgetRegistered(this.reference.richObjectType) && hasInteractiveView(this.reference.richObjectType);\n },\n noAccess() {\n return this.reference && !this.reference.accessible;\n },\n descriptionStyle() {\n if (this.numberOfLines === 0) {\n return {\n display: \"none\"\n };\n }\n const lineClamp = this.numberOfLines;\n return {\n lineClamp,\n webkitLineClamp: lineClamp\n };\n },\n numberOfLines() {\n const lineCountOffsets = [250, 550, 650, Infinity];\n return lineCountOffsets.findIndex((max) => this.width < max);\n },\n compactLink() {\n const link = this.reference.openGraphObject.link;\n if (!link) {\n return \"\";\n }\n if (link.startsWith(\"https://\")) {\n return link.substring(8);\n }\n if (link.startsWith(\"http://\")) {\n return link.substring(7);\n }\n return link;\n },\n route() {\n return getRoute(this.$router, this.reference.openGraphObject.link);\n },\n referenceWidgetLinkComponent() {\n return this.route ? RouterLink : \"a\";\n },\n referenceWidgetLinkProps() {\n return this.route ? { to: this.route } : { href: this.reference.openGraphObject.link, target: \"_blank\" };\n }\n },\n watch: {\n isVisible: {\n handler(val) {\n if (!val) {\n this.idleTimeout = setTimeout(() => {\n if (!this.isVisible) {\n this.destroyWidget();\n }\n }, IDLE_TIMEOUT);\n return;\n }\n if (this.idleTimeout) {\n clearTimeout(this.idleTimeout);\n this.idleTimeout = null;\n }\n if (!this.rendered) {\n this.renderWidget();\n }\n },\n immediate: true\n }\n },\n beforeDestroy() {\n if (this.idleTimeout) {\n clearTimeout(this.idleTimeout);\n this.idleTimout = null;\n }\n this.stopResize();\n this.destroyWidget();\n },\n methods: {\n t,\n enableInteractive() {\n this.showInteractive = true;\n this.renderWidget();\n },\n renderWidget() {\n if (!this.$refs.customWidgetContent) {\n return;\n }\n if (this?.reference?.richObjectType === \"open-graph\") {\n return;\n }\n this.$refs.customWidgetContent.innerHTML = \"\";\n const widget = document.createElement(\"div\");\n widget.style = \"width: 100%;\";\n this.$refs.customWidgetContent.appendChild(widget);\n this.$nextTick(() => {\n renderWidget(widget, {\n ...this.reference,\n interactive: this.isInteractive\n });\n this.rendered = true;\n });\n },\n destroyWidget() {\n if (this.rendered) {\n destroyWidget(this.reference.richObjectType, this.$el);\n this.rendered = false;\n }\n },\n initResizeLimits() {\n const widgetEl = this.$refs.customWidgetContent?.firstElementChild;\n if (widgetEl) {\n const computedStyle = window.getComputedStyle(widgetEl);\n const parsedMin = parseFloat(computedStyle.minHeight);\n const parsedMax = parseFloat(computedStyle.maxHeight);\n this.resizeMinHeight = parsedMin > 0 ? parsedMin : 100;\n this.resizeMaxHeight = Number.isFinite(parsedMax) && parsedMax > 0 ? parsedMax : window.innerHeight - 120;\n } else {\n this.resizeMinHeight = 100;\n this.resizeMaxHeight = window.innerHeight - 120;\n }\n },\n startResize(event) {\n if (!this.isResizable || !this.$refs.customWidget) {\n return;\n }\n this.initResizeLimits();\n this.isResizing = true;\n this.resizeStartY = event.clientY;\n this.resizeStartHeight = this.$refs.customWidget.getBoundingClientRect().height;\n window.addEventListener(\"pointermove\", this.onResize);\n window.addEventListener(\"pointerup\", this.stopResize);\n },\n onResizeKeydown(delta) {\n if (!this.isResizable || !this.$refs.customWidget) {\n return;\n }\n this.initResizeLimits();\n const currentHeight = this.resizedHeight ?? this.resizeStartHeight;\n const next = currentHeight + delta;\n this.resizedHeight = Math.min(this.resizeMaxHeight, Math.max(this.resizeMinHeight, next));\n },\n onResize(event) {\n if (!this.isResizing || !this.$refs.customWidget) {\n return;\n }\n const deltaY = event.clientY - this.resizeStartY;\n this.resizedHeight = Math.min(this.resizeMaxHeight, Math.max(this.resizeMinHeight, this.resizeStartHeight + deltaY));\n },\n stopResize() {\n if (!this.isResizing) {\n return;\n }\n this.isResizing = false;\n window.removeEventListener(\"pointermove\", this.onResize);\n window.removeEventListener(\"pointerup\", this.stopResize);\n }\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { ref: \"widgetRoot\", class: { \"toggle-interactive\": _vm.hasInteractiveView && !_vm.isInteractive } }, [_vm.reference && _vm.hasCustomWidget ? _c(\"div\", { ref: \"customWidget\", staticClass: \"widget-custom\", class: {\n \"full-width\": _vm.hasFullWidth\n }, style: _vm.customWidgetStyle, attrs: { \"id\": _vm.widgetId } }, [_c(\"div\", { ref: \"customWidgetContent\", staticClass: \"widget-custom__content\" }), _vm.isResizable ? _c(\"div\", { staticClass: \"widget-custom__resize-handle\", attrs: { \"role\": \"slider\", \"tabindex\": \"0\", \"aria-orientation\": \"vertical\", \"aria-label\": _vm.t(\"Widget height\"), \"aria-valuenow\": _vm.ariaValueNow, \"aria-valuemin\": _vm.resizeMinHeight, \"aria-valuemax\": _vm.resizeMaxHeight, \"aria-controls\": _vm.widgetId }, on: { \"pointerdown\": function($event) {\n $event.stopPropagation();\n $event.preventDefault();\n return _vm.startResize.apply(null, arguments);\n }, \"keydown\": [function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"up\", 38, $event.key, [\"Up\", \"ArrowUp\"])) return null;\n $event.stopPropagation();\n $event.preventDefault();\n return _vm.onResizeKeydown(-_vm.RESIZE_KEYBOARD_STEP);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"down\", 40, $event.key, [\"Down\", \"ArrowDown\"])) return null;\n $event.stopPropagation();\n $event.preventDefault();\n return _vm.onResizeKeydown(_vm.RESIZE_KEYBOARD_STEP);\n }] } }) : _vm._e()]) : !_vm.noAccess && _vm.reference && _vm.reference.openGraphObject && !_vm.hasCustomWidget ? _c(_vm.referenceWidgetLinkComponent, _vm._b({ tag: \"component\", staticClass: \"widget-default\", attrs: { \"rel\": \"noopener noreferrer\" } }, \"component\", _vm.referenceWidgetLinkProps, false), [_vm.reference.openGraphObject.thumb ? _c(\"img\", { staticClass: \"widget-default--image\", attrs: { \"src\": _vm.reference.openGraphObject.thumb } }) : _vm._e(), _c(\"div\", { staticClass: \"widget-default--details\" }, [_c(\"p\", { staticClass: \"widget-default--name\" }, [_vm._v(\" \" + _vm._s(_vm.reference.openGraphObject.name) + \" \")]), _c(\"p\", { staticClass: \"widget-default--description\", style: _vm.descriptionStyle }, [_vm._v(\" \" + _vm._s(_vm.reference.openGraphObject.description) + \" \")]), _c(\"p\", { staticClass: \"widget-default--link\" }, [_vm._v(\" \" + _vm._s(_vm.compactLink) + \" \")])])]) : _vm._e(), _vm.interactiveOptIn && _vm.hasInteractiveView && !_vm.isInteractive ? _c(\"NcButton\", { staticClass: \"toggle-interactive--button\", on: { \"click\": _vm.enableInteractive } }, [_vm._v(\" \" + _vm._s(_vm.t(\"Enable interactive view\")) + \" \")]) : _vm._e()], 1);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"dc80bc03\"\n);\nconst NcReferenceWidget = __component__.exports;\nexport {\n NcReferenceWidget as N\n};\n//# sourceMappingURL=NcReferenceWidget-C0US5iQ0.mjs.map\n","import '../assets/NcRichText-D0xtzoWq.css';\nimport { toString } from \"mdast-util-to-string\";\nimport rehypeExternalLinks from \"rehype-external-links\";\nimport rehype2react from \"rehype-react\";\nimport breaks from \"remark-breaks\";\nimport remarkParse from \"remark-parse\";\nimport remark2rehype from \"remark-rehype\";\nimport remarkUnlinkProtocols from \"remark-unlink-protocols\";\nimport { unified } from \"unified\";\nimport { defineComponent, ref } from \"vue\";\nimport { RouterLink } from \"vue-router\";\nimport { N as NcCheckboxRadioSwitch } from \"./NcCheckboxRadioSwitch-flYu6ojL.mjs\";\nimport { getCurrentUser } from \"@nextcloud/auth\";\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport { getSharingToken } from \"@nextcloud/sharing/public\";\nimport { N as NcReferenceWidget } from \"./NcReferenceWidget-C0US5iQ0.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { U as URL_PATTERN, p as parseUrl, r as remarkAutolink, g as getRoute, N as NcRichTextExternalLink } from \"./autolink-BoBR7PZC.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { N as NcButton } from \"./NcButton-DAGirW_B.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-Bui9PhAS.mjs\";\nimport { u as useCopy } from \"./useCopy-B3ugZOgV.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { u } from \"unist-builder\";\nimport { visitParents, EXIT, SKIP } from \"unist-util-visit-parents\";\nconst _sfc_main$2 = {\n name: \"NcReferenceList\",\n components: {\n NcReferenceWidget\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n text: {\n type: String,\n default: \"\"\n },\n referenceData: {\n type: Array,\n default: null\n },\n limit: {\n type: Number,\n default: 1\n },\n displayFallback: {\n type: Boolean,\n default: false\n },\n interactive: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n interactiveOptIn: {\n type: Boolean,\n default: false\n }\n },\n data() {\n return {\n references: null,\n loading: true\n };\n },\n computed: {\n isVisible() {\n return this.loading || this.displayedReferences.length !== 0;\n },\n values() {\n if (this.referenceData) {\n return this.referenceData;\n }\n if (this.displayFallback && !this.loading && !this.references) {\n return [this.fallbackReference];\n }\n return this.references ? Object.values(this.references) : [];\n },\n firstReference() {\n return this.values[0] ?? null;\n },\n displayedReferences() {\n return this.values.filter(Boolean).slice(0, this.limit);\n },\n fallbackReference() {\n return {\n accessible: true,\n openGraphObject: {\n id: this.text,\n link: this.text,\n name: this.text\n },\n richObjectType: \"open-graph\"\n };\n }\n },\n watch: {\n text: \"fetch\"\n },\n mounted() {\n this.fetch();\n },\n methods: {\n fetch() {\n this.loading = true;\n if (this.referenceData) {\n this.references = null;\n this.loading = false;\n return;\n }\n if (!new RegExp(URL_PATTERN).exec(this.text)) {\n this.references = null;\n this.loading = false;\n return;\n }\n this.resolve().then((response) => {\n this.references = response.data.ocs.data.references;\n this.loading = false;\n this.$emit(\"loaded\");\n }).catch((error) => {\n logger.error(\"Failed to extract references\", { error });\n this.loading = false;\n this.$emit(\"loaded\");\n });\n },\n resolve() {\n const match = new RegExp(URL_PATTERN).exec(this.text.trim());\n const isPublic = getCurrentUser() === null;\n if (this.limit === 1 && match) {\n return isPublic ? axios.get(generateOcsUrl(\"references/resolvePublic\") + `?reference=${encodeURIComponent(match[0])}&sharingToken=${getSharingToken()}`) : axios.get(generateOcsUrl(\"references/resolve\") + `?reference=${encodeURIComponent(match[0])}`);\n }\n return isPublic ? axios.post(generateOcsUrl(\"references/extractPublic\"), {\n text: this.text,\n resolve: true,\n limit: this.limit,\n sharingToken: getSharingToken()\n }) : axios.post(generateOcsUrl(\"references/extract\"), {\n text: this.text,\n resolve: true,\n limit: this.limit\n });\n }\n }\n};\nvar _sfc_render$2 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _vm.isVisible ? _c(\"div\", { staticClass: \"widgets--list\", class: { \"icon-loading\": _vm.loading } }, _vm._l(_vm.displayedReferences, function(reference) {\n return _c(\"NcReferenceWidget\", { key: reference.openGraphObject?.id, attrs: { \"reference\": reference, \"interactive\": _vm.interactive, \"interactive-opt-in\": _vm.interactiveOptIn } });\n }), 1) : _vm._e();\n};\nvar _sfc_staticRenderFns$2 = [];\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$2,\n _sfc_render$2,\n _sfc_staticRenderFns$2,\n false,\n null,\n \"a50e616b\"\n);\nconst NcReferenceList = __component__$2.exports;\nfunction ccount(value, character) {\n const source = String(value);\n if (typeof character !== \"string\") {\n throw new TypeError(\"Expected character\");\n }\n let count = 0;\n let index = source.indexOf(character);\n while (index !== -1) {\n count++;\n index = source.indexOf(character, index + character.length);\n }\n return count;\n}\nfunction ok$1() {\n}\nconst asciiAlpha = regexCheck(/[A-Za-z]/);\nconst asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\nfunction asciiControl(code2) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code2 !== null && (code2 < 32 || code2 === 127)\n );\n}\nfunction markdownLineEnding(code2) {\n return code2 !== null && code2 < -2;\n}\nfunction markdownLineEndingOrSpace(code2) {\n return code2 !== null && (code2 < 0 || code2 === 32);\n}\nfunction markdownSpace(code2) {\n return code2 === -2 || code2 === -1 || code2 === 32;\n}\nconst unicodePunctuation = regexCheck(new RegExp(\"\\\\p{P}|\\\\p{S}\", \"u\"));\nconst unicodeWhitespace = regexCheck(/\\s/);\nfunction regexCheck(regex) {\n return check;\n function check(code2) {\n return code2 !== null && code2 > -1 && regex.test(String.fromCharCode(code2));\n }\n}\nfunction escapeStringRegexp(string) {\n if (typeof string !== \"string\") {\n throw new TypeError(\"Expected a string\");\n }\n return string.replace(/[|\\\\{}()[\\]^$+*?.]/g, \"\\\\$&\").replace(/-/g, \"\\\\x2d\");\n}\nconst convert = (\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n (function(test) {\n if (test === null || test === void 0) {\n return ok;\n }\n if (typeof test === \"function\") {\n return castFactory(test);\n }\n if (typeof test === \"object\") {\n return Array.isArray(test) ? anyFactory(test) : (\n // Cast because `ReadonlyArray` goes into the above but `isArray`\n // narrows to `Array`.\n propertiesFactory(\n /** @type {Props} */\n test\n )\n );\n }\n if (typeof test === \"string\") {\n return typeFactory(test);\n }\n throw new Error(\"Expected function, string, or object as test\");\n })\n);\nfunction anyFactory(tests) {\n const checks = [];\n let index = -1;\n while (++index < tests.length) {\n checks[index] = convert(tests[index]);\n }\n return castFactory(any);\n function any(...parameters) {\n let index2 = -1;\n while (++index2 < checks.length) {\n if (checks[index2].apply(this, parameters)) return true;\n }\n return false;\n }\n}\nfunction propertiesFactory(check) {\n const checkAsRecord = (\n /** @type {Record} */\n check\n );\n return castFactory(all);\n function all(node) {\n const nodeAsRecord = (\n /** @type {Record} */\n /** @type {unknown} */\n node\n );\n let key;\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false;\n }\n return true;\n }\n}\nfunction typeFactory(check) {\n return castFactory(type);\n function type(node) {\n return node && node.type === check;\n }\n}\nfunction castFactory(testFunction) {\n return check;\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) && testFunction.call(\n this,\n value,\n typeof index === \"number\" ? index : void 0,\n parent || void 0\n )\n );\n }\n}\nfunction ok() {\n return true;\n}\nfunction looksLikeANode(value) {\n return value !== null && typeof value === \"object\" && \"type\" in value;\n}\nfunction findAndReplace(tree, list2, options) {\n const settings = options || {};\n const ignored = convert(settings.ignore || []);\n const pairs = toPairs(list2);\n let pairIndex = -1;\n while (++pairIndex < pairs.length) {\n visitParents(tree, \"text\", visitor);\n }\n function visitor(node, parents) {\n let index = -1;\n let grandparent;\n while (++index < parents.length) {\n const parent = parents[index];\n const siblings = grandparent ? grandparent.children : void 0;\n if (ignored(\n parent,\n siblings ? siblings.indexOf(parent) : void 0,\n grandparent\n )) {\n return;\n }\n grandparent = parent;\n }\n if (grandparent) {\n return handler(node, parents);\n }\n }\n function handler(node, parents) {\n const parent = parents[parents.length - 1];\n const find = pairs[pairIndex][0];\n const replace2 = pairs[pairIndex][1];\n let start = 0;\n const siblings = parent.children;\n const index = siblings.indexOf(node);\n let change = false;\n let nodes = [];\n find.lastIndex = 0;\n let match = find.exec(node.value);\n while (match) {\n const position = match.index;\n const matchObject = {\n index: match.index,\n input: match.input,\n stack: [...parents, node]\n };\n let value = replace2(...match, matchObject);\n if (typeof value === \"string\") {\n value = value.length > 0 ? { type: \"text\", value } : void 0;\n }\n if (value === false) {\n find.lastIndex = position + 1;\n } else {\n if (start !== position) {\n nodes.push({\n type: \"text\",\n value: node.value.slice(start, position)\n });\n }\n if (Array.isArray(value)) {\n nodes.push(...value);\n } else if (value) {\n nodes.push(value);\n }\n start = position + match[0].length;\n change = true;\n }\n if (!find.global) {\n break;\n }\n match = find.exec(node.value);\n }\n if (change) {\n if (start < node.value.length) {\n nodes.push({ type: \"text\", value: node.value.slice(start) });\n }\n parent.children.splice(index, 1, ...nodes);\n } else {\n nodes = [node];\n }\n return index + nodes.length;\n }\n}\nfunction toPairs(tupleOrList) {\n const result = [];\n if (!Array.isArray(tupleOrList)) {\n throw new TypeError(\"Expected find and replace tuple or list of tuples\");\n }\n const list2 = !tupleOrList[0] || Array.isArray(tupleOrList[0]) ? tupleOrList : [tupleOrList];\n let index = -1;\n while (++index < list2.length) {\n const tuple = list2[index];\n result.push([toExpression(tuple[0]), toFunction(tuple[1])]);\n }\n return result;\n}\nfunction toExpression(find) {\n return typeof find === \"string\" ? new RegExp(escapeStringRegexp(find), \"g\") : find;\n}\nfunction toFunction(replace2) {\n return typeof replace2 === \"function\" ? replace2 : function() {\n return replace2;\n };\n}\nconst inConstruct = \"phrasing\";\nconst notInConstruct = [\"autolink\", \"link\", \"image\", \"label\"];\nfunction gfmAutolinkLiteralFromMarkdown() {\n return {\n transforms: [transformGfmAutolinkLiterals],\n enter: {\n literalAutolink: enterLiteralAutolink,\n literalAutolinkEmail: enterLiteralAutolinkValue,\n literalAutolinkHttp: enterLiteralAutolinkValue,\n literalAutolinkWww: enterLiteralAutolinkValue\n },\n exit: {\n literalAutolink: exitLiteralAutolink,\n literalAutolinkEmail: exitLiteralAutolinkEmail,\n literalAutolinkHttp: exitLiteralAutolinkHttp,\n literalAutolinkWww: exitLiteralAutolinkWww\n }\n };\n}\nfunction gfmAutolinkLiteralToMarkdown() {\n return {\n unsafe: [\n {\n character: \"@\",\n before: \"[+\\\\-.\\\\w]\",\n after: \"[\\\\-.\\\\w]\",\n inConstruct,\n notInConstruct\n },\n {\n character: \".\",\n before: \"[Ww]\",\n after: \"[\\\\-.\\\\w]\",\n inConstruct,\n notInConstruct\n },\n {\n character: \":\",\n before: \"[ps]\",\n after: \"\\\\/\",\n inConstruct,\n notInConstruct\n }\n ]\n };\n}\nfunction enterLiteralAutolink(token) {\n this.enter({ type: \"link\", title: null, url: \"\", children: [] }, token);\n}\nfunction enterLiteralAutolinkValue(token) {\n this.config.enter.autolinkProtocol.call(this, token);\n}\nfunction exitLiteralAutolinkHttp(token) {\n this.config.exit.autolinkProtocol.call(this, token);\n}\nfunction exitLiteralAutolinkWww(token) {\n this.config.exit.data.call(this, token);\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"link\");\n node.url = \"http://\" + this.sliceSerialize(token);\n}\nfunction exitLiteralAutolinkEmail(token) {\n this.config.exit.autolinkEmail.call(this, token);\n}\nfunction exitLiteralAutolink(token) {\n this.exit(token);\n}\nfunction transformGfmAutolinkLiterals(tree) {\n findAndReplace(\n tree,\n [\n [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n [/([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/g, findEmail]\n ],\n { ignore: [\"link\", \"linkReference\"] }\n );\n}\nfunction findUrl(_, protocol, domain2, path2, match) {\n let prefix = \"\";\n if (!previous(match)) {\n return false;\n }\n if (/^w/i.test(protocol)) {\n domain2 = protocol + domain2;\n protocol = \"\";\n prefix = \"http://\";\n }\n if (!isCorrectDomain(domain2)) {\n return false;\n }\n const parts = splitUrl(domain2 + path2);\n if (!parts[0]) return false;\n const result = {\n type: \"link\",\n title: null,\n url: prefix + protocol + parts[0],\n children: [{ type: \"text\", value: protocol + parts[0] }]\n };\n if (parts[1]) {\n return [result, { type: \"text\", value: parts[1] }];\n }\n return result;\n}\nfunction findEmail(_, atext, label, match) {\n if (\n // Not an expected previous character.\n !previous(match, true) || // Label ends in not allowed character.\n /[-\\d_]$/.test(label)\n ) {\n return false;\n }\n return {\n type: \"link\",\n title: null,\n url: \"mailto:\" + atext + \"@\" + label,\n children: [{ type: \"text\", value: atext + \"@\" + label }]\n };\n}\nfunction isCorrectDomain(domain2) {\n const parts = domain2.split(\".\");\n if (parts.length < 2 || parts[parts.length - 1] && (/_/.test(parts[parts.length - 1]) || !/[a-zA-Z\\d]/.test(parts[parts.length - 1])) || parts[parts.length - 2] && (/_/.test(parts[parts.length - 2]) || !/[a-zA-Z\\d]/.test(parts[parts.length - 2]))) {\n return false;\n }\n return true;\n}\nfunction splitUrl(url) {\n const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url);\n if (!trailExec) {\n return [url, void 0];\n }\n url = url.slice(0, trailExec.index);\n let trail2 = trailExec[0];\n let closingParenIndex = trail2.indexOf(\")\");\n const openingParens = ccount(url, \"(\");\n let closingParens = ccount(url, \")\");\n while (closingParenIndex !== -1 && openingParens > closingParens) {\n url += trail2.slice(0, closingParenIndex + 1);\n trail2 = trail2.slice(closingParenIndex + 1);\n closingParenIndex = trail2.indexOf(\")\");\n closingParens++;\n }\n return [url, trail2];\n}\nfunction previous(match, email) {\n const code2 = match.input.charCodeAt(match.index - 1);\n return (match.index === 0 || unicodeWhitespace(code2) || unicodePunctuation(code2)) && (!email || code2 !== 47);\n}\nfunction normalizeIdentifier(value) {\n return value.replace(/[\\t\\n\\r ]+/g, \" \").replace(/^ | $/g, \"\").toLowerCase().toUpperCase();\n}\nfootnoteReference.peek = footnoteReferencePeek;\nfunction gfmFootnoteFromMarkdown() {\n return {\n enter: {\n gfmFootnoteDefinition: enterFootnoteDefinition,\n gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n gfmFootnoteCall: enterFootnoteCall,\n gfmFootnoteCallString: enterFootnoteCallString\n },\n exit: {\n gfmFootnoteDefinition: exitFootnoteDefinition,\n gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n gfmFootnoteCall: exitFootnoteCall,\n gfmFootnoteCallString: exitFootnoteCallString\n }\n };\n}\nfunction gfmFootnoteToMarkdown() {\n return {\n // This is on by default already.\n unsafe: [{ character: \"[\", inConstruct: [\"phrasing\", \"label\", \"reference\"] }],\n handlers: { footnoteDefinition, footnoteReference }\n };\n}\nfunction enterFootnoteDefinition(token) {\n this.enter(\n { type: \"footnoteDefinition\", identifier: \"\", label: \"\", children: [] },\n token\n );\n}\nfunction enterFootnoteDefinitionLabelString() {\n this.buffer();\n}\nfunction exitFootnoteDefinitionLabelString(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"footnoteDefinition\");\n node.label = label;\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase();\n}\nfunction exitFootnoteDefinition(token) {\n this.exit(token);\n}\nfunction enterFootnoteCall(token) {\n this.enter({ type: \"footnoteReference\", identifier: \"\", label: \"\" }, token);\n}\nfunction enterFootnoteCallString() {\n this.buffer();\n}\nfunction exitFootnoteCallString(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"footnoteReference\");\n node.label = label;\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase();\n}\nfunction exitFootnoteCall(token) {\n this.exit(token);\n}\nfunction footnoteReference(node, _, state, info) {\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[^\");\n const exit2 = state.enter(\"footnoteReference\");\n const subexit = state.enter(\"reference\");\n value += tracker.move(\n state.safe(state.associationId(node), {\n ...tracker.current(),\n before: value,\n after: \"]\"\n })\n );\n subexit();\n exit2();\n value += tracker.move(\"]\");\n return value;\n}\nfunction footnoteReferencePeek() {\n return \"[\";\n}\nfunction footnoteDefinition(node, _, state, info) {\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[^\");\n const exit2 = state.enter(\"footnoteDefinition\");\n const subexit = state.enter(\"label\");\n value += tracker.move(\n state.safe(state.associationId(node), {\n ...tracker.current(),\n before: value,\n after: \"]\"\n })\n );\n subexit();\n value += tracker.move(\n \"]:\" + (node.children && node.children.length > 0 ? \" \" : \"\")\n );\n tracker.shift(4);\n value += tracker.move(\n state.indentLines(state.containerFlow(node, tracker.current()), map$2)\n );\n exit2();\n return value;\n}\nfunction map$2(line, index, blank) {\n if (index === 0) {\n return line;\n }\n return (blank ? \"\" : \" \") + line;\n}\nconst constructsWithoutStrikethrough = [\n \"autolink\",\n \"destinationLiteral\",\n \"destinationRaw\",\n \"reference\",\n \"titleQuote\",\n \"titleApostrophe\"\n];\nhandleDelete.peek = peekDelete;\nfunction gfmStrikethroughFromMarkdown() {\n return {\n canContainEols: [\"delete\"],\n enter: { strikethrough: enterStrikethrough },\n exit: { strikethrough: exitStrikethrough }\n };\n}\nfunction gfmStrikethroughToMarkdown() {\n return {\n unsafe: [\n {\n character: \"~\",\n inConstruct: \"phrasing\",\n notInConstruct: constructsWithoutStrikethrough\n }\n ],\n handlers: { delete: handleDelete }\n };\n}\nfunction enterStrikethrough(token) {\n this.enter({ type: \"delete\", children: [] }, token);\n}\nfunction exitStrikethrough(token) {\n this.exit(token);\n}\nfunction handleDelete(node, _, state, info) {\n const tracker = state.createTracker(info);\n const exit2 = state.enter(\"strikethrough\");\n let value = tracker.move(\"~~\");\n value += state.containerPhrasing(node, {\n ...tracker.current(),\n before: value,\n after: \"~\"\n });\n value += tracker.move(\"~~\");\n exit2();\n return value;\n}\nfunction peekDelete() {\n return \"~\";\n}\nfunction markdownTable(table, options = {}) {\n const align = (options.align || []).concat();\n const stringLength = options.stringLength || defaultStringLength;\n const alignments = [];\n const cellMatrix = [];\n const sizeMatrix = [];\n const longestCellByColumn = [];\n let mostCellsPerRow = 0;\n let rowIndex = -1;\n while (++rowIndex < table.length) {\n const row2 = [];\n const sizes2 = [];\n let columnIndex2 = -1;\n if (table[rowIndex].length > mostCellsPerRow) {\n mostCellsPerRow = table[rowIndex].length;\n }\n while (++columnIndex2 < table[rowIndex].length) {\n const cell = serialize(table[rowIndex][columnIndex2]);\n if (options.alignDelimiters !== false) {\n const size = stringLength(cell);\n sizes2[columnIndex2] = size;\n if (longestCellByColumn[columnIndex2] === void 0 || size > longestCellByColumn[columnIndex2]) {\n longestCellByColumn[columnIndex2] = size;\n }\n }\n row2.push(cell);\n }\n cellMatrix[rowIndex] = row2;\n sizeMatrix[rowIndex] = sizes2;\n }\n let columnIndex = -1;\n if (typeof align === \"object\" && \"length\" in align) {\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = toAlignment(align[columnIndex]);\n }\n } else {\n const code2 = toAlignment(align);\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = code2;\n }\n }\n columnIndex = -1;\n const row = [];\n const sizes = [];\n while (++columnIndex < mostCellsPerRow) {\n const code2 = alignments[columnIndex];\n let before = \"\";\n let after = \"\";\n if (code2 === 99) {\n before = \":\";\n after = \":\";\n } else if (code2 === 108) {\n before = \":\";\n } else if (code2 === 114) {\n after = \":\";\n }\n let size = options.alignDelimiters === false ? 1 : Math.max(\n 1,\n longestCellByColumn[columnIndex] - before.length - after.length\n );\n const cell = before + \"-\".repeat(size) + after;\n if (options.alignDelimiters !== false) {\n size = before.length + size + after.length;\n if (size > longestCellByColumn[columnIndex]) {\n longestCellByColumn[columnIndex] = size;\n }\n sizes[columnIndex] = size;\n }\n row[columnIndex] = cell;\n }\n cellMatrix.splice(1, 0, row);\n sizeMatrix.splice(1, 0, sizes);\n rowIndex = -1;\n const lines = [];\n while (++rowIndex < cellMatrix.length) {\n const row2 = cellMatrix[rowIndex];\n const sizes2 = sizeMatrix[rowIndex];\n columnIndex = -1;\n const line = [];\n while (++columnIndex < mostCellsPerRow) {\n const cell = row2[columnIndex] || \"\";\n let before = \"\";\n let after = \"\";\n if (options.alignDelimiters !== false) {\n const size = longestCellByColumn[columnIndex] - (sizes2[columnIndex] || 0);\n const code2 = alignments[columnIndex];\n if (code2 === 114) {\n before = \" \".repeat(size);\n } else if (code2 === 99) {\n if (size % 2) {\n before = \" \".repeat(size / 2 + 0.5);\n after = \" \".repeat(size / 2 - 0.5);\n } else {\n before = \" \".repeat(size / 2);\n after = before;\n }\n } else {\n after = \" \".repeat(size);\n }\n }\n if (options.delimiterStart !== false && !columnIndex) {\n line.push(\"|\");\n }\n if (options.padding !== false && // Don’t add the opening space if we’re not aligning and the cell is\n // empty: there will be a closing space.\n !(options.alignDelimiters === false && cell === \"\") && (options.delimiterStart !== false || columnIndex)) {\n line.push(\" \");\n }\n if (options.alignDelimiters !== false) {\n line.push(before);\n }\n line.push(cell);\n if (options.alignDelimiters !== false) {\n line.push(after);\n }\n if (options.padding !== false) {\n line.push(\" \");\n }\n if (options.delimiterEnd !== false || columnIndex !== mostCellsPerRow - 1) {\n line.push(\"|\");\n }\n }\n lines.push(\n options.delimiterEnd === false ? line.join(\"\").replace(/ +$/, \"\") : line.join(\"\")\n );\n }\n return lines.join(\"\\n\");\n}\nfunction serialize(value) {\n return value === null || value === void 0 ? \"\" : String(value);\n}\nfunction defaultStringLength(value) {\n return value.length;\n}\nfunction toAlignment(value) {\n const code2 = typeof value === \"string\" ? value.codePointAt(0) : 0;\n return code2 === 67 || code2 === 99 ? 99 : code2 === 76 || code2 === 108 ? 108 : code2 === 82 || code2 === 114 ? 114 : 0;\n}\nfunction blockquote(node, _, state, info) {\n const exit2 = state.enter(\"blockquote\");\n const tracker = state.createTracker(info);\n tracker.move(\"> \");\n tracker.shift(2);\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map$1\n );\n exit2();\n return value;\n}\nfunction map$1(line, _, blank) {\n return \">\" + (blank ? \"\" : \" \") + line;\n}\nfunction patternInScope(stack, pattern) {\n return listInScope(stack, pattern.inConstruct, true) && !listInScope(stack, pattern.notInConstruct, false);\n}\nfunction listInScope(stack, list2, none) {\n if (typeof list2 === \"string\") {\n list2 = [list2];\n }\n if (!list2 || list2.length === 0) {\n return none;\n }\n let index = -1;\n while (++index < list2.length) {\n if (stack.includes(list2[index])) {\n return true;\n }\n }\n return false;\n}\nfunction hardBreak(_, _1, state, info) {\n let index = -1;\n while (++index < state.unsafe.length) {\n if (state.unsafe[index].character === \"\\n\" && patternInScope(state.stack, state.unsafe[index])) {\n return /[ \\t]/.test(info.before) ? \"\" : \" \";\n }\n }\n return \"\\\\\\n\";\n}\nfunction longestStreak(value, substring) {\n const source = String(value);\n let index = source.indexOf(substring);\n let expected = index;\n let count = 0;\n let max = 0;\n if (typeof substring !== \"string\") {\n throw new TypeError(\"Expected substring\");\n }\n while (index !== -1) {\n if (index === expected) {\n if (++count > max) {\n max = count;\n }\n } else {\n count = 1;\n }\n expected = index + substring.length;\n index = source.indexOf(substring, expected);\n }\n return max;\n}\nfunction formatCodeAsIndented(node, state) {\n return Boolean(\n state.options.fences === false && node.value && // If there’s no info…\n !node.lang && // And there’s a non-whitespace character…\n /[^ \\r\\n]/.test(node.value) && // And the value doesn’t start or end in a blank…\n !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n );\n}\nfunction checkFence(state) {\n const marker = state.options.fence || \"`\";\n if (marker !== \"`\" && marker !== \"~\") {\n throw new Error(\n \"Cannot serialize code with `\" + marker + \"` for `options.fence`, expected `` ` `` or `~`\"\n );\n }\n return marker;\n}\nfunction code$1(node, _, state, info) {\n const marker = checkFence(state);\n const raw = node.value || \"\";\n const suffix = marker === \"`\" ? \"GraveAccent\" : \"Tilde\";\n if (formatCodeAsIndented(node, state)) {\n const exit3 = state.enter(\"codeIndented\");\n const value2 = state.indentLines(raw, map);\n exit3();\n return value2;\n }\n const tracker = state.createTracker(info);\n const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3));\n const exit2 = state.enter(\"codeFenced\");\n let value = tracker.move(sequence);\n if (node.lang) {\n const subexit = state.enter(`codeFencedLang${suffix}`);\n value += tracker.move(\n state.safe(node.lang, {\n before: value,\n after: \" \",\n encode: [\"`\"],\n ...tracker.current()\n })\n );\n subexit();\n }\n if (node.lang && node.meta) {\n const subexit = state.enter(`codeFencedMeta${suffix}`);\n value += tracker.move(\" \");\n value += tracker.move(\n state.safe(node.meta, {\n before: value,\n after: \"\\n\",\n encode: [\"`\"],\n ...tracker.current()\n })\n );\n subexit();\n }\n value += tracker.move(\"\\n\");\n if (raw) {\n value += tracker.move(raw + \"\\n\");\n }\n value += tracker.move(sequence);\n exit2();\n return value;\n}\nfunction map(line, _, blank) {\n return (blank ? \"\" : \" \") + line;\n}\nfunction checkQuote(state) {\n const marker = state.options.quote || '\"';\n if (marker !== '\"' && marker !== \"'\") {\n throw new Error(\n \"Cannot serialize title with `\" + marker + \"` for `options.quote`, expected `\\\"`, or `'`\"\n );\n }\n return marker;\n}\nfunction definition(node, _, state, info) {\n const quote = checkQuote(state);\n const suffix = quote === '\"' ? \"Quote\" : \"Apostrophe\";\n const exit2 = state.enter(\"definition\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[\");\n value += tracker.move(\n state.safe(state.associationId(node), {\n before: value,\n after: \"]\",\n ...tracker.current()\n })\n );\n value += tracker.move(\"]: \");\n subexit();\n if (\n // If there’s no url, or…\n !node.url || // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter(\"destinationLiteral\");\n value += tracker.move(\"<\");\n value += tracker.move(\n state.safe(node.url, { before: value, after: \">\", ...tracker.current() })\n );\n value += tracker.move(\">\");\n } else {\n subexit = state.enter(\"destinationRaw\");\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? \" \" : \"\\n\",\n ...tracker.current()\n })\n );\n }\n subexit();\n if (node.title) {\n subexit = state.enter(`title${suffix}`);\n value += tracker.move(\" \" + quote);\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n );\n value += tracker.move(quote);\n subexit();\n }\n exit2();\n return value;\n}\nfunction checkEmphasis(state) {\n const marker = state.options.emphasis || \"*\";\n if (marker !== \"*\" && marker !== \"_\") {\n throw new Error(\n \"Cannot serialize emphasis with `\" + marker + \"` for `options.emphasis`, expected `*`, or `_`\"\n );\n }\n return marker;\n}\nfunction encodeCharacterReference(code2) {\n return \"&#x\" + code2.toString(16).toUpperCase() + \";\";\n}\nfunction classifyCharacter(code2) {\n if (code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)) {\n return 1;\n }\n if (unicodePunctuation(code2)) {\n return 2;\n }\n}\nfunction encodeInfo(outside, inside, marker) {\n const outsideKind = classifyCharacter(outside);\n const insideKind = classifyCharacter(inside);\n if (outsideKind === void 0) {\n return insideKind === void 0 ? (\n // Letter inside:\n // we have to encode *both* letters for `_` as it is looser.\n // it already forms for `*` (and GFMs `~`).\n marker === \"_\" ? { inside: true, outside: true } : { inside: false, outside: false }\n ) : insideKind === 1 ? (\n // Whitespace inside: encode both (letter, whitespace).\n { inside: true, outside: true }\n ) : (\n // Punctuation inside: encode outer (letter)\n { inside: false, outside: true }\n );\n }\n if (outsideKind === 1) {\n return insideKind === void 0 ? (\n // Letter inside: already forms.\n { inside: false, outside: false }\n ) : insideKind === 1 ? (\n // Whitespace inside: encode both (whitespace).\n { inside: true, outside: true }\n ) : (\n // Punctuation inside: already forms.\n { inside: false, outside: false }\n );\n }\n return insideKind === void 0 ? (\n // Letter inside: already forms.\n { inside: false, outside: false }\n ) : insideKind === 1 ? (\n // Whitespace inside: encode inner (whitespace).\n { inside: true, outside: false }\n ) : (\n // Punctuation inside: already forms.\n { inside: false, outside: false }\n );\n}\nemphasis.peek = emphasisPeek;\nfunction emphasis(node, _, state, info) {\n const marker = checkEmphasis(state);\n const exit2 = state.enter(\"emphasis\");\n const tracker = state.createTracker(info);\n const before = tracker.move(marker);\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n );\n const betweenHead = between.charCodeAt(0);\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n );\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1);\n }\n const betweenTail = between.charCodeAt(between.length - 1);\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker);\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail);\n }\n const after = tracker.move(marker);\n exit2();\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n };\n return before + between + after;\n}\nfunction emphasisPeek(_, _1, state) {\n return state.options.emphasis || \"*\";\n}\nfunction visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n let reverse;\n let test;\n let visitor;\n if (typeof testOrVisitor === \"function\" && typeof visitorOrReverse !== \"function\") {\n test = void 0;\n visitor = testOrVisitor;\n reverse = visitorOrReverse;\n } else {\n test = testOrVisitor;\n visitor = visitorOrReverse;\n reverse = maybeReverse;\n }\n visitParents(tree, test, overload, reverse);\n function overload(node, parents) {\n const parent = parents[parents.length - 1];\n const index = parent ? parent.children.indexOf(node) : void 0;\n return visitor(node, index, parent);\n }\n}\nfunction formatHeadingAsSetext(node, state) {\n let literalWithBreak = false;\n visit(node, function(node2) {\n if (\"value\" in node2 && /\\r?\\n|\\r/.test(node2.value) || node2.type === \"break\") {\n literalWithBreak = true;\n return EXIT;\n }\n });\n return Boolean(\n (!node.depth || node.depth < 3) && toString(node) && (state.options.setext || literalWithBreak)\n );\n}\nfunction heading(node, _, state, info) {\n const rank = Math.max(Math.min(6, node.depth || 1), 1);\n const tracker = state.createTracker(info);\n if (formatHeadingAsSetext(node, state)) {\n const exit3 = state.enter(\"headingSetext\");\n const subexit2 = state.enter(\"phrasing\");\n const value2 = state.containerPhrasing(node, {\n ...tracker.current(),\n before: \"\\n\",\n after: \"\\n\"\n });\n subexit2();\n exit3();\n return value2 + \"\\n\" + (rank === 1 ? \"=\" : \"-\").repeat(\n // The whole size…\n value2.length - // Minus the position of the character after the last EOL (or\n // 0 if there is none)…\n (Math.max(value2.lastIndexOf(\"\\r\"), value2.lastIndexOf(\"\\n\")) + 1)\n );\n }\n const sequence = \"#\".repeat(rank);\n const exit2 = state.enter(\"headingAtx\");\n const subexit = state.enter(\"phrasing\");\n tracker.move(sequence + \" \");\n let value = state.containerPhrasing(node, {\n before: \"# \",\n after: \"\\n\",\n ...tracker.current()\n });\n if (/^[\\t ]/.test(value)) {\n value = encodeCharacterReference(value.charCodeAt(0)) + value.slice(1);\n }\n value = value ? sequence + \" \" + value : sequence;\n if (state.options.closeAtx) {\n value += \" \" + sequence;\n }\n subexit();\n exit2();\n return value;\n}\nhtml.peek = htmlPeek;\nfunction html(node) {\n return node.value || \"\";\n}\nfunction htmlPeek() {\n return \"<\";\n}\nimage.peek = imagePeek;\nfunction image(node, _, state, info) {\n const quote = checkQuote(state);\n const suffix = quote === '\"' ? \"Quote\" : \"Apostrophe\";\n const exit2 = state.enter(\"image\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"![\");\n value += tracker.move(\n state.safe(node.alt, { before: value, after: \"]\", ...tracker.current() })\n );\n value += tracker.move(\"](\");\n subexit();\n if (\n // If there’s no url but there is a title…\n !node.url && node.title || // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter(\"destinationLiteral\");\n value += tracker.move(\"<\");\n value += tracker.move(\n state.safe(node.url, { before: value, after: \">\", ...tracker.current() })\n );\n value += tracker.move(\">\");\n } else {\n subexit = state.enter(\"destinationRaw\");\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? \" \" : \")\",\n ...tracker.current()\n })\n );\n }\n subexit();\n if (node.title) {\n subexit = state.enter(`title${suffix}`);\n value += tracker.move(\" \" + quote);\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n );\n value += tracker.move(quote);\n subexit();\n }\n value += tracker.move(\")\");\n exit2();\n return value;\n}\nfunction imagePeek() {\n return \"!\";\n}\nimageReference.peek = imageReferencePeek;\nfunction imageReference(node, _, state, info) {\n const type = node.referenceType;\n const exit2 = state.enter(\"imageReference\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"![\");\n const alt = state.safe(node.alt, {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n value += tracker.move(alt + \"][\");\n subexit();\n const stack = state.stack;\n state.stack = [];\n subexit = state.enter(\"reference\");\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n subexit();\n state.stack = stack;\n exit2();\n if (type === \"full\" || !alt || alt !== reference) {\n value += tracker.move(reference + \"]\");\n } else if (type === \"shortcut\") {\n value = value.slice(0, -1);\n } else {\n value += tracker.move(\"]\");\n }\n return value;\n}\nfunction imageReferencePeek() {\n return \"!\";\n}\ninlineCode.peek = inlineCodePeek;\nfunction inlineCode(node, _, state) {\n let value = node.value || \"\";\n let sequence = \"`\";\n let index = -1;\n while (new RegExp(\"(^|[^`])\" + sequence + \"([^`]|$)\").test(value)) {\n sequence += \"`\";\n }\n if (/[^ \\r\\n]/.test(value) && (/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value) || /^`|`$/.test(value))) {\n value = \" \" + value + \" \";\n }\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index];\n const expression = state.compilePattern(pattern);\n let match;\n if (!pattern.atBreak) continue;\n while (match = expression.exec(value)) {\n let position = match.index;\n if (value.charCodeAt(position) === 10 && value.charCodeAt(position - 1) === 13) {\n position--;\n }\n value = value.slice(0, position) + \" \" + value.slice(match.index + 1);\n }\n }\n return sequence + value + sequence;\n}\nfunction inlineCodePeek() {\n return \"`\";\n}\nfunction formatLinkAsAutolink(node, state) {\n const raw = toString(node);\n return Boolean(\n !state.options.resourceLink && // If there’s a url…\n node.url && // And there’s a no title…\n !node.title && // And the content of `node` is a single text node…\n node.children && node.children.length === 1 && node.children[0].type === \"text\" && // And if the url is the same as the content…\n (raw === node.url || \"mailto:\" + raw === node.url) && // And that starts w/ a protocol…\n /^[a-z][a-z+.-]+:/i.test(node.url) && // And that doesn’t contain ASCII control codes (character escapes and\n // references don’t work), space, or angle brackets…\n !/[\\0- <>\\u007F]/.test(node.url)\n );\n}\nlink.peek = linkPeek;\nfunction link(node, _, state, info) {\n const quote = checkQuote(state);\n const suffix = quote === '\"' ? \"Quote\" : \"Apostrophe\";\n const tracker = state.createTracker(info);\n let exit2;\n let subexit;\n if (formatLinkAsAutolink(node, state)) {\n const stack = state.stack;\n state.stack = [];\n exit2 = state.enter(\"autolink\");\n let value2 = tracker.move(\"<\");\n value2 += tracker.move(\n state.containerPhrasing(node, {\n before: value2,\n after: \">\",\n ...tracker.current()\n })\n );\n value2 += tracker.move(\">\");\n exit2();\n state.stack = stack;\n return value2;\n }\n exit2 = state.enter(\"link\");\n subexit = state.enter(\"label\");\n let value = tracker.move(\"[\");\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: \"](\",\n ...tracker.current()\n })\n );\n value += tracker.move(\"](\");\n subexit();\n if (\n // If there’s no url but there is a title…\n !node.url && node.title || // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter(\"destinationLiteral\");\n value += tracker.move(\"<\");\n value += tracker.move(\n state.safe(node.url, { before: value, after: \">\", ...tracker.current() })\n );\n value += tracker.move(\">\");\n } else {\n subexit = state.enter(\"destinationRaw\");\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? \" \" : \")\",\n ...tracker.current()\n })\n );\n }\n subexit();\n if (node.title) {\n subexit = state.enter(`title${suffix}`);\n value += tracker.move(\" \" + quote);\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n );\n value += tracker.move(quote);\n subexit();\n }\n value += tracker.move(\")\");\n exit2();\n return value;\n}\nfunction linkPeek(node, _, state) {\n return formatLinkAsAutolink(node, state) ? \"<\" : \"[\";\n}\nlinkReference.peek = linkReferencePeek;\nfunction linkReference(node, _, state, info) {\n const type = node.referenceType;\n const exit2 = state.enter(\"linkReference\");\n let subexit = state.enter(\"label\");\n const tracker = state.createTracker(info);\n let value = tracker.move(\"[\");\n const text2 = state.containerPhrasing(node, {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n value += tracker.move(text2 + \"][\");\n subexit();\n const stack = state.stack;\n state.stack = [];\n subexit = state.enter(\"reference\");\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: \"]\",\n ...tracker.current()\n });\n subexit();\n state.stack = stack;\n exit2();\n if (type === \"full\" || !text2 || text2 !== reference) {\n value += tracker.move(reference + \"]\");\n } else if (type === \"shortcut\") {\n value = value.slice(0, -1);\n } else {\n value += tracker.move(\"]\");\n }\n return value;\n}\nfunction linkReferencePeek() {\n return \"[\";\n}\nfunction checkBullet(state) {\n const marker = state.options.bullet || \"*\";\n if (marker !== \"*\" && marker !== \"+\" && marker !== \"-\") {\n throw new Error(\n \"Cannot serialize items with `\" + marker + \"` for `options.bullet`, expected `*`, `+`, or `-`\"\n );\n }\n return marker;\n}\nfunction checkBulletOther(state) {\n const bullet = checkBullet(state);\n const bulletOther = state.options.bulletOther;\n if (!bulletOther) {\n return bullet === \"*\" ? \"-\" : \"*\";\n }\n if (bulletOther !== \"*\" && bulletOther !== \"+\" && bulletOther !== \"-\") {\n throw new Error(\n \"Cannot serialize items with `\" + bulletOther + \"` for `options.bulletOther`, expected `*`, `+`, or `-`\"\n );\n }\n if (bulletOther === bullet) {\n throw new Error(\n \"Expected `bullet` (`\" + bullet + \"`) and `bulletOther` (`\" + bulletOther + \"`) to be different\"\n );\n }\n return bulletOther;\n}\nfunction checkBulletOrdered(state) {\n const marker = state.options.bulletOrdered || \".\";\n if (marker !== \".\" && marker !== \")\") {\n throw new Error(\n \"Cannot serialize items with `\" + marker + \"` for `options.bulletOrdered`, expected `.` or `)`\"\n );\n }\n return marker;\n}\nfunction checkRule(state) {\n const marker = state.options.rule || \"*\";\n if (marker !== \"*\" && marker !== \"-\" && marker !== \"_\") {\n throw new Error(\n \"Cannot serialize rules with `\" + marker + \"` for `options.rule`, expected `*`, `-`, or `_`\"\n );\n }\n return marker;\n}\nfunction list(node, parent, state, info) {\n const exit2 = state.enter(\"list\");\n const bulletCurrent = state.bulletCurrent;\n let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state);\n const bulletOther = node.ordered ? bullet === \".\" ? \")\" : \".\" : checkBulletOther(state);\n let useDifferentMarker = parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false;\n if (!node.ordered) {\n const firstListItem = node.children ? node.children[0] : void 0;\n if (\n // Bullet could be used as a thematic break marker:\n (bullet === \"*\" || bullet === \"-\") && // Empty first list item:\n firstListItem && (!firstListItem.children || !firstListItem.children[0]) && // Directly in two other list items:\n state.stack[state.stack.length - 1] === \"list\" && state.stack[state.stack.length - 2] === \"listItem\" && state.stack[state.stack.length - 3] === \"list\" && state.stack[state.stack.length - 4] === \"listItem\" && // That are each the first child.\n state.indexStack[state.indexStack.length - 1] === 0 && state.indexStack[state.indexStack.length - 2] === 0 && state.indexStack[state.indexStack.length - 3] === 0\n ) {\n useDifferentMarker = true;\n }\n if (checkRule(state) === bullet && firstListItem) {\n let index = -1;\n while (++index < node.children.length) {\n const item = node.children[index];\n if (item && item.type === \"listItem\" && item.children && item.children[0] && item.children[0].type === \"thematicBreak\") {\n useDifferentMarker = true;\n break;\n }\n }\n }\n }\n if (useDifferentMarker) {\n bullet = bulletOther;\n }\n state.bulletCurrent = bullet;\n const value = state.containerFlow(node, info);\n state.bulletLastUsed = bullet;\n state.bulletCurrent = bulletCurrent;\n exit2();\n return value;\n}\nfunction checkListItemIndent(state) {\n const style = state.options.listItemIndent || \"one\";\n if (style !== \"tab\" && style !== \"one\" && style !== \"mixed\") {\n throw new Error(\n \"Cannot serialize items with `\" + style + \"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`\"\n );\n }\n return style;\n}\nfunction listItem(node, parent, state, info) {\n const listItemIndent = checkListItemIndent(state);\n let bullet = state.bulletCurrent || checkBullet(state);\n if (parent && parent.type === \"list\" && parent.ordered) {\n bullet = (typeof parent.start === \"number\" && parent.start > -1 ? parent.start : 1) + (state.options.incrementListMarker === false ? 0 : parent.children.indexOf(node)) + bullet;\n }\n let size = bullet.length + 1;\n if (listItemIndent === \"tab\" || listItemIndent === \"mixed\" && (parent && parent.type === \"list\" && parent.spread || node.spread)) {\n size = Math.ceil(size / 4) * 4;\n }\n const tracker = state.createTracker(info);\n tracker.move(bullet + \" \".repeat(size - bullet.length));\n tracker.shift(size);\n const exit2 = state.enter(\"listItem\");\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map2\n );\n exit2();\n return value;\n function map2(line, index, blank) {\n if (index) {\n return (blank ? \"\" : \" \".repeat(size)) + line;\n }\n return (blank ? bullet : bullet + \" \".repeat(size - bullet.length)) + line;\n }\n}\nfunction paragraph(node, _, state, info) {\n const exit2 = state.enter(\"paragraph\");\n const subexit = state.enter(\"phrasing\");\n const value = state.containerPhrasing(node, info);\n subexit();\n exit2();\n return value;\n}\nconst phrasing = (\n /** @type {(node?: unknown) => node is Exclude} */\n convert([\n \"break\",\n \"delete\",\n \"emphasis\",\n // To do: next major: removed since footnotes were added to GFM.\n \"footnote\",\n \"footnoteReference\",\n \"image\",\n \"imageReference\",\n \"inlineCode\",\n // Enabled by `mdast-util-math`:\n \"inlineMath\",\n \"link\",\n \"linkReference\",\n // Enabled by `mdast-util-mdx`:\n \"mdxJsxTextElement\",\n // Enabled by `mdast-util-mdx`:\n \"mdxTextExpression\",\n \"strong\",\n \"text\",\n // Enabled by `mdast-util-directive`:\n \"textDirective\"\n ])\n);\nfunction root(node, _, state, info) {\n const hasPhrasing = node.children.some(function(d) {\n return phrasing(d);\n });\n const container = hasPhrasing ? state.containerPhrasing : state.containerFlow;\n return container.call(state, node, info);\n}\nfunction checkStrong(state) {\n const marker = state.options.strong || \"*\";\n if (marker !== \"*\" && marker !== \"_\") {\n throw new Error(\n \"Cannot serialize strong with `\" + marker + \"` for `options.strong`, expected `*`, or `_`\"\n );\n }\n return marker;\n}\nstrong.peek = strongPeek;\nfunction strong(node, _, state, info) {\n const marker = checkStrong(state);\n const exit2 = state.enter(\"strong\");\n const tracker = state.createTracker(info);\n const before = tracker.move(marker + marker);\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n );\n const betweenHead = between.charCodeAt(0);\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n );\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1);\n }\n const betweenTail = between.charCodeAt(between.length - 1);\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker);\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail);\n }\n const after = tracker.move(marker + marker);\n exit2();\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n };\n return before + between + after;\n}\nfunction strongPeek(_, _1, state) {\n return state.options.strong || \"*\";\n}\nfunction text$1(node, _, state, info) {\n return state.safe(node.value, info);\n}\nfunction checkRuleRepetition(state) {\n const repetition = state.options.ruleRepetition || 3;\n if (repetition < 3) {\n throw new Error(\n \"Cannot serialize rules with repetition `\" + repetition + \"` for `options.ruleRepetition`, expected `3` or more\"\n );\n }\n return repetition;\n}\nfunction thematicBreak(_, _1, state) {\n const value = (checkRule(state) + (state.options.ruleSpaces ? \" \" : \"\")).repeat(checkRuleRepetition(state));\n return state.options.ruleSpaces ? value.slice(0, -1) : value;\n}\nconst handle = {\n blockquote,\n break: hardBreak,\n code: code$1,\n definition,\n emphasis,\n hardBreak,\n heading,\n html,\n image,\n imageReference,\n inlineCode,\n link,\n linkReference,\n list,\n listItem,\n paragraph,\n root,\n strong,\n text: text$1,\n thematicBreak\n};\nfunction gfmTableFromMarkdown() {\n return {\n enter: {\n table: enterTable,\n tableData: enterCell,\n tableHeader: enterCell,\n tableRow: enterRow\n },\n exit: {\n codeText: exitCodeText,\n table: exitTable,\n tableData: exit,\n tableHeader: exit,\n tableRow: exit\n }\n };\n}\nfunction enterTable(token) {\n const align = token._align;\n this.enter(\n {\n type: \"table\",\n align: align.map(function(d) {\n return d === \"none\" ? null : d;\n }),\n children: []\n },\n token\n );\n this.data.inTable = true;\n}\nfunction exitTable(token) {\n this.exit(token);\n this.data.inTable = void 0;\n}\nfunction enterRow(token) {\n this.enter({ type: \"tableRow\", children: [] }, token);\n}\nfunction exit(token) {\n this.exit(token);\n}\nfunction enterCell(token) {\n this.enter({ type: \"tableCell\", children: [] }, token);\n}\nfunction exitCodeText(token) {\n let value = this.resume();\n if (this.data.inTable) {\n value = value.replace(/\\\\([\\\\|])/g, replace);\n }\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"inlineCode\");\n node.value = value;\n this.exit(token);\n}\nfunction replace($0, $1) {\n return $1 === \"|\" ? $1 : $0;\n}\nfunction gfmTableToMarkdown(options) {\n const settings = options || {};\n const padding = settings.tableCellPadding;\n const alignDelimiters = settings.tablePipeAlign;\n const stringLength = settings.stringLength;\n const around = padding ? \" \" : \"|\";\n return {\n unsafe: [\n { character: \"\\r\", inConstruct: \"tableCell\" },\n { character: \"\\n\", inConstruct: \"tableCell\" },\n // A pipe, when followed by a tab or space (padding), or a dash or colon\n // (unpadded delimiter row), could result in a table.\n { atBreak: true, character: \"|\", after: \"[\t :-]\" },\n // A pipe in a cell must be encoded.\n { character: \"|\", inConstruct: \"tableCell\" },\n // A colon must be followed by a dash, in which case it could start a\n // delimiter row.\n { atBreak: true, character: \":\", after: \"-\" },\n // A delimiter row can also start with a dash, when followed by more\n // dashes, a colon, or a pipe.\n // This is a stricter version than the built in check for lists, thematic\n // breaks, and setex heading underlines though:\n // \n { atBreak: true, character: \"-\", after: \"[:|-]\" }\n ],\n handlers: {\n inlineCode: inlineCodeWithTable,\n table: handleTable,\n tableCell: handleTableCell,\n tableRow: handleTableRow\n }\n };\n function handleTable(node, _, state, info) {\n return serializeData(handleTableAsData(node, state, info), node.align);\n }\n function handleTableRow(node, _, state, info) {\n const row = handleTableRowAsData(node, state, info);\n const value = serializeData([row]);\n return value.slice(0, value.indexOf(\"\\n\"));\n }\n function handleTableCell(node, _, state, info) {\n const exit2 = state.enter(\"tableCell\");\n const subexit = state.enter(\"phrasing\");\n const value = state.containerPhrasing(node, {\n ...info,\n before: around,\n after: around\n });\n subexit();\n exit2();\n return value;\n }\n function serializeData(matrix, align) {\n return markdownTable(matrix, {\n align,\n // @ts-expect-error: `markdown-table` types should support `null`.\n alignDelimiters,\n // @ts-expect-error: `markdown-table` types should support `null`.\n padding,\n // @ts-expect-error: `markdown-table` types should support `null`.\n stringLength\n });\n }\n function handleTableAsData(node, state, info) {\n const children = node.children;\n let index = -1;\n const result = [];\n const subexit = state.enter(\"table\");\n while (++index < children.length) {\n result[index] = handleTableRowAsData(children[index], state, info);\n }\n subexit();\n return result;\n }\n function handleTableRowAsData(node, state, info) {\n const children = node.children;\n let index = -1;\n const result = [];\n const subexit = state.enter(\"tableRow\");\n while (++index < children.length) {\n result[index] = handleTableCell(children[index], node, state, info);\n }\n subexit();\n return result;\n }\n function inlineCodeWithTable(node, parent, state) {\n let value = handle.inlineCode(node, parent, state);\n if (state.stack.includes(\"tableCell\")) {\n value = value.replace(/\\|/g, \"\\\\$&\");\n }\n return value;\n }\n}\nfunction gfmTaskListItemFromMarkdown() {\n return {\n exit: {\n taskListCheckValueChecked: exitCheck,\n taskListCheckValueUnchecked: exitCheck,\n paragraph: exitParagraphWithTaskListItem\n }\n };\n}\nfunction gfmTaskListItemToMarkdown() {\n return {\n unsafe: [{ atBreak: true, character: \"-\", after: \"[:|-]\" }],\n handlers: { listItem: listItemWithTaskListItem }\n };\n}\nfunction exitCheck(token) {\n const node = this.stack[this.stack.length - 2];\n ok$1(node.type === \"listItem\");\n node.checked = token.type === \"taskListCheckValueChecked\";\n}\nfunction exitParagraphWithTaskListItem(token) {\n const parent = this.stack[this.stack.length - 2];\n if (parent && parent.type === \"listItem\" && typeof parent.checked === \"boolean\") {\n const node = this.stack[this.stack.length - 1];\n ok$1(node.type === \"paragraph\");\n const head = node.children[0];\n if (head && head.type === \"text\") {\n const siblings = parent.children;\n let index = -1;\n let firstParaghraph;\n while (++index < siblings.length) {\n const sibling = siblings[index];\n if (sibling.type === \"paragraph\") {\n firstParaghraph = sibling;\n break;\n }\n }\n if (firstParaghraph === node) {\n head.value = head.value.slice(1);\n if (head.value.length === 0) {\n node.children.shift();\n } else if (node.position && head.position && typeof head.position.start.offset === \"number\") {\n head.position.start.column++;\n head.position.start.offset++;\n node.position.start = Object.assign({}, head.position.start);\n }\n }\n }\n }\n this.exit(token);\n}\nfunction listItemWithTaskListItem(node, parent, state, info) {\n const head = node.children[0];\n const checkable = typeof node.checked === \"boolean\" && head && head.type === \"paragraph\";\n const checkbox = \"[\" + (node.checked ? \"x\" : \" \") + \"] \";\n const tracker = state.createTracker(info);\n if (checkable) {\n tracker.move(checkbox);\n }\n let value = handle.listItem(node, parent, state, {\n ...info,\n ...tracker.current()\n });\n if (checkable) {\n value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check);\n }\n return value;\n function check($0) {\n return $0 + checkbox;\n }\n}\nfunction gfmFromMarkdown() {\n return [\n gfmAutolinkLiteralFromMarkdown(),\n gfmFootnoteFromMarkdown(),\n gfmStrikethroughFromMarkdown(),\n gfmTableFromMarkdown(),\n gfmTaskListItemFromMarkdown()\n ];\n}\nfunction gfmToMarkdown(options) {\n return {\n extensions: [\n gfmAutolinkLiteralToMarkdown(),\n gfmFootnoteToMarkdown(),\n gfmStrikethroughToMarkdown(),\n gfmTableToMarkdown(options),\n gfmTaskListItemToMarkdown()\n ]\n };\n}\nfunction splice(list2, start, remove, items) {\n const end = list2.length;\n let chunkStart = 0;\n let parameters;\n if (start < 0) {\n start = -start > end ? 0 : end + start;\n } else {\n start = start > end ? end : start;\n }\n remove = remove > 0 ? remove : 0;\n if (items.length < 1e4) {\n parameters = Array.from(items);\n parameters.unshift(start, remove);\n list2.splice(...parameters);\n } else {\n if (remove) list2.splice(start, remove);\n while (chunkStart < items.length) {\n parameters = items.slice(chunkStart, chunkStart + 1e4);\n parameters.unshift(start, 0);\n list2.splice(...parameters);\n chunkStart += 1e4;\n start += 1e4;\n }\n }\n}\nconst hasOwnProperty = {}.hasOwnProperty;\nfunction combineExtensions(extensions) {\n const all = {};\n let index = -1;\n while (++index < extensions.length) {\n syntaxExtension(all, extensions[index]);\n }\n return all;\n}\nfunction syntaxExtension(all, extension) {\n let hook;\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : void 0;\n const left = maybe || (all[hook] = {});\n const right = extension[hook];\n let code2;\n if (right) {\n for (code2 in right) {\n if (!hasOwnProperty.call(left, code2)) left[code2] = [];\n const value = right[code2];\n constructs(\n // @ts-expect-error Looks like a list.\n left[code2],\n Array.isArray(value) ? value : value ? [value] : []\n );\n }\n }\n }\n}\nfunction constructs(existing, list2) {\n let index = -1;\n const before = [];\n while (++index < list2.length) {\n (list2[index].add === \"after\" ? existing : before).push(list2[index]);\n }\n splice(existing, 0, 0, before);\n}\nconst wwwPrefix = {\n tokenize: tokenizeWwwPrefix,\n partial: true\n};\nconst domain = {\n tokenize: tokenizeDomain,\n partial: true\n};\nconst path = {\n tokenize: tokenizePath,\n partial: true\n};\nconst trail = {\n tokenize: tokenizeTrail,\n partial: true\n};\nconst emailDomainDotTrail = {\n tokenize: tokenizeEmailDomainDotTrail,\n partial: true\n};\nconst wwwAutolink = {\n tokenize: tokenizeWwwAutolink,\n previous: previousWww\n};\nconst protocolAutolink = {\n tokenize: tokenizeProtocolAutolink,\n previous: previousProtocol\n};\nconst emailAutolink = {\n tokenize: tokenizeEmailAutolink,\n previous: previousEmail\n};\nconst text = {};\nfunction gfmAutolinkLiteral() {\n return {\n text\n };\n}\nlet code = 48;\nwhile (code < 123) {\n text[code] = emailAutolink;\n code++;\n if (code === 58) code = 65;\n else if (code === 91) code = 97;\n}\ntext[43] = emailAutolink;\ntext[45] = emailAutolink;\ntext[46] = emailAutolink;\ntext[95] = emailAutolink;\ntext[72] = [emailAutolink, protocolAutolink];\ntext[104] = [emailAutolink, protocolAutolink];\ntext[87] = [emailAutolink, wwwAutolink];\ntext[119] = [emailAutolink, wwwAutolink];\nfunction tokenizeEmailAutolink(effects, ok2, nok) {\n const self = this;\n let dot;\n let data;\n return start;\n function start(code2) {\n if (!gfmAtext(code2) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code2);\n }\n effects.enter(\"literalAutolink\");\n effects.enter(\"literalAutolinkEmail\");\n return atext(code2);\n }\n function atext(code2) {\n if (gfmAtext(code2)) {\n effects.consume(code2);\n return atext;\n }\n if (code2 === 64) {\n effects.consume(code2);\n return emailDomain;\n }\n return nok(code2);\n }\n function emailDomain(code2) {\n if (code2 === 46) {\n return effects.check(\n emailDomainDotTrail,\n emailDomainAfter,\n emailDomainDot\n )(code2);\n }\n if (code2 === 45 || code2 === 95 || asciiAlphanumeric(code2)) {\n data = true;\n effects.consume(code2);\n return emailDomain;\n }\n return emailDomainAfter(code2);\n }\n function emailDomainDot(code2) {\n effects.consume(code2);\n dot = true;\n return emailDomain;\n }\n function emailDomainAfter(code2) {\n if (data && dot && asciiAlpha(self.previous)) {\n effects.exit(\"literalAutolinkEmail\");\n effects.exit(\"literalAutolink\");\n return ok2(code2);\n }\n return nok(code2);\n }\n}\nfunction tokenizeWwwAutolink(effects, ok2, nok) {\n const self = this;\n return wwwStart;\n function wwwStart(code2) {\n if (code2 !== 87 && code2 !== 119 || !previousWww.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code2);\n }\n effects.enter(\"literalAutolink\");\n effects.enter(\"literalAutolinkWww\");\n return effects.check(\n wwwPrefix,\n effects.attempt(domain, effects.attempt(path, wwwAfter), nok),\n nok\n )(code2);\n }\n function wwwAfter(code2) {\n effects.exit(\"literalAutolinkWww\");\n effects.exit(\"literalAutolink\");\n return ok2(code2);\n }\n}\nfunction tokenizeProtocolAutolink(effects, ok2, nok) {\n const self = this;\n let buffer = \"\";\n let seen = false;\n return protocolStart;\n function protocolStart(code2) {\n if ((code2 === 72 || code2 === 104) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events)) {\n effects.enter(\"literalAutolink\");\n effects.enter(\"literalAutolinkHttp\");\n buffer += String.fromCodePoint(code2);\n effects.consume(code2);\n return protocolPrefixInside;\n }\n return nok(code2);\n }\n function protocolPrefixInside(code2) {\n if (asciiAlpha(code2) && buffer.length < 5) {\n buffer += String.fromCodePoint(code2);\n effects.consume(code2);\n return protocolPrefixInside;\n }\n if (code2 === 58) {\n const protocol = buffer.toLowerCase();\n if (protocol === \"http\" || protocol === \"https\") {\n effects.consume(code2);\n return protocolSlashesInside;\n }\n }\n return nok(code2);\n }\n function protocolSlashesInside(code2) {\n if (code2 === 47) {\n effects.consume(code2);\n if (seen) {\n return afterProtocol;\n }\n seen = true;\n return protocolSlashesInside;\n }\n return nok(code2);\n }\n function afterProtocol(code2) {\n return code2 === null || asciiControl(code2) || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2) || unicodePunctuation(code2) ? nok(code2) : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code2);\n }\n function protocolAfter(code2) {\n effects.exit(\"literalAutolinkHttp\");\n effects.exit(\"literalAutolink\");\n return ok2(code2);\n }\n}\nfunction tokenizeWwwPrefix(effects, ok2, nok) {\n let size = 0;\n return wwwPrefixInside;\n function wwwPrefixInside(code2) {\n if ((code2 === 87 || code2 === 119) && size < 3) {\n size++;\n effects.consume(code2);\n return wwwPrefixInside;\n }\n if (code2 === 46 && size === 3) {\n effects.consume(code2);\n return wwwPrefixAfter;\n }\n return nok(code2);\n }\n function wwwPrefixAfter(code2) {\n return code2 === null ? nok(code2) : ok2(code2);\n }\n}\nfunction tokenizeDomain(effects, ok2, nok) {\n let underscoreInLastSegment;\n let underscoreInLastLastSegment;\n let seen;\n return domainInside;\n function domainInside(code2) {\n if (code2 === 46 || code2 === 95) {\n return effects.check(trail, domainAfter, domainAtPunctuation)(code2);\n }\n if (code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2) || code2 !== 45 && unicodePunctuation(code2)) {\n return domainAfter(code2);\n }\n seen = true;\n effects.consume(code2);\n return domainInside;\n }\n function domainAtPunctuation(code2) {\n if (code2 === 95) {\n underscoreInLastSegment = true;\n } else {\n underscoreInLastLastSegment = underscoreInLastSegment;\n underscoreInLastSegment = void 0;\n }\n effects.consume(code2);\n return domainInside;\n }\n function domainAfter(code2) {\n if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n return nok(code2);\n }\n return ok2(code2);\n }\n}\nfunction tokenizePath(effects, ok2) {\n let sizeOpen = 0;\n let sizeClose = 0;\n return pathInside;\n function pathInside(code2) {\n if (code2 === 40) {\n sizeOpen++;\n effects.consume(code2);\n return pathInside;\n }\n if (code2 === 41 && sizeClose < sizeOpen) {\n return pathAtPunctuation(code2);\n }\n if (code2 === 33 || code2 === 34 || code2 === 38 || code2 === 39 || code2 === 41 || code2 === 42 || code2 === 44 || code2 === 46 || code2 === 58 || code2 === 59 || code2 === 60 || code2 === 63 || code2 === 93 || code2 === 95 || code2 === 126) {\n return effects.check(trail, ok2, pathAtPunctuation)(code2);\n }\n if (code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)) {\n return ok2(code2);\n }\n effects.consume(code2);\n return pathInside;\n }\n function pathAtPunctuation(code2) {\n if (code2 === 41) {\n sizeClose++;\n }\n effects.consume(code2);\n return pathInside;\n }\n}\nfunction tokenizeTrail(effects, ok2, nok) {\n return trail2;\n function trail2(code2) {\n if (code2 === 33 || code2 === 34 || code2 === 39 || code2 === 41 || code2 === 42 || code2 === 44 || code2 === 46 || code2 === 58 || code2 === 59 || code2 === 63 || code2 === 95 || code2 === 126) {\n effects.consume(code2);\n return trail2;\n }\n if (code2 === 38) {\n effects.consume(code2);\n return trailCharRefStart;\n }\n if (code2 === 93) {\n effects.consume(code2);\n return trailBracketAfter;\n }\n if (\n // `<` is an end.\n code2 === 60 || // So is whitespace.\n code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)\n ) {\n return ok2(code2);\n }\n return nok(code2);\n }\n function trailBracketAfter(code2) {\n if (code2 === null || code2 === 40 || code2 === 91 || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)) {\n return ok2(code2);\n }\n return trail2(code2);\n }\n function trailCharRefStart(code2) {\n return asciiAlpha(code2) ? trailCharRefInside(code2) : nok(code2);\n }\n function trailCharRefInside(code2) {\n if (code2 === 59) {\n effects.consume(code2);\n return trail2;\n }\n if (asciiAlpha(code2)) {\n effects.consume(code2);\n return trailCharRefInside;\n }\n return nok(code2);\n }\n}\nfunction tokenizeEmailDomainDotTrail(effects, ok2, nok) {\n return start;\n function start(code2) {\n effects.consume(code2);\n return after;\n }\n function after(code2) {\n return asciiAlphanumeric(code2) ? nok(code2) : ok2(code2);\n }\n}\nfunction previousWww(code2) {\n return code2 === null || code2 === 40 || code2 === 42 || code2 === 95 || code2 === 91 || code2 === 93 || code2 === 126 || markdownLineEndingOrSpace(code2);\n}\nfunction previousProtocol(code2) {\n return !asciiAlpha(code2);\n}\nfunction previousEmail(code2) {\n return !(code2 === 47 || gfmAtext(code2));\n}\nfunction gfmAtext(code2) {\n return code2 === 43 || code2 === 45 || code2 === 46 || code2 === 95 || asciiAlphanumeric(code2);\n}\nfunction previousUnbalanced(events) {\n let index = events.length;\n let result = false;\n while (index--) {\n const token = events[index][1];\n if ((token.type === \"labelLink\" || token.type === \"labelImage\") && !token._balanced) {\n result = true;\n break;\n }\n if (token._gfmAutolinkLiteralWalkedInto) {\n result = false;\n break;\n }\n }\n if (events.length > 0 && !result) {\n events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true;\n }\n return result;\n}\nfunction resolveAll(constructs2, events, context) {\n const called = [];\n let index = -1;\n while (++index < constructs2.length) {\n const resolve = constructs2[index].resolveAll;\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context);\n called.push(resolve);\n }\n }\n return events;\n}\nfunction factorySpace(effects, ok2, type, max) {\n const limit = max ? max - 1 : Number.POSITIVE_INFINITY;\n let size = 0;\n return start;\n function start(code2) {\n if (markdownSpace(code2)) {\n effects.enter(type);\n return prefix(code2);\n }\n return ok2(code2);\n }\n function prefix(code2) {\n if (markdownSpace(code2) && size++ < limit) {\n effects.consume(code2);\n return prefix;\n }\n effects.exit(type);\n return ok2(code2);\n }\n}\nconst blankLine = {\n tokenize: tokenizeBlankLine,\n partial: true\n};\nfunction tokenizeBlankLine(effects, ok2, nok) {\n return start;\n function start(code2) {\n return markdownSpace(code2) ? factorySpace(effects, after, \"linePrefix\")(code2) : after(code2);\n }\n function after(code2) {\n return code2 === null || markdownLineEnding(code2) ? ok2(code2) : nok(code2);\n }\n}\nconst indent = {\n tokenize: tokenizeIndent,\n partial: true\n};\nfunction gfmFootnote() {\n return {\n document: {\n [91]: {\n tokenize: tokenizeDefinitionStart,\n continuation: {\n tokenize: tokenizeDefinitionContinuation\n },\n exit: gfmFootnoteDefinitionEnd\n }\n },\n text: {\n [91]: {\n tokenize: tokenizeGfmFootnoteCall\n },\n [93]: {\n add: \"after\",\n tokenize: tokenizePotentialGfmFootnoteCall,\n resolveTo: resolveToPotentialGfmFootnoteCall\n }\n }\n };\n}\nfunction tokenizePotentialGfmFootnoteCall(effects, ok2, nok) {\n const self = this;\n let index = self.events.length;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let labelStart;\n while (index--) {\n const token = self.events[index][1];\n if (token.type === \"labelImage\") {\n labelStart = token;\n break;\n }\n if (token.type === \"gfmFootnoteCall\" || token.type === \"labelLink\" || token.type === \"label\" || token.type === \"image\" || token.type === \"link\") {\n break;\n }\n }\n return start;\n function start(code2) {\n if (!labelStart || !labelStart._balanced) {\n return nok(code2);\n }\n const id = normalizeIdentifier(\n self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })\n );\n if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n return nok(code2);\n }\n effects.enter(\"gfmFootnoteCallLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallLabelMarker\");\n return ok2(code2);\n }\n}\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n let index = events.length;\n while (index--) {\n if (events[index][1].type === \"labelImage\" && events[index][0] === \"enter\") {\n events[index][1];\n break;\n }\n }\n events[index + 1][1].type = \"data\";\n events[index + 3][1].type = \"gfmFootnoteCallLabelMarker\";\n const call = {\n type: \"gfmFootnoteCall\",\n start: Object.assign({}, events[index + 3][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n };\n const marker = {\n type: \"gfmFootnoteCallMarker\",\n start: Object.assign({}, events[index + 3][1].end),\n end: Object.assign({}, events[index + 3][1].end)\n };\n marker.end.column++;\n marker.end.offset++;\n marker.end._bufferIndex++;\n const string = {\n type: \"gfmFootnoteCallString\",\n start: Object.assign({}, marker.end),\n end: Object.assign({}, events[events.length - 1][1].start)\n };\n const chunk = {\n type: \"chunkString\",\n contentType: \"string\",\n start: Object.assign({}, string.start),\n end: Object.assign({}, string.end)\n };\n const replacement = [\n // Take the `labelImageMarker` (now `data`, the `!`)\n events[index + 1],\n events[index + 2],\n [\"enter\", call, context],\n // The `[`\n events[index + 3],\n events[index + 4],\n // The `^`.\n [\"enter\", marker, context],\n [\"exit\", marker, context],\n // Everything in between.\n [\"enter\", string, context],\n [\"enter\", chunk, context],\n [\"exit\", chunk, context],\n [\"exit\", string, context],\n // The ending (`]`, properly parsed and labelled).\n events[events.length - 2],\n events[events.length - 1],\n [\"exit\", call, context]\n ];\n events.splice(index, events.length - index + 1, ...replacement);\n return events;\n}\nfunction tokenizeGfmFootnoteCall(effects, ok2, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let size = 0;\n let data;\n return start;\n function start(code2) {\n effects.enter(\"gfmFootnoteCall\");\n effects.enter(\"gfmFootnoteCallLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallLabelMarker\");\n return callStart;\n }\n function callStart(code2) {\n if (code2 !== 94) return nok(code2);\n effects.enter(\"gfmFootnoteCallMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallMarker\");\n effects.enter(\"gfmFootnoteCallString\");\n effects.enter(\"chunkString\").contentType = \"string\";\n return callData;\n }\n function callData(code2) {\n if (\n // Too long.\n size > 999 || // Closing brace with nothing.\n code2 === 93 && !data || // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code2 === null || code2 === 91 || markdownLineEndingOrSpace(code2)\n ) {\n return nok(code2);\n }\n if (code2 === 93) {\n effects.exit(\"chunkString\");\n const token = effects.exit(\"gfmFootnoteCallString\");\n if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n return nok(code2);\n }\n effects.enter(\"gfmFootnoteCallLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteCallLabelMarker\");\n effects.exit(\"gfmFootnoteCall\");\n return ok2;\n }\n if (!markdownLineEndingOrSpace(code2)) {\n data = true;\n }\n size++;\n effects.consume(code2);\n return code2 === 92 ? callEscape : callData;\n }\n function callEscape(code2) {\n if (code2 === 91 || code2 === 92 || code2 === 93) {\n effects.consume(code2);\n size++;\n return callData;\n }\n return callData(code2);\n }\n}\nfunction tokenizeDefinitionStart(effects, ok2, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let identifier;\n let size = 0;\n let data;\n return start;\n function start(code2) {\n effects.enter(\"gfmFootnoteDefinition\")._container = true;\n effects.enter(\"gfmFootnoteDefinitionLabel\");\n effects.enter(\"gfmFootnoteDefinitionLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteDefinitionLabelMarker\");\n return labelAtMarker;\n }\n function labelAtMarker(code2) {\n if (code2 === 94) {\n effects.enter(\"gfmFootnoteDefinitionMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteDefinitionMarker\");\n effects.enter(\"gfmFootnoteDefinitionLabelString\");\n effects.enter(\"chunkString\").contentType = \"string\";\n return labelInside;\n }\n return nok(code2);\n }\n function labelInside(code2) {\n if (\n // Too long.\n size > 999 || // Closing brace with nothing.\n code2 === 93 && !data || // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code2 === null || code2 === 91 || markdownLineEndingOrSpace(code2)\n ) {\n return nok(code2);\n }\n if (code2 === 93) {\n effects.exit(\"chunkString\");\n const token = effects.exit(\"gfmFootnoteDefinitionLabelString\");\n identifier = normalizeIdentifier(self.sliceSerialize(token));\n effects.enter(\"gfmFootnoteDefinitionLabelMarker\");\n effects.consume(code2);\n effects.exit(\"gfmFootnoteDefinitionLabelMarker\");\n effects.exit(\"gfmFootnoteDefinitionLabel\");\n return labelAfter;\n }\n if (!markdownLineEndingOrSpace(code2)) {\n data = true;\n }\n size++;\n effects.consume(code2);\n return code2 === 92 ? labelEscape : labelInside;\n }\n function labelEscape(code2) {\n if (code2 === 91 || code2 === 92 || code2 === 93) {\n effects.consume(code2);\n size++;\n return labelInside;\n }\n return labelInside(code2);\n }\n function labelAfter(code2) {\n if (code2 === 58) {\n effects.enter(\"definitionMarker\");\n effects.consume(code2);\n effects.exit(\"definitionMarker\");\n if (!defined.includes(identifier)) {\n defined.push(identifier);\n }\n return factorySpace(\n effects,\n whitespaceAfter,\n \"gfmFootnoteDefinitionWhitespace\"\n );\n }\n return nok(code2);\n }\n function whitespaceAfter(code2) {\n return ok2(code2);\n }\n}\nfunction tokenizeDefinitionContinuation(effects, ok2, nok) {\n return effects.check(blankLine, ok2, effects.attempt(indent, ok2, nok));\n}\nfunction gfmFootnoteDefinitionEnd(effects) {\n effects.exit(\"gfmFootnoteDefinition\");\n}\nfunction tokenizeIndent(effects, ok2, nok) {\n const self = this;\n return factorySpace(\n effects,\n afterPrefix,\n \"gfmFootnoteDefinitionIndent\",\n 4 + 1\n );\n function afterPrefix(code2) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === \"gfmFootnoteDefinitionIndent\" && tail[2].sliceSerialize(tail[1], true).length === 4 ? ok2(code2) : nok(code2);\n }\n}\nfunction gfmStrikethrough(options) {\n const options_ = options || {};\n let single = options_.singleTilde;\n const tokenizer = {\n tokenize: tokenizeStrikethrough,\n resolveAll: resolveAllStrikethrough\n };\n if (single === null || single === void 0) {\n single = true;\n }\n return {\n text: {\n [126]: tokenizer\n },\n insideSpan: {\n null: [tokenizer]\n },\n attentionMarkers: {\n null: [126]\n }\n };\n function resolveAllStrikethrough(events, context) {\n let index = -1;\n while (++index < events.length) {\n if (events[index][0] === \"enter\" && events[index][1].type === \"strikethroughSequenceTemporary\" && events[index][1]._close) {\n let open = index;\n while (open--) {\n if (events[open][0] === \"exit\" && events[open][1].type === \"strikethroughSequenceTemporary\" && events[open][1]._open && // If the sizes are the same:\n events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {\n events[index][1].type = \"strikethroughSequence\";\n events[open][1].type = \"strikethroughSequence\";\n const strikethrough = {\n type: \"strikethrough\",\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[index][1].end)\n };\n const text2 = {\n type: \"strikethroughText\",\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n };\n const nextEvents = [\n [\"enter\", strikethrough, context],\n [\"enter\", events[open][1], context],\n [\"exit\", events[open][1], context],\n [\"enter\", text2, context]\n ];\n const insideSpan = context.parser.constructs.insideSpan.null;\n if (insideSpan) {\n splice(\n nextEvents,\n nextEvents.length,\n 0,\n resolveAll(insideSpan, events.slice(open + 1, index), context)\n );\n }\n splice(nextEvents, nextEvents.length, 0, [\n [\"exit\", text2, context],\n [\"enter\", events[index][1], context],\n [\"exit\", events[index][1], context],\n [\"exit\", strikethrough, context]\n ]);\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - 2;\n break;\n }\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === \"strikethroughSequenceTemporary\") {\n events[index][1].type = \"data\";\n }\n }\n return events;\n }\n function tokenizeStrikethrough(effects, ok2, nok) {\n const previous2 = this.previous;\n const events = this.events;\n let size = 0;\n return start;\n function start(code2) {\n if (previous2 === 126 && events[events.length - 1][1].type !== \"characterEscape\") {\n return nok(code2);\n }\n effects.enter(\"strikethroughSequenceTemporary\");\n return more(code2);\n }\n function more(code2) {\n const before = classifyCharacter(previous2);\n if (code2 === 126) {\n if (size > 1) return nok(code2);\n effects.consume(code2);\n size++;\n return more;\n }\n if (size < 2 && !single) return nok(code2);\n const token = effects.exit(\"strikethroughSequenceTemporary\");\n const after = classifyCharacter(code2);\n token._open = !after || after === 2 && Boolean(before);\n token._close = !before || before === 2 && Boolean(after);\n return ok2(code2);\n }\n }\n}\nclass EditMap {\n /**\n * Create a new edit map.\n */\n constructor() {\n this.map = [];\n }\n /**\n * Create an edit: a remove and/or add at a certain place.\n *\n * @param {number} index\n * @param {number} remove\n * @param {Array} add\n * @returns {undefined}\n */\n add(index, remove, add) {\n addImpl(this, index, remove, add);\n }\n // To do: add this when moving to `micromark`.\n // /**\n // * Create an edit: but insert `add` before existing additions.\n // *\n // * @param {number} index\n // * @param {number} remove\n // * @param {Array} add\n // * @returns {undefined}\n // */\n // addBefore(index, remove, add) {\n // addImpl(this, index, remove, add, true)\n // }\n /**\n * Done, change the events.\n *\n * @param {Array} events\n * @returns {undefined}\n */\n consume(events) {\n this.map.sort(function(a, b) {\n return a[0] - b[0];\n });\n if (this.map.length === 0) {\n return;\n }\n let index = this.map.length;\n const vecs = [];\n while (index > 0) {\n index -= 1;\n vecs.push(\n events.slice(this.map[index][0] + this.map[index][1]),\n this.map[index][2]\n );\n events.length = this.map[index][0];\n }\n vecs.push([...events]);\n events.length = 0;\n let slice = vecs.pop();\n while (slice) {\n events.push(...slice);\n slice = vecs.pop();\n }\n this.map.length = 0;\n }\n}\nfunction addImpl(editMap, at, remove, add) {\n let index = 0;\n if (remove === 0 && add.length === 0) {\n return;\n }\n while (index < editMap.map.length) {\n if (editMap.map[index][0] === at) {\n editMap.map[index][1] += remove;\n editMap.map[index][2].push(...add);\n return;\n }\n index += 1;\n }\n editMap.map.push([at, remove, add]);\n}\nfunction gfmTableAlign(events, index) {\n let inDelimiterRow = false;\n const align = [];\n while (index < events.length) {\n const event = events[index];\n if (inDelimiterRow) {\n if (event[0] === \"enter\") {\n if (event[1].type === \"tableContent\") {\n align.push(\n events[index + 1][1].type === \"tableDelimiterMarker\" ? \"left\" : \"none\"\n );\n }\n } else if (event[1].type === \"tableContent\") {\n if (events[index - 1][1].type === \"tableDelimiterMarker\") {\n const alignIndex = align.length - 1;\n align[alignIndex] = align[alignIndex] === \"left\" ? \"center\" : \"right\";\n }\n } else if (event[1].type === \"tableDelimiterRow\") {\n break;\n }\n } else if (event[0] === \"enter\" && event[1].type === \"tableDelimiterRow\") {\n inDelimiterRow = true;\n }\n index += 1;\n }\n return align;\n}\nfunction gfmTable() {\n return {\n flow: {\n null: {\n tokenize: tokenizeTable,\n resolveAll: resolveTable\n }\n }\n };\n}\nfunction tokenizeTable(effects, ok2, nok) {\n const self = this;\n let size = 0;\n let sizeB = 0;\n let seen;\n return start;\n function start(code2) {\n let index = self.events.length - 1;\n while (index > -1) {\n const type = self.events[index][1].type;\n if (type === \"lineEnding\" || // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n type === \"linePrefix\")\n index--;\n else break;\n }\n const tail = index > -1 ? self.events[index][1].type : null;\n const next = tail === \"tableHead\" || tail === \"tableRow\" ? bodyRowStart : headRowBefore;\n if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n return nok(code2);\n }\n return next(code2);\n }\n function headRowBefore(code2) {\n effects.enter(\"tableHead\");\n effects.enter(\"tableRow\");\n return headRowStart(code2);\n }\n function headRowStart(code2) {\n if (code2 === 124) {\n return headRowBreak(code2);\n }\n seen = true;\n sizeB += 1;\n return headRowBreak(code2);\n }\n function headRowBreak(code2) {\n if (code2 === null) {\n return nok(code2);\n }\n if (markdownLineEnding(code2)) {\n if (sizeB > 1) {\n sizeB = 0;\n self.interrupt = true;\n effects.exit(\"tableRow\");\n effects.enter(\"lineEnding\");\n effects.consume(code2);\n effects.exit(\"lineEnding\");\n return headDelimiterStart;\n }\n return nok(code2);\n }\n if (markdownSpace(code2)) {\n return factorySpace(effects, headRowBreak, \"whitespace\")(code2);\n }\n sizeB += 1;\n if (seen) {\n seen = false;\n size += 1;\n }\n if (code2 === 124) {\n effects.enter(\"tableCellDivider\");\n effects.consume(code2);\n effects.exit(\"tableCellDivider\");\n seen = true;\n return headRowBreak;\n }\n effects.enter(\"data\");\n return headRowData(code2);\n }\n function headRowData(code2) {\n if (code2 === null || code2 === 124 || markdownLineEndingOrSpace(code2)) {\n effects.exit(\"data\");\n return headRowBreak(code2);\n }\n effects.consume(code2);\n return code2 === 92 ? headRowEscape : headRowData;\n }\n function headRowEscape(code2) {\n if (code2 === 92 || code2 === 124) {\n effects.consume(code2);\n return headRowData;\n }\n return headRowData(code2);\n }\n function headDelimiterStart(code2) {\n self.interrupt = false;\n if (self.parser.lazy[self.now().line]) {\n return nok(code2);\n }\n effects.enter(\"tableDelimiterRow\");\n seen = false;\n if (markdownSpace(code2)) {\n return factorySpace(\n effects,\n headDelimiterBefore,\n \"linePrefix\",\n self.parser.constructs.disable.null.includes(\"codeIndented\") ? void 0 : 4\n )(code2);\n }\n return headDelimiterBefore(code2);\n }\n function headDelimiterBefore(code2) {\n if (code2 === 45 || code2 === 58) {\n return headDelimiterValueBefore(code2);\n }\n if (code2 === 124) {\n seen = true;\n effects.enter(\"tableCellDivider\");\n effects.consume(code2);\n effects.exit(\"tableCellDivider\");\n return headDelimiterCellBefore;\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterCellBefore(code2) {\n if (markdownSpace(code2)) {\n return factorySpace(effects, headDelimiterValueBefore, \"whitespace\")(code2);\n }\n return headDelimiterValueBefore(code2);\n }\n function headDelimiterValueBefore(code2) {\n if (code2 === 58) {\n sizeB += 1;\n seen = true;\n effects.enter(\"tableDelimiterMarker\");\n effects.consume(code2);\n effects.exit(\"tableDelimiterMarker\");\n return headDelimiterLeftAlignmentAfter;\n }\n if (code2 === 45) {\n sizeB += 1;\n return headDelimiterLeftAlignmentAfter(code2);\n }\n if (code2 === null || markdownLineEnding(code2)) {\n return headDelimiterCellAfter(code2);\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterLeftAlignmentAfter(code2) {\n if (code2 === 45) {\n effects.enter(\"tableDelimiterFiller\");\n return headDelimiterFiller(code2);\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterFiller(code2) {\n if (code2 === 45) {\n effects.consume(code2);\n return headDelimiterFiller;\n }\n if (code2 === 58) {\n seen = true;\n effects.exit(\"tableDelimiterFiller\");\n effects.enter(\"tableDelimiterMarker\");\n effects.consume(code2);\n effects.exit(\"tableDelimiterMarker\");\n return headDelimiterRightAlignmentAfter;\n }\n effects.exit(\"tableDelimiterFiller\");\n return headDelimiterRightAlignmentAfter(code2);\n }\n function headDelimiterRightAlignmentAfter(code2) {\n if (markdownSpace(code2)) {\n return factorySpace(effects, headDelimiterCellAfter, \"whitespace\")(code2);\n }\n return headDelimiterCellAfter(code2);\n }\n function headDelimiterCellAfter(code2) {\n if (code2 === 124) {\n return headDelimiterBefore(code2);\n }\n if (code2 === null || markdownLineEnding(code2)) {\n if (!seen || size !== sizeB) {\n return headDelimiterNok(code2);\n }\n effects.exit(\"tableDelimiterRow\");\n effects.exit(\"tableHead\");\n return ok2(code2);\n }\n return headDelimiterNok(code2);\n }\n function headDelimiterNok(code2) {\n return nok(code2);\n }\n function bodyRowStart(code2) {\n effects.enter(\"tableRow\");\n return bodyRowBreak(code2);\n }\n function bodyRowBreak(code2) {\n if (code2 === 124) {\n effects.enter(\"tableCellDivider\");\n effects.consume(code2);\n effects.exit(\"tableCellDivider\");\n return bodyRowBreak;\n }\n if (code2 === null || markdownLineEnding(code2)) {\n effects.exit(\"tableRow\");\n return ok2(code2);\n }\n if (markdownSpace(code2)) {\n return factorySpace(effects, bodyRowBreak, \"whitespace\")(code2);\n }\n effects.enter(\"data\");\n return bodyRowData(code2);\n }\n function bodyRowData(code2) {\n if (code2 === null || code2 === 124 || markdownLineEndingOrSpace(code2)) {\n effects.exit(\"data\");\n return bodyRowBreak(code2);\n }\n effects.consume(code2);\n return code2 === 92 ? bodyRowEscape : bodyRowData;\n }\n function bodyRowEscape(code2) {\n if (code2 === 92 || code2 === 124) {\n effects.consume(code2);\n return bodyRowData;\n }\n return bodyRowData(code2);\n }\n}\nfunction resolveTable(events, context) {\n let index = -1;\n let inFirstCellAwaitingPipe = true;\n let rowKind = 0;\n let lastCell = [0, 0, 0, 0];\n let cell = [0, 0, 0, 0];\n let afterHeadAwaitingFirstBodyRow = false;\n let lastTableEnd = 0;\n let currentTable;\n let currentBody;\n let currentCell;\n const map2 = new EditMap();\n while (++index < events.length) {\n const event = events[index];\n const token = event[1];\n if (event[0] === \"enter\") {\n if (token.type === \"tableHead\") {\n afterHeadAwaitingFirstBodyRow = false;\n if (lastTableEnd !== 0) {\n flushTableEnd(map2, context, lastTableEnd, currentTable, currentBody);\n currentBody = void 0;\n lastTableEnd = 0;\n }\n currentTable = {\n type: \"table\",\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map2.add(index, 0, [[\"enter\", currentTable, context]]);\n } else if (token.type === \"tableRow\" || token.type === \"tableDelimiterRow\") {\n inFirstCellAwaitingPipe = true;\n currentCell = void 0;\n lastCell = [0, 0, 0, 0];\n cell = [0, index + 1, 0, 0];\n if (afterHeadAwaitingFirstBodyRow) {\n afterHeadAwaitingFirstBodyRow = false;\n currentBody = {\n type: \"tableBody\",\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map2.add(index, 0, [[\"enter\", currentBody, context]]);\n }\n rowKind = token.type === \"tableDelimiterRow\" ? 2 : currentBody ? 3 : 1;\n } else if (rowKind && (token.type === \"data\" || token.type === \"tableDelimiterMarker\" || token.type === \"tableDelimiterFiller\")) {\n inFirstCellAwaitingPipe = false;\n if (cell[2] === 0) {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(\n map2,\n context,\n lastCell,\n rowKind,\n void 0,\n currentCell\n );\n lastCell = [0, 0, 0, 0];\n }\n cell[2] = index;\n }\n } else if (token.type === \"tableCellDivider\") {\n if (inFirstCellAwaitingPipe) {\n inFirstCellAwaitingPipe = false;\n } else {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(\n map2,\n context,\n lastCell,\n rowKind,\n void 0,\n currentCell\n );\n }\n lastCell = cell;\n cell = [lastCell[1], index, 0, 0];\n }\n }\n } else if (token.type === \"tableHead\") {\n afterHeadAwaitingFirstBodyRow = true;\n lastTableEnd = index;\n } else if (token.type === \"tableRow\" || token.type === \"tableDelimiterRow\") {\n lastTableEnd = index;\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(\n map2,\n context,\n lastCell,\n rowKind,\n index,\n currentCell\n );\n } else if (cell[1] !== 0) {\n currentCell = flushCell(map2, context, cell, rowKind, index, currentCell);\n }\n rowKind = 0;\n } else if (rowKind && (token.type === \"data\" || token.type === \"tableDelimiterMarker\" || token.type === \"tableDelimiterFiller\")) {\n cell[3] = index;\n }\n }\n if (lastTableEnd !== 0) {\n flushTableEnd(map2, context, lastTableEnd, currentTable, currentBody);\n }\n map2.consume(context.events);\n index = -1;\n while (++index < context.events.length) {\n const event = context.events[index];\n if (event[0] === \"enter\" && event[1].type === \"table\") {\n event[1]._align = gfmTableAlign(context.events, index);\n }\n }\n return events;\n}\nfunction flushCell(map2, context, range, rowKind, rowEnd, previousCell) {\n const groupName = rowKind === 1 ? \"tableHeader\" : rowKind === 2 ? \"tableDelimiter\" : \"tableData\";\n const valueName = \"tableContent\";\n if (range[0] !== 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, range[0]));\n map2.add(range[0], 0, [[\"exit\", previousCell, context]]);\n }\n const now = getPoint(context.events, range[1]);\n previousCell = {\n type: groupName,\n start: Object.assign({}, now),\n // Note: correct end is set later.\n end: Object.assign({}, now)\n };\n map2.add(range[1], 0, [[\"enter\", previousCell, context]]);\n if (range[2] !== 0) {\n const relatedStart = getPoint(context.events, range[2]);\n const relatedEnd = getPoint(context.events, range[3]);\n const valueToken = {\n type: valueName,\n start: Object.assign({}, relatedStart),\n end: Object.assign({}, relatedEnd)\n };\n map2.add(range[2], 0, [[\"enter\", valueToken, context]]);\n if (rowKind !== 2) {\n const start = context.events[range[2]];\n const end = context.events[range[3]];\n start[1].end = Object.assign({}, end[1].end);\n start[1].type = \"chunkText\";\n start[1].contentType = \"text\";\n if (range[3] > range[2] + 1) {\n const a = range[2] + 1;\n const b = range[3] - range[2] - 1;\n map2.add(a, b, []);\n }\n }\n map2.add(range[3] + 1, 0, [[\"exit\", valueToken, context]]);\n }\n if (rowEnd !== void 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, rowEnd));\n map2.add(rowEnd, 0, [[\"exit\", previousCell, context]]);\n previousCell = void 0;\n }\n return previousCell;\n}\nfunction flushTableEnd(map2, context, index, table, tableBody) {\n const exits = [];\n const related = getPoint(context.events, index);\n if (tableBody) {\n tableBody.end = Object.assign({}, related);\n exits.push([\"exit\", tableBody, context]);\n }\n table.end = Object.assign({}, related);\n exits.push([\"exit\", table, context]);\n map2.add(index + 1, 0, exits);\n}\nfunction getPoint(events, index) {\n const event = events[index];\n const side = event[0] === \"enter\" ? \"start\" : \"end\";\n return event[1][side];\n}\nconst tasklistCheck = {\n tokenize: tokenizeTasklistCheck\n};\nfunction gfmTaskListItem() {\n return {\n text: {\n [91]: tasklistCheck\n }\n };\n}\nfunction tokenizeTasklistCheck(effects, ok2, nok) {\n const self = this;\n return open;\n function open(code2) {\n if (\n // Exit if there’s stuff before.\n self.previous !== null || // Exit if not in the first content that is the first child of a list\n // item.\n !self._gfmTasklistFirstContentOfListItem\n ) {\n return nok(code2);\n }\n effects.enter(\"taskListCheck\");\n effects.enter(\"taskListCheckMarker\");\n effects.consume(code2);\n effects.exit(\"taskListCheckMarker\");\n return inside;\n }\n function inside(code2) {\n if (markdownLineEndingOrSpace(code2)) {\n effects.enter(\"taskListCheckValueUnchecked\");\n effects.consume(code2);\n effects.exit(\"taskListCheckValueUnchecked\");\n return close;\n }\n if (code2 === 88 || code2 === 120) {\n effects.enter(\"taskListCheckValueChecked\");\n effects.consume(code2);\n effects.exit(\"taskListCheckValueChecked\");\n return close;\n }\n return nok(code2);\n }\n function close(code2) {\n if (code2 === 93) {\n effects.enter(\"taskListCheckMarker\");\n effects.consume(code2);\n effects.exit(\"taskListCheckMarker\");\n effects.exit(\"taskListCheck\");\n return after;\n }\n return nok(code2);\n }\n function after(code2) {\n if (markdownLineEnding(code2)) {\n return ok2(code2);\n }\n if (markdownSpace(code2)) {\n return effects.check(\n {\n tokenize: spaceThenNonSpace\n },\n ok2,\n nok\n )(code2);\n }\n return nok(code2);\n }\n}\nfunction spaceThenNonSpace(effects, ok2, nok) {\n return factorySpace(effects, after, \"whitespace\");\n function after(code2) {\n return code2 === null ? nok(code2) : ok2(code2);\n }\n}\nfunction gfm(options) {\n return combineExtensions([\n gfmAutolinkLiteral(),\n gfmFootnote(),\n gfmStrikethrough(options),\n gfmTable(),\n gfmTaskListItem()\n ]);\n}\nconst emptyOptions = {};\nfunction remarkGfm(options) {\n const self = (\n /** @type {Processor} */\n this\n );\n const settings = options || emptyOptions;\n const data = self.data();\n const micromarkExtensions = data.micromarkExtensions || (data.micromarkExtensions = []);\n const fromMarkdownExtensions = data.fromMarkdownExtensions || (data.fromMarkdownExtensions = []);\n const toMarkdownExtensions = data.toMarkdownExtensions || (data.toMarkdownExtensions = []);\n micromarkExtensions.push(gfm(settings));\n fromMarkdownExtensions.push(gfmFromMarkdown());\n toMarkdownExtensions.push(gfmToMarkdown(settings));\n}\nconst _sfc_main$1 = /* @__PURE__ */ defineComponent({\n __name: \"NcRichTextCopyButton\",\n props: {\n contentId: null\n },\n setup(__props) {\n const props = __props;\n const { copy, icon, altText } = useCopy(() => document.getElementById(props.contentId).textContent);\n return { __sfc: true, props, copy, icon, altText, NcButton, NcIconSvgWrapper };\n }\n});\nvar _sfc_render$1 = function render2() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(_setup.NcButton, { attrs: { \"variant\": \"tertiary\", \"size\": \"small\", \"aria-label\": _setup.altText, \"title\": _setup.altText }, on: { \"click\": _setup.copy }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(_setup.NcIconSvgWrapper, { attrs: { \"path\": _setup.icon, \"inline\": \"\" } })];\n }, proxy: true }]) });\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n null\n);\nconst NcRichTextCopyButton = __component__$1.exports;\nfunction remarkPlaceholder() {\n return function(ast) {\n visitParents(ast, (node) => node.type === \"text\", visitor);\n function visitor(node, ancestors) {\n const parent = ancestors.at(-1);\n const index = parent.children.indexOf(node);\n const placeholders = node.value.split(/(\\{[a-z\\-_.0-9]+\\})/ig).map((entry) => {\n const matches = entry.match(/^\\{([a-z\\-_.0-9]+)\\}$/i);\n if (!matches) {\n return u(\"text\", entry);\n }\n const [, component] = matches;\n return u(\"element\", {\n tagName: `#${component}`\n });\n });\n parent.children.splice(index, 1, ...placeholders);\n }\n };\n}\nfunction prepareTextNode({ h, context }, text2) {\n if (context.autolink) {\n text2 = parseUrl(text2);\n }\n if (Array.isArray(text2)) {\n return text2.map((entry) => {\n if (typeof entry === \"string\") {\n return entry;\n }\n const { component, props } = entry;\n return h(component, {\n props,\n class: \"rich-text--component\"\n });\n });\n }\n return text2;\n}\n/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nfunction isCodeNode(node) {\n return [\"code\", \"inlineCode\"].includes(node.type);\n}\nconst remarkStripCode = function() {\n return function(tree) {\n visitParents(tree, isCodeNode, (node, ancestors) => {\n const parent = ancestors.at(-1);\n const index = parent.children.indexOf(node);\n parent.children.splice(index, 1, {\n ...node,\n value: \"\"\n });\n return [SKIP, index + 1];\n });\n };\n};\nfunction remarkUnescape() {\n return function(tree) {\n visitParents(tree, (node) => [\"text\", \"code\", \"inlineCode\"].includes(node.type), (node, ancestors) => {\n const parent = ancestors.at(-1);\n const index = parent.children.indexOf(node);\n parent.children.splice(index, 1, {\n ...node,\n value: node.value.replace(/</gmi, \"<\").replace(/>/gmi, \">\")\n });\n return [SKIP, index + 1];\n });\n };\n}\nconst LINK_PROTOCOLS = [\"http\", \"https\", \"mailto\", \"tel\"];\nconst rehypeHighlight = ref(null);\nasync function importRehypeHighlightLibrary() {\n const module = await import(\"rehype-highlight\");\n rehypeHighlight.value = module.default;\n}\nconst _sfc_main = {\n name: \"NcRichText\",\n components: {\n NcReferenceList\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n text: {\n type: String,\n default: \"\"\n },\n arguments: {\n type: Object,\n default: () => {\n return {};\n }\n },\n referenceLimit: {\n type: Number,\n default: 0\n },\n referenceInteractive: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n referenceInteractiveOptIn: {\n type: Boolean,\n default: false\n },\n /** Provide data upfront to avoid extra http request */\n references: {\n type: Array,\n default: null\n },\n /** Provide basic Markdown syntax */\n useMarkdown: {\n type: Boolean,\n default: false\n },\n /** Provide GitHub Flavored Markdown syntax */\n useExtendedMarkdown: {\n type: Boolean,\n default: false\n },\n /** Provide event from rendered markdown inputs */\n interactive: {\n type: Boolean,\n default: false\n },\n autolink: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n }\n },\n emits: [\n \"interact-todo\",\n \"interact:todo\"\n ],\n data() {\n return {\n parentId: GenRandomId(5)\n };\n },\n methods: {\n renderPlaintext(h) {\n const placeholders = this.text.split(/(\\{[a-z\\-_.0-9]+\\})/ig).map((entry) => {\n const matches = entry.match(/^\\{([a-z\\-_.0-9]+)\\}$/i);\n if (!matches) {\n return prepareTextNode({ h, context: this }, entry);\n }\n const argumentId = matches[1];\n const argument = this.arguments[argumentId];\n if (typeof argument === \"object\") {\n const { component, props } = argument;\n return h(component, {\n props,\n class: \"rich-text--component\"\n });\n }\n if (argument) {\n return h(\"span\", { class: \"rich-text--fallback\" }, argument);\n }\n return entry;\n });\n return h(\"div\", { class: \"rich-text--wrapper\" }, [\n h(\"div\", {}, placeholders.flat()),\n this.referenceLimit > 0 ? h(\"div\", { class: \"rich-text--reference-widget\" }, [\n h(NcReferenceList, {\n props: {\n text: this.text,\n referenceData: this.references,\n interactive: this.referenceInteractive,\n interactiveOptIn: this.referenceInteractiveOptIn\n }\n })\n ]) : null\n ]);\n },\n renderMarkdown(h) {\n const renderedMarkdown = unified().use(remarkParse).use(remarkAutolink, {\n autolink: this.autolink,\n useMarkdown: this.useMarkdown,\n useExtendedMarkdown: this.useExtendedMarkdown\n }).use(remarkUnescape).use(this.useExtendedMarkdown ? remarkGfm : void 0).use(breaks).use(remarkUnlinkProtocols, { except: LINK_PROTOCOLS }).use(remark2rehype, {\n handlers: {\n component(toHast, node) {\n return toHast(node, node.component, { value: node.value });\n }\n }\n }).use(this.useExtendedMarkdown ? rehypeHighlight.value : void 0).use(remarkPlaceholder).use(rehypeExternalLinks, {\n target: \"_blank\",\n rel: [\"noopener noreferrer\"]\n }).use(rehype2react, {\n createElement: (tag, attrs, children) => {\n if (!tag.startsWith(\"#\")) {\n if ([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"].includes(tag)) {\n tag = `h${Math.min(+String(tag)[1] + 3, 6)}`;\n }\n if (this.useExtendedMarkdown) {\n if (tag === \"code\" && !rehypeHighlight.value && attrs?.attrs?.class?.includes(\"language\")) {\n importRehypeHighlightLibrary();\n }\n if (tag === \"pre\" && Array.isArray(children) && children[0].tag === \"code\") {\n const id = this.parentId + \"-code-block-\" + GenRandomId(5);\n return h(\"p\", { class: \"rich-text__code-block\" }, [\n h(tag, { attrs: { ...attrs, id } }, children),\n h(NcRichTextCopyButton, {\n props: { contentId: id },\n class: \"rich-text__code-block-button\"\n })\n ]);\n }\n let nestedNode = null;\n if (tag === \"li\" && Array.isArray(children) && children[0].tag === \"input\" && children[0].data.attrs.type === \"checkbox\") {\n const [inputNode, ...labelParts] = children;\n const nestedNodeIndex = labelParts.findIndex((child) => [\"ul\", \"ol\", \"li\", \"blockquote\", \"pre\"].includes(child.tag));\n if (nestedNodeIndex !== -1) {\n nestedNode = labelParts[nestedNodeIndex];\n labelParts.splice(nestedNodeIndex);\n }\n const id = this.parentId + \"-markdown-input-\" + GenRandomId(5);\n const inputComponent = h(NcCheckboxRadioSwitch, {\n attrs: {\n ...inputNode.data.attrs,\n id,\n disabled: !this.interactive\n },\n on: {\n \"update:checked\": () => {\n this.$emit(\"interact-todo\", id);\n this.$emit(\"interact:todo\", id);\n }\n }\n }, labelParts);\n return h(tag, attrs, [inputComponent, nestedNode]);\n }\n }\n if (tag === \"a\") {\n const route = getRoute(this.$router, attrs.attrs.href);\n if (route) {\n delete attrs.attrs.href;\n delete attrs.attrs.target;\n return h(RouterLink, {\n ...attrs,\n props: {\n to: route\n }\n }, children);\n }\n const isAllowedScheme = /^(https?:\\/\\/|tel:|mailto:)/.test(attrs.attrs.href);\n if (isAllowedScheme) {\n attrs.attrs.href = attrs.attrs.href.trim();\n return h(NcRichTextExternalLink, attrs, children);\n } else {\n delete attrs.attrs.href;\n delete attrs.attrs.target;\n return h(\"span\", attrs, children);\n }\n }\n return h(tag, attrs, children);\n }\n const placeholder = this.arguments[tag.slice(1)];\n if (!placeholder) {\n return h(\"span\", { ...{ attrs }, ...{ class: \"rich-text--fallback\" } }, [`{${tag.slice(1)}}`]);\n }\n if (!placeholder.component) {\n return h(\"span\", attrs, [placeholder]);\n }\n return h(\n placeholder.component,\n {\n attrs,\n props: placeholder.props,\n class: \"rich-text--component\"\n },\n children\n );\n },\n prefix: false\n }).processSync(this.text.replace(/<[^>]+>/g, (match) => match.replace(/\")).result;\n return h(\"div\", { class: \"rich-text--wrapper rich-text--wrapper-markdown\" }, [\n renderedMarkdown,\n this.referenceLimit > 0 ? h(\"div\", { class: \"rich-text--reference-widget\" }, [\n h(NcReferenceList, {\n props: {\n text: this.prepareReferenceSource(this.text),\n referenceData: this.references,\n interactive: this.referenceInteractive,\n interactiveOptIn: this.referenceInteractiveOptIn\n }\n })\n ]) : null\n ]);\n },\n /**\n * Strip content of inline code and code blocks for reference widgets\n * (e.g. ignore fenced links from being added as reference)\n *\n * @param {string} text - Content of the node\n */\n prepareReferenceSource(text2) {\n if (!this.useMarkdown && !this.useExtendedMarkdown) {\n return text2;\n }\n const processor = unified();\n processor.compiler = (tree) => toString(tree);\n return processor.use(remarkParse).use(remarkStripCode).processSync(text2.replace(/\\s/g, \" \")).value;\n }\n },\n render(h) {\n return this.useMarkdown || this.useExtendedMarkdown ? this.renderMarkdown(h) : this.renderPlaintext(h);\n }\n};\nconst _sfc_render = null;\nconst _sfc_staticRenderFns = null;\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"e55203a2\"\n);\nconst NcRichText = __component__.exports;\nexport {\n NcRichText as N,\n NcReferenceList as a\n};\n//# sourceMappingURL=NcRichText-DBkCEk0k.mjs.map\n","import '../assets/NcProfileHoverCard-DRXYrr0i.css';\nimport { defineComponent, ref, computed, watch, onMounted } from \"vue\";\nimport { getCurrentUser } from \"@nextcloud/auth\";\nimport axios from \"@nextcloud/axios\";\nimport { getCapabilities } from \"@nextcloud/capabilities\";\nimport { getCanonicalLocale } from \"@nextcloud/l10n\";\nimport { generateUrl, generateOcsUrl } from \"@nextcloud/router\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { N as NcActionButton } from \"./NcActionButton-DJ-fERS3.mjs\";\nimport NcActionLink from \"../Components/NcActionLink.mjs\";\nimport NcActionRouter from \"../Components/NcActionRouter.mjs\";\nimport { N as NcActions } from \"./NcActions-C4f9MXug.mjs\";\nimport { N as NcAvatar } from \"./NcAvatar-BbHwxwyd.mjs\";\nimport { N as NcButton } from \"./NcButton-DAGirW_B.mjs\";\nimport NcLoadingIcon from \"../Components/NcLoadingIcon.mjs\";\nimport { N as NcRichText } from \"./NcRichText-DBkCEk0k.mjs\";\nimport { useIsSmallMobile } from \"../Composables/useIsMobile.mjs\";\nimport { r as register, U as t23, a as t } from \"./_l10n-Dv1YKfKS.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-Bui9PhAS.mjs\";\nconst _sfc_main$4 = {\n name: \"BriefcaseOutlineIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$4 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon briefcase-outline-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e(), _c(\"path\", { attrs: { \"d\": \"M20,6C20.58,6 21.05,6.2 21.42,6.59C21.8,7 22,7.45 22,8V19C22,19.55 21.8,20 21.42,20.41C21.05,20.8 20.58,21 20,21H4C3.42,21 2.95,20.8 2.58,20.41C2.2,20 2,19.55 2,19V8C2,7.45 2.2,7 2.58,6.59C2.95,6.2 3.42,6 4,6H8V4C8,3.42 8.2,2.95 8.58,2.58C8.95,2.2 9.42,2 10,2H14C14.58,2 15.05,2.2 15.42,2.58C15.8,2.95 16,3.42 16,4V6H20M4,8V19H20V8H4M14,6V4H10V6H14Z\" } })])]);\n};\nvar _sfc_staticRenderFns$4 = [];\nvar __component__$4 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$4,\n _sfc_render$4,\n _sfc_staticRenderFns$4,\n false,\n null,\n null\n);\nconst BriefcaseIcon = __component__$4.exports;\nconst _sfc_main$3 = {\n name: \"ClockOutlineIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$3 = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon clock-outline-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e(), _c(\"path\", { attrs: { \"d\": \"M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22C6.47,22 2,17.5 2,12A10,10 0 0,1 12,2M12.5,7V12.25L17,14.92L16.25,16.15L11,13V7H12.5Z\" } })])]);\n};\nvar _sfc_staticRenderFns$3 = [];\nvar __component__$3 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$3,\n _sfc_render$3,\n _sfc_staticRenderFns$3,\n false,\n null,\n null\n);\nconst ClockIcon = __component__$3.exports;\nconst _sfc_main$2 = {\n name: \"MapMarkerOutlineIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$2 = function render3() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon map-marker-outline-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e(), _c(\"path\", { attrs: { \"d\": \"M12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5M12,2A7,7 0 0,1 19,9C19,14.25 12,22 12,22C12,22 5,14.25 5,9A7,7 0 0,1 12,2M12,4A5,5 0 0,0 7,9C7,10 7,12 12,18.71C17,12 17,10 17,9A5,5 0 0,0 12,4Z\" } })])]);\n};\nvar _sfc_staticRenderFns$2 = [];\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$2,\n _sfc_render$2,\n _sfc_staticRenderFns$2,\n false,\n null,\n null\n);\nconst MapMarkerIcon = __component__$2.exports;\nconst _sfc_main$1 = {\n name: \"PencilOutlineIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$1 = function render4() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon pencil-outline-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e(), _c(\"path\", { attrs: { \"d\": \"M14.06,9L15,9.94L5.92,19H5V18.08L14.06,9M17.66,3C17.41,3 17.15,3.1 16.96,3.29L15.13,5.12L18.88,8.87L20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18.17,3.09 17.92,3 17.66,3M14.06,6.19L3,17.25V21H6.75L17.81,9.94L14.06,6.19Z\" } })])]);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n null\n);\nconst PencilIcon = __component__$1.exports;\nregister(t23);\n/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nconst PROFILE_CACHE_TTL_MS = 30 * 60 * 1e3;\nconst cache = /* @__PURE__ */ new Map();\nconst inflight = /* @__PURE__ */ new Map();\nfunction getCachedProfile(userId) {\n const entry = cache.get(userId);\n if (!entry) {\n return null;\n }\n if (Date.now() >= entry.expiresAt) {\n cache.delete(userId);\n return null;\n }\n return entry.data;\n}\nfunction setCachedProfile(userId, data, ttlMs = PROFILE_CACHE_TTL_MS) {\n cache.set(userId, {\n data,\n expiresAt: Date.now() + ttlMs\n });\n}\nasync function fetchProfileCached(userId, fetcher, ttlMs = PROFILE_CACHE_TTL_MS) {\n const cached = getCachedProfile(userId);\n if (cached) {\n return cached;\n }\n const pending = inflight.get(userId);\n if (pending) {\n return pending;\n }\n const promise = (async () => {\n try {\n const data = await fetcher();\n if (data) {\n setCachedProfile(userId, data, ttlMs);\n }\n return data;\n } finally {\n inflight.delete(userId);\n }\n })();\n inflight.set(userId, promise);\n return promise;\n}\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcProfileHoverCard\",\n props: {\n user: { default: null },\n displayName: { default: null },\n profile: { default: null },\n preloadedUserStatus: { default: null },\n open: { type: Boolean, default: false },\n actions: { default: null },\n actionsLoading: { type: Boolean, default: false }\n },\n setup(__props) {\n const props = __props;\n const loading = ref(false);\n const error = ref(false);\n const profileData = ref(props.profile);\n const userStatus = ref(props.preloadedUserStatus ?? {});\n const profileEnabled = ref(!!props.profile);\n const userStatusReady = ref(props.preloadedUserStatus !== null);\n const isMobile = useIsSmallMobile();\n const showLoading = computed(() => loading.value || !!profileData.value && !error.value && !userStatusReady.value);\n if (props.user && props.profile) {\n setCachedProfile(props.user, props.profile);\n }\n const isCurrentUser = computed(() => !!props.user && getCurrentUser()?.uid === props.user);\n const settingsUrl = generateUrl(\"/settings/user\");\n const profileUrl = computed(() => {\n if (!profileEnabled.value) {\n return null;\n }\n const userId = profileData.value?.userId || props.user;\n if (!userId) {\n return null;\n }\n return generateUrl(\"/u/{userId}\", { userId });\n });\n const resolvedDisplayName = computed(() => profileData.value?.displayname || props.displayName || profileData.value?.userId || props.user || \"\");\n const profileLinkProps = computed(() => {\n if (!profileUrl.value) {\n return {};\n }\n return {\n href: profileUrl.value,\n \"aria-label\": t(\"View profile\")\n };\n });\n function isSidebarAction(action) {\n return action.appId !== \"timezone\" && action.appId !== \"profile\" && action.id !== \"profile\";\n }\n function actionDisplayText(action) {\n if (isCurrentUser.value) {\n return action.text;\n }\n if (action.id === \"talk-call\" || isSpreedDirectCallAction(action)) {\n return t(\"Start call\");\n }\n if (action.id === \"talk\" || action.appId === \"spreed\") {\n return t(\"Send message\");\n }\n return action.text;\n }\n function isSpreedDirectCallAction(action) {\n if (action.appId !== \"spreed\") {\n return false;\n }\n const href = action.href ?? (typeof action.to === \"string\" ? action.to : \"\");\n return typeof href === \"string\" && href.includes(\"#direct-call\");\n }\n const resolvedActions = computed(() => {\n if (props.actions && props.actions.length > 0) {\n return props.actions.filter(isSidebarAction);\n }\n return (profileData.value?.actions ?? []).filter(isSidebarAction).map((action) => ({\n id: action.id,\n appId: action.appId,\n text: action.title,\n href: action.target || void 0,\n icon: action.icon,\n target: action.id === \"phone\" ? \"_self\" : \"_blank\",\n rel: action.id === \"fediverse\" ? \"me\" : void 0\n }));\n });\n const localTimeLabel = computed(() => {\n const time = formatProfileLocalTime(/* @__PURE__ */ new Date());\n if (!time) {\n return null;\n }\n return t(\"Local time: {time}\", { time });\n });\n const primaryAction = computed(() => resolvedActions.value[0]);\n const otherActions = computed(() => resolvedActions.value.slice(1));\n const primaryActionButtonProps = computed(() => {\n const action = primaryAction.value;\n if (!action) {\n return {};\n }\n if (action.to) {\n return { to: action.to };\n }\n if (action.href) {\n return {\n href: action.href,\n target: action.target ?? (action.href.startsWith(\"tel:\") ? \"_self\" : \"_blank\"),\n rel: action.rel\n };\n }\n return {};\n });\n const avatarUserStatus = computed(() => ({\n status: userStatus.value.status ?? null,\n icon: userStatus.value.icon ?? null,\n message: userStatus.value.message ?? null\n }));\n function formatProfileLocalTime(date) {\n const timeZone = profileData.value?.timezone;\n if (timeZone) {\n try {\n return new Intl.DateTimeFormat(getCanonicalLocale(), {\n timeZone,\n hour: \"2-digit\",\n minute: \"2-digit\"\n }).format(date);\n } catch {\n }\n }\n if (typeof profileData.value?.timezoneOffset === \"number\") {\n const shifted = new Date(date.getTime() + profileData.value.timezoneOffset * 1e3);\n return new Intl.DateTimeFormat(getCanonicalLocale(), {\n timeZone: \"UTC\",\n hour: \"2-digit\",\n minute: \"2-digit\"\n }).format(shifted);\n }\n return null;\n }\n function isIconUrl(icon) {\n return !!icon && (/^(https?:)?\\/\\//.test(icon) || icon.startsWith(\"/\") || icon.startsWith(\"data:\"));\n }\n function otherActionComponent(action) {\n if (action.to) {\n return NcActionRouter;\n }\n if (action.onClick && !action.href) {\n return NcActionButton;\n }\n return NcActionLink;\n }\n function otherActionProps(action) {\n if (action.to) {\n return { to: action.to, closeAfterClick: true };\n }\n if (action.onClick && !action.href) {\n return { closeAfterClick: true };\n }\n return {\n href: action.href,\n target: action.target ?? (action.href?.startsWith(\"tel:\") ? \"_self\" : \"_blank\"),\n rel: action.rel,\n closeAfterClick: true\n };\n }\n watch(() => props.profile, (value) => {\n if (value) {\n profileData.value = value;\n profileEnabled.value = true;\n if (props.user) {\n setCachedProfile(props.user, value);\n }\n error.value = false;\n }\n });\n watch(() => props.preloadedUserStatus, (value) => {\n if (value) {\n userStatus.value = value;\n userStatusReady.value = true;\n }\n });\n watch(() => props.displayName, (value) => {\n if (value && profileData.value && !profileEnabled.value) {\n profileData.value = { ...profileData.value, displayname: value };\n }\n });\n watch(() => props.user, () => {\n profileData.value = props.profile;\n userStatus.value = props.preloadedUserStatus ?? {};\n userStatusReady.value = props.preloadedUserStatus !== null;\n profileEnabled.value = !!props.profile;\n error.value = false;\n if (props.user && props.profile) {\n setCachedProfile(props.user, props.profile);\n }\n if (props.open) {\n loadProfile();\n }\n });\n watch(() => props.open, (isOpen) => {\n if (isOpen) {\n loadProfile();\n }\n });\n onMounted(() => {\n if (props.open) {\n loadProfile();\n }\n });\n async function resolveDisplayName(userId) {\n if (props.displayName) {\n return props.displayName;\n }\n try {\n const { data } = await axios.post(generateUrl(\"/displaynames\"), { users: [userId] });\n return data?.users?.[userId] || userId;\n } catch (e) {\n logger.debug(\"Failed to load display name for hovercard\", { error: e, userId });\n return userId;\n }\n }\n async function createLimitedProfile(userId) {\n return {\n userId,\n displayname: await resolveDisplayName(userId),\n actions: [],\n isUserAvatarVisible: true\n };\n }\n async function ensureUserStatus(userId) {\n if (!userStatusReady.value) {\n userStatus.value = await fetchUserStatus(userId);\n userStatusReady.value = true;\n }\n }\n async function loadProfile() {\n if (!props.user || loading.value) {\n return;\n }\n const userId = props.user;\n if (!profileData.value) {\n const cached = getCachedProfile(userId);\n if (cached) {\n profileData.value = cached;\n profileEnabled.value = true;\n }\n }\n if (profileData.value && profileEnabled.value) {\n if (!userStatusReady.value) {\n loading.value = true;\n try {\n await ensureUserStatus(userId);\n } finally {\n loading.value = false;\n }\n }\n return;\n }\n loading.value = true;\n error.value = false;\n const statusPromise = userStatusReady.value ? Promise.resolve(userStatus.value) : fetchUserStatus(userId);\n try {\n const profile = await fetchProfileCached(userId, async () => {\n const { data } = await axios.get(generateOcsUrl(\"/profile/{userId}\", { userId }));\n return data.ocs?.data ?? null;\n });\n if (profile) {\n profileData.value = profile;\n profileEnabled.value = true;\n } else {\n profileData.value = await createLimitedProfile(userId);\n profileEnabled.value = false;\n }\n } catch (e) {\n logger.debug(\"Failed to load profile for hovercard, showing limited info\", { error: e, user: userId });\n profileData.value = await createLimitedProfile(userId);\n profileEnabled.value = false;\n }\n try {\n userStatus.value = await statusPromise;\n userStatusReady.value = true;\n } finally {\n loading.value = false;\n }\n }\n async function fetchUserStatus(userId) {\n try {\n if (!getCapabilities()?.user_status?.enabled || !getCurrentUser()) {\n return {};\n }\n const { data } = await axios.get(generateOcsUrl(\"/apps/user_status/api/v1/statuses/{userId}\", { userId }));\n return data.ocs?.data ?? {};\n } catch (e) {\n logger.debug(\"Failed to load user status for hovercard\", { error: e, userId });\n return {};\n }\n }\n return { __sfc: true, props, loading, error, profileData, userStatus, profileEnabled, userStatusReady, isMobile, showLoading, isCurrentUser, settingsUrl, profileUrl, resolvedDisplayName, profileLinkProps, isSidebarAction, actionDisplayText, isSpreedDirectCallAction, resolvedActions, localTimeLabel, primaryAction, otherActions, primaryActionButtonProps, avatarUserStatus, formatProfileLocalTime, isIconUrl, otherActionComponent, otherActionProps, resolveDisplayName, createLimitedProfile, ensureUserStatus, loadProfile, fetchUserStatus, BriefcaseIcon, ClockIcon, MapMarkerIcon, PencilIcon, NcActions, NcAvatar, NcButton, NcLoadingIcon, NcRichText, t, NcIconSvgWrapper };\n }\n});\nvar _sfc_render = function render5() {\n var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;\n return _c(\"div\", { staticClass: \"profile-hover-card\", class: { \"profile-hover-card--limited\": !_setup.showLoading && !!_setup.profileData && !_setup.error && !_setup.profileEnabled }, attrs: { \"role\": \"dialog\", \"aria-label\": _setup.t(\"Profile of {user}\", { user: _setup.resolvedDisplayName }) } }, [_setup.showLoading ? _c(\"div\", { staticClass: \"profile-hover-card__loading\" }, [_c(_setup.NcLoadingIcon, { attrs: { \"size\": 32, \"name\": _setup.t(\"Loading profile\") } })], 1) : _setup.profileData && !_setup.error ? [_c(\"div\", { staticClass: \"profile-hover-card__header\" }, [_setup.isCurrentUser ? _c(_setup.NcButton, { staticClass: \"profile-hover-card__header__edit\", attrs: { \"variant\": \"tertiary\", \"aria-label\": _setup.t(\"Edit profile\"), \"title\": _setup.t(\"Edit profile\"), \"href\": _setup.settingsUrl, \"target\": \"_blank\" }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(_setup.PencilIcon, { attrs: { \"size\": 20 } })];\n }, proxy: true }], null, false, 3660207582) }) : _vm._e(), _c(\"div\", { staticClass: \"profile-hover-card__header__container\" }, [_setup.isMobile ? _c(_setup.profileUrl ? \"a\" : \"div\", _vm._b({ tag: \"component\", staticClass: \"profile-hover-card__header__container__avatar\", class: { \"profile-hover-card__profile-link\": !!_setup.profileUrl } }, \"component\", _setup.profileLinkProps, false), [_c(_setup.NcAvatar, { staticClass: \"avatar\", attrs: { \"user\": _setup.profileData.userId, \"displayName\": _setup.resolvedDisplayName, \"size\": 96, \"disableMenu\": \"\", \"disableTooltip\": \"\", \"preloadedUserStatus\": _setup.avatarUserStatus, \"isNoUser\": !_setup.profileData.isUserAvatarVisible } })], 1) : _c(\"div\", { staticClass: \"profile-hover-card__header__container__placeholder\" }), _c(\"div\", { staticClass: \"profile-hover-card__header__container__identity\" }, [_c(\"div\", { staticClass: \"profile-hover-card__header__container__displayname\" }, [_setup.profileUrl ? _c(\"a\", { staticClass: \"profile-hover-card__profile-link\", attrs: { \"href\": _setup.profileUrl } }, [_c(\"h2\", [_vm._v(_vm._s(_setup.resolvedDisplayName))])]) : _c(\"h2\", [_vm._v(_vm._s(_setup.resolvedDisplayName))]), _setup.profileData.pronouns ? _c(\"span\", { staticClass: \"profile-hover-card__header__container__pronoun-separator\" }, [_vm._v(\"·\")]) : _vm._e(), _setup.profileData.pronouns ? _c(\"span\", { staticClass: \"profile-hover-card__header__container__pronouns\" }, [_vm._v(_vm._s(_setup.profileData.pronouns))]) : _vm._e()]), _setup.userStatus.icon || _setup.userStatus.message ? _c(\"div\", { staticClass: \"profile-hover-card__header__container__status\" }, [_c(\"span\", { staticClass: \"profile-hover-card__header__container__status-content\" }, [_c(\"span\", [_vm._v(_vm._s(_setup.userStatus.icon) + \" \" + _vm._s(_setup.userStatus.message))])])]) : _vm._e()])], 1)], 1), _c(\"div\", { staticClass: \"profile-hover-card__body\" }, [_c(\"div\", { staticClass: \"profile-hover-card__content\" }, [_c(\"div\", { staticClass: \"profile-hover-card__sidebar\" }, [!_setup.isMobile ? _c(_setup.profileUrl ? \"a\" : \"div\", _vm._b({ tag: \"component\", class: { \"profile-hover-card__profile-link\": !!_setup.profileUrl } }, \"component\", _setup.profileLinkProps, false), [_c(_setup.NcAvatar, { staticClass: \"avatar\", attrs: { \"user\": _setup.profileData.userId, \"displayName\": _setup.resolvedDisplayName, \"size\": 135, \"disableMenu\": \"\", \"disableTooltip\": \"\", \"preloadedUserStatus\": _setup.avatarUserStatus, \"isNoUser\": !_setup.profileData.isUserAvatarVisible } })], 1) : _vm._e(), _c(\"div\", { staticClass: \"user-actions\" }, [_vm.actionsLoading && _setup.resolvedActions.length === 0 ? _c(\"div\", { staticClass: \"user-actions__loading\" }, [_c(_setup.NcLoadingIcon, { attrs: { \"size\": 20, \"name\": _setup.t(\"Loading actions\") } })], 1) : [_setup.primaryAction ? _c(_setup.NcButton, _vm._b({ staticClass: \"user-actions__primary\", attrs: { \"variant\": \"primary\" }, on: { \"click\": _setup.primaryAction.onClick }, scopedSlots: _vm._u([_setup.primaryAction.iconSvg || _setup.primaryAction.icon ? { key: \"icon\", fn: function() {\n return [_setup.primaryAction.iconSvg ? _c(_setup.NcIconSvgWrapper, { attrs: { \"svg\": _setup.primaryAction.iconSvg } }) : _setup.isIconUrl(_setup.primaryAction.icon) ? _c(\"img\", { staticClass: \"user-actions__primary__icon\", attrs: { \"src\": _setup.primaryAction.icon, \"alt\": \"\" } }) : _c(\"span\", { staticClass: \"user-actions__primary__icon-class\", class: _setup.primaryAction.icon, attrs: { \"aria-hidden\": \"true\" } })];\n }, proxy: true } : null], null, true) }, \"NcButton\", _setup.primaryActionButtonProps, false), [_vm._v(\" \" + _vm._s(_setup.actionDisplayText(_setup.primaryAction)) + \" \")]) : _vm._e(), _setup.otherActions.length > 0 ? _c(_setup.NcActions, { staticClass: \"user-actions__other\", attrs: { \"inline\": _setup.isMobile ? 5 : 4 } }, _vm._l(_setup.otherActions, function(action, index) {\n return _c(_setup.otherActionComponent(action), _vm._b({ key: action.id || action.href || index, tag: \"component\", on: { \"click\": action.onClick }, scopedSlots: _vm._u([action.iconSvg || action.icon ? { key: \"icon\", fn: function() {\n return [action.iconSvg ? _c(_setup.NcIconSvgWrapper, { attrs: { \"svg\": action.iconSvg } }) : _setup.isIconUrl(action.icon) ? _c(\"img\", { staticClass: \"user-actions__other__icon\", attrs: { \"src\": action.icon, \"alt\": \"\" } }) : _c(\"span\", { staticClass: \"user-actions__other__icon-class\", class: action.icon, attrs: { \"aria-hidden\": \"true\" } })];\n }, proxy: true } : null], null, true) }, \"component\", _setup.otherActionProps(action), false), [_vm._v(\" \" + _vm._s(_setup.actionDisplayText(action)) + \" \")]);\n }), 1) : _vm._e()]], 2)], 1), _setup.profileEnabled ? _c(\"div\", { staticClass: \"profile-hover-card__blocks\" }, [_setup.profileData.organisation || _setup.profileData.role || _setup.profileData.address || _setup.localTimeLabel ? _c(\"div\", { staticClass: \"profile-hover-card__blocks-details\" }, [_setup.profileData.organisation || _setup.profileData.role ? _c(\"div\", { staticClass: \"detail\" }, [_c(\"p\", [_c(_setup.BriefcaseIcon, { staticClass: \"detail-icon\", attrs: { \"size\": 16, \"title\": \"\" } }), _vm._v(\" \" + _vm._s(_setup.profileData.organisation) + \" \"), _setup.profileData.organisation && _setup.profileData.role ? _c(\"span\", [_vm._v(\"•\")]) : _vm._e(), _vm._v(\" \" + _vm._s(_setup.profileData.role) + \" \")], 1)]) : _vm._e(), _setup.profileData.address ? _c(\"div\", { staticClass: \"detail\" }, [_c(\"p\", [_c(_setup.MapMarkerIcon, { staticClass: \"detail-icon\", attrs: { \"size\": 16, \"title\": \"\" } }), _vm._v(\" \" + _vm._s(_setup.profileData.address) + \" \")], 1)]) : _vm._e(), _setup.localTimeLabel ? _c(\"div\", { staticClass: \"detail\" }, [_c(\"p\", [_c(_setup.ClockIcon, { staticClass: \"detail-icon\", attrs: { \"size\": 16, \"title\": \"\" } }), _vm._v(\" \" + _vm._s(_setup.localTimeLabel) + \" \")], 1)]) : _vm._e()]) : _vm._e(), _setup.profileData.headline || _setup.profileData.biography ? [_setup.profileData.headline ? _c(\"h3\", { staticClass: \"profile-hover-card__blocks-headline\" }, [_vm._v(\" \" + _vm._s(_setup.profileData.headline) + \" \")]) : _vm._e(), _setup.profileData.biography ? _c(\"div\", { staticClass: \"profile-hover-card__blocks-biography\" }, [_c(_setup.NcRichText, { attrs: { \"text\": _setup.profileData.biography, \"useExtendedMarkdown\": \"\" } })], 1) : _vm._e()] : _vm._e()], 2) : _vm._e()])])] : _vm._e()], 2);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"b8355b88\"\n);\nconst NcProfileHoverCard = __component__.exports;\nexport {\n NcProfileHoverCard as default\n};\n//# sourceMappingURL=NcProfileHoverCard-nmkKoCB1.mjs.map\n","import '../assets/NcProgressBar-CU_ib_HL.css';\nimport { useCssVars } from \"vue\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nconst __default__ = {\n name: \"NcProgressBar\",\n props: {\n /**\n * An integer between 1 and 100\n */\n value: {\n type: Number,\n default: 0,\n validator(value) {\n return value >= 0 && value <= 100;\n }\n },\n /**\n * Determines the height of the progressbar.\n * Possible values:\n * - 'small' (default)\n * - 'medium'\n * - Number\n *\n * @type {'small'|'medium'|number}\n */\n size: {\n type: [String, Number],\n default: \"small\",\n validator(value) {\n return [\"small\", \"medium\"].includes(value) || typeof value === \"number\";\n }\n },\n /**\n * Applies an error color to the progressbar if true.\n */\n error: {\n type: Boolean,\n default: false\n },\n /**\n * ProgressBar type\n */\n type: {\n type: String,\n default: \"linear\",\n validator(value) {\n return [\"linear\", \"circular\"].includes(value);\n }\n },\n /**\n * The color of the progress bar\n */\n color: {\n type: String,\n default: null\n }\n },\n data() {\n return {\n stroke: 4\n };\n },\n computed: {\n height() {\n if (this.type === \"circular\") {\n if (Number.isInteger(this.size)) {\n return this.size;\n }\n return 44;\n }\n if (this.size === \"small\") {\n return 4;\n } else if (this.size === \"medium\") {\n return 6;\n }\n return this.size;\n },\n progress() {\n return this.value / 100;\n },\n radius() {\n return this.height / 2;\n },\n radiusNormalized() {\n return this.radius - 3 * this.stroke;\n },\n circumference() {\n return this.radiusNormalized * 2 * Math.PI;\n }\n }\n};\nconst __injectCSSVars__ = () => {\n useCssVars((_vm, _setup) => ({\n \"15a054de\": _vm.color\n }));\n};\nconst __setup__ = __default__.setup;\n__default__.setup = __setup__ ? (props, ctx) => {\n __injectCSSVars__();\n return __setup__(props, ctx);\n} : __injectCSSVars__;\nconst _sfc_main = __default__;\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _vm.type === \"circular\" ? _c(\"span\", { staticClass: \"progress-bar progress-bar--circular\", class: { \"progress-bar--error\": _vm.error }, style: { \"--progress-bar-height\": _vm.height + \"px\" }, attrs: { \"role\": \"progressbar\", \"aria-valuenow\": _vm.value } }, [_c(\"svg\", { attrs: { \"height\": _vm.height, \"width\": _vm.height } }, [_c(\"circle\", { attrs: { \"stroke\": \"currentColor\", \"fill\": \"transparent\", \"stroke-dasharray\": `${_vm.progress * _vm.circumference} ${(1 - _vm.progress) * _vm.circumference}`, \"stroke-dashoffset\": 0.25 * _vm.circumference, \"stroke-width\": _vm.stroke, \"r\": _vm.radiusNormalized, \"cx\": _vm.radius, \"cy\": _vm.radius } }), _c(\"circle\", { attrs: { \"stroke\": \"var(--color-background-darker)\", \"fill\": \"transparent\", \"stroke-dasharray\": `${(1 - _vm.progress) * _vm.circumference} ${_vm.progress * _vm.circumference}`, \"stroke-dashoffset\": (0.25 - _vm.progress) * _vm.circumference, \"stroke-width\": _vm.stroke, \"r\": _vm.radiusNormalized, \"cx\": _vm.radius, \"cy\": _vm.radius } })])]) : _c(\"progress\", { staticClass: \"progress-bar progress-bar--linear vue\", class: { \"progress-bar--error\": _vm.error }, style: { \"--progress-bar-height\": _vm.height + \"px\" }, attrs: { \"max\": \"100\" }, domProps: { \"value\": _vm.value } });\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"06c9abdc\"\n);\nconst NcProgressBar = __component__.exports;\nexport {\n NcProgressBar as N\n};\n//# sourceMappingURL=NcProgressBar-D7zYeXBH.mjs.map\n","if (!Array.prototype.find) {\n Array.prototype.find = function(predicate) {\n if (this === null) {\n throw new TypeError('Array.prototype.find called on null or undefined')\n }\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function')\n }\n var list = Object(this);\n var length = list.length >>> 0;\n var thisArg = arguments[1];\n var value;\n\n for (var i = 0; i < length; i++) {\n value = list[i];\n if (predicate.call(thisArg, value, i, list)) {\n return value\n }\n }\n return undefined\n };\n}\n\nif (window && typeof window.CustomEvent !== \"function\") {\n function CustomEvent$1(event, params) {\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt\n }\n\n if (typeof window.Event !== 'undefined') {\n CustomEvent$1.prototype = window.Event.prototype;\n }\n\n window.CustomEvent = CustomEvent$1;\n}\n\nclass TributeEvents {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.events = this;\n }\n\n static keys() {\n return [\n {\n key: 9,\n value: \"TAB\"\n },\n {\n key: 8,\n value: \"DELETE\"\n },\n {\n key: 13,\n value: \"ENTER\"\n },\n {\n key: 27,\n value: \"ESCAPE\"\n },\n {\n key: 32,\n value: \"SPACE\"\n },\n {\n key: 38,\n value: \"UP\"\n },\n {\n key: 40,\n value: \"DOWN\"\n }\n ];\n }\n\n bind(element) {\n element.boundKeydown = this.keydown.bind(element, this);\n element.boundKeyup = this.keyup.bind(element, this);\n element.boundInput = this.input.bind(element, this);\n\n element.addEventListener(\"keydown\", element.boundKeydown, false);\n element.addEventListener(\"keyup\", element.boundKeyup, false);\n element.addEventListener(\"input\", element.boundInput, false);\n }\n\n unbind(element) {\n element.removeEventListener(\"keydown\", element.boundKeydown, false);\n element.removeEventListener(\"keyup\", element.boundKeyup, false);\n element.removeEventListener(\"input\", element.boundInput, false);\n\n delete element.boundKeydown;\n delete element.boundKeyup;\n delete element.boundInput;\n }\n\n keydown(instance, event) {\n if (instance.shouldDeactivate(event)) {\n instance.tribute.isActive = false;\n instance.tribute.hideMenu();\n }\n\n let element = this;\n instance.commandEvent = false;\n\n TributeEvents.keys().forEach(o => {\n if (o.key === event.keyCode) {\n instance.commandEvent = true;\n instance.callbacks()[o.value.toLowerCase()](event, element);\n }\n });\n }\n\n input(instance, event) {\n instance.inputEvent = true;\n instance.keyup.call(this, instance, event);\n }\n\n click(instance, event) {\n let tribute = instance.tribute;\n if (tribute.menu && tribute.menu.contains(event.target)) {\n let li = event.target;\n event.preventDefault();\n event.stopPropagation();\n while (li.nodeName.toLowerCase() !== \"li\") {\n li = li.parentNode;\n if (!li || li === tribute.menu) {\n throw new Error(\"cannot find the
  • container for the click\");\n }\n }\n tribute.selectItemAtIndex(li.getAttribute(\"data-index\"), event);\n tribute.hideMenu();\n\n // TODO: should fire with externalTrigger and target is outside of menu\n } else if (tribute.current.element && !tribute.current.externalTrigger) {\n tribute.current.externalTrigger = false;\n setTimeout(() => tribute.hideMenu());\n }\n }\n\n keyup(instance, event) {\n if (instance.inputEvent) {\n instance.inputEvent = false;\n }\n instance.updateSelection(this);\n\n if (event.keyCode === 27) return;\n\n if (!instance.tribute.allowSpaces && instance.tribute.hasTrailingSpace) {\n instance.tribute.hasTrailingSpace = false;\n instance.commandEvent = true;\n instance.callbacks()[\"space\"](event, this);\n return;\n }\n\n if (!instance.tribute.isActive) {\n if (instance.tribute.autocompleteMode) {\n instance.callbacks().triggerChar(event, this, \"\");\n } else {\n let keyCode = instance.getKeyCode(instance, this, event);\n\n if (isNaN(keyCode) || !keyCode) return;\n\n let trigger = instance.tribute.triggers().find(trigger => {\n return trigger.charCodeAt(0) === keyCode;\n });\n\n if (typeof trigger !== \"undefined\") {\n instance.callbacks().triggerChar(event, this, trigger);\n }\n }\n }\n\n if (\n instance.tribute.current.mentionText.length <\n instance.tribute.current.collection.menuShowMinLength\n ) {\n return;\n }\n\n if (\n ((instance.tribute.current.trigger ||\n instance.tribute.autocompleteMode) &&\n instance.commandEvent === false) ||\n (instance.tribute.isActive && event.keyCode === 8)\n ) {\n instance.tribute.showMenuFor(this, true);\n }\n }\n\n shouldDeactivate(event) {\n if (!this.tribute.isActive) return false;\n\n if (this.tribute.current.mentionText.length === 0) {\n let eventKeyPressed = false;\n TributeEvents.keys().forEach(o => {\n if (event.keyCode === o.key) eventKeyPressed = true;\n });\n\n return !eventKeyPressed;\n }\n\n return false;\n }\n\n getKeyCode(instance, el, event) {\n let tribute = instance.tribute;\n let info = tribute.range.getTriggerInfo(\n false,\n tribute.hasTrailingSpace,\n true,\n tribute.allowSpaces,\n tribute.autocompleteMode\n );\n\n if (info) {\n return info.mentionTriggerChar.charCodeAt(0);\n } else {\n return false;\n }\n }\n\n updateSelection(el) {\n this.tribute.current.element = el;\n let info = this.tribute.range.getTriggerInfo(\n false,\n this.tribute.hasTrailingSpace,\n true,\n this.tribute.allowSpaces,\n this.tribute.autocompleteMode\n );\n\n if (info) {\n this.tribute.current.selectedPath = info.mentionSelectedPath;\n this.tribute.current.mentionText = info.mentionText;\n this.tribute.current.selectedOffset = info.mentionSelectedOffset;\n }\n }\n\n callbacks() {\n return {\n triggerChar: (e, el, trigger) => {\n let tribute = this.tribute;\n tribute.current.trigger = trigger;\n\n let collectionItem = tribute.collection.find(item => {\n return item.trigger === trigger;\n });\n\n tribute.current.collection = collectionItem;\n\n if (\n tribute.current.mentionText.length >=\n tribute.current.collection.menuShowMinLength &&\n tribute.inputEvent\n ) {\n tribute.showMenuFor(el, true);\n }\n },\n enter: (e, el) => {\n // choose selection\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n setTimeout(() => {\n this.tribute.selectItemAtIndex(this.tribute.menuSelected, e);\n this.tribute.hideMenu();\n }, 0);\n }\n },\n escape: (e, el) => {\n if (this.tribute.isActive) {\n e.preventDefault();\n e.stopPropagation();\n this.tribute.isActive = false;\n this.tribute.hideMenu();\n }\n },\n tab: (e, el) => {\n // choose first match\n this.callbacks().enter(e, el);\n },\n space: (e, el) => {\n if (this.tribute.isActive) {\n if (this.tribute.spaceSelectsMatch) {\n this.callbacks().enter(e, el);\n } else if (!this.tribute.allowSpaces) {\n e.stopPropagation();\n setTimeout(() => {\n this.tribute.hideMenu();\n this.tribute.isActive = false;\n }, 0);\n }\n }\n },\n up: (e, el) => {\n // navigate up ul\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n let count = this.tribute.current.filteredItems.length,\n selected = this.tribute.menuSelected;\n\n if (count > selected && selected > 0) {\n this.tribute.menuSelected--;\n this.setActiveLi();\n } else if (selected === 0) {\n this.tribute.menuSelected = count - 1;\n this.setActiveLi();\n this.tribute.menu.scrollTop = this.tribute.menu.scrollHeight;\n }\n }\n },\n down: (e, el) => {\n // navigate down ul\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n let count = this.tribute.current.filteredItems.length - 1,\n selected = this.tribute.menuSelected;\n\n if (count > selected) {\n this.tribute.menuSelected++;\n this.setActiveLi();\n } else if (count === selected) {\n this.tribute.menuSelected = 0;\n this.setActiveLi();\n this.tribute.menu.scrollTop = 0;\n }\n }\n },\n delete: (e, el) => {\n if (\n this.tribute.isActive &&\n this.tribute.current.mentionText.length < 1\n ) {\n this.tribute.hideMenu();\n } else if (this.tribute.isActive) {\n this.tribute.showMenuFor(el);\n }\n }\n };\n }\n\n setActiveLi(index) {\n let lis = this.tribute.menu.querySelectorAll(\"li\"),\n length = lis.length >>> 0;\n\n if (index) this.tribute.menuSelected = parseInt(index);\n\n for (let i = 0; i < length; i++) {\n let li = lis[i];\n if (i === this.tribute.menuSelected) {\n li.classList.add(this.tribute.current.collection.selectClass);\n\n let liClientRect = li.getBoundingClientRect();\n let menuClientRect = this.tribute.menu.getBoundingClientRect();\n\n if (liClientRect.bottom > menuClientRect.bottom) {\n let scrollDistance = liClientRect.bottom - menuClientRect.bottom;\n this.tribute.menu.scrollTop += scrollDistance;\n } else if (liClientRect.top < menuClientRect.top) {\n let scrollDistance = menuClientRect.top - liClientRect.top;\n this.tribute.menu.scrollTop -= scrollDistance;\n }\n } else {\n li.classList.remove(this.tribute.current.collection.selectClass);\n }\n }\n }\n\n getFullHeight(elem, includeMargin) {\n let height = elem.getBoundingClientRect().height;\n\n if (includeMargin) {\n let style = elem.currentStyle || window.getComputedStyle(elem);\n return (\n height + parseFloat(style.marginTop) + parseFloat(style.marginBottom)\n );\n }\n\n return height;\n }\n}\n\nclass TributeMenuEvents {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.menuEvents = this;\n this.menu = this.tribute.menu;\n }\n\n bind(menu) {\n this.menuClickEvent = this.tribute.events.click.bind(null, this);\n this.menuContainerScrollEvent = this.debounce(\n () => {\n if (this.tribute.isActive) {\n this.tribute.showMenuFor(this.tribute.current.element, false);\n }\n },\n 300,\n false\n );\n this.windowResizeEvent = this.debounce(\n () => {\n if (this.tribute.isActive) {\n this.tribute.range.positionMenuAtCaret(true);\n }\n },\n 300,\n false\n );\n\n // fixes IE11 issues with mousedown\n this.tribute.range\n .getDocument()\n .addEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n this.tribute.range\n .getDocument()\n .addEventListener(\"mousedown\", this.menuClickEvent, false);\n window.addEventListener(\"resize\", this.windowResizeEvent);\n\n if (this.menuContainer) {\n this.menuContainer.addEventListener(\n \"scroll\",\n this.menuContainerScrollEvent,\n false\n );\n } else {\n window.addEventListener(\"scroll\", this.menuContainerScrollEvent);\n }\n }\n\n unbind(menu) {\n this.tribute.range\n .getDocument()\n .removeEventListener(\"mousedown\", this.menuClickEvent, false);\n this.tribute.range\n .getDocument()\n .removeEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n window.removeEventListener(\"resize\", this.windowResizeEvent);\n\n if (this.menuContainer) {\n this.menuContainer.removeEventListener(\n \"scroll\",\n this.menuContainerScrollEvent,\n false\n );\n } else {\n window.removeEventListener(\"scroll\", this.menuContainerScrollEvent);\n }\n }\n\n debounce(func, wait, immediate) {\n var timeout;\n return () => {\n var context = this,\n args = arguments;\n var later = () => {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n }\n}\n\n// Thanks to https://github.com/jeff-collins/ment.io\n\nclass TributeRange {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.range = this;\n }\n\n getDocument() {\n let iframe;\n if (this.tribute.current.collection) {\n iframe = this.tribute.current.collection.iframe;\n }\n\n if (!iframe) {\n return document\n }\n\n return iframe.contentWindow.document\n }\n\n positionMenuAtCaret(scrollTo) {\n let context = this.tribute.current,\n coordinates;\n\n let info = this.getTriggerInfo(false, this.tribute.hasTrailingSpace, true, this.tribute.allowSpaces, this.tribute.autocompleteMode);\n\n if (typeof info !== 'undefined') {\n\n if(!this.tribute.positionMenu){\n this.tribute.menu.style.cssText = `display: block;`;\n return\n }\n\n if (!this.isContentEditable(context.element)) {\n coordinates = this.getTextAreaOrInputUnderlinePosition(this.tribute.current.element,\n info.mentionPosition);\n }\n else {\n coordinates = this.getContentEditableCaretPosition(info.mentionPosition);\n }\n\n this.tribute.menu.style.cssText = `top: ${coordinates.top}px;\n left: ${coordinates.left}px;\n right: ${coordinates.right}px;\n bottom: ${coordinates.bottom}px;\n position: absolute;\n display: block;`;\n\n if (coordinates.left === 'auto') {\n this.tribute.menu.style.left = 'auto';\n }\n\n if (coordinates.top === 'auto') {\n this.tribute.menu.style.top = 'auto';\n }\n\n if (scrollTo) this.scrollIntoView();\n\n window.setTimeout(() => {\n let menuDimensions = {\n width: this.tribute.menu.offsetWidth,\n height: this.tribute.menu.offsetHeight\n };\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n\n let menuIsOffScreenHorizontally = window.innerWidth > menuDimensions.width && (menuIsOffScreen.left || menuIsOffScreen.right);\n let menuIsOffScreenVertically = window.innerHeight > menuDimensions.height && (menuIsOffScreen.top || menuIsOffScreen.bottom);\n if (menuIsOffScreenHorizontally || menuIsOffScreenVertically) {\n this.tribute.menu.style.cssText = 'display: none';\n this.positionMenuAtCaret(scrollTo);\n }\n }, 0);\n\n } else {\n this.tribute.menu.style.cssText = 'display: none';\n }\n }\n\n get menuContainerIsBody() {\n return this.tribute.menuContainer === document.body || !this.tribute.menuContainer;\n }\n\n\n selectElement(targetElement, path, offset) {\n let range;\n let elem = targetElement;\n\n if (path) {\n for (var i = 0; i < path.length; i++) {\n elem = elem.childNodes[path[i]];\n if (elem === undefined) {\n return\n }\n while (elem.length < offset) {\n offset -= elem.length;\n elem = elem.nextSibling;\n }\n if (elem.childNodes.length === 0 && !elem.length) {\n elem = elem.previousSibling;\n }\n }\n }\n let sel = this.getWindowSelection();\n\n range = this.getDocument().createRange();\n range.setStart(elem, offset);\n range.setEnd(elem, offset);\n range.collapse(true);\n\n try {\n sel.removeAllRanges();\n } catch (error) {}\n\n sel.addRange(range);\n targetElement.focus();\n }\n\n replaceTriggerText(text, requireLeadingSpace, hasTrailingSpace, originalEvent, item) {\n let info = this.getTriggerInfo(true, hasTrailingSpace, requireLeadingSpace, this.tribute.allowSpaces, this.tribute.autocompleteMode);\n\n if (info !== undefined) {\n let context = this.tribute.current;\n let replaceEvent = new CustomEvent('tribute-replaced', {\n detail: {\n item: item,\n instance: context,\n context: info,\n event: originalEvent,\n }\n });\n\n if (!this.isContentEditable(context.element)) {\n let myField = this.tribute.current.element;\n let textSuffix = typeof this.tribute.replaceTextSuffix == 'string'\n ? this.tribute.replaceTextSuffix\n : ' ';\n text += textSuffix;\n let startPos = info.mentionPosition;\n let endPos = info.mentionPosition + info.mentionText.length + textSuffix.length;\n if (!this.tribute.autocompleteMode) {\n endPos += info.mentionTriggerChar.length - 1;\n }\n myField.value = myField.value.substring(0, startPos) + text +\n myField.value.substring(endPos, myField.value.length);\n myField.selectionStart = startPos + text.length;\n myField.selectionEnd = startPos + text.length;\n } else {\n // add a space to the end of the pasted text\n let textSuffix = typeof this.tribute.replaceTextSuffix == 'string'\n ? this.tribute.replaceTextSuffix\n : '\\xA0';\n text += textSuffix;\n let endPos = info.mentionPosition + info.mentionText.length;\n if (!this.tribute.autocompleteMode) {\n endPos += info.mentionTriggerChar.length;\n }\n this.pasteHtml(text, info.mentionPosition, endPos);\n }\n\n context.element.dispatchEvent(new CustomEvent('input', { bubbles: true }));\n context.element.dispatchEvent(replaceEvent);\n }\n }\n\n pasteHtml(html, startPos, endPos) {\n let range, sel;\n sel = this.getWindowSelection();\n range = this.getDocument().createRange();\n range.setStart(sel.anchorNode, startPos);\n range.setEnd(sel.anchorNode, endPos);\n range.deleteContents();\n\n let el = this.getDocument().createElement('div');\n el.innerHTML = html;\n let frag = this.getDocument().createDocumentFragment(),\n node, lastNode;\n while ((node = el.firstChild)) {\n lastNode = frag.appendChild(node);\n }\n range.insertNode(frag);\n\n // Preserve the selection\n if (lastNode) {\n range = range.cloneRange();\n range.setStartAfter(lastNode);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n }\n\n getWindowSelection() {\n if (this.tribute.collection.iframe) {\n return this.tribute.collection.iframe.contentWindow.getSelection()\n }\n\n return window.getSelection()\n }\n\n getNodePositionInParent(element) {\n if (element.parentNode === null) {\n return 0\n }\n\n for (var i = 0; i < element.parentNode.childNodes.length; i++) {\n let node = element.parentNode.childNodes[i];\n\n if (node === element) {\n return i\n }\n }\n }\n\n getContentEditableSelectedPath(ctx) {\n let sel = this.getWindowSelection();\n let selected = sel.anchorNode;\n let path = [];\n let offset;\n\n if (selected != null) {\n let i;\n let ce = selected.contentEditable;\n while (selected !== null && ce !== 'true') {\n i = this.getNodePositionInParent(selected);\n path.push(i);\n selected = selected.parentNode;\n if (selected !== null) {\n ce = selected.contentEditable;\n }\n }\n path.reverse();\n\n // getRangeAt may not exist, need alternative\n offset = sel.getRangeAt(0).startOffset;\n\n return {\n selected: selected,\n path: path,\n offset: offset\n }\n }\n }\n\n getTextPrecedingCurrentSelection() {\n let context = this.tribute.current,\n text = '';\n\n if (!this.isContentEditable(context.element)) {\n let textComponent = this.tribute.current.element;\n if (textComponent) {\n let startPos = textComponent.selectionStart;\n if (textComponent.value && startPos >= 0) {\n text = textComponent.value.substring(0, startPos);\n }\n }\n\n } else {\n let selectedElem = this.getWindowSelection().anchorNode;\n\n if (selectedElem != null) {\n let workingNodeContent = selectedElem.textContent;\n let selectStartOffset = this.getWindowSelection().getRangeAt(0).startOffset;\n\n if (workingNodeContent && selectStartOffset >= 0) {\n text = workingNodeContent.substring(0, selectStartOffset);\n }\n }\n }\n\n return text\n }\n\n getLastWordInText(text) {\n text = text.replace(/\\u00A0/g, ' '); // https://stackoverflow.com/questions/29850407/how-do-i-replace-unicode-character-u00a0-with-a-space-in-javascript\n let wordsArray = text.split(/\\s+/);\n let worldsCount = wordsArray.length - 1;\n return wordsArray[worldsCount].trim()\n }\n\n getTriggerInfo(menuAlreadyActive, hasTrailingSpace, requireLeadingSpace, allowSpaces, isAutocomplete) {\n let ctx = this.tribute.current;\n let selected, path, offset;\n\n if (!this.isContentEditable(ctx.element)) {\n selected = this.tribute.current.element;\n } else {\n let selectionInfo = this.getContentEditableSelectedPath(ctx);\n\n if (selectionInfo) {\n selected = selectionInfo.selected;\n path = selectionInfo.path;\n offset = selectionInfo.offset;\n }\n }\n\n let effectiveRange = this.getTextPrecedingCurrentSelection();\n let lastWordOfEffectiveRange = this.getLastWordInText(effectiveRange);\n\n if (isAutocomplete) {\n return {\n mentionPosition: effectiveRange.length - lastWordOfEffectiveRange.length,\n mentionText: lastWordOfEffectiveRange,\n mentionSelectedElement: selected,\n mentionSelectedPath: path,\n mentionSelectedOffset: offset\n }\n }\n\n if (effectiveRange !== undefined && effectiveRange !== null) {\n let mostRecentTriggerCharPos = -1;\n let triggerChar;\n\n this.tribute.collection.forEach(config => {\n let c = config.trigger;\n let idx = config.requireLeadingSpace ?\n this.lastIndexWithLeadingSpace(effectiveRange, c) :\n effectiveRange.lastIndexOf(c);\n\n if (idx > mostRecentTriggerCharPos) {\n mostRecentTriggerCharPos = idx;\n triggerChar = c;\n requireLeadingSpace = config.requireLeadingSpace;\n }\n });\n\n if (mostRecentTriggerCharPos >= 0 &&\n (\n mostRecentTriggerCharPos === 0 ||\n !requireLeadingSpace ||\n /[\\xA0\\s]/g.test(\n effectiveRange.substring(\n mostRecentTriggerCharPos - 1,\n mostRecentTriggerCharPos)\n )\n )\n ) {\n let currentTriggerSnippet = effectiveRange.substring(mostRecentTriggerCharPos + triggerChar.length,\n effectiveRange.length);\n\n triggerChar = effectiveRange.substring(mostRecentTriggerCharPos, mostRecentTriggerCharPos + triggerChar.length);\n let firstSnippetChar = currentTriggerSnippet.substring(0, 1);\n let leadingSpace = currentTriggerSnippet.length > 0 &&\n (\n firstSnippetChar === ' ' ||\n firstSnippetChar === '\\xA0'\n );\n if (hasTrailingSpace) {\n currentTriggerSnippet = currentTriggerSnippet.trim();\n }\n\n let regex = allowSpaces ? /[^\\S ]/g : /[\\xA0\\s]/g;\n\n this.tribute.hasTrailingSpace = regex.test(currentTriggerSnippet);\n\n if (!leadingSpace && (menuAlreadyActive || !(regex.test(currentTriggerSnippet)))) {\n return {\n mentionPosition: mostRecentTriggerCharPos,\n mentionText: currentTriggerSnippet,\n mentionSelectedElement: selected,\n mentionSelectedPath: path,\n mentionSelectedOffset: offset,\n mentionTriggerChar: triggerChar\n }\n }\n }\n }\n }\n\n lastIndexWithLeadingSpace (str, trigger) {\n let reversedStr = str.split('').reverse().join('');\n let index = -1;\n\n for (let cidx = 0, len = str.length; cidx < len; cidx++) {\n let firstChar = cidx === str.length - 1;\n let leadingSpace = /\\s/.test(reversedStr[cidx + 1]);\n\n let match = true;\n for (let triggerIdx = trigger.length - 1; triggerIdx >= 0; triggerIdx--) {\n if (trigger[triggerIdx] !== reversedStr[cidx-triggerIdx]) {\n match = false;\n break\n }\n }\n\n if (match && (firstChar || leadingSpace)) {\n index = str.length - 1 - cidx;\n break\n }\n }\n\n return index\n }\n\n isContentEditable(element) {\n return element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA'\n }\n\n isMenuOffScreen(coordinates, menuDimensions) {\n let windowWidth = window.innerWidth;\n let windowHeight = window.innerHeight;\n let doc = document.documentElement;\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\n let menuTop = typeof coordinates.top === 'number' ? coordinates.top : windowTop + windowHeight - coordinates.bottom - menuDimensions.height;\n let menuRight = typeof coordinates.right === 'number' ? coordinates.right : coordinates.left + menuDimensions.width;\n let menuBottom = typeof coordinates.bottom === 'number' ? coordinates.bottom : coordinates.top + menuDimensions.height;\n let menuLeft = typeof coordinates.left === 'number' ? coordinates.left : windowLeft + windowWidth - coordinates.right - menuDimensions.width;\n\n return {\n top: menuTop < Math.floor(windowTop),\n right: menuRight > Math.ceil(windowLeft + windowWidth),\n bottom: menuBottom > Math.ceil(windowTop + windowHeight),\n left: menuLeft < Math.floor(windowLeft)\n }\n }\n\n getMenuDimensions() {\n // Width of the menu depends of its contents and position\n // We must check what its width would be without any obstruction\n // This way, we can achieve good positioning for flipping the menu\n let dimensions = {\n width: null,\n height: null\n };\n\n this.tribute.menu.style.cssText = `top: 0px;\n left: 0px;\n position: fixed;\n display: block;\n visibility; hidden;`;\n dimensions.width = this.tribute.menu.offsetWidth;\n dimensions.height = this.tribute.menu.offsetHeight;\n\n this.tribute.menu.style.cssText = `display: none;`;\n\n return dimensions\n }\n\n getTextAreaOrInputUnderlinePosition(element, position, flipped) {\n let properties = ['direction', 'boxSizing', 'width', 'height', 'overflowX',\n 'overflowY', 'borderTopWidth', 'borderRightWidth',\n 'borderBottomWidth', 'borderLeftWidth', 'paddingTop',\n 'paddingRight', 'paddingBottom', 'paddingLeft',\n 'fontStyle', 'fontVariant', 'fontWeight', 'fontStretch',\n 'fontSize', 'fontSizeAdjust', 'lineHeight', 'fontFamily',\n 'textAlign', 'textTransform', 'textIndent',\n 'textDecoration', 'letterSpacing', 'wordSpacing'\n ];\n\n let isFirefox = (window.mozInnerScreenX !== null);\n\n let div = this.getDocument().createElement('div');\n div.id = 'input-textarea-caret-position-mirror-div';\n this.getDocument().body.appendChild(div);\n\n let style = div.style;\n let computed = window.getComputedStyle ? getComputedStyle(element) : element.currentStyle;\n\n style.whiteSpace = 'pre-wrap';\n if (element.nodeName !== 'INPUT') {\n style.wordWrap = 'break-word';\n }\n\n // position off-screen\n style.position = 'absolute';\n style.visibility = 'hidden';\n\n // transfer the element's properties to the div\n properties.forEach(prop => {\n style[prop] = computed[prop];\n });\n\n if (isFirefox) {\n style.width = `${(parseInt(computed.width) - 2)}px`;\n if (element.scrollHeight > parseInt(computed.height))\n style.overflowY = 'scroll';\n } else {\n style.overflow = 'hidden';\n }\n\n div.textContent = element.value.substring(0, position);\n\n if (element.nodeName === 'INPUT') {\n div.textContent = div.textContent.replace(/\\s/g, ' ');\n }\n\n let span = this.getDocument().createElement('span');\n span.textContent = element.value.substring(position) || '.';\n div.appendChild(span);\n\n let rect = element.getBoundingClientRect();\n let doc = document.documentElement;\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\n let top = 0;\n let left = 0;\n if (this.menuContainerIsBody) {\n top = rect.top;\n left = rect.left;\n }\n\n let coordinates = {\n top: top + windowTop + span.offsetTop + parseInt(computed.borderTopWidth) + parseInt(computed.fontSize) - element.scrollTop,\n left: left + windowLeft + span.offsetLeft + parseInt(computed.borderLeftWidth)\n };\n\n let windowWidth = window.innerWidth;\n let windowHeight = window.innerHeight;\n\n let menuDimensions = this.getMenuDimensions();\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n\n if (menuIsOffScreen.right) {\n coordinates.right = windowWidth - coordinates.left;\n coordinates.left = 'auto';\n }\n\n let parentHeight = this.tribute.menuContainer\n ? this.tribute.menuContainer.offsetHeight\n : this.getDocument().body.offsetHeight;\n\n if (menuIsOffScreen.bottom) {\n let parentRect = this.tribute.menuContainer\n ? this.tribute.menuContainer.getBoundingClientRect()\n : this.getDocument().body.getBoundingClientRect();\n let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top);\n\n coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top - span.offsetTop);\n coordinates.top = 'auto';\n }\n\n menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n if (menuIsOffScreen.left) {\n coordinates.left = windowWidth > menuDimensions.width\n ? windowLeft + windowWidth - menuDimensions.width\n : windowLeft;\n delete coordinates.right;\n }\n if (menuIsOffScreen.top) {\n coordinates.top = windowHeight > menuDimensions.height\n ? windowTop + windowHeight - menuDimensions.height\n : windowTop;\n delete coordinates.bottom;\n }\n\n this.getDocument().body.removeChild(div);\n return coordinates\n }\n\n getContentEditableCaretPosition(selectedNodePosition) {\n let range;\n let sel = this.getWindowSelection();\n\n range = this.getDocument().createRange();\n range.setStart(sel.anchorNode, selectedNodePosition);\n range.setEnd(sel.anchorNode, selectedNodePosition);\n\n range.collapse(false);\n\n let rect = range.getBoundingClientRect();\n let doc = document.documentElement;\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\n let left = rect.left;\n let top = rect.top;\n\n let coordinates = {\n left: left + windowLeft,\n top: top + rect.height + windowTop\n };\n let windowWidth = window.innerWidth;\n let windowHeight = window.innerHeight;\n\n let menuDimensions = this.getMenuDimensions();\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n\n if (menuIsOffScreen.right) {\n coordinates.left = 'auto';\n coordinates.right = windowWidth - rect.left - windowLeft;\n }\n\n let parentHeight = this.tribute.menuContainer\n ? this.tribute.menuContainer.offsetHeight\n : this.getDocument().body.offsetHeight;\n\n if (menuIsOffScreen.bottom) {\n let parentRect = this.tribute.menuContainer\n ? this.tribute.menuContainer.getBoundingClientRect()\n : this.getDocument().body.getBoundingClientRect();\n let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top);\n\n coordinates.top = 'auto';\n coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top);\n }\n\n menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n if (menuIsOffScreen.left) {\n coordinates.left = windowWidth > menuDimensions.width\n ? windowLeft + windowWidth - menuDimensions.width\n : windowLeft;\n delete coordinates.right;\n }\n if (menuIsOffScreen.top) {\n coordinates.top = windowHeight > menuDimensions.height\n ? windowTop + windowHeight - menuDimensions.height\n : windowTop;\n delete coordinates.bottom;\n }\n\n if (!this.menuContainerIsBody) {\n coordinates.left = coordinates.left ? coordinates.left - this.tribute.menuContainer.offsetLeft : coordinates.left;\n coordinates.top = coordinates.top ? coordinates.top - this.tribute.menuContainer.offsetTop : coordinates.top;\n }\n\n return coordinates\n }\n\n scrollIntoView(elem) {\n let reasonableBuffer = 20,\n clientRect;\n let maxScrollDisplacement = 100;\n let e = this.menu;\n\n if (typeof e === 'undefined') return;\n\n while (clientRect === undefined || clientRect.height === 0) {\n clientRect = e.getBoundingClientRect();\n\n if (clientRect.height === 0) {\n e = e.childNodes[0];\n if (e === undefined || !e.getBoundingClientRect) {\n return\n }\n }\n }\n\n let elemTop = clientRect.top;\n let elemBottom = elemTop + clientRect.height;\n\n if (elemTop < 0) {\n window.scrollTo(0, window.pageYOffset + clientRect.top - reasonableBuffer);\n } else if (elemBottom > window.innerHeight) {\n let maxY = window.pageYOffset + clientRect.top - reasonableBuffer;\n\n if (maxY - window.pageYOffset > maxScrollDisplacement) {\n maxY = window.pageYOffset + maxScrollDisplacement;\n }\n\n let targetY = window.pageYOffset - (window.innerHeight - elemBottom);\n\n if (targetY > maxY) {\n targetY = maxY;\n }\n\n window.scrollTo(0, targetY);\n }\n }\n}\n\n// Thanks to https://github.com/mattyork/fuzzy\nclass TributeSearch {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.search = this;\n }\n\n simpleFilter(pattern, array) {\n return array.filter(string => {\n return this.test(pattern, string)\n })\n }\n\n test(pattern, string) {\n return this.match(pattern, string) !== null\n }\n\n match(pattern, string, opts) {\n opts = opts || {};\n let len = string.length,\n pre = opts.pre || '',\n post = opts.post || '',\n compareString = opts.caseSensitive && string || string.toLowerCase();\n\n if (opts.skip) {\n return {rendered: string, score: 0}\n }\n\n pattern = opts.caseSensitive && pattern || pattern.toLowerCase();\n\n let patternCache = this.traverse(compareString, pattern, 0, 0, []);\n if (!patternCache) {\n return null\n }\n return {\n rendered: this.render(string, patternCache.cache, pre, post),\n score: patternCache.score\n }\n }\n\n traverse(string, pattern, stringIndex, patternIndex, patternCache) {\n // if the pattern search at end\n if (pattern.length === patternIndex) {\n\n // calculate score and copy the cache containing the indices where it's found\n return {\n score: this.calculateScore(patternCache),\n cache: patternCache.slice()\n }\n }\n\n // if string at end or remaining pattern > remaining string\n if (string.length === stringIndex || pattern.length - patternIndex > string.length - stringIndex) {\n return undefined\n }\n\n let c = pattern[patternIndex];\n let index = string.indexOf(c, stringIndex);\n let best, temp;\n\n while (index > -1) {\n patternCache.push(index);\n temp = this.traverse(string, pattern, index + 1, patternIndex + 1, patternCache);\n patternCache.pop();\n\n // if downstream traversal failed, return best answer so far\n if (!temp) {\n return best\n }\n\n if (!best || best.score < temp.score) {\n best = temp;\n }\n\n index = string.indexOf(c, index + 1);\n }\n\n return best\n }\n\n calculateScore(patternCache) {\n let score = 0;\n let temp = 1;\n\n patternCache.forEach((index, i) => {\n if (i > 0) {\n if (patternCache[i - 1] + 1 === index) {\n temp += temp + 1;\n }\n else {\n temp = 1;\n }\n }\n\n score += temp;\n });\n\n return score\n }\n\n render(string, indices, pre, post) {\n var rendered = string.substring(0, indices[0]);\n\n indices.forEach((index, i) => {\n rendered += pre + string[index] + post +\n string.substring(index + 1, (indices[i + 1]) ? indices[i + 1] : string.length);\n });\n\n return rendered\n }\n\n filter(pattern, arr, opts) {\n opts = opts || {};\n return arr\n .reduce((prev, element, idx, arr) => {\n let str = element;\n\n if (opts.extract) {\n str = opts.extract(element);\n\n if (!str) { // take care of undefineds / nulls / etc.\n str = '';\n }\n }\n\n let rendered = this.match(pattern, str, opts);\n\n if (rendered != null) {\n prev[prev.length] = {\n string: rendered.rendered,\n score: rendered.score,\n index: idx,\n original: element\n };\n }\n\n return prev\n }, [])\n\n .sort((a, b) => {\n let compare = b.score - a.score;\n if (compare) return compare\n return a.index - b.index\n })\n }\n}\n\nclass Tribute {\n constructor({\n values = null,\n iframe = null,\n selectClass = \"highlight\",\n containerClass = \"tribute-container\",\n itemClass = \"\",\n trigger = \"@\",\n autocompleteMode = false,\n selectTemplate = null,\n menuItemTemplate = null,\n lookup = \"key\",\n fillAttr = \"value\",\n collection = null,\n menuContainer = null,\n noMatchTemplate = null,\n requireLeadingSpace = true,\n allowSpaces = false,\n replaceTextSuffix = null,\n positionMenu = true,\n spaceSelectsMatch = false,\n searchOpts = {},\n menuItemLimit = null,\n menuShowMinLength = 0\n }) {\n this.autocompleteMode = autocompleteMode;\n this.menuSelected = 0;\n this.current = {};\n this.inputEvent = false;\n this.isActive = false;\n this.menuContainer = menuContainer;\n this.allowSpaces = allowSpaces;\n this.replaceTextSuffix = replaceTextSuffix;\n this.positionMenu = positionMenu;\n this.hasTrailingSpace = false;\n this.spaceSelectsMatch = spaceSelectsMatch;\n\n if (this.autocompleteMode) {\n trigger = \"\";\n allowSpaces = false;\n }\n\n if (values) {\n this.collection = [\n {\n // symbol that starts the lookup\n trigger: trigger,\n\n // is it wrapped in an iframe\n iframe: iframe,\n\n // class applied to selected item\n selectClass: selectClass,\n\n // class applied to the Container\n containerClass: containerClass,\n\n // class applied to each item\n itemClass: itemClass,\n\n // function called on select that retuns the content to insert\n selectTemplate: (\n selectTemplate || Tribute.defaultSelectTemplate\n ).bind(this),\n\n // function called that returns content for an item\n menuItemTemplate: (\n menuItemTemplate || Tribute.defaultMenuItemTemplate\n ).bind(this),\n\n // function called when menu is empty, disables hiding of menu.\n noMatchTemplate: (t => {\n if (typeof t === \"string\") {\n if (t.trim() === \"\") return null;\n return t;\n }\n if (typeof t === \"function\") {\n return t.bind(this);\n }\n\n return (\n noMatchTemplate ||\n function() {\n return \"
  • No Match Found!
  • \";\n }.bind(this)\n );\n })(noMatchTemplate),\n\n // column to search against in the object\n lookup: lookup,\n\n // column that contains the content to insert by default\n fillAttr: fillAttr,\n\n // array of objects or a function returning an array of objects\n values: values,\n\n requireLeadingSpace: requireLeadingSpace,\n\n searchOpts: searchOpts,\n\n menuItemLimit: menuItemLimit,\n\n menuShowMinLength: menuShowMinLength\n }\n ];\n } else if (collection) {\n if (this.autocompleteMode)\n console.warn(\n \"Tribute in autocomplete mode does not work for collections\"\n );\n this.collection = collection.map(item => {\n return {\n trigger: item.trigger || trigger,\n iframe: item.iframe || iframe,\n selectClass: item.selectClass || selectClass,\n containerClass: item.containerClass || containerClass,\n itemClass: item.itemClass || itemClass,\n selectTemplate: (\n item.selectTemplate || Tribute.defaultSelectTemplate\n ).bind(this),\n menuItemTemplate: (\n item.menuItemTemplate || Tribute.defaultMenuItemTemplate\n ).bind(this),\n // function called when menu is empty, disables hiding of menu.\n noMatchTemplate: (t => {\n if (typeof t === \"string\") {\n if (t.trim() === \"\") return null;\n return t;\n }\n if (typeof t === \"function\") {\n return t.bind(this);\n }\n\n return (\n noMatchTemplate ||\n function() {\n return \"
  • No Match Found!
  • \";\n }.bind(this)\n );\n })(noMatchTemplate),\n lookup: item.lookup || lookup,\n fillAttr: item.fillAttr || fillAttr,\n values: item.values,\n requireLeadingSpace: item.requireLeadingSpace,\n searchOpts: item.searchOpts || searchOpts,\n menuItemLimit: item.menuItemLimit || menuItemLimit,\n menuShowMinLength: item.menuShowMinLength || menuShowMinLength\n };\n });\n } else {\n throw new Error(\"[Tribute] No collection specified.\");\n }\n\n new TributeRange(this);\n new TributeEvents(this);\n new TributeMenuEvents(this);\n new TributeSearch(this);\n }\n\n get isActive() {\n return this._isActive;\n }\n\n set isActive(val) {\n if (this._isActive != val) {\n this._isActive = val;\n if (this.current.element) {\n let noMatchEvent = new CustomEvent(`tribute-active-${val}`);\n this.current.element.dispatchEvent(noMatchEvent);\n }\n }\n }\n\n static defaultSelectTemplate(item) {\n if (typeof item === \"undefined\")\n return `${this.current.collection.trigger}${this.current.mentionText}`;\n if (this.range.isContentEditable(this.current.element)) {\n return (\n '' +\n (this.current.collection.trigger +\n item.original[this.current.collection.fillAttr]) +\n \"\"\n );\n }\n\n return (\n this.current.collection.trigger +\n item.original[this.current.collection.fillAttr]\n );\n }\n\n static defaultMenuItemTemplate(matchItem) {\n return matchItem.string;\n }\n\n static inputTypes() {\n return [\"TEXTAREA\", \"INPUT\"];\n }\n\n triggers() {\n return this.collection.map(config => {\n return config.trigger;\n });\n }\n\n attach(el) {\n if (!el) {\n throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n }\n\n // Check if it is a jQuery collection\n if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n el = el.get();\n }\n\n // Is el an Array/Array-like object?\n if (\n el.constructor === NodeList ||\n el.constructor === HTMLCollection ||\n el.constructor === Array\n ) {\n let length = el.length;\n for (var i = 0; i < length; ++i) {\n this._attach(el[i]);\n }\n } else {\n this._attach(el);\n }\n }\n\n _attach(el) {\n if (el.hasAttribute(\"data-tribute\")) {\n console.warn(\"Tribute was already bound to \" + el.nodeName);\n }\n\n this.ensureEditable(el);\n this.events.bind(el);\n el.setAttribute(\"data-tribute\", true);\n }\n\n ensureEditable(element) {\n if (Tribute.inputTypes().indexOf(element.nodeName) === -1) {\n if (element.contentEditable) {\n element.contentEditable = true;\n } else {\n throw new Error(\"[Tribute] Cannot bind to \" + element.nodeName);\n }\n }\n }\n\n createMenu(containerClass) {\n let wrapper = this.range.getDocument().createElement(\"div\"),\n ul = this.range.getDocument().createElement(\"ul\");\n wrapper.className = containerClass;\n wrapper.appendChild(ul);\n\n if (this.menuContainer) {\n return this.menuContainer.appendChild(wrapper);\n }\n\n return this.range.getDocument().body.appendChild(wrapper);\n }\n\n showMenuFor(element, scrollTo) {\n // Only proceed if menu isn't already shown for the current element & mentionText\n if (\n this.isActive &&\n this.current.element === element &&\n this.current.mentionText === this.currentMentionTextSnapshot\n ) {\n return;\n }\n this.currentMentionTextSnapshot = this.current.mentionText;\n\n // create the menu if it doesn't exist.\n if (!this.menu) {\n this.menu = this.createMenu(this.current.collection.containerClass);\n element.tributeMenu = this.menu;\n this.menuEvents.bind(this.menu);\n }\n\n this.isActive = true;\n this.menuSelected = 0;\n\n if (!this.current.mentionText) {\n this.current.mentionText = \"\";\n }\n\n const processValues = values => {\n // Tribute may not be active any more by the time the value callback returns\n if (!this.isActive) {\n return;\n }\n\n let items = this.search.filter(this.current.mentionText, values, {\n pre: this.current.collection.searchOpts.pre || \"\",\n post: this.current.collection.searchOpts.post || \"\",\n skip: this.current.collection.searchOpts.skip,\n extract: el => {\n if (typeof this.current.collection.lookup === \"string\") {\n return el[this.current.collection.lookup];\n } else if (typeof this.current.collection.lookup === \"function\") {\n return this.current.collection.lookup(el, this.current.mentionText);\n } else {\n throw new Error(\n \"Invalid lookup attribute, lookup must be string or function.\"\n );\n }\n }\n });\n\n if (this.current.collection.menuItemLimit) {\n items = items.slice(0, this.current.collection.menuItemLimit);\n }\n\n this.current.filteredItems = items;\n\n let ul = this.menu.querySelector(\"ul\");\n\n this.range.positionMenuAtCaret(scrollTo);\n\n if (!items.length) {\n let noMatchEvent = new CustomEvent(\"tribute-no-match\", {\n detail: this.menu\n });\n this.current.element.dispatchEvent(noMatchEvent);\n if (\n (typeof this.current.collection.noMatchTemplate === \"function\" &&\n !this.current.collection.noMatchTemplate()) ||\n !this.current.collection.noMatchTemplate\n ) {\n this.hideMenu();\n } else {\n typeof this.current.collection.noMatchTemplate === \"function\"\n ? (ul.innerHTML = this.current.collection.noMatchTemplate())\n : (ul.innerHTML = this.current.collection.noMatchTemplate);\n }\n\n return;\n }\n\n ul.innerHTML = \"\";\n let fragment = this.range.getDocument().createDocumentFragment();\n\n items.forEach((item, index) => {\n let li = this.range.getDocument().createElement(\"li\");\n li.setAttribute(\"data-index\", index);\n li.className = this.current.collection.itemClass;\n li.addEventListener(\"mousemove\", e => {\n let [li, index] = this._findLiTarget(e.target);\n if (e.movementY !== 0) {\n this.events.setActiveLi(index);\n }\n });\n if (this.menuSelected === index) {\n li.classList.add(this.current.collection.selectClass);\n }\n li.innerHTML = this.current.collection.menuItemTemplate(item);\n fragment.appendChild(li);\n });\n ul.appendChild(fragment);\n };\n\n if (typeof this.current.collection.values === \"function\") {\n this.current.collection.values(this.current.mentionText, processValues);\n } else {\n processValues(this.current.collection.values);\n }\n }\n\n _findLiTarget(el) {\n if (!el) return [];\n const index = el.getAttribute(\"data-index\");\n return !index ? this._findLiTarget(el.parentNode) : [el, index];\n }\n\n showMenuForCollection(element, collectionIndex) {\n if (element !== document.activeElement) {\n this.placeCaretAtEnd(element);\n }\n\n this.current.collection = this.collection[collectionIndex || 0];\n this.current.externalTrigger = true;\n this.current.element = element;\n\n if (element.isContentEditable)\n this.insertTextAtCursor(this.current.collection.trigger);\n else this.insertAtCaret(element, this.current.collection.trigger);\n\n this.showMenuFor(element);\n }\n\n // TODO: make sure this works for inputs/textareas\n placeCaretAtEnd(el) {\n el.focus();\n if (\n typeof window.getSelection != \"undefined\" &&\n typeof document.createRange != \"undefined\"\n ) {\n var range = document.createRange();\n range.selectNodeContents(el);\n range.collapse(false);\n var sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n } else if (typeof document.body.createTextRange != \"undefined\") {\n var textRange = document.body.createTextRange();\n textRange.moveToElementText(el);\n textRange.collapse(false);\n textRange.select();\n }\n }\n\n // for contenteditable\n insertTextAtCursor(text) {\n var sel, range;\n sel = window.getSelection();\n range = sel.getRangeAt(0);\n range.deleteContents();\n var textNode = document.createTextNode(text);\n range.insertNode(textNode);\n range.selectNodeContents(textNode);\n range.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n\n // for regular inputs\n insertAtCaret(textarea, text) {\n var scrollPos = textarea.scrollTop;\n var caretPos = textarea.selectionStart;\n\n var front = textarea.value.substring(0, caretPos);\n var back = textarea.value.substring(\n textarea.selectionEnd,\n textarea.value.length\n );\n textarea.value = front + text + back;\n caretPos = caretPos + text.length;\n textarea.selectionStart = caretPos;\n textarea.selectionEnd = caretPos;\n textarea.focus();\n textarea.scrollTop = scrollPos;\n }\n\n hideMenu() {\n if (this.menu) {\n this.menu.style.cssText = \"display: none;\";\n this.isActive = false;\n this.menuSelected = 0;\n this.current = {};\n }\n }\n\n selectItemAtIndex(index, originalEvent) {\n index = parseInt(index);\n if (typeof index !== \"number\" || isNaN(index)) return;\n let item = this.current.filteredItems[index];\n let content = this.current.collection.selectTemplate(item);\n if (content !== null) this.replaceText(content, originalEvent, item);\n }\n\n replaceText(content, originalEvent, item) {\n this.range.replaceTriggerText(content, true, true, originalEvent, item);\n }\n\n _append(collection, newValues, replace) {\n if (typeof collection.values === \"function\") {\n throw new Error(\"Unable to append to values, as it is a function.\");\n } else if (!replace) {\n collection.values = collection.values.concat(newValues);\n } else {\n collection.values = newValues;\n }\n }\n\n append(collectionIndex, newValues, replace) {\n let index = parseInt(collectionIndex);\n if (typeof index !== \"number\")\n throw new Error(\"please provide an index for the collection to update.\");\n\n let collection = this.collection[index];\n\n this._append(collection, newValues, replace);\n }\n\n appendCurrent(newValues, replace) {\n if (this.isActive) {\n this._append(this.current.collection, newValues, replace);\n } else {\n throw new Error(\n \"No active state. Please use append instead and pass an index.\"\n );\n }\n }\n\n detach(el) {\n if (!el) {\n throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n }\n\n // Check if it is a jQuery collection\n if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n el = el.get();\n }\n\n // Is el an Array/Array-like object?\n if (\n el.constructor === NodeList ||\n el.constructor === HTMLCollection ||\n el.constructor === Array\n ) {\n let length = el.length;\n for (var i = 0; i < length; ++i) {\n this._detach(el[i]);\n }\n } else {\n this._detach(el);\n }\n }\n\n _detach(el) {\n this.events.unbind(el);\n if (el.tributeMenu) {\n this.menuEvents.unbind(el.tributeMenu);\n }\n\n setTimeout(() => {\n el.removeAttribute(\"data-tribute\");\n this.isActive = false;\n if (el.tributeMenu) {\n el.tributeMenu.remove();\n }\n });\n }\n}\n\n/**\n * Tribute.js\n * Native ES6 JavaScript @mention Plugin\n **/\n\nexport default Tribute;\n","import '../assets/NcRelatedResourcesPanel-D5DxWJPc.css';\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport { r as register, V as t39, a as t, W as t43, X as t9 } from \"./_l10n-Dv1YKfKS.mjs\";\nimport { N as NcButton } from \"./NcButton-DAGirW_B.mjs\";\nimport { g as getRoute } from \"./autolink-BoBR7PZC.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { getCapabilities } from \"@nextcloud/capabilities\";\nimport { C as ChevronDown } from \"./ChevronDown-Dc_aK7Xg.mjs\";\nimport { C as ChevronUp } from \"./ChevronUp-Dw4mVwZP.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-Bui9PhAS.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nregister(t39);\nconst _sfc_main$4 = {\n name: \"NcResource\",\n components: {\n NcButton\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n icon: {\n type: String,\n required: true\n },\n name: {\n type: String,\n required: true\n },\n url: {\n type: String,\n required: true\n }\n },\n data() {\n return {\n labelTranslated: t('Open link to \"{resourceName}\"', { resourceName: this.name })\n };\n },\n computed: {\n route() {\n return getRoute(this.$router, this.url);\n }\n },\n methods: {\n t\n }\n};\nvar _sfc_render$4 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"li\", { staticClass: \"resource\" }, [_c(\"NcButton\", { staticClass: \"resource__button\", attrs: { \"aria-label\": _vm.labelTranslated, \"to\": _vm.route, \"href\": _vm.route ? null : _vm.url, \"variant\": \"tertiary\" }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"div\", { staticClass: \"resource__icon\" }, [_c(\"img\", { attrs: { \"src\": _vm.icon } })])];\n }, proxy: true }]) }, [_vm._v(\" \" + _vm._s(_vm.name) + \" \")])], 1);\n};\nvar _sfc_staticRenderFns$4 = [];\nvar __component__$4 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$4,\n _sfc_render$4,\n _sfc_staticRenderFns$4,\n false,\n null,\n \"2660b55a\"\n);\nconst NcResource = __component__$4.exports;\nconst _sfc_main$3 = {\n name: \"AccountGroupIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$3 = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon account-group-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e(), _c(\"path\", { attrs: { \"d\": \"M12,5.5A3.5,3.5 0 0,1 15.5,9A3.5,3.5 0 0,1 12,12.5A3.5,3.5 0 0,1 8.5,9A3.5,3.5 0 0,1 12,5.5M5,8C5.56,8 6.08,8.15 6.53,8.42C6.38,9.85 6.8,11.27 7.66,12.38C7.16,13.34 6.16,14 5,14A3,3 0 0,1 2,11A3,3 0 0,1 5,8M19,8A3,3 0 0,1 22,11A3,3 0 0,1 19,14C17.84,14 16.84,13.34 16.34,12.38C17.2,11.27 17.62,9.85 17.47,8.42C17.92,8.15 18.44,8 19,8M5.5,18.25C5.5,16.18 8.41,14.5 12,14.5C15.59,14.5 18.5,16.18 18.5,18.25V20H5.5V18.25M0,20V18.5C0,17.11 1.89,15.94 4.45,15.6C3.86,16.28 3.5,17.22 3.5,18.25V20H0M24,20H20.5V18.25C20.5,17.22 20.14,16.28 19.55,15.6C22.11,15.94 24,17.11 24,18.5V20Z\" } })])]);\n};\nvar _sfc_staticRenderFns$3 = [];\nvar __component__$3 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$3,\n _sfc_render$3,\n _sfc_staticRenderFns$3,\n false,\n null,\n null\n);\nconst AccountGroup = __component__$3.exports;\nconst _sfc_main$2 = {\n name: \"OpenInNewIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$2 = function render3() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon open-in-new-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e(), _c(\"path\", { attrs: { \"d\": \"M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V19Z\" } })])]);\n};\nvar _sfc_staticRenderFns$2 = [];\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$2,\n _sfc_render$2,\n _sfc_staticRenderFns$2,\n false,\n null,\n null\n);\nconst OpenInNew = __component__$2.exports;\nregister(t43);\nconst teamResourceProviders = getCapabilities()?.circles?.teamResourceProviders ?? [];\nconst _sfc_main$1 = {\n name: \"NcTeamResources\",\n components: {\n AccountGroup,\n ChevronDown,\n ChevronUp,\n OpenInNew,\n NcButton,\n NcIconSvgWrapper\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n providerId: {\n type: String,\n default: null\n },\n itemId: {\n type: [String, Number],\n default: null\n }\n },\n data() {\n return {\n appEnabled: OC?.appswebroots?.circles !== void 0 && (OC.config.version.split(\".\")[0] ?? 0) >= 29,\n loading: false,\n teamResources: null,\n teamOpen: []\n };\n },\n computed: {\n isVisible() {\n return !this.loading && this.teamResources?.length > 0;\n },\n teamProviders() {\n return (teamId) => {\n const team = this.teamResources.find((t2) => t2.teamId === teamId);\n return team.resources?.reduce((acc, resource) => {\n if (resource.provider.id === this.providerId && resource.id === String(this.itemId)) {\n return acc;\n }\n if (!acc[resource.provider.id]) {\n acc[resource.provider.id] = resource.provider;\n acc[resource.provider.id].resources = [];\n }\n if (resource.provider.id === this.providerId && resource.id === String(this.itemId)) {\n return acc;\n }\n acc[resource.provider.id].resources.push(resource);\n return acc;\n }, {});\n };\n },\n open() {\n return (teamId) => {\n return this.teamOpen.indexOf(teamId) !== -1;\n };\n }\n },\n watch: {\n providerId() {\n this.fetchTeamResources();\n },\n itemId() {\n this.fetchTeamResources();\n }\n },\n created() {\n this.fetchTeamResources();\n },\n methods: {\n t,\n async fetchTeamResources() {\n if (!teamResourceProviders.includes(this.providerId)) {\n return;\n }\n try {\n this.loading = true;\n const response = await axios.get(generateOcsUrl(`/teams/resources/${this.providerId}/${this.itemId}`));\n this.teamResources = response.data.ocs.data.teams;\n this.teamOpen = [this.teamResources[0]?.teamId];\n } catch (error) {\n this.teamResources = null;\n logger.error(\"Could not fetch Teams resources\", { error });\n } finally {\n this.loading = false;\n }\n },\n toggleOpen(teamId, open) {\n if (open) {\n this.teamOpen.push(teamId);\n } else {\n this.teamOpen.splice(this.teamOpen.indexOf(teamId), 1);\n }\n }\n }\n};\nvar _sfc_render$1 = function render4() {\n var _vm = this, _c = _vm._self._c;\n return _vm.appEnabled && _vm.isVisible ? _c(\"div\", { staticClass: \"team-resources\" }, [_c(\"h5\", { staticClass: \"team-resources__header\" }, [_vm._v(\" \" + _vm._s(_vm.t(\"Related team resources\")) + \" \")]), _vm._l(_vm.teamResources, function(team) {\n return _c(\"details\", { key: team.teamId, staticClass: \"related-team\", attrs: { \"name\": \"Team resources\", \"open\": _vm.open(team.teamId) }, on: { \"toggle\": (event) => _vm.toggleOpen(team.teamId, event.target.open) } }, [_c(\"summary\", { staticClass: \"related-team__header\" }, [_c(\"h5\", { staticClass: \"related-team__name\" }, [_c(\"AccountGroup\", { attrs: { \"size\": 20 } }), _vm._v(\" \" + _vm._s(team.displayName) + \" \")], 1), _c(\"NcButton\", { attrs: { \"aria-label\": _vm.t(\"View team\"), \"href\": team.link, \"title\": _vm.t(\"View team\"), \"variant\": \"tertiary\" }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"OpenInNew\", { attrs: { \"size\": 20 } })];\n }, proxy: true }], null, true) }), _vm.open(team.teamId) ? _c(\"ChevronUp\", { attrs: { \"size\": 20 } }) : _c(\"ChevronDown\", { attrs: { \"size\": 20 } })], 1), _c(\"div\", _vm._l(_vm.teamProviders(team.teamId), function(provider) {\n return _c(\"div\", { key: provider.id, staticClass: \"related-team-provider\" }, [provider.resources.length > 0 ? _c(\"h6\", [_vm._v(\" \" + _vm._s(provider.name) + \" \")]) : _vm._e(), _c(\"ul\", _vm._l(provider.resources, function(resource) {\n return _c(\"li\", { key: resource.url, staticClass: \"related-team-resource\" }, [_c(\"a\", { staticClass: \"related-team-resource__link\", attrs: { \"href\": resource.url } }, [resource.iconEmoji ? _c(\"span\", { staticClass: \"resource__icon\" }, [_vm._v(\" \" + _vm._s(resource.iconEmoji) + \" \")]) : resource.iconSvg ? _c(\"NcIconSvgWrapper\", { staticClass: \"resource__icon\", attrs: { \"svg\": resource.iconSvg, \"size\": 20 } }) : resource.iconURL ? _c(\"span\", { staticClass: \"resource__icon\" }, [_c(\"img\", { attrs: { \"src\": resource.iconURL, \"alt\": \"\" } })]) : _vm._e(), _c(\"span\", { staticClass: \"resource__name\" }, [_vm._v(\" \" + _vm._s(resource.label) + \" \")])], 1)]);\n }), 0)]);\n }), 0)]);\n })], 2) : _vm._e();\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n \"82938a03\"\n);\nconst NcTeamResources = __component__$1.exports;\nregister(t9);\nconst _sfc_main = {\n name: \"NcRelatedResourcesPanel\",\n components: {\n NcResource,\n NcTeamResources\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n /**\n * The provider id implemented with `\\OCA\\RelatedResources\\IRelatedResourceProvider::getProviderId()`\n */\n providerId: {\n type: String,\n default: null\n },\n /**\n * The item id which uniquely identities the e.g. Calendar event, Deck board, file, Talk room, etc.\n */\n itemId: {\n type: [String, Number],\n default: null\n },\n /**\n * Limits to specific resource type. i.e. any provider id implemented with `\\OCA\\RelatedResources\\IRelatedResourceProvider::getProviderId()`\n */\n resourceType: {\n type: String,\n default: \"\"\n },\n /**\n * Set the maximum number of resources to load\n */\n limit: {\n type: Number,\n default: 0\n },\n /**\n * Only used by the files sidebar\n *\n * File info is passed when registered with `OCA.Sharing.ShareTabSections.registerSection()`\n */\n fileInfo: {\n type: Object,\n default: null\n },\n /**\n * Make the header name dynamic\n */\n header: {\n type: String,\n default: t(\"Related resources\")\n },\n description: {\n type: String,\n default: t(\"Anything shared with the same group of people will show up here\")\n },\n /**\n * If this element is used on a primary element set to true for primary styling.\n */\n primary: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"has-error\",\n \"has-resources\"\n ],\n data() {\n return {\n appEnabled: OC?.appswebroots?.related_resources !== void 0,\n loading: false,\n error: null,\n resources: []\n };\n },\n computed: {\n isVisible() {\n if (this.loading) {\n return false;\n }\n return this.error ?? this.resources.length > 0;\n },\n subline() {\n if (this.error) {\n return t(\"Error getting related resources. Please contact your system administrator if you have any questions.\");\n }\n return this.description;\n },\n hasResourceInfo() {\n if (this.providerId !== null && this.itemId !== null) {\n return true;\n }\n if (this.fileInfo !== null) {\n return true;\n }\n return false;\n },\n isFiles() {\n return this.fileInfo?.id !== void 0;\n },\n url() {\n let providerId;\n let itemId;\n if (this.isFiles) {\n providerId = \"files\";\n itemId = this.fileInfo.id;\n } else {\n providerId = this.providerId;\n itemId = this.itemId;\n }\n return generateOcsUrl(\"/apps/related_resources/related/{providerId}?itemId={itemId}&resourceType={resourceType}&limit={limit}&format=json\", {\n providerId,\n itemId,\n resourceType: this.resourceType,\n limit: this.limit\n });\n }\n },\n watch: {\n providerId() {\n this.fetchRelatedResources();\n },\n itemId() {\n this.fetchRelatedResources();\n },\n fileInfo() {\n this.fetchRelatedResources();\n },\n error(error) {\n this.$emit(\"has-error\", Boolean(error));\n },\n resources(resources) {\n this.$emit(\"has-resources\", resources.length > 0);\n }\n },\n created() {\n this.fetchRelatedResources();\n },\n methods: {\n t,\n async fetchRelatedResources() {\n if (!this.appEnabled || !this.hasResourceInfo) {\n return;\n }\n this.loading = true;\n this.error = null;\n this.resources = [];\n try {\n const response = await axios.get(this.url);\n this.resources = response.data.ocs?.data;\n } catch (error) {\n this.error = e;\n logger.error(\"Could not fetch related resources\", { error });\n } finally {\n this.loading = false;\n }\n }\n }\n};\nvar _sfc_render = function render5() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", [_c(\"NcTeamResources\", { attrs: { \"provider-id\": _vm.providerId, \"item-id\": _vm.itemId } }), _vm.appEnabled && _vm.isVisible ? _c(\"div\", { staticClass: \"related-resources\" }, [_c(\"div\", { staticClass: \"related-resources__header\" }, [_c(\"h5\", [_vm._v(_vm._s(_vm.header))]), _c(\"p\", [_vm._v(_vm._s(_vm.subline))])]), _vm._l(_vm.resources, function(resource) {\n return _c(\"NcResource\", { key: resource.itemId, staticClass: \"related-resources__entry\", attrs: { \"icon\": resource.icon, \"name\": resource.title, \"url\": resource.url } });\n })], 2) : _vm._e()], 1);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"3ca2fd14\"\n);\nconst NcRelatedResourcesPanel = __component__.exports;\nexport {\n NcRelatedResourcesPanel as N\n};\n//# sourceMappingURL=NcRelatedResourcesPanel-CVzxu1PZ.mjs.map\n","import { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nwindow._vue_richtext_custom_picker_elements ??= {};\nwindow._registerCustomPickerElement ??= registerCustomPickerElement;\nclass NcCustomPickerRenderResult {\n element;\n object;\n /**\n * @param element - The HTML element\n * @param object - The object\n */\n constructor(element, object) {\n this.element = element;\n this.object = object;\n }\n}\nfunction isCustomPickerElementRegistered(id) {\n return !!window._vue_richtext_custom_picker_elements[id];\n}\nfunction getCustomPickerElementSize(id) {\n const size = window._vue_richtext_custom_picker_elements[id]?.size;\n if ([\"small\", \"normal\", \"large\", \"full\"].includes(size)) {\n return size;\n }\n return null;\n}\nfunction registerCustomPickerElement(id, callback, onDestroy = () => {\n}, size = \"large\") {\n if (window._vue_richtext_custom_picker_elements[id]) {\n logger.error(`Custom reference picker element for id ${id} already registered`);\n return;\n }\n window._vue_richtext_custom_picker_elements[id] = {\n id,\n callback,\n onDestroy,\n size\n };\n}\nfunction renderCustomPickerElement(el, options) {\n const { providerId, accessible } = options;\n if (!window._vue_richtext_custom_picker_elements[providerId]) {\n logger.error(`Custom reference picker element for reference provider ID ${providerId} not registered`);\n return;\n }\n return window._vue_richtext_custom_picker_elements[providerId].callback(el, { providerId, accessible });\n}\nfunction destroyCustomPickerElement(providerId, el, renderResult) {\n if (!window._vue_richtext_custom_picker_elements[providerId]) {\n return;\n }\n window._vue_richtext_custom_picker_elements[providerId].onDestroy(el, renderResult);\n}\nexport {\n NcCustomPickerRenderResult as N,\n renderCustomPickerElement as a,\n destroyCustomPickerElement as d,\n getCustomPickerElementSize as g,\n isCustomPickerElementRegistered as i,\n registerCustomPickerElement as r\n};\n//# sourceMappingURL=customPickerElements-CYpmyl0b.mjs.map\n","import '../assets/referencePickerModal-0oYth4rX.css';\nimport Vue from \"vue\";\nimport { emit } from \"@nextcloud/event-bus\";\nimport { A as ArrowLeft } from \"./ArrowLeft-B3_kXXWz.mjs\";\nimport { C as Close } from \"./Close-COCw8OO8.mjs\";\nimport { a as renderCustomPickerElement, d as destroyCustomPickerElement, i as isCustomPickerElementRegistered, g as getCustomPickerElementSize } from \"./customPickerElements-CYpmyl0b.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport axios from \"@nextcloud/axios\";\nimport { loadState } from \"@nextcloud/initial-state\";\nimport { imagePath, generateOcsUrl } from \"@nextcloud/router\";\nimport { r as register, _ as t8, a as t, $ as t48, a0 as t42, a1 as t25, A as t44, a2 as t32, n as t18, a3 as t12 } from \"./_l10n-Dv1YKfKS.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport NcEmptyContent from \"../Components/NcEmptyContent.mjs\";\nimport { N as NcHighlight } from \"./index-CxTT94_h.mjs\";\nimport { N as NcSelect } from \"./NcSelect-COY5TV2U.mjs\";\nimport { N as NcReferenceWidget } from \"./NcReferenceWidget-C0US5iQ0.mjs\";\nimport NcLoadingIcon from \"../Components/NcLoadingIcon.mjs\";\nimport { N as NcTextField } from \"./NcTextField-Doo3Q45d.mjs\";\nimport { D as DotsHorizontalIcon } from \"./NcActions-C4f9MXug.mjs\";\nimport { N as NcButton } from \"./NcButton-DAGirW_B.mjs\";\nimport NcModal from \"../Components/NcModal.mjs\";\nconst _sfc_main$7 = {\n name: \"NcCustomPickerElement\",\n props: {\n /**\n * The reference provider\n */\n provider: {\n type: Object,\n required: true\n }\n },\n emits: [\n \"cancel\",\n \"submit\"\n ],\n data() {\n return {\n isRegistered: isCustomPickerElementRegistered(this.provider.id),\n renderResult: null\n };\n },\n mounted() {\n if (this.isRegistered) {\n this.renderElement();\n }\n },\n beforeDestroy() {\n if (this.isRegistered) {\n destroyCustomPickerElement(this.provider.id, this.$el, this.renderResult);\n }\n },\n methods: {\n renderElement() {\n if (this.$refs.domElement) {\n this.$refs.domElement.innerHTML = \"\";\n }\n const renderFunctionResult = renderCustomPickerElement(this.$refs.domElement, { providerId: this.provider.id, accessible: false });\n Promise.resolve(renderFunctionResult).then((result) => {\n this.renderResult = result;\n if (this.renderResult.object?._isVue && this.renderResult.object?.$on) {\n this.renderResult.object.$on(\"submit\", this.onSubmit);\n this.renderResult.object.$on(\"cancel\", this.onCancel);\n }\n this.renderResult.element.addEventListener(\"submit\", (e) => {\n this.onSubmit(e.detail);\n });\n this.renderResult.element.addEventListener(\"cancel\", this.onCancel);\n });\n },\n onSubmit(value) {\n this.$emit(\"submit\", value);\n },\n onCancel() {\n this.$emit(\"cancel\");\n }\n }\n};\nvar _sfc_render$7 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { ref: \"domElement\" });\n};\nvar _sfc_staticRenderFns$7 = [];\nvar __component__$7 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$7,\n _sfc_render$7,\n _sfc_staticRenderFns$7,\n false,\n null,\n \"0547d92f\"\n);\nconst NcCustomPickerElement = __component__$7.exports;\nconst _sfc_main$6 = {\n name: \"LinkVariantIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render$6 = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon link-variant-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e(), _c(\"path\", { attrs: { \"d\": \"M10.59,13.41C11,13.8 11,14.44 10.59,14.83C10.2,15.22 9.56,15.22 9.17,14.83C7.22,12.88 7.22,9.71 9.17,7.76V7.76L12.71,4.22C14.66,2.27 17.83,2.27 19.78,4.22C21.73,6.17 21.73,9.34 19.78,11.29L18.29,12.78C18.3,11.96 18.17,11.14 17.89,10.36L18.36,9.88C19.54,8.71 19.54,6.81 18.36,5.64C17.19,4.46 15.29,4.46 14.12,5.64L10.59,9.17C9.41,10.34 9.41,12.24 10.59,13.41M13.41,9.17C13.8,8.78 14.44,8.78 14.83,9.17C16.78,11.12 16.78,14.29 14.83,16.24V16.24L11.29,19.78C9.34,21.73 6.17,21.73 4.22,19.78C2.27,17.83 2.27,14.66 4.22,12.71L5.71,11.22C5.7,12.04 5.83,12.86 6.11,13.65L5.64,14.12C4.46,15.29 4.46,17.19 5.64,18.36C6.81,19.54 8.71,19.54 9.88,18.36L13.41,14.83C14.59,13.66 14.59,11.76 13.41,10.59C13,10.2 13,9.56 13.41,9.17Z\" } })])]);\n};\nvar _sfc_staticRenderFns$6 = [];\nvar __component__$6 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$6,\n _sfc_render$6,\n _sfc_staticRenderFns$6,\n false,\n null,\n null\n);\nconst LinkVariantIcon = __component__$6.exports;\nregister(t8);\nconst anyLinkProviderId = \"any-link\";\nconst anyLinkProvider = {\n id: anyLinkProviderId,\n title: t(\"Any link\"),\n order: 0,\n icon_url: imagePath(\"core\", \"filetypes/link.svg\")\n};\nwindow._vue_richtext_reference_providers ??= loadState(\"core\", \"reference-provider-list\", []);\nwindow._vue_richtext_reference_provider_timestamps ??= loadState(\"core\", \"reference-provider-timestamps\", {});\nfunction getProvider(providerId) {\n if (providerId === anyLinkProviderId) {\n return anyLinkProvider;\n }\n return getProviders().find((p) => p.id === providerId);\n}\nfunction getProviders() {\n return window._vue_richtext_reference_providers.filter((p) => {\n const keep = !!p.search_providers_ids && p.search_providers_ids.length > 0 || isCustomPickerElementRegistered(p.id);\n if (!keep) {\n logger.debug(`[smart picker] ${p.id} reference provider is discoverable but does not have any related search provider or custom picker component registered`);\n }\n return keep;\n });\n}\nfunction sortProviders(providerList) {\n const timestamps = window._vue_richtext_reference_provider_timestamps;\n return providerList.sort((a, b) => {\n return a.order === b.order ? 0 : a.order > b.order ? 1 : -1;\n }).sort((a, b) => {\n const ta = timestamps[a.id];\n const tb = timestamps[b.id];\n return ta === tb ? 0 : tb === void 0 ? -1 : ta === void 0 ? 1 : ta > tb ? -1 : 1;\n });\n}\nfunction searchProvider(query, limit) {\n const providers = getProviders();\n const escapedQuery = query.replace(/[/\\-\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n const regexp = new RegExp(escapedQuery, \"i\");\n const sortedProviders = sortProviders(providers);\n const filteredSortedProviders = sortedProviders.filter((p) => {\n return p.title.match(regexp);\n });\n const searchResult = limit ? filteredSortedProviders.slice(0, limit) : filteredSortedProviders;\n if (query === \"\" || searchResult.length === 0) {\n searchResult.push(anyLinkProvider);\n }\n return searchResult;\n}\nasync function touchProvider(providerId) {\n const timestamp = Math.floor(Date.now() / 1e3);\n const url = generateOcsUrl(\"references/provider/{providerId}\", { providerId });\n await axios.put(url, { timestamp });\n window._vue_richtext_reference_provider_timestamps[providerId] = timestamp;\n}\nregister(t42, t48);\nlet mytimer = 0;\nfunction delay(callback, ms) {\n return function() {\n const context = this;\n const args = arguments;\n clearTimeout(mytimer);\n mytimer = setTimeout(function() {\n callback.apply(context, args);\n }, ms);\n };\n}\nfunction isUrl(str) {\n try {\n return Boolean(new URL(str));\n } catch {\n return false;\n }\n}\nconst _sfc_main$5 = {\n name: \"NcProviderList\",\n components: {\n NcSelect,\n NcHighlight,\n NcEmptyContent,\n LinkVariantIcon\n },\n emits: [\n \"select-provider\",\n \"submit\"\n ],\n data() {\n return {\n selectedProvider: null,\n query: \"\",\n multiselectPlaceholder: t(\"Select provider\"),\n providerIconAlt: t(\"Provider icon\")\n };\n },\n computed: {\n options() {\n const result = [];\n if (this.query !== \"\" && isUrl(this.query)) {\n result.push({\n id: this.query,\n title: this.query,\n isLink: true\n });\n }\n result.push(...searchProvider(this.query));\n return result;\n }\n },\n methods: {\n focus() {\n setTimeout(() => {\n this.$refs[\"provider-select\"]?.$el?.querySelector(\"#provider-select-input\")?.focus();\n }, 300);\n },\n onProviderSelected(p) {\n if (p !== null) {\n if (p.isLink) {\n this.$emit(\"submit\", p.title);\n } else {\n this.$emit(\"select-provider\", p);\n }\n this.selectedProvider = null;\n }\n },\n onSearch(query) {\n this.query = query;\n }\n }\n};\nvar _sfc_render$5 = function render3() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"provider-list\" }, [_c(\"NcSelect\", { ref: \"provider-select\", staticClass: \"provider-list--select\", attrs: { \"input-id\": \"provider-select-input\", \"label\": \"title\", \"placeholder\": _vm.multiselectPlaceholder, \"options\": _vm.options, \"append-to-body\": false, \"clear-search-on-select\": true, \"clear-search-on-blur\": () => false, \"filterable\": false }, on: { \"search\": _vm.onSearch, \"input\": _vm.onProviderSelected }, scopedSlots: _vm._u([{ key: \"option\", fn: function(option) {\n return [option.isLink ? _c(\"div\", { staticClass: \"provider\" }, [_c(\"LinkVariantIcon\", { staticClass: \"link-icon\", attrs: { \"size\": 20 } }), _c(\"span\", [_vm._v(_vm._s(option.title))])], 1) : _c(\"div\", { staticClass: \"provider\" }, [_c(\"img\", { staticClass: \"provider-icon\", attrs: { \"src\": option.icon_url, \"alt\": _vm.providerIconAlt } }), _c(\"NcHighlight\", { staticClass: \"option-text\", attrs: { \"search\": _vm.query, \"text\": option.title } })], 1)];\n } }]), model: { value: _vm.selectedProvider, callback: function($$v) {\n _vm.selectedProvider = $$v;\n }, expression: \"selectedProvider\" } }), _c(\"NcEmptyContent\", { staticClass: \"provider-list--empty-content\", scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"LinkVariantIcon\")];\n }, proxy: true }]) })], 1);\n};\nvar _sfc_staticRenderFns$5 = [];\nvar __component__$5 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$5,\n _sfc_render$5,\n _sfc_staticRenderFns$5,\n false,\n null,\n \"f39d58d9\"\n);\nconst NcProviderList = __component__$5.exports;\nregister(t25);\nconst _sfc_main$4 = {\n name: \"NcRawLinkInput\",\n components: {\n LinkVariantIcon,\n NcEmptyContent,\n NcLoadingIcon,\n NcReferenceWidget,\n NcTextField\n },\n props: {\n /**\n * The reference provider\n */\n provider: {\n type: Object,\n required: true\n }\n },\n emits: [\n \"submit\"\n ],\n data() {\n return {\n inputValue: \"\",\n loading: false,\n reference: null,\n abortController: null,\n inputPlaceholder: t(\"Enter link\")\n };\n },\n computed: {\n isLinkValid() {\n return isUrl(this.inputValue);\n }\n },\n methods: {\n focus() {\n this.$refs[\"url-input\"].$el.getElementsByTagName(\"input\")[0]?.focus();\n },\n onSubmit(e) {\n const value = e.target.value;\n if (this.isLinkValid) {\n this.$emit(\"submit\", value);\n }\n },\n onClear() {\n this.inputValue = \"\";\n this.reference = null;\n },\n onInput() {\n this.reference = null;\n if (this.abortController) {\n this.abortController.abort();\n }\n if (this.isLinkValid) {\n delay(() => {\n this.updateReference();\n }, 500)();\n }\n },\n updateReference() {\n this.loading = true;\n this.abortController = new AbortController();\n axios.get(generateOcsUrl(\"references/resolve\", 2) + \"?reference=\" + encodeURIComponent(this.inputValue), {\n signal: this.abortController.signal\n }).then((response) => {\n this.reference = response.data.ocs.data.references[this.inputValue];\n }).catch((error) => {\n logger.error(\"Could not update reference\", { error });\n }).then(() => {\n this.loading = false;\n });\n }\n }\n};\nvar _sfc_render$4 = function render4() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"raw-link\" }, [_c(\"div\", { staticClass: \"input-wrapper\" }, [_c(\"NcTextField\", { ref: \"url-input\", attrs: { \"value\": _vm.inputValue, \"show-trailing-button\": _vm.inputValue !== \"\", \"label\": _vm.inputPlaceholder }, on: { \"update:value\": [function($event) {\n _vm.inputValue = $event;\n }, _vm.onInput], \"trailing-button-click\": _vm.onClear }, nativeOn: { \"keyup\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n return _vm.onSubmit.apply(null, arguments);\n } } }, [_vm.loading ? _c(\"NcLoadingIcon\", { attrs: { \"size\": 16 } }) : _c(\"LinkVariantIcon\", { attrs: { \"size\": 16 } })], 1)], 1), _vm.reference !== null ? _c(\"NcReferenceWidget\", { staticClass: \"reference-widget\", attrs: { \"reference\": _vm.reference } }) : _c(\"NcEmptyContent\", { staticClass: \"raw-link--empty-content\", scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_vm.provider.icon_url ? _c(\"img\", { staticClass: \"provider-icon\", attrs: { \"src\": _vm.provider.icon_url } }) : _c(\"LinkVariantIcon\")];\n }, proxy: true }]) })], 1);\n};\nvar _sfc_staticRenderFns$4 = [];\nvar __component__$4 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$4,\n _sfc_render$4,\n _sfc_staticRenderFns$4,\n false,\n null,\n \"be630586\"\n);\nconst NcRawLinkInput = __component__$4.exports;\nconst _sfc_main$3 = {\n name: \"NcSearchResult\",\n components: {\n NcHighlight\n },\n props: {\n /**\n * Unified search result entry\n */\n entry: {\n type: Object,\n required: true\n },\n /**\n * The query that led to getting this result\n * Used to highlight the entry text\n */\n query: {\n type: String,\n required: true\n }\n }\n};\nvar _sfc_render$3 = function render5() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"result\" }, [_vm.entry.icon ? _c(\"div\", { staticClass: \"result--icon-class\", class: { [_vm.entry.icon]: true, rounded: _vm.entry.rounded } }) : _c(\"img\", { staticClass: \"result--image\", class: { rounded: _vm.entry.rounded }, attrs: { \"src\": _vm.entry.thumbnailUrl } }), _c(\"div\", { staticClass: \"result--content\" }, [_c(\"span\", { staticClass: \"result--content--name\" }, [_c(\"NcHighlight\", { attrs: { \"search\": _vm.query, \"text\": _vm.entry.title } })], 1), _c(\"span\", { staticClass: \"result--content--subline\" }, [_c(\"NcHighlight\", { attrs: { \"search\": _vm.query, \"text\": _vm.entry.subline } })], 1)])]);\n};\nvar _sfc_staticRenderFns$3 = [];\nvar __component__$3 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$3,\n _sfc_render$3,\n _sfc_staticRenderFns$3,\n false,\n null,\n \"995c2758\"\n);\nconst NcSearchResult = __component__$3.exports;\nregister(t32, t42, t44);\nconst LIMIT = 5;\nconst _sfc_main$2 = {\n name: \"NcSearch\",\n components: {\n LinkVariantIcon,\n DotsHorizontalIcon,\n NcEmptyContent,\n NcSelect,\n NcSearchResult\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n /**\n * The selected reference provider\n */\n provider: {\n type: Object,\n required: true\n },\n showEmptyContent: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Placeholder of the search\n */\n searchPlaceholder: {\n type: String,\n default: null\n }\n },\n emits: [\n \"submit\"\n ],\n data() {\n return {\n searchQuery: \"\",\n selectedResult: null,\n resultsBySearchProvider: {},\n searching: false,\n searchingMoreOf: null,\n abortController: null,\n noOptionsText: t(\"Start typing to search\"),\n providerIconAlt: t(\"Provider icon\")\n };\n },\n computed: {\n mySearchPlaceholder() {\n return this.searchPlaceholder || t(\"Search\");\n },\n searchProviderIds() {\n return this.provider.search_providers_ids;\n },\n options() {\n if (this.searchQuery === \"\") {\n return [];\n }\n const options = [];\n if (isUrl(this.searchQuery)) {\n options.push(this.rawLinkEntry);\n }\n options.push(...this.formattedSearchResults);\n return options;\n },\n rawLinkEntry() {\n return {\n id: \"rawLinkEntry\",\n resourceUrl: this.searchQuery,\n isRawLink: true\n };\n },\n formattedSearchResults() {\n const results = [];\n this.searchProviderIds.forEach((pid) => {\n if (this.resultsBySearchProvider[pid].entries.length > 0) {\n if (this.searchProviderIds.length > 1 || this.resultsBySearchProvider[pid].entries.length > 1) {\n results.push({\n id: \"groupTitle-\" + pid,\n name: this.resultsBySearchProvider[pid].name,\n isCustomGroupTitle: true,\n providerId: pid\n });\n }\n const providerEntriesWithId = this.resultsBySearchProvider[pid].entries.map((entry, index) => {\n return {\n id: \"provider-\" + pid + \"-entry-\" + index,\n ...entry\n };\n });\n results.push(...providerEntriesWithId);\n if (this.resultsBySearchProvider[pid].isPaginated) {\n results.push({\n id: \"moreOf-\" + pid,\n name: this.resultsBySearchProvider[pid].name,\n isMore: true,\n providerId: pid,\n isLoading: this.searchingMoreOf === pid\n });\n }\n }\n });\n return results;\n }\n },\n mounted() {\n this.resetResults();\n },\n beforeDestroy() {\n this.cancelSearchRequests();\n },\n methods: {\n t,\n resetResults() {\n const resultsBySearchProvider = {};\n this.searchProviderIds.forEach((pid) => {\n resultsBySearchProvider[pid] = {\n entries: []\n };\n });\n this.resultsBySearchProvider = resultsBySearchProvider;\n },\n focus() {\n setTimeout(() => {\n this.$refs[\"search-select\"]?.$el?.querySelector(\"#search-select-input\")?.focus();\n }, 300);\n },\n cancelSearchRequests() {\n if (this.abortController) {\n this.abortController.abort();\n }\n },\n onSearchInput(query) {\n this.searchQuery = query;\n delay(() => {\n this.updateSearch();\n }, 500)();\n },\n onSelectResultSelected(item) {\n if (item !== null) {\n if (item.resourceUrl) {\n this.cancelSearchRequests();\n this.$emit(\"submit\", item.resourceUrl);\n } else if (item.isMore) {\n this.searchMoreOf(item.providerId).then(() => {\n this.selectedResult = null;\n });\n }\n }\n },\n searchMoreOf(searchProviderId) {\n this.searchingMoreOf = searchProviderId;\n this.cancelSearchRequests();\n return this.searchProviders(searchProviderId);\n },\n updateSearch() {\n this.cancelSearchRequests();\n this.resetResults();\n if (this.searchQuery === \"\") {\n this.searching = false;\n return;\n }\n return this.searchProviders();\n },\n searchProviders(searchProviderId = null) {\n this.abortController = new AbortController();\n this.searching = true;\n const searchPromises = searchProviderId === null ? [...this.searchProviderIds].map((pid) => {\n return this.searchOneProvider(pid);\n }) : [this.searchOneProvider(searchProviderId, this.resultsBySearchProvider[searchProviderId]?.cursor ?? null)];\n return Promise.allSettled(searchPromises).then((promises) => {\n const isOneCanceled = !!promises.find((p) => {\n return p.status === \"rejected\" && (p.reason.name === \"CanceledError\" || p.reason.code === \"ERR_CANCELED\");\n });\n if (!isOneCanceled) {\n this.searching = false;\n this.searchingMoreOf = null;\n }\n });\n },\n searchOneProvider(providerId, cursor = null) {\n const url = cursor === null ? generateOcsUrl(\"search/providers/{providerId}/search?term={term}&limit={limit}\", { providerId, term: this.searchQuery, limit: LIMIT }) : generateOcsUrl(\"search/providers/{providerId}/search?term={term}&limit={limit}&cursor={cursor}\", { providerId, term: this.searchQuery, limit: LIMIT, cursor });\n return axios.get(url, {\n signal: this.abortController.signal\n }).then((response) => {\n const data = response.data.ocs.data;\n this.resultsBySearchProvider[providerId].name = data.name;\n this.resultsBySearchProvider[providerId].cursor = data.cursor;\n this.resultsBySearchProvider[providerId].isPaginated = data.isPaginated;\n this.resultsBySearchProvider[providerId].entries.push(...data.entries);\n });\n }\n }\n};\nvar _sfc_render$2 = function render6() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"smart-picker-search\", class: { \"with-empty-content\": _vm.showEmptyContent } }, [_c(\"NcSelect\", { ref: \"search-select\", staticClass: \"smart-picker-search--select\", attrs: { \"input-id\": \"search-select-input\", \"label\": \"name\", \"placeholder\": _vm.mySearchPlaceholder, \"options\": _vm.options, \"append-to-body\": false, \"close-on-select\": false, \"clear-search-on-select\": false, \"clear-search-on-blur\": () => false, \"reset-focus-on-options-change\": false, \"filterable\": false, \"autoscroll\": true, \"reset-on-options-change\": false, \"loading\": _vm.searching }, on: { \"search\": _vm.onSearchInput, \"input\": _vm.onSelectResultSelected }, scopedSlots: _vm._u([{ key: \"option\", fn: function(option) {\n return [option.isRawLink ? _c(\"div\", { staticClass: \"custom-option\" }, [_c(\"LinkVariantIcon\", { staticClass: \"option-simple-icon\", attrs: { \"size\": 20 } }), _c(\"span\", { staticClass: \"option-text\" }, [_vm._v(\" \" + _vm._s(_vm.t(\"Raw link {options}\", { options: option.resourceUrl })) + \" \")])], 1) : option.resourceUrl ? _c(\"NcSearchResult\", { staticClass: \"search-result\", attrs: { \"entry\": option, \"query\": _vm.searchQuery } }) : option.isCustomGroupTitle ? _c(\"span\", { staticClass: \"custom-option group-name\" }, [_vm.provider.icon_url ? _c(\"img\", { staticClass: \"provider-icon group-name-icon\", attrs: { \"src\": _vm.provider.icon_url } }) : _vm._e(), _c(\"span\", { staticClass: \"option-text\" }, [_c(\"strong\", [_vm._v(_vm._s(option.name))])])]) : option.isMore ? _c(\"span\", { staticClass: \"custom-option\" }, [option.isLoading ? _c(\"span\", { staticClass: \"option-simple-icon icon-loading-small\" }) : _c(\"DotsHorizontalIcon\", { staticClass: \"option-simple-icon\", attrs: { \"size\": 20 } }), _c(\"span\", { staticClass: \"option-text\" }, [_vm._v(\" \" + _vm._s(_vm.t('Load more \"{options}\"', { options: option.name })) + \" \")])], 1) : _vm._e()];\n } }, { key: \"no-options\", fn: function() {\n return [_vm._v(\" \" + _vm._s(_vm.noOptionsText) + \" \")];\n }, proxy: true }]), model: { value: _vm.selectedResult, callback: function($$v) {\n _vm.selectedResult = $$v;\n }, expression: \"selectedResult\" } }), _vm.showEmptyContent ? _c(\"NcEmptyContent\", { staticClass: \"smart-picker-search--empty-content\", scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_vm.provider.icon_url ? _c(\"img\", { staticClass: \"provider-icon\", attrs: { \"alt\": _vm.providerIconAlt, \"src\": _vm.provider.icon_url } }) : _c(\"LinkVariantIcon\")];\n }, proxy: true }], null, false, 2922132592) }) : _vm._e()], 1);\n};\nvar _sfc_staticRenderFns$2 = [];\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$2,\n _sfc_render$2,\n _sfc_staticRenderFns$2,\n false,\n null,\n \"e61f71e3\"\n);\nconst NcSearch = __component__$2.exports;\nconst MODES = {\n providerList: 1,\n standardLinkInput: 2,\n searchInput: 3,\n customElement: 4\n};\nconst _sfc_main$1 = {\n name: \"NcReferencePicker\",\n components: {\n NcCustomPickerElement,\n NcProviderList,\n NcRawLinkInput,\n NcSearch\n },\n props: {\n /**\n * Provider to select on creation\n * Default: null. Show the provider list\n */\n initialProvider: {\n type: Object,\n default: () => null\n },\n /**\n * Optional width in pixels\n * Default: 100%\n */\n width: {\n type: Number,\n default: null\n },\n /**\n * Focus on the provider list select input on creation\n * Default: true\n */\n focusOnCreate: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n }\n },\n emits: [\n \"cancel\",\n \"cancel-raw-link\",\n \"cancel-search\",\n \"provider-selected\",\n \"submit\"\n ],\n data() {\n return {\n MODES,\n selectedProvider: this.initialProvider\n };\n },\n computed: {\n mode() {\n return this.selectedProvider === null ? MODES.providerList : isCustomPickerElementRegistered(this.selectedProvider.id) ? MODES.customElement : this.selectedProvider.search_providers_ids ? MODES.searchInput : MODES.standardLinkInput;\n },\n pickerWrapperStyle() {\n return {\n width: this.width ? this.width + \"px\" : void 0\n };\n }\n },\n mounted() {\n if (this.focusOnCreate) {\n if (this.initialProvider) {\n setTimeout(() => {\n this.$refs[\"url-input\"]?.focus();\n }, 300);\n } else {\n this.$nextTick(() => {\n this.$refs[\"provider-list\"]?.focus();\n });\n }\n }\n },\n methods: {\n onEscapePressed() {\n if (this.selectedProvider !== null) {\n this.deselectProvider();\n } else {\n this.cancelProviderSelection();\n }\n },\n onProviderSelected(provider) {\n this.selectedProvider = provider;\n this.$emit(\"provider-selected\", provider);\n this.$nextTick(() => {\n this.$refs[\"url-input\"]?.focus();\n });\n },\n cancelCustomElement() {\n this.deselectProvider();\n },\n cancelSearch() {\n this.$emit(\"cancel-search\", this.selectedProvider?.title);\n this.deselectProvider();\n },\n cancelRawLinkInput() {\n this.$emit(\"cancel-raw-link\", this.selectedProvider?.title);\n this.deselectProvider();\n },\n cancelProviderSelection() {\n this.$emit(\"cancel\");\n },\n submitLink(link) {\n if (this.selectedProvider !== null) {\n touchProvider(this.selectedProvider.id);\n }\n this.$emit(\"submit\", link);\n this.deselectProvider();\n },\n deselectProvider() {\n this.selectedProvider = null;\n this.$emit(\"provider-selected\", null);\n setTimeout(() => {\n this.$refs[\"provider-list\"]?.focus();\n }, 300);\n }\n }\n};\nvar _sfc_render$1 = function render7() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"reference-picker\", style: _vm.pickerWrapperStyle, attrs: { \"tabindex\": \"-1\" }, on: { \"keydown\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"esc\", 27, $event.key, [\"Esc\", \"Escape\"])) return null;\n $event.stopPropagation();\n $event.preventDefault();\n return _vm.onEscapePressed.apply(null, arguments);\n } } }, [_vm.mode === _vm.MODES.providerList ? _c(\"NcProviderList\", { ref: \"provider-list\", on: { \"select-provider\": _vm.onProviderSelected, \"submit\": _vm.submitLink, \"cancel\": _vm.cancelProviderSelection } }) : _vm.mode === _vm.MODES.standardLinkInput ? _c(\"NcRawLinkInput\", { ref: \"url-input\", attrs: { \"provider\": _vm.selectedProvider }, on: { \"submit\": _vm.submitLink, \"cancel\": _vm.cancelRawLinkInput } }) : _vm.mode === _vm.MODES.searchInput ? _c(\"NcSearch\", { ref: \"url-input\", attrs: { \"provider\": _vm.selectedProvider }, on: { \"cancel\": _vm.cancelSearch, \"submit\": _vm.submitLink } }) : _vm.mode === _vm.MODES.customElement ? _c(\"div\", { staticClass: \"custom-element-wrapper\" }, [_c(\"NcCustomPickerElement\", { staticClass: \"custom-element\", attrs: { \"provider\": _vm.selectedProvider }, on: { \"submit\": _vm.submitLink, \"cancel\": _vm.cancelCustomElement } })], 1) : _vm._e()], 1);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n \"646d5538\"\n);\nconst NcReferencePicker = __component__$1.exports;\nregister(t12, t18);\nconst _sfc_main = {\n name: \"NcReferencePickerModal\",\n components: {\n NcReferencePicker,\n NcModal,\n NcButton,\n ArrowLeftIcon: ArrowLeft,\n CloseIcon: Close\n },\n props: {\n /**\n * Provider to select on creation\n * Show the provider list if no initial one is provided\n */\n initialProvider: {\n type: Object,\n default: () => null\n },\n /**\n * Focus on the input item on create\n */\n focusOnCreate: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * If true, add the modal content to the Viewer trap elements via the event-bus\n */\n isInsideViewer: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"cancel\",\n \"submit\"\n ],\n data() {\n return {\n show: true,\n selectedProvider: this.initialProvider,\n backButtonTitle: t(\"Back to provider selection\"),\n closeButtonTitle: t(\"Close\"),\n closeButtonLabel: t(\"Close Smart Picker\")\n };\n },\n computed: {\n isProviderSelected() {\n return this.selectedProvider !== null;\n },\n showBackButton() {\n return this.initialProvider === null && this.isProviderSelected;\n },\n modalSize() {\n return this.isProviderSelected && isCustomPickerElementRegistered(this.selectedProvider.id) ? getCustomPickerElementSize(this.selectedProvider.id) ?? \"large\" : \"normal\";\n },\n showModalName() {\n return !this.isProviderSelected || !isCustomPickerElementRegistered(this.selectedProvider.id);\n },\n modalName() {\n return this.isProviderSelected ? this.selectedProvider.title : t(\"Smart Picker\");\n }\n },\n mounted() {\n if (this.isInsideViewer) {\n const elem = this.$refs.modal_content;\n emit(\"viewer:trapElements:changed\", elem);\n }\n },\n methods: {\n onCancel() {\n this.show = false;\n this.$emit(\"cancel\");\n },\n onSubmit(value) {\n this.show = false;\n this.$emit(\"submit\", value);\n },\n onProviderSelect(provider) {\n this.selectedProvider = provider;\n if (provider === null && this.initialProvider !== null) {\n this.onCancel();\n }\n },\n onBackClicked() {\n this.$refs.referencePicker.deselectProvider();\n }\n }\n};\nvar _sfc_render = function render8() {\n var _vm = this, _c = _vm._self._c;\n return _vm.show ? _c(\"NcModal\", { staticClass: \"reference-picker-modal\", attrs: { \"size\": _vm.modalSize, \"can-close\": true }, on: { \"close\": _vm.onCancel } }, [_c(\"div\", { ref: \"modal_content\", staticClass: \"reference-picker-modal--content\" }, [_vm.showBackButton ? _c(\"NcButton\", { staticClass: \"back-button\", attrs: { \"aria-label\": _vm.backButtonTitle, \"title\": _vm.backButtonTitle }, on: { \"click\": _vm.onBackClicked }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"ArrowLeftIcon\")];\n }, proxy: true }], null, false, 3001860362) }) : _vm._e(), _c(\"NcButton\", { staticClass: \"close-button\", attrs: { \"aria-label\": _vm.closeButtonLabel, \"title\": _vm.closeButtonTitle, \"variant\": \"tertiary\" }, on: { \"click\": _vm.onCancel }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_c(\"CloseIcon\")];\n }, proxy: true }], null, false, 2491825086) }), _vm.showModalName ? _c(\"h2\", [_vm._v(\" \" + _vm._s(_vm.modalName) + \" \")]) : _vm._e(), _c(\"NcReferencePicker\", { ref: \"referencePicker\", attrs: { \"initial-provider\": _vm.initialProvider, \"focus-on-create\": _vm.focusOnCreate }, on: { \"provider-selected\": _vm.onProviderSelect, \"submit\": _vm.onSubmit, \"cancel\": _vm.onCancel } })], 1)]) : _vm._e();\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"00990f2a\"\n);\nconst NcReferencePickerModal = __component__.exports;\nasync function getLinkWithPicker(providerId, isInsideViewer) {\n const modalId = \"referencePickerModal\";\n const modalElement = document.createElement(\"div\");\n modalElement.id = modalId;\n document.body.append(modalElement);\n const { promise, reject, resolve } = Promise.withResolvers();\n const initialProvider = providerId && getProvider(providerId) || null;\n const View = Vue.extend(NcReferencePickerModal);\n const view = new View({\n propsData: {\n initialProvider,\n isInsideViewer\n }\n }).$mount(modalElement);\n view.$on(\"cancel\", () => {\n view.$destroy();\n reject(new Error(\"User cancellation\"));\n });\n view.$on(\"submit\", (link) => {\n view.$destroy();\n resolve(link);\n });\n return promise;\n}\nexport {\n NcReferencePicker as N,\n anyLinkProviderId as a,\n getProvider as b,\n getProviders as c,\n sortProviders as d,\n NcReferencePickerModal as e,\n NcSearch as f,\n getLinkWithPicker as g,\n searchProvider as s\n};\n//# sourceMappingURL=referencePickerModal-DxQEGT82.mjs.map\n","import '../assets/NcRichContenteditable-DqkzIGAp.css';\nimport debounce from \"debounce\";\nimport stringLength from \"string-length\";\nimport Tribute from \"tributejs/dist/tribute.esm.js\";\nimport { useIsDarkTheme } from \"../Composables/useIsDarkTheme.mjs\";\nimport { g as getAvatarUrl } from \"./getAvatarUrl-BGOeDmNO.mjs\";\nimport { N as NcUserStatusIcon } from \"./NcUserStatusIcon-BfRlUhT_.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { u as useModelMigration } from \"./useModelMigration-EhAWvqDD.mjs\";\nimport { e as emojiSearch, a as emojiAddRecent } from \"./emoji-Dtn2mDf7.mjs\";\nimport { r as register, B as t37, I as t34, a as t, J as n } from \"./_l10n-Dv1YKfKS.mjs\";\nimport { r as richEditor } from \"./index-BCqXu_og.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport \"./NcRichText-DBkCEk0k.mjs\";\nimport \"./customPickerElements-CYpmyl0b.mjs\";\nimport { g as getLinkWithPicker, s as searchProvider } from \"./referencePickerModal-DxQEGT82.mjs\";\nimport \"./createElementId-DhjFt1I9.mjs\";\nimport \"../Components/NcEmptyContent.mjs\";\nimport \"./NcSelect-COY5TV2U.mjs\";\nimport \"@nextcloud/axios\";\nimport \"@nextcloud/router\";\nimport \"./NcReferenceWidget-C0US5iQ0.mjs\";\nimport \"../Components/NcLoadingIcon.mjs\";\nimport \"./NcTextField-Doo3Q45d.mjs\";\nimport \"@nextcloud/event-bus\";\nimport \"./legacy-Cy3dCXuB.mjs\";\nimport \"vue\";\nimport \"./NcButton-DAGirW_B.mjs\";\nimport \"../Components/NcModal.mjs\";\nimport \"./widgets-XxirL-2f.mjs\";\nconst _sfc_main$1 = {\n name: \"NcAutoCompleteResult\",\n components: {\n NcUserStatusIcon\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n /**\n * @deprecated Use `label` instead\n */\n title: {\n type: String,\n required: false,\n default: null\n },\n label: {\n type: String,\n required: false,\n default: null\n },\n subline: {\n type: String,\n default: null\n },\n id: {\n type: String,\n default: null\n },\n icon: {\n type: String,\n required: true\n },\n iconUrl: {\n type: String,\n default: null\n },\n source: {\n type: String,\n required: true\n },\n status: {\n type: [Object, Array],\n default: () => ({})\n }\n },\n setup() {\n const isDarkTheme = useIsDarkTheme();\n return {\n isDarkTheme\n };\n },\n computed: {\n avatarUrl() {\n if (this.iconUrl) {\n return this.iconUrl;\n }\n return this.id && this.source === \"users\" ? getAvatarUrl(this.id, { isDarkTheme: this.isDarkTheme }) : null;\n },\n // For backwards compatibility\n labelWithFallback() {\n return this.label || this.title;\n }\n }\n};\nvar _sfc_render$1 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"autocomplete-result\" }, [_c(\"div\", { staticClass: \"autocomplete-result__icon\", class: [_vm.icon, `autocomplete-result__icon--${_vm.avatarUrl ? \"with-avatar\" : \"\"}`], style: _vm.avatarUrl ? { backgroundImage: `url(${_vm.avatarUrl})` } : null }, [_vm.status.icon ? _c(\"span\", { staticClass: \"autocomplete-result__status autocomplete-result__status--icon\" }, [_vm._v(\" \" + _vm._s(_vm.status && _vm.status.icon || \"\") + \" \")]) : _vm.status.status && _vm.status.status !== \"offline\" ? _c(\"NcUserStatusIcon\", { staticClass: \"autocomplete-result__status\", attrs: { \"status\": _vm.status.status } }) : _vm._e()], 1), _c(\"span\", { staticClass: \"autocomplete-result__content\" }, [_c(\"span\", { staticClass: \"autocomplete-result__title\", attrs: { \"title\": _vm.labelWithFallback } }, [_vm._v(\" \" + _vm._s(_vm.labelWithFallback) + \" \")]), _vm.subline ? _c(\"span\", { staticClass: \"autocomplete-result__subline\" }, [_vm._v(\" \" + _vm._s(_vm.subline) + \" \")]) : _vm._e()])]);\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n \"ef14f1ec\"\n);\nconst NcAutoCompleteResult = __component__$1.exports;\nregister(t34, t37);\nconst style1 = {\n \"material-design-icon\": \"_material-design-icon_h1KPS\",\n \"tribute-container\": \"_tribute-container_y19wi\",\n \"tribute-container__item\": \"_tribute-container__item_HPusZ\",\n \"tribute-container--focus-visible\": \"_tribute-container--focus-visible_AqpWt\",\n \"tribute-container-autocomplete\": \"_tribute-container-autocomplete_cJgfd\",\n \"tribute-container-emoji\": \"_tribute-container-emoji_JxYiz\",\n \"tribute-container-link\": \"_tribute-container-link_59LXD\",\n \"tribute-item\": \"_tribute-item_HU0z9\",\n \"tribute-item__title\": \"_tribute-item__title_ta-s8\",\n \"tribute-item__icon\": \"_tribute-item__icon_cDA06\"\n};\nconst smilesCharacters = [\"d\", \"D\", \"p\", \"P\", \"s\", \"S\", \"x\", \"X\", \")\", \"(\", \"|\", \"/\"];\nconst textSmiles = [];\nsmilesCharacters.forEach((char) => {\n textSmiles.push(\":\" + char);\n textSmiles.push(\":-\" + char);\n});\nconst IME_KEY_CODE = 229;\nlet isPlaintextOnlySupported = null;\nconst _sfc_main = {\n name: \"NcRichContenteditable\",\n mixins: [richEditor],\n inheritAttrs: false,\n model: {\n prop: \"modelValue\",\n event: \"update:modelValue\"\n },\n props: {\n /**\n * The ID attribute of the content editable\n */\n id: {\n type: String,\n default: () => GenRandomId(7)\n },\n /**\n * Visual label of the contenteditable\n */\n label: {\n type: String,\n default: \"\"\n },\n /**\n * Removed in v9 - use `modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n value: {\n type: String,\n default: void 0\n },\n /**\n * The text content\n */\n modelValue: {\n type: String,\n default: \"\"\n },\n /**\n * Placeholder to be shown if empty\n */\n placeholder: {\n type: String,\n default: t(\"Write a message …\")\n },\n /**\n * Auto complete function\n */\n autoComplete: {\n type: Function,\n default: () => []\n },\n /**\n * The containing element or selector for the tribute (menu popover)\n * Defaults to `body` element\n */\n menuContainer: {\n type: [String, Element, null],\n default: null\n },\n /**\n * Make the contenteditable looks like a textarea or not.\n * Default looks like a single-line input.\n * This also handle the default enter/shift+enter behaviour.\n * if multiline, enter = newline; otherwise enter = submit\n * shift+enter always add a new line. ctrl+enter always submits\n */\n multiline: {\n type: Boolean,\n default: false\n },\n /**\n * Is the content editable ?\n */\n contenteditable: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Disable the editing and show specific disabled design\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * Max allowed length\n */\n maxlength: {\n type: Number,\n default: null\n },\n /**\n * Enable or disable emoji autocompletion\n */\n emojiAutocomplete: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Enable or disable link autocompletion\n */\n linkAutocomplete: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n }\n },\n emits: [\n \"submit\",\n \"paste\",\n /**\n * Removed in v9 - use `update:modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n \"update:value\",\n \"update:modelValue\",\n /** Same as update:modelValue for Vue 2 compatibility */\n \"update:model-value\",\n \"smart-picker-submit\"\n ],\n setup() {\n const uid = GenRandomId(5);\n const model = useModelMigration(\"value\", \"update:value\", true);\n if (isPlaintextOnlySupported === null) {\n try {\n document.createElement(\"div\").contentEditable = \"plaintext-only\";\n isPlaintextOnlySupported = true;\n } catch (error) {\n logger.debug(\"[NcRichContenteditable] Unsupported attribute value:\", { error });\n isPlaintextOnlySupported = false;\n }\n }\n return {\n model,\n // Constants\n labelId: `nc-rich-contenteditable-${uid}-label`,\n tributeId: `nc-rich-contenteditable-${uid}-tribute`,\n /**\n * Non-reactive property to store Tribute instance\n *\n * @type {import('tributejs').default | null}\n */\n tribute: null,\n tributeStyleMutationObserver: null\n };\n },\n data() {\n return {\n // Represent the raw untrimmed text of the contenteditable\n // serves no other purpose than to check whether the\n // content is empty or not\n localValue: this.model,\n // Tribute autocomplete\n isAutocompleteOpen: false,\n autocompleteActiveId: void 0,\n isTributeIntegrationDone: false\n };\n },\n computed: {\n /**\n * Is the current trimmed value empty?\n *\n * @return {boolean}\n */\n isEmptyValue() {\n return !this.localValue || this.localValue.trim() === \"\";\n },\n /**\n * Is the current value over maxlength?\n *\n * @return {boolean}\n */\n isOverMaxlength() {\n if (this.isEmptyValue || !this.maxlength) {\n return false;\n }\n return stringLength(this.localValue) > this.maxlength;\n },\n /**\n * Tooltip to show if characters count is over limit\n *\n * @return {string}\n */\n tooltipString() {\n if (!this.isOverMaxlength) {\n return null;\n }\n return n(\"Message limit of %n character reached\", \"Message limit of %n characters reached\", this.maxlength);\n },\n /**\n * Edit is only allowed when contenteditable is:\n * 'true' (all browsers since 2015)\n * 'plaintext-only' (most browsers since 2015, Firefox since 136+)\n *\n * @return {string}\n */\n contenteditableAttributeValue() {\n if (this.contenteditable && !this.disabled) {\n return isPlaintextOnlySupported ? \"plaintext-only\" : \"true\";\n }\n return \"false\";\n },\n /**\n * Proxied native event handlers without custom event handlers\n *\n * @return {Record}\n */\n listeners() {\n const listeners = { ...this.$listeners };\n delete listeners.paste;\n return listeners;\n },\n /**\n * Compute debounce function for the autocomplete function\n */\n debouncedAutoComplete() {\n return debounce(async (search, callback) => {\n this.autoComplete(search, callback);\n }, 100);\n }\n },\n watch: {\n /**\n * If the parent value change, we compare the plain text rendering\n * If it's different, we render everything and update the main content\n */\n model() {\n const html = this.$refs.contenteditable.innerHTML;\n if (this.model.trim() !== this.parseContent(html).trim()) {\n this.updateContent(this.model);\n }\n }\n },\n mounted() {\n this.initializeTribute();\n this.updateContent(this.model);\n },\n beforeDestroy() {\n if (this.tribute) {\n this.tribute.detach(this.$refs.contenteditable);\n }\n if (this.tributeStyleMutationObserver) {\n this.tributeStyleMutationObserver.disconnect();\n }\n },\n methods: {\n /**\n * Focus the richContenteditable\n *\n * @public\n */\n focus() {\n this.$refs.contenteditable.focus();\n },\n initializeTribute() {\n const renderMenuItem = (content) => `
    ${content}
    `;\n const tributesCollection = [];\n tributesCollection.push({\n fillAttr: \"id\",\n // Search against id and label (display name) (fallback to title for v8.0.0..8.6.1 compatibility)\n lookup: (result) => `${result.id} ${result.label ?? result.title}`,\n requireLeadingSpace: true,\n // Popup mention autocompletion templates\n menuItemTemplate: (item) => renderMenuItem(this.renderComponentHtml(item.original, NcAutoCompleteResult)),\n // Hide if no results\n noMatchTemplate: () => '',\n // Inner display of mentions\n selectTemplate: (item) => this.genSelectTemplate(item?.original?.id),\n // Autocompletion results\n values: this.debouncedAutoComplete,\n // Class added to the menu container\n containerClass: `${this.$style[\"tribute-container\"]} ${this.$style[\"tribute-container-autocomplete\"]}`,\n // Class added to each list item\n itemClass: this.$style[\"tribute-container__item\"]\n });\n if (this.emojiAutocomplete) {\n tributesCollection.push({\n trigger: \":\",\n // Don't use the tribute search function at all\n // We pass search results as values (see below)\n lookup: (result, query) => query,\n requireLeadingSpace: true,\n // Popup mention autocompletion templates\n menuItemTemplate: (item) => {\n if (textSmiles.includes(item.original)) {\n return item.original;\n }\n return renderMenuItem(`${item.original.native} :${item.original.short_name}`);\n },\n // Hide if no results\n noMatchTemplate: () => t(\"No emoji found\"),\n // Display raw emoji along with its name\n selectTemplate: (item) => {\n if (textSmiles.includes(item.original)) {\n return item.original;\n }\n emojiAddRecent(item.original);\n return item.original.native;\n },\n // Pass the search results as values\n values: (text, cb) => {\n const emojiResults = emojiSearch(text);\n if (textSmiles.includes(\":\" + text)) {\n emojiResults.unshift(\":\" + text);\n }\n cb(emojiResults);\n },\n // Class added to the menu container\n containerClass: `${this.$style[\"tribute-container\"]} ${this.$style[\"tribute-container-emoji\"]}`,\n // Class added to each list item\n itemClass: this.$style[\"tribute-container__item\"]\n });\n }\n if (this.linkAutocomplete) {\n tributesCollection.push({\n trigger: \"/\",\n // Don't use the tribute search function at all\n // We pass search results as values (see below)\n lookup: (result, query) => query,\n requireLeadingSpace: true,\n // Popup mention autocompletion templates\n menuItemTemplate: (item) => renderMenuItem(` ${item.original.title}`),\n // Hide if no results\n noMatchTemplate: () => t(\"No link provider found\"),\n selectTemplate: this.getLink,\n // Pass the search results as values\n values: (text, cb) => cb(searchProvider(text)),\n // Class added to the menu container\n containerClass: `${this.$style[\"tribute-container\"]} ${this.$style[\"tribute-container-link\"]}`,\n // Class added to each list item\n itemClass: this.$style[\"tribute-container__item\"]\n });\n }\n const menuContainer = typeof this.menuContainer === \"string\" ? document.querySelector(this.menuContainer) : this.menuContainer;\n this.tribute = new Tribute({\n collection: tributesCollection,\n // FIXME: tributejs doesn't support allowSpaces as a collection option, only as a global one\n // Requires to fork a library to allow spaces only in the middle of mentions ('@' trigger)\n allowSpaces: false,\n // Where to inject the menu popup\n menuContainer\n });\n this.tribute.attach(this.$refs.contenteditable);\n this.$refs.contenteditable.contentEditable = this.contenteditableAttributeValue;\n },\n getLink(item) {\n getLinkWithPicker(item.original.id).then((result) => {\n const tmpElem = document.getElementById(\"tmp-smart-picker-result-node\");\n const eventData = {\n result,\n insertText: true\n };\n this.$emit(\"smart-picker-submit\", eventData);\n if (eventData.insertText) {\n const newElem = document.createTextNode(result);\n tmpElem.replaceWith(newElem);\n this.setCursorAfter(newElem);\n this.updateValue(this.$refs.contenteditable.innerHTML);\n } else {\n tmpElem.remove();\n }\n }).catch((error) => {\n logger.debug(\"Smart picker promise rejected\", { error });\n const tmpElem = document.getElementById(\"tmp-smart-picker-result-node\");\n this.setCursorAfter(tmpElem);\n tmpElem.remove();\n });\n return '';\n },\n setCursorAfter(element) {\n const range = document.createRange();\n range.setEndAfter(element);\n range.collapse();\n const selection = window.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n },\n moveCursorToEnd() {\n if (!document.createRange) {\n return;\n }\n if (window.getSelection().rangeCount > 0 && this.$refs.contenteditable.contains(window.getSelection().getRangeAt(0).commonAncestorContainer)) {\n return;\n }\n const range = document.createRange();\n range.selectNodeContents(this.$refs.contenteditable);\n range.collapse(false);\n const selection = window.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n },\n /**\n * Re-emit the input event to the parent\n *\n * @param {Event} event the input event\n */\n onInput(event) {\n this.updateValue(event.target.innerHTML);\n },\n /**\n * When pasting, sanitize the content, extract text\n * and render it again\n *\n * @param {Event} event the paste event\n * @fires Event paste the original paste event\n */\n onPaste(event) {\n if (!this.contenteditable || this.disabled) {\n return;\n }\n if (isPlaintextOnlySupported) {\n this.$emit(\"paste\", event);\n } else {\n event.preventDefault();\n const clipboardData = event.clipboardData;\n this.$emit(\"paste\", event);\n if (clipboardData.files.length !== 0 || !Object.values(clipboardData.items).find((item) => item?.type.startsWith(\"text\"))) {\n return;\n }\n const text = clipboardData.getData(\"text\");\n const selection = window.getSelection();\n const range = selection.getRangeAt(0);\n range.deleteContents();\n range.insertNode(document.createTextNode(text));\n range.collapse(false);\n }\n this.updateValue(this.$refs.contenteditable.innerHTML);\n },\n /**\n * Update the value text from the provided html\n *\n * @param {string} htmlOrText the html content (or raw text with @mentions)\n */\n updateValue(htmlOrText) {\n const text = this.parseContent(htmlOrText).replace(/^\\n$/, \"\");\n this.localValue = text;\n this.model = text;\n },\n /**\n * Update content and local value\n *\n * @param {string} value the message value\n */\n updateContent(value) {\n const renderedContent = this.renderContent(value);\n this.$refs.contenteditable.innerHTML = renderedContent;\n this.localValue = value;\n },\n /**\n * Enter key pressed. Submits if not multiline\n *\n * @param {Event} event the keydown event\n */\n onEnter(event) {\n if (event.key !== \"Enter\" && event.code !== \"Enter\") {\n return;\n }\n if (this.multiline || this.isOverMaxlength || this.tribute.isActive || event.isComposing || event.keyCode === IME_KEY_CODE) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.$emit(\"submit\", event);\n },\n /**\n * Ctrl + Enter key pressed is used to submit\n *\n * @param {Event} event the keydown event\n */\n onCtrlEnter(event) {\n if (this.isOverMaxlength) {\n return;\n }\n this.$emit(\"submit\", event);\n },\n onKeyUp(event) {\n event.stopImmediatePropagation();\n },\n onKeyEsc(event) {\n if (this.tribute && this.isAutocompleteOpen) {\n event.stopImmediatePropagation();\n this.tribute.hideMenu();\n }\n },\n /**\n * Get HTML element with Tribute.js container\n *\n * @return {HTMLElement}\n */\n getTributeContainer() {\n return this.tribute.menu;\n },\n /**\n * Get the currently selected item element id in Tribute.js container\n *\n * @return {HTMLElement}\n */\n getTributeSelectedItem() {\n return this.getTributeContainer().querySelector('.highlight [id^=\"nc-rich-contenteditable-tribute-item-\"]');\n },\n /**\n * Handle Tribute activation\n *\n * @param {boolean} isActive - is active\n */\n onTributeActive(isActive) {\n this.isAutocompleteOpen = isActive;\n if (isActive) {\n this.getTributeContainer().setAttribute(\"class\", this.tribute.current.collection.containerClass || this.$style[\"tribute-container\"]);\n this.setupTributeIntegration();\n document.removeEventListener(\"click\", this.hideTribute, true);\n } else {\n this.debouncedAutoComplete.clear();\n this.autocompleteActiveId = void 0;\n this.setTributeFocusVisible(false);\n }\n },\n onTributeArrowKeyDown() {\n if (!this.isAutocompleteOpen) {\n return;\n }\n this.setTributeFocusVisible(true);\n this.onTributeSelectedItemWillChange();\n },\n onTributeSelectedItemWillChange() {\n requestAnimationFrame(() => {\n this.autocompleteActiveId = this.getTributeSelectedItem()?.id;\n });\n },\n setupTributeIntegration() {\n if (this.isTributeIntegrationDone) {\n return;\n }\n this.isTributeIntegrationDone = true;\n const tributeContainer = this.getTributeContainer();\n tributeContainer.id = this.tributeId;\n tributeContainer.setAttribute(\"role\", \"listbox\");\n const ul = tributeContainer.children[0];\n ul.setAttribute(\"role\", \"presentation\");\n this.tributeStyleMutationObserver = new MutationObserver(([{ target }]) => {\n if (target.style.display !== \"none\") {\n this.onTributeSelectedItemWillChange();\n }\n }).observe(tributeContainer, {\n attributes: true,\n attributeFilter: [\"style\"]\n });\n tributeContainer.addEventListener(\"mousemove\", () => {\n this.setTributeFocusVisible(false);\n this.onTributeSelectedItemWillChange();\n }, { passive: true });\n },\n /**\n * Set tribute-container--focus-visible class on the Tribute container when the user navigates the listbox via keyboard.\n *\n * Because the real focus is kept on the textbox, we cannot use the :focus-visible pseudo-class\n * to style selected options in the autocomplete listbox.\n *\n * @param {boolean} withFocusVisible - should the focus-visible class be added\n */\n setTributeFocusVisible(withFocusVisible) {\n if (withFocusVisible) {\n this.getTributeContainer().classList.add(this.$style[\"tribute-container--focus-visible\"]);\n } else {\n this.getTributeContainer().classList.remove(this.$style[\"tribute-container--focus-visible\"]);\n }\n },\n /**\n * Show tribute menu programmatically.\n *\n * @param {string} trigger - trigger character, can be '/', '@', or ':'\n *\n * @public\n */\n showTribute(trigger) {\n this.focus();\n const index = this.tribute.collection.findIndex((collection) => collection.trigger === trigger);\n this.tribute.showMenuForCollection(this.$refs.contenteditable, index);\n this.updateValue(this.$refs.contenteditable.innerHTML);\n document.addEventListener(\"click\", this.hideTribute, true);\n },\n /**\n * Hide tribute menu programmatically\n *\n */\n hideTribute() {\n this.tribute.hideMenu();\n document.removeEventListener(\"click\", this.hideTribute, true);\n }\n }\n};\nvar _sfc_render = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { staticClass: \"rich-contenteditable\" }, [_c(\"div\", _vm._g(_vm._b({ ref: \"contenteditable\", staticClass: \"rich-contenteditable__input\", class: {\n \"rich-contenteditable__input--empty\": _vm.isEmptyValue,\n \"rich-contenteditable__input--multiline\": _vm.multiline,\n \"rich-contenteditable__input--has-label\": _vm.label,\n \"rich-contenteditable__input--overflow\": _vm.isOverMaxlength,\n \"rich-contenteditable__input--disabled\": _vm.disabled\n }, attrs: { \"id\": _vm.id, \"contenteditable\": _vm.contenteditableAttributeValue, \"aria-labelledby\": _vm.label ? _vm.labelId : void 0, \"aria-placeholder\": _vm.placeholder, \"aria-multiline\": \"true\", \"role\": \"textbox\", \"aria-haspopup\": \"listbox\", \"aria-autocomplete\": \"inline\", \"aria-controls\": _vm.tributeId, \"aria-expanded\": _vm.isAutocompleteOpen ? \"true\" : \"false\", \"aria-activedescendant\": _vm.autocompleteActiveId, \"title\": _vm.tooltipString }, on: { \"focus\": _vm.moveCursorToEnd, \"input\": _vm.onInput, \"!keydown\": function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"esc\", 27, $event.key, [\"Esc\", \"Escape\"])) return null;\n return _vm.onKeyEsc.apply(null, arguments);\n }, \"keydown\": [function($event) {\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n return _vm.onEnter.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n if (!$event.ctrlKey) return null;\n if ($event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.stopPropagation();\n $event.preventDefault();\n return _vm.onCtrlEnter.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"up\", 38, $event.key, [\"Up\", \"ArrowUp\"])) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.stopPropagation();\n return _vm.onTributeArrowKeyDown.apply(null, arguments);\n }, function($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"down\", 40, $event.key, [\"Down\", \"ArrowDown\"])) return null;\n if ($event.ctrlKey || $event.shiftKey || $event.altKey || $event.metaKey) return null;\n $event.stopPropagation();\n return _vm.onTributeArrowKeyDown.apply(null, arguments);\n }], \"paste\": _vm.onPaste, \"!keyup\": function($event) {\n $event.stopPropagation();\n $event.preventDefault();\n return _vm.onKeyUp.apply(null, arguments);\n }, \"tribute-active-true\": function($event) {\n return _vm.onTributeActive(true);\n }, \"tribute-active-false\": function($event) {\n return _vm.onTributeActive(false);\n } } }, \"div\", _vm.$attrs, false), _vm.listeners)), _vm.label ? _c(\"div\", { staticClass: \"rich-contenteditable__label\", attrs: { \"id\": _vm.labelId } }, [_vm._v(\" \" + _vm._s(_vm.label) + \" \")]) : _vm._e()]);\n};\nvar _sfc_staticRenderFns = [];\nconst __cssModules = {\n \"$style\": style1\n};\nfunction _sfc_injectStyles(ctx) {\n for (var key in __cssModules) {\n this[key] = __cssModules[key];\n }\n}\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n _sfc_injectStyles,\n \"0f528b8a\"\n);\nconst NcRichContenteditable = __component__.exports;\nexport {\n NcAutoCompleteResult as N,\n NcRichContenteditable as a\n};\n//# sourceMappingURL=NcRichContenteditable-DTh228N5.mjs.map\n","import { u as useModelMigration } from \"./useModelMigration-EhAWvqDD.mjs\";\nimport { r as register, k as t0, a as t } from \"./_l10n-Dv1YKfKS.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport NcEllipsisedOption from \"../Components/NcEllipsisedOption.mjs\";\nimport { N as NcSelect } from \"./NcSelect-COY5TV2U.mjs\";\nimport axios from \"@nextcloud/axios\";\nimport { generateRemoteUrl } from \"@nextcloud/router\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t0);\nfunction xmlToJson(xml) {\n let obj = {};\n if (xml.nodeType === 1) {\n if (xml.attributes.length > 0) {\n obj[\"@attributes\"] = {};\n for (let j = 0; j < xml.attributes.length; j++) {\n const attribute = xml.attributes.item(j);\n obj[\"@attributes\"][attribute.nodeName] = attribute.nodeValue;\n }\n }\n } else if (xml.nodeType === 3) {\n obj = xml.nodeValue;\n }\n if (xml.hasChildNodes()) {\n for (let i = 0; i < xml.childNodes.length; i++) {\n const item = xml.childNodes.item(i);\n const nodeName = item.nodeName;\n if (typeof obj[nodeName] === \"undefined\") {\n obj[nodeName] = xmlToJson(item);\n } else {\n if (typeof obj[nodeName].push === \"undefined\") {\n const old = obj[nodeName];\n obj[nodeName] = [];\n obj[nodeName].push(old);\n }\n obj[nodeName].push(xmlToJson(item));\n }\n }\n }\n return obj;\n}\nfunction parseXml(xml) {\n let dom = null;\n try {\n dom = new DOMParser().parseFromString(xml, \"text/xml\");\n } catch (error) {\n logger.error(\"Failed to parse xml document\", { error });\n }\n return dom;\n}\nfunction xmlToTagList(xml) {\n const json = xmlToJson(parseXml(xml));\n const list = json[\"d:multistatus\"][\"d:response\"];\n const result = [];\n for (const index in list) {\n const tag = list[index][\"d:propstat\"];\n if (tag[\"d:status\"][\"#text\"] !== \"HTTP/1.1 200 OK\") {\n continue;\n }\n result.push({\n id: parseInt(tag[\"d:prop\"][\"oc:id\"][\"#text\"]),\n displayName: tag[\"d:prop\"][\"oc:display-name\"][\"#text\"],\n canAssign: tag[\"d:prop\"][\"oc:can-assign\"][\"#text\"] === \"true\",\n userAssignable: tag[\"d:prop\"][\"oc:user-assignable\"][\"#text\"] === \"true\",\n userVisible: tag[\"d:prop\"][\"oc:user-visible\"][\"#text\"] === \"true\"\n });\n }\n return result;\n}\nasync function searchTags() {\n if (window.NextcloudVueDocs) {\n return Promise.resolve(xmlToTagList(window.NextcloudVueDocs.tags));\n }\n const result = await axios({\n method: \"PROPFIND\",\n url: generateRemoteUrl(\"dav\") + \"/systemtags/\",\n data: `\n\t\t\t\t\t\n\t\t\t\t\t \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t \n\t\t\t\t\t`\n });\n return xmlToTagList(result.data);\n}\nconst _sfc_main = {\n name: \"NcSelectTags\",\n components: {\n NcEllipsisedOption,\n NcSelect\n },\n model: {\n prop: \"modelValue\",\n event: \"update:modelValue\"\n },\n props: {\n // Add NcSelect prop defaults and populate $props\n ...NcSelect.props,\n /**\n * Enable automatic fetching of tags\n *\n * If `false`, available tags must be passed using the `options` prop\n */\n fetchTags: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Callback to generate the label text\n *\n * @see https://vue-select.org/api/props.html#getoptionlabel\n */\n getOptionLabel: {\n type: Function,\n default: (option) => {\n const { displayName, userVisible, userAssignable } = option;\n if (userVisible === false) {\n return t(\"{tag} (invisible)\", { tag: displayName });\n }\n if (userAssignable === false) {\n return t(\"{tag} (restricted)\", { tag: displayName });\n }\n return displayName;\n }\n },\n /**\n * Sets the maximum number of tags to display in the dropdown list\n *\n * Because of compatibility reasons only 5 tag entries are shown by\n * default\n */\n limit: {\n type: Number,\n default: 5\n },\n /**\n * Allow selection of multiple options\n *\n * This prop automatically sets the internal `closeOnSelect` prop to\n * its boolean opposite\n *\n * @see https://vue-select.org/api/props.html#multiple\n */\n multiple: {\n type: Boolean,\n // eslint-disable-next-line vue/no-boolean-default\n default: true\n },\n /**\n * Callback to filter available options\n */\n optionsFilter: {\n type: Function,\n default: null\n },\n /**\n * Enable passing of `value` prop and emitted `input` events as-is\n * i.e. for usage with `v-model`\n *\n * If `true`, custom internal `value` and `input` handling is disabled\n */\n passthru: {\n type: Boolean,\n default: false\n },\n /**\n * Placeholder text\n *\n * @see https://vue-select.org/api/props.html#placeholder\n */\n placeholder: {\n type: String,\n default: t(\"Select a tag\")\n },\n /**\n * Removed in v9 - use `modelValue` (`v-model`) instead\n *\n * @deprecated\n */\n value: {\n type: [Number, Array, Object],\n default: void 0\n },\n /**\n * Currently selected value\n */\n modelValue: {\n type: [Number, Array, Object],\n default: null\n },\n /**\n * Any available prop\n *\n * @see https://vue-select.org/api/props.html\n */\n // Not an actual prop but needed to show in vue-styleguidist docs\n // eslint-disable-next-line\n \" \": {}\n },\n emits: [\n /**\n * Removed in v9 - use `update:modelValue` (`v-model`) instead\n */\n \"input\",\n /**\n * Emitted on input events of the multiselect field\n *\n * @type {number|number[]}\n */\n \"update:modelValue\",\n /** Same as update:modelValue for Vue 2 compatibility */\n \"update:model-value\",\n /**\n * All events from https://vue-select.org/api/events.html\n */\n // Not an actual event but needed to show in vue-styleguidist docs\n \" \"\n ],\n setup() {\n const model = useModelMigration(\"value\", \"input\");\n const noop = () => {\n };\n return {\n model,\n noop\n };\n },\n data() {\n return {\n search: \"\",\n availableTags: []\n };\n },\n computed: {\n availableOptions() {\n if (this.optionsFilter) {\n return this.tags.filter(this.optionsFilter);\n }\n return this.tags;\n },\n localValue() {\n if (this.tags.length === 0) {\n return [];\n }\n if (this.multiple) {\n return this.model.filter((tag) => tag !== \"\").map((id) => this.tags.find((tag2) => tag2.id === id));\n } else {\n return this.tags.find((tag) => tag.id === this.model);\n }\n },\n propsToForward() {\n const {\n // Props handled by this component\n fetchTags,\n optionsFilter,\n passthru,\n // Props to forward\n ...propsToForward\n } = this.$props;\n return propsToForward;\n },\n tags() {\n if (!this.fetchTags) {\n return this.options;\n }\n return this.availableTags;\n }\n },\n async created() {\n if (!this.fetchTags) {\n return;\n }\n try {\n const result = await searchTags();\n this.availableTags = result;\n } catch (error) {\n logger.error(\"Loading systemtags failed\", { error });\n }\n },\n methods: {\n handleInput(value) {\n if (this.multiple) {\n this.model = value.map((element) => element.id);\n } else {\n if (value === null) {\n this.model = null;\n } else {\n this.model = value.id;\n }\n }\n }\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"NcSelect\", _vm._g(_vm._b({ attrs: { \"options\": _vm.availableOptions, \"close-on-select\": !_vm.multiple, \"value\": _vm.passthru ? _vm.model : _vm.localValue }, on: { \"search\": (searchString) => _vm.search = searchString }, scopedSlots: _vm._u([{ key: \"option\", fn: function(option) {\n return [_c(\"NcEllipsisedOption\", { attrs: { \"name\": _vm.getOptionLabel(option), \"search\": _vm.search } })];\n } }, { key: \"selected-option\", fn: function(selectedOption) {\n return [_c(\"NcEllipsisedOption\", { attrs: { \"name\": _vm.getOptionLabel(selectedOption), \"search\": _vm.search } })];\n } }, _vm._l(_vm.$scopedSlots, function(_, name) {\n return { key: name, fn: function(data) {\n return [_vm._t(name, null, null, data)];\n } };\n })], null, true) }, \"NcSelect\", _vm.propsToForward, false), {\n ..._vm.$listeners,\n input: _vm.passthru ? _vm.$listeners.input : _vm.noop,\n \"update:modelValue\": _vm.passthru ? _vm.$listeners[\"update:modelValue\"] : _vm.handleInput,\n \"update:model-value\": _vm.passthru ? _vm.$listeners[\"update:model-value\"] : _vm.noop\n }));\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n null\n);\nconst NcSelectTags = __component__.exports;\nexport {\n NcSelectTags as N\n};\n//# sourceMappingURL=NcSelectTags-Dc3zDEKf.mjs.map\n","import '../assets/NcSelectUsers-BDh2CSCJ.css';\nimport { defineComponent, ref, watch } from \"vue\";\nimport { N as NcListItemIcon } from \"./NcListItemIcon-6OlDNank.mjs\";\nimport { N as NcSelect } from \"./NcSelect-COY5TV2U.mjs\";\nimport { r as register, x as t47, h as t16, a as t } from \"./_l10n-Dv1YKfKS.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t16, t47);\nconst __default__ = {\n model: {\n prop: \"modelValue\",\n event: \"update:modelValue\"\n }\n};\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n __name: \"NcSelectUsers\",\n props: {\n /**\n * `aria-label` for the clear input button\n */\n ariaLabelClearSelected: {\n type: String,\n default: t(\"Clear selected\")\n },\n /**\n * `aria-label` for the listbox element\n */\n ariaLabelListbox: {\n type: String,\n default: t(\"Options\")\n },\n /**\n * Allows to customize the `aria-label` for the deselect-option button\n * The default is \"Deselect \" + optionLabel\n */\n ariaLabelDeselectOption: {\n type: Function,\n default: (optionLabel) => t(\"Deselect {option}\", { option: optionLabel })\n },\n /**\n * Keep the dropdown open after selecting an entry.\n */\n keepOpen: {\n type: Boolean,\n default: false\n },\n /**\n * Disable the component\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * Callback to determine if the provided option should match the current search text.\n * Used to determine if the option should be displayed.\n *\n * By default it filters by the `displayName` and `subname` properties of the user\n * option object unless this prop is set explicitly\n */\n filterBy: {\n type: Function,\n default: null\n },\n /**\n * Input element id\n */\n inputId: {\n type: String,\n default: () => GenRandomId()\n },\n /**\n * Visible label for the input element\n *\n * @default 'Select account'\n */\n inputLabel: {\n type: String,\n default: t(\"Select account\")\n },\n /**\n * Pass true if you are using an external label.\n * In this case make sure you set the `for` attribute of your `