{"version":3,"file":"index-e42a7aa9.js","sources":["../../node_modules/vue-router-prefetch/dist/index.esm.js","../../node_modules/hookable/dist/index.mjs","../../node_modules/@unhead/vue/dist/index.mjs","../../node_modules/@unhead/dom/dist/index.mjs","../../node_modules/@vueuse/head/dist/index.mjs","../../node_modules/@apollo/client/link/batch/batching.js","../../node_modules/@apollo/client/link/batch/batchLink.js","../../node_modules/@apollo/client/link/batch-http/batchHttpLink.js","../../src/apollo/apollo.ts","../../node_modules/@floating-ui/core/dist/floating-ui.core.esm.js","../../node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js","../../src/composables/useTooltip.ts","../../src/directives/Tooltip.ts","../../src/assets/img/waytoodank.webp","../../src/apollo/query/user-self.query.ts","../../src/composables/useContextMenu.ts","../../src/common/Rand.ts","../../src/Logger.ts","../../src/worker/index.ts","../../src/worker/worker.events.ts","../../src/worker/worker.ts","../../src/composables/useWorker.ts","../../src/components/base/UserSearchIcon.vue","../../src/components/utility/ThemeSwitcher.vue","../../src/components/base/Logo.vue","../../src/components/Nav.vue","../../src/components/modal/ModalViewport.vue","../../src/components/overlay/ContextMenu.vue","../../src/apollo/query/emote-set.query.ts","../../src/composables/useObjectSub.ts","../../src/ActorLogic.ts","../../src/App.vue","../../src/icons.ts","../../node_modules/@formkit/utils/dist/index.mjs","../../node_modules/@formkit/core/dist/index.mjs","../../node_modules/@formkit/inputs/dist/index.mjs","../../node_modules/@formkit/rules/dist/index.mjs","../../node_modules/@formkit/observer/dist/index.mjs","../../node_modules/@formkit/validation/dist/index.mjs","../../node_modules/@formkit/i18n/dist/index.mjs","../../node_modules/@formkit/themes/dist/index.mjs","../../node_modules/@formkit/dev/dist/index.mjs","../../node_modules/@formkit/vue/dist/index.mjs","../../node_modules/no-darkreader/nodarkreader.min.js","../../node_modules/v-wave/dist/es/index.js","../../src/main.ts"],"sourcesContent":["var inBrowser = typeof window !== 'undefined';\nvar conn = inBrowser && navigator.connection;\nvar canPrefetch = inBrowser && (!conn || (conn.effectiveType || '').indexOf('2g') === -1 && !conn.saveData);\nvar supportIntersectionObserver = inBrowser && window.IntersectionObserver;\n\n/**\n * Portions copyright 2018 Google Inc.\n * Inspired by Gatsby's prefetching logic, with those portions\n * remaining MIT. Additions include support for Fetch API,\n * XHR switching, SaveData and Effective Connection Type checking.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n **/\nvar preFetched = {};\n/**\n * Checks if a feature on `link` is natively supported.\n * Examples of features include `prefetch` and `preload`.\n * @param {string} feature - name of the feature to test\n * @return {Boolean} whether the feature is supported\n */\n\nfunction support(feature) {\n if (!inBrowser) {\n return;\n }\n\n var link = document.createElement('link');\n return link.relList && link.relList.supports && link.relList.supports(feature);\n}\n/**\n * Fetches a given URL using ``\n * @param {string} url - the URL to fetch\n * @return {Object} a Promise\n */\n\n\nfunction linkPrefetchStrategy(url) {\n return new Promise(function (resolve, reject) {\n var link = document.createElement(\"link\");\n link.rel = \"prefetch\";\n link.href = url;\n link.addEventListener('load', resolve);\n link.addEventListener('error', reject);\n document.head.appendChild(link);\n });\n}\n/**\n * Fetches a given URL using XMLHttpRequest\n * @param {string} url - the URL to fetch\n * @return {Object} a Promise\n */\n\n\nfunction xhrPrefetchStrategy(url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.open(\"GET\", url, req.withCredentials = true);\n req.addEventListener('load', function () {\n req.status === 200 ? resolve() : reject();\n });\n req.send();\n });\n}\n/**\n * Fetches a given URL using the Fetch API. Falls back\n * to XMLHttpRequest if the API is not supported.\n * @param {string} url - the URL to fetch\n * @return {Object} a Promise\n */\n\n\nfunction highPriFetchStrategy(url) {\n // TODO: Investigate using preload for high-priority\n // fetches. May have to sniff file-extension to provide\n // valid 'as' values. In the future, we may be able to\n // use Priority Hints here.\n //\n // As of 2018, fetch() is high-priority in Chrome\n // and medium-priority in Safari.\n return self.fetch ? fetch(url, {\n credentials: \"include\"\n }) : xhrPrefetchStrategy(url);\n}\n\nvar supportedPrefetchStrategy = support('prefetch') ? linkPrefetchStrategy : xhrPrefetchStrategy;\n/**\n * Prefetch a given URL with an optional preferred fetch priority\n * @param {String} url - the URL to fetch\n * @param {Boolean} isPriority - if is \"high\" priority\n * @param {Object} conn - navigator.connection (internal)\n * @return {Object} a Promise\n */\n\nfunction prefetcher(url, isPriority) {\n if (!canPrefetch || preFetched[url]) {\n return;\n } // Wanna do something on catch()?\n\n\n return (isPriority ? highPriFetchStrategy : supportedPrefetchStrategy)(url).then(function () {\n preFetched[url] = true;\n });\n}\n\nfunction installRouterPrefetch(\n/** @type {import('vue').App} */\napp, ref) {\n if ( ref === void 0 ) ref = {};\n var componentName = ref.componentName; if ( componentName === void 0 ) componentName = 'RouterLink';\n var enablePrefetch = ref.prefetch; if ( enablePrefetch === void 0 ) enablePrefetch = true;\n\n var observer = supportIntersectionObserver && new window.IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (entry.isIntersecting) {\n entry.target._linkPrefetch();\n }\n });\n });\n\n var requestIdleCallback = inBrowser && window.requestIdleCallback || function (cb, ref) {\n var timeout = ref.timeout; if ( timeout === void 0 ) timeout = 1;\n\n var start = Date.now();\n return setTimeout(function () {\n cb({\n didTimeout: false,\n\n timeRemaining: function timeRemaining() {\n return Math.max(0, 50 - (Date.now() - start));\n }\n\n });\n }, timeout);\n };\n\n var RouterLink = app.component('RouterLink') || app.component('router-link');\n\n if (process.env.NODE_ENV === 'development' && !RouterLink) {\n console.error(\"[vue-router-prefetch] You need to call app.use(VueRouter) before this plugin!\");\n }\n\n var Link = {\n name: componentName,\n props: Object.assign({}, RouterLink.props, {\n prefetch: {\n type: Boolean,\n default: enablePrefetch\n },\n prefetchFiles: {\n type: Array\n },\n timeout: {\n type: Number,\n default: 2000\n }\n }),\n\n setup: function setup(props, context) {\n return RouterLink.setup(props, context);\n },\n\n mounted: function mounted() {\n if (this.prefetch && observer && canPrefetch) {\n requestIdleCallback(this.observe, {\n timeout: this.timeout\n });\n }\n },\n\n beforeUnmount: function beforeUnmount() {\n this.unobserve();\n },\n\n methods: {\n observe: function observe() {\n observer.observe(this.$el);\n this.$el._linkPrefetch = this.linkPrefetch;\n this._linkObserved = true;\n },\n\n unobserve: function unobserve() {\n if (this._linkObserved) {\n observer.unobserve(this.$el);\n }\n },\n\n getRouteComponents: function getRouteComponents(route) {\n return route.matched.map(function (record) {\n return Object.values(record.components);\n }).flat().filter(function (Component) {\n return typeof Component === 'function' && Component.cid === undefined;\n });\n },\n\n linkPrefetch: function linkPrefetch() {\n var route = this.$router.resolve(this.to);\n if (route.meta.__prefetched) { return; }\n route.meta.__prefetched = true;\n\n if (route.meta.prefetch !== false) {\n // Prefetch route component\n var components = this.getRouteComponents(route);\n\n for (var i = 0, list = components; i < list.length; i += 1) {\n var Component = list[i];\n\n this.$emit('prefetch', this.to);\n Component(); // eslint-disable-line new-cap\n }\n }\n\n if (typeof route.meta.prefetch === 'function') {\n route.meta.prefetch(route);\n } // Prefetch addtional files\n\n\n var prefetchFiles = (this.prefetchFiles || []).concat( (route.meta.prefetchFiles || []));\n\n if (prefetchFiles.length > 0) {\n for (var i$1 = 0, list$1 = prefetchFiles; i$1 < list$1.length; i$1 += 1) {\n var file = list$1[i$1];\n\n prefetcher(file);\n }\n }\n\n this.unobserve();\n }\n\n } // `app.component(Link.name, Link)` will emit a warning\n\n };\n app._context.components[Link.name] = Link;\n}\n\nexport default installRouterPrefetch;\nexport { prefetcher as prefetch, installRouterPrefetch as install };\n","function flatHooks(configHooks, hooks = {}, parentName) {\n for (const key in configHooks) {\n const subHook = configHooks[key];\n const name = parentName ? `${parentName}:${key}` : key;\n if (typeof subHook === \"object\" && subHook !== null) {\n flatHooks(subHook, hooks, name);\n } else if (typeof subHook === \"function\") {\n hooks[name] = subHook;\n }\n }\n return hooks;\n}\nfunction mergeHooks(...hooks) {\n const finalHooks = {};\n for (const hook of hooks) {\n const flatenHook = flatHooks(hook);\n for (const key in flatenHook) {\n if (finalHooks[key]) {\n finalHooks[key].push(flatenHook[key]);\n } else {\n finalHooks[key] = [flatenHook[key]];\n }\n }\n }\n for (const key in finalHooks) {\n if (finalHooks[key].length > 1) {\n const array = finalHooks[key];\n finalHooks[key] = (...arguments_) => serial(array, (function_) => function_(...arguments_));\n } else {\n finalHooks[key] = finalHooks[key][0];\n }\n }\n return finalHooks;\n}\nfunction serial(tasks, function_) {\n return tasks.reduce((promise, task) => promise.then(() => function_(task)), Promise.resolve());\n}\nfunction serialCaller(hooks, arguments_) {\n return hooks.reduce((promise, hookFunction) => promise.then(() => hookFunction.apply(void 0, arguments_)), Promise.resolve());\n}\nfunction parallelCaller(hooks, arguments_) {\n return Promise.all(hooks.map((hook) => hook.apply(void 0, arguments_)));\n}\nfunction callEachWith(callbacks, argument0) {\n for (const callback of callbacks) {\n callback(argument0);\n }\n}\n\nclass Hookable {\n constructor() {\n this._hooks = {};\n this._before = void 0;\n this._after = void 0;\n this._deprecatedMessages = void 0;\n this._deprecatedHooks = {};\n this.hook = this.hook.bind(this);\n this.callHook = this.callHook.bind(this);\n this.callHookWith = this.callHookWith.bind(this);\n }\n hook(name, function_, options = {}) {\n if (!name || typeof function_ !== \"function\") {\n return () => {\n };\n }\n const originalName = name;\n let dep;\n while (this._deprecatedHooks[name]) {\n dep = this._deprecatedHooks[name];\n name = dep.to;\n }\n if (dep && !options.allowDeprecated) {\n let message = dep.message;\n if (!message) {\n message = `${originalName} hook has been deprecated` + (dep.to ? `, please use ${dep.to}` : \"\");\n }\n if (!this._deprecatedMessages) {\n this._deprecatedMessages = /* @__PURE__ */ new Set();\n }\n if (!this._deprecatedMessages.has(message)) {\n console.warn(message);\n this._deprecatedMessages.add(message);\n }\n }\n this._hooks[name] = this._hooks[name] || [];\n this._hooks[name].push(function_);\n return () => {\n if (function_) {\n this.removeHook(name, function_);\n function_ = void 0;\n }\n };\n }\n hookOnce(name, function_) {\n let _unreg;\n let _function = (...arguments_) => {\n if (typeof _unreg === \"function\") {\n _unreg();\n }\n _unreg = void 0;\n _function = void 0;\n return function_(...arguments_);\n };\n _unreg = this.hook(name, _function);\n return _unreg;\n }\n removeHook(name, function_) {\n if (this._hooks[name]) {\n const index = this._hooks[name].indexOf(function_);\n if (index !== -1) {\n this._hooks[name].splice(index, 1);\n }\n if (this._hooks[name].length === 0) {\n delete this._hooks[name];\n }\n }\n }\n deprecateHook(name, deprecated) {\n this._deprecatedHooks[name] = typeof deprecated === \"string\" ? { to: deprecated } : deprecated;\n const _hooks = this._hooks[name] || [];\n this._hooks[name] = void 0;\n for (const hook of _hooks) {\n this.hook(name, hook);\n }\n }\n deprecateHooks(deprecatedHooks) {\n Object.assign(this._deprecatedHooks, deprecatedHooks);\n for (const name in deprecatedHooks) {\n this.deprecateHook(name, deprecatedHooks[name]);\n }\n }\n addHooks(configHooks) {\n const hooks = flatHooks(configHooks);\n const removeFns = Object.keys(hooks).map((key) => this.hook(key, hooks[key]));\n return () => {\n for (const unreg of removeFns.splice(0, removeFns.length)) {\n unreg();\n }\n };\n }\n removeHooks(configHooks) {\n const hooks = flatHooks(configHooks);\n for (const key in hooks) {\n this.removeHook(key, hooks[key]);\n }\n }\n callHook(name, ...arguments_) {\n return this.callHookWith(serialCaller, name, ...arguments_);\n }\n callHookParallel(name, ...arguments_) {\n return this.callHookWith(parallelCaller, name, ...arguments_);\n }\n callHookWith(caller, name, ...arguments_) {\n const event = this._before || this._after ? { name, args: arguments_, context: {} } : void 0;\n if (this._before) {\n callEachWith(this._before, event);\n }\n const result = caller(this._hooks[name] || [], arguments_);\n if (result instanceof Promise) {\n return result.finally(() => {\n if (this._after && event) {\n callEachWith(this._after, event);\n }\n });\n }\n if (this._after && event) {\n callEachWith(this._after, event);\n }\n return result;\n }\n beforeEach(function_) {\n this._before = this._before || [];\n this._before.push(function_);\n return () => {\n const index = this._before.indexOf(function_);\n if (index !== -1) {\n this._before.splice(index, 1);\n }\n };\n }\n afterEach(function_) {\n this._after = this._after || [];\n this._after.push(function_);\n return () => {\n const index = this._after.indexOf(function_);\n if (index !== -1) {\n this._after.splice(index, 1);\n }\n };\n }\n}\nfunction createHooks() {\n return new Hookable();\n}\n\nconst isBrowser = typeof window !== \"undefined\";\nfunction createDebugger(hooks, _options = {}) {\n const options = {\n inspect: isBrowser,\n group: isBrowser,\n filter: () => true,\n ..._options\n };\n const _filter = options.filter;\n const filter = typeof _filter === \"string\" ? (name) => name.startsWith(_filter) : _filter;\n const _tag = options.tag ? `[${options.tag}] ` : \"\";\n const logPrefix = (event) => _tag + event.name + \"\".padEnd(event._id, \"\\0\");\n const _idCtr = {};\n const unsubscribeBefore = hooks.beforeEach((event) => {\n if (!filter(event.name)) {\n return;\n }\n _idCtr[event.name] = _idCtr[event.name] || 0;\n event._id = _idCtr[event.name]++;\n console.time(logPrefix(event));\n });\n const unsubscribeAfter = hooks.afterEach((event) => {\n if (!filter(event.name)) {\n return;\n }\n if (options.group) {\n console.groupCollapsed(event.name);\n }\n if (options.inspect) {\n console.timeLog(logPrefix(event), event.args);\n } else {\n console.timeEnd(logPrefix(event));\n }\n if (options.group) {\n console.groupEnd();\n }\n _idCtr[event.name]--;\n });\n return {\n close: () => {\n unsubscribeBefore();\n unsubscribeAfter();\n }\n };\n}\n\nexport { Hookable, createDebugger, createHooks, flatHooks, mergeHooks, parallelCaller, serial, serialCaller };\n","import { createHooks } from 'hookable';\nimport { unref, isRef, version, getCurrentInstance, inject, nextTick, ref, watchEffect, watch, onBeforeUnmount } from 'vue';\n\nconst TagsWithInnerContent = [\"script\", \"style\", \"noscript\"];\nconst HasElementTags$1 = [\n \"base\",\n \"meta\",\n \"link\",\n \"style\",\n \"script\",\n \"noscript\"\n];\n\nconst UniqueTags$1 = [\"base\", \"title\", \"titleTemplate\", \"bodyAttrs\", \"htmlAttrs\"];\nfunction tagDedupeKey$1(tag, fn) {\n const { props, tag: tagName } = tag;\n if (UniqueTags$1.includes(tagName))\n return tagName;\n if (tagName === \"link\" && props.rel === \"canonical\")\n return \"canonical\";\n if (props.charset)\n return \"charset\";\n const name = [\"id\"];\n if (tagName === \"meta\")\n name.push(...[\"name\", \"property\", \"http-equiv\"]);\n for (const n of name) {\n if (typeof props[n] !== \"undefined\") {\n const val = String(props[n]);\n if (fn && !fn(val))\n return false;\n return `${tagName}:${n}:${val}`;\n }\n }\n return false;\n}\n\nconst setAttrs = (ctx, markSideEffect) => {\n const { tag, $el } = ctx;\n if (!$el)\n return;\n Object.entries(tag.props).forEach(([k, value]) => {\n value = String(value);\n const attrSdeKey = `attr:${k}`;\n if (k === \"class\") {\n if (!value)\n return;\n for (const c of value.split(\" \")) {\n const classSdeKey = `${attrSdeKey}:${c}`;\n if (markSideEffect)\n markSideEffect(ctx, classSdeKey, () => $el.classList.remove(c));\n if (!$el.classList.contains(c))\n $el.classList.add(c);\n }\n return;\n }\n if (markSideEffect && !k.startsWith(\"data-h-\"))\n markSideEffect(ctx, attrSdeKey, () => $el.removeAttribute(k));\n if ($el.getAttribute(k) !== value)\n $el.setAttribute(k, value);\n });\n if (TagsWithInnerContent.includes(tag.tag) && $el.innerHTML !== (tag.children || \"\"))\n $el.innerHTML = tag.children || \"\";\n};\n\nfunction hashCode(s) {\n let h = 9;\n for (let i = 0; i < s.length; )\n h = Math.imul(h ^ s.charCodeAt(i++), 9 ** 9);\n return ((h ^ h >>> 9) + 65536).toString(16).substring(1, 8).toLowerCase();\n}\n\nasync function renderDOMHead(head, options = {}) {\n const ctx = { shouldRender: true };\n await head.hooks.callHook(\"dom:beforeRender\", ctx);\n if (!ctx.shouldRender)\n return;\n const dom = options.document || window.document;\n const staleSideEffects = head._popSideEffectQueue();\n head.headEntries().map((entry) => entry._sde).forEach((sde) => {\n Object.entries(sde).forEach(([key, fn]) => {\n staleSideEffects[key] = fn;\n });\n });\n const preRenderTag = async (tag) => {\n const entry = head.headEntries().find((e) => e._i === tag._e);\n const renderCtx = {\n renderId: tag._d || hashCode(JSON.stringify({ ...tag, _e: void 0, _p: void 0 })),\n $el: null,\n shouldRender: true,\n tag,\n entry,\n staleSideEffects\n };\n await head.hooks.callHook(\"dom:beforeRenderTag\", renderCtx);\n return renderCtx;\n };\n const renders = [];\n const pendingRenders = {\n body: [],\n head: []\n };\n const markSideEffect = (ctx2, key, fn) => {\n key = `${ctx2.renderId}:${key}`;\n if (ctx2.entry)\n ctx2.entry._sde[key] = fn;\n delete staleSideEffects[key];\n };\n const markEl = (ctx2) => {\n head._elMap[ctx2.renderId] = ctx2.$el;\n renders.push(ctx2);\n markSideEffect(ctx2, \"el\", () => {\n ctx2.$el?.remove();\n delete head._elMap[ctx2.renderId];\n });\n };\n for (const t of await head.resolveTags()) {\n const ctx2 = await preRenderTag(t);\n if (!ctx2.shouldRender)\n continue;\n const { tag } = ctx2;\n if (tag.tag === \"title\") {\n dom.title = tag.children || \"\";\n renders.push(ctx2);\n continue;\n }\n if (tag.tag === \"htmlAttrs\" || tag.tag === \"bodyAttrs\") {\n ctx2.$el = dom[tag.tag === \"htmlAttrs\" ? \"documentElement\" : \"body\"];\n setAttrs(ctx2, markSideEffect);\n renders.push(ctx2);\n continue;\n }\n ctx2.$el = head._elMap[ctx2.renderId];\n if (!ctx2.$el && tag._hash) {\n ctx2.$el = dom.querySelector(`${tag.tagPosition?.startsWith(\"body\") ? \"body\" : \"head\"} > ${tag.tag}[data-h-${tag._hash}]`);\n }\n if (ctx2.$el) {\n if (ctx2.tag._d)\n setAttrs(ctx2);\n markEl(ctx2);\n continue;\n }\n ctx2.$el = dom.createElement(tag.tag);\n setAttrs(ctx2);\n pendingRenders[tag.tagPosition?.startsWith(\"body\") ? \"body\" : \"head\"].push(ctx2);\n }\n Object.entries(pendingRenders).forEach(([pos, queue]) => {\n if (!queue.length)\n return;\n for (const $el of [...dom[pos].children].reverse()) {\n const elTag = $el.tagName.toLowerCase();\n if (!HasElementTags$1.includes(elTag))\n continue;\n const dedupeKey = tagDedupeKey$1({\n tag: elTag,\n props: $el.getAttributeNames().reduce((props, name) => ({ ...props, [name]: $el.getAttribute(name) }), {})\n });\n const matchIdx = queue.findIndex((ctx2) => ctx2 && (ctx2.tag._d === dedupeKey || $el.isEqualNode(ctx2.$el)));\n if (matchIdx !== -1) {\n const ctx2 = queue[matchIdx];\n ctx2.$el = $el;\n setAttrs(ctx2);\n markEl(ctx2);\n delete queue[matchIdx];\n }\n }\n queue.forEach((ctx2) => {\n if (!ctx2.$el)\n return;\n switch (ctx2.tag.tagPosition) {\n case \"bodyClose\":\n dom.body.appendChild(ctx2.$el);\n break;\n case \"bodyOpen\":\n dom.body.insertBefore(ctx2.$el, dom.body.firstChild);\n break;\n case \"head\":\n default:\n dom.head.appendChild(ctx2.$el);\n break;\n }\n markEl(ctx2);\n });\n });\n for (const ctx2 of renders)\n await head.hooks.callHook(\"dom:renderTag\", ctx2);\n Object.values(staleSideEffects).forEach((fn) => fn());\n}\nlet domUpdatePromise = null;\nasync function debouncedRenderDOMHead(head, options = {}) {\n function doDomUpdate() {\n domUpdatePromise = null;\n return renderDOMHead(head, options);\n }\n const delayFn = options.delayFn || ((fn) => setTimeout(fn, 10));\n return domUpdatePromise = domUpdatePromise || new Promise((resolve) => delayFn(() => resolve(doDomUpdate())));\n}\n\nconst index = {\n __proto__: null,\n debouncedRenderDOMHead: debouncedRenderDOMHead,\n get domUpdatePromise () { return domUpdatePromise; },\n hashCode: hashCode,\n renderDOMHead: renderDOMHead\n};\n\nconst ValidHeadTags = [\n \"title\",\n \"titleTemplate\",\n \"base\",\n \"htmlAttrs\",\n \"bodyAttrs\",\n \"meta\",\n \"link\",\n \"style\",\n \"script\",\n \"noscript\"\n];\nconst TagConfigKeys = [\"tagPosition\", \"tagPriority\", \"tagDuplicateStrategy\"];\n\nasync function normaliseTag(tagName, input) {\n const tag = { tag: tagName, props: {} };\n if (tagName === \"title\" || tagName === \"titleTemplate\") {\n tag.children = input instanceof Promise ? await input : input;\n return tag;\n }\n tag.props = await normaliseProps({ ...input });\n [\"children\", \"innerHtml\", \"innerHTML\"].forEach((key) => {\n if (typeof tag.props[key] !== \"undefined\") {\n tag.children = tag.props[key];\n if (typeof tag.children === \"object\")\n tag.children = JSON.stringify(tag.children);\n delete tag.props[key];\n }\n });\n Object.keys(tag.props).filter((k) => TagConfigKeys.includes(k)).forEach((k) => {\n tag[k] = tag.props[k];\n delete tag.props[k];\n });\n if (typeof tag.props.class === \"object\" && !Array.isArray(tag.props.class)) {\n tag.props.class = Object.keys(tag.props.class).filter((k) => tag.props.class[k]);\n }\n if (Array.isArray(tag.props.class))\n tag.props.class = tag.props.class.join(\" \");\n if (tag.props.content && Array.isArray(tag.props.content)) {\n return tag.props.content.map((v, i) => {\n const newTag = { ...tag, props: { ...tag.props } };\n newTag.props.content = v;\n newTag.key = `${tag.props.name || tag.props.property}:${i}`;\n return newTag;\n });\n }\n return tag;\n}\nasync function normaliseProps(props) {\n for (const k of Object.keys(props)) {\n if (props[k] instanceof Promise) {\n props[k] = await props[k];\n }\n if (String(props[k]) === \"true\") {\n props[k] = \"\";\n } else if (String(props[k]) === \"false\") {\n delete props[k];\n }\n }\n return props;\n}\n\nconst tagWeight = (tag) => {\n if (typeof tag.tagPriority === \"number\")\n return tag.tagPriority;\n switch (tag.tagPriority) {\n case \"critical\":\n return 2;\n case \"high\":\n return 9;\n case \"low\":\n return 12;\n }\n switch (tag.tag) {\n case \"base\":\n return -1;\n case \"title\":\n return 1;\n case \"meta\":\n if (tag.props.charset)\n return -2;\n if (tag.props[\"http-equiv\"] === \"content-security-policy\")\n return 0;\n return 10;\n default:\n return 10;\n }\n};\nconst sortTags = (aTag, bTag) => {\n return tagWeight(aTag) - tagWeight(bTag);\n};\n\nconst UniqueTags = [\"base\", \"title\", \"titleTemplate\", \"bodyAttrs\", \"htmlAttrs\"];\nfunction tagDedupeKey(tag, fn) {\n const { props, tag: tagName } = tag;\n if (UniqueTags.includes(tagName))\n return tagName;\n if (tagName === \"link\" && props.rel === \"canonical\")\n return \"canonical\";\n if (props.charset)\n return \"charset\";\n const name = [\"id\"];\n if (tagName === \"meta\")\n name.push(...[\"name\", \"property\", \"http-equiv\"]);\n for (const n of name) {\n if (typeof props[n] !== \"undefined\") {\n const val = String(props[n]);\n if (fn && !fn(val))\n return false;\n return `${tagName}:${n}:${val}`;\n }\n }\n return false;\n}\n\nconst renderTitleTemplate = (template, title) => {\n if (template == null)\n return title || null;\n if (typeof template === \"function\")\n return template(title);\n return template.replace(\"%s\", title ?? \"\");\n};\nfunction resolveTitleTemplateFromTags(tags) {\n let titleTemplateIdx = tags.findIndex((i) => i.tag === \"titleTemplate\");\n const titleIdx = tags.findIndex((i) => i.tag === \"title\");\n if (titleIdx !== -1 && titleTemplateIdx !== -1) {\n const newTitle = renderTitleTemplate(\n tags[titleTemplateIdx].children,\n tags[titleIdx].children\n );\n if (newTitle !== null) {\n tags[titleIdx].children = newTitle || tags[titleIdx].children;\n } else {\n delete tags[titleIdx];\n }\n } else if (titleTemplateIdx !== -1) {\n const newTitle = renderTitleTemplate(\n tags[titleTemplateIdx].children\n );\n if (newTitle !== null) {\n tags[titleTemplateIdx].children = newTitle;\n tags[titleTemplateIdx].tag = \"title\";\n titleTemplateIdx = -1;\n }\n }\n if (titleTemplateIdx !== -1) {\n delete tags[titleTemplateIdx];\n }\n return tags.filter(Boolean);\n}\n\nconst DedupesTagsPlugin = (options) => {\n options = options || {};\n const dedupeKeys = options.dedupeKeys || [\"hid\", \"vmid\", \"key\"];\n return defineHeadPlugin({\n hooks: {\n \"tag:normalise\": function({ tag }) {\n dedupeKeys.forEach((key) => {\n if (tag.props[key]) {\n tag.key = tag.props[key];\n delete tag.props[key];\n }\n });\n const dedupe = tag.key ? `${tag.tag}:${tag.key}` : tagDedupeKey(tag);\n if (dedupe)\n tag._d = dedupe;\n },\n \"tags:resolve\": function(ctx) {\n const deduping = {};\n ctx.tags.forEach((tag) => {\n let dedupeKey = tag._d || tag._p;\n const dupedTag = deduping[dedupeKey];\n if (dupedTag) {\n let strategy = tag?.tagDuplicateStrategy;\n if (!strategy && (tag.tag === \"htmlAttrs\" || tag.tag === \"bodyAttrs\"))\n strategy = \"merge\";\n if (strategy === \"merge\") {\n const oldProps = dupedTag.props;\n [\"class\", \"style\"].forEach((key) => {\n if (tag.props[key] && oldProps[key]) {\n if (key === \"style\" && !oldProps[key].endsWith(\";\"))\n oldProps[key] += \";\";\n tag.props[key] = `${oldProps[key]} ${tag.props[key]}`;\n }\n });\n deduping[dedupeKey].props = {\n ...oldProps,\n ...tag.props\n };\n return;\n } else if (tag._e === dupedTag._e) {\n dedupeKey = tag._d = `${dedupeKey}:${tag._p}`;\n }\n const propCount = Object.keys(tag.props).length;\n if ((propCount === 0 || propCount === 1 && typeof tag.props[\"data-h-key\"] !== \"undefined\") && !tag.children) {\n delete deduping[dedupeKey];\n return;\n }\n }\n deduping[dedupeKey] = tag;\n });\n ctx.tags = Object.values(deduping);\n }\n }\n });\n};\n\nconst SortTagsPlugin = () => {\n return defineHeadPlugin({\n hooks: {\n \"tags:resolve\": (ctx) => {\n const tagIndexForKey = (key) => ctx.tags.find((tag) => tag._d === key)?._p;\n for (const tag of ctx.tags) {\n if (!tag.tagPriority || typeof tag.tagPriority === \"number\")\n continue;\n const modifiers = [{ prefix: \"before:\", offset: -1 }, { prefix: \"after:\", offset: 1 }];\n for (const { prefix, offset } of modifiers) {\n if (tag.tagPriority.startsWith(prefix)) {\n const key = tag.tagPriority.replace(prefix, \"\");\n const index = tagIndexForKey(key);\n if (typeof index !== \"undefined\")\n tag._p = index + offset;\n }\n }\n }\n ctx.tags.sort((a, b) => a._p - b._p).sort(sortTags);\n }\n }\n });\n};\n\nconst TitleTemplatePlugin = () => {\n return defineHeadPlugin({\n hooks: {\n \"tags:resolve\": (ctx) => {\n ctx.tags = resolveTitleTemplateFromTags(ctx.tags);\n }\n }\n });\n};\n\nconst DeprecatedTagAttrPlugin = () => {\n return defineHeadPlugin({\n hooks: {\n \"tag:normalise\": function({ tag }) {\n if (typeof tag.props.body !== \"undefined\") {\n tag.tagPosition = \"bodyClose\";\n delete tag.props.body;\n }\n }\n }\n });\n};\n\nconst IsBrowser$1 = typeof window !== \"undefined\";\n\nconst ProvideTagHashPlugin = () => {\n return defineHeadPlugin({\n hooks: {\n \"tag:normalise\": (ctx) => {\n const { tag, entry } = ctx;\n const isDynamic = typeof tag.props._dynamic !== \"undefined\";\n if (!HasElementTags.includes(tag.tag) || !tag.key)\n return;\n tag._hash = hashCode(JSON.stringify({ tag: tag.tag, key: tag.key }));\n if (IsBrowser$1 || getActiveHead()?.resolvedOptions?.document)\n return;\n if (entry._m === \"server\" || isDynamic) {\n tag.props[`data-h-${tag._hash}`] = \"\";\n }\n },\n \"tags:resolve\": (ctx) => {\n ctx.tags = ctx.tags.map((t) => {\n delete t.props._dynamic;\n return t;\n });\n }\n }\n });\n};\n\nconst PatchDomOnEntryUpdatesPlugin = (options) => {\n return defineHeadPlugin({\n hooks: {\n \"entries:updated\": function(head) {\n if (typeof options?.document === \"undefined\" && typeof window === \"undefined\")\n return;\n let delayFn = options?.delayFn;\n if (!delayFn && typeof requestAnimationFrame !== \"undefined\")\n delayFn = requestAnimationFrame;\n Promise.resolve().then(function () { return index; }).then(({ debouncedRenderDOMHead }) => {\n debouncedRenderDOMHead(head, { document: options?.document || window.document, delayFn });\n });\n }\n }\n });\n};\n\nconst EventHandlersPlugin = () => {\n const stripEventHandlers = (mode, tag) => {\n const props = {};\n const eventHandlers = {};\n Object.entries(tag.props).forEach(([key, value]) => {\n if (key.startsWith(\"on\") && typeof value === \"function\")\n eventHandlers[key] = value;\n else\n props[key] = value;\n });\n let delayedSrc;\n if (mode === \"dom\" && tag.tag === \"script\" && typeof props.src === \"string\" && typeof eventHandlers.onload !== \"undefined\") {\n delayedSrc = props.src;\n delete props.src;\n }\n return { props, eventHandlers, delayedSrc };\n };\n return defineHeadPlugin({\n hooks: {\n \"ssr:render\": function(ctx) {\n ctx.tags = ctx.tags.map((tag) => {\n tag.props = stripEventHandlers(\"ssr\", tag).props;\n return tag;\n });\n },\n \"dom:beforeRenderTag\": function(ctx) {\n const { props, eventHandlers, delayedSrc } = stripEventHandlers(\"dom\", ctx.tag);\n if (!Object.keys(eventHandlers).length)\n return;\n ctx.tag.props = props;\n ctx.tag._eventHandlers = eventHandlers;\n ctx.tag._delayedSrc = delayedSrc;\n },\n \"dom:renderTag\": function(ctx) {\n const $el = ctx.$el;\n if (!ctx.tag._eventHandlers || !$el)\n return;\n const $eventListenerTarget = ctx.tag.tag === \"bodyAttrs\" && typeof window !== \"undefined\" ? window : $el;\n Object.entries(ctx.tag._eventHandlers).forEach(([k, value]) => {\n const sdeKey = `${ctx.tag._d || ctx.tag._p}:${k}`;\n const eventName = k.slice(2).toLowerCase();\n const eventDedupeKey = `data-h-${eventName}`;\n delete ctx.staleSideEffects[sdeKey];\n if ($el.hasAttribute(eventDedupeKey))\n return;\n const handler = value;\n $el.setAttribute(eventDedupeKey, \"\");\n $eventListenerTarget.addEventListener(eventName, handler);\n if (ctx.entry) {\n ctx.entry._sde[sdeKey] = () => {\n $eventListenerTarget.removeEventListener(eventName, handler);\n $el.removeAttribute(eventDedupeKey);\n };\n }\n });\n if (ctx.tag._delayedSrc) {\n $el.setAttribute(\"src\", ctx.tag._delayedSrc);\n }\n }\n }\n });\n};\n\nfunction asArray$1(value) {\n return Array.isArray(value) ? value : [value];\n}\nconst HasElementTags = [\n \"base\",\n \"meta\",\n \"link\",\n \"style\",\n \"script\",\n \"noscript\"\n];\n\nlet activeHead;\nconst setActiveHead = (head) => activeHead = head;\nconst getActiveHead = () => activeHead;\n\nconst TagEntityBits = 10;\n\nasync function normaliseEntryTags(e) {\n const tagPromises = [];\n Object.entries(e.resolvedInput || e.input).filter(([k, v]) => typeof v !== \"undefined\" && ValidHeadTags.includes(k)).forEach(([k, value]) => {\n const v = asArray$1(value);\n tagPromises.push(...v.map((props) => normaliseTag(k, props)).flat());\n });\n return (await Promise.all(tagPromises)).flat().map((t, i) => {\n t._e = e._i;\n t._p = (e._i << TagEntityBits) + i;\n return t;\n });\n}\n\nconst CorePlugins = () => [\n DedupesTagsPlugin(),\n SortTagsPlugin(),\n TitleTemplatePlugin(),\n ProvideTagHashPlugin(),\n EventHandlersPlugin(),\n DeprecatedTagAttrPlugin()\n];\nconst DOMPlugins = (options = {}) => [\n PatchDomOnEntryUpdatesPlugin({ document: options?.document, delayFn: options?.domDelayFn })\n];\nfunction createHead$1(options = {}) {\n const head = createHeadCore({\n ...options,\n plugins: [...DOMPlugins(options), ...options?.plugins || []]\n });\n setActiveHead(head);\n return head;\n}\nfunction createHeadCore(options = {}) {\n let entries = [];\n let _sde = {};\n let _eid = 0;\n const hooks = createHooks();\n if (options?.hooks)\n hooks.addHooks(options.hooks);\n options.plugins = [\n ...CorePlugins(),\n ...options?.plugins || []\n ];\n options.plugins.forEach((p) => p.hooks && hooks.addHooks(p.hooks));\n const updated = () => hooks.callHook(\"entries:updated\", head);\n const head = {\n resolvedOptions: options,\n headEntries() {\n return entries;\n },\n get hooks() {\n return hooks;\n },\n use(plugin) {\n if (plugin.hooks)\n hooks.addHooks(plugin.hooks);\n },\n push(input, options2) {\n const activeEntry = {\n _i: _eid++,\n input,\n _sde: {}\n };\n if (options2?.mode)\n activeEntry._m = options2?.mode;\n entries.push(activeEntry);\n updated();\n return {\n dispose() {\n entries = entries.filter((e) => {\n if (e._i !== activeEntry._i)\n return true;\n _sde = { ..._sde, ...e._sde || {} };\n e._sde = {};\n updated();\n return false;\n });\n },\n patch(input2) {\n entries = entries.map((e) => {\n if (e._i === activeEntry._i) {\n activeEntry.input = e.input = input2;\n updated();\n }\n return e;\n });\n }\n };\n },\n async resolveTags() {\n const resolveCtx = { tags: [], entries: [...entries] };\n await hooks.callHook(\"entries:resolve\", resolveCtx);\n for (const entry of resolveCtx.entries) {\n for (const tag of await normaliseEntryTags(entry)) {\n const tagCtx = { tag, entry };\n await hooks.callHook(\"tag:normalise\", tagCtx);\n resolveCtx.tags.push(tagCtx.tag);\n }\n }\n await hooks.callHook(\"tags:resolve\", resolveCtx);\n return resolveCtx.tags;\n },\n _elMap: {},\n _popSideEffectQueue() {\n const sde = { ..._sde };\n _sde = {};\n return sde;\n }\n };\n head.hooks.callHook(\"init\", head);\n return head;\n}\n\nfunction defineHeadPlugin(plugin) {\n return plugin;\n}\nconst composableNames = [\n \"useHead\",\n \"useTagTitle\",\n \"useTagBase\",\n \"useTagMeta\",\n \"useTagMetaFlat\",\n \"useSeoMeta\",\n \"useTagLink\",\n \"useTagScript\",\n \"useTagStyle\",\n \"useTagNoscript\",\n \"useHtmlAttrs\",\n \"useBodyAttrs\",\n \"useTitleTemplate\",\n \"useServerHead\",\n \"useServerTagTitle\",\n \"useServerTagBase\",\n \"useServerTagMeta\",\n \"useServerTagMetaFlat\",\n \"useServerTagLink\",\n \"useServerTagScript\",\n \"useServerTagStyle\",\n \"useServerTagNoscript\",\n \"useServerHtmlAttrs\",\n \"useServerBodyAttrs\",\n \"useServerTitleTemplate\"\n];\n\nfunction resolveUnref(r) {\n return typeof r === \"function\" ? r() : unref(r);\n}\nfunction resolveUnrefHeadInput(ref, lastKey = \"\") {\n if (ref instanceof Promise)\n return ref;\n const root = resolveUnref(ref);\n if (!ref || !root)\n return root;\n if (Array.isArray(root))\n return root.map((r) => resolveUnrefHeadInput(r, lastKey));\n if (typeof root === \"object\") {\n let dynamic = false;\n const unrefdObj = Object.fromEntries(\n Object.entries(root).map(([k, v]) => {\n if (k === \"titleTemplate\" || k.startsWith(\"on\"))\n return [k, unref(v)];\n if (typeof v === \"function\" || isRef(v))\n dynamic = true;\n return [k, resolveUnrefHeadInput(v, k)];\n })\n );\n if (dynamic && HasElementTags.includes(String(lastKey)))\n unrefdObj._dynamic = true;\n return unrefdObj;\n }\n return root;\n}\nfunction asArray(value) {\n return Array.isArray(value) ? value : [value];\n}\n\nconst Vue3 = version.startsWith(\"3\");\nconst IsBrowser = typeof window !== \"undefined\";\n\nconst headSymbol = \"usehead\";\nfunction injectHead() {\n return getCurrentInstance() && inject(headSymbol) || getActiveHead();\n}\nfunction createHead(options = {}) {\n const head = createHead$1({\n ...options,\n domDelayFn: (fn) => setTimeout(() => nextTick(() => fn()), 10),\n plugins: [\n VueReactiveUseHeadPlugin(),\n ...options?.plugins || []\n ]\n });\n const vuePlugin = {\n install(app) {\n if (Vue3) {\n app.config.globalProperties.$unhead = head;\n app.provide(headSymbol, head);\n }\n }\n };\n head.install = vuePlugin.install;\n return head;\n}\n\nconst VueHeadMixin = {\n created() {\n const instance = getCurrentInstance();\n if (!instance)\n return;\n const options = instance.type;\n if (!options || !(\"head\" in options))\n return;\n const source = typeof options.head === \"function\" ? () => options.head.call(instance.proxy) : options.head;\n useHead(source);\n }\n};\n\nconst VueReactiveUseHeadPlugin = () => {\n return defineHeadPlugin({\n hooks: {\n \"entries:resolve\": function(ctx) {\n for (const entry of ctx.entries)\n entry.resolvedInput = resolveUnrefHeadInput(entry.input);\n }\n }\n });\n};\n\nconst Vue2ProvideUnheadPlugin = function(_Vue, head) {\n _Vue.mixin({\n beforeCreate() {\n const options = this.$options;\n const origProvide = options.provide;\n options.provide = function() {\n let origProvideResult;\n if (typeof origProvide === \"function\")\n origProvideResult = origProvide.call(this);\n else\n origProvideResult = origProvide || {};\n return {\n ...origProvideResult,\n [headSymbol]: head\n };\n };\n }\n });\n};\n\nfunction unpackToArray(input, options) {\n const unpacked = [];\n const kFn = options.resolveKeyData || ((ctx) => ctx.key);\n const vFn = options.resolveValueData || ((ctx) => ctx.value);\n for (const [k, v] of Object.entries(input)) {\n unpacked.push(...(Array.isArray(v) ? v : [v]).map((i) => {\n const ctx = { key: k, value: i };\n const val = vFn(ctx);\n if (typeof val === \"object\")\n return unpackToArray(val, options);\n if (Array.isArray(val))\n return val;\n return {\n [typeof options.key === \"function\" ? options.key(ctx) : options.key]: kFn(ctx),\n [typeof options.value === \"function\" ? options.value(ctx) : options.value]: val\n };\n }).flat());\n }\n return unpacked;\n}\n\nfunction unpackToString(value, options) {\n return Object.entries(value).map(([key, value2]) => {\n if (typeof value2 === \"object\")\n value2 = unpackToString(value2, options);\n if (options.resolve) {\n const resolved = options.resolve({ key, value: value2 });\n if (resolved)\n return resolved;\n }\n if (typeof value2 === \"number\")\n value2 = value2.toString();\n if (typeof value2 === \"string\" && options.wrapValue) {\n value2 = value2.replace(new RegExp(options.wrapValue, \"g\"), `\\\\${options.wrapValue}`);\n value2 = `${options.wrapValue}${value2}${options.wrapValue}`;\n }\n return `${key}${options.keyValueSeparator || \"\"}${value2}`;\n }).join(options.entrySeparator || \"\");\n}\n\nconst MetaPackingSchema = {\n robots: {\n unpack: {\n keyValueSeparator: \":\"\n }\n },\n contentSecurityPolicy: {\n unpack: {\n keyValueSeparator: \" \",\n entrySeparator: \"; \"\n },\n metaKey: \"http-equiv\"\n },\n fbAppId: {\n keyValue: \"fb:app_id\",\n metaKey: \"property\"\n },\n msapplicationTileImage: {\n keyValue: \"msapplication-TileImage\"\n },\n msapplicationTileColor: {\n keyValue: \"msapplication-TileColor\"\n },\n msapplicationConfig: {\n keyValue: \"msapplication-Config\"\n },\n charset: {\n metaKey: \"charset\"\n },\n contentType: {\n metaKey: \"http-equiv\"\n },\n defaultStyle: {\n metaKey: \"http-equiv\"\n },\n xUaCompatible: {\n metaKey: \"http-equiv\"\n },\n refresh: {\n metaKey: \"http-equiv\"\n }\n};\nfunction resolveMetaKeyType(key) {\n return PropertyPrefixKeys.test(key) ? \"property\" : MetaPackingSchema[key]?.metaKey || \"name\";\n}\n\nfunction unpackMeta(input) {\n return unpackToArray(input, {\n key({ key }) {\n return resolveMetaKeyType(key);\n },\n value({ key }) {\n return key === \"charset\" ? \"charset\" : \"content\";\n },\n resolveKeyData({ key }) {\n return MetaPackingSchema[key]?.keyValue || fixKeyCase(key);\n },\n resolveValueData({ value, key }) {\n if (typeof value === \"object\") {\n const definition = MetaPackingSchema[key];\n if (key === \"refresh\")\n return `${value.seconds};url=${value.url}`;\n return unpackToString(\n changeKeyCasingDeep(value),\n {\n entrySeparator: \", \",\n keyValueSeparator: \"=\",\n resolve({ value: value2, key: key2 }) {\n if (typeof value2 === \"boolean\")\n return `${key2}`;\n },\n ...definition?.unpack\n }\n );\n }\n return typeof value === \"number\" ? value.toString() : value;\n }\n });\n}\n\nconst PropertyPrefixKeys = /^(og|twitter|fb)/;\nfunction fixKeyCase(key) {\n key = key.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n if (PropertyPrefixKeys.test(key)) {\n key = key.replace(\"secure-url\", \"secure_url\").replace(/-/g, \":\");\n }\n return key;\n}\nfunction changeKeyCasingDeep(input) {\n if (Array.isArray(input)) {\n return input.map((entry) => changeKeyCasingDeep(entry));\n }\n if (typeof input !== \"object\" || Array.isArray(input))\n return input;\n const output = {};\n for (const [key, value] of Object.entries(input))\n output[fixKeyCase(key)] = changeKeyCasingDeep(value);\n return output;\n}\n\nfunction clientUseHead(input, options = {}) {\n const head = injectHead();\n const resolvedInput = ref({});\n watchEffect(() => {\n resolvedInput.value = resolveUnrefHeadInput(input);\n });\n const entry = head.push(resolvedInput.value, options);\n watch(resolvedInput, (e) => entry.patch(e));\n const vm = getCurrentInstance();\n if (vm) {\n onBeforeUnmount(() => {\n entry.dispose();\n });\n }\n return entry;\n}\n\nfunction serverUseHead(input, options = {}) {\n const head = injectHead();\n return head.push(input, options);\n}\n\nfunction useServerHead(input, options = {}) {\n return useHead(input, { ...options, mode: \"server\" });\n}\nconst useServerTagTitle = (title) => useServerHead({ title });\nconst useServerTitleTemplate = (titleTemplate) => useServerHead({ titleTemplate });\nconst useServerTagMeta = (meta) => useServerHead({ meta: asArray(meta) });\nconst useServerTagMetaFlat = (meta) => {\n const input = ref({});\n watchEffect(() => {\n input.value = unpackMeta(resolveUnrefHeadInput(meta));\n });\n return useServerHead({ meta: input });\n};\nconst useServerTagLink = (link) => useServerHead({ link: asArray(link) });\nconst useServerTagScript = (script) => useServerHead({ script: asArray(script) });\nconst useServerTagStyle = (style) => useServerHead({ style: asArray(style) });\nconst useServerTagNoscript = (noscript) => useServerHead({ noscript: asArray(noscript) });\nconst useServerTagBase = (base) => useServerHead({ base });\nconst useServerHtmlAttrs = (attrs) => useServerHead({ htmlAttrs: attrs });\nconst useServerBodyAttrs = (attrs) => useHead({ bodyAttrs: attrs });\n\nfunction useHead(input, options = {}) {\n const head = injectHead();\n if (head) {\n const isBrowser = IsBrowser || !!head.resolvedOptions?.document;\n if (options.mode === \"server\" && isBrowser || options.mode === \"client\" && !isBrowser)\n return;\n return isBrowser ? clientUseHead(input, options) : serverUseHead(input, options);\n }\n}\nconst useTagTitle = (title) => useHead({ title });\nconst useTitleTemplate = (titleTemplate) => useHead({ titleTemplate });\nconst useTagMeta = (meta) => useHead({ meta: asArray(meta) });\nconst useTagMetaFlat = (meta) => {\n const input = ref({});\n watchEffect(() => {\n input.value = unpackMeta(resolveUnrefHeadInput(meta));\n });\n return useHead({ meta: input });\n};\nconst useSeoMeta = useTagMetaFlat;\nconst useTagLink = (link) => useHead({ link: asArray(link) });\nconst useTagScript = (script) => useHead({ script: asArray(script) });\nconst useTagStyle = (style) => useHead({ style: asArray(style) });\nconst useTagNoscript = (noscript) => useHead({ noscript: asArray(noscript) });\nconst useTagBase = (base) => useHead({ base });\nconst useHtmlAttrs = (attrs) => useHead({ htmlAttrs: attrs });\nconst useBodyAttrs = (attrs) => useHead({ bodyAttrs: attrs });\n\nconst coreComposableNames = [\n \"injectHead\"\n];\nconst unheadVueComposablesImports = [\n {\n from: \"@unhead/vue\",\n imports: [...coreComposableNames, ...composableNames]\n }\n];\n\nexport { Vue2ProvideUnheadPlugin, VueHeadMixin, VueReactiveUseHeadPlugin, asArray, createHead, createHeadCore, headSymbol, injectHead, resolveUnrefHeadInput, unheadVueComposablesImports, useBodyAttrs, useHead, useHtmlAttrs, useSeoMeta, useServerBodyAttrs, useServerHead, useServerHtmlAttrs, useServerTagBase, useServerTagLink, useServerTagMeta, useServerTagMetaFlat, useServerTagNoscript, useServerTagScript, useServerTagStyle, useServerTagTitle, useServerTitleTemplate, useTagBase, useTagLink, useTagMeta, useTagMetaFlat, useTagNoscript, useTagScript, useTagStyle, useTagTitle, useTitleTemplate };\n","const TagsWithInnerContent = [\"script\", \"style\", \"noscript\"];\nconst HasElementTags = [\n \"base\",\n \"meta\",\n \"link\",\n \"style\",\n \"script\",\n \"noscript\"\n];\n\nconst UniqueTags = [\"base\", \"title\", \"titleTemplate\", \"bodyAttrs\", \"htmlAttrs\"];\nfunction tagDedupeKey(tag, fn) {\n const { props, tag: tagName } = tag;\n if (UniqueTags.includes(tagName))\n return tagName;\n if (tagName === \"link\" && props.rel === \"canonical\")\n return \"canonical\";\n if (props.charset)\n return \"charset\";\n const name = [\"id\"];\n if (tagName === \"meta\")\n name.push(...[\"name\", \"property\", \"http-equiv\"]);\n for (const n of name) {\n if (typeof props[n] !== \"undefined\") {\n const val = String(props[n]);\n if (fn && !fn(val))\n return false;\n return `${tagName}:${n}:${val}`;\n }\n }\n return false;\n}\n\nconst setAttrs = (ctx, markSideEffect) => {\n const { tag, $el } = ctx;\n if (!$el)\n return;\n Object.entries(tag.props).forEach(([k, value]) => {\n value = String(value);\n const attrSdeKey = `attr:${k}`;\n if (k === \"class\") {\n if (!value)\n return;\n for (const c of value.split(\" \")) {\n const classSdeKey = `${attrSdeKey}:${c}`;\n if (markSideEffect)\n markSideEffect(ctx, classSdeKey, () => $el.classList.remove(c));\n if (!$el.classList.contains(c))\n $el.classList.add(c);\n }\n return;\n }\n if (markSideEffect && !k.startsWith(\"data-h-\"))\n markSideEffect(ctx, attrSdeKey, () => $el.removeAttribute(k));\n if ($el.getAttribute(k) !== value)\n $el.setAttribute(k, value);\n });\n if (TagsWithInnerContent.includes(tag.tag) && $el.innerHTML !== (tag.children || \"\"))\n $el.innerHTML = tag.children || \"\";\n};\n\nfunction hashCode(s) {\n let h = 9;\n for (let i = 0; i < s.length; )\n h = Math.imul(h ^ s.charCodeAt(i++), 9 ** 9);\n return ((h ^ h >>> 9) + 65536).toString(16).substring(1, 8).toLowerCase();\n}\n\nasync function renderDOMHead(head, options = {}) {\n const ctx = { shouldRender: true };\n await head.hooks.callHook(\"dom:beforeRender\", ctx);\n if (!ctx.shouldRender)\n return;\n const dom = options.document || window.document;\n const staleSideEffects = head._popSideEffectQueue();\n head.headEntries().map((entry) => entry._sde).forEach((sde) => {\n Object.entries(sde).forEach(([key, fn]) => {\n staleSideEffects[key] = fn;\n });\n });\n const preRenderTag = async (tag) => {\n const entry = head.headEntries().find((e) => e._i === tag._e);\n const renderCtx = {\n renderId: tag._d || hashCode(JSON.stringify({ ...tag, _e: void 0, _p: void 0 })),\n $el: null,\n shouldRender: true,\n tag,\n entry,\n staleSideEffects\n };\n await head.hooks.callHook(\"dom:beforeRenderTag\", renderCtx);\n return renderCtx;\n };\n const renders = [];\n const pendingRenders = {\n body: [],\n head: []\n };\n const markSideEffect = (ctx2, key, fn) => {\n key = `${ctx2.renderId}:${key}`;\n if (ctx2.entry)\n ctx2.entry._sde[key] = fn;\n delete staleSideEffects[key];\n };\n const markEl = (ctx2) => {\n head._elMap[ctx2.renderId] = ctx2.$el;\n renders.push(ctx2);\n markSideEffect(ctx2, \"el\", () => {\n ctx2.$el?.remove();\n delete head._elMap[ctx2.renderId];\n });\n };\n for (const t of await head.resolveTags()) {\n const ctx2 = await preRenderTag(t);\n if (!ctx2.shouldRender)\n continue;\n const { tag } = ctx2;\n if (tag.tag === \"title\") {\n dom.title = tag.children || \"\";\n renders.push(ctx2);\n continue;\n }\n if (tag.tag === \"htmlAttrs\" || tag.tag === \"bodyAttrs\") {\n ctx2.$el = dom[tag.tag === \"htmlAttrs\" ? \"documentElement\" : \"body\"];\n setAttrs(ctx2, markSideEffect);\n renders.push(ctx2);\n continue;\n }\n ctx2.$el = head._elMap[ctx2.renderId];\n if (!ctx2.$el && tag._hash) {\n ctx2.$el = dom.querySelector(`${tag.tagPosition?.startsWith(\"body\") ? \"body\" : \"head\"} > ${tag.tag}[data-h-${tag._hash}]`);\n }\n if (ctx2.$el) {\n if (ctx2.tag._d)\n setAttrs(ctx2);\n markEl(ctx2);\n continue;\n }\n ctx2.$el = dom.createElement(tag.tag);\n setAttrs(ctx2);\n pendingRenders[tag.tagPosition?.startsWith(\"body\") ? \"body\" : \"head\"].push(ctx2);\n }\n Object.entries(pendingRenders).forEach(([pos, queue]) => {\n if (!queue.length)\n return;\n for (const $el of [...dom[pos].children].reverse()) {\n const elTag = $el.tagName.toLowerCase();\n if (!HasElementTags.includes(elTag))\n continue;\n const dedupeKey = tagDedupeKey({\n tag: elTag,\n props: $el.getAttributeNames().reduce((props, name) => ({ ...props, [name]: $el.getAttribute(name) }), {})\n });\n const matchIdx = queue.findIndex((ctx2) => ctx2 && (ctx2.tag._d === dedupeKey || $el.isEqualNode(ctx2.$el)));\n if (matchIdx !== -1) {\n const ctx2 = queue[matchIdx];\n ctx2.$el = $el;\n setAttrs(ctx2);\n markEl(ctx2);\n delete queue[matchIdx];\n }\n }\n queue.forEach((ctx2) => {\n if (!ctx2.$el)\n return;\n switch (ctx2.tag.tagPosition) {\n case \"bodyClose\":\n dom.body.appendChild(ctx2.$el);\n break;\n case \"bodyOpen\":\n dom.body.insertBefore(ctx2.$el, dom.body.firstChild);\n break;\n case \"head\":\n default:\n dom.head.appendChild(ctx2.$el);\n break;\n }\n markEl(ctx2);\n });\n });\n for (const ctx2 of renders)\n await head.hooks.callHook(\"dom:renderTag\", ctx2);\n Object.values(staleSideEffects).forEach((fn) => fn());\n}\nlet domUpdatePromise = null;\nasync function debouncedRenderDOMHead(head, options = {}) {\n function doDomUpdate() {\n domUpdatePromise = null;\n return renderDOMHead(head, options);\n }\n const delayFn = options.delayFn || ((fn) => setTimeout(fn, 10));\n return domUpdatePromise = domUpdatePromise || new Promise((resolve) => delayFn(() => resolve(doDomUpdate())));\n}\n\nexport { debouncedRenderDOMHead, domUpdatePromise, hashCode, renderDOMHead };\n","import { createHead as createHead$1, useHead, Vue2ProvideUnheadPlugin, injectHead } from '@unhead/vue';\nexport { Vue2ProvideUnheadPlugin, VueHeadMixin, createHeadCore, injectHead, unheadVueComposablesImports, useBodyAttrs, useHead, useHtmlAttrs, useSeoMeta, useServerBodyAttrs, useServerHead, useServerHtmlAttrs, useServerTagBase, useServerTagLink, useServerTagMeta, useServerTagMetaFlat, useServerTagNoscript, useServerTagScript, useServerTagStyle, useServerTagTitle, useServerTitleTemplate, useTagBase, useTagLink, useTagMeta, useTagMetaFlat, useTagNoscript, useTagScript, useTagStyle, useTagTitle, useTitleTemplate } from '@unhead/vue';\nimport { renderDOMHead, debouncedRenderDOMHead } from '@unhead/dom';\nimport { version, defineComponent, ref, onBeforeUnmount, watchEffect } from 'vue';\nimport { renderSSRHead } from '@unhead/ssr';\n\nfunction createHead(initHeadObject) {\n const unhead = createHead$1();\n const legacyHead = {\n unhead,\n install(app) {\n if (version.startsWith(\"3\")) {\n app.config.globalProperties.$head = unhead;\n app.provide(\"usehead\", unhead);\n }\n },\n use(plugin) {\n unhead.use(plugin);\n },\n resolveTags() {\n return unhead.resolveTags();\n },\n headEntries() {\n return unhead.headEntries();\n },\n headTags() {\n return unhead.resolveTags();\n },\n push(input, options) {\n return unhead.push(input, options);\n },\n addEntry(input, options) {\n return unhead.push(input, options);\n },\n addHeadObjs(input, options) {\n return unhead.push(input, options);\n },\n addReactiveEntry(input, options) {\n const api = useHead(input, options);\n if (typeof api !== \"undefined\")\n return api.dispose;\n return () => {\n };\n },\n removeHeadObjs() {\n },\n updateDOM(document, force) {\n if (force)\n renderDOMHead(unhead, { document });\n else\n debouncedRenderDOMHead(unhead, { delayFn: (fn) => setTimeout(() => fn(), 50), document });\n },\n internalHooks: unhead.hooks,\n hooks: {\n \"before:dom\": [],\n \"resolved:tags\": [],\n \"resolved:entries\": []\n }\n };\n unhead.addHeadObjs = legacyHead.addHeadObjs;\n unhead.updateDOM = legacyHead.updateDOM;\n unhead.hooks.hook(\"dom:beforeRender\", (ctx) => {\n for (const hook of legacyHead.hooks[\"before:dom\"]) {\n if (hook() === false)\n ctx.shouldRender = false;\n }\n });\n if (initHeadObject)\n legacyHead.addHeadObjs(initHeadObject);\n return legacyHead;\n}\n\nconst HeadVuePlugin = Vue2ProvideUnheadPlugin;\nconst renderHeadToString = (head) => renderSSRHead(head.unhead);\n\nconst Vue2 = version.startsWith(\"2.\");\nconst IsBrowser = typeof window !== \"undefined\";\n\nconst addVNodeToHeadObj = (node, obj) => {\n const nodeType = Vue2 ? node.tag : node.type;\n const type = nodeType === \"html\" ? \"htmlAttrs\" : nodeType === \"body\" ? \"bodyAttrs\" : nodeType;\n if (typeof type !== \"string\" || !(type in obj))\n return;\n const nodeData = Vue2 ? node.data : node;\n const props = (Vue2 ? nodeData.attrs : node.props) || {};\n if (Vue2) {\n if (nodeData.staticClass)\n props.class = nodeData.staticClass;\n if (nodeData.staticStyle)\n props.style = Object.entries(nodeData.staticStyle).map(([key, value]) => `${key}:${value}`).join(\";\");\n }\n if (node.children) {\n const childrenAttr = Vue2 ? \"text\" : \"children\";\n props.children = Array.isArray(node.children) ? node.children[0][childrenAttr] : node[childrenAttr];\n }\n if (Array.isArray(obj[type]))\n obj[type].push(props);\n else if (type === \"title\")\n obj.title = props.children;\n else\n obj[type] = props;\n};\nconst vnodesToHeadObj = (nodes) => {\n const obj = {\n title: void 0,\n htmlAttrs: void 0,\n bodyAttrs: void 0,\n base: void 0,\n meta: [],\n link: [],\n style: [],\n script: [],\n noscript: []\n };\n for (const node of nodes) {\n if (typeof node.type === \"symbol\" && Array.isArray(node.children)) {\n for (const childNode of node.children)\n addVNodeToHeadObj(childNode, obj);\n } else {\n addVNodeToHeadObj(node, obj);\n }\n }\n return obj;\n};\nconst Head = /* @__PURE__ */ defineComponent({\n name: \"Head\",\n setup(_, { slots }) {\n const head = injectHead();\n const obj = ref({});\n const entry = head.push(obj);\n if (IsBrowser) {\n onBeforeUnmount(() => {\n entry.dispose();\n });\n }\n return () => {\n watchEffect(() => {\n if (!slots.default)\n return;\n entry.patch(vnodesToHeadObj(slots.default()));\n });\n return null;\n };\n }\n});\n\nexport { Head, HeadVuePlugin, createHead, renderHeadToString };\n","import { __assign } from \"tslib\";\nimport { Observable } from \"../../utilities/index.js\";\nvar OperationBatcher = (function () {\n function OperationBatcher(_a) {\n var batchDebounce = _a.batchDebounce, batchInterval = _a.batchInterval, batchMax = _a.batchMax, batchHandler = _a.batchHandler, batchKey = _a.batchKey;\n this.batchesByKey = new Map();\n this.batchDebounce = batchDebounce;\n this.batchInterval = batchInterval;\n this.batchMax = batchMax || 0;\n this.batchHandler = batchHandler;\n this.batchKey = batchKey || (function () { return ''; });\n }\n OperationBatcher.prototype.enqueueRequest = function (request) {\n var _this = this;\n var requestCopy = __assign(__assign({}, request), { next: [], error: [], complete: [], subscribers: new Set() });\n var key = this.batchKey(request.operation);\n if (!requestCopy.observable) {\n requestCopy.observable = new Observable(function (observer) {\n var batch = _this.batchesByKey.get(key);\n if (!batch)\n _this.batchesByKey.set(key, batch = new Set());\n var isFirstEnqueuedRequest = batch.size === 0;\n var isFirstSubscriber = requestCopy.subscribers.size === 0;\n requestCopy.subscribers.add(observer);\n if (isFirstSubscriber) {\n batch.add(requestCopy);\n }\n if (observer.next) {\n requestCopy.next.push(observer.next.bind(observer));\n }\n if (observer.error) {\n requestCopy.error.push(observer.error.bind(observer));\n }\n if (observer.complete) {\n requestCopy.complete.push(observer.complete.bind(observer));\n }\n if (isFirstEnqueuedRequest || _this.batchDebounce) {\n _this.scheduleQueueConsumption(key);\n }\n if (batch.size === _this.batchMax) {\n _this.consumeQueue(key);\n }\n return function () {\n var _a;\n if (requestCopy.subscribers.delete(observer) &&\n requestCopy.subscribers.size < 1) {\n if (batch.delete(requestCopy) && batch.size < 1) {\n _this.consumeQueue(key);\n (_a = batch.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n }\n }\n };\n });\n }\n return requestCopy.observable;\n };\n OperationBatcher.prototype.consumeQueue = function (key) {\n if (key === void 0) { key = ''; }\n var batch = this.batchesByKey.get(key);\n this.batchesByKey.delete(key);\n if (!batch || !batch.size) {\n return;\n }\n var operations = [];\n var forwards = [];\n var observables = [];\n var nexts = [];\n var errors = [];\n var completes = [];\n batch.forEach(function (request) {\n operations.push(request.operation);\n forwards.push(request.forward);\n observables.push(request.observable);\n nexts.push(request.next);\n errors.push(request.error);\n completes.push(request.complete);\n });\n var batchedObservable = this.batchHandler(operations, forwards) || Observable.of();\n var onError = function (error) {\n errors.forEach(function (rejecters) {\n if (rejecters) {\n rejecters.forEach(function (e) { return e(error); });\n }\n });\n };\n batch.subscription = batchedObservable.subscribe({\n next: function (results) {\n if (!Array.isArray(results)) {\n results = [results];\n }\n if (nexts.length !== results.length) {\n var error = new Error(\"server returned results with length \".concat(results.length, \", expected length of \").concat(nexts.length));\n error.result = results;\n return onError(error);\n }\n results.forEach(function (result, index) {\n if (nexts[index]) {\n nexts[index].forEach(function (next) { return next(result); });\n }\n });\n },\n error: onError,\n complete: function () {\n completes.forEach(function (complete) {\n if (complete) {\n complete.forEach(function (c) { return c(); });\n }\n });\n },\n });\n return observables;\n };\n OperationBatcher.prototype.scheduleQueueConsumption = function (key) {\n var _this = this;\n clearTimeout(this.scheduledBatchTimer);\n this.scheduledBatchTimer = setTimeout(function () {\n _this.consumeQueue(key);\n }, this.batchInterval);\n };\n return OperationBatcher;\n}());\nexport { OperationBatcher };\n//# sourceMappingURL=batching.js.map","import { __extends } from \"tslib\";\nimport { ApolloLink } from \"../core/index.js\";\nimport { OperationBatcher } from \"./batching.js\";\nexport { OperationBatcher } from \"./batching.js\";\nvar BatchLink = (function (_super) {\n __extends(BatchLink, _super);\n function BatchLink(fetchParams) {\n var _this = _super.call(this) || this;\n var _a = fetchParams || {}, batchDebounce = _a.batchDebounce, _b = _a.batchInterval, batchInterval = _b === void 0 ? 10 : _b, _c = _a.batchMax, batchMax = _c === void 0 ? 0 : _c, _d = _a.batchHandler, batchHandler = _d === void 0 ? function () { return null; } : _d, _e = _a.batchKey, batchKey = _e === void 0 ? function () { return ''; } : _e;\n _this.batcher = new OperationBatcher({\n batchDebounce: batchDebounce,\n batchInterval: batchInterval,\n batchMax: batchMax,\n batchHandler: batchHandler,\n batchKey: batchKey,\n });\n if (fetchParams.batchHandler.length <= 1) {\n _this.request = function (operation) { return _this.batcher.enqueueRequest({ operation: operation }); };\n }\n return _this;\n }\n BatchLink.prototype.request = function (operation, forward) {\n return this.batcher.enqueueRequest({\n operation: operation,\n forward: forward,\n });\n };\n return BatchLink;\n}(ApolloLink));\nexport { BatchLink };\n//# sourceMappingURL=batchLink.js.map","import { __assign, __extends, __rest } from \"tslib\";\nimport { ApolloLink } from \"../core/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nimport { fromError } from \"../utils/index.js\";\nimport { serializeFetchParameter, selectURI, parseAndCheckHttpResponse, checkFetcher, selectHttpOptionsAndBodyInternal, defaultPrinter, fallbackHttpConfig, createSignalIfSupported, } from \"../http/index.js\";\nimport { BatchLink } from \"../batch/index.js\";\nvar BatchHttpLink = (function (_super) {\n __extends(BatchHttpLink, _super);\n function BatchHttpLink(fetchParams) {\n var _this = _super.call(this) || this;\n var _a = fetchParams || {}, _b = _a.uri, uri = _b === void 0 ? '/graphql' : _b, fetcher = _a.fetch, _c = _a.print, print = _c === void 0 ? defaultPrinter : _c, includeExtensions = _a.includeExtensions, preserveHeaderCase = _a.preserveHeaderCase, batchInterval = _a.batchInterval, batchDebounce = _a.batchDebounce, batchMax = _a.batchMax, batchKey = _a.batchKey, requestOptions = __rest(_a, [\"uri\", \"fetch\", \"print\", \"includeExtensions\", \"preserveHeaderCase\", \"batchInterval\", \"batchDebounce\", \"batchMax\", \"batchKey\"]);\n checkFetcher(fetcher);\n if (!fetcher) {\n fetcher = fetch;\n }\n var linkConfig = {\n http: { includeExtensions: includeExtensions, preserveHeaderCase: preserveHeaderCase },\n options: requestOptions.fetchOptions,\n credentials: requestOptions.credentials,\n headers: requestOptions.headers,\n };\n _this.batchDebounce = batchDebounce;\n _this.batchInterval = batchInterval || 10;\n _this.batchMax = batchMax || 10;\n var batchHandler = function (operations) {\n var chosenURI = selectURI(operations[0], uri);\n var context = operations[0].getContext();\n var clientAwarenessHeaders = {};\n if (context.clientAwareness) {\n var _a = context.clientAwareness, name_1 = _a.name, version = _a.version;\n if (name_1) {\n clientAwarenessHeaders['apollographql-client-name'] = name_1;\n }\n if (version) {\n clientAwarenessHeaders['apollographql-client-version'] = version;\n }\n }\n var contextConfig = {\n http: context.http,\n options: context.fetchOptions,\n credentials: context.credentials,\n headers: __assign(__assign({}, clientAwarenessHeaders), context.headers),\n };\n var optsAndBody = operations.map(function (operation) {\n return selectHttpOptionsAndBodyInternal(operation, print, fallbackHttpConfig, linkConfig, contextConfig);\n });\n var loadedBody = optsAndBody.map(function (_a) {\n var body = _a.body;\n return body;\n });\n var options = optsAndBody[0].options;\n if (options.method === 'GET') {\n return fromError(new Error('apollo-link-batch-http does not support GET requests'));\n }\n try {\n options.body = serializeFetchParameter(loadedBody, 'Payload');\n }\n catch (parseError) {\n return fromError(parseError);\n }\n var controller;\n if (!options.signal) {\n var _b = createSignalIfSupported(), _controller = _b.controller, signal = _b.signal;\n controller = _controller;\n if (controller)\n options.signal = signal;\n }\n return new Observable(function (observer) {\n fetcher(chosenURI, options)\n .then(function (response) {\n operations.forEach(function (operation) { return operation.setContext({ response: response }); });\n return response;\n })\n .then(parseAndCheckHttpResponse(operations))\n .then(function (result) {\n observer.next(result);\n observer.complete();\n return result;\n })\n .catch(function (err) {\n if (err.name === 'AbortError')\n return;\n if (err.result && err.result.errors && err.result.data) {\n observer.next(err.result);\n }\n observer.error(err);\n });\n return function () {\n if (controller)\n controller.abort();\n };\n });\n };\n batchKey =\n batchKey ||\n (function (operation) {\n var context = operation.getContext();\n var contextConfig = {\n http: context.http,\n options: context.fetchOptions,\n credentials: context.credentials,\n headers: context.headers,\n };\n return selectURI(operation, uri) + JSON.stringify(contextConfig);\n });\n _this.batcher = new BatchLink({\n batchDebounce: _this.batchDebounce,\n batchInterval: _this.batchInterval,\n batchMax: _this.batchMax,\n batchKey: batchKey,\n batchHandler: batchHandler,\n });\n return _this;\n }\n BatchHttpLink.prototype.request = function (operation) {\n return this.batcher.request(operation);\n };\n return BatchHttpLink;\n}(ApolloLink));\nexport { BatchHttpLink };\n//# sourceMappingURL=batchHttpLink.js.map","import { useStore } from \"@/store/main\";\nimport { ApolloClient, ApolloLink, InMemoryCache } from \"@apollo/client/core\";\nimport { BatchHttpLink } from \"@apollo/client/link/batch-http\";\n\n// HTTP connection to the API\nconst httpLink = new BatchHttpLink({\n\t// You should use an absolute URL here\n\turi: `${import.meta.env.VITE_APP_API_GQL}`,\n\tcredentials: \"include\",\n\tbatchMax: 20,\n\tbatchInterval: 20,\n});\n\nlet cycleDetected = false;\n\nconst authLink = new ApolloLink((operation, forward) => {\n\tconst store = useStore();\n\n\t// Use the setContext method to set the HTTP headers.\n\toperation.setContext({\n\t\theaders: store.authToken\n\t\t\t? {\n\t\t\t\t\tauthorization: `Bearer ${store.authToken}`,\n\t\t\t\t\t// Allows to ignore auth failures and still get a response\n\t\t\t\t\t\"x-ignore-auth-failure\": \"true\",\n\t\t\t }\n\t\t\t: {},\n\t});\n\n\t// Call the next link in the middleware chain.\n\treturn forward(operation).map((response) => {\n\t\tconst { response: resp } = operation.getContext();\n\n\t\tif (resp?.headers) {\n\t\t\tconst authFailure = resp.headers.get(\"x-auth-failure\") === \"true\";\n\t\t\tif (authFailure) {\n\t\t\t\tif (!cycleDetected) {\n\t\t\t\t\tstore.setAuthToken(null);\n\t\t\t\t\tcycleDetected = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcycleDetected = false;\n\t\t\t}\n\t\t}\n\n\t\treturn response;\n\t});\n});\n\nconst link = ApolloLink.from([authLink, httpLink]);\n\n// Cache implementation\nconst cache = new InMemoryCache({\n\ttypePolicies: {\n\t\tUser: {\n\t\t\tfields: {\n\t\t\t\troles: {\n\t\t\t\t\tmerge(_, b) {\n\t\t\t\t\t\treturn b;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tEmoteSet: {\n\t\t\tfields: {\n\t\t\t\temotes: {\n\t\t\t\t\tmerge(_, b) {\n\t\t\t\t\t\treturn b;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tChangeMap: {\n\t\t\tfields: {\n\t\t\t\tpulled: {\n\t\t\t\t\tmerge(_, b) {\n\t\t\t\t\t\treturn b;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tpushed: {\n\t\t\t\t\tmerge(_, b) {\n\t\t\t\t\t\treturn b;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n});\n\n// Create the apollo client\nexport const apolloClient = new ApolloClient({\n\tlink: link,\n\tcache,\n\tdefaultOptions: {\n\t\twatchQuery: {\n\t\t\tfetchPolicy: \"no-cache\",\n\t\t},\n\t\tquery: {\n\t\t\tfetchPolicy: \"no-cache\",\n\t\t},\n\t},\n});\n","function getAlignment(placement) {\n return placement.split('-')[1];\n}\n\nfunction getLengthFromAxis(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\n\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\n\nfunction getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].includes(getSide(placement)) ? 'x' : 'y';\n}\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const mainAxis = getMainAxisFromPlacement(placement);\n const length = getLengthFromAxis(mainAxis);\n const commonAlign = reference[length] / 2 - floating[length] / 2;\n const side = getSide(placement);\n const isVertical = mainAxis === 'x';\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[mainAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[mainAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain positioning strategy.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n if (process.env.NODE_ENV !== \"production\") {\n if (platform == null) {\n console.error(['Floating UI: `platform` property was not passed to config. If you', 'want to use Floating UI on the web, install @floating-ui/dom', 'instead of the /core package. Otherwise, you can create your own', '`platform`: https://floating-ui.com/docs/platform'].join(' '));\n }\n if (validMiddleware.filter(_ref => {\n let {\n name\n } = _ref;\n return name === 'autoPlacement' || name === 'flip';\n }).length > 1) {\n throw new Error(['Floating UI: duplicate `flip` and/or `autoPlacement` middleware', 'detected. This will lead to an infinite loop. Ensure only one of', 'either has been passed to the `middleware` array.'].join(' '));\n }\n if (!reference || !floating) {\n console.error(['Floating UI: The reference and/or floating element was not defined', 'when `computePosition()` was called. Ensure that both elements have', 'been created and can be measured.'].join(' '));\n }\n }\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (process.env.NODE_ENV !== \"production\") {\n if (resetCount > 50) {\n console.warn(['Floating UI: The middleware lifecycle appears to be running in an', 'infinite loop. This is usually caused by a `reset` continually', 'being returned without a break condition.'].join(' '));\n }\n }\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n continue;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\n\nfunction getSideObjectFromPadding(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\n\nfunction rectToClientRect(rect) {\n return {\n ...rect,\n top: rect.y,\n left: rect.x,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(middlewareArguments, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = middlewareArguments;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = options;\n const paddingObject = getSideObjectFromPadding(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n ...rects.floating,\n x,\n y\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n rect,\n offsetParent,\n strategy\n }) : rect);\n if (process.env.NODE_ENV !== \"production\") ;\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\nconst min = Math.min;\nconst max = Math.max;\n\nfunction within(min$1, value, max$1) {\n return max(min$1, min(value, max$1));\n}\n\n/**\n * Positions an inner element of the floating element such that it is centered\n * to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(middlewareArguments) {\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = options || {};\n const {\n x,\n y,\n placement,\n rects,\n platform\n } = middlewareArguments;\n if (element == null) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn('Floating UI: No `element` was passed to the `arrow` middleware.');\n }\n return {};\n }\n const paddingObject = getSideObjectFromPadding(padding);\n const coords = {\n x,\n y\n };\n const axis = getMainAxisFromPlacement(placement);\n const length = getLengthFromAxis(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const minProp = axis === 'y' ? 'top' : 'left';\n const maxProp = axis === 'y' ? 'bottom' : 'right';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n if (clientSize === 0) {\n clientSize = rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min = paddingObject[minProp];\n const max = clientSize - arrowDimensions[length] - paddingObject[maxProp];\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = within(min, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. This stops `shift()` from taking action, but can\n // be worked around by calling it again after the `arrow()` if desired.\n const shouldAddOffset = getAlignment(placement) != null && center != offset && rects.reference[length] / 2 - (center < min ? paddingObject[minProp] : paddingObject[maxProp]) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min ? min - center : max - center : 0;\n return {\n [axis]: coords[axis] - alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset\n }\n };\n }\n});\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst allPlacements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-start\", side + \"-end\"), []);\n\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\n\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const mainAxis = getMainAxisFromPlacement(placement);\n const length = getLengthFromAxis(mainAxis);\n let mainAlignmentSide = mainAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return {\n main: mainAlignmentSide,\n cross: getOppositePlacement(mainAlignmentSide)\n };\n}\n\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Automatically chooses the `placement` which has the most space available.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(middlewareArguments) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsSortedByLe;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = middlewareArguments;\n const {\n alignment,\n allowedPlacements = allPlacements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = options;\n const placements = alignment !== undefined || allowedPlacements === allPlacements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const {\n main,\n cross\n } = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[main], overflow[cross]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByLeastOverflow = allOverflows.slice().sort((a, b) => a.overflows[0] - b.overflows[0]);\n const placementThatFitsOnAllSides = (_placementsSortedByLe = placementsSortedByLeastOverflow.find(_ref => {\n let {\n overflows\n } = _ref;\n return overflows.every(overflow => overflow <= 0);\n })) == null ? void 0 : _placementsSortedByLe.placement;\n const resetPlacement = placementThatFitsOnAllSides || placementsSortedByLeastOverflow[0].placement;\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\n\nfunction getSideList(side, isStart, rtl) {\n const lr = ['left', 'right'];\n const rl = ['right', 'left'];\n const tb = ['top', 'bottom'];\n const bt = ['bottom', 'top'];\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rl : lr;\n return isStart ? lr : rl;\n case 'left':\n case 'right':\n return isStart ? tb : bt;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\n\n/**\n * Changes the placement of the floating element to one that will fit if the\n * initially specified `placement` does not.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(middlewareArguments) {\n var _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = middlewareArguments;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = options;\n const side = getSide(placement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== 'none') {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const {\n main,\n cross\n } = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[main], overflow[cross]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n let resetPlacement = 'bottom';\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$map$so;\n const placement = (_overflowsData$map$so = overflowsData.map(d => [d, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0].placement;\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(middlewareArguments) {\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = options;\n const {\n rects\n } = middlewareArguments;\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await detectOverflow(middlewareArguments, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await detectOverflow(middlewareArguments, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(middlewareArguments) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = middlewareArguments;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = options;\n const fallback = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n rect: rects.reference,\n offsetParent: await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating)),\n strategy\n }) : rects.reference);\n const clientRects = (await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || [];\n const paddingObject = getSideObjectFromPadding(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getMainAxisFromPlacement(placement) === 'x') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nasync function convertValueToCoords(middlewareArguments, value) {\n const {\n placement,\n platform,\n elements\n } = middlewareArguments;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getMainAxisFromPlacement(placement) === 'x';\n const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = typeof value === 'function' ? value(middlewareArguments) : value;\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: 0,\n crossAxis: 0,\n alignmentAxis: null,\n ...rawValue\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Displaces the floating element from its reference element.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (value) {\n if (value === void 0) {\n value = 0;\n }\n return {\n name: 'offset',\n options: value,\n async fn(middlewareArguments) {\n const {\n x,\n y\n } = middlewareArguments;\n const diffCoords = await convertValueToCoords(middlewareArguments, value);\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: diffCoords\n };\n }\n };\n};\n\nfunction getCrossAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\n\n/**\n * Shifts the floating element in order to keep it in view when it will overflow\n * a clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(middlewareArguments) {\n const {\n x,\n y,\n placement\n } = middlewareArguments;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = options;\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n const mainAxis = getMainAxisFromPlacement(getSide(placement));\n const crossAxis = getCrossAxis(mainAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = within(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = within(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...middlewareArguments,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(middlewareArguments) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = middlewareArguments;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = options;\n const coords = {\n x,\n y\n };\n const mainAxis = getMainAxisFromPlacement(placement);\n const crossAxis = getCrossAxis(mainAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = typeof offset === 'function' ? offset(middlewareArguments) : offset;\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = ['top', 'left'].includes(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data to change the size of the floating element. For instance,\n * prevent it from overflowing its clipping boundary or match the width of the\n * reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(middlewareArguments) {\n const {\n placement,\n rects,\n platform,\n elements\n } = middlewareArguments;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = options;\n const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n const dimensions = {\n availableHeight: rects.floating.height - (['left', 'right'].includes(placement) ? 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom)) : overflow[heightSide]),\n availableWidth: rects.floating.width - (['top', 'bottom'].includes(placement) ? 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right)) : overflow[widthSide])\n };\n await apply({\n ...middlewareArguments,\n ...dimensions\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (rects.floating.width !== nextDimensions.width || rects.floating.height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, rectToClientRect, shift, size };\n","import { rectToClientRect, computePosition as computePosition$1 } from '@floating-ui/core';\nexport { arrow, autoPlacement, detectOverflow, flip, hide, inline, limitShift, offset, shift, size } from '@floating-ui/core';\n\nfunction getWindow(node) {\n var _node$ownerDocument;\n return ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\n\nfunction getComputedStyle$1(element) {\n return getWindow(element).getComputedStyle(element);\n}\n\nfunction getNodeName(node) {\n return isNode(node) ? (node.nodeName || '').toLowerCase() : '';\n}\n\nlet uaString;\nfunction getUAString() {\n if (uaString) {\n return uaString;\n }\n const uaData = navigator.userAgentData;\n if (uaData && Array.isArray(uaData.brands)) {\n uaString = uaData.brands.map(item => item.brand + \"/\" + item.version).join(' ');\n return uaString;\n }\n return navigator.userAgent;\n}\n\nfunction isHTMLElement(value) {\n return value instanceof getWindow(value).HTMLElement;\n}\nfunction isElement(value) {\n return value instanceof getWindow(value).Element;\n}\nfunction isNode(value) {\n return value instanceof getWindow(value).Node;\n}\nfunction isShadowRoot(node) {\n // Browsers without `ShadowRoot` support\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n const OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle$1(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n // TODO: Try and use feature detection here instead\n const isFirefox = /firefox/i.test(getUAString());\n const css = getComputedStyle$1(element);\n const backdropFilter = css.backdropFilter || css.WebkitBackdropFilter;\n\n // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n return css.transform !== 'none' || css.perspective !== 'none' || (backdropFilter ? backdropFilter !== 'none' : false) || isFirefox && css.willChange === 'filter' || isFirefox && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective'].some(value => css.willChange.includes(value)) || ['paint', 'layout', 'strict', 'content'].some(\n // TS 4.1 compat\n value => {\n const contain = css.contain;\n return contain != null ? contain.includes(value) : false;\n });\n}\nfunction isLayoutViewport() {\n // Not Safari\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n // Feature detection for this fails in various ways\n // • Always-visible scrollbar or not\n // • Width of , etc.\n // const vV = win.visualViewport;\n // return vV ? Math.abs(win.innerWidth / vV.scale - vV.width) < 0.5 : true;\n}\n\nfunction isLastTraversableNode(node) {\n return ['html', 'body', '#document'].includes(getNodeName(node));\n}\n\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n let width = parseFloat(css.width);\n let height = parseFloat(css.height);\n const offsetWidth = element.offsetWidth;\n const offsetHeight = element.offsetHeight;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n fallback: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nconst FALLBACK_SCALE = {\n x: 1,\n y: 1\n};\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return FALLBACK_SCALE;\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n fallback\n } = getCssDimensions(domElement);\n let x = (fallback ? round(rect.width) : rect.width) / width;\n let y = (fallback ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n var _win$visualViewport, _win$visualViewport2;\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = FALLBACK_SCALE;\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const win = domElement ? getWindow(domElement) : window;\n const addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n let x = (clientRect.left + (addVisualOffsets ? ((_win$visualViewport = win.visualViewport) == null ? void 0 : _win$visualViewport.offsetLeft) || 0 : 0)) / scale.x;\n let y = (clientRect.top + (addVisualOffsets ? ((_win$visualViewport2 = win.visualViewport) == null ? void 0 : _win$visualViewport2.offsetTop) || 0 : 0)) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentIFrame = win.frameElement;\n while (currentIFrame && offsetParent && offsetWin !== win) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle(currentIFrame);\n iframeRect.x += (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n iframeRect.y += (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += iframeRect.x;\n y += iframeRect.y;\n currentIFrame = getWindow(currentIFrame).frameElement;\n }\n }\n return {\n width,\n height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x,\n y\n };\n}\n\nfunction getDocumentElement(node) {\n return ((isNode(node) ? node.ownerDocument : node.document) || window.document).documentElement;\n}\n\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.pageXOffset,\n scrollTop: element.pageYOffset\n };\n}\n\nfunction getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const rect = getBoundingClientRect(element, true, strategy === 'fixed', offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = {\n x: 0,\n y: 0\n };\n if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent, true);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node\n node.assignedSlot ||\n // DOM Element detected\n node.parentNode || (\n // ShadowRoot detected\n isShadowRoot(node) ? node.host : null) ||\n // Fallback\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n return element.offsetParent;\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else {\n currentNode = getParentNode(currentNode);\n }\n }\n return null;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element) {\n const window = getWindow(element);\n let offsetParent = getTrueOffsetParent(element);\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {\n return window;\n }\n return offsetParent || getContainingBlock(element) || window;\n}\n\nfunction getDimensions(element) {\n return getCssDimensions(element);\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n if (offsetParent === documentElement) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = {\n x: 1,\n y: 1\n };\n const offsets = {\n x: 0,\n y: 0\n };\n if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n // This doesn't appear to need to be negated.\n // else if (documentElement) {\n // offsets.x = getWindowScrollBarX(documentElement);\n // }\n }\n\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n };\n}\n\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const layoutViewport = isLayoutViewport();\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\nfunction getDocumentRect(element) {\n var _element$ownerDocumen;\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n const width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n const height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n // @ts-ignore assume body is always available\n return node.ownerDocument.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\n\nfunction getOverflowAncestors(node, list) {\n var _node$ownerDocument;\n if (list === void 0) {\n list = [];\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor));\n}\n\n// Returns the inner client rect, subtracting scrollbars if present\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : {\n x: 1,\n y: 1\n };\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y,\n width,\n height\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n if (clippingAncestor === 'viewport') {\n return rectToClientRect(getViewportRect(element, strategy));\n }\n if (isElement(clippingAncestor)) {\n return getInnerBoundingClientRect(clippingAncestor, strategy);\n }\n return rectToClientRect(getDocumentRect(getDocumentElement(element)));\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const containingBlock = isContainingBlock(currentNode);\n const shouldDropCurrentNode = elementIsFixed ? !containingBlock && !currentContainingBlockComputedStyle : !containingBlock && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nconst platform = {\n getClippingRect,\n convertOffsetParentRelativeRectToViewportRelativeRect,\n isElement,\n getDimensions,\n getOffsetParent,\n getDocumentElement,\n getScale,\n async getElementRects(_ref) {\n let {\n reference,\n floating,\n strategy\n } = _ref;\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n return {\n reference: getRectRelativeToOffsetParent(reference, await getOffsetParentFn(floating), strategy),\n floating: {\n x: 0,\n y: 0,\n ...(await getDimensionsFn(floating))\n }\n };\n },\n getClientRects: element => Array.from(element.getClientRects()),\n isRTL: element => getComputedStyle$1(element).direction === 'rtl'\n};\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll: _ancestorScroll = true,\n ancestorResize = true,\n elementResize = true,\n animationFrame = false\n } = options;\n const ancestorScroll = _ancestorScroll && !animationFrame;\n const ancestors = ancestorScroll || ancestorResize ? [...(isElement(reference) ? getOverflowAncestors(reference) : reference.contextElement ? getOverflowAncestors(reference.contextElement) : []), ...getOverflowAncestors(floating)] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n let observer = null;\n if (elementResize) {\n let initialUpdate = true;\n observer = new ResizeObserver(() => {\n if (!initialUpdate) {\n update();\n }\n initialUpdate = false;\n });\n isElement(reference) && !animationFrame && observer.observe(reference);\n if (!isElement(reference) && reference.contextElement && !animationFrame) {\n observer.observe(reference.contextElement);\n }\n observer.observe(floating);\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _observer;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n (_observer = observer) == null ? void 0 : _observer.disconnect();\n observer = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain CSS positioning\n * strategy.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { autoUpdate, computePosition, getOverflowAncestors, platform };\n","import { Component, markRaw, nextTick, reactive } from \"vue\";\nimport { Placement, computePosition, shift } from \"@floating-ui/dom\";\n\nexport const tooltip = reactive({\n\tx: 0,\n\ty: 0,\n\tcontent: null as Component | string | null,\n\tcontentProps: {} as Record,\n\tcontainer: null as HTMLElement | null,\n});\n\n/**\n * useTooltip() is a composable function to display tooltips efficiently\n *\n * @param content text, or a component, to display as the tooltip content\n * @param props if content is a component, these are the props to pass to it\n * @returns\n */\nexport function useTooltip(content?: string | Component, props?: Record) {\n\t// this shows the tooltip\n\tfunction show(el: HTMLElement | undefined, position?: Placement): void {\n\t\tif (!el) return;\n\n\t\t// Set the content, this is necessary to calculate the tooltip's positioning\n\t\tif (content) {\n\t\t\ttooltip.content = typeof content === \"string\" ? content : markRaw(content);\n\t\t\ttooltip.contentProps = props ?? {};\n\t\t}\n\n\t\t// on the next tick we will update the position of the tooltip container\n\t\tnextTick(() => {\n\t\t\tcomputePosition(el, tooltip.container as HTMLElement, {\n\t\t\t\tplacement: position ?? \"top\",\n\t\t\t\tmiddleware: [shift({ padding: 48, mainAxis: true, crossAxis: true })],\n\t\t\t}).then(({ x: xVal, y: yVal }) => {\n\t\t\t\ttooltip.x = xVal;\n\t\t\t\ttooltip.y = yVal;\n\t\t\t});\n\t\t});\n\t}\n\n\t// this hides the tooltip\n\tfunction hide(): void {\n\t\ttooltip.content = null;\n\t\ttooltip.contentProps = {};\n\t}\n\n\treturn { show, hide };\n}\n","import type { Directive, DirectiveBinding } from \"vue\";\nimport { useTooltip } from \"@/composables/useTooltip\";\nimport type { Placement } from \"@floating-ui/dom\";\n\nexport const TooltipDirective = {\n\tmounted(el: HTMLElement, binding: DirectiveBinding) {\n\t\thandleTooltip(el, binding);\n\t},\n\tupdated(el: HTMLElement, binding: DirectiveBinding) {\n\t\thandleTooltip(el, binding);\n\t},\n\tbeforeUnmount() {\n\t\tuseTooltip().hide();\n\t},\n} as Directive;\n\nfunction handleTooltip(el: HTMLElement, binding: DirectiveBinding) {\n\tconst tooltipText = binding.value || \"\";\n\n\tswitch (binding.arg) {\n\t\tcase \"position\":\n\t\t\tel.setAttribute(\"data-tooltip-position\", binding.value);\n\t\t\tbreak;\n\t\tdefault: {\n\t\t\tconst { show, hide } = useTooltip(tooltipText);\n\n\t\t\tel.addEventListener(\"mouseenter\", () => show(el, el.getAttribute(\"data-tooltip-position\") as Placement));\n\t\t\tel.addEventListener(\"mouseleave\", hide);\n\t\t\tbreak;\n\t\t}\n\t}\n}\n","export default \"__VITE_ASSET__a98f3715__\"","import gql from \"graphql-tag\";\nimport { UserPartialFragment } from \"@/apollo/query/user.query\";\nimport { Paint } from \"@/structures/Cosmetic\";\nimport { EmoteSet } from \"@/structures/EmoteSet\";\nimport { Role } from \"@/structures/Role\";\nimport { User } from \"@/structures/User\";\n\nexport const GetCurrentUser = gql`\n\tquery GetCurrentUser {\n\t\tuser: actor {\n\t\t\tid\n\t\t\tusername\n\t\t\tdisplay_name\n\t\t\tcreated_at\n\t\t\tavatar_url\n\t\t\tstyle {\n\t\t\t\tcolor\n\t\t\t\tpaint_id\n\t\t\t}\n\t\t\tbiography\n\t\t\tinbox_unread_count\n\t\t\teditor_of {\n\t\t\t\tid\n\t\t\t\tpermissions\n\t\t\t\tuser {\n\t\t\t\t\temote_sets {\n\t\t\t\t\t\tid\n\t\t\t\t\t}\n\t\t\t\t\tconnections {\n\t\t\t\t\t\tid\n\t\t\t\t\t\tdisplay_name\n\t\t\t\t\t\tplatform\n\t\t\t\t\t\temote_capacity\n\t\t\t\t\t\temote_set_id\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\troles\n\t\t\temote_sets {\n\t\t\t\tid\n\t\t\t\tname\n\t\t\t\tcapacity\n\t\t\t\temotes {\n\t\t\t\t\tid\n\t\t\t\t\tname\n\t\t\t\t\tdata {\n\t\t\t\t\t\tname\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\towner {\n\t\t\t\t\tid\n\t\t\t\t\tdisplay_name\n\t\t\t\t\tstyle {\n\t\t\t\t\t\tcolor\n\t\t\t\t\t}\n\t\t\t\t\tavatar_url\n\t\t\t\t}\n\t\t\t}\n\t\t\tconnections {\n\t\t\t\tid\n\t\t\t\tdisplay_name\n\t\t\t\tplatform\n\t\t\t\tlinked_at\n\t\t\t\temote_capacity\n\t\t\t\temote_set_id\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport const GetUserCosmetics = gql`\n\tquery GetUserCosmetics($id: ObjectID!) {\n\t\tuser(id: $id) {\n\t\t\tid\n\t\t\tcosmetics {\n\t\t\t\tid\n\t\t\t\tkind\n\t\t\t\tselected\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport const WatchCurrentUser = gql`\n\tsubscription WatchCurrentUser {\n\t\tuser: currentUser {\n\t\t\t...USER_PARTIAL_FRAGMENT\n\t\t}\n\t}\n\t${UserPartialFragment}\n`;\n\nexport const GetAppState = gql`\n\tquery AppState {\n\t\tglobalEmoteSet: namedEmoteSet(name: GLOBAL) {\n\t\t\tid\n\t\t\tname\n\t\t\temotes {\n\t\t\t\tid\n\t\t\t\tname\n\t\t\t\tflags\n\t\t\t}\n\t\t\tcapacity\n\t\t}\n\t\troles: roles {\n\t\t\tid\n\t\t\tname\n\t\t\tallowed\n\t\t\tdenied\n\t\t\tposition\n\t\t\tcolor\n\t\t\tinvisible\n\t\t}\n\t}\n`;\n\nexport interface AppState {\n\tclientUser: User;\n\troles: Role[];\n\tglobalEmoteSet: EmoteSet;\n\tcosmetics: {\n\t\tpaints: Paint[];\n\t};\n}\n","import { reactive, shallowRef, watch } from \"vue\";\nimport type { Component } from \"vue\";\nimport { ExtractPropTypes } from \"vue\";\n\ntype cmp = Component | null;\nconst options = reactive({\n\tshown: false,\n\tinteract: \"\",\n\tcomponent: null as cmp,\n\tprops: {} as cmp extends null ? null : ExtractPropTypes,\n\tx: 0,\n\ty: 0,\n});\n\nexport function useContextMenu() {\n\tfunction open(ev: MouseEvent, component: T, props: ExtractPropTypes): Promise {\n\t\toptions.x = ev.clientX;\n\t\toptions.y = ev.clientY;\n\t\toptions.shown = true;\n\t\toptions.component = shallowRef(component);\n\t\toptions.props = props;\n\n\t\tev.preventDefault();\n\t\tev.stopPropagation();\n\n\t\treturn new Promise((resolve) => {\n\t\t\tconst stop = watch(options, (v) => {\n\t\t\t\tif (v.interact !== \"\") {\n\t\t\t\t\tresolve(v.interact);\n\t\t\t\t}\n\n\t\t\t\tv.interact = \"\";\n\t\t\t\tstop();\n\t\t\t});\n\t\t});\n\t}\n\n\tfunction setInteraction(v: string): void {\n\t\toptions.interact = v;\n\t}\n\n\treturn { options, open, setInteraction };\n}\n","export function getRandomInt(min: number, max: number) {\n\tmin = Math.ceil(min);\n\tmax = Math.floor(max);\n\treturn Math.floor(Math.random() * (max - min + 1)) + min;\n}\n","export class Logger {\n\tprivate static instance: Logger;\n\n\tpipe: ((type: LogType, text: string[], extraCSS: string[], objects?: object[]) => void) | null = null;\n\n\tstatic Get(): Logger {\n\t\treturn this.instance ?? (Logger.instance = new Logger());\n\t}\n\n\tprivate ctx = \"context unset\";\n\n\tprivate getPrefix() {\n\t\treturn {\n\t\t\ttext: \"%c[7TV]\",\n\t\t\tcss: \"color:#ef9234;\",\n\t\t};\n\t}\n\n\tprivate print(type: LogType, text: string[], extraCSS: string[], objects?: object[]): void {\n\t\tif (this.pipe) {\n\t\t\tthis.pipe(type, text, extraCSS, objects);\n\t\t\treturn;\n\t\t}\n\n\t\tconst prefix = this.getPrefix();\n\t\t// eslint-disable-next-line no-console\n\t\tconsole[type](\n\t\t\tprefix.text + \" \" + text.join(\" \") + ` (${this.ctx})`,\n\t\t\tprefix.css,\n\t\t\t...extraCSS,\n\t\t\t...(objects ?? []),\n\t\t);\n\t}\n\n\tsetContextName(name: string): void {\n\t\tthis.ctx = name;\n\t}\n\n\tdebug(...text: string[]): void {\n\t\treturn this.print(\"debug\", [\"%c[DEBUG]%c\", ...text], [\"color:#32c8e6;\", \"color:grey\"]);\n\t}\n\n\tdebugWithObjects(text: string[], objects: object[]): void {\n\t\treturn this.print(\"debug\", [\"%c[DEBUG]%c\", ...text], [\"color:#32c8e6;\", \"color:grey\"], objects);\n\t}\n\n\tinfo(...text: string[]): void {\n\t\treturn this.print(\"info\", [\"%c[INFO]%c\", ...text], [\"color:#3cf051;\", \"color:reset;\"]);\n\t}\n\n\twarn(...text: string[]): void {\n\t\treturn this.print(\"warn\", [\"%c[WARN]%c\", ...text], [\"color:#fac837;\", \"color:reset;\"]);\n\t}\n\n\terror(...text: string[]): void {\n\t\treturn this.print(\"error\", [\"%c[ERROR]%c\", ...text], [\"color:#e63232;\", \"color:reset;\"]);\n\t}\n}\n\nexport const log = new Logger();\n\nexport type LogType = \"error\" | \"warn\" | \"debug\" | \"info\";\n","import { ObjectKind } from \"@/structures/Common\";\nimport { Emote } from \"@/structures/Emote\";\nimport { EmoteSet } from \"@/structures/EmoteSet\";\nimport { User } from \"@/structures/User\";\nimport { EventAPI } from \"./worker.events\";\n\nexport interface EventAPIMessage {\n\top: O;\n\tdata: EventAPIMessageData;\n}\nexport interface EventContext {\n\teventAPI: EventAPI;\n}\n\nexport enum EventAPIOpCode {\n\tDISPATCH = 0,\n\tHELLO = 1,\n\tHEARTBEAT = 2,\n\tRECONNECT = 4,\n\tACK = 5,\n\tERROR = 6,\n\tENDOFSTREAM = 7,\n\tIDENTIFY = 33,\n\tRESUME = 34,\n\tSUBSCRIBE = 35,\n\tUNSUBSCRIBE = 36,\n\n\tUNKNOWN = 1001,\n}\n\nexport type EventAPIMessageData = {\n\tDISPATCH: {\n\t\ttype: string;\n\t\tmatches: number[];\n\t\tbody: ChangeMap;\n\t};\n\tHELLO: {\n\t\tsession_id: string;\n\t\theartbeat_interval: number;\n\t};\n\tHEARTBEAT: {\n\t\tcount: number;\n\t};\n\tRECONNECT: void;\n\tACK: {\n\t\tid: number;\n\t\tcommand: string;\n\t\tdata: unknown;\n\t};\n\tERROR: {\n\t\tcode: number;\n\t\tmessage: string;\n\t};\n\tENDOFSTREAM: void;\n\tIDENTIFY: void;\n\tRESUME: void;\n\tSUBSCRIBE: {\n\t\ttype: string;\n\t\tcondition: Record;\n\t};\n\tUNSUBSCRIBE: {\n\t\ttype: string;\n\t\tcondition?: Record;\n\t};\n\tUNKNOWN: unknown;\n}[O];\n\nexport interface ChangeMap {\n\tid: string;\n\tkind: ObjectKind;\n\tcontextual?: boolean;\n\tactor: User;\n\tadded: ChangeField[];\n\tupdated: ChangeField[];\n\tremoved: ChangeField[];\n\tpushed: ChangeField[];\n\tpulled: ChangeField[];\n\tobject: ObjectTypeOfKind[K];\n}\n\nexport type ObjectType = User | Emote | EmoteSet;\n\nexport type ObjectTypeOfKind = {\n\t[ObjectKind.USER]: User;\n\t[ObjectKind.EMOTE]: Emote;\n\t[ObjectKind.EMOTE_SET]: EmoteSet;\n\t[ObjectKind.ROLE]: unknown;\n\t[ObjectKind.ENTITLEMENT]: unknown;\n\t[ObjectKind.BAN]: unknown;\n\t[ObjectKind.MESSAGE]: unknown;\n\t[ObjectKind.REPORT]: unknown;\n};\n\nexport interface ChangeField {\n\tkey: string;\n\tindex: number | null;\n\tnested?: boolean;\n\ttype: string;\n\told_value?: unknown;\n\tvalue: unknown;\n}\n\nexport interface SubscriptionData {\n\tid?: number;\n\ttype: string;\n\tcondition: Record;\n}\n","// EventAPI - WebSocket\n// Keeps our data state up to date\nimport { getRandomInt } from \"@/common/Rand\";\nimport { broadcast } from \"./worker\";\nimport { log } from \"@/Logger\";\nimport { EventAPIMessage, EventAPIOpCode, EventContext, SubscriptionData } from \".\";\n\nexport class EventAPI {\n\tprivate transport: EventAPITransport | null = null;\n\tprivate sessionID = \"\";\n\tprivate heartbeatInterval: number | null = null;\n\tprivate backoff = 100;\n\tprivate ctx: EventContext;\n\n\tsubscriptions: Record;\n\n\turl = import.meta.env.VITE_APP_API_EVENTS;\n\tprivate socket: WebSocket | null = null;\n\tprivate eventSource: EventSource | null = null;\n\n\tconstructor() {\n\t\tthis.ctx = {\n\t\t\teventAPI: this,\n\t\t};\n\t\tthis.subscriptions = {};\n\t}\n\n\tconnect(transport: EventAPITransport): void {\n\t\tif (this.eventSource || this.socket || !this.url) return;\n\n\t\tconst url = new URL(this.url);\n\n\t\t// Add query param giving the version of the website / src\n\t\turl.searchParams.append(\"app\", \"7tv-website-old\");\n\t\turl.searchParams.append(\"version\", import.meta.env.VITE_APP_VERSION);\n\n\t\tthis.transport = transport;\n\n\t\tif (this.transport === \"WebSocket\") {\n\t\t\tthis.socket = new WebSocket(url);\n\t\t\tthis.socket.onopen = () => this.onOpen();\n\t\t\tthis.socket.onclose = () => this.onClose();\n\t\t\tthis.socket.onmessage = (ev) => {\n\t\t\t\tconst { op, d } = JSON.parse(ev.data);\n\n\t\t\t\tthis.onMessage({\n\t\t\t\t\top: EventAPIOpCode[op].toString() as keyof typeof EventAPIOpCode,\n\t\t\t\t\tdata: d,\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\n\t\tlog.debug(\"\", \"Connecting...\", `url=${url}`);\n\t}\n\n\tgetSocket(): WebSocket | null {\n\t\treturn this.socket;\n\t}\n\n\tprivate onMessage(msg: EventAPIMessage): void {\n\t\tswitch (msg.op) {\n\t\t\tcase \"HELLO\":\n\t\t\t\tthis.onHello(msg as EventAPIMessage<\"HELLO\">);\n\t\t\t\tbreak;\n\t\t\tcase \"DISPATCH\":\n\t\t\t\tthis.onDispatch(msg as EventAPIMessage<\"DISPATCH\">);\n\t\t\t\tbreak;\n\t\t\tcase \"ERROR\":\n\t\t\t\tthis.onError(msg as EventAPIMessage<\"ERROR\">);\n\t\t\t\tbreak;\n\t\t\tcase \"ACK\":\n\t\t\t\tthis.onAck(msg as EventAPIMessage<\"ACK\">);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate onOpen(): void {\n\t\tlog.info(\"\", \"Connected\", `url=${this.url}`);\n\n\t\tfor (const [t, rec] of Object.entries(this.subscriptions)) {\n\t\t\tdelete this.subscriptions[t];\n\n\t\t\tfor (const sub of rec) {\n\t\t\t\tthis.subscribe(t, sub.condition);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate onHello(msg: EventAPIMessage<\"HELLO\">): void {\n\t\tthis.sessionID = msg.data.session_id;\n\t\tthis.heartbeatInterval = msg.data.heartbeat_interval;\n\n\t\tlog.info(\n\t\t\t\"\",\n\t\t\t\"Server says hello,\",\n\t\t\t`sessionID=${this.sessionID} heartbeatInterval=${this.heartbeatInterval}`,\n\t\t);\n\t}\n\n\tprivate onDispatch(msg: EventAPIMessage<\"DISPATCH\">): void {\n\t\tbroadcast(\"EventDispatch\", { type: msg.data.type, body: msg.data.body });\n\n\t\tlog.debugWithObjects([\"\", \"Dispatch received\"], [msg.data]);\n\t}\n\n\tprivate onAck(msg: EventAPIMessage<\"ACK\">): void {\n\t\tswitch (msg.data.command) {\n\t\t\tcase \"SUBSCRIBE\": {\n\t\t\t\tconst { id, type, condition } = msg.data.data as SubscriptionData;\n\n\t\t\t\tconst sub = this.findSubscription(type, condition);\n\t\t\t\tif (sub) {\n\t\t\t\t\tsub.confirmed = true;\n\t\t\t\t\tsub.id = id;\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tif (!this.subscriptions[type]) {\n\t\t\t\t\t\tthis.subscriptions[type] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.subscriptions[type].push({\n\t\t\t\t\t\tcondition,\n\t\t\t\t\t\tcount: 1,\n\t\t\t\t\t\tconfirmed: true,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tlog.debugWithObjects([\"\", \"Ack received\"], [msg.data]);\n\t}\n\n\tprivate onError(msg: EventAPIMessage<\"ERROR\">): void {\n\t\tlog.error(\"\", \"Error received\", msg.data.message);\n\t}\n\n\tsubscribe(type: string, condition: Record) {\n\t\tconst sub = this.findSubscription(type, condition);\n\t\tif (sub) {\n\t\t\tsub.count++;\n\t\t\treturn;\n\t\t}\n\n\t\tif (!Array.isArray(this.subscriptions[type])) {\n\t\t\tthis.subscriptions[type] = [];\n\t\t}\n\n\t\tthis.subscriptions[type].push({\n\t\t\tcondition,\n\t\t\tcount: 1,\n\t\t});\n\n\t\tthis.sendMessage({\n\t\t\top: \"SUBSCRIBE\",\n\t\t\tdata: {\n\t\t\t\ttype,\n\t\t\t\tcondition,\n\t\t\t},\n\t\t});\n\t}\n\n\tunsubscribe(type: string, condition?: Record) {\n\t\tif (!condition) {\n\t\t\tdelete this.subscriptions[type];\n\n\t\t\tthis.sendMessage({\n\t\t\t\top: \"UNSUBSCRIBE\",\n\t\t\t\tdata: {\n\t\t\t\t\ttype,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst sub = this.findSubscription(type, condition);\n\t\tif (!sub) return;\n\n\t\tsub.count--;\n\t\tif (sub.count <= 0) {\n\t\t\tthis.subscriptions[type] = this.subscriptions[type].filter((c) => c !== sub);\n\n\t\t\tthis.sendMessage({\n\t\t\t\top: \"UNSUBSCRIBE\",\n\t\t\t\tdata: {\n\t\t\t\t\ttype,\n\t\t\t\t\tcondition,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tfindSubscription(type: string, condition: Record): SubscriptionRecord | null {\n\t\tconst sub = this.subscriptions[type];\n\t\tif (!sub) return null;\n\n\t\treturn sub.find((c) => Object.entries(condition).every(([key, value]) => c.condition[key] === value)) ?? null;\n\t}\n\n\tfindSubscriptionByID(id: number): SubscriptionRecord | null {\n\t\tfor (const type in this.subscriptions) {\n\t\t\tconst sub = this.subscriptions[type];\n\t\t\tif (!sub) continue;\n\n\t\t\tconst found = sub.find((c) => c.id === id);\n\t\t\tif (found) return found;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tsendMessage(msg: EventAPIMessage): void {\n\t\t// retry if we're no primary has been selected or the socket isn't ready\n\t\tif (!(this.socket && this.socket.readyState === WebSocket.OPEN)) {\n\t\t\tif (msg.op !== \"SUBSCRIBE\") setTimeout(() => this.sendMessage(msg), 100);\n\t\t\treturn;\n\t\t}\n\n\t\tlog.debug(\"\", \"Sending message with op:\", msg.op.toString());\n\n\t\tif (!this.socket) return;\n\n\t\tthis.socket.send(\n\t\t\tJSON.stringify({\n\t\t\t\top: EventAPIOpCode[msg.op],\n\t\t\t\td: msg.data,\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate onClose(): void {\n\t\tthis.socket = null;\n\t\tconst n = this.reconnect();\n\n\t\tlog.debug(\"\", \"Disconnected\", `url=${this.url}, reconnect=${n}`);\n\t}\n\n\treconnect(): number {\n\t\tconst jitter = Math.min((this.backoff += getRandomInt(1000, 5000)), 120000);\n\n\t\tsetTimeout(() => {\n\t\t\tif (this.socket || !this.transport) return;\n\n\t\t\tthis.connect(this.transport);\n\t\t}, jitter);\n\t\treturn jitter;\n\t}\n\n\tdisconnect(): void {\n\t\tif (!this.socket) return;\n\n\t\tthis.socket.close(1000);\n\t\tthis.socket = null;\n\t}\n}\n\nexport interface SubscriptionRecord {\n\tid?: number;\n\tcondition: Record;\n\tcount: number;\n\tconfirmed?: boolean;\n}\n\ntype EventAPITransport = \"WebSocket\" | \"EventStream\";\n","import type { WorkerMessage, WorkerMessageData, WorkerMessageName } from \"@/composables/useWorker\";\nimport { EventAPI } from \"./worker.events\";\nimport { log } from \"@/Logger\";\n\nlog.setContextName(\"Worker\");\n\nconst eventAPI = new EventAPI();\neventAPI.connect(\"WebSocket\");\n\nexport function handleMessage(evt: WorkerMessage): void {\n\tswitch (evt.name) {\n\t\tcase \"EventCommandSubscribe\": {\n\t\t\tconst d = evt.data as WorkerMessageData<\"EventCommandSubscribe\">;\n\t\t\teventAPI.subscribe(d.type, d.condition);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"EventCommandUnsubscribe\": {\n\t\t\tconst d = evt.data as WorkerMessageData<\"EventCommandUnsubscribe\">;\n\t\t\teventAPI.unsubscribe(d.type, d.condition);\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nexport function broadcast(name: N, data: WorkerMessageData): void {\n\tif (target.callback) {\n\t\ttarget.callback({\n\t\t\tname,\n\t\t\tdata,\n\t\t});\n\t}\n}\n\nexport const target = {\n\tcallback: null as ((evt: WorkerMessage) => void) | null,\n};\n","import { onBeforeUnmount } from \"vue\";\nimport { makeUniqueId } from \"@apollo/client/utilities\";\nimport type { ObjectKind } from \"@/structures/Common\";\nimport type { ChangeMap } from \"@/worker\";\nimport { handleMessage, target } from \"@/worker/worker\";\n\nconst listeners = new Map) => void>();\n\nexport function useWorker() {\n\tfunction postMessage(name: N, data: WorkerMessageData) {\n\t\thandleMessage({\n\t\t\tname,\n\t\t\tdata,\n\t\t});\n\t}\n\n\tfunction createWorker() {\n\t\ttarget.callback = (evt) => {\n\t\t\tfor (const fn of listeners.values()) {\n\t\t\t\tfn(evt);\n\t\t\t}\n\t\t};\n\t}\n\n\tconst messageListeners = [] as string[];\n\n\tfunction onMessage(callback: (message: WorkerMessage) => void) {\n\t\tconst useID = makeUniqueId(\"events\");\n\n\t\tlisteners.set(useID, callback as (message: WorkerMessage) => void);\n\t\tmessageListeners.push(useID);\n\t}\n\n\tonBeforeUnmount(() => messageListeners.forEach((v) => listeners.delete(v)));\n\n\treturn {\n\t\tcreateWorker,\n\t\tpostMessage,\n\t\tonMessage,\n\t};\n}\n\nexport interface EventMessage {\n\top: number;\n\tt: number;\n\td: unknown;\n}\n\nexport interface AnyWorkerMessage {\n\tname: WorkerMessageName;\n\tdata: object;\n}\n\nexport interface WorkerMessage {\n\tname: N;\n\tdata: WorkerMessageData;\n}\n\nexport type WorkerMessageData = {\n\tEventCommandSubscribe: {\n\t\ttype: string;\n\t\tcondition: Record;\n\t};\n\tEventCommandUnsubscribe: {\n\t\ttype: string;\n\t\tcondition?: Record;\n\t};\n\tEventDispatch: { type: string; body: ChangeMap };\n\tEventHello: { heartbeat_interval: number; session_id: string };\n\tEventHeartbeat: { count: number };\n}[N];\n\nexport type WorkerMessageName =\n\t| \"EventCommandSubscribe\"\n\t| \"EventCommandUnsubscribe\"\n\t| \"EventDispatch\"\n\t| \"EventHello\"\n\t| \"EventHeartbeat\";\n","\n","\n\n\n","\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","import { gql } from \"graphql-tag\";\nimport { EmoteSet } from \"@/structures/EmoteSet\";\n\nexport const GetEmoteSet = gql`\n\tquery GetEmoteSet($id: ObjectID!, $formats: [ImageFormat!]) {\n\t\temoteSet(id: $id) {\n\t\t\tid\n\t\t\tname\n\t\t\tflags\n\t\t\tcapacity\n\t\t\torigins {\n\t\t\t\tid\n\t\t\t\tweight\n\t\t\t}\n\t\t\temotes {\n\t\t\t\tid\n\t\t\t\tname\n\t\t\t\tactor {\n\t\t\t\t\tid\n\t\t\t\t\tdisplay_name\n\t\t\t\t\tavatar_url\n\t\t\t\t}\n\t\t\t\torigin_id\n\t\t\t\tdata {\n\t\t\t\t\tid\n\t\t\t\t\tname\n\t\t\t\t\tflags\n\t\t\t\t\tstate\n\t\t\t\t\tlifecycle\n\t\t\t\t\thost {\n\t\t\t\t\t\turl\n\t\t\t\t\t\tfiles(formats: $formats) {\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t\tformat\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\towner {\n\t\t\t\t\t\tid\n\t\t\t\t\t\tdisplay_name\n\t\t\t\t\t\tstyle {\n\t\t\t\t\t\t\tcolor\n\t\t\t\t\t\t}\n\t\t\t\t\t\troles\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\towner {\n\t\t\t\tid\n\t\t\t\tusername\n\t\t\t\tdisplay_name\n\t\t\t\tstyle {\n\t\t\t\t\tcolor\n\t\t\t\t}\n\t\t\t\tavatar_url\n\t\t\t\troles\n\t\t\t\tconnections {\n\t\t\t\t\tid\n\t\t\t\t\tdisplay_name\n\t\t\t\t\temote_capacity\n\t\t\t\t\tplatform\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport const GetEmoteSetMin = gql`\n\tquery GetEmoteSetMin($id: ObjectID!) {\n\t\temoteSet(id: $id) {\n\t\t\tid\n\t\t\tname\n\t\t\tflags\n\t\t\tcapacity\n\t\t\torigins {\n\t\t\t\tid\n\t\t\t\tweight\n\t\t\t}\n\t\t\temotes {\n\t\t\t\tid\n\t\t\t\tname\n\t\t\t\torigin_id\n\t\t\t\tdata {\n\t\t\t\t\tname\n\t\t\t\t}\n\t\t\t}\n\t\t\towner {\n\t\t\t\tid\n\t\t\t\tdisplay_name\n\t\t\t\tstyle {\n\t\t\t\t\tcolor\n\t\t\t\t}\n\t\t\t\tavatar_url\n\t\t\t\tconnections {\n\t\t\t\t\tid\n\t\t\t\t\tusername\n\t\t\t\t\tplatform\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport const GetEmoteSetForCard = gql`\n\tquery GetEmoteSetForCard($id: ObjectID!, $limit: Int) {\n\t\temoteSet(id: $id) {\n\t\t\temote_count\n\t\t\tcapacity\n\t\t\tflags\n\t\t\temotes(limit: $limit, origins: true) {\n\t\t\t\tid\n\t\t\t\tname\n\t\t\t\torigin_id\n\t\t\t\tdata {\n\t\t\t\t\tid\n\t\t\t\t\tname\n\t\t\t\t\thost {\n\t\t\t\t\t\turl\n\t\t\t\t\t\tfiles {\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t\tformat\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport interface GetEmoteSet {\n\temoteSet: EmoteSet;\n}\n","import { onBeforeUnmount } from \"vue\";\nimport { ObjectKind } from \"@/structures/Common\";\nimport type { Emote } from \"@/structures/Emote\";\nimport type { EmoteSet } from \"@/structures/EmoteSet\";\nimport type { User } from \"@/structures/User\";\nimport type { ChangeField } from \"@/worker\";\nimport { WorkerMessageData, useWorker } from \"./useWorker\";\n\nexport function useObjectSubscription() {\n\tconst subs = [] as WorkerMessageData<\"EventCommandSubscribe\">[];\n\n\tconst { postMessage, onMessage } = useWorker();\n\n\tfunction watchObject(kind: ObjectKind, object: T, cb?: (obj: T) => void) {\n\t\tconst kindStr = ObjectKind[kind] as keyof typeof ObjectKind;\n\n\t\tconst sub = {\n\t\t\ttype: `${kindStr.toLowerCase()}.update`,\n\t\t\tcondition: { object_id: object.id },\n\t\t};\n\n\t\tpostMessage(\"EventCommandSubscribe\", sub);\n\n\t\tonMessage<\"EventDispatch\">((msg) => {\n\t\t\tif (msg.name !== \"EventDispatch\") return;\n\t\t\tif (msg.data.body.id !== object.id || msg.data.body.kind !== kind) return;\n\n\t\t\tApplyFields(object, [...(msg.data.body.updated ?? [])]);\n\t\t\tApplyFields(object, [...(msg.data.body.pushed ?? [])], true);\n\t\t\tApplyFields(object, [...(msg.data.body.pulled ?? [])]);\n\n\t\t\tif (typeof cb === \"function\") cb(object);\n\t\t});\n\n\t\tsubs.push(sub);\n\t}\n\n\tonBeforeUnmount(() => subs.forEach((v) => postMessage(\"EventCommandUnsubscribe\", v)));\n\n\treturn { watchObject };\n}\n\ntype Watchable = User | Emote | EmoteSet;\n\nexport interface ChangeMap {\n\tid: string;\n\tkind: ObjectKind;\n\tactor: User;\n\tadded: ChangeField[];\n\tupdated: ChangeField[];\n\tremoved: ChangeField[];\n\tpushed: ChangeField[];\n\tpulled: ChangeField[];\n}\n\nfunction ApplyFields(object: T, fields: ChangeField[], push?: boolean): T {\n\tfor (const cf of fields ?? []) {\n\t\tconst x = Array(2);\n\t\tswitch (cf.type) {\n\t\t\tcase \"number\":\n\t\t\t\tx[0] = cf.old_value ? Number(cf.old_value) : null;\n\t\t\t\tx[1] = cf.value ? Number(cf.value) : null;\n\t\t\t\tbreak;\n\t\t\tcase \"boolean\":\n\t\t\t\tx[0] = cf.old_value ? Boolean(cf.old_value === \"true\") : null;\n\t\t\t\tx[1] = cf.value ? Boolean(cf.value === \"true\") : null;\n\t\t\t\tbreak;\n\t\t\tcase \"string\":\n\t\t\t\tx[0] = (cf.old_value as string)?.length ? cf.old_value : null;\n\t\t\t\tx[1] = (cf.value as string)?.length ? cf.value : null;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tx[0] = cf.old_value ? cf.old_value : null;\n\t\t\t\tx[1] = cf.value ? cf.value : null;\n\t\t}\n\n\t\tcf.old_value = x[0];\n\t\tcf.value = x[1];\n\n\t\t// Handle array change of a nested object\n\t\tif (!cf) continue;\n\t\tif (cf.nested && typeof cf.index === \"number\") {\n\t\t\tconst nestedFields = cf.value as unknown as ChangeField[];\n\n\t\t\tconst v = (object[cf.key as keyof T] as unknown as (keyof T)[])?.[cf.index] as unknown as Watchable;\n\t\t\tif (!v) continue;\n\n\t\t\tApplyFields(v, nestedFields);\n\t\t} else if (cf.nested) {\n\t\t\t// Handle change of nested property\n\t\t\tApplyFields(object[cf.key as keyof T] as unknown as Watchable, cf.value as unknown as ChangeField[]);\n\t\t} else if (object[cf.key as keyof T] && typeof cf.index === \"number\") {\n\t\t\t// Handle change at array index\n\t\t\ttype MaybeKeyed = { name?: string; id?: string };\n\n\t\t\tconst arr = object[cf.key as keyof T] as unknown as (keyof T & MaybeKeyed)[];\n\t\t\tif (cf.old_value) {\n\t\t\t\tconst old_value = cf.old_value as MaybeKeyed;\n\t\t\t\tif (old_value.name && old_value.id) {\n\t\t\t\t\tconst index = arr.findIndex((v) => {\n\t\t\t\t\t\treturn v.name === old_value.name && v.id === old_value.id;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\tcf.index = index;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (cf.value === null) {\n\t\t\t\tarr.splice(cf.index, 1);\n\t\t\t} else if (push) {\n\t\t\t\tarr.splice(cf.index, 0, cf.value as keyof T & MaybeKeyed);\n\t\t\t} else {\n\t\t\t\tarr[cf.index] = cf.value as keyof T & MaybeKeyed;\n\t\t\t}\n\t\t} else if (typeof object !== \"undefined\" && object !== null) {\n\t\t\t// Handle key change\n\t\t\tobject[cf.key as keyof T] = cf.value as unknown as T[keyof T];\n\t\t}\n\t}\n\n\treturn object;\n}\n","import { Ref, watch } from \"vue\";\nimport { useQuery } from \"@vue/apollo-composable\";\nimport { storeToRefs } from \"pinia\";\nimport { useActor } from \"@/store/actor\";\nimport { GetEmoteSet, GetEmoteSetMin } from \"@/apollo/query/emote-set.query\";\nimport { useObjectSubscription } from \"@/composables/useObjectSub\";\nimport { GetCurrentUser } from \"./apollo/query/user-self.query\";\nimport { GetUser } from \"./apollo/query/user.query\";\nimport { useStore } from \"./store/main\";\nimport { ObjectKind } from \"./structures/Common\";\nimport { EmoteSet } from \"./structures/EmoteSet\";\nimport { User } from \"./structures/User\";\n\nexport function setupActor(refreshAuth: Ref) {\n\tconst actor = useActor();\n\tconst store = useStore();\n\tconst { user } = storeToRefs(actor);\n\tconst { watchObject } = useObjectSubscription();\n\n\tfunction fetch() {\n\t\tif (!refreshAuth.value) {\n\t\t\treturn;\n\t\t}\n\n\t\trefreshAuth.value = false;\n\n\t\t// Set up initial identity (pre-fetch)\n\t\tconst identity = actor.getIdentity();\n\t\tif (identity) {\n\t\t\tactor.setUser({ ...identity, _idty: true });\n\t\t}\n\n\t\t// Query user data from API\n\t\tconst { onResult, onError } = useQuery(GetCurrentUser);\n\t\tonResult((res) => {\n\t\t\tif (!res.data) return;\n\n\t\t\tconst usr = res.data.user;\n\t\t\tif (!usr) {\n\t\t\t\tactor.setUser(null);\n\t\t\t\tstore.setAuthToken(null, false);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tactor.setUser(usr);\n\n\t\t\t// Auto-bump slots\n\t\t\t// const maxSlots = Math.max(...usr.connections.map((uc) => uc.emote_capacity));\n\t\t\t// const bumps = [] as Promise[];\n\t\t\t// for (const es of usr.emote_sets) {\n\t\t\t// \tif (maxSlots > es.capacity && es.capacity >= 300) {\n\t\t\t// \t\tbumps.push(m.editEmoteSet(es.id, { capacity: maxSlots }).catch(() => undefined));\n\t\t\t// \t}\n\t\t\t// }\n\t\t\t// if (bumps.length) {\n\t\t\t// \tPromise.all(bumps).then(() => {\n\t\t\t// \t\tmodal.open(\"slots-bumped\", {\n\t\t\t// \t\t\tcomponent: ModalSlotsBump,\n\t\t\t// \t\t\tprops: {\n\t\t\t// \t\t\t\tvalue: maxSlots,\n\t\t\t// \t\t\t},\n\t\t\t// \t\t\tevents: {},\n\t\t\t// \t\t});\n\t\t\t// \t});\n\t\t\t// }\n\n\t\t\t// Aggregate owned and emote sets of edited users\n\t\t\tconst editableSetIDs = (user.value as User).editor_of.map((ed) =>\n\t\t\t\ted.user\n\t\t\t\t\t? (ed.permissions & User.EditorPermission.ManageEmoteSets) === User.EditorPermission.ManageEmoteSets\n\t\t\t\t\t\t? ed.user.emote_sets.filter((es) => es.id).map((es) => es.id)\n\t\t\t\t\t\t: ed.user.connections.filter((uc) => uc.emote_set_id).map((uc) => uc.emote_set_id)\n\t\t\t\t\t: [],\n\t\t\t);\n\n\t\t\tconst editableSets =\n\t\t\t\t(editableSetIDs.length\n\t\t\t\t\t? editableSetIDs.reduce((a, b) => [...(a ?? []), ...(b ?? [])])?.map((v) => ({ id: v } as EmoteSet))\n\t\t\t\t\t: []) ?? [];\n\n\t\t\t// Start subscriptions on all editable sets\n\t\t\tconst allOK = [] as Promise[];\n\t\t\tfor (const set of [...usr.emote_sets, ...editableSets]) {\n\t\t\t\tconst { result, loading } = useQuery(GetEmoteSetMin, { id: set.id });\n\n\t\t\t\tconst p = new Promise((ok) => {\n\t\t\t\t\twatch(loading, (l) => !l && ok(result.value?.emoteSet as EmoteSet));\n\t\t\t\t});\n\n\t\t\t\tallOK.push(p);\n\t\t\t}\n\n\t\t\tPromise.all(allOK).then((sets) => {\n\t\t\t\tfor (const set of sets) {\n\t\t\t\t\tif (!set) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\twatchObject(ObjectKind.EMOTE_SET, set, () => {\n\t\t\t\t\t\tactor.updateEmoteSet(set);\n\t\t\t\t\t});\n\n\t\t\t\t\tactor.addEmoteSet(set);\n\t\t\t\t}\n\t\t\t\tactor.updateActiveEmotes();\n\t\t\t});\n\t\t});\n\n\t\tonError((err) => {\n\t\t\tactor.setUser(null);\n\t\t\tactor.showErrorModal(err);\n\t\t});\n\t}\n\n\twatch(refreshAuth, () => fetch(), { immediate: true });\n}\n","\n\n\n\n\n","import { library } from \"@fortawesome/fontawesome-svg-core\";\nimport {\n\tfaChrome as fabChrome,\n\tfaDiscord as fabDiscord,\n\tfaEdge as fabEdge,\n\tfaFirefox as fabFirefox,\n\tfaGithub as fabGithub,\n\tfaOpera as fabOpera,\n\tfaCcPaypal as fabPaypal,\n\tfaTwitch as fabTwitch,\n\tfaTwitter as fabTwitter,\n\tfaYoutube as fabYoutube,\n} from \"@fortawesome/free-brands-svg-icons\";\nimport { faObjectUngroup, faCircleCheck as farCircleCheck } from \"@fortawesome/free-regular-svg-icons\";\nimport {\n\tfaArrowLeft,\n\tfaBars,\n\tfaBellConcierge,\n\tfaBookSparkles,\n\tfaBox,\n\tfaBrush,\n\tfaBullseye,\n\tfaBullseyePointer,\n\tfaCakeSlice,\n\tfaCalendarAlt,\n\tfaCheck,\n\tfaCheckCircle,\n\tfaCheckDouble,\n\tfaChevronDown,\n\tfaChevronLeft,\n\tfaChevronRight,\n\tfaChevronsDown,\n\tfaChevronsRight,\n\tfaCircle,\n\tfaClock,\n\tfaCodeBranch,\n\tfaColumns,\n\tfaCopy,\n\tfaCreditCard,\n\tfaCube,\n\tfaDownload,\n\tfaEllipsisH,\n\tfaEllipsisV,\n\tfaEnvelope,\n\tfaExclamation,\n\tfaExclamationTriangle,\n\tfaExternalLinkAlt,\n\tfaEye,\n\tfaEyeSlash,\n\tfaFaceSunglasses,\n\tfaFilter,\n\tfaFire,\n\tfaFlag,\n\tfaGavel,\n\tfaGear,\n\tfaGift,\n\tfaGlobe,\n\tfaHashtag,\n\tfaHexagonPlus,\n\tfaLanguage,\n\tfaLayerGroup,\n\tfaListCheck,\n\tfaLock,\n\tfaMegaphone,\n\tfaMerge,\n\tfaMinus,\n\tfaMoon,\n\tfaObjectGroup,\n\tfaPalette,\n\tfaPen,\n\tfaPenField,\n\tfaPersonRunningFast,\n\tfaPlus,\n\tfaRectangleWide,\n\tfaReply,\n\tfaRotateRight,\n\tfaSave,\n\tfaSeal,\n\tfaSearch,\n\tfaSlash,\n\tfaSmile,\n\tfaSquare,\n\tfaSquareQuestion,\n\tfaStar,\n\tfaSunBright,\n\tfaSync,\n\tfaTag,\n\tfaTicket,\n\tfaTimer,\n\tfaTimes,\n\tfaTrash,\n\tfaTreeChristmas,\n\tfaTrophy,\n\tfaUndo,\n\tfaUnlock,\n\tfaUser,\n\tfaUserClock,\n\tfaUserLock,\n\tfaUserMinus,\n\tfaUserPen,\n\tfaUserPlus,\n\tfaUserSlash,\n\tfaUsersCog,\n\tfaWaveformLines,\n\tfaWrench,\n} from \"@fortawesome/sharp-solid-svg-icons\";\n\nlibrary.add(\n\tfaArrowLeft,\n\tfaBars,\n\tfabChrome,\n\tfabDiscord,\n\tfabEdge,\n\tfabFirefox,\n\tfabGithub,\n\tfaBookSparkles,\n\tfabOpera,\n\tfaBox,\n\tfabPaypal,\n\tfaBrush,\n\tfabTwitch,\n\tfabTwitter,\n\tfaBullseye,\n\tfaBullseyePointer,\n\tfabYoutube,\n\tfaCakeSlice,\n\tfaCalendarAlt,\n\tfaCheck,\n\tfaCheckCircle,\n\tfaCheckDouble,\n\tfaChevronDown,\n\tfaChevronLeft,\n\tfaChevronRight,\n\tfaChevronsDown,\n\tfaChevronsRight,\n\tfaCircle,\n\tfaClock,\n\tfaCodeBranch,\n\tfaColumns,\n\tfaCopy,\n\tfaCopy,\n\tfaCreditCard,\n\tfaCube,\n\tfaDownload,\n\tfaEllipsisH,\n\tfaEllipsisV,\n\tfaEnvelope,\n\tfaExclamation,\n\tfaExclamationTriangle,\n\tfaExternalLinkAlt,\n\tfaEye,\n\tfaEyeSlash,\n\tfaFaceSunglasses,\n\tfaFilter,\n\tfaFire,\n\tfaFlag,\n\tfaGavel,\n\tfaGear,\n\tfaGift,\n\tfaGlobe,\n\tfaHashtag,\n\tfaHexagonPlus,\n\tfaLanguage,\n\tfaLayerGroup,\n\tfaListCheck,\n\tfaLock,\n\tfaMegaphone,\n\tfaMinus,\n\tfaMoon,\n\tfaObjectGroup,\n\tfaObjectUngroup,\n\tfaPalette,\n\tfaPen,\n\tfaPenField,\n\tfaPlus,\n\tfarCircleCheck,\n\tfaRectangleWide,\n\tfaReply,\n\tfaRotateRight,\n\tfaSave,\n\tfaSeal,\n\tfaSearch,\n\tfaSearch,\n\tfaSlash,\n\tfaSmile,\n\tfaSquare,\n\tfaSquareQuestion,\n\tfaStar,\n\tfaSunBright,\n\tfaSync,\n\tfaTag,\n\tfaTicket,\n\tfaTimer,\n\tfaTimes,\n\tfaTrash,\n\tfaTreeChristmas,\n\tfaTrophy,\n\tfaUndo,\n\tfaUnlock,\n\tfaUser,\n\tfaUserClock,\n\tfaUserLock,\n\tfaUserMinus,\n\tfaUserPen,\n\tfaUserPlus,\n\tfaUsersCog,\n\tfaUserSlash,\n\tfaWaveformLines,\n\tfaWrench,\n\tfaBellConcierge,\n\tfaMerge,\n\tfaPersonRunningFast,\n);\n","/**\n * Explicit keys that should always be cloned.\n */\nconst explicitKeys = [\n '__key',\n '__init',\n '__shim',\n '__original',\n '__index',\n '__prevKey',\n];\n/**\n * Generates a random string.\n * @returns string\n * @public\n */\nfunction token() {\n return Math.random().toString(36).substring(2, 15);\n}\n/**\n * Creates a new set of the specified type and uses the values from an Array or\n * an existing Set.\n * @param items -\n * @returns Set\n * @public\n */\nfunction setify(items) {\n return items instanceof Set ? items : new Set(items);\n}\n/**\n * Given 2 arrays, return them as a combined array with no duplicates.\n * @param arr1 -\n * @param arr2 -\n * @returns any[]\n * @public\n */\nfunction dedupe(arr1, arr2) {\n const original = arr1 instanceof Set ? arr1 : new Set(arr1);\n if (arr2)\n arr2.forEach((item) => original.add(item));\n return [...original];\n}\n/**\n * Checks if the given property exists on the given object.\n * @param obj -\n * @param property -\n * @public\n */\nfunction has(obj, property) {\n return Object.prototype.hasOwnProperty.call(obj, property);\n}\n/**\n * Compare two values for equality optionally at depth.\n * @param valA - Any type of input\n * @param valB - Any type of output\n * @param deep - Indicate if we should recurse into the object\n * @param explicit - Explicit keys\n * @returns boolean\n * @public\n */\nfunction eq(valA, // eslint-disable-line\nvalB, // eslint-disable-line\ndeep = true, explicit = ['__key']) {\n if (valA === valB)\n return true;\n if (typeof valB === 'object' && typeof valA === 'object') {\n if (valA instanceof Map)\n return false;\n if (valA instanceof Set)\n return false;\n if (valA instanceof Date)\n return false;\n if (valA === null || valB === null)\n return false;\n if (Object.keys(valA).length !== Object.keys(valB).length)\n return false;\n for (const k of explicit) {\n if ((k in valA || k in valB) && valA[k] !== valB[k])\n return false;\n }\n for (const key in valA) {\n if (!(key in valB))\n return false;\n if (valA[key] !== valB[key] && !deep)\n return false;\n if (deep && !eq(valA[key], valB[key], deep, explicit))\n return false;\n }\n return true;\n }\n return false;\n}\n/**\n * Determines if a value is empty or not.\n * @param value - any type of value that could be returned by an input.\n * @public\n */\nfunction empty(value // eslint-disable-line\n) {\n const type = typeof value;\n if (type === 'number')\n return false;\n if (value === undefined)\n return true;\n if (type === 'string') {\n return value === '';\n }\n if (type === 'object') {\n if (value === null)\n return true;\n for (const _i in value)\n return false;\n if (value instanceof RegExp)\n return false;\n if (value instanceof Date)\n return false;\n return true;\n }\n return false;\n}\n/**\n * Escape a string for use in regular expressions.\n * @param string - The string to escape.\n * @public\n */\nfunction escapeExp(string) {\n // $& means the whole matched string\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n/**\n * Given a string format (date) return a regex to match against.\n * @param format - The format of the string\n * @returns\n * @public\n */\nfunction regexForFormat(format) {\n const escaped = `^${escapeExp(format)}$`;\n const formats = {\n MM: '(0[1-9]|1[012])',\n M: '([1-9]|1[012])',\n DD: '([012][0-9]|3[01])',\n D: '([012]?[0-9]|3[01])',\n YYYY: '\\\\d{4}',\n YY: '\\\\d{2}',\n };\n const tokens = Object.keys(formats);\n return new RegExp(tokens.reduce((regex, format) => {\n return regex.replace(format, formats[format]);\n }, escaped));\n}\n/**\n * Given a FormKit input type\n * @param type - Any FormKit input type\n * @public\n */\nfunction nodeType(type) {\n const t = type.toLowerCase();\n if (t === 'list')\n return 'list';\n if (t === 'group')\n return 'group';\n return 'input';\n}\n/**\n * Determines if an object is an object or not.\n * @param o - any value\n * @returns\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isRecord(o) {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n/**\n * Checks if an object is a simple array or record.\n * @param o - A value to check\n * @returns\n * @public\n */\nfunction isObject(o) {\n return isRecord(o) || Array.isArray(o);\n}\n/**\n * Attempts to determine if an object is a plain object. Mostly lifted from\n * is-plain-object: https://github.com/jonschlinkert/is-plain-object\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * @param o - any value\n * @returns\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction isPojo(o) {\n if (isRecord(o) === false)\n return false;\n if (o.__FKNode__ || o.__POJO__ === false)\n return false;\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n const prot = ctor.prototype;\n if (isRecord(prot) === false)\n return false;\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n return true;\n}\n/**\n * Recursively merge data from additional into original returning a new object.\n * @param original - An object to extend\n * @param additional - An object to modify the original object with.\n * @param arrays - By default replaces arrays, but can also append to them.\n * @param ignoreUndefined - when true it treats undefined values as if they dont exist\n * @public\n */\nfunction extend(original, additional, extendArrays = false, ignoreUndefined = false) {\n if (additional === null)\n return null;\n const merged = {};\n if (typeof additional === 'string')\n return additional;\n for (const key in original) {\n if (has(additional, key) &&\n (additional[key] !== undefined || !ignoreUndefined)) {\n if (extendArrays &&\n Array.isArray(original[key]) &&\n Array.isArray(additional[key])) {\n merged[key] = original[key].concat(additional[key]);\n continue;\n }\n if (additional[key] === undefined) {\n continue;\n }\n if (isPojo(original[key]) && isPojo(additional[key])) {\n merged[key] = extend(original[key], additional[key], extendArrays, ignoreUndefined);\n }\n else {\n merged[key] = additional[key];\n }\n }\n else {\n merged[key] = original[key];\n }\n }\n for (const key in additional) {\n if (!has(merged, key) && additional[key] !== undefined) {\n merged[key] = additional[key];\n }\n }\n return merged;\n}\n/**\n * Determine if the given string is fully quoted. Examples:\n * hello - false\n * \"hello\" - true\n * 'world' - true\n * \"hello\"==\"world\" - false\n * \"hello'this'\" - false\n * \"hello\"'there' - false\n * \"hello\"\"there\" - false\n * 'hello === world' - true\n * @param str - A string to check.\n * @public\n */\nfunction isQuotedString(str) {\n // quickly return false if the value is note quoted\n if (str[0] !== '\"' && str[0] !== \"'\")\n return false;\n if (str[0] !== str[str.length - 1])\n return false;\n const quoteType = str[0];\n for (let p = 1; p < str.length; p++) {\n if (str[p] === quoteType &&\n (p === 1 || str[p - 1] !== '\\\\') &&\n p !== str.length - 1) {\n return false;\n }\n }\n return true;\n}\n/**\n * Remove extra escape characters.\n * @param str - A string to remove escape characters from.\n * @public\n */\nfunction rmEscapes(str) {\n if (!str.length)\n return '';\n let clean = '';\n let lastChar = '';\n for (let p = 0; p < str.length; p++) {\n const char = str.charAt(p);\n if (char !== '\\\\' || lastChar === '\\\\') {\n clean += char;\n }\n lastChar = char;\n }\n return clean;\n}\n/**\n * Performs a recursive Object.assign like operation.\n * @param a - An object to be extended by object b\n * @param b - An object to copy values from\n * @public\n */\nfunction assignDeep(a, b) {\n for (const key in a) {\n if (has(b, key) &&\n a[key] !== b[key] &&\n !(isPojo(a[key]) && isPojo(b[key]))) {\n a[key] = b[key];\n }\n else if (isPojo(a[key]) && isPojo(b[key])) {\n assignDeep(a[key], b[key]);\n }\n }\n for (const key in b) {\n if (!has(a, key)) {\n a[key] = b[key];\n }\n }\n return a;\n}\n/**\n * Filters out values from an object that should not be considered \"props\" of\n * a core node, like \"value\" and \"name\".\n * @param attrs - An object to extract core node config from.\n * @public\n */\nfunction nodeProps(...sets) {\n return sets.reduce((valid, props) => {\n const { value, name, modelValue, config, plugins, ...validProps } = props; // eslint-disable-line\n return Object.assign(valid, validProps);\n }, {});\n}\n/**\n * Parse a string for comma-separated arguments\n * @param str - A string to parse\n * @public\n */\nfunction parseArgs(str) {\n const args = [];\n let arg = '';\n let depth = 0;\n let quote = '';\n let lastChar = '';\n for (let p = 0; p < str.length; p++) {\n const char = str.charAt(p);\n if (char === quote && lastChar !== '\\\\') {\n quote = '';\n }\n else if ((char === \"'\" || char === '\"') && !quote && lastChar !== '\\\\') {\n quote = char;\n }\n else if (char === '(' && !quote) {\n depth++;\n }\n else if (char === ')' && !quote) {\n depth--;\n }\n if (char === ',' && !quote && depth === 0) {\n args.push(arg);\n arg = '';\n }\n else if (char !== ' ' || quote) {\n arg += char;\n }\n lastChar = char;\n }\n if (arg) {\n args.push(arg);\n }\n return args;\n}\n/**\n * Return a new (shallow) object with all properties from a given object\n * that are present in the array.\n * @param obj - An object to clone\n * @param toRemove - An array of keys to remove\n * @public\n */\nfunction except(obj, toRemove) {\n const clean = {};\n const exps = toRemove.filter((n) => n instanceof RegExp);\n const keysToRemove = new Set(toRemove);\n for (const key in obj) {\n if (!keysToRemove.has(key) && !exps.some((exp) => exp.test(key))) {\n clean[key] = obj[key];\n }\n }\n return clean;\n}\n/**\n * Extracts a set of keys from a given object. Importantly, this will extract\n * values even if they are not set on the original object they will just have an\n * undefined value.\n * @param obj - An object to extract values from\n * @param include - A set of keys to extract\n * @returns\n * @public\n */\nfunction only(obj, include) {\n const clean = {};\n const exps = include.filter((n) => n instanceof RegExp);\n include.forEach((key) => {\n if (!(key instanceof RegExp)) {\n clean[key] = obj[key];\n }\n });\n Object.keys(obj).forEach((key) => {\n if (exps.some((exp) => exp.test(key))) {\n clean[key] = obj[key];\n }\n });\n return clean;\n}\n/**\n * This converts kebab-case to camelCase. It ONLY converts from kebab for\n * efficiency stake.\n * @param str - String to convert.\n * @public\n */\nfunction camel(str) {\n return str.replace(/-([a-z0-9])/gi, (_s, g) => g.toUpperCase());\n}\n/**\n * This converts camel-case to kebab case. It ONLY converts from camel to kebab.\n * @param str - Converts camel to kebab\n * @returns\n * @public\n */\nfunction kebab(str) {\n return str\n .replace(/([a-z0-9])([A-Z])/g, (_s, trail, cap) => trail + '-' + cap.toLowerCase())\n .replace(' ', '-')\n .toLowerCase();\n}\n/**\n * Very shallowly clones the given object.\n * @param obj - The object to shallow clone\n * @returns\n * @public\n */\nfunction shallowClone(obj, explicit = explicitKeys) {\n if (obj !== null && typeof obj === 'object') {\n let returnObject;\n if (Array.isArray(obj))\n returnObject = [...obj];\n else if (isPojo(obj))\n returnObject = { ...obj };\n if (returnObject) {\n applyExplicit(obj, returnObject, explicit);\n return returnObject;\n }\n }\n return obj;\n}\n/**\n * Perform a recursive clone on a given object. This only intended to be used\n * for simple objects like arrays and pojos.\n * @param obj - Object to clone\n * @public\n */\nfunction clone(obj, explicit = explicitKeys) {\n if (obj === null ||\n obj instanceof RegExp ||\n obj instanceof Date ||\n obj instanceof Map ||\n obj instanceof Set ||\n (typeof File === 'function' && obj instanceof File))\n return obj;\n let returnObject;\n if (Array.isArray(obj)) {\n returnObject = obj.map((value) => {\n if (typeof value === 'object')\n return clone(value, explicit);\n return value;\n });\n }\n else {\n returnObject = Object.keys(obj).reduce((newObj, key) => {\n newObj[key] =\n typeof obj[key] === 'object'\n ? clone(obj[key], explicit)\n : obj[key];\n return newObj;\n }, {});\n }\n for (const key of explicit) {\n if (key in obj) {\n Object.defineProperty(returnObject, key, {\n enumerable: false,\n value: obj[key],\n });\n }\n }\n return returnObject;\n}\n/**\n * Clones anything. If the item is scalar, no worries, it passes it back. if it\n * is an object, it performs a (fast/loose) clone operation.\n * @param obj - The object to clone\n * @public\n */\nfunction cloneAny(obj) {\n return typeof obj === 'object'\n ? clone(obj)\n : obj;\n}\n/**\n * Get a specific value via dot notation.\n * @param obj - An object to fetch data from\n * @param addr - An \"address\" in dot notation\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction getAt(obj, addr) {\n if (!obj || typeof obj !== 'object')\n return null;\n const segments = addr.split('.');\n let o = obj;\n for (const i in segments) {\n const segment = segments[i];\n if (has(o, segment)) {\n o = o[segment];\n }\n if (+i === segments.length - 1)\n return o;\n if (!o || typeof o !== 'object')\n return null;\n }\n return null;\n}\n/**\n * Determines if the value of a prop that is either present (true) or not\n * present (undefined). For example the prop disabled should disable\n * by just existing, but what if it is set to the string \"false\" — then it\n * should not be disabled.\n * @param value - value to be checked\n * @returns\n * @public\n */\nfunction undefine(value) {\n return value !== undefined && value !== 'false' && value !== false\n ? true\n : undefined;\n}\n/**\n * Defines an object as an initial value.\n * @param obj - Object\n * @returns\n * @public\n */\n/* eslint-disable-next-line @typescript-eslint/ban-types */\nfunction init(obj) {\n return !Object.isFrozen(obj)\n ? Object.defineProperty(obj, '__init', {\n enumerable: false,\n value: true,\n })\n : obj;\n}\n/**\n * Turn any string into a URL/DOM safe string.\n * @public\n */\nfunction slugify(str) {\n return str\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/[^a-z0-9]/g, ' ')\n .trim()\n .replace(/\\s+/g, '-');\n}\n/**\n * Spreads an object or an array, otherwise returns the same value.\n * @param obj - Any value, but will spread objects and arrays\n * @public\n */\nfunction spread(obj, explicit = explicitKeys) {\n if (obj && typeof obj === 'object') {\n if (obj instanceof RegExp)\n return obj;\n if (obj instanceof Date)\n return obj;\n let spread;\n if (Array.isArray(obj)) {\n spread = [...obj];\n }\n else {\n spread = { ...obj };\n }\n // eslint-disable-next-line @typescript-eslint/ban-types\n return applyExplicit(obj, spread, explicit);\n }\n return obj;\n}\n/**\n * Apply non enumerable properties to an object.\n * @param obj - The object to apply non-enumerable properties to\n * @param explicit - An array of non-enumerable properties to apply\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction applyExplicit(original, obj, explicit) {\n for (const key of explicit) {\n if (key in original) {\n Object.defineProperty(obj, key, {\n enumerable: false,\n value: original[key],\n });\n }\n }\n return obj;\n}\n\nexport { assignDeep, camel, clone, cloneAny, dedupe, empty, eq, escapeExp, except, extend, getAt, has, init, isObject, isPojo, isQuotedString, isRecord, kebab, nodeProps, nodeType, only, parseArgs, regexForFormat, rmEscapes, setify, shallowClone, slugify, spread, token, undefine };\n","import { token, slugify, has, cloneAny, init, clone, camel, undefine, eq, kebab, dedupe, parseArgs, getAt, isQuotedString, rmEscapes } from '@formkit/utils';\n\n/**\n * Creates a new dispatcher that allows the addition/removal of middleware\n * functions, and the ability to dispatch a payload to all middleware.\n * @returns FormKitDispatcher\n */\nfunction createDispatcher() {\n const middleware = [];\n let currentIndex = 0;\n const use = (dispatchable) => middleware.push(dispatchable);\n const dispatch = (payload) => {\n const current = middleware[currentIndex];\n if (typeof current === 'function') {\n return current(payload, (explicitPayload) => {\n currentIndex++;\n return dispatch(explicitPayload === undefined ? payload : explicitPayload);\n });\n }\n currentIndex = 0;\n return payload;\n };\n use.dispatch = dispatch;\n use.unshift = (dispatchable) => middleware.unshift(dispatchable);\n use.remove = (dispatchable) => {\n const index = middleware.indexOf(dispatchable);\n if (index > -1)\n middleware.splice(index, 1);\n };\n return use;\n}\n\n/**\n * Creates a new event emitter, each node uses one of these to allow it to emit\n * events to local listeners and tree listeners.\n * @returns FormKitEventEmitter\n */\nfunction createEmitter() {\n const listeners = new Map();\n const receipts = new Map();\n let buffer = undefined;\n const emitter = (node, event) => {\n if (buffer) {\n buffer.set(event.name, [node, event]);\n return;\n }\n if (listeners.has(event.name)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n listeners.get(event.name).forEach((wrapper) => {\n if (event.origin === node || wrapper.modifiers.includes('deep')) {\n wrapper.listener(event);\n }\n });\n }\n if (event.bubble) {\n node.bubble(event);\n }\n };\n /**\n * Add an event listener\n * @param eventName - The name of the event to listen to\n * @param listener - The callback\n * @returns string\n */\n emitter.on = (eventName, listener) => {\n const [event, ...modifiers] = eventName.split('.');\n const receipt = listener.receipt || token();\n const wrapper = {\n modifiers,\n event,\n listener,\n receipt,\n };\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\n listeners.has(event)\n ? listeners.get(event).push(wrapper)\n : listeners.set(event, [wrapper]);\n receipts.has(receipt)\n ? receipts.get(receipt).push(event)\n : receipts.set(receipt, [event]);\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\n return receipt;\n };\n /**\n * Remove an event listener\n * @param listenerOrReceipt - Either a receipt or the callback function.\n */\n emitter.off = (receipt) => {\n var _a;\n if (receipts.has(receipt)) {\n (_a = receipts.get(receipt)) === null || _a === void 0 ? void 0 : _a.forEach((event) => {\n const eventListeners = listeners.get(event);\n if (Array.isArray(eventListeners)) {\n listeners.set(event, eventListeners.filter((wrapper) => wrapper.receipt !== receipt));\n }\n });\n receipts.delete(receipt);\n }\n };\n /**\n * Pause emitting values. Any events emitted while paused will not be emitted\n * but rather \"stored\" — and whichever events are emitted last will be output.\n * For example:\n * pause()\n * emit('foo', 1)\n * emit('foo', 2)\n * emit('bar', 3)\n * emit('bar', 4)\n * play()\n * // would result in\n * emit('foo', 2)\n * emit('bar', 4)\n * Optionally pauses all children as well.\n * @param node - A node to pause all children on.\n */\n emitter.pause = (node) => {\n if (!buffer)\n buffer = new Map();\n if (node) {\n node.walk((child) => child._e.pause());\n }\n };\n /**\n * Release the current event buffer.\n * @param node - A node to unpause all children on.\n */\n emitter.play = (node) => {\n if (!buffer)\n return;\n const events = buffer;\n buffer = undefined;\n events.forEach(([node, event]) => emitter(node, event));\n if (node) {\n node.walk((child) => child._e.play());\n }\n };\n return emitter;\n}\n/**\n * Emit an event from this node.\n * @param node - The node that is emitting\n * @param context - The context of that node\n * @param name - The name of the event\n * @param payload - The payload to emit\n * @returns FormKitNode\n */\nfunction emit$1(node, context, name, payload, // eslint-disable-line @typescript-eslint/explicit-module-boundary-types,\nbubble = true) {\n context._e(node, {\n payload,\n name,\n bubble,\n origin: node,\n });\n return node;\n}\n/**\n * Send an event from the given node up it's ancestor tree.\n * @param node -\n * @param _context -\n * @param event -\n */\nfunction bubble(node, _context, event) {\n if (isNode(node.parent)) {\n node.parent._e(node.parent, event);\n }\n return node;\n}\n/**\n * Adds an event listener to the node for a specific event. The event name is a\n * simple string matching the name of the event to listen to. It can optionally\n * include modifiers like eventName.deep\n * @param node -\n * @param context -\n * @param name -\n * @param listener -\n * @returns FormKitNode\n */\nfunction on(_node, context, name, listener) {\n return context._e.on(name, listener);\n}\n/**\n * Removes an event listener from a node by the returned receipt from .on().\n * @param node - The node to remote the listener from\n * @param context - The context to remove\n * @param receipt - The receipt returned by .on()\n * @returns FormKitNode\n */\nfunction off(node, context, receipt) {\n context._e.off(receipt);\n return node;\n}\n\n/**\n * FormKit's global error handler.\n * @public\n */\nconst errorHandler = createDispatcher();\n/**\n * The default error handler just sets the error as the message.\n */\nerrorHandler((error, next) => {\n if (!error.message)\n error.message = String(`E${error.code}`);\n return next(error);\n});\n/**\n * FormKit's global warning handler.\n * @public\n */\nconst warningHandler = createDispatcher();\nwarningHandler((warning, next) => {\n if (!warning.message)\n warning.message = String(`W${warning.code}`);\n const result = next(warning);\n if (console && typeof console.warn === 'function')\n console.warn(result.message);\n return result;\n});\n/**\n * Globally emits a warning.\n * @param code - The integer error code.\n * @param data - Usually an object of information to include.\n * @public\n */\nfunction warn(code, data = {}) {\n warningHandler.dispatch({ code, data });\n}\n/**\n * Emits an error, generally should result in an exception.\n * @param code - The integer error code.\n * @param data - Usually an object of information to include.\n * @public\n */\nfunction error(code, data = {}) {\n throw Error(errorHandler.dispatch({ code, data }).message);\n}\n\n/**\n * Creates a new FormKitMessage object.\n * @param conf - The message configuration\n * @returns FormKitMessage\n * @public\n */\nfunction createMessage(conf, node) {\n const m = {\n blocking: false,\n key: token(),\n meta: {},\n type: 'state',\n visible: true,\n ...conf,\n };\n if (node && m.value && m.meta.localize !== false) {\n m.value = node.t(m);\n m.meta.locale = node.config.locale;\n }\n return m;\n}\n/**\n * The available traps on the node's store.\n */\nconst storeTraps = {\n apply: applyMessages,\n set: setMessage,\n remove: removeMessage,\n filter: filterMessages,\n reduce: reduceMessages,\n release: releaseBuffer,\n touch: touchMessages,\n};\n/**\n * Creates a new FormKit message store.\n * @returns FormKitStore\n */\nfunction createStore(_buffer = false) {\n const messages = {};\n let node;\n let buffer = _buffer;\n let _b = [];\n const _m = new Map();\n let _r = undefined;\n const store = new Proxy(messages, {\n get(...args) {\n const [_target, property] = args;\n if (property === 'buffer')\n return buffer;\n if (property === '_b')\n return _b;\n if (property === '_m')\n return _m;\n if (property === '_r')\n return _r;\n if (has(storeTraps, property)) {\n return storeTraps[property].bind(null, messages, store, node);\n }\n return Reflect.get(...args);\n },\n set(_t, prop, value) {\n if (prop === '_n') {\n node = value;\n if (_r === '__n')\n releaseMissed(node, store);\n return true;\n }\n else if (prop === '_b') {\n _b = value;\n return true;\n }\n else if (prop === 'buffer') {\n buffer = value;\n return true;\n }\n else if (prop === '_r') {\n _r = value;\n return true;\n }\n error(101, node);\n return false;\n },\n });\n return store;\n}\n/**\n * Adds a new value to a FormKit message bag.\n * @param store - The store itself\n * @param store - The store interface\n * @param node - The node this store belongs to\n * @param message - The message object\n * @returns FormKitStore\n */\nfunction setMessage(messageStore, store, node, message) {\n if (store.buffer) {\n store._b.push([[message]]);\n return store;\n }\n if (messageStore[message.key] !== message) {\n if (typeof message.value === 'string' && message.meta.localize !== false) {\n // Expose the value to translation\n const previous = message.value;\n message.value = node.t(message);\n if (message.value !== previous) {\n message.meta.locale = node.props.locale;\n }\n }\n const e = `message-${has(messageStore, message.key) ? 'updated' : 'added'}`;\n messageStore[message.key] = Object.freeze(node.hook.message.dispatch(message));\n node.emit(e, message);\n }\n return store;\n}\n/**\n * Run through each message in the store, and ensure it has been translated\n * to the proper language. This most frequently happens after a locale change.\n */\nfunction touchMessages(messageStore, store) {\n for (const key in messageStore) {\n const message = { ...messageStore[key] };\n store.set(message);\n }\n}\n/**\n * Remove a message from the store.\n * @param store - The store itself\n * @param store - The store interface\n * @param node - The node this store belongs to\n * @param key - The message key\n * @returns FormKitStore\n */\nfunction removeMessage(messageStore, store, node, key) {\n if (has(messageStore, key)) {\n const message = messageStore[key];\n delete messageStore[key];\n node.emit('message-removed', message);\n }\n if (store.buffer === true) {\n store._b = store._b.filter((buffered) => {\n buffered[0] = buffered[0].filter((m) => m.key !== key);\n return buffered[1] || buffered[0].length;\n });\n }\n return store;\n}\n/**\n * Iterates over all messages removing those that are no longer wanted.\n * @param messageStore - The store itself\n * @param store - The store interface\n * @param node - The node to filter for\n * @param callback - A callback accepting a message and returning a boolean\n * @param type - Pre filtered by a given message type\n */\nfunction filterMessages(messageStore, store, node, callback, type) {\n for (const key in messageStore) {\n const message = messageStore[key];\n if ((!type || message.type === type) && !callback(message)) {\n removeMessage(messageStore, store, node, key);\n }\n }\n}\n/**\n * Reduce the message store to some other generic value.\n * @param messageStore - The store itself\n * @param _store - Unused but curried — the store interface itself\n * @param _node - The node owner of this store\n * @param reducer - The callback that performs the reduction\n * @param accumulator - The initial value\n * @returns\n */\nfunction reduceMessages(messageStore, _store, _node, reducer, accumulator) {\n for (const key in messageStore) {\n const message = messageStore[key];\n accumulator = reducer(accumulator, message);\n }\n return accumulator;\n}\n/**\n *\n * @param messageStore - The store itself\n * @param _store - Unused but curried — the store interface itself\n * @param node - The node owner of this store\n * @param messages - An array of FormKitMessages to apply to this input, or an object of messages to apply to children.\n */\nfunction applyMessages(_messageStore, store, node, messages, clear) {\n if (Array.isArray(messages)) {\n if (store.buffer) {\n store._b.push([messages, clear]);\n return;\n }\n // In this case we are applying messages to this node’s store.\n const applied = new Set(messages.map((message) => {\n store.set(message);\n return message.key;\n }));\n // Remove any messages that were not part of the initial apply:\n if (typeof clear === 'string') {\n store.filter((message) => message.type !== clear || applied.has(message.key));\n }\n else if (typeof clear === 'function') {\n store.filter((message) => !clear(message) || applied.has(message.key));\n }\n }\n else {\n for (const address in messages) {\n const child = node.at(address);\n if (child) {\n child.store.apply(messages[address], clear);\n }\n else {\n missed(node, store, address, messages[address], clear);\n }\n }\n }\n}\n/**\n * Creates an array of message arrays from strings.\n * @param errors - Arrays or objects of form errors or input errors\n * @returns\n * @internal\n */\nfunction createMessages(node, ...errors) {\n const sourceKey = `${node.name}-set`;\n const make = (error) => createMessage({\n key: slugify(error),\n type: 'error',\n value: error,\n meta: { source: sourceKey, autoClear: true },\n });\n return errors\n .filter((m) => !!m)\n .map((errorSet) => {\n if (typeof errorSet === 'string')\n errorSet = [errorSet];\n if (Array.isArray(errorSet)) {\n return errorSet.map((error) => make(error));\n }\n else {\n const errors = {};\n for (const key in errorSet) {\n if (Array.isArray(errorSet[key])) {\n errors[key] = errorSet[key].map((error) => make(error));\n }\n else {\n errors[key] = [make(errorSet[key])];\n }\n }\n return errors;\n }\n });\n}\n/**\n *\n * @param store - The store to apply this missed applications.\n * @param address - The address that was missed (a node path that didn't yet exist)\n * @param messages - The messages that should have been applied.\n * @param clear - The clearing function (if any)\n */\nfunction missed(node, store, address, messages, clear) {\n var _a;\n const misses = store._m;\n if (!misses.has(address))\n misses.set(address, []);\n // The created receipt\n if (!store._r)\n store._r = releaseMissed(node, store);\n (_a = misses.get(address)) === null || _a === void 0 ? void 0 : _a.push([messages, clear]);\n}\n/**\n * Releases messages that were applied to a child via parent, but the child did\n * not exist. Once the child does exist, the created event for that child will\n * bubble to this point, and any stored applications will be applied serially.\n * @param store - The store object.\n * @returns\n */\nfunction releaseMissed(node, store) {\n return node.on('child.deep', ({ payload: child }) => {\n store._m.forEach((misses, address) => {\n if (node.at(address) === child) {\n misses.forEach(([messages, clear]) => {\n child.store.apply(messages, clear);\n });\n store._m.delete(address);\n }\n });\n // If all the stored misses were applied, remove the listener.\n if (store._m.size === 0 && store._r) {\n node.off(store._r);\n store._r = undefined;\n }\n });\n}\n/**\n * Iterates over all buffered messages and applies them in sequence.\n * @param messageStore - The store itself\n * @param store - The store interface\n * @param node - The node to filter for\n */\nfunction releaseBuffer(_messageStore, store) {\n store.buffer = false;\n store._b.forEach(([messages, clear]) => store.apply(messages, clear));\n store._b = [];\n}\n\n/**\n * Creates a new ledger for use on a single node's context.\n * @returns\n */\nfunction createLedger() {\n const ledger = {};\n let n;\n return {\n count: (...args) => createCounter(n, ledger, ...args),\n init(node) {\n n = node;\n node.on('message-added.deep', add(ledger, 1));\n node.on('message-removed.deep', add(ledger, -1));\n },\n merge: (child) => merge(n, ledger, child),\n settled(counterName) {\n return has(ledger, counterName)\n ? ledger[counterName].promise\n : Promise.resolve();\n },\n unmerge: (child) => merge(n, ledger, child, true),\n value(counterName) {\n return has(ledger, counterName) ? ledger[counterName].count : 0;\n },\n };\n}\n/**\n * Creates a new counter object in the counting ledger.\n * @param ledger - The actual ledger storage object\n * @param counterName - The name of the counter, can be arbitrary\n * @param condition - The condition function (or string) that filters messages\n * @param initialValue - The initial counter value\n * @returns\n */\nfunction createCounter(node, ledger, counterName, condition, increment = 0) {\n condition = parseCondition(condition || counterName);\n if (!has(ledger, counterName)) {\n const counter = {\n condition,\n count: 0,\n name: counterName,\n node,\n promise: Promise.resolve(),\n resolve: () => { }, // eslint-disable-line @typescript-eslint/no-empty-function\n };\n ledger[counterName] = counter;\n increment = node.store.reduce((sum, m) => sum + counter.condition(m) * 1, increment);\n node.each((child) => {\n child.ledger.count(counter.name, counter.condition);\n increment += child.ledger.value(counter.name);\n });\n }\n return count(ledger[counterName], increment).promise;\n}\n/**\n * We parse the condition to allow flexibility in how counters are specified.\n * @param condition - The condition that, if true, allows a message to change a counter's value\n * @returns\n */\nfunction parseCondition(condition) {\n if (typeof condition === 'function') {\n return condition;\n }\n return (m) => m.type === condition;\n}\n/**\n * Perform a counting action on the a given counter object of the ledger.\n * @param counter - A counter object\n * @param increment - The amount by which we are changing the count value\n * @returns\n */\nfunction count(counter, increment) {\n const initial = counter.count;\n const post = counter.count + increment;\n counter.count = post;\n if (initial === 0 && post !== 0) {\n counter.node.emit(`unsettled:${counter.name}`, counter.count, false);\n counter.promise = new Promise((r) => (counter.resolve = r));\n }\n else if (initial !== 0 && post === 0) {\n counter.node.emit(`settled:${counter.name}`, counter.count, false);\n counter.resolve();\n }\n counter.node.emit(`count:${counter.name}`, counter.count, false);\n return counter;\n}\n/**\n * Returns a function to be used as an event listener for message events.\n * @param ledger - A ledger to operate on\n * @param delta - The amount to add or subtract\n * @returns\n */\nfunction add(ledger, delta) {\n return (e) => {\n for (const name in ledger) {\n const counter = ledger[name];\n if (counter.condition(e.payload)) {\n count(counter, delta);\n }\n }\n };\n}\n/**\n * Given a child node, add the parent node's counters to the child and then\n * rectify the upstream ledger counts. Generally used when attaching a child\n * to an already counted tree.\n * @param parent - The parent that is \"receiving\" the child\n * @param ledger - The ledger object\n * @param child - The child (can be a subtree) that is being attached\n * @param remove - If the merge is removing instead of adding\n */\nfunction merge(parent, ledger, child, remove = false) {\n for (const key in ledger) {\n const condition = ledger[key].condition;\n if (!remove)\n child.ledger.count(key, condition);\n const increment = child.ledger.value(key) * (remove ? -1 : 1);\n if (!parent)\n continue;\n do {\n parent.ledger.count(key, condition, increment);\n parent = parent.parent;\n } while (parent);\n }\n}\n\n/**\n * A global registry of nodes by their alias or name (if root).\n */\nconst registry = new Map();\nconst reflected = new Map();\n/**\n * An event emitter for registered/set/unset nodes\n */\nconst emit = createEmitter();\n/**\n * Receipts of listeners.\n */\nconst receipts = [];\n/**\n * Registers a node to the registry _if_ the node is a root node, _or_ if the\n * node has an explicit node.props.alias. If these two things are not true\n * then no node is registered (idempotent).\n *\n * @param node - A node to register\n * @public\n */\nfunction register(node) {\n if (node.props.id) {\n registry.set(node.props.id, node);\n reflected.set(node, node.props.id);\n emit(node, {\n payload: node,\n name: node.props.id,\n bubble: false,\n origin: node,\n });\n }\n}\n/**\n * Deregister a node from the registry.\n * @param node - A node to remove\n * @public\n */\nfunction deregister(node) {\n if (reflected.has(node)) {\n const id = reflected.get(node); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n reflected.delete(node);\n registry.delete(id);\n emit(node, {\n payload: null,\n name: id,\n bubble: false,\n origin: node,\n });\n }\n}\n/**\n * Get a node by a particular id.\n * @param node - Get a node by a given id\n * @public\n */\nfunction getNode$1(id) {\n return registry.get(id);\n}\n/**\n * Reset the entire registry.\n * @public\n */\nfunction resetRegistry() {\n registry.forEach((node) => {\n deregister(node);\n });\n receipts.forEach((receipt) => emit.off(receipt));\n}\n/**\n *\n * @param id - An id to watch\n * @param callback - A callback to notify when the node is set or removed.\n * @public\n */\nfunction watchRegistry(id, callback) {\n // register a listener\n receipts.push(emit.on(id, callback));\n}\n\n/**\n * Applies a given config change to the node.\n * @param node - The node to check for config change\n * @param prop - Checks if this property exists in the local config or props\n * @param value - The value to set\n * @internal\n */\nfunction configChange(node, prop, value) {\n // When we return false, node.walk will not continue into that child.\n let usingFallback = true;\n !(prop in node.config._t)\n ? node.emit(`config:${prop}`, value, false)\n : (usingFallback = false);\n if (!(prop in node.props)) {\n node.emit('prop', { prop, value });\n node.emit(`prop:${prop}`, value);\n }\n return usingFallback;\n}\n/**\n * Creates a new instance of a global configuration option. This object is\n * essentially just a FormKitOption object, but it can be used as the root for\n * FormKitConfig's proxy and retain event \"emitting\".\n *\n * @param options - FormKit node options to be used globally.\n * @public\n */\nfunction createConfig$1(options = {}) {\n const nodes = new Set();\n const target = {\n ...options,\n ...{\n _add: (node) => nodes.add(node),\n _rm: (node) => nodes.delete(node),\n },\n };\n const rootConfig = new Proxy(target, {\n set(t, prop, value, r) {\n if (typeof prop === 'string') {\n nodes.forEach((node) => configChange(node, prop, value));\n }\n return Reflect.set(t, prop, value, r);\n },\n });\n return rootConfig;\n}\n\n/**\n * Submits a FormKit form programmatically.\n * @param id - The id of the form\n * @public\n */\nfunction submitForm(id) {\n const formElement = document.getElementById(id);\n if (formElement instanceof HTMLFormElement) {\n const event = new Event('submit', { cancelable: true, bubbles: true });\n formElement.dispatchEvent(event);\n return;\n }\n warn(151, id);\n}\n\n/**\n * Clear all state and error messages.\n */\nfunction clearState(node) {\n const clear = (n) => {\n for (const key in n.store) {\n const message = n.store[key];\n if (message.type === 'error' ||\n (message.type === 'ui' && key === 'incomplete')) {\n n.store.remove(key);\n }\n else if (message.type === 'state') {\n n.store.set({ ...message, value: false });\n }\n }\n };\n clear(node);\n node.walk(clear);\n}\n/**\n * Resets an input to it’s \"initial\" value — if the input is a group or list it\n * resets all the children as well.\n * @param id - The id of an input to reset\n * @returns\n * @public\n */\nfunction reset(id, resetTo) {\n const node = typeof id === 'string' ? getNode$1(id) : id;\n if (node) {\n const initial = (n) => cloneAny(n.props.initial) ||\n (n.type === 'group' ? {} : n.type === 'list' ? [] : undefined);\n // pause all events in this tree.\n node._e.pause(node);\n // Set it back to basics\n node.input(cloneAny(resetTo) || initial(node), false);\n // Set children back to basics in case they were additive (had their own value for example)\n node.walk((child) => child.input(initial(child), false));\n // Finally we need to lay any values back on top (if it is a group/list) since group values\n // take precedence over child values.\n const finalInit = initial(node);\n node.input(typeof finalInit === 'object'\n ? cloneAny(resetTo) || init(finalInit)\n : finalInit, false);\n // release the events.\n node._e.play(node);\n clearState(node);\n node.emit('reset', node);\n return node;\n }\n warn(152, id);\n return;\n}\n\n/**\n * Default configuration options.\n */\nconst defaultConfig = {\n delimiter: '.',\n delay: 0,\n locale: 'en',\n rootClasses: (key) => ({ [`formkit-${kebab(key)}`]: true }),\n};\n/**\n * If a node’s name is set to useIndex, it replaces the node’s name with the\n * index of the node relative to its parent’s children.\n * @public\n */\nconst useIndex = Symbol('index');\n/**\n * When propagating values up a tree, this value indicates the child should be\n * removed.\n * @public\n */\nconst valueRemoved = Symbol('removed');\n/**\n * When propagating values up a tree, this value indicates the child should be\n * moved.\n * @public\n */\nconst valueMoved = Symbol('moved');\n/**\n * When creating a new node and having its value injected directly at a specific\n * location.\n * @public\n */\nconst valueInserted = Symbol('inserted');\n/**\n * A simple type guard to determine if the context being evaluated is a list\n * type.\n * @param arg -\n * @returns arg is FormKitListContext\n * @public\n */\nfunction isList(arg) {\n return arg.type === 'list' && Array.isArray(arg._value);\n}\n/**\n * Determine if a given object is a node\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction isNode(node) {\n return node && typeof node === 'object' && node.__FKNode__ === true;\n}\n/**\n * The setter you are trying to access is invalid.\n */\nconst invalidSetter = (node, _context, property) => {\n error(102, [node, property]);\n};\nconst traps = {\n _c: trap(getContext, invalidSetter, false),\n add: trap(addChild),\n addProps: trap(addProps),\n address: trap(getAddress, invalidSetter, false),\n at: trap(getNode),\n bubble: trap(bubble),\n clearErrors: trap(clearErrors$1),\n calm: trap(calm),\n config: trap(false),\n define: trap(define),\n disturb: trap(disturb),\n destroy: trap(destroy),\n hydrate: trap(hydrate),\n index: trap(getIndex, setIndex, false),\n input: trap(input),\n each: trap(eachChild),\n emit: trap(emit$1),\n find: trap(find),\n on: trap(on),\n off: trap(off),\n parent: trap(false, setParent),\n plugins: trap(false),\n remove: trap(removeChild),\n root: trap(getRoot, invalidSetter, false),\n reset: trap(resetValue),\n resetConfig: trap(resetConfig),\n setErrors: trap(setErrors$1),\n submit: trap(submit),\n t: trap(text),\n use: trap(use),\n name: trap(getName, false, false),\n walk: trap(walkTree),\n};\n/**\n * These are all the available \"traps\" for a given node. You can think of these\n * a little bit like methods, but they are really Proxy interceptors.\n */\nfunction createTraps() {\n return new Map(Object.entries(traps));\n}\n/**\n * Creates a getter/setter trap and curries the context/node pair\n * @param getter - The getter function\n * @param setter - The setter function\n * @param curryGetter - Indicates if the getter should be curried or not\n * @returns\n */\nfunction trap(getter, setter, curryGetter = true) {\n return {\n get: getter\n ? (node, context) => curryGetter\n ? (...args) => getter(node, context, ...args)\n : getter(node, context)\n : false,\n set: setter !== undefined ? setter : invalidSetter.bind(null),\n };\n}\n/**\n * Create all of the node's hook dispatchers.\n */\nfunction createHooks() {\n const hooks = new Map();\n return new Proxy(hooks, {\n get(_, property) {\n if (!hooks.has(property)) {\n hooks.set(property, createDispatcher());\n }\n return hooks.get(property);\n },\n });\n}\n/**\n * This is a simple integer counter of every createName() where the name needs\n * to be generated.\n */\nlet nameCount = 0;\n/**\n * This is a simple integer counter of every default id created.\n */\nlet idCount = 0;\n/**\n * Reports the global number of node registrations, useful for deterministic\n * node naming.\n * @public\n */\nfunction resetCount() {\n nameCount = 0;\n idCount = 0;\n}\n/**\n * Create a name based dictionary of all children in an array.\n * @param children -\n * @public\n */\nfunction names(children) {\n return children.reduce((named, child) => Object.assign(named, { [child.name]: child }), {});\n}\n/**\n * This node is responsible for deterministically generating an id for this\n * node. This cannot just be a random id, it _must_ be deterministic to ensure\n * re-hydration of the form (like post-SSR) produces the same names/ids.\n *\n * @param options -\n * @returns string\n */\nfunction createName(options) {\n var _a, _b;\n if (((_a = options.parent) === null || _a === void 0 ? void 0 : _a.type) === 'list')\n return useIndex;\n return options.name || `${((_b = options.props) === null || _b === void 0 ? void 0 : _b.type) || 'input'}_${++nameCount}`;\n}\n/**\n * Creates the initial value for a node based on the options passed in and the\n * type of the input.\n * @param options -\n * @param type -\n * @returns\n * @internal\n */\nfunction createValue(options) {\n if (options.type === 'group') {\n return init(options.value &&\n typeof options.value === 'object' &&\n !Array.isArray(options.value)\n ? options.value\n : {});\n }\n else if (options.type === 'list') {\n return init(Array.isArray(options.value) ? options.value : []);\n }\n return options.value;\n}\n/**\n * Sets the internal value of the node.\n * @param node -\n * @param context -\n * @param value -\n * @returns T\n */\nfunction input(node, context, value, async = true) {\n context._value = validateInput(node, node.hook.input.dispatch(value));\n node.emit('input', context._value);\n if (context.isSettled)\n node.disturb();\n if (async) {\n if (context._tmo)\n clearTimeout(context._tmo);\n context._tmo = setTimeout(commit, node.props.delay, node, context);\n }\n else {\n commit(node, context);\n }\n return context.settled;\n}\n/**\n * Validate that the current input is allowed.\n * @param type - The type of node (input, list, group)\n * @param value - The value that is being set\n */\nfunction validateInput(node, value) {\n switch (node.type) {\n // Inputs are allowed to have any type\n case 'input':\n break;\n case 'group':\n if (!value || typeof value !== 'object')\n error(107, [node, value]);\n break;\n case 'list':\n if (!Array.isArray(value))\n error(108, [node, value]);\n break;\n }\n return value;\n}\n/**\n * Commits the working value to the node graph as the value of this node.\n * @param node -\n * @param context -\n * @param calm -\n * @param hydrate -\n */\nfunction commit(node, context, calm = true, hydrate = true) {\n context._value = context.value = node.hook.commit.dispatch(context._value);\n if (node.type !== 'input' && hydrate)\n node.hydrate();\n node.emit('commit', context.value);\n if (calm)\n node.calm();\n}\n/**\n * Perform a modification to a single element of a parent aggregate value. This\n * is only performed on the pre-committed value (_value), although typically\n * the value and _value are both linked in memory.\n * @param context -\n * @param name -\n * @param value -\n */\nfunction partial(context, { name, value, from }) {\n if (Object.isFrozen(context._value))\n return;\n if (isList(context)) {\n const insert = value === valueRemoved\n ? []\n : value === valueMoved && typeof from === 'number'\n ? context._value.splice(from, 1)\n : [value];\n context._value.splice(name, value === valueMoved || from === valueInserted ? 0 : 1, ...insert);\n return;\n }\n // In this case we know for sure we're dealing with a group, TS doesn't\n // know that however, so we use some unpleasant casting here\n if (value !== valueRemoved) {\n context._value[name] = value;\n }\n else {\n delete context._value[name];\n }\n}\n/**\n * Pass values down to children by calling hydrate on them.\n * @param parent -\n * @param child -\n */\nfunction hydrate(node, context) {\n const _value = context._value;\n context.children.forEach((child) => {\n if (typeof _value !== 'object')\n return;\n // if (has(context._value as FormKitGroupValue, child.name)) {\n if (child.name in _value) {\n // In this case, the parent has a value to give to the child, so we\n // perform a down-tree synchronous input which will cascade values down\n // and then ultimately back up.\n const childValue = child.type !== 'input' ||\n (_value[child.name] && typeof _value[child.name] === 'object')\n ? init(_value[child.name])\n : _value[child.name];\n child.input(childValue, false);\n }\n else {\n if (node.type !== 'list' || typeof child.name === 'number') {\n // In this case, the parent’s values have no knowledge of the child\n // value — this typically occurs on the commit at the end of addChild()\n // we need to create a value reservation for this node’s name. This is\n // especially important when dealing with lists where index matters.\n partial(context, { name: child.name, value: child.value });\n }\n if (!_value.__init) {\n // In this case, someone has explicitly set the value to an empty object\n // with node.input({}) so we do not define the __init property:\n if (child.type === 'group')\n child.input({}, false);\n else if (child.type === 'list')\n child.input([], false);\n else\n child.input(undefined, false);\n }\n }\n });\n return node;\n}\n/**\n * Disturbs the state of a node from settled to unsettled — creating appropriate\n * promises and resolutions.\n * @param node -\n * @param context -\n */\nfunction disturb(node, context) {\n var _a;\n if (context._d <= 0) {\n context.isSettled = false;\n node.emit('settled', false, false);\n context.settled = new Promise((resolve) => {\n context._resolve = resolve;\n });\n if (node.parent)\n (_a = node.parent) === null || _a === void 0 ? void 0 : _a.disturb();\n }\n context._d++;\n return node;\n}\n/**\n * Calms the given node's disturbed state by one.\n * @param node -\n * @param context -\n */\nfunction calm(node, context, value) {\n var _a;\n if (value !== undefined && node.type !== 'input') {\n partial(context, value);\n // Commit the value up, but do not hydrate back down\n return commit(node, context, true, false);\n }\n if (context._d > 0)\n context._d--;\n if (context._d === 0) {\n context.isSettled = true;\n node.emit('settled', true, false);\n if (node.parent)\n (_a = node.parent) === null || _a === void 0 ? void 0 : _a.calm({ name: node.name, value: context.value });\n if (context._resolve)\n context._resolve(context.value);\n }\n}\n/**\n * This node is being removed and needs to be cleaned up.\n * @param node - The node to shut down\n * @param context - The context to clean up\n */\nfunction destroy(node, context) {\n node.emit('destroying', node);\n // flush all messages out\n node.store.filter(() => false);\n if (node.parent) {\n node.parent.remove(node);\n }\n deregister(node);\n context._value = context.value = undefined;\n node.emit('destroyed', node);\n}\n/**\n * Defines the current input type concretely.\n * @param definition - The definition of the current input type.\n */\nfunction define(node, context, definition) {\n // Assign the type\n context.type = definition.type;\n // Assign the definition\n context.props.definition = clone(definition);\n // Ensure the type is seeded with the `__init` value.\n context.value = context._value = createValue({\n type: node.type,\n value: context.value,\n });\n /**\n * If the user has a typename defined, use it here.\n */\n if (definition.forceTypeProp) {\n if (node.props.type)\n node.props.originalType = node.props.type;\n context.props.type = definition.forceTypeProp;\n }\n /**\n * If the input is part of a family of inputs, add that prop.\n */\n if (definition.family) {\n context.props.family = definition.family;\n }\n // Apply any input features before resetting the props.\n if (definition.features) {\n definition.features.forEach((feature) => feature(node));\n }\n // Its possible that input-defined \"props\" have ended up in the context attrs\n // these should be moved back out of the attrs object.\n if (definition.props) {\n node.addProps(definition.props);\n }\n node.emit('defined', definition);\n}\n/**\n * Adds props to a given node by stripping them out of the node.props.attrs and\n * then adding them to the nodes.\n *\n * @param node - The node to add props to\n * @param context - The internal context object\n * @param props - An array of prop strings (in camelCase!)\n */\nfunction addProps(node, context, props) {\n var _a;\n if (node.props.attrs) {\n const attrs = { ...node.props.attrs };\n // Temporarily disable prop emits\n node.props._emit = false;\n for (const attr in attrs) {\n const camelName = camel(attr);\n if (props.includes(camelName)) {\n node.props[camelName] = attrs[attr];\n delete attrs[attr];\n }\n }\n const initial = cloneAny(context._value);\n node.props.initial =\n node.type !== 'input' ? init(initial) : initial;\n // Re-enable prop emits\n node.props._emit = true;\n node.props.attrs = attrs;\n if (node.props.definition) {\n node.props.definition.props = [\n ...(((_a = node.props.definition) === null || _a === void 0 ? void 0 : _a.props) || []),\n ...props,\n ];\n }\n }\n node.emit('added-props', props);\n return node;\n}\n/**\n * (node.add) Adds a child to the node.\n * @param context -\n * @param node -\n * @param child -\n */\nfunction addChild(parent, parentContext, child, listIndex) {\n if (parent.type === 'input')\n error(100, parent);\n if (child.parent && child.parent !== parent) {\n child.parent.remove(child);\n }\n // Synchronously set the initial value on the parent\n if (!parentContext.children.includes(child)) {\n if (listIndex !== undefined && parent.type === 'list') {\n // Inject the child:\n parentContext.children.splice(listIndex, 0, child);\n if (Array.isArray(parent.value) &&\n parent.value.length < parentContext.children.length) {\n // When adding an node or value to a list it is absolutely critical to\n // know if, at the moment of injection, the parent’s value or the node\n // children are the source of truth. For example, if a user pushes or\n // splices a new value onto the lists’s array then we want to use that\n // value as the value of the new node, but if a user adds a node to the\n // list then we want the node’s value. In this specific case, we\n // assume (due to length) that a new node was injected into the list, so\n // we want that new node’s value injected into the parent list value.\n parent.disturb().calm({\n name: listIndex,\n value: child.value,\n from: valueInserted,\n });\n }\n }\n else {\n parentContext.children.push(child);\n }\n if (!child.isSettled)\n parent.disturb();\n }\n if (child.parent !== parent) {\n child.parent = parent;\n // In this edge case middleware changed the parent assignment so we need to\n // re-add the child\n if (child.parent !== parent) {\n parent.remove(child);\n child.parent.add(child);\n return parent;\n }\n }\n else {\n // When a parent is properly assigned, we inject the parent's plugins on the\n // child.\n child.use(parent.plugins);\n }\n // Finally we call commit here, which sub-calls hydrate(), hydrate() will\n // resolve any conflict between the parent and child values, and also ensure\n // proper \"placeholders\" are made on the parent.\n commit(parent, parentContext, false);\n parent.ledger.merge(child);\n parent.emit('child', child);\n return parent;\n}\n/**\n * The setter for node.parent = FormKitNode\n * @param _context -\n * @param node -\n * @param _property -\n * @param parent -\n * @returns boolean\n */\nfunction setParent(child, context, _property, parent) {\n if (isNode(parent)) {\n if (child.parent && child.parent !== parent) {\n child.parent.remove(child);\n }\n context.parent = parent;\n child.resetConfig();\n !parent.children.includes(child)\n ? parent.add(child)\n : child.use(parent.plugins);\n return true;\n }\n if (parent === null) {\n context.parent = null;\n return true;\n }\n return false;\n}\n/**\n * (node.remove) Removes a child from the node.\n * @param context -\n * @param node -\n * @param child -\n */\nfunction removeChild(node, context, child) {\n const childIndex = context.children.indexOf(child);\n if (childIndex !== -1) {\n if (child.isSettled)\n node.disturb();\n context.children.splice(childIndex, 1);\n // If an ancestor uses the preserve prop, then we are expected to not remove\n // our values on this node either, see #53\n let preserve = undefine(child.props.preserve);\n let parent = child.parent;\n while (preserve === undefined && parent) {\n preserve = undefine(parent.props.preserve);\n parent = parent.parent;\n }\n if (!preserve) {\n node.calm({\n name: node.type === 'list' ? childIndex : child.name,\n value: valueRemoved,\n });\n }\n else {\n node.calm();\n }\n child.parent = null;\n // Remove the child from the config. Is this weird? Yes. Is it ok? Yes.\n child.config._rmn = child;\n }\n node.ledger.unmerge(child);\n return node;\n}\n/**\n * Iterate over each immediate child and perform a callback.\n * @param context -\n * @param _node -\n * @param callback -\n */\nfunction eachChild(_node, context, callback) {\n context.children.forEach((child) => callback(child));\n}\n/**\n * Walk all nodes below this one and execute a callback.\n * @param _node -\n * @param context -\n * @param callback -\n */\nfunction walkTree(_node, context, callback, stopIfFalse = false) {\n context.children.forEach((child) => {\n if (callback(child) !== false || !stopIfFalse) {\n child.walk(callback, stopIfFalse);\n }\n });\n}\n/**\n * Set the configuration options of the node and it's subtree.\n * @param node -\n * @param context -\n * @param _property -\n * @param config -\n */\nfunction resetConfig(node, context) {\n const parent = node.parent || undefined;\n context.config = createConfig(node.config._t, parent);\n node.walk((n) => n.resetConfig());\n}\n/**\n * Adds a plugin to the node, it’s children, and executes it.\n * @param context -\n * @param node -\n * @param plugin -\n * @public\n */\nfunction use(node, context, plugin, run = true, library = true) {\n if (Array.isArray(plugin) || plugin instanceof Set) {\n plugin.forEach((p) => use(node, context, p));\n return node;\n }\n if (!context.plugins.has(plugin)) {\n if (library && typeof plugin.library === 'function')\n plugin.library(node);\n // When plugins return false, they are never added as to the plugins Set\n // meaning they only ever have access to the single node they were added on.\n if (run && plugin(node) !== false) {\n context.plugins.add(plugin);\n node.children.forEach((child) => child.use(plugin));\n }\n }\n return node;\n}\n/**\n * Moves a node in the parent’s children to the given index.\n * @param node -\n * @param _context -\n * @param _property -\n * @param setIndex -\n */\nfunction setIndex(node, _context, _property, setIndex) {\n if (isNode(node.parent)) {\n const children = node.parent.children;\n const index = setIndex >= children.length\n ? children.length - 1\n : setIndex < 0\n ? 0\n : setIndex;\n const oldIndex = children.indexOf(node);\n if (oldIndex === -1)\n return false;\n children.splice(oldIndex, 1);\n children.splice(index, 0, node);\n node.parent.children = children;\n if (node.parent.type === 'list')\n node.parent\n .disturb()\n .calm({ name: index, value: valueMoved, from: oldIndex });\n return true;\n }\n return false;\n}\n/**\n * Retrieves the index of a node from the parent’s children.\n * @param node -\n */\nfunction getIndex(node) {\n if (node.parent) {\n const index = [...node.parent.children].indexOf(node);\n // If the index is currently -1 then the node isnt finished booting, so it\n // must be the next node.\n return index === -1 ? node.parent.children.length : index;\n }\n return -1;\n}\n/**\n * Retrieves the context object of a given node. This is intended to be a\n * private trap and should absolutely not be used in plugins or user-land code.\n * @param _node -\n * @param context -\n */\nfunction getContext(_node, context) {\n return context;\n}\n/**\n * Get the name of the current node, allowing for slight mutations.\n * @param node -\n * @param context -\n */\nfunction getName(node, context) {\n var _a;\n if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.type) === 'list')\n return node.index;\n return context.name !== useIndex ? context.name : node.index;\n}\n/**\n * Returns the address of the current node.\n * @param node -\n * @param context -\n */\nfunction getAddress(node, context) {\n return context.parent\n ? context.parent.address.concat([node.name])\n : [node.name];\n}\n/**\n * Fetches a node from the tree by its address.\n * @param context -\n * @param node -\n * @param location -\n * @returns FormKitNode\n */\nfunction getNode(node, _context, locator) {\n const address = typeof locator === 'string' ? locator.split(node.config.delimiter) : locator;\n if (!address.length)\n return undefined;\n const first = address[0];\n let pointer = node.parent;\n if (!pointer) {\n // This address names the root node, remove it to get child name:\n if (String(address[0]) === String(node.name))\n address.shift();\n // All root nodes start at themselves ultimately:\n pointer = node;\n }\n // Any addresses starting with $parent should discard it\n if (first === '$parent')\n address.shift();\n while (pointer && address.length) {\n const name = address.shift();\n switch (name) {\n case '$root':\n pointer = node.root;\n break;\n case '$parent':\n pointer = pointer.parent;\n break;\n case '$self':\n pointer = node;\n break;\n default:\n pointer =\n pointer.children.find((c) => String(c.name) === String(name)) ||\n select(pointer, name);\n }\n }\n return pointer || undefined;\n}\n/**\n * Perform selections on a subtree using the address \"selector\" methods.\n * @param node -\n * @param selector -\n * @returns FormKitNode | undefined\n */\nfunction select(node, selector) {\n const matches = String(selector).match(/^(find)\\((.*)\\)$/);\n if (matches) {\n const [, action, argStr] = matches;\n const args = argStr.split(',').map((arg) => arg.trim());\n switch (action) {\n case 'find':\n return node.find(args[0], args[1]);\n default:\n return undefined;\n }\n }\n return undefined;\n}\n/**\n * Perform a breadth first search and return the first instance of a node that\n * is found in the subtree or undefined.\n * @param node - The node to start the search on/under\n * @param _context - The context object\n * @param searchTerm - The term we are searching for\n * @param searcher - Either a key to search on, or a function\n * @returns\n */\nfunction find(node, _context, searchTerm, searcher) {\n return bfs(node, searchTerm, searcher);\n}\n/**\n * Perform a breadth-first-search on a node subtree and locate the first\n * instance of a match.\n * @param node -\n * @param name -\n * @returns FormKitNode\n * @public\n */\nfunction bfs(tree, searchValue, searchGoal = 'name') {\n const search = typeof searchGoal === 'string'\n ? (n) => n[searchGoal] == searchValue // non-strict comparison is intentional\n : searchGoal;\n const stack = [tree];\n while (stack.length) {\n const node = stack.shift(); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n if (search(node, searchValue))\n return node;\n stack.push(...node.children);\n }\n return undefined;\n}\n/**\n * Get the root node of the tree.\n */\nfunction getRoot(n) {\n let node = n;\n while (node.parent) {\n node = node.parent;\n }\n return node;\n}\n/**\n * Creates a new configuration option.\n * @param parent -\n * @param configOptions -\n * @returns FormKitConfig\n */\nfunction createConfig(target = {}, parent) {\n let node = undefined;\n return new Proxy(target, {\n get(...args) {\n const prop = args[1];\n if (prop === '_t')\n return target;\n const localValue = Reflect.get(...args);\n // Check our local values first\n if (localValue !== undefined)\n return localValue;\n // Then check our parent values next\n if (parent) {\n const parentVal = parent.config[prop];\n if (parentVal !== undefined)\n return parentVal;\n }\n if (target.rootConfig && typeof prop === 'string') {\n const rootValue = target.rootConfig[prop];\n if (rootValue !== undefined)\n return rootValue;\n }\n // The default delay value should be 20\n if (prop === 'delay' && (node === null || node === void 0 ? void 0 : node.type) === 'input')\n return 20;\n // Finally check the default values\n return defaultConfig[prop];\n },\n set(...args) {\n const prop = args[1];\n const value = args[2];\n if (prop === '_n') {\n node = value;\n if (target.rootConfig)\n target.rootConfig._add(node);\n return true;\n }\n if (prop === '_rmn') {\n if (target.rootConfig)\n target.rootConfig._rm(node);\n node = undefined;\n return true;\n }\n if (!eq(target[prop], value, false)) {\n const didSet = Reflect.set(...args);\n if (node) {\n node.emit(`config:${prop}`, value, false);\n configChange(node, prop, value);\n // Walk the node tree and notify of config/prop changes where relevant\n node.walk((n) => configChange(n, prop, value), true);\n }\n return didSet;\n }\n return true;\n },\n });\n}\n/**\n * Given a string of text, expose it for modification, translation, or full\n * replacement.\n * @param key - A message key, or generic string of text\n * @returns\n */\nfunction text(node, _context, key, type = 'ui') {\n const fragment = typeof key === 'string' ? { key, value: key, type } : key;\n const value = node.hook.text.dispatch(fragment);\n node.emit('text', value, false);\n return value.value;\n}\n/**\n * Submits the nearest ancestor that is a FormKit \"form\". It determines which\n * node is a form by locating an ancestor where node.props.isForm = true.\n * @param node - The node to initiate the submit\n */\nfunction submit(node) {\n const name = node.name;\n do {\n if (node.props.isForm === true)\n break;\n if (!node.parent)\n error(106, name);\n node = node.parent;\n } while (node);\n if (node.props.id) {\n submitForm(node.props.id);\n }\n}\n/**\n * Reset to the original value.\n * @param node - The node to reset\n * @param _context - The context\n * @param value - The value to reset to\n */\nfunction resetValue(node, _context, value) {\n return reset(node, value);\n}\n/**\n * Sets errors on the node and optionally its children.\n * @param node - The node to set errors on\n * @param _context - Not used\n * @param localErrors - An array of errors to set on this node\n * @param childErrors - An object of name to errors to set on children.\n */\nfunction setErrors$1(node, _context, localErrors, childErrors) {\n const sourceKey = `${node.name}-set`;\n const errors = node.hook.setErrors.dispatch({ localErrors, childErrors });\n createMessages(node, errors.localErrors, errors.childErrors).forEach((errors) => {\n node.store.apply(errors, (message) => message.meta.source === sourceKey);\n });\n return node;\n}\n/**\n * Clears errors on the node and optionally its children.\n * @param node - The node to set errors on\n * @param _context - Not used\n * @param localErrors - An array of errors to set on this node\n * @param childErrors - An object of name to errors to set on children.\n */\nfunction clearErrors$1(node, context, clearChildErrors = true, sourceKey) {\n setErrors$1(node, context, []);\n if (clearChildErrors) {\n sourceKey = sourceKey || `${node.name}-set`;\n node.walk((child) => {\n child.store.filter((message) => {\n return !(message.type === 'error' &&\n message.meta &&\n message.meta.source === sourceKey);\n });\n });\n }\n return node;\n}\n/**\n * Middleware to assign default prop values as issued by core.\n * @param node - The node being registered\n * @param next - Calls the next middleware.\n * @returns\n */\nfunction defaultProps(node) {\n if (!has(node.props, 'id'))\n node.props.id = `input_${idCount++}`;\n return node;\n}\n/**\n * @param options -\n * @param config -\n */\nfunction createProps(initial) {\n const props = {\n initial: typeof initial === 'object' ? cloneAny(initial) : initial,\n };\n let node;\n let isEmitting = true;\n return new Proxy(props, {\n get(...args) {\n const [_t, prop] = args;\n if (has(props, prop))\n return Reflect.get(...args);\n if (node && typeof prop === 'string' && node.config[prop] !== undefined)\n return node.config[prop];\n return undefined;\n },\n set(target, property, originalValue, receiver) {\n if (property === '_n') {\n node = originalValue;\n return true;\n }\n if (property === '_emit') {\n isEmitting = originalValue;\n return true;\n }\n const { prop, value } = node.hook.prop.dispatch({\n prop: property,\n value: originalValue,\n });\n // Typescript compiler cannot handle a symbol index, even though js can:\n if (!eq(props[prop], value, false) ||\n typeof value === 'object') {\n const didSet = Reflect.set(target, prop, value, receiver);\n if (isEmitting) {\n node.emit('prop', { prop, value });\n if (typeof prop === 'string')\n node.emit(`prop:${prop}`, value);\n }\n return didSet;\n }\n return true;\n },\n });\n}\n/**\n * A cheap function that iterates over all plugins and stops once node.define\n * is called.\n * @param node - A formkit node\n * @param plugins - An array of plugins\n * @returns\n */\nfunction findDefinition(node, plugins) {\n // If the definition is already there, force call to define.\n if (node.props.definition)\n return node.define(node.props.definition);\n for (const plugin of plugins) {\n if (node.props.definition)\n return;\n if (typeof plugin.library === 'function') {\n plugin.library(node);\n }\n }\n}\n/**\n * Create a new context object for our a FormKit node, given default information\n * @param options - An options object to override the defaults.\n * @returns FormKitContext\n */\nfunction createContext(options) {\n const value = createValue(options);\n const config = createConfig(options.config || {}, options.parent);\n return {\n _d: 0,\n _e: createEmitter(),\n _resolve: false,\n _tmo: false,\n _value: value,\n children: dedupe(options.children || []),\n config,\n hook: createHooks(),\n isCreated: false,\n isSettled: true,\n ledger: createLedger(),\n name: createName(options),\n parent: options.parent || null,\n plugins: new Set(),\n props: createProps(value),\n settled: Promise.resolve(value),\n store: createStore(true),\n traps: createTraps(),\n type: options.type || 'input',\n value,\n };\n}\n/**\n * Initialize a node object's internal properties.\n * @param node - The node to initialize\n * @returns FormKitNode\n */\nfunction nodeInit(node, options) {\n var _a;\n // Set the internal node on the props, config, ledger and store\n node.ledger.init((node.store._n = node.props._n = node.config._n = node));\n // Apply given in options to the node.\n node.props._emit = false;\n if (options.props)\n Object.assign(node.props, options.props);\n node.props._emit = true;\n // Attempt to find a definition from the pre-existing plugins.\n findDefinition(node, new Set([\n ...(options.plugins || []),\n ...(node.parent ? node.parent.plugins : []),\n ]));\n // Then we apply each plugin's root code, we do this with an explicit loop\n // for that ity-bitty performance bump.\n if (options.plugins) {\n for (const plugin of options.plugins) {\n use(node, node._c, plugin, true, false);\n }\n }\n // Initialize the default props\n defaultProps(node);\n // Apply the parent to each child.\n node.each((child) => node.add(child));\n // If the node has a parent, ensure it's properly nested bi-directionally.\n if (node.parent)\n node.parent.add(node, options.index);\n // Inputs are leafs, and cannot have children\n if (node.type === 'input' && node.children.length)\n error(100, node);\n // Apply the input hook to the initial value.\n input(node, node._c, node._value, false);\n // Release the store buffer\n node.store.release();\n // Register the node globally if someone explicitly gave it an id\n if ((_a = options.props) === null || _a === void 0 ? void 0 : _a.id)\n register(node);\n // Our node is finally ready, emit it to the world\n node.emit('created', node);\n node.isCreated = true;\n return node;\n}\n/**\n * Creates a new instance of a FormKit Node. Nodes are the atomic unit of\n * a FormKit graph.\n *\n * @param options - An object of options to define the node.\n * @returns FormKitNode\n * @public\n */\nfunction createNode(options) {\n const ops = options || {};\n const context = createContext(ops);\n // Note: The typing for the proxy object cannot be fully modeled, thus we are\n // force-typing to a FormKitNode. See:\n // https://github.com/microsoft/TypeScript/issues/28067\n const node = new Proxy(context, {\n get(...args) {\n const [, property] = args;\n if (property === '__FKNode__')\n return true;\n const trap = context.traps.get(property);\n if (trap && trap.get)\n return trap.get(node, context);\n return Reflect.get(...args);\n },\n set(...args) {\n const [, property, value] = args;\n const trap = context.traps.get(property);\n if (trap && trap.set)\n return trap.set(node, context, property, value);\n return Reflect.set(...args);\n },\n });\n return nodeInit(node, ops);\n}\n\n/**\n * Type narrow that a node is a DOM node.\n * @param node - A schema node to check\n * @returns\n * @public\n */\nfunction isDOM(node) {\n return typeof node !== 'string' && has(node, '$el');\n}\n/**\n * Type narrow that a node is a DOM node.\n * @param node - A schema node to check\n * @returns\n * @public\n */\nfunction isComponent(node) {\n return typeof node !== 'string' && has(node, '$cmp');\n}\n/**\n * Root declaration.\n * @param node - An object to check\n * @returns\n * @public\n */\nfunction isConditional(node) {\n if (!node || typeof node === 'string')\n return false;\n return has(node, 'if') && has(node, 'then');\n}\n/**\n * Determines if the node is syntactic sugar or not.\n * @param node - Node\n * @returns\n * @public\n */\nfunction isSugar(node) {\n return typeof node !== 'string' && '$formkit' in node;\n}\n/**\n * Converts syntactic sugar nodes to standard nodes.\n * @param node - A node to covert\n * @returns\n * @public\n */\nfunction sugar(node) {\n if (typeof node === 'string') {\n return {\n $el: 'text',\n children: node,\n };\n }\n if (isSugar(node)) {\n const { $formkit: type, for: iterator, if: condition, children, bind, ...props } = node;\n return Object.assign({\n $cmp: 'FormKit',\n props: { ...props, type },\n }, condition ? { if: condition } : {}, iterator ? { for: iterator } : {}, children ? { children } : {}, bind ? { bind } : {});\n }\n return node;\n}\n\n/**\n * Compiles a logical string like \"a != z || b == c\" into a single function.\n * The return value is an object with a \"provide\" method that iterates over all\n * requirement tokens to use as replacements.\n * ```typescript\n * let name = {\n * value: 'jon'\n * }\n * const condition = compile(\"$name == 'bob'\").provide((token) => {\n * return () => name.value // must return a function!\n * })\n *\n * condition() // false\n * ```\n * @param expr - A string to compile\n * @returns\n * @public\n */\nfunction compile(expr) {\n /**\n * These tokens are replacements used in evaluating a given condition.\n */\n // const tokens: FormKitTokens = {}\n /**\n * The value of the provide() callback. Used for late binding.\n */\n let provideTokens;\n /**\n * These are token requirements like \"$name.value\" that are need to fulfill\n * a given condition call.\n */\n const requirements = new Set();\n /**\n * Expands the current value if it is a function.\n * @param operand - A left or right hand operand\n * @returns\n */\n const x = function expand(operand, tokens) {\n return typeof operand === 'function' ? operand(tokens) : operand;\n };\n /**\n * Comprehensive list of operators. This list MUST be\n * ordered by the length of the operator characters in descending order.\n */\n const operatorRegistry = [\n {\n '&&': (l, r, t) => x(l, t) && x(r, t),\n '||': (l, r, t) => x(l, t) || x(r, t),\n },\n {\n '===': (l, r, t) => !!(x(l, t) === x(r, t)),\n '!==': (l, r, t) => !!(x(l, t) !== x(r, t)),\n '==': (l, r, t) => !!(x(l, t) == x(r, t)),\n '!=': (l, r, t) => !!(x(l, t) != x(r, t)),\n '>=': (l, r, t) => !!(x(l, t) >= x(r, t)),\n '<=': (l, r, t) => !!(x(l, t) <= x(r, t)),\n '>': (l, r, t) => !!(x(l, t) > x(r, t)),\n '<': (l, r, t) => !!(x(l, t) < x(r, t)),\n },\n {\n '+': (l, r, t) => x(l, t) + x(r, t),\n '-': (l, r, t) => x(l, t) - x(r, t),\n },\n {\n '*': (l, r, t) => x(l, t) * x(r, t),\n '/': (l, r, t) => x(l, t) / x(r, t),\n '%': (l, r, t) => x(l, t) % x(r, t),\n },\n ];\n /**\n * A full list of all operator symbols.\n */\n const operatorSymbols = operatorRegistry.reduce((s, g) => {\n return s.concat(Object.keys(g));\n }, []);\n /**\n * An array of the first character of each operator.\n */\n const operatorChars = new Set(operatorSymbols.map((key) => key.charAt(0)));\n /**\n * Determines if the current character is the start of an operator symbol, if it\n * is, it returns that symbol.\n * @param symbols - An array of symbols that are considered operators\n * @param char - The current character being operated on\n * @param p - The position of the pointer\n * @param expression - The full string expression\n * @returns\n */\n function getOp(symbols, char, p, expression) {\n const candidates = symbols.filter((s) => s.startsWith(char));\n if (!candidates.length)\n return false;\n return candidates.find((symbol) => {\n if (expression.length >= p + symbol.length) {\n const nextChars = expression.substring(p, p + symbol.length);\n if (nextChars === symbol)\n return symbol;\n }\n return false;\n });\n }\n /**\n * Determines the step number of the right or left hand operator.\n * @param p - The position of the pointer\n * @param expression - The full string expression\n * @param direction - 1 = right, 0 = left\n */\n function getStep(p, expression, direction = 1) {\n let next = direction\n ? expression.substring(p + 1).trim()\n : expression.substring(0, p).trim();\n if (!next.length)\n return -1;\n if (!direction) {\n // left hand direction could include a function name we need to remove\n const reversed = next.split('').reverse();\n const start = reversed.findIndex((char) => operatorChars.has(char));\n next = reversed.slice(start).join('');\n }\n const char = next[0];\n return operatorRegistry.findIndex((operators) => {\n const symbols = Object.keys(operators);\n return !!getOp(symbols, char, 0, next);\n });\n }\n /**\n * Extracts a tail call. For example:\n * ```\n * $foo().bar(baz) + 7\n * ```\n * Would extract \"bar(baz)\" and return p of 15 (after the (baz)).\n *\n * @param p - The position of a closing parenthetical.\n * @param expression - The full expression being parsed.\n */\n function getTail(pos, expression) {\n let tail = '';\n const length = expression.length;\n let depth = 0;\n for (let p = pos; p < length; p++) {\n const char = expression.charAt(p);\n if (char === '(') {\n depth++;\n }\n else if (char === ')') {\n depth--;\n }\n else if (depth === 0 && char === ' ') {\n continue;\n }\n if (depth === 0 && getOp(operatorSymbols, char, p, expression)) {\n return [tail, p - 1];\n }\n else {\n tail += char;\n }\n }\n return [tail, expression.length - 1];\n }\n /**\n * Parse a string expression into a function that returns a boolean. This is\n * the magic behind schema logic like $if.\n * @param expression - A string expression to parse\n * @returns\n */\n function parseLogicals(expression, step = 0) {\n const operators = operatorRegistry[step];\n const length = expression.length;\n const symbols = Object.keys(operators);\n let depth = 0;\n let quote = false;\n let op = null;\n let operand = '';\n let left = null;\n let operation;\n let lastChar = '';\n let char = '';\n let parenthetical = '';\n let parenQuote = '';\n let startP = 0;\n const addTo = (depth, char) => {\n depth ? (parenthetical += char) : (operand += char);\n };\n for (let p = 0; p < length; p++) {\n lastChar = char;\n char = expression.charAt(p);\n if ((char === \"'\" || char === '\"') &&\n lastChar !== '\\\\' &&\n ((depth === 0 && !quote) || (depth && !parenQuote))) {\n if (depth) {\n parenQuote = char;\n }\n else {\n quote = char;\n }\n addTo(depth, char);\n continue;\n }\n else if ((quote && (char !== quote || lastChar === '\\\\')) ||\n (parenQuote && (char !== parenQuote || lastChar === '\\\\'))) {\n addTo(depth, char);\n continue;\n }\n else if (quote === char) {\n quote = false;\n addTo(depth, char);\n continue;\n }\n else if (parenQuote === char) {\n parenQuote = false;\n addTo(depth, char);\n continue;\n }\n else if (char === ' ') {\n continue;\n }\n else if (char === '(') {\n if (depth === 0) {\n startP = p;\n }\n else {\n parenthetical += char;\n }\n depth++;\n }\n else if (char === ')') {\n depth--;\n if (depth === 0) {\n // Parenthetical statements cannot be grouped up in the implicit order\n // of left/right statements based on which step they are on because\n // they are parsed on every step and then must be applied to the\n // operator. Example:\n //\n // 5 + (3) * 2\n //\n // This should yield 11 not 16. This order is normally implicit in the\n // sequence of operators being parsed, but with parenthesis the parse\n // happens each time. Instead we need to know if the resulting value\n // should be applied to the left or the right hand operator. The\n // general algorithm is:\n //\n // 1. Does this paren have an operator on the left or right side\n // 2. If not, it's unnecessarily wrapped (3 + 2)\n // 3. If it does, then which order of operation is highest?\n // 4. Wait for the highest order of operation to bind to an operator.\n // If the parenthetical has a preceding token like $fn(1 + 2) then we\n // need to subtract the existing operand length from the start\n // to determine if this is a left or right operation\n const fn = typeof operand === 'string' && operand.startsWith('$')\n ? operand\n : undefined;\n const hasTail = fn && expression.charAt(p + 1) === '.';\n // It's possible the function has a chained tail call:\n let tail = '';\n if (hasTail) {\n [tail, p] = getTail(p + 2, expression);\n }\n const lStep = op ? step : getStep(startP, expression, 0);\n const rStep = getStep(p, expression);\n if (lStep === -1 && rStep === -1) {\n // This parenthetical was unnecessarily wrapped at the root, or\n // these are args of a function call.\n operand = evaluate(parenthetical, -1, fn, tail);\n }\n else if (op && (lStep >= rStep || rStep === -1) && step === lStep) {\n // has a left hand operator with a higher order of operation\n left = op.bind(null, evaluate(parenthetical, -1, fn, tail));\n op = null;\n operand = '';\n }\n else if (rStep > lStep && step === rStep) {\n // should be applied to the right hand operator when it gets one\n operand = evaluate(parenthetical, -1, fn, tail);\n }\n else {\n operand += `(${parenthetical})${hasTail ? `.${tail}` : ''}`;\n }\n parenthetical = '';\n }\n else {\n parenthetical += char;\n }\n }\n else if (depth === 0 &&\n (operation = getOp(symbols, char, p, expression))) {\n if (p === 0) {\n error(103, [operation, expression]);\n }\n // We identified the operator by looking ahead in the string, so we need\n // our position to move past the operator\n p += operation.length - 1;\n if (p === expression.length - 1) {\n error(104, [operation, expression]);\n }\n if (!op) {\n // Bind the left hand operand\n if (left) {\n // In this case we've already parsed the left hand operator\n op = operators[operation].bind(null, evaluate(left, step));\n left = null;\n }\n else {\n op = operators[operation].bind(null, evaluate(operand, step));\n operand = '';\n }\n }\n else if (operand) {\n // Bind the right hand operand, and return the resulting expression as a new left hand operator\n left = op.bind(null, evaluate(operand, step));\n op = operators[operation].bind(null, left);\n operand = '';\n }\n continue;\n }\n else {\n addTo(depth, char);\n }\n }\n if (operand && op) {\n // If we were left with an operand after the loop, and an op, it should\n // be the right hand assignment.\n op = op.bind(null, evaluate(operand, step));\n }\n // If we don't have an op, but we do have a left hand assignment, then that\n // is actually our operator, so just re-assign it to op\n op = !op && left ? left : op;\n if (!op && operand) {\n // If we don't have any op but we do have an operand so there is no boolean\n // logic to perform, but that operand still means something so we need to\n // evaluate it and return it as a function\n op = (v, t) => {\n return typeof v === 'function' ? v(t) : v;\n };\n op = op.bind(null, evaluate(operand, step));\n }\n if (!op && !operand) {\n error(105, expression);\n }\n return op;\n }\n /**\n * Given a string like '$name==bobby' evaluate it to true or false\n * @param operand - A left or right boolean operand — usually conditions\n * @param step - The current order of operation\n * @param fnToken - The token (string) representation of a function being called\n * @returns\n */\n function evaluate(operand, step, fnToken, tail //eslint-disable-line\n ) {\n if (fnToken) {\n const fn = evaluate(fnToken, operatorRegistry.length);\n let userFuncReturn;\n // \"Tail calls\" are dot accessors after a function $foo().value. We need\n // to compile tail calls, and then provide the function result to the\n // exposed tokens.\n let tailCall = tail\n ? compile(`$${tail}`)\n : false;\n if (typeof fn === 'function') {\n const args = parseArgs(String(operand)).map((arg) => evaluate(arg, -1));\n return (tokens) => {\n const userFunc = fn(tokens);\n if (typeof userFunc !== 'function') {\n warn(150, fnToken);\n return userFunc;\n }\n userFuncReturn = userFunc(...args.map((arg) => typeof arg === 'function' ? arg(tokens) : arg));\n if (tailCall) {\n tailCall = tailCall.provide((subTokens) => {\n const rootTokens = provideTokens(subTokens);\n const t = subTokens.reduce((tokenSet, token) => {\n const isTail = token === tail || (tail === null || tail === void 0 ? void 0 : tail.startsWith(`${token}(`));\n if (isTail) {\n const value = getAt(userFuncReturn, token);\n tokenSet[token] = () => value;\n }\n else {\n tokenSet[token] = rootTokens[token];\n }\n return tokenSet;\n }, {});\n return t;\n });\n }\n return tailCall ? tailCall() : userFuncReturn;\n };\n }\n }\n else if (typeof operand === 'string') {\n // the word true or false will never contain further operations\n if (operand === 'true')\n return true;\n if (operand === 'false')\n return false;\n if (operand === 'undefined')\n return undefined;\n // Truly quotes strings cannot contain an operation, return the string\n if (isQuotedString(operand))\n return rmEscapes(operand.substring(1, operand.length - 1));\n // Actual numbers cannot be contain an operation\n if (!isNaN(+operand))\n return Number(operand);\n if (step < operatorRegistry.length - 1) {\n return parseLogicals(operand, step + 1);\n }\n else {\n if (operand.startsWith('$')) {\n const cleaned = operand.substring(1);\n requirements.add(cleaned);\n return function getToken(tokens) {\n return cleaned in tokens ? tokens[cleaned]() : undefined;\n };\n }\n // In this case we are dealing with an unquoted string, just treat it\n // as a plain string.\n return operand;\n }\n }\n return operand;\n }\n /**\n * Compile the string.\n */\n const compiled = parseLogicals(expr.startsWith('$:') ? expr.substring(2) : expr);\n /**\n * Convert compiled requirements to an array.\n */\n const reqs = Array.from(requirements);\n /**\n * Provides token values via callback to compiled output.\n * @param callback - A callback that needs to provide all token requirements\n * @returns\n */\n function provide(callback) {\n provideTokens = callback;\n return Object.assign(compiled.bind(null, callback(reqs)), {\n provide,\n });\n }\n return Object.assign(compiled, {\n provide,\n });\n}\n\n/**\n * Function that produces a standardized object representation of CSS classes\n * @param propertyKey - section key\n * @param node - FormKit node\n * @param sectionClassList - Things to turn into classes\n * @returns\n * @public\n */\nfunction createClasses(propertyKey, node, sectionClassList) {\n if (!sectionClassList)\n return {};\n if (typeof sectionClassList === 'string') {\n const classKeys = sectionClassList.split(' ');\n return classKeys.reduce((obj, key) => Object.assign(obj, { [key]: true }), {});\n }\n else if (typeof sectionClassList === 'function') {\n return createClasses(propertyKey, node, sectionClassList(node, propertyKey));\n }\n return sectionClassList;\n}\n/**\n * Combines multiple class lists into a single list\n * @param node - the FormKit node being operated on\n * @param property - The property key to which the class list will be applied\n * @param args - CSS class list(s)\n * @returns\n * @public\n */\nfunction generateClassList(node, property, ...args) {\n const combinedClassList = args.reduce((finalClassList, currentClassList) => {\n if (!currentClassList)\n return finalClassList;\n const { $reset, ...classList } = currentClassList;\n if ($reset) {\n return classList;\n }\n return Object.assign(finalClassList, classList);\n }, {});\n return (Object.keys(node.hook.classes.dispatch({ property, classes: combinedClassList })\n .classes)\n .filter((key) => combinedClassList[key])\n .join(' ') || null);\n}\n\n/**\n * Sets errors on a form, group, or input.\n * @param formId - The id of a form\n * @param localErrors - The errors to set on the form or the form’s inputs\n * @param childErrors - (optional) The errors to set on the form or the form’s inputs\n * @public\n */\nfunction setErrors(id, localErrors, childErrors) {\n const node = getNode$1(id);\n if (node) {\n node.setErrors(localErrors, childErrors);\n }\n else {\n warn(651, id);\n }\n}\n/**\n * Clears child errors.\n * @param id - The id of the node you want to clear errors for\n * @param clearChildren - Determines if the the children of this node should have their errors cleared.\n * @public\n */\nfunction clearErrors(id, clearChildren = true) {\n const node = getNode$1(id);\n if (node) {\n node.clearErrors(clearChildren);\n }\n else {\n warn(652, id);\n }\n}\n\n/**\n * index.ts\n *\n * In this file we explicitly declare what should end up in the public API.\n */\n/**\n * The current version of FormKit at the time the package is published. Is replaced\n * as part of the publishing script.\n * @public\n */\nconst FORMKIT_VERSION = '1.0.0-beta.12';\n\nexport { FORMKIT_VERSION, bfs, clearErrors, compile, createClasses, createConfig$1 as createConfig, createMessage, createNode, createValue, deregister, error, errorHandler, generateClassList, getNode$1 as getNode, isComponent, isConditional, isDOM, isList, isNode, isSugar, names, register, reset, resetCount, resetRegistry, setErrors, submitForm, sugar, use, useIndex, valueInserted, valueMoved, valueRemoved, warn, warningHandler, watchRegistry };\n","import { extend, camel, has, isPojo, eq, kebab, undefine, clone, isObject } from '@formkit/utils';\nimport { createMessage, warn, isConditional, isDOM, isComponent } from '@formkit/core';\n\n/**\n *\n * @param libraries - One or many formkit urls.\n * @returns\n * @public\n */\nfunction createLibraryPlugin(...libraries) {\n /**\n * Merge all provided library items.\n */\n const library = libraries.reduce((merged, lib) => extend(merged, lib), {});\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\n const plugin = () => { };\n /**\n * Enables the hook that exposes all library inputs.\n * @param node - The primary plugin\n */\n plugin.library = function (node) {\n const type = camel(node.props.type);\n if (has(library, type)) {\n node.define(library[type]);\n }\n };\n return plugin;\n}\n\n/**\n * Accepts an array of objects, array of strings, or object of key-value pairs.\n * and returns an array of objects with value and label properties.\n * @param options - Options to normalize\n * @public\n */\nfunction normalizeOptions(options) {\n let i = 1;\n if (Array.isArray(options)) {\n return options.map((option) => {\n if (typeof option === 'string' || typeof option === 'number') {\n return {\n label: String(option),\n value: String(option),\n };\n }\n if (typeof option == 'object') {\n if ('value' in option && typeof option.value !== 'string') {\n Object.assign(option, {\n value: `__mask_${i++}`,\n __original: option.value,\n });\n }\n }\n return option;\n });\n }\n return Object.keys(options).map((value) => {\n return {\n label: options[value],\n value,\n };\n });\n}\n/**\n * Given an option list, find the \"true\" value in the options.\n * @param options - The options to check for a given value\n * @param value - The value to return\n * @returns\n */\nfunction optionValue(options, value) {\n if (Array.isArray(options)) {\n for (const option of options) {\n if (value == option.value) {\n return '__original' in option ? option.__original : option.value;\n }\n }\n }\n return value;\n}\n/**\n * Determines if the value should be selected.\n * @param valueA - Any type of value\n * @param valueB - Any type of value\n */\nfunction shouldSelect(valueA, valueB) {\n if (valueA == valueB)\n return true;\n if (isPojo(valueA) && isPojo(valueB))\n return eq(valueA, valueB);\n return false;\n}\n/**\n * Converts the options prop to usable values.\n * @param node - A formkit node.\n * @public\n */\nfunction options(node) {\n node.hook.prop((prop, next) => {\n if (prop.prop === 'options') {\n if (typeof prop.value === 'function') {\n node.props.optionsLoader = prop.value;\n prop.value = [];\n }\n else {\n prop.value = normalizeOptions(prop.value);\n }\n }\n return next(prop);\n });\n}\n\n/**\n * @public\n */\nconst outer = createSection('outer', () => ({\n $el: 'div',\n attrs: {\n key: '$id',\n 'data-family': '$family || undefined',\n 'data-type': '$type',\n 'data-multiple': '$attrs.multiple || ($type != \"select\" && $options != undefined) || undefined',\n 'data-disabled': '$disabled || undefined',\n 'data-complete': '$state.complete || undefined',\n 'data-invalid': '$state.valid === false && $state.validationVisible || undefined',\n 'data-errors': '$state.errors || undefined',\n 'data-submitted': '$state.submitted || undefined',\n 'data-prefix-icon': '$_rawPrefixIcon !== undefined || undefined',\n 'data-suffix-icon': '$_rawSuffixIcon !== undefined || undefined',\n 'data-prefix-icon-click': '$onPrefixIconClick !== undefined || undefined',\n 'data-suffix-icon-click': '$onSuffixIconClick !== undefined || undefined',\n },\n}), true);\n\n/**\n * @public\n */\nconst inner = createSection('inner', 'div');\n\n/**\n * @public\n */\nconst wrapper = createSection('wrapper', 'div');\n\n/**\n * @public\n */\nconst label = createSection('label', () => ({\n $el: 'label',\n if: '$label',\n attrs: {\n for: '$id',\n },\n}));\n\n/**\n * @public\n */\nconst messages = createSection('messages', () => ({\n $el: 'ul',\n if: '$fns.length($messages)',\n}));\n\n/**\n * @public\n */\nconst message = createSection('message', () => ({\n $el: 'li',\n for: ['message', '$messages'],\n attrs: {\n key: '$message.key',\n id: `$id + '-' + $message.key`,\n 'data-message-type': '$message.type',\n },\n}));\n\n/**\n * @public\n */\nconst prefix = createSection('prefix', null);\n\n/**\n * @public\n */\nconst suffix = createSection('suffix', null);\n\n/**\n * @public\n */\nconst help = createSection('help', () => ({\n $el: 'div',\n if: '$help',\n attrs: {\n id: '$: \"help-\" + $id',\n },\n}));\n\n/**\n * @public\n */\nconst fieldset = createSection('fieldset', () => ({\n $el: 'fieldset',\n attrs: {\n id: '$id',\n 'aria-describedby': {\n if: '$help',\n then: '$: \"help-\" + $id',\n else: undefined,\n },\n },\n}));\n\n/**\n * @public\n */\nconst decorator = createSection('decorator', () => ({\n $el: 'span',\n attrs: {\n 'aria-hidden': 'true',\n },\n}));\n\n/**\n * @public\n */\nconst box = createSection('input', () => ({\n $el: 'input',\n bind: '$attrs',\n attrs: {\n type: '$type',\n name: '$node.props.altName || $node.name',\n disabled: '$option.attrs.disabled || $disabled',\n onInput: '$handlers.toggleChecked',\n checked: '$fns.eq($_value, $onValue)',\n onBlur: '$handlers.blur',\n value: '$: true',\n id: '$id',\n 'aria-describedby': {\n if: '$options.length',\n then: {\n if: '$option.help',\n then: '$: \"help-\" + $option.attrs.id',\n else: undefined,\n },\n else: {\n if: '$help',\n then: '$: \"help-\" + $id',\n else: undefined,\n },\n },\n },\n}));\n\n/**\n * @public\n */\nconst legend = createSection('legend', () => ({\n $el: 'legend',\n if: '$label',\n}));\n\n/**\n * @public\n */\nconst boxOption = createSection('option', () => ({\n $el: 'li',\n for: ['option', '$options'],\n attrs: {\n 'data-disabled': '$option.attrs.disabled || $disabled',\n },\n}));\n\n/**\n * @public\n */\nconst boxOptions = createSection('options', 'ul');\n\n/**\n * @public\n */\nconst boxWrapper = createSection('wrapper', () => ({\n $el: 'label',\n attrs: {\n 'data-disabled': {\n if: '$options.length',\n then: undefined,\n else: '$disabled || undefined',\n },\n },\n}));\n\n/**\n * @public\n */\nconst boxHelp = createSection('optionHelp', () => ({\n $el: 'div',\n if: '$option.help',\n attrs: {\n id: '$: \"help-\" + $option.attrs.id',\n },\n}));\n\n/**\n * @public\n */\nconst boxLabel = createSection('label', 'span');\n\n/**\n * @public\n */\nconst buttonInput = createSection('input', () => ({\n $el: 'button',\n bind: '$attrs',\n attrs: {\n type: '$type',\n disabled: '$disabled',\n name: '$node.name',\n id: '$id',\n },\n}));\n\n/**\n * @public\n */\nconst buttonLabel = createSection('default', null);\n\n/**\n * @public\n */\nconst fileInput = createSection('input', () => ({\n $el: 'input',\n bind: '$attrs',\n attrs: {\n type: 'file',\n disabled: '$disabled',\n name: '$node.name',\n onChange: '$handlers.files',\n onBlur: '$handlers.blur',\n id: '$id',\n 'aria-describedby': '$describedBy',\n },\n}));\n\n/**\n * @public\n */\nconst fileItem = createSection('fileItem', () => ({\n $el: 'li',\n for: ['file', '$value'],\n}));\n\n/**\n * @public\n */\nconst fileList = createSection('fileList', () => ({\n $el: 'ul',\n if: '$value.length',\n attrs: {\n 'data-has-multiple': {\n if: '$value.length > 1',\n then: 'true',\n },\n },\n}));\n\n/**\n * @public\n */\nconst fileName = createSection('fileName', () => ({\n $el: 'span',\n attrs: {\n class: '$classes.fileName',\n },\n}));\n\n/**\n * @public\n */\nconst fileRemove = createSection('fileRemove', () => ({\n $el: 'button',\n attrs: {\n onClick: '$handlers.resetFiles',\n },\n}));\n\n/**\n * @public\n */\nconst noFiles = createSection('noFiles', () => ({\n $el: 'span',\n if: '$value.length == 0',\n}));\n\n/**\n * @public\n */\nconst formInput = createSection('form', () => ({\n $el: 'form',\n bind: '$attrs',\n attrs: {\n id: '$id',\n name: '$node.name',\n onSubmit: '$handlers.submit',\n 'data-loading': '$state.loading || undefined',\n },\n}), true);\n\n/**\n * @public\n */\nconst actions = createSection('actions', () => ({\n $el: 'div',\n if: '$actions',\n}));\n\n/**\n * @public\n */\nconst submitInput = createSection('submit', () => ({\n $cmp: 'FormKit',\n bind: '$submitAttrs',\n props: {\n ignore: true,\n type: 'submit',\n disabled: '$disabled',\n label: '$submitLabel',\n },\n}));\n\n/**\n * @public\n */\nconst textInput = createSection('input', () => ({\n $el: 'input',\n bind: '$attrs',\n attrs: {\n type: '$type',\n disabled: '$disabled',\n name: '$node.name',\n onInput: '$handlers.DOMInput',\n onBlur: '$handlers.blur',\n value: '$_value',\n id: '$id',\n 'aria-describedby': '$describedBy',\n },\n}));\n\n/**\n * @public\n */\nconst fragment = createSection('wrapper', null, true);\n\n/**\n * @public\n */\nconst selectInput$1 = createSection('input', () => ({\n $el: 'select',\n bind: '$attrs',\n attrs: {\n id: '$id',\n 'data-placeholder': '$fns.showPlaceholder($_value, $placeholder)',\n disabled: '$disabled',\n class: '$classes.input',\n name: '$node.name',\n onChange: '$handlers.onChange',\n onInput: '$handlers.selectInput',\n onBlur: '$handlers.blur',\n 'aria-describedby': '$describedBy',\n },\n}));\n\n/**\n * @public\n */\nconst option = createSection('option', () => ({\n $el: 'option',\n for: ['option', '$options'],\n bind: '$option.attrs',\n attrs: {\n class: '$classes.option',\n value: '$option.value',\n selected: '$fns.isSelected($option)',\n },\n}));\n\n/**\n * @public\n */\nconst optionSlot = () => ({\n $el: null,\n if: '$options.length',\n for: ['option', '$options'],\n children: '$slots.option',\n});\n\n/**\n * @public\n */\nconst textareaInput = createSection('input', () => ({\n $el: 'textarea',\n bind: '$attrs',\n attrs: {\n disabled: '$disabled',\n name: '$node.name',\n onInput: '$handlers.DOMInput',\n onBlur: '$handlers.blur',\n value: '$_value',\n id: '$id',\n 'aria-describedby': '$describedBy',\n },\n children: '$initialValue',\n}));\n\n/**\n * @public\n */\nconst icon = (sectionKey, el) => {\n return createSection(`${sectionKey}Icon`, () => {\n const rawIconProp = `_raw${sectionKey\n .charAt(0)\n .toUpperCase()}${sectionKey.slice(1)}Icon`;\n return {\n if: `$${sectionKey}Icon && $${rawIconProp}`,\n $el: `${el ? el : 'span'}`,\n attrs: {\n class: `$classes.${sectionKey}Icon + \" formkit-icon\"`,\n innerHTML: `$${rawIconProp}`,\n onClick: `$handlers.iconClick(${sectionKey})`,\n for: {\n if: `${el === 'label'}`,\n then: '$id',\n },\n },\n };\n })();\n};\n\n/**\n * Normalize the boxes.\n * @param node - The node\n * @returns\n * @public\n */\nfunction normalizeBoxes(node) {\n return function (prop, next) {\n if (prop.prop === 'options' && Array.isArray(prop.value)) {\n prop.value = prop.value.map((option) => {\n var _a;\n if (!((_a = option.attrs) === null || _a === void 0 ? void 0 : _a.id)) {\n return extend(option, {\n attrs: { id: `${node.name}-option-${kebab(String(option.value))}` },\n });\n }\n return option;\n });\n if (node.props.type === 'checkbox' && !Array.isArray(node.value)) {\n if (node.isCreated) {\n node.input([], false);\n }\n else {\n node.on('created', () => {\n if (!Array.isArray(node.value)) {\n node.input([], false);\n }\n });\n }\n }\n }\n return next(prop);\n };\n}\n\n/**\n * Event handler when an input is toggled.\n * @param node - The node being toggled\n * @param e - The input even related to the toggling\n * @public\n */\nfunction toggleChecked$1(node, e) {\n const el = e.target;\n if (el instanceof HTMLInputElement) {\n const value = Array.isArray(node.props.options)\n ? optionValue(node.props.options, el.value)\n : el.value;\n if (Array.isArray(node.props.options) && node.props.options.length) {\n if (!Array.isArray(node._value)) {\n // There is no array value set\n node.input([value]);\n }\n else if (!node._value.some((existingValue) => shouldSelect(value, existingValue))) {\n // The value is not in the current set\n node.input([...node._value, value]);\n }\n else {\n // Filter out equivalent values\n node.input(node._value.filter((existingValue) => !shouldSelect(value, existingValue)));\n }\n }\n else {\n if (el.checked) {\n node.input(node.props.onValue);\n }\n else {\n node.input(node.props.offValue);\n }\n }\n }\n}\n/**\n * Checks if a given option is present in the node value.\n * @param node - The node being checked\n * @param value - The value of any option\n * @returns\n */\nfunction isChecked$1(node, value) {\n var _a, _b;\n // We need to force vue’s reactivity to respond when the value is run:\n (_a = node.context) === null || _a === void 0 ? void 0 : _a.value;\n (_b = node.context) === null || _b === void 0 ? void 0 : _b._value;\n if (Array.isArray(node._value)) {\n return node._value.some((existingValue) => shouldSelect(optionValue(node.props.options, value), existingValue));\n }\n return false;\n}\n/**\n * Adds checkbox selection support\n * @param node - Node the feature is added to\n * @public\n */\nfunction checkboxes(node) {\n node.on('created', () => {\n var _a, _b;\n if ((_a = node.context) === null || _a === void 0 ? void 0 : _a.handlers) {\n node.context.handlers.toggleChecked = toggleChecked$1.bind(null, node);\n }\n if ((_b = node.context) === null || _b === void 0 ? void 0 : _b.fns) {\n node.context.fns.isChecked = isChecked$1.bind(null, node);\n }\n // Configure our default onValue and offValue\n if (!has(node.props, 'onValue'))\n node.props.onValue = true;\n if (!has(node.props, 'offValue'))\n node.props.offValue = false;\n });\n node.hook.prop(normalizeBoxes(node));\n}\n\n/**\n * Allows disabling children of this.\n * @param node - The FormKitNode of the form/group/list\n * @public\n */\nfunction disables(node) {\n node.on('created', () => {\n node.props.disabled = undefine(node.props.disabled);\n });\n node.hook.prop(({ prop, value }, next) => {\n value = prop === 'disabled' ? undefine(value) : value;\n return next({ prop, value });\n });\n node.on('prop:disabled', ({ payload: value }) => {\n node.config.disabled = undefine(value);\n });\n node.on('created', () => {\n node.config.disabled = undefine(node.props.disabled);\n });\n}\n\n/**\n * Creates a new feature that generates a localization message of type ui\n * for use on a given component.\n *\n * @param key - The key of the message\n * @param value - The value of the message\n * @returns\n * @public\n */\nfunction localize(key, value) {\n return (node) => {\n node.store.set(createMessage({\n key,\n type: 'ui',\n value: value || key,\n meta: {\n localize: true,\n i18nArgs: [node],\n },\n }));\n };\n}\n\nconst isBrowser = typeof window !== 'undefined';\n/**\n * Remove the data-file-hover attribute from the target.\n * @param e - Event\n */\nfunction removeHover(e) {\n if (e.target instanceof HTMLElement &&\n e.target.hasAttribute('data-file-hover')) {\n e.target.removeAttribute('data-file-hover');\n }\n}\n/**\n * Prevent stray drag/drop events from navigating the window.\n * @param e - Event\n * @public\n */\nfunction preventStrayDrop(type, e) {\n if (!(e.target instanceof HTMLInputElement)) {\n e.preventDefault();\n }\n else if (type === 'dragover') {\n e.target.setAttribute('data-file-hover', 'true');\n }\n if (type === 'drop') {\n removeHover(e);\n }\n}\n/**\n * Feature to add file handling support to an input.\n * @param node - The node being checked\n * @public\n */\nfunction files(node) {\n // Localize our content:\n localize('noFiles', 'Select file')(node);\n localize('removeAll', 'Remove all')(node);\n localize('remove')(node);\n if (isBrowser) {\n if (!window._FormKit_File_Drop) {\n window.addEventListener('dragover', preventStrayDrop.bind(null, 'dragover'));\n window.addEventListener('drop', preventStrayDrop.bind(null, 'drop'));\n window.addEventListener('dragleave', removeHover);\n window._FormKit_File_Drop = true;\n }\n }\n node.hook.input((value, next) => next(Array.isArray(value) ? value : []));\n node.on('created', () => {\n if (!Array.isArray(node.value))\n node.input([], false);\n if (!node.context)\n return;\n node.context.handlers.resetFiles = (e) => {\n e.preventDefault();\n node.input([]);\n if (node.props.id && isBrowser) {\n const el = document.getElementById(node.props.id);\n if (el)\n el.value = '';\n }\n };\n node.context.handlers.files = (e) => {\n var _a, _b;\n const files = [];\n if (e.target instanceof HTMLInputElement && e.target.files) {\n for (let i = 0; i < e.target.files.length; i++) {\n let file;\n if ((file = e.target.files.item(i))) {\n files.push({ name: file.name, file });\n }\n }\n node.input(files);\n }\n if (node.context)\n node.context.files = files;\n // Call the original listener if there is one.\n if (typeof ((_a = node.props.attrs) === null || _a === void 0 ? void 0 : _a.onChange) === 'function') {\n (_b = node.props.attrs) === null || _b === void 0 ? void 0 : _b.onChange(e);\n }\n };\n });\n}\n\n/**\n * Handle the submit event.\n * @param e - The event\n * @public\n */\nasync function handleSubmit(node, submitEvent) {\n submitEvent.preventDefault();\n await node.settled;\n // Set the submitted state on all children\n node.walk((n) => {\n n.store.set(createMessage({\n key: 'submitted',\n value: true,\n visible: false,\n }));\n });\n if (typeof node.props.onSubmitRaw === 'function') {\n node.props.onSubmitRaw(submitEvent, node);\n }\n if (node.ledger.value('blocking')) {\n if (typeof node.props.onSubmitInvalid === 'function') {\n node.props.onSubmitInvalid(node);\n }\n // There is still a blocking message in the store.\n if (node.props.incompleteMessage !== false) {\n node.store.set(createMessage({\n blocking: false,\n key: `incomplete`,\n meta: {\n localize: node.props.incompleteMessage === undefined,\n i18nArgs: [{ node }],\n showAsMessage: true,\n },\n type: 'ui',\n value: node.props.incompleteMessage || 'Form incomplete.',\n }));\n }\n }\n else {\n // No blocking messages\n if (typeof node.props.onSubmit === 'function') {\n // call onSubmit\n const retVal = node.props.onSubmit(node.hook.submit.dispatch(clone(node.value)), node);\n if (retVal instanceof Promise) {\n const autoDisable = node.props.disabled === undefined &&\n node.props.submitBehavior !== 'live';\n if (autoDisable)\n node.props.disabled = true;\n node.store.set(createMessage({\n key: 'loading',\n value: true,\n visible: false,\n }));\n await retVal;\n if (autoDisable)\n node.props.disabled = false;\n node.store.remove('loading');\n }\n }\n else {\n if (submitEvent.target instanceof HTMLFormElement) {\n submitEvent.target.submit();\n }\n }\n }\n}\n/**\n * Converts the options prop to usable values.\n * @param node - A formkit node.\n * @public\n */\nfunction form$1(node) {\n node.props.isForm = true;\n node.on('created', () => {\n var _a;\n if ((_a = node.context) === null || _a === void 0 ? void 0 : _a.handlers) {\n node.context.handlers.submit = handleSubmit.bind(null, node);\n }\n if (!has(node.props, 'actions')) {\n node.props.actions = true;\n }\n });\n node.on('settled:blocking', () => node.store.remove('incomplete'));\n}\n\n/**\n * Applies ignore=\"true\" by default.\n * @param node - The node\n * @public\n */\nfunction ignore(node) {\n if (node.props.ignore === undefined) {\n node.props.ignore = true;\n node.parent = null;\n }\n}\n\n/**\n * Ensures the input has an `initialValue` prop.\n * @param node - The node being given an initial value\n * @public\n */\nfunction initialValue(node) {\n node.on('created', () => {\n if (node.context) {\n node.context.initialValue = node.value || '';\n }\n });\n}\n\n/**\n * Sets the value of a radio button when checked.\n * @param node - FormKitNode\n * @param value - Value\n * @public\n */\nfunction toggleChecked(node, event) {\n if (event.target instanceof HTMLInputElement) {\n node.input(optionValue(node.props.options, event.target.value));\n }\n}\n/**\n * Checks if the value being checked is the current value.\n * @param node - The node to check against.\n * @param value - The value to check\n * @returns\n */\nfunction isChecked(node, value) {\n var _a, _b;\n // We need to force vue’s reactivity to respond when the value is run:\n (_a = node.context) === null || _a === void 0 ? void 0 : _a.value;\n (_b = node.context) === null || _b === void 0 ? void 0 : _b._value;\n return shouldSelect(optionValue(node.props.options, value), node._value);\n}\n/**\n * Determines if a given radio input is being evaluated.\n * @param node - The radio input group.\n * @public\n */\nfunction radios(node) {\n node.on('created', () => {\n var _a, _b;\n if (!Array.isArray(node.props.options)) {\n warn(350, node);\n }\n if ((_a = node.context) === null || _a === void 0 ? void 0 : _a.handlers) {\n node.context.handlers.toggleChecked = toggleChecked.bind(null, node);\n }\n if ((_b = node.context) === null || _b === void 0 ? void 0 : _b.fns) {\n node.context.fns.isChecked = isChecked.bind(null, node);\n }\n });\n node.hook.prop(normalizeBoxes(node));\n}\n\n/**\n * Checks if a the given option should have the selected attribute.\n * @param node - The node being evaluated.\n * @param option - The option value to check\n * @returns\n * @public\n */\nfunction isSelected(node, option) {\n // Here we trick reactivity (if at play) to watch this function.\n node.context && node.context.value;\n const optionValue = '__original' in option ? option.__original : option.value;\n function hasNoNullOption() {\n return !node.props.options.some((option) => ('__original' in option ? option.__original : option.value) === null);\n }\n return Array.isArray(node._value)\n ? node._value.some((optionA) => shouldSelect(optionA, optionValue))\n : (node._value === undefined ||\n (node._value === null && hasNoNullOption())) &&\n option.attrs &&\n option.attrs['data-is-placeholder']\n ? true\n : shouldSelect(optionValue, node._value);\n}\n/**\n * Defers the change event till after the next cycle.\n * @param node - The node being evaluated.\n * @param e - The change event.\n */\nasync function deferChange(node, e) {\n var _a;\n if (typeof ((_a = node.props.attrs) === null || _a === void 0 ? void 0 : _a.onChange) === 'function') {\n await new Promise((r) => setTimeout(r, 0));\n await node.settled;\n node.props.attrs.onChange(e);\n }\n}\n/**\n * Select the correct values.\n * @param e - The input event emitted by the select.\n */\nfunction selectInput(node, e) {\n const target = e.target;\n const value = target.hasAttribute('multiple')\n ? Array.from(target.selectedOptions).map((o) => optionValue(node.props.options, o.value))\n : optionValue(node.props.options, target.value);\n node.input(value);\n}\n/**\n * Appends a placeholder to the options list.\n * @param options - An options list\n * @param placeholder - A placeholder string to append\n * @returns\n */\nfunction applyPlaceholder(options, placeholder) {\n if (!options.some((option) => option.attrs && option.attrs['data-is-placeholder'])) {\n return [\n {\n label: placeholder,\n value: '',\n attrs: {\n hidden: true,\n disabled: true,\n 'data-is-placeholder': 'true',\n },\n },\n ...options,\n ];\n }\n return options;\n}\n/**\n * Converts the options prop to usable values.\n * @param node - A formkit node.\n * @public\n */\nfunction select$1(node) {\n // Set the initial value of a multi-input\n node.on('created', () => {\n var _a, _b, _c;\n const isMultiple = undefine((_a = node.props.attrs) === null || _a === void 0 ? void 0 : _a.multiple);\n if (!isMultiple &&\n node.props.placeholder &&\n Array.isArray(node.props.options)) {\n node.hook.prop(({ prop, value }, next) => {\n if (prop === 'options') {\n value = applyPlaceholder(value, node.props.placeholder);\n }\n return next({ prop, value });\n });\n node.props.options = applyPlaceholder(node.props.options, node.props.placeholder);\n }\n if (isMultiple) {\n if (node.value === undefined) {\n node.input([], false);\n }\n }\n else if (node.context && !node.context.options) {\n // If this input is (probably) using the default slot, we need to add a\n // \"value\" attribute to get bound\n node.props.attrs = Object.assign({}, node.props.attrs, {\n value: node._value,\n });\n node.on('input', ({ payload }) => {\n node.props.attrs = Object.assign({}, node.props.attrs, {\n value: payload,\n });\n });\n }\n if ((_b = node.context) === null || _b === void 0 ? void 0 : _b.handlers) {\n node.context.handlers.selectInput = selectInput.bind(null, node);\n node.context.handlers.onChange = deferChange.bind(null, node);\n }\n if ((_c = node.context) === null || _c === void 0 ? void 0 : _c.fns) {\n node.context.fns.isSelected = isSelected.bind(null, node);\n node.context.fns.showPlaceholder = (value, placeholder) => {\n if (!Array.isArray(node.props.options))\n return false;\n const hasMatchingValue = node.props.options.some((option) => {\n if (option.attrs && 'data-is-placeholder' in option.attrs)\n return false;\n const optionValue = '__original' in option ? option.__original : option.value;\n return eq(value, optionValue);\n });\n return placeholder && !hasMatchingValue ? true : undefined;\n };\n }\n });\n node.hook.input((value, next) => {\n var _a, _b, _c;\n if (!node.props.placeholder &&\n value === undefined &&\n Array.isArray((_a = node.props) === null || _a === void 0 ? void 0 : _a.options) &&\n node.props.options.length &&\n !undefine((_c = (_b = node.props) === null || _b === void 0 ? void 0 : _b.attrs) === null || _c === void 0 ? void 0 : _c.multiple)) {\n value =\n '__original' in node.props.options[0]\n ? node.props.options[0].__original\n : node.props.options[0].value;\n }\n return next(value);\n });\n}\n\n/**\n * @param sectionKey - the location the icon should be loaded\n * @param defaultIcon - the icon that should be loaded if a match is found in the user's CSS\n * @public\n */\nfunction defaultIcon(sectionKey, defaultIcon) {\n return (node) => {\n if (node.props[`${sectionKey}Icon`] === undefined) {\n node.props[`${sectionKey}Icon`] = `default:${defaultIcon}`;\n }\n };\n}\n\n/**\n * Type guard for schema objects.\n * @param schema - returns true if the node is a schema node but not a string or conditional.\n * @public\n */\nfunction isSchemaObject(schema) {\n return (typeof schema === 'object' &&\n ('$el' in schema || '$cmp' in schema || '$formkit' in schema));\n}\n/**\n * Checks if the current schema node is a slot condition like:\n * ```js\n * {\n * if: '$slot.name',\n * then: '$slot.name',\n * else: []\n * }\n * ```\n * @param node - a schema node\n * @returns\n * @public\n */\nfunction isSlotCondition(node) {\n if (isConditional(node) &&\n node.if &&\n node.if.startsWith('$slots.') &&\n typeof node.then === 'string' &&\n node.then.startsWith('$slots.') &&\n 'else' in node) {\n return true;\n }\n return false;\n}\n/**\n * Extends a single schema node with an extension. The extension can be any partial node including strings.\n * @param schema - Extend a base schema node.\n * @param extension - The values to extend on the base schema node.\n * @returns\n * @public\n */\nfunction extendSchema(schema, extension = {}) {\n if (typeof schema === 'string') {\n return isSchemaObject(extension) || typeof extension === 'string'\n ? extension\n : schema;\n }\n else if (Array.isArray(schema)) {\n return isSchemaObject(extension) ? extension : schema;\n }\n return extend(schema, extension);\n}\n/**\n * ================================================================\n * NOTE: This function is deprecated. Use `createSection` instead!\n * ================================================================\n *\n * @param key - A new section key name.\n * @param schema - The default schema in this composable slot.\n * @returns\n * @public\n */\nfunction composable(key, schema) {\n warn(800, 'composable function');\n return (extendWith = {}, children = undefined) => {\n const root = typeof schema === 'function'\n ? schema(children)\n : typeof schema === 'object'\n ? clone(schema)\n : schema;\n const isObj = isSchemaObject(root);\n if (isObj && !('children' in root) && children) {\n if (Array.isArray(children)) {\n if (children.length) {\n root.children = children;\n }\n }\n else {\n root.children = [children];\n }\n }\n const extended = extendSchema(root, extendWith);\n return {\n if: `$slots.${key}`,\n then: `$slots.${key}`,\n else: Array.isArray(extended) ? extended : [extended],\n };\n };\n}\n/**\n * Creates an input schema with all of the wrapping base schema.\n * @param inputSchema - Content to store in the input section key location.\n * @public\n */\nfunction useSchema(inputSection) {\n return outer(wrapper(label('$label'), inner(prefix(), inputSection(), suffix())), help('$help'), messages(message('$message.value')));\n}\n/**\n * Creates a new reusable section.\n * @param section - A single section of schema\n * @param el - The element or a function that returns a schema node.\n * @param root - When true returns an extendable root schema node.\n * @returns\n * @public\n */\nfunction createSection(section, el, root = false) {\n return (...children) => {\n const extendable = (extensions) => {\n const node = !el || typeof el === 'string' ? { $el: el } : el();\n if (isDOM(node) || isComponent(node)) {\n if (!node.meta) {\n node.meta = { section };\n }\n if (children.length && !node.children) {\n node.children = [\n ...children.map((child) => typeof child === 'string' ? child : child(extensions)),\n ];\n }\n if (isDOM(node)) {\n node.attrs = {\n class: `$classes.${section}`,\n ...(node.attrs || {}),\n };\n }\n }\n return {\n if: `$slots.${section}`,\n then: `$slots.${section}`,\n else: section in extensions\n ? extendSchema(node, extensions[section])\n : node,\n };\n };\n return root ? createRoot(extendable) : extendable;\n };\n}\n/**\n * Returns an extendable schema root node.\n * @param rootSection - Creates the root node.\n * @returns\n */\nfunction createRoot(rootSection) {\n return (extensions) => {\n return [rootSection(extensions)];\n };\n}\n/**\n * Applies attributes to a given schema section by applying a higher order\n * function that merges a given set of attributes into the node.\n * @param attrs - Apply attributes to a FormKitSchemaExtendableSection\n * @param section - A section to apply attributes to\n * @returns\n * @public\n */\nfunction $attrs(attrs, section) {\n return (extensions) => {\n const node = section(extensions);\n const attributes = typeof attrs === 'function' ? attrs() : attrs;\n if (!isObject(attributes))\n return node;\n if (isSlotCondition(node) && isDOM(node.else)) {\n node.else.attrs = { ...node.else.attrs, ...attributes };\n }\n else if (isDOM(node)) {\n node.attrs = { ...node.attrs, ...attributes };\n }\n return node;\n };\n}\n/**\n *\n * @param condition - A schema condition to apply to a section.\n * @param then - The section that applies if the condition is true.\n * @param otherwise - (else) The section that applies if the condition is false.\n * @returns\n * @public\n */\nfunction $if(condition, then, otherwise) {\n return (extensions) => {\n const node = then(extensions);\n if (otherwise ||\n (isSchemaObject(node) && 'if' in node) ||\n isSlotCondition(node)) {\n const conditionalNode = {\n if: condition,\n then: node,\n };\n if (otherwise) {\n conditionalNode.else = otherwise(extensions);\n }\n return conditionalNode;\n }\n else if (isSlotCondition(node)) {\n Object.assign(node.else, { if: condition });\n }\n else if (isSchemaObject(node)) {\n Object.assign(node, { if: condition });\n }\n return node;\n };\n}\n/**\n * Applies a condition to a given schema section.\n * @param varName - The name of the variable that holds the current instance.\n * @param inName - The variable we are iterating over.\n * @param section - A section to repeat\n * @returns\n * @public\n */\nfunction $for(varName, inName, section) {\n return (extensions) => {\n const node = section(extensions);\n if (isSlotCondition(node)) {\n Object.assign(node.else, { for: [varName, inName] });\n }\n else if (isSchemaObject(node)) {\n Object.assign(node, { for: [varName, inName] });\n }\n return node;\n };\n}\n/**\n * Extends a schema node with a given set of extensions.\n * @param section - A section to apply an extension to.\n * @param extendWith - A partial schema snippet to apply to the section.\n * @returns\n * @public\n */\nfunction $extend(section, extendWith) {\n return (extensions) => {\n const node = section({});\n if (isSlotCondition(node)) {\n if (Array.isArray(node.else))\n return node;\n node.else = extendSchema(extendSchema(node.else, extendWith), extensions);\n return node;\n }\n return extendSchema(extendSchema(node, extendWith), extensions);\n };\n}\n/**\n * Creates a root schema section.\n * @param section - A section to make a root from.\n * @returns\n * @public\n */\nfunction $root(section) {\n return createRoot(section);\n}\n\n/**\n * Input definition for a button.\n * @public\n */\nconst button = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: outer(messages(message('$message.value')), wrapper(buttonInput(icon('prefix'), prefix(), buttonLabel('$label || $ui.submit.value'), suffix(), icon('suffix'))), help('$help')),\n /**\n * The type of node, can be a list, group, or input.\n */\n type: 'input',\n /**\n * The family of inputs this one belongs too. For example \"text\" and \"email\"\n * are both part of the \"text\" family. This is primary used for styling.\n */\n family: 'button',\n /**\n * An array of extra props to accept for this input.\n */\n props: [],\n /**\n * Additional features that should be added to your input\n */\n features: [localize('submit'), ignore],\n};\n\n/**\n * Input definition for a checkbox(ess).\n * @public\n */\nconst checkbox = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: outer($if('$options == undefined', \n /**\n * Single checkbox structure.\n */\n boxWrapper(inner(prefix(), box(), decorator(icon('decorator')), suffix()), $extend(boxLabel('$label'), {\n if: '$label',\n })), \n /**\n * Multi checkbox structure.\n */\n fieldset(legend('$label'), help('$help'), boxOptions(boxOption(boxWrapper(inner(prefix(), $extend(box(), {\n bind: '$option.attrs',\n attrs: {\n id: '$option.attrs.id',\n value: '$option.value',\n checked: '$fns.isChecked($option.value)',\n },\n }), decorator(icon('decorator')), suffix()), $extend(boxLabel('$option.label'), {\n if: '$option.label',\n })), boxHelp('$option.help'))))), \n // Help text only goes under the input when it is a single.\n $if('$options == undefined && $help', help('$help')), messages(message('$message.value'))),\n /**\n * The type of node, can be a list, group, or input.\n */\n type: 'input',\n /**\n * The family of inputs this one belongs too. For example \"text\" and \"email\"\n * are both part of the \"text\" family. This is primary used for styling.\n */\n family: 'box',\n /**\n * An array of extra props to accept for this input.\n */\n props: ['options', 'onValue', 'offValue', 'optionsLoader'],\n /**\n * Additional features that should be added to your input\n */\n features: [\n options,\n checkboxes,\n defaultIcon('decorator', 'checkboxDecorator'),\n ],\n};\n\n/**\n * Input definition for a file input.\n * @public\n */\nconst file = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: outer(wrapper(label('$label'), inner(icon('prefix', 'label'), prefix(), fileInput(), fileList(fileItem(icon('fileItem'), fileName('$file.name'), $if('$value.length === 1', fileRemove(icon('fileRemove'), '$ui.remove.value')))), $if('$value.length > 1', fileRemove('$ui.removeAll.value')), noFiles(icon('noFiles'), '$ui.noFiles.value'), suffix(), icon('suffix'))), help('$help'), messages(message('$message.value'))),\n /**\n * The type of node, can be a list, group, or input.\n */\n type: 'input',\n /**\n * The family of inputs this one belongs too. For example \"text\" and \"email\"\n * are both part of the \"text\" family. This is primary used for styling.\n */\n family: 'text',\n /**\n * An array of extra props to accept for this input.\n */\n props: [],\n /**\n * Additional features that should be added to your input\n */\n features: [\n files,\n defaultIcon('fileItem', 'fileItem'),\n defaultIcon('fileRemove', 'fileRemove'),\n defaultIcon('noFiles', 'noFiles'),\n ],\n};\n\n/**\n * Input definition for a form.\n * @public\n */\nconst form = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: formInput('$slots.default', messages(message('$message.value')), actions(submitInput())),\n /**\n * The type of node, can be a list, group, or input.\n */\n type: 'group',\n /**\n * An array of extra props to accept for this input.\n */\n props: [\n 'actions',\n 'submit',\n 'submitLabel',\n 'submitAttrs',\n 'submitBehavior',\n 'incompleteMessage',\n ],\n /**\n * Additional features that should be added to your input\n */\n features: [form$1, disables],\n};\n\n/**\n * Input definition for a group.\n * @public\n */\nconst group = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: fragment('$slots.default'),\n /**\n * The type of node, can be a list, group, or input.\n */\n type: 'group',\n /**\n * An array of extra props to accept for this input.\n */\n props: [],\n /**\n * Additional features that should be added to your input\n */\n features: [disables],\n};\n\n/**\n * Input definition for a hidden input.\n * @public\n */\nconst hidden = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: $root(textInput()),\n /**\n * The type of node, can be a list, group, or input.\n */\n type: 'input',\n /**\n * An array of extra props to accept for this input.\n */\n props: [],\n /**\n * Additional features that should be added to your input\n */\n features: [],\n};\n\n/**\n * Input definition for a list.\n * @public\n */\nconst list = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: fragment('$slots.default'),\n /**\n * The type of node, can be a list, group, or input.\n */\n type: 'list',\n /**\n * An array of extra props to accept for this input.\n */\n props: [],\n /**\n * Additional features that should be added to your input\n */\n features: [disables],\n};\n\n/**\n * Input definition for a radio.\n * @public\n */\nconst radio = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: outer($if('$options == undefined', \n /**\n * Single radio structure.\n */\n boxWrapper(inner(prefix(), box(), decorator(icon('decorator')), suffix()), $if('$label', boxLabel('$label'))), \n /**\n * Multi radio structure.\n */\n fieldset(legend('$label'), help('$help'), boxOptions(boxOption(boxWrapper(inner(prefix(), $extend(box(), {\n bind: '$option.attrs',\n attrs: {\n id: '$option.attrs.id',\n value: '$option.value',\n checked: '$fns.isChecked($option.value)',\n },\n }), decorator(icon('decorator')), suffix()), $if('$option.label', boxLabel('$option.label'))), boxHelp('$option.help'))))), \n // Help text only goes under the input when it is a single.\n $if('$options === undefined && $help', help('$help')), messages(message('$message.value'))),\n /**\n * The type of node, can be a list, group, or input.\n */\n type: 'input',\n /**\n * The family of inputs this one belongs too. For example \"text\" and \"email\"\n * are both part of the \"text\" family. This is primary used for styling.\n */\n family: 'box',\n /**\n * An array of extra props to accept for this input.\n */\n props: ['options', 'onValue', 'offValue', 'optionsLoader'],\n /**\n * Additional features that should be added to your input\n */\n features: [options, radios, defaultIcon('decorator', 'radioDecorator')],\n};\n\n/**\n * Input definition for a select.\n * @public\n */\nconst select = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: outer(wrapper(label('$label'), inner(icon('prefix'), prefix(), selectInput$1($if('$slots.default', () => '$slots.default', $if('$slots.option', optionSlot, option('$option.label')))), $if('$attrs.multiple !== undefined', () => '', icon('select')), suffix(), icon('suffix'))), help('$help'), messages(message('$message.value'))),\n /**\n * The type of node, can be a list, group, or input.\n */\n type: 'input',\n /**\n * An array of extra props to accept for this input.\n */\n props: ['options', 'placeholder', 'optionsLoader'],\n /**\n * Additional features that should be added to your input\n */\n features: [options, select$1, defaultIcon('select', 'select')],\n};\n\n/**\n * Input definition for a textarea.\n * @public\n */\nconst textarea = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: outer(wrapper(label('$label'), inner(icon('prefix', 'label'), prefix(), textareaInput(), suffix(), icon('suffix'))), help('$help'), messages(message('$message.value'))),\n /**\n * The type of node, can be a list, group, or input.\n */\n type: 'input',\n /**\n * An array of extra props to accept for this input.\n */\n props: [],\n /**\n * Additional features that should be added to your input\n */\n features: [initialValue],\n};\n\n/**\n * Input definition for a text.\n * @public\n */\nconst text = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: outer(wrapper(label('$label'), inner(icon('prefix', 'label'), prefix(), textInput(), suffix(), icon('suffix'))), help('$help'), messages(message('$message.value'))),\n /**\n * The type of node, can be a list, group, or input.\n */\n type: 'input',\n /**\n * The family of inputs this one belongs too. For example \"text\" and \"email\"\n * are both part of the \"text\" family. This is primary used for styling.\n */\n family: 'text',\n /**\n * An array of extra props to accept for this input.\n */\n props: [],\n /**\n * Additional features that should be added to your input\n */\n features: [],\n};\n\nvar index = /*#__PURE__*/Object.freeze({\n __proto__: null,\n button: button,\n submit: button,\n checkbox: checkbox,\n file: file,\n form: form,\n group: group,\n hidden: hidden,\n list: list,\n radio: radio,\n select: select,\n textarea: textarea,\n text: text,\n color: text,\n date: text,\n datetimeLocal: text,\n email: text,\n month: text,\n number: text,\n password: text,\n search: text,\n tel: text,\n time: text,\n url: text,\n week: text,\n range: text\n});\n\nexport { $attrs, $extend, $for, $if, $root, actions, box, boxHelp, boxLabel, boxOption, boxOptions, boxWrapper, button, buttonInput, buttonLabel, checkbox, checkboxes, text as color, composable, createLibraryPlugin, createSection, text as date, text as datetimeLocal, decorator, defaultIcon, disables as disablesChildren, text as email, extendSchema, fieldset, file, fileInput, fileItem, fileList, fileName, fileRemove, files, form, formInput, form$1 as forms, fragment, group, help, hidden, icon, ignore as ignores, initialValue, inner, index as inputs, isSchemaObject, isSlotCondition, label, legend, list, localize, message, messages, text as month, noFiles, normalizeBoxes, normalizeOptions, text as number, option, optionSlot, options, outer, text as password, prefix, radio, radios, text as range, text as search, select, selectInput$1 as selectInput, select$1 as selects, button as submit, submitInput, suffix, text as tel, text, textInput, textarea, textareaInput, text as time, text as url, useSchema, text as week, wrapper };\n","import { has, regexForFormat, eq, empty } from '@formkit/utils';\n\n/**\n * Determine if the given input's value was should be considered \"accepted\".\n * @param context - The FormKitValidationContext\n * @public\n */\nconst accepted = function accepted({ value }) {\n return ['yes', 'on', '1', 1, true, 'true'].includes(value);\n};\naccepted.skipEmpty = false;\n\n/**\n * Determine if the given input's value is after a given date.\n * Defaults to current time.\n * @param context - The FormKitValidationContext\n * @public\n */\nconst date_after = function ({ value }, compare = false) {\n const timestamp = Date.parse(compare || new Date());\n const fieldValue = Date.parse(String(value));\n return isNaN(fieldValue) ? false : fieldValue > timestamp;\n};\n\n/**\n * Determine if the given input's value is only alpha characters.\n * @param context - The FormKitValidationContext\n * @public\n */\nconst alpha = function ({ value }, set = 'default') {\n const sets = {\n default: /^[a-zA-ZÀ-ÖØ-öø-ÿĄąĆćČčĎďĘęĚ죳ŃńŇňŘřŚśŠšŤťŮůŹźŻŽžż]+$/,\n latin: /^[a-zA-Z]+$/,\n };\n const selectedSet = has(sets, set) ? set : 'default';\n return sets[selectedSet].test(String(value));\n};\n\n/**\n * Determine if the given input's value is only alpha characters.\n * @param context - The FormKitValidationContext\n * @public\n */\nconst alpha_spaces = function ({ value }, set = 'default') {\n const sets = {\n default: /^[a-zA-ZÀ-ÖØ-öø-ÿĄąĆćČčĎďĘęĚ죳ŃńŇňŘřŚśŠšŤťŮůŹźŻŽžż ]+$/,\n latin: /^[a-zA-Z ]+$/,\n };\n const selectedSet = has(sets, set) ? set : 'default';\n return sets[selectedSet].test(String(value));\n};\n\n/**\n * Determine if the given input's value is only alpha or numeric characters.\n * @param context - The FormKitValidationContext\n * @public\n */\nconst alphanumeric = function ({ value }, set = 'default') {\n const sets = {\n default: /^[a-zA-Z0-9À-ÖØ-öø-ÿĄąĆćĘꣳŃńŚśŹźŻż]+$/,\n latin: /^[a-zA-Z0-9]+$/,\n };\n const selectedSet = has(sets, set) ? set : 'default';\n return sets[selectedSet].test(String(value));\n};\n\n/**\n * Determine if the given input's value before a given date.\n * @param context - The FormKitValidationContext\n * @public\n */\nconst date_before = function ({ value }, compare = false) {\n const timestamp = Date.parse(compare || new Date());\n const fieldValue = Date.parse(String(value));\n return isNaN(fieldValue) ? false : fieldValue < timestamp;\n};\n\n/**\n * Determine if the given input's value is between two other values.\n * @param context - The FormKitValidationContext\n * @public\n */\nconst between = function between({ value }, from, to) {\n if (!isNaN(value) && !isNaN(from) && !isNaN(to)) {\n const val = 1 * value;\n from = Number(from);\n to = Number(to);\n const [a, b] = from <= to ? [from, to] : [to, from];\n return val >= 1 * a && val <= 1 * b;\n }\n return false;\n};\n\nconst hasConfirm = /(_confirm(?:ed)?)$/;\n/**\n * Determine if the given input's value matches another input's value\n * @param context - The FormKitValidationContext\n * @public\n */\nconst confirm = function confirm(node, address, comparison = 'loose') {\n var _a;\n if (!address) {\n address = hasConfirm.test(node.name)\n ? node.name.replace(hasConfirm, '')\n : `${node.name}_confirm`;\n }\n const foreignValue = (_a = node.at(address)) === null || _a === void 0 ? void 0 : _a.value;\n return comparison === 'strict'\n ? node.value === foreignValue\n : node.value == foreignValue;\n};\n\n/**\n * Determine if the given input's value is between two other dates\n * @param context - The FormKitValidationContext\n * @public\n */\nconst date_between = function date_between({ value }, dateA, dateB) {\n dateA = dateA instanceof Date ? dateA.getTime() : Date.parse(dateA);\n dateB = dateB instanceof Date ? dateB.getTime() : Date.parse(dateB);\n const compareTo = value instanceof Date ? value.getTime() : Date.parse(String(value));\n if (dateA && !dateB) {\n dateB = dateA;\n dateA = Date.now();\n }\n else if (!dateA || !compareTo) {\n return false;\n }\n return compareTo >= dateA && compareTo <= dateB;\n};\n\n/**\n * Determine if the given input's value matches a specified date format\n * @param context - The FormKitValidationContext\n * @public\n */\nconst date_format = function date({ value }, format) {\n if (format && typeof format === 'string') {\n return regexForFormat(format).test(String(value));\n }\n return !isNaN(Date.parse(String(value)));\n};\n\n/**\n * Determine if the given input's value is a plausible email address.\n * @param context - The FormKitValidationContext\n * @public\n */\nconst email = function email({ value }) {\n const isEmail = /^(([^<>()\\[\\]\\.,;:\\s@\\\"]+(\\.[^<>()\\[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i;\n return isEmail.test(String(value));\n};\n\n/**\n * Determine if the given input's value ends with a given string\n * @param context - The FormKitValidationContext\n * @public\n */\nconst ends_with = function ends_with({ value }, ...stack) {\n if (typeof value === 'string' && stack.length) {\n return stack.some((item) => {\n return value.endsWith(item);\n });\n }\n else if (typeof value === 'string' && stack.length === 0) {\n return true;\n }\n return false;\n};\n\n/**\n * Determine if the given input's value is in a set of possible values.\n * @param context - The FormKitValidationContext\n * @public\n */\nconst is = function is({ value }, ...stack) {\n return stack.some((item) => {\n if (typeof item === 'object') {\n return eq(item, value);\n }\n return item == value;\n });\n};\n\n/**\n * Determine if the given input's value length is full width.\n * @param context - The FormKitValidationContext\n * @public\n */\nconst length = function length({ value }, first = 0, second = Infinity) {\n first = parseInt(first);\n second = isNaN(parseInt(second)) ? Infinity : parseInt(second);\n const min = first <= second ? first : second;\n const max = second >= first ? second : first;\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length >= min && value.length <= max;\n }\n else if (value && typeof value === 'object') {\n const length = Object.keys(value).length;\n return length >= min && length <= max;\n }\n return false;\n};\n\n/**\n * Determine if the given input's value matches one or more values or regular expressions.\n * @param context - The FormKitValidationContext\n * @public\n */\nconst matches = function matches({ value }, ...stack) {\n return stack.some((pattern) => {\n if (typeof pattern === 'string' &&\n pattern.substr(0, 1) === '/' &&\n pattern.substr(-1) === '/') {\n pattern = new RegExp(pattern.substr(1, pattern.length - 2));\n }\n if (pattern instanceof RegExp) {\n return pattern.test(String(value));\n }\n return pattern === value;\n });\n};\n\n/**\n * Determine if the given input's value is less than the maximum\n * @param context - The FormKitValidationContext\n * @public\n */\nconst max = function max({ value }, maximum = 10) {\n if (Array.isArray(value)) {\n return value.length <= maximum;\n }\n return Number(value) <= Number(maximum);\n};\n\n/**\n * Determine if the given input's value is less than a certain value.\n * @param context - The FormKitValidationContext\n * @public\n */\nconst min = function min({ value }, minimum = 1) {\n if (Array.isArray(value)) {\n return value.length >= minimum;\n }\n return Number(value) >= Number(minimum);\n};\n\n/**\n * Determine if the given input's value is not in a given stack\n * @param context - The FormKitValidationContext\n * @public\n */\nconst not = function not({ value }, ...stack) {\n return !stack.some((item) => {\n if (typeof item === 'object') {\n return eq(item, value);\n }\n return item === value;\n });\n};\n\n/**\n * Determine if the given input's value is numeric\n * @param context - The FormKitValidationContext\n * @public\n */\nconst number = function number({ value }) {\n return !isNaN(value);\n};\n\n/**\n * Determine if the given input's value was required.\n * @param context - The FormKitValidationContext\n * @public\n */\nconst required = function required({ value }, action = 'default') {\n return action === 'trim' && typeof value === 'string'\n ? !empty(value.trim())\n : !empty(value);\n};\n/**\n * This rules should run even if the inputs is empty (obviously)\n */\nrequired.skipEmpty = false;\n\n/**\n * Determine if the given input's value starts with a substring\n * @param context - The FormKitValidationContext\n * @public\n */\nconst starts_with = function starts_with({ value }, ...stack) {\n if (typeof value === 'string' && stack.length) {\n return stack.some((item) => {\n return value.startsWith(item);\n });\n }\n else if (typeof value === 'string' && stack.length === 0) {\n return true;\n }\n return false;\n};\n\n/**\n * Determine if the given input's value is an http url\n * @param context - The FormKitValidationContext\n * @public\n */\nconst url = function url({ value }, ...stack) {\n try {\n const protocols = stack.length ? stack : ['http:', 'https:'];\n const url = new URL(String(value));\n return protocols.includes(url.protocol);\n }\n catch {\n return false;\n }\n};\n\nexport { accepted, alpha, alpha_spaces, alphanumeric, between, confirm, date_after, date_before, date_between, date_format, email, ends_with, is, length, matches, max, min, not, number, required, starts_with, url };\n","import { has } from '@formkit/utils';\nimport { isNode } from '@formkit/core';\n\n/**\n * A registry of all revoked observers.\n */\nconst revokedObservers = new WeakSet();\n/**\n * The FormKitNode to observe.\n * @param node - Any formkit node to observe.\n * @returns\n * @public\n */\nfunction createObserver(node, dependencies) {\n // The dependencies touched during tracking\n const deps = dependencies || Object.assign(new Map(), { active: false });\n // A registry of event receipts returned by the event system\n const receipts = new Map();\n /**\n * Simple function to add a dependency to the deps map.\n * @param event - The name of the event type (like commit/input etc)\n */\n const addDependency = function (event) {\n var _a;\n if (!deps.active)\n return;\n if (!deps.has(node))\n deps.set(node, new Set());\n (_a = deps.get(node)) === null || _a === void 0 ? void 0 : _a.add(event);\n };\n /**\n * Proxies the props of a node so we know which ones were messed with, could\n * potentially be more generalized in the future if we want to support\n * more sub-objects.\n * @param props - The props object from a node\n * @returns\n */\n const observeProps = function (props) {\n return new Proxy(props, {\n get(...args) {\n typeof args[1] === 'string' && addDependency(`prop:${args[1]}`);\n return Reflect.get(...args);\n },\n });\n };\n /**\n * Observes the FormKit ledger \"value\".\n * @param ledger - A formkit ledger counter.\n */\n const observeLedger = function (ledger) {\n return new Proxy(ledger, {\n get(...args) {\n if (args[1] === 'value') {\n return (key) => {\n addDependency(`count:${key}`);\n return ledger.value(key);\n };\n }\n return Reflect.get(...args);\n },\n });\n };\n /**\n * Return values from our observer proxy first pass through this function\n * which gives us a chance to listen sub-dependencies and properties.\n */\n const observe = function (value, property) {\n if (isNode(value)) {\n return createObserver(value, deps);\n }\n if (property === 'value')\n addDependency('commit');\n if (property === 'props')\n return observeProps(value);\n if (property === 'ledger')\n return observeLedger(value);\n return value;\n };\n /**\n * The actual proxy object of the original node.\n */\n const { proxy: observed, revoke, } = Proxy.revocable(node, {\n get(...args) {\n switch (args[1]) {\n case 'deps':\n return deps;\n case 'watch':\n return (block) => watch(observed, block);\n case 'observe':\n return () => {\n const old = new Map(deps);\n deps.clear();\n deps.active = true;\n return old;\n };\n case 'stopObserve':\n return () => {\n const newDeps = new Map(deps);\n deps.active = false;\n return newDeps;\n };\n case 'receipts':\n return receipts;\n case 'kill':\n return () => {\n removeListeners(receipts);\n revokedObservers.add(args[2]);\n revoke();\n };\n }\n const value = Reflect.get(...args);\n // If we're dealing with a function, we need to sub-call the function\n // get that return value, and pass it through the same logic.\n if (typeof value === 'function') {\n return (...subArgs) => {\n const subValue = value(...subArgs);\n return observe(subValue, args[1]);\n };\n }\n return observe(value, args[1]);\n },\n });\n return observed;\n}\n/**\n * Given two maps (toAdd and toRemove) apply the dependencies as event listeners\n * on the underlying nodes.\n * @param node - The node to apply dependencies to\n * @param delta - The toAdd and toRemove dependency Maps\n * @public\n */\nfunction applyListeners(node, [toAdd, toRemove], callback) {\n toAdd.forEach((events, depNode) => {\n events.forEach((event) => {\n node.receipts.has(depNode) || node.receipts.set(depNode, {});\n node.receipts.set(depNode, Object.assign(node.receipts.get(depNode), {\n [event]: depNode.on(event, callback),\n }));\n });\n });\n toRemove.forEach((events, depNode) => {\n events.forEach((event) => {\n if (node.receipts.has(depNode)) {\n const nodeReceipts = node.receipts.get(depNode);\n if (nodeReceipts && has(nodeReceipts, event)) {\n depNode.off(nodeReceipts[event]);\n delete nodeReceipts[event];\n node.receipts.set(depNode, nodeReceipts);\n }\n }\n });\n });\n}\n/**\n * Remove all the receipts from the observed node and subtree.\n * @param receipts - The formkit observer receipts to remove\n * @public\n */\nfunction removeListeners(receipts) {\n receipts.forEach((events, node) => {\n for (const event in events) {\n node.off(events[event]);\n }\n });\n}\n/**\n * Observes a chunk of code to dependencies, and then re-calls that chunk of\n * code when those dependencies are manipulated.\n * @param node - The node to observer\n * @param block - The block of code to observe\n * @public\n */\nasync function watch(node, block) {\n const oldDeps = new Map(node.deps);\n node.observe();\n const res = block(node);\n if (res instanceof Promise)\n await res;\n const newDeps = node.stopObserve();\n applyListeners(node, diffDeps(oldDeps, newDeps), () => watch(node, block));\n}\n/**\n * Determines which nodes should be added as dependencies and which should be\n * removed.\n * @param previous - The previous watcher dependencies\n * @param current - The new/current watcher dependencies\n * @returns\n * @public\n */\nfunction diffDeps(previous, current) {\n const toAdd = new Map();\n const toRemove = new Map();\n current.forEach((events, node) => {\n if (!previous.has(node)) {\n toAdd.set(node, events);\n }\n else {\n const eventsToAdd = new Set();\n const previousEvents = previous.get(node);\n events.forEach((event) => !(previousEvents === null || previousEvents === void 0 ? void 0 : previousEvents.has(event)) && eventsToAdd.add(event));\n toAdd.set(node, eventsToAdd);\n }\n });\n previous.forEach((events, node) => {\n if (!current.has(node)) {\n toRemove.set(node, events);\n }\n else {\n const eventsToRemove = new Set();\n const newEvents = current.get(node);\n events.forEach((event) => !(newEvents === null || newEvents === void 0 ? void 0 : newEvents.has(event)) && eventsToRemove.add(event));\n toRemove.set(node, eventsToRemove);\n }\n });\n return [toAdd, toRemove];\n}\n/**\n * Checks if the given noe is revoked.\n * @param node - Any observed node to check.\n * @returns\n * @public\n */\nfunction isKilled(node) {\n return revokedObservers.has(node);\n}\n\nexport { applyListeners, createObserver, diffDeps, isKilled, removeListeners };\n","import { createMessage } from '@formkit/core';\nimport { createObserver, removeListeners, isKilled, applyListeners, diffDeps } from '@formkit/observer';\nimport { cloneAny, token, eq, empty, clone, has } from '@formkit/utils';\n\n/**\n * Message that gets set when the node is awaiting validation.\n */\nconst validatingMessage = createMessage({\n type: 'state',\n blocking: true,\n visible: false,\n value: true,\n key: 'validating',\n});\n/**\n * The actual validation plugin function, everything must be bootstrapped here.\n * @param node - The node to bind validation to.\n * @public\n */\nfunction createValidationPlugin(baseRules = {}) {\n return function validationPlugin(node) {\n let availableRules = {\n ...baseRules,\n ...cloneAny(node.props.validationRules),\n };\n // create an observed node\n let observedNode = createObserver(node);\n const state = { input: token(), rerun: null, isPassing: true };\n let validation = cloneAny(node.props.validation);\n // If the node's validation props change, reboot:\n node.on('prop:validation', ({ payload }) => reboot(payload, availableRules));\n node.on('prop:validationRules', ({ payload }) => reboot(validation, payload));\n /**\n * Reboots the validation using new rules or declarations/intents.\n * @param newValidation - New validation declaration to use\n * @param newRules - New validation rules to use\n * @returns\n */\n function reboot(newValidation, newRules) {\n if (eq(availableRules, newRules) && eq(validation, newValidation))\n return;\n validation = cloneAny(newValidation);\n availableRules = { ...baseRules, ...cloneAny(node.props.validationRules) };\n // Destroy all observers that may re-trigger validation on an old stack\n removeListeners(observedNode.receipts);\n // Remove all existing messages before re-validating\n node.store.filter(() => false, 'validation');\n node.props.parsedRules = parseRules(newValidation, availableRules);\n observedNode.kill();\n observedNode = createObserver(node);\n validate(observedNode, node.props.parsedRules, state);\n }\n // Validate the field when this plugin is initialized\n node.props.parsedRules = parseRules(validation, availableRules);\n validate(observedNode, node.props.parsedRules, state);\n };\n}\n/**\n * Given parsed validations, a value and a node, run the validations and set\n * the appropriate store messages on the node.\n * @param value - The value being validated\n * @param node - The Node this value belongs to\n * @param rules - The rules\n */\nfunction validate(node, validations, state) {\n if (isKilled(node))\n return;\n state.input = token();\n state.isPassing = true;\n node.store.filter((message) => !message.meta.removeImmediately, 'validation');\n validations.forEach((validation) => validation.debounce && clearTimeout(validation.timer));\n if (validations.length) {\n node.store.set(validatingMessage);\n run(0, validations, node, state, false, () => {\n node.store.remove(validatingMessage.key);\n });\n }\n}\n/**\n * Runs validation rules recursively while collecting dependencies allowing for\n * cross-node validation rules that automatically re-trigger when a foreign\n * value is changed.\n * @param current - The index of the current validation rule\n * @param validations - The remaining validation rule stack to run\n * @param node - An observed node, the owner of this validation stack\n * @param state - An object of state information about this run\n * @param removeImmediately - Should messages created during this call be removed immediately when a new commit takes place?\n * @returns\n */\nfunction run(current, validations, node, state, removeImmediately, complete) {\n const validation = validations[current];\n if (!validation)\n return complete();\n const currentRun = state.input;\n validation.state = null;\n function next(async, result) {\n state.isPassing = state.isPassing && !!result;\n validation.queued = false;\n const newDeps = node.stopObserve();\n applyListeners(node, diffDeps(validation.deps, newDeps), () => {\n validation.queued = true;\n if (state.rerun)\n clearTimeout(state.rerun);\n state.rerun = setTimeout(validate, 0, node, validations, state);\n });\n validation.deps = newDeps;\n if (state.input === currentRun) {\n validation.state = result;\n if (result === false) {\n createFailedMessage(node, validation, removeImmediately || async);\n }\n else {\n removeMessage(node, validation);\n }\n if (validations.length > current + 1) {\n run(current + 1, validations, node, state, removeImmediately || async, complete);\n }\n else {\n // The validation has completed\n complete();\n }\n }\n }\n if ((!empty(node.value) || !validation.skipEmpty) &&\n (state.isPassing || validation.force)) {\n if (validation.queued) {\n runRule(validation, node, (result) => {\n result instanceof Promise\n ? result.then((r) => next(true, r))\n : next(false, result);\n });\n }\n else {\n // In this case our rule is not queued, so literally nothing happened that\n // would affect it, we just need to move past this rule and make no\n // modifications to state\n run(current + 1, validations, node, state, removeImmediately, complete);\n }\n }\n else {\n // This rule is not being run because either:\n // 1. The field is empty and this rule should not run when empty\n // 2. A previous validation rule is failing and this one is not forced\n // In this case we should call next validation.\n if (empty(node.value) && validation.skipEmpty && state.isPassing) {\n // This node has an empty value so its validation was skipped. So we\n // need to queue it up, we do that by starting an observation and just\n // touching the value attribute.\n node.observe();\n node.value;\n // Because this validation rule is skipped when the node's value is empty\n // so we keep the current value `state.isPassing` to the next rule execution\n // if we pass null it will be typecasted to false and all following rules\n // will be ignored including `required` rule which cause odds behavior\n next(false, state.isPassing);\n }\n else {\n next(false, null);\n }\n }\n}\n/**\n * Run a validation rule debounced or not.\n * @param validation - A validation to debounce\n */\nfunction runRule(validation, node, after) {\n if (validation.debounce) {\n validation.timer = setTimeout(() => {\n node.observe();\n after(validation.rule(node, ...validation.args));\n }, validation.debounce);\n }\n else {\n node.observe();\n after(validation.rule(node, ...validation.args));\n }\n}\n/**\n * The messages given to this function have already been set on the node, but\n * any other validation messages on the node that are not included in this\n * stack should be removed because they have been resolved.\n * @param node - The node to operate on.\n * @param messages - A new stack of messages\n */\nfunction removeMessage(node, validation) {\n const key = `rule_${validation.name}`;\n if (has(node.store, key)) {\n node.store.remove(key);\n }\n}\n/**\n *\n * @param value - The value that is failing\n * @param validation - The validation object\n */\nfunction createFailedMessage(node, validation, removeImmediately) {\n const i18nArgs = createI18nArgs(node, validation);\n const customMessage = createCustomMessage(node, validation, i18nArgs);\n // Here we short circuit the i18n system to force the output.\n const message = createMessage({\n blocking: validation.blocking,\n key: `rule_${validation.name}`,\n meta: {\n /**\n * Use this key instead of the message root key to produce i18n validation\n * messages.\n */\n messageKey: validation.name,\n /**\n * For messages that were created *by or after* a debounced or async\n * validation rule — we make note of it so we can immediately remove them\n * as soon as the next commit happens.\n */\n removeImmediately,\n /**\n * Determines if this message should be passed to localization.\n */\n localize: !customMessage,\n /**\n * The arguments that will be passed to the validation rules\n */\n i18nArgs,\n },\n type: 'validation',\n value: customMessage || 'This field is not valid.',\n });\n node.store.set(message);\n return message;\n}\n/**\n * Returns a custom validation message if applicable.\n * @param node - FormKit Node\n * @param validation - The validation rule being processed.\n */\nfunction createCustomMessage(node, validation, i18nArgs) {\n const customMessage = node.props.validationMessages &&\n has(node.props.validationMessages, validation.name)\n ? node.props.validationMessages[validation.name]\n : undefined;\n if (typeof customMessage === 'function') {\n return customMessage(...i18nArgs);\n }\n return customMessage;\n}\n/**\n * Creates the arguments passed to the i18n\n * @param node - The node that performed the validation\n * @param validation - The validation that failed\n */\nfunction createI18nArgs(node, validation) {\n // If a custom message has been found, short circuit the i18n system.\n return [\n {\n node,\n name: createMessageName(node),\n args: validation.args,\n },\n ];\n}\n/**\n * The name used in validation messages.\n * @param node - The node to display\n * @returns\n */\nfunction createMessageName(node) {\n if (typeof node.props.validationLabel === 'function') {\n return node.props.validationLabel(node);\n }\n return (node.props.validationLabel ||\n node.props.label ||\n node.props.name ||\n String(node.name));\n}\n/**\n * Describes hints, must also be changed in the debounceExtractor.\n */\nconst hintPattern = '(?:[\\\\*+?()0-9]+)';\n/**\n * A pattern to describe rule names. Rules names can only contain letters,\n * numbers, and underscores and must start with a letter.\n */\nconst rulePattern = '[a-zA-Z][a-zA-Z0-9_]+';\n/**\n * Regular expression for extracting rule data.\n */\nconst ruleExtractor = new RegExp(`^(${hintPattern}?${rulePattern})(?:\\\\:(.*)+)?$`, 'i');\n/**\n * Validation hints are special characters preceding a validation rule, like\n * !phone\n */\nconst hintExtractor = new RegExp(`^(${hintPattern})(${rulePattern})$`, 'i');\n/**\n * Given a hint string like ^(200)? or ^? or (200)?^ extract the hints to\n * matches.\n */\nconst debounceExtractor = /([\\*+?]+)?(\\(\\d+\\))([\\*+?]+)?/;\n/**\n * Determines if a given string is in the proper debounce format.\n */\nconst hasDebounce = /\\(\\d+\\)/;\n/**\n * The default values of the available validation hints.\n */\nconst defaultHints = {\n blocking: true,\n debounce: 0,\n force: false,\n skipEmpty: true,\n name: '',\n};\n/**\n * Parse validation intents and strings into validation rule stacks.\n * @param validation - Either a string a validation rules, or proper array of structured rules.\n * @internal\n */\nfunction parseRules(validation, rules) {\n if (!validation)\n return [];\n const intents = typeof validation === 'string'\n ? extractRules(validation)\n : clone(validation);\n return intents.reduce((validations, args) => {\n let rule = args.shift();\n const hints = {};\n if (typeof rule === 'string') {\n const [ruleName, parsedHints] = parseHints(rule);\n if (has(rules, ruleName)) {\n rule = rules[ruleName];\n Object.assign(hints, parsedHints);\n }\n }\n if (typeof rule === 'function') {\n validations.push({\n rule,\n args,\n timer: 0,\n state: null,\n queued: true,\n deps: new Map(),\n ...defaultHints,\n ...fnHints(hints, rule),\n });\n }\n return validations;\n }, []);\n}\n/**\n * A string of validation rules written in FormKitRule notation.\n * @param validation - The string of rules\n * @internal\n */\nfunction extractRules(validation) {\n return validation.split('|').reduce((rules, rule) => {\n const parsedRule = parseRule(rule);\n if (parsedRule) {\n rules.push(parsedRule);\n }\n return rules;\n }, []);\n}\n/**\n * Given a rule like confirm:password_confirm produce a FormKitValidationIntent\n * @param rule - A string representing a validation rule.\n * @returns\n */\nfunction parseRule(rule) {\n const trimmed = rule.trim();\n if (trimmed) {\n const matches = trimmed.match(ruleExtractor);\n if (matches && typeof matches[1] === 'string') {\n const ruleName = matches[1].trim();\n const args = matches[2] && typeof matches[2] === 'string'\n ? matches[2].split(',').map((s) => s.trim())\n : [];\n return [ruleName, ...args];\n }\n }\n return false;\n}\n/**\n * Given a rule name, detect if there are any additional hints like !\n * @param ruleName - string representing a rule name\n * @returns\n */\nfunction parseHints(ruleName) {\n const matches = ruleName.match(hintExtractor);\n if (!matches) {\n return [ruleName, { name: ruleName }];\n }\n const map = {\n '*': { force: true },\n '+': { skipEmpty: false },\n '?': { blocking: false },\n };\n const [, hints, rule] = matches;\n const hintGroups = hasDebounce.test(hints)\n ? hints.match(debounceExtractor) || []\n : [, hints];\n return [\n rule,\n [hintGroups[1], hintGroups[2], hintGroups[3]].reduce((hints, group) => {\n if (!group)\n return hints;\n if (hasDebounce.test(group)) {\n hints.debounce = parseInt(group.substr(1, group.length - 1));\n }\n else {\n group\n .split('')\n .forEach((hint) => has(map, hint) && Object.assign(hints, map[hint]));\n }\n return hints;\n }, { name: rule }),\n ];\n}\n/**\n * Extracts hint properties from the validation rule function itself and applies\n * them if they are not already in the set of validation hints extracted from\n * strings.\n * @param existingHints - An existing set of hints already parsed\n * @param rule - The actual rule function, which can contain hint properties\n * @returns\n */\nfunction fnHints(existingHints, rule) {\n if (!existingHints.name) {\n existingHints.name = rule.ruleName || rule.name;\n }\n return ['skipEmpty', 'force', 'debounce', 'blocking'].reduce((hints, hint) => {\n if (has(rule, hint) && !has(hints, hint)) {\n Object.assign(hints, {\n [hint]: rule[hint],\n });\n }\n return hints;\n }, existingHints);\n}\n/**\n * Extracts all validation messages from the given node and all its descendants.\n * This is not reactive and must be re called each time the messages change.\n * @param node - The FormKit node to extract validation rules from — as well as its descendants.\n * @public\n */\nfunction getValidationMessages(node) {\n const messages = new Map();\n const extract = (n) => {\n const nodeMessages = [];\n for (const key in n.store) {\n const message = n.store[key];\n if (message.type === 'validation' &&\n message.blocking &&\n message.visible &&\n typeof message.value === 'string') {\n nodeMessages.push(message);\n }\n }\n if (nodeMessages.length) {\n messages.set(n, nodeMessages);\n }\n return n;\n };\n extract(node).walk(extract);\n return messages;\n}\n\nexport { createValidationPlugin, getValidationMessages };\n","import { has } from '@formkit/utils';\n\n/**\n * Given a string, convert it to sentence case.\n * @param item - The string to sentence case\n * @returns\n * @public\n */\nfunction sentence(str) {\n return str[0].toUpperCase() + str.substr(1);\n}\n/**\n * Creates an oxford-comma separated list of items.\n * @param args - items to list out\n * @param conjunction - in: x, y, and z \"and\" is the conjunction to use\n * @returns\n * @public\n */\nfunction list(items, conjunction = 'or') {\n return items.reduce((oxford, item, index) => {\n oxford += item;\n if (index <= items.length - 2 && items.length > 2) {\n oxford += ', ';\n }\n if (index === items.length - 2) {\n oxford += `${items.length === 2 ? ' ' : ''}${conjunction} `;\n }\n return oxford;\n }, '');\n}\n/**\n * Given a string or a date return a nice human-readable version.\n * @param date - A string or a date.\n * @public\n */\nfunction date(date) {\n const dateTime = typeof date === 'string' ? new Date(Date.parse(date)) : date;\n if (!(dateTime instanceof Date)) {\n return '(unknown)';\n }\n return new Intl.DateTimeFormat(undefined, {\n dateStyle: 'medium',\n }).format(dateTime);\n}\n/**\n * Orders two variables smallest to largest.\n * @param first - first argument\n * @param second - Second argument\n * @returns\n * @public\n */\nfunction order(first, second) {\n return Number(first) >= Number(second) ? [second, first] : [first, second];\n}\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$B = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'إضافة',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'إزالة',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'إزالة الكل',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'عذرا، لم يتم تعبئة جميع الحقول بشكل صحيح.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'إرسال',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'لا يوجد ملف مختار',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'تحرك لأعلى',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'انتقل لأسفل',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'يتم الآن التحميل...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'تحميل المزيد',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$B = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `الرجاء قبول ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `يجب أن يكون ${sentence(name)} بعد ${date(args[0])}.`;\n /* */\n }\n /* */\n return `يجب أن يكون ${sentence(name)} في المستقبل.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `يمكن أن يحتوي ${sentence(name)} على أحرف أبجدية فقط.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `يمكن أن يحتوي ${sentence(name)} على أحرف وأرقام فقط.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `يمكن أن تحتوي ${sentence(name)} على أحرف ومسافات فقط.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `يجب أن يكون ${sentence(name)} قبل ${date(args[0])}.`;\n /* */\n }\n /* */\n return `يجب أن يكون ${sentence(name)} في الماضي.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `تمت تهيئة هذا الحقل بشكل غير صحيح ولا يمكن إرساله.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `يجب أن يكون ${sentence(name)} ما بين ${a} و ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} غير متطابق.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} ليس تاريخًا صالحًا ، يرجى استخدام التنسيق ${args[0]}`;\n /* */\n }\n /* */\n return 'تمت تهيئة هذا الحقل بشكل غير صحيح ولا يمكن إرساله';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `يجب أن يكون ${sentence(name)} بين ${date(args[0])} و ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'الرجاء أدخال بريد إليكتروني صالح.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `لا ينتهي ${sentence(name)} بـ ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} ليست قيمة مسموح بها.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `يجب أن يكون ${sentence(name)} حرفًا واحدًا على الأقل.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `يجب أن يكون ${sentence(name)} أقل من أو يساوي ${max} حرفًا.`;\n /* */\n }\n if (min === max) {\n /* */\n return `يجب أن يتكون ${sentence(name)} من الأحرف ${max}.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `يجب أن يكون ${sentence(name)} أكبر من أو يساوي ${min} حرفًا.`;\n /* */\n }\n /* */\n return `يجب أن يكون ${sentence(name)} بين ${min} و ${max} حرفًا.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} ليست قيمة مسموح بها.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `لا يمكن أن يكون أكثر من ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `يجب أن يكون ${sentence(name)} أقل من أو يساوي ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'لا يسمح بتنسيقات الملفات.';\n /* */\n }\n /* */\n return `يجب أن يكون ${sentence(name)} من النوع: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `لا يمكن أن يكون أقل من ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `يجب أن يكون ${sentence(name)} على الأقل ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” ليس ${name} مسموحًا به.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} يجب ان يكون رقماً`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} مطلوب.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `لا يبدأ ${sentence(name)} بـ ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `الرجاء تضمين عنوان رابط صحيح.`;\n /* */\n },\n};\n\nvar ar = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$B,\n validation: validation$B\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$A = {\n /**\n * Shown on a button for adding additional items.\n */\n add: 'əlavə edin',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'çıxarmaq',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Hamısını silin',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Üzr istəyirik, bütün sahələr düzgün doldurulmayıb.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Təqdim et',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Heç bir fayl seçilməyib',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'yuxarı hərəkət',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Aşağı hərəkət',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Yükləmə...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Daha çox yüklə',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$A = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `${name} qəbul edin.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} ${date(args[0])} sonra olmalıdır.`;\n /* */\n }\n /* */\n return `${sentence(name)} gələcəkdə olmalıdır.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} yalnız əlifba sırası simvollarından ibarət ola bilər.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} yalnız hərf və rəqəmlərdən ibarət ola bilər.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} yalnız hərflərdən və boşluqlardan ibarət ola bilər.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} ${date(args[0])} əvvəl olmalıdır.`;\n /* */\n }\n /* */\n return `${sentence(name)} keçmişdə olmalıdır.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Bu sahə səhv konfiqurasiya edilib və onu təqdim etmək mümkün deyil.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} ${a} və ${b} arasında olmalıdır.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} uyğun gəlmir.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} etibarlı tarix deyil, ${args[0]} formatından istifadə edin`;\n /* */\n }\n /* */\n return 'Bu sahə səhv konfiqurasiya edilib və onu təqdim etmək mümkün deyil';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} ${date(args[0])} və ${date(args[1])} arasında olmalıdır`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Etibarlı e-poçt ünvanı daxil edin.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} ${list(args)} ilə bitmir.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} icazə verilən dəyər deyil.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} ən azı bir simvol olmalıdır.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} ${max} simvoldan kiçik və ya ona bərabər olmalıdır.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} ${max} simvol uzunluğunda olmalıdır.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} ${min} simvoldan böyük və ya ona bərabər olmalıdır.`;\n /* */\n }\n /* */\n return `${sentence(name)} ${min} və ${max} simvol arasında olmalıdır.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} icazə verilən dəyər deyil.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${args[0]} ${name}-dən çox ola bilməz.`;\n /* */\n }\n /* */\n return `${sentence(name)} ${args[0]} dəyərindən kiçik və ya ona bərabər olmalıdır.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Fayl formatlarına icazə verilmir.';\n /* */\n }\n /* */\n return `${sentence(name)} aşağıdakı tipdə olmalıdır: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${args[0]} ${name}-dən az ola bilməz.`;\n /* */\n }\n /* */\n return `${sentence(name)} ən azı ${args[0]} olmalıdır.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” icazə verilən ${name} deyil.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} rəqəm olmalıdır.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} tələb olunur.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} ${list(args)} ilə başlamır.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Zəhmət olmasa etibarlı url daxil edin`;\n /* */\n },\n};\n\nvar az = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$A,\n validation: validation$A\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$z = {\n /**\n * Shown on a button for adding additional items.\n */\n add: 'Добави',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Премахни',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Премахни всички',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Извинете, не всички полета са попълнени правилно.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Изпрати',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Няма избран файл',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Преместване нагоре',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Преместете се надолу',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Зареждане...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Заредете повече',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$z = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Моля приемете ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} трябва да е след ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} трябва да бъде в бъдещето.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} може да съдържа само букви.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} може да съдържа само букви и цифри.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} може да съдържа само букви и интервали.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} трябва да е преди ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} трябва да бъде в миналото.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Това поле е конфигурирано неправилно и не може да бъде изпратено`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} трябва да бъде между ${a} и ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} не съвпада.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} е невалидна дата. Моля, използвайте формата ${args[0]}`;\n /* */\n }\n /* */\n return 'Това поле е конфигурирано неправилно и не може да бъде изпратено';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} трябва да бъде между ${date(args[0])} и ${date(args[1])}.`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Моля, въведете валиден имейл адрес.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} не завършва на ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} е неразрешена стойност.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} трябва да има поне един символ.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} трябва да бъде по-малко или равно на ${max} символа.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} трябва да бъде ${max} символи дълго.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} трябва да бъде по-голямо или равно на ${min} символа.`;\n /* */\n }\n /* */\n return `${sentence(name)} трябва да бъде между ${min} и ${max} символа.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} е неразрешена стойност.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Не може да има повече от ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} трябва да бъде по-малко или равно на ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Не са разрешени никакви файлови формати.';\n /* */\n }\n /* */\n return `${sentence(name)} трябва да бъде от тип: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Не може да има по-малко от ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} трябва да бъде поне ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” е неразрешен ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} трябва да бъде число.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} е задължително.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} не започва с ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Моля, въведете валиден URL адрес.`;\n /* */\n },\n};\n\nvar bg = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$z,\n validation: validation$z\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$y = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'Přidat',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Odebrat',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Odebrat vše',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Pardon, ale ne všechna pole jsou vyplněna správně.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Odeslat',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Žádný soubor nebyl vybrán',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Pohyb nahoru',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Posunout dolů',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Načítání...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Načíst více',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$y = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Prosím, zaškrtněte ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} musí být po ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} musí být v budoucnosti.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} může obsahovat pouze písmena.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} může obsahovat pouze písmena a čísla.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} musí být před ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} musí být v minulosti.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Toto pole bylo špatně nakonfigurováno a nemůže být odesláno.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} musí být mezi ${a} a ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} nejsou shodná.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} není platné datum, prosím, použijte formát ${args[0]}`;\n /* */\n }\n /* */\n return 'Toto pole bylo špatně nakonfigurováno a nemůže být odesláno.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} musí být mezi ${date(args[0])} a ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Prosím, zadejte platnou e-mailovou adresu.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} nekončí na ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} není povolená hodnota.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} musí mít nejméně jeden znak.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} může mít maximálně ${max} znaků.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} by mělo být ${max} znaků dlouhé.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} musí obsahovat minimálně ${min} znaků.`;\n /* */\n }\n /* */\n return `${sentence(name)} musí být dlouhé ${min} až ${max} znaků.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} není povolená hodnota.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Nelze použít více než ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} musí mít menší nebo rovno než ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Nejsou nakonfigurovány povolené typy souborů.';\n /* */\n }\n /* */\n return `${sentence(name)} musí být typu: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Nelze mít méně než ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} musí být minimálně ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” není dovolená hodnota pro ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} musí být číslo.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} je povinné.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} nezačíná na ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Zadejte, prosím, platnou URL adresu.`;\n /* */\n },\n};\n\nvar cs = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$y,\n validation: validation$y\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$x = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'Tilføj',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Fjern',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Fjern alle',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Alle felter er ikke korrekt udfyldt.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Send',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Ingen filer valgt',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Flyt op',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Flyt ned',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Indlæser...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Indlæs mere',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$x = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Accepter venligst ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} skal være senere end ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} skal være i fremtiden.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} kan kun indeholde bogstaver.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} kan kun indeholde bogstaver og tal.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} kan kun indeholde bogstaver og mellemrum.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} skal være før ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} skal være før i dag.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Dette felt er ikke konfigureret korrekt og kan derfor ikke blive sendt.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} skal være mellem ${a} og ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} matcher ikke.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} er ikke gyldig, brug venligst formatet ${args[0]}`;\n /* */\n }\n /* */\n return 'Dette felt er ikke konfigureret korrekt og kan derfor ikke blive sendt.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} skal være mellem ${date(args[0])} og ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Indtast venligst en gyldig email-adresse.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} slutter ikke med ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} er ikke en gyldig værdi.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} skal være på mindst ét tegn.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} skal være på højst ${max} tegn.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} skal være ${max} tegn lange.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} skal være på mindst ${min} tegn.`;\n /* */\n }\n /* */\n return `${sentence(name)} skal være på mindst ${min} og højst ${max} tegn.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} er ikke en gyldig værdi.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Kan ikke have flere end ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} skal være mindre eller lig med ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Ingen filformater tilladt.';\n /* */\n }\n /* */\n return `${sentence(name)} skal være af filtypen: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Kan ikke have mindre end ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} skal være mindst ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” er ikke en tilladt ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} skal være et tal.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} er påkrævet.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} starter ikke med ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Indtast venligst en gyldig URL.`;\n /* */\n },\n};\n\nvar da = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$x,\n validation: validation$x\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$w = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'Hinzufügen',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Entfernen',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Alles entfernen',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Entschuldigung, nicht alle Felder wurden korrekt ausgefüllt.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Senden',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Keine Datei ausgewählt',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Gehe nach oben',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Gehen Sie nach unten',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Wird geladen...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Mehr laden',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$w = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Bitte ${name} akzeptieren.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} muss nach dem ${date(args[0])} liegen.`;\n /* */\n }\n /* */\n return `${sentence(name)} muss in der Zukunft liegen.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} darf nur Buchstaben enthalten.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} darf nur Buchstaben und Zahlen enthalten.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} dürfen nur Buchstaben und Leerzeichen enthalten.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} muss vor dem ${date(args[0])} liegen.`;\n /* */\n }\n /* */\n return `${sentence(name)} muss in der Vergangenheit liegen.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Dieses Feld wurde falsch konfiguriert und kann nicht übermittelt werden.`;\n /* */\n }\n /* */\n return `${sentence(name)} muss zwischen ${args[0]} und ${args[1]} sein.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} stimmt nicht überein.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} ist kein gültiges Datum im Format ${args[0]}.`;\n /* */\n }\n /* */\n return 'Dieses Feld wurde falsch konfiguriert und kann nicht übermittelt werden.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} muss zwischen ${date(args[0])} und ${date(args[1])} liegen.`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'E-Mail Adresse ist ungültig.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} endet nicht mit ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} enthält einen ungültigen Wert.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = first <= second ? first : second;\n const max = second >= first ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} muss mindestens ein Zeichen enthalten.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} darf maximal ${max} Zeichen enthalten.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} sollte ${max} Zeichen lang sein.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} muss mindestens ${min} Zeichen enthalten.`;\n /* */\n }\n /* */\n return `${sentence(name)} muss zwischen ${min} und ${max} Zeichen enthalten.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} enthält einen ungültigen Wert.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Darf maximal ${args[0]} ${name} haben.`;\n /* */\n }\n /* */\n return `${sentence(name)} darf maximal ${args[0]} sein.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Keine Dateiformate konfiguriert.';\n /* */\n }\n /* */\n return `${sentence(name)} muss vom Typ ${args[0]} sein.`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Mindestens ${args[0]} ${name} erforderlich.`;\n /* */\n }\n /* */\n return `${sentence(name)} muss mindestens ${args[0]} sein.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” ist kein gültiger Wert für ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} muss eine Zahl sein.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} ist erforderlich.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} beginnt nicht mit ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `URL ist ungültig.`;\n /* */\n },\n};\n\nvar de = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$w,\n validation: validation$w\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$v = {\n /**\n * Shown on a button for adding additional items.\n */\n add: 'Προσθήκη',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Αφαίρεση',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Αφαίρεση όλων',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Λυπούμαστε, υπάρχουν πεδία που δεν έχουν συμπληρωθεί σωστά.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Υποβολή',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Κανένα αρχείο δεν έχει επιλεγεί',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Προς τα επάνω',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Προς τα κάτω',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Φορτώνει...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Φόρτωση περισσότερων',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$v = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Παρακαλώ αποδεχτείτε το ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} πρέπει να είναι μετά της ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} πρέπει να είναι στο μέλλον.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} μπορεί να περιέχει μόνο αλφαβητικούς χαρακτήρες.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} μπορεί να περιέχει μόνο γράμματα και αριθμούς.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} μπορεί να περιέχει μόνο γράμματα και κενά.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} πρέπει να είναι πριν της ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} πρέπει να είναι στο παρελθόν.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Αυτό το πεδίο έχει ρυθμιστεί λανθασμένα και δεν μπορεί να υποβληθεί.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} πρέπει να είναι μεταξύ ${a} και ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} δεν ταιριάζει.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} δεν είναι έγυρη ημερομηνία, παρακαλώ ακολουθήστε την διαμόρφωση ${args[0]}`;\n /* */\n }\n /* */\n return 'Αυτό το πεδίο έχει ρυθμιστεί λανθασμένα και δεν μπορεί να υποβληθεί';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} πρέπει να είναι μεταξύ ${date(args[0])} και ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Παρακαλώ πληκτρολογήστε μια έγκυρη email διεύθυνση. ',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} δεν καταλήγει με ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} δεν είναι μια επιτρεπτή τιμή.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} πρέπει να είναι τουλάχιστον ενός χαρακτήρα.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} πρέπει να είναι λιγότεροι ή ίσοι με ${max} χαρακτήρες.`;\n /* */\n }\n if (min === max) {\n /* */\n return `Το ${sentence(name)} θα πρέπει να έχει μήκος ${max} χαρακτήρες.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} πρέπει να είναι περισσότεροι ή ίσοι με ${min} χαρακτήρες.`;\n /* */\n }\n /* */\n return `${sentence(name)} πρέπει να είναι μεταξύ ${min} και ${max} χαρακτήρες.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} δεν είναι μια επιτρεπτή τιμή.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Δεν μπορεί να έχει παραπάνω από ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} πρέπει αν είναι λιγότερο ή ίσο με το ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Δεν επιτρέπονται αρχεία.';\n /* */\n }\n /* */\n return `${sentence(name)} πρέπει να είναι τύπου: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Δεν μπορεί να είναι λιγότερο από ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} πρέπει να είναι τουλάχιστον ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” δεν είναι μια επιτρεπτή ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} πρέπει να είναι αριθμός.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} είναι υποχρεωτικό.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} δεν αρχίζει με ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Παρακαλώ συμπεριλάβετε μια έγκυρη διεύθυνση ιστοσελίδας.`;\n /* */\n },\n};\n\nvar el = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$v,\n validation: validation$v\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$u = {\n /**\n * Shown on a button for adding additional items.\n */\n add: 'Add',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Remove',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Remove all',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Sorry, not all fields are filled out correctly.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Submit',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'No file chosen',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Move up',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Move down',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Loading...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Load more',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$u = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Please accept the ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} must be after ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} must be in the future.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} can only contain alphabetical characters.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} can only contain letters and numbers.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} can only contain letters and spaces.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} must be before ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} must be in the past.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `This field was configured incorrectly and can’t be submitted.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} must be between ${a} and ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} does not match.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} is not a valid date, please use the format ${args[0]}`;\n /* */\n }\n /* */\n return 'This field was configured incorrectly and can’t be submitted';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} must be between ${date(args[0])} and ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Please enter a valid email address.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} doesn’t end with ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} is not an allowed value.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} must be at least one character.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} must be less than or equal to ${max} characters.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} should be ${max} characters long.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} must be greater than or equal to ${min} characters.`;\n /* */\n }\n /* */\n return `${sentence(name)} must be between ${min} and ${max} characters.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} is not an allowed value.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Cannot have more than ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} must be less than or equal to ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'No file formats allowed.';\n /* */\n }\n /* */\n return `${sentence(name)} must be of the type: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Cannot have less than ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} must be at least ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” is not an allowed ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} must be a number.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} is required.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} doesn’t start with ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Please include a valid url.`;\n /* */\n },\n};\n\nvar en = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$u,\n validation: validation$u\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$t = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'Añadir',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Quitar',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Quitar todos',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Discúlpe, los campos no fueron completados correctamente.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Enviar',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Archivo no seleccionado',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Moverse hacia arriba',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Moverse hacia abajo',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Cargando...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Cargar más',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$t = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Acepte el ${name} por favor.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} debe ser posterior a ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} debe ser una fecha futura.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} debe contener solo caractéres alfabéticos.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} debe ser alfanumérico.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} espacios alfa solo pueden contener letras y espacios.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} debe ser anterior a ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} debe ser una fecha pasada.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `El campo no fue completado correctamente y no puede ser enviado.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} debe estar entre ${a} y ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} no coincide.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} no es una fecha válida, por favor utilice el formato ${args[0]}`;\n /* */\n }\n /* */\n return 'El campo no fue completado correctamente y no puede ser enviado.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} debe estar entre ${date(args[0])} y ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Ingrese una dirección de correo electrónico válida por favor.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} no termina con ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} no es un valor permitido.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} debe tener al menos una letra.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} debe tener como máximo ${max} caractéres.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} debe tener ${max} caracteres.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} debe tener como mínimo ${min} caractéres.`;\n /* */\n }\n /* */\n return `${sentence(name)} debe tener entre ${min} y ${max} caractéres.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} no es un valor permitido.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `No puede tener más de ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} debe ser menor o igual a ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'No existen formatos de archivos permitidos.';\n /* */\n }\n /* */\n return `${sentence(name)} debe ser del tipo: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `No puede tener menos de ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} debe ser de al menos ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” no es un valor permitido de ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} debe ser un número.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} es requerido.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} debe comenzar con ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Proporcione una URL válida por favor.`;\n /* */\n },\n};\n\nvar es = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$t,\n validation: validation$t\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$s = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'افزودن',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'حذف',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'همه را حذف کنید',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'همه فیلدها به‌درستی پر نشده‌اند',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'ثبت',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'هیچ فایلی انتخاب نشده است',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'حرکت به بالا',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'حرکت به پایین',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'در حال بارگذاری...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'بارگذاری بیشتر',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$s = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `لطفاً ${name} را بپذیرید.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} باید بعد از تاریخ ${date(args[0])} باشد.`;\n /* */\n }\n /* */\n return `${sentence(name)} باید مربوط به آینده باشد.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} فقط میتواند شامل حروف الفبا باشد.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} فقط میتواند شامل حروف و اعداد باشد.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} فقط می تواند شامل حروف و فاصله باشد.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} باید قبل از تاریخ ${date(args[0])} باشد.`;\n /* */\n }\n /* */\n return `${sentence(name)} باید مربوط به گذشته باشد.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `این فیلد به اشتباه پیکربندی شده است و قابل ارسال نیست`;\n /* */\n }\n /* */\n return `${sentence(name)} باید بین ${args[0]} و ${args[1]} باشد.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} مطابقت ندارد.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} تاریخ معتبری نیست، لطفاً از قالب ${args[0]} استفاده کنید\n`;\n /* */\n }\n /* */\n return 'این فیلد به اشتباه پیکربندی شده است و قابل ارسال نیست';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} باید بین ${date(args[0])} و ${date(args[1])} باشد.`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'لطفا آدرس ایمیل معتبر وارد کنید.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} باید به ${list(args)} ختم شود.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} مجاز نیست.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = first <= second ? first : second;\n const max = second >= first ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} باید حداقل یک کاراکتر باشد.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} باید کمتر یا برابر با ${max} کاراکتر باشد.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} باید ${max} کاراکتر طولانی باشد.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} باید بزرگتر یا برابر با ${min} کاراکتر باشد.`;\n /* */\n }\n /* */\n return `${sentence(name)} باید بین ${min} و ${max} کاراکتر باشد.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} مجاز نیست.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${name} نمی تواند بیش از ${args[0]} باشد.`;\n /* */\n }\n /* */\n return `${sentence(name)} باید کمتر یا برابر با ${args[0]} باشد.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'فرمت فایل مجاز نیست.';\n /* */\n }\n /* */\n return `${sentence(name)} باید از این نوع باشد: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${name} نمی تواند کمتر از ${args[0]} باشد.\n`;\n /* */\n }\n /* */\n return `${sentence(name)} باید حداقل ${args[0]} باشد.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `\"${value}\" یک ${name} مجاز نیست.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} باید عدد باشد.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `پر کردن ${sentence(name)} اجباری است.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} باید با ${list(args)} شروع شود.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `لطفاً آدرس اینترنتی معتبر وارد کنید.`;\n /* */\n },\n};\n\nvar fa = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$s,\n validation: validation$s\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$r = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'Lisää',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Poista',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Poista kaikki',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Kaikkia kenttiä ei ole täytetty oikein.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Tallenna',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Ei valittuja tiedostoja',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Siirrä ylös',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Siirrä alas',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Ladataan...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Lataa lisää',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$r = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Ole hyvä ja hyväksy ${name}`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} tulee olla ${date(args[0])} jälkeen.`;\n /* */\n }\n /* */\n return `${sentence(name)} on oltava tulevaisuudessa.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} saa sisältää vain kirjaimia.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} saa sisältää vain kirjaimia ja numeroita.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} voivat sisältää vain kirjaimia ja välilyöntejä.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} tulee olla ennen: ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} on oltava menneisyydessä.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Tämä kenttä on täytetty virheellisesti joten sitä ei voitu lähettää.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} on oltava välillä ${a} - ${b} `;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} ei täsmää.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} ei ole validi päivämäärä, ole hyvä ja syötä muodossa: ${args[0]}`;\n /* */\n }\n /* */\n return 'Tämä kenttä on täytetty virheellisesti joten sitä ei voitu lähettää.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} on oltava välillä ${date(args[0])} - ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Syötä validi sähköpostiosoite.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} tulee päättyä ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} ei ole sallittu vaihtoehto.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} on oltava vähintään yksi merkki.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} on oltava ${max} tai alle merkkiä.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} pitäisi olla ${max} merkkiä pitkä.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} on oltava vähintään ${min} merkkiä.`;\n /* */\n }\n /* */\n return `${sentence(name)} on oltava vähintään ${min}, enintään ${max} merkkiä.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} ei ole sallittu arvo.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Valitse enintään ${args[0]} ${name} vaihtoehtoa.`;\n /* */\n }\n /* */\n return `${sentence(name)} on oltava ${args[0]} tai alle.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Tiedostoja ei sallita.';\n /* */\n }\n /* */\n return `${sentence(name)} tulee olla ${args[0]}-tiedostotyyppiä.`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Valitse vähintään ${args[0]} ${name} vaihtoehtoa.`;\n /* */\n }\n /* */\n return `${sentence(name)} tulee olla ${args[0]} tai suurempi.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” ei ole sallittu ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `Kentän ${sentence(name)} tulee olla numero.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} vaaditaan.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} on alettava ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Syötä validi url-osoite.`;\n /* */\n },\n};\n\nvar fi = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$r,\n validation: validation$r\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$q = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'Ajouter',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Supprimer',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Enlever tout',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Désolé, tous les champs ne sont pas remplis correctement.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Valider',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Aucun fichier choisi',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Déplacez-vous',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Déplacez-vous',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Chargement...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Chargez plus',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$q = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Veuillez accepter le ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} doit être postérieure au ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} doit être dans le futur.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} ne peut contenir que des caractères alphabétiques.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} ne peut contenir que des lettres et des chiffres.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} ne peuvent contenir que des lettres et des espaces.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} doit être antérieure au ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} doit être dans le passé.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Ce champ a été configuré de manière incorrecte et ne peut pas être soumis.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} doit être comprise entre ${a} et ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} ne correspond pas.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} n'est pas une date valide, veuillez utiliser le format ${args[0]}`;\n /* */\n }\n /* */\n return 'Ce champ a été configuré de manière incorrecte et ne peut pas être soumis.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} doit être comprise entre ${date(args[0])} et ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Veuillez saisir une adresse email valide.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} ne se termine pas par ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} n'est pas une valeur autorisée.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} doit comporter au moins un caractère.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} doit être inférieur ou égal à ${max} caractères.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} doit contenir ${max} caractères.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} doit être supérieur ou égal à ${min} caractères.`;\n /* */\n }\n /* */\n return `${sentence(name)} doit être comprise entre ${min} et ${max} caractères.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} n'est pas une valeur autorisée.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Ne peut pas avoir plus de ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} doit être inférieur ou égal à ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Aucun format de fichier n’est autorisé';\n /* */\n }\n /* */\n return `${sentence(name)} doit être du type: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Ne peut pas avoir moins de ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} doit être au moins de ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” n'est pas un ${name} autorisé.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} doit être un nombre.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} est requis.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} ne commence pas par ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Veuillez saisir une url valide.`;\n /* */\n },\n};\n\nvar fr = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$q,\n validation: validation$q\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$p = {\n /**\n * Shown on a button for adding additional items.\n */\n add: 'Foeg ta',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Ferwider',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Ferwider alles',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Sorry, net alle fjilden binne korrekt ynfolle.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Ferstjoere',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Gjin bestân keazen',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$p = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Akseptearje de ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} moat nei ${date(args[0])} wêze.`;\n /* */\n }\n /* */\n return `${sentence(name)} moat yn de takomst lizze.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} mei allinne alfabetyske tekens befetsje.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} mei allinne letters en sifers befetsje.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} mei allinne letters en spaasjes befetsje.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} moat foar ${date(args[0])} falle.`;\n /* */\n }\n /* */\n return `${sentence(name)} moat yn it ferline wêze.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Dit fjild is ferkeard konfigurearre en kin net ferstjoerd wurde.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} moat tusken ${a} en ${b} lizze.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} komt net oerien.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} is gjin jildige datum, brûk de notaasje ${args[0]}`;\n /* */\n }\n /* */\n return 'Dit fjild is ferkeard konfigurearre en kin net ferstjoerd wurde';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} moat tusken ${date(args[0])} en ${date(args[1])} lizze`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Folje in jildich e-mailadres yn.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} einiget net mei ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} is gjin tastiene wearde.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} moat minimaal ien teken wêze.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} moat lytser wêze as of gelyk wêze oan ${max} tekens.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} moat ${max} tekens lang wêze.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} moat grutter wêze as of gelyk wêze oan ${min} tekens.`;\n /* */\n }\n /* */\n return `${sentence(name)} moat tusken de ${min} en ${max} tekens befetsje.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} is gjin tastiene wearde.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Mei net mear as ${args[0]} ${name} hawwe.`;\n /* */\n }\n /* */\n return `${sentence(name)} moat lytser wêze as of gelyk wêze oan ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Gjin bestânsnotaasjes tastien.';\n /* */\n }\n /* */\n return `${sentence(name)} moat fan it type: ${args[0]} wêze`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Mei net minder as ${args[0]} ${name} hawwe.`;\n /* */\n }\n /* */\n return `${sentence(name)} moat minimaal ${args[0]} wêze.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `\"${value}\" is gjin tastiene ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} moat in getal wêze.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} is ferplicht.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} begjint net mei ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Doch der in jildige url by.`;\n /* */\n },\n};\n\nvar fy = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$p,\n validation: validation$p\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$o = {\n /**\n * Shown on a button for adding additional items.\n */\n add: 'הוסף',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'מחק',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'מחק הכל',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'שים לב, לא כל השדות מלאים כראוי.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'שלח',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'לא נבחר קובץ..',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'הזז למעלה',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'הזז למטה',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'טוען...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'טען יותר',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$o = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `אנא אשר את ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} חייב להיות אחרי ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} חייב להיות בעתיד.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} חייב להכיל אותיות אלפבת.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} יכול להכיל רק מספרים ואותיות.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} יכול להכיל רק אותיות ורווחים.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} חייב להיות לפני ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} חייב להיות בעבר`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `שדה זה לא הוגדר כראוי ולא יכול להישלח.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} חייב להיות בין ${a} ו- ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} לא מתאים.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} הוא לא תאריך תקין, אנא השתמש בפורמט ${args[0]}`;\n /* */\n }\n /* */\n return 'שדה זה לא הוגדר כראוי ולא יכול להישלח.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} חייב להיות בין ${date(args[0])} ו- ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'אנא הקלד אימייל תקין.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} לא מסתיים ב- ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} הוא לא ערך מורשה.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} חייב להיות לפחות תו אחד.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} חייב להיות פחות או שווה ל- ${max} תווים.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} צריך להיות ${max} תווים ארוכים.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} חייב להיות גדול או שווה ל- ${min} תווים.`;\n /* */\n }\n /* */\n return `${sentence(name)} חייב להיות בין ${min} ו- ${max} תווים.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} הוא לא ערך תקין.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${name} לא יכול להיות עם יותר מ- ${args[0]}.`;\n /* */\n }\n /* */\n return `${sentence(name)} חייב להיות פחות או שווה ל- ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'פורמט הקובץ לא מורשה.';\n /* */\n }\n /* */\n return `${sentence(name)} חייב להיות מסוג: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${name} לא יכול להיות עם פחות מ- ${args[0]}.`;\n /* */\n }\n /* */\n return `${sentence(name)} חייב להיות לפחות ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” לא מתאים ל- ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} חייב להיות מספר.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} הינו חובה.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} לא מתחיל ב- ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `אנא הקלד קישור תקין.`;\n /* */\n },\n};\n\nvar he = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$o,\n validation: validation$o\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$n = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'Dodaj',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Ukloni',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Pojedina polja nisu ispravno ispunjena.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Predaj',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Pomaknite se gore',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Pomakni se dolje',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Učitavanje...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Učitaj više',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$n = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Potrebno je potvrditi ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} mora biti u periodu poslije ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} mora biti u budućnosti.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} mora sadržavati samo slova.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} mora sadržavati slova i brojeve.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} mogu sadržavati samo slova i razmake..`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} mora biti prije ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} mora biti u prošlosti.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Format sadržaja nije ispravan i ne može biti predan.`;\n /* */\n }\n /* */\n return `${sentence(name)} mora biti između ${args[0]} i ${args[1]}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} ne odgovara zadanoj vrijednosti.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} nije ispravan format datuma. Molimo koristite sljedeći format: ${args[0]}`;\n /* */\n }\n /* */\n return 'Ovo polje nije ispravno postavljeno i ne može biti predano.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} mora biti vrijednost između ${date(args[0])} i ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Molimo upišite ispravnu email adresu.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} ne završava s ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} nije dopuštena vrijednost.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = first <= second ? first : second;\n const max = second >= first ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} mora sadržavati barem jedan znak.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} mora imati ${max} ili manje znakova.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} trebao bi biti dugačak ${max} znakova.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} mora imati barem ${min} znakova.`;\n /* */\n }\n /* */\n return `Broj znakova za polje ${sentence(name)} mora biti između ${min} i ${max}.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} nije dozvoljena vrijednost.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Ne smije imati više od ${args[0]} ${name} polja.`;\n /* */\n }\n /* */\n return `${sentence(name)} mora imati vrijednost manju ili jednaku ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Format datoteke nije dozvoljen.';\n /* */\n }\n /* */\n return `Format datoteke na polju ${sentence(name)} mora odgovarati: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Broj upisanih vrijednosti na polju ${name} mora biti barem ${args[0]}.`;\n /* */\n }\n /* */\n return `${sentence(name)} mora biti barem ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” nije dozvoljena vrijednost na polju ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} mora biti broj.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} je obavezno.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} ne počinje s ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Molimo unesite ispravnu poveznicu.`;\n /* */\n },\n};\n\nvar hr = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$n,\n validation: validation$n\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$m = {\n /**\n * Shown on a button for adding additional items.\n */\n add: 'Hozzáadás',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Eltávolítás',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Összes eltávolítása',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Sajnáljuk, nem minden mező lett helyesen kitöltve.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Beküldés',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Nincs fájl kiválasztva',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Mozgás felfelé',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Mozgás lefelé',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Betöltés...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Töltsön be többet',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$m = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Fogadja el a ${name} mezőt.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} mezőnek ${date(args[0])} után kell lennie.`;\n /* */\n }\n /* */\n return `${sentence(name)} mezőnek a jövőben kell lennie.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} csak alfanumerikus karaktereket tartalmazhat.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} csak betűket és számokat tartalmazhat.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} csak betűket és szóközöket tartalmazhat.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} mezőnek ${date(args[0])} előtt kell lennie.`;\n /* */\n }\n /* */\n return `${sentence(name)} mezőnek a múltban kell lennie.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Ez a mező hibásan lett konfigurálva, így nem lehet beküldeni.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `A ${sentence(name)} mezőnek ${a} és ${b} között kell lennie.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} nem egyezik.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} nem érvényes dátum, ${args[0]} formátumot használj`;\n /* */\n }\n /* */\n return 'Ez a mező hibásan lett konfigurálva, így nem lehet beküldeni.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} mezőnek ${date(args[0])} és ${args[1]} között kell lennie`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Kérjük, érvényes email címet adjon meg.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} mező nem a kijelölt (${list(args)}) módon ér véget.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} nem engedélyezett érték.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} mezőnek legalább egy karakteresnek kell lennie.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} mezőnek maximum ${max} karakteresnek kell lennie.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} ${max} karakter hosszúnak kell lennie.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} mezőnek minimum ${min} karakteresnek kell lennie.`;\n /* */\n }\n /* */\n return `${sentence(name)} mezőnek ${min} és ${max} karakter között kell lennie.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} nem engedélyezett érték.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Nem lehet több mint ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} nem lehet nagyobb, mint ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Nincsenek támogatott fájlformátumok.';\n /* */\n }\n /* */\n return `${sentence(name)}-nak/nek a következőnek kell lennie: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Nem lehet kevesebb, mint ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)}-nak/nek minimum ${args[0]}-nak/nek kell lennie.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `\"${value}\" nem engedélyezett ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} mezőnek számnak kell lennie.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} mező kötelező.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} nem a következővel kezdődik: ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Kérjük, érvényes URL-t adjon meg.`;\n /* */\n },\n};\n\nvar hu = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$m,\n validation: validation$m\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$l = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'Tambah',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Hapus',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Hapus semua',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Maaf, tidak semua bidang formulir terisi dengan benar',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Kirim',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Tidak ada file yang dipilih',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Pindah ke atas',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Pindah ke bawah',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Memuat...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Muat lebih',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$l = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Tolong terima kolom ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} nilainya harus lebih dari waktu ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} harus berisi waktu di masa depan.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} hanya bisa diisi huruf alfabet.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} hanya bisa diisi huruf dan angka.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} hanya boleh berisi huruf dan spasi..`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} nilainya harus kurang dari waktu ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} harus berisi waktu yang sudah lampau.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Kolom ini tidak diisi dengan benar sehingga tidak bisa dikirim`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} harus bernilai diantara ${a} dan ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} nilainya tidak cocok.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} waktu tidak cocok, mohon gunakan format waktu ${args[0]}`;\n /* */\n }\n /* */\n return 'Kolom ini tidak diisi dengan benar sehingga tidak bisa dikirim';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} harus diantara waktu ${date(args[0])} dan waktu ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Tolong tulis alamat email yang benar.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} nilainya tidak berakhiran dengan ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} adalah nilai yang tidak diizinkan.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} nilainya setidaknya berisi satu karakter.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} jumlah karakternya harus kurang dari atau sama dengan ${max} karakter.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} harus ${max} karakter panjang.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} jumlah karakternya harus lebih dari atau sama dengan ${min} karakter.`;\n /* */\n }\n /* */\n return `${sentence(name)} jumlah karakternya hanya bisa antara ${min} dan ${max} karakter.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} nilainya tidak diizinkan.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Tidak bisa memiliki lebih dari ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} harus lebih kecil atau sama dengan ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Format file tidak diizinkan';\n /* */\n }\n /* */\n return `${sentence(name)} hanya bisa bertipe: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Tidak boleh kurang dari ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} setidaknya harus berisi ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” adalah nilai yang tidak diperbolehkan untuk ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} harus berupa angka.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} harus diisi.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} tidak dimulai dengan ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Mohon tuliskan url yang benar.`;\n /* */\n },\n};\n\nvar id = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$l,\n validation: validation$l\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$k = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'Inserisci',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Rimuovi',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Rimuovi tutti',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Ci dispiace, non tutti i campi sono compilati correttamente.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Invia',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Nessun file selezionato',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Sposta in alto',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Sposta giù',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Caricamento...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Carica altro',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$k = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Si prega di accettare ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `la data ${sentence(name)} deve essere successiva ${date(args[0])}.`;\n /* */\n }\n /* */\n return `la data ${sentence(name)} deve essere nel futuro.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} può contenere solo caratteri alfanumerici.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} può contenere solo lettere e numeri.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} può contenere solo lettere e spazi.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `la data ${sentence(name)} deve essere antecedente ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} deve essere nel passato.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Questo campo è stato configurato male e non può essere inviato.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} deve essere tra ${a} e ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} non corrisponde.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} non è una data valida, per favore usa il formato ${args[0]}`;\n /* */\n }\n /* */\n return 'Questo campo è stato configurato in modo errato e non può essere inviato.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} deve essere tra ${date(args[0])} e ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Per favore inserire un indirizzo email valido.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} non termina con ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} non è un valore consentito.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} deve contenere almeno un carattere.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} deve essere minore o uguale a ${max} caratteri.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} deve contenere ${max} caratteri.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} deve essere maggiore o uguale a ${min} caratteri.`;\n /* */\n }\n /* */\n return `${sentence(name)} deve essere tra ${min} e ${max} caratteri.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} non è un valore consentito.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Non può avere più di ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} deve essere minore o uguale a ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Formato file non consentito.';\n /* */\n }\n /* */\n return `${sentence(name)} deve essere di tipo: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Non può avere meno di ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} deve essere almeno ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `\"${value}\" non è un ${name} consentito.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} deve essere un numero.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} è richiesto.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} non inizia con ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Per favore utilizare un url valido.`;\n /* */\n },\n};\n\nvar it = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$k,\n validation: validation$k\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$j = {\n /**\n * Shown on buttons for adding new items.\n */\n add: '追加',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: '削除',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: '全て削除',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: '項目が正しく入力されていません。',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: '送信',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'ファイルが選択されていません',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: '上に移動',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: '下へ移動',\n /**\n * Shown when something is actively loading.\n */\n isLoading: '読み込み中...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'さらに読み込む',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$j = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `${name}の同意が必要です。`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)}は${date(args[0])}より後の日付である必要があります。`;\n /* */\n }\n /* */\n return `${sentence(name)}は将来の日付でなければなりません。`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)}には英字のみを含めることができます。`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)}には、文字と数字のみを含めることができます。`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)}には、文字とスペースのみを含めることができます。`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)}は${date(args[0])}より前の日付である必要があります。`;\n /* */\n }\n /* */\n return `${sentence(name)}は過去の日付である必要があります。`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `このフィールドは正しく構成されていないため、送信できません。`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)}は${a}と${b}の間にある必要があります。`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)}が一致しません。`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)}は有効な日付ではありません。${args[0]}の形式を使用してください。`;\n /* */\n }\n /* */\n return 'このフィールドは正しく構成されておらず、送信できません。';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)}は${date(args[0])}と${date(args[1])}の間にある必要があります。`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: '有効なメールアドレスを入力してください。',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)}は${list(args)}で終わっていません。`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)}は許可された値ではありません。`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)}は少なくとも1文字である必要があります。`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)}は${max}文字以下である必要があります。`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} の長さは ${max} 文字でなければなりません。`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)}は${min}文字以上である必要があります。`;\n /* */\n }\n /* */\n return `${sentence(name)}は${min}から${max}文字の間でなければなりません。`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)}は許可された値ではありません。`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${name}は${args[0]}を超えることはできません。`;\n /* */\n }\n /* */\n return `${sentence(name)}は${args[0]}以下である必要があります。`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'ファイル形式は許可されていません。';\n /* */\n }\n /* */\n return `${sentence(name)}は${args[0]}である必要があります。`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${name}は${args[0]}未満にすることはできません。`;\n /* */\n }\n /* */\n return `${sentence(name)}は少なくとも${args[0]}である必要があります。`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}”は許可された${name}ではありません。`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)}は数値でなければなりません。`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)}は必須です。`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)}は${list(args)}で始まっていません。`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `有効なURLを含めてください。`;\n /* */\n },\n};\n\nvar ja = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$j,\n validation: validation$j\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$i = {\n /**\n * Shown on a button for adding additional items.\n */\n add: 'қосу',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Жою',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Барлығын жою',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Кешіріңіз, барлық өрістер дұрыс толтырылмаған.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Жіберу',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Ешбір файл таңдалмады',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Жоғары жылжу',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Төмен жылжытыңыз',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Жүктеу...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Көбірек жүктеңіз',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$i = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `қабылдаңыз ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} кейін болуы керек ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} болашақта болуы керек.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} тек алфавиттік таңбаларды қамтуы мүмкін.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} тек әріптер мен сандардан тұруы мүмкін.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} тек әріптер мен бос орындар болуы мүмкін.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} бұрын болуы керек ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} өткенде болуы керек.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Бұл өріс қате конфигурацияланған және оны жіберу мүмкін емес.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} арасында болуы керек ${a} және ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} сәйкес келмейді.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} жарамды күн емес, пішімді пайдаланыңыз ${args[0]}`;\n /* */\n }\n /* */\n return 'Бұл өріс қате конфигурацияланған және оны жіберу мүмкін емес';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} арасында болуы керек ${date(args[0])} және ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Өтінеміз қолданыстағы электронды пошта адресін енгізіңіз.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} -мен бітпейді ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} рұқсат етілген мән емес.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} кем дегенде бір таңба болуы керек.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} кем немесе тең болуы керек ${max} кейіпкерлер.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} ${max} таңбалары болуы керек.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} артық немесе тең болуы керек ${min} кейіпкерлер.`;\n /* */\n }\n /* */\n return `${sentence(name)} арасында болуы керек ${min} және ${max} кейіпкерлер.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} рұқсат етілген мән емес.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `артық болуы мүмкін емес ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} кем немесе тең болуы керек ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Файл пішімдері рұқсат етілмейді.';\n /* */\n }\n /* */\n return `${sentence(name)} типте болуы керек: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `кем болуы мүмкін емес ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} кем дегенде болуы керек ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” рұқсат етілмейді ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} сан болуы керек.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} талап етіледі.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} -ден басталмайды ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Жарамды URL мекенжайын қосыңыз.`;\n /* */\n },\n};\n\nvar kk = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$i,\n validation: validation$i\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$h = {\n /**\n * Shown on buttons for adding new items.\n */\n add: '추가',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: '제거',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: '모두 제거',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: '모든 값을 채워주세요',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: '제출하기',\n /**\n * Shown when no files are selected.\n */\n noFiles: '선택된 파일이 없습니다',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: '위로 이동',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: '아래로 이동',\n /**\n * Shown when something is actively loading.\n */\n isLoading: '로드 중...',\n /**\n * Shown when there is more to load.\n */\n loadMore: '더 불러오기',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$h = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `${name} 올바른 값을 선택 해주세요`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} ${date(args[0])} 이후여야 합니다`;\n /* */\n }\n /* */\n return `${sentence(name)} 미래의 날짜여야합니다`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} 알파벳 문자만 포함할 수 있습니다`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} 문자와 숫자만 포함될 수 있습니다`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} 문자와 공백만 포함할 수 있습니다.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} ${date(args[0])} 이전여야 합니다`;\n /* */\n }\n /* */\n return `${sentence(name)} 과거의 날짜여야합니다`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `잘못된 구성으로 제출할 수 없습니다`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} ${a}와 ${b} 사이여야 합니다`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} 일치하지 않습니다`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} 유효한 날짜가 아닙니다. ${args[0]}과 같은 형식을 사용해주세요`;\n /* */\n }\n /* */\n return '잘못된 구성으로 제출할 수 없습니다';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} ${date(args[0])}에서 ${date(args[1])} 사이여야 합니다`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: '올바른 이메일 주소를 입력해주세요',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} ${list(args)}로 끝나지 않습니다`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} 허용되는 값이 아닙니다`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} 하나 이상의 문자여야 합니다`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} ${max}자 이하여야 합니다`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} 는 ${max} 자 길이여야 합니다.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} ${min} 문자보다 크거나 같아야 합니다`;\n /* */\n }\n /* */\n return `${sentence(name)} ${min}에서 ${max}자 사이여야 합니다`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} 허용되는 값이 아닙니다`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${args[0]} ${name} 초과할 수 없습니다`;\n /* */\n }\n /* */\n return `${sentence(name)} ${args[0]}보다 작거나 같아야 합니다`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return '파일 형식이 허용되지 않습니다';\n /* */\n }\n /* */\n return `${sentence(name)} ${args[0]} 유형이어야 합니다`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${args[0]} ${name}보다 작을 수 없습니다`;\n /* */\n }\n /* */\n return `${sentence(name)} ${args[0]} 이상이어야 합니다`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `${value}\" 허용되지 않는 ${name}입니다`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} 숫자여야 합니다`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} 필수 값입니다`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} ${list(args)}로 시작하지 않습니다`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `올바른 URL을 입력해주세요`;\n /* */\n },\n};\n\nvar ko = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$h,\n validation: validation$h\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$g = {\n /**\n * Shown on a button for adding additional items.\n */\n add: 'Legg til',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Fjern',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Fjern alle',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Beklager, noen felter er ikke fylt ut korrekt.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Send inn',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Ingen fil valgt',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Flytt opp',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Flytt ned',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Laster...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Last mer',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$g = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Vennligst aksepter ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} må være senere enn ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} må være i fremtiden.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} kan bare inneholde alfabetiske tegn.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} kan bare inneholde bokstaver og tall.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} kan bare inneholde bokstaver og mellomrom.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} må være tidligere enn ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} må være i fortiden.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Dette feltet er feilkonfigurert og kan ikke innsendes.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} må være mellom ${a} og ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} stemmer ikke overens.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} er ikke en gyldig dato, vennligst bruk formatet ${args[0]}`;\n /* */\n }\n /* */\n return 'Dette feltet er feilkonfigurert og kan ikke innsendes.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} må være mellom ${date(args[0])} og ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Vennligst oppgi en gyldig epostadresse.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} slutter ikke med ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} er ikke en tillatt verdi.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} må ha minst ett tegn.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} må ha mindre enn eller nøyaktig ${max} tegn.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} skal være ${max} tegn langt.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} må ha mer enn eller nøyaktig ${min} tegn.`;\n /* */\n }\n /* */\n return `${sentence(name)} må ha mellom ${min} og ${max} tegn.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} er ikke en tillatt verdi.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Kan ikke ha mer enn ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} må være mindre enn eller nøyaktig ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Ingen tillatte filformater.';\n /* */\n }\n /* */\n return `${sentence(name)} må være av typen: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Kan ikke ha mindre enn ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} må være minst ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” er ikke en tillatt ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} må være et tall.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} er påkrevd.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} starter ikke med ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Vennligst inkluder en gyldig url.`;\n /* */\n },\n};\n\nvar nb = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$g,\n validation: validation$g\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$f = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'Toevoegen',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Verwijderen',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Alles verwijderen',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Sorry, niet alle velden zijn correct ingevuld.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Versturen',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Geen bestand gekozen',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Naar boven gaan',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Naar beneden verplaatsen',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Aan het laden...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Meer laden',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$f = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Accepteer de ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} moet na ${date(args[0])} zijn.`;\n /* */\n }\n /* */\n return `${sentence(name)} moet in de toekomst liggen.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} mag alleen alfabetische tekens bevatten.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} mag alleen letters en cijfers bevatten.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} mag alleen letters en spaties bevatten.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} moet vóór ${date(args[0])} vallen.`;\n /* */\n }\n /* */\n return `${sentence(name)} moet in het verleden liggen.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Dit veld is onjuist geconfigureerd en kan niet worden verzonden.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} moet tussen ${a} en ${b} liggen.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} komt niet overeen.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} is geen geldige datum, gebruik de notatie ${args[0]}`;\n /* */\n }\n /* */\n return 'Dit veld is onjuist geconfigureerd en kan niet worden verzonden';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} moet tussen ${date(args[0])} en ${date(args[1])} liggen`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Vul een geldig e-mailadres in.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} eindigt niet met ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} is geen toegestane waarde.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} moet minimaal één teken zijn.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} moet kleiner zijn dan of gelijk zijn aan ${max} tekens.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} moet ${max} tekens lang zijn.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} moet groter zijn dan of gelijk zijn aan ${min} tekens.`;\n /* */\n }\n /* */\n return `${sentence(name)} moet tussen de ${min} en ${max} tekens bevatten.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} is geen toegestane waarde.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Mag niet meer dan ${args[0]} ${name} hebben.`;\n /* */\n }\n /* */\n return `${sentence(name)} moet kleiner zijn dan of gelijk zijn aan ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Geen bestandsformaten toegestaan.';\n /* */\n }\n /* */\n return `${sentence(name)} moet van het type: ${args[0]} zijn`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Mag niet minder dan ${args[0]} ${name} hebben.`;\n /* */\n }\n /* */\n return `${sentence(name)} moet minimaal ${args[0]} zijn.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `\"${value}\" is geen toegestane ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} moet een getal zijn.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} is verplicht.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} begint niet met ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Vul een geldige url in.`;\n /* */\n },\n};\n\nvar nl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$f,\n validation: validation$f\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$e = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'Dodaj',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Usuń',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Usuń wszystko',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Nie wszystkie pola zostały wypełnione poprawnie.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Wyślij',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Nie wybrano pliku',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Przesuń w górę',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Przesuń w dół',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Ładowanie...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Załaduj więcej',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$e = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Proszę zaakceptować ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} musi być po ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} musi być w przyszłości.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `Pole ${sentence(name)} może zawierać tylko znaki alfabetyczne.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `Pole ${sentence(name)} może zawierać tylko znaki alfanumeryczne.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `Pole ${sentence(name)} mogą zawierać tylko litery i spacje.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} musi być przed ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} musi być w przeszłości.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Pole zostało wypełnione niepoprawnie i nie może zostać wysłane.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `Wartość pola ${sentence(name)} musi być pomiędzy ${a} i ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} nie pokrywa się.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `Wartość pola ${sentence(name)} nie jest poprawną datą, proszę użyć formatu ${args[0]}`;\n /* */\n }\n /* */\n return 'To pole zostało wypełnione niepoprawnie i nie może zostać wysłane';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `Data w polu ${sentence(name)} musi być pomiędzy ${date(args[0])} i ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Proszę wpisać poprawny adres email.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `Pole ${sentence(name)} nie kończy się na ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `Pole ${sentence(name)} nie jest dozwoloną wartością.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `Pole ${sentence(name)} musi posiadać minimum jeden znak.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `Pole ${sentence(name)} musi zawierać ${max} lub mniej znaków.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `Pole ${sentence(name)} musi zawierać ${min} lub więcej znaków.`;\n /* */\n }\n if (min === max) {\n /* */\n return `Pole ${sentence(name)} musi mieć ${min} znaków.`;\n /* */\n }\n /* */\n return `Pole ${sentence(name)} musi mieć ${min}-${max} znaków.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `Pole ${sentence(name)} zawiera niedozwolone znaki.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Nie można mieć więcej niż ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `Wartość pola ${sentence(name)} musi być mniejsza lub równa ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Nie podano dozwolonych typów plików.';\n /* */\n }\n /* */\n return `${sentence(name)} musi być typem: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Musisz podać więcej niż ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return ` Musisz podać conajmniej ${args[0]} ${sentence(name)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name }) {\n /* */\n return `Wartość pola ${name} jest niedozwolona.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} musi być numerem.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `Pole ${sentence(name)} jest wymagane.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `Wartośc pola ${sentence(name)} nie zaczyna się od ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Proszę podać prawidłowy adres url.`;\n /* */\n },\n};\n\nvar pl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$e,\n validation: validation$e\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$d = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'Adicionar',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Remover',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Deletar tudo',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Desculpe, nem todos os campos foram preenchidos corretamente.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Enviar',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Nenhum arquivo',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Mova-se para cima',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Mova-se para baixo',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Carregando...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Carregue mais',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$d = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Por favor aceite o ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} deve ser posterior a ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} deve ser no futuro.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} só pode conter caracteres do alfabeto.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} só pode ter letras e números.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} só podem conter letras e espaços.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} deve ser anterior a ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} deve ser anterior a data atual.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `O campo foi configurado incorretamente e não pode ser enviado.`;\n /* */\n }\n /* */\n return `${sentence(name)} deve estar entre ${args[0]} e ${args[1]}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} não confere.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} não é uma data válida, por favor use o formato ${args[0]}`;\n /* */\n }\n /* */\n return 'O campo foi configurado incorretamente e não pode ser enviado.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} deve ser entre ${date(args[0])} e ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Por favor informe um e-mail válido.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} não termina com ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} não é um valor permitido.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = first <= second ? first : second;\n const max = second >= first ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} deve ter ao menos um caractere.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} não pode ter mais que ${max} caracteres.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} deve ter ${max} caracteres.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} deve ter no mínimo ${min} caracteres.`;\n /* */\n }\n /* */\n return `${sentence(name)} deve ter entre ${min} e ${max} caracteres.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} não é um valor permitido.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Não pode ter mais que ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} deve ser igual ou menor que ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Nenhum formato de arquivo permitido.';\n /* */\n }\n /* */\n return `${sentence(name)} deve ser do tipo: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Não pode ter menos que ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} deve ter pelo menos ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” não permite ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} deve ser um número.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} é obrigatório.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} não começa com ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Por favor informe um url válido.`;\n /* */\n },\n};\n\nvar pt = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$d,\n validation: validation$d\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$c = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'Adăugare',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Elimină',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Elimină tot',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Pare rău, unele câmpuri nu sunt corect completate.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Trimite',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Nu este selectat nici un fișier',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Mutare în sus',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Mutare în jos',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Se încarcă...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Încărcați mai mult',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$c = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Te rog acceptă ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} trebuie să fie după ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} trebuie sa fie în viitor.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} poate conține doar caractere alafetice.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} poate conține doar litere și numere.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} poate conține doar litere și spații.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} trebuie să preceadă ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} trebuie să fie în trecut.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Câmpul a fost configurat incorect și nu poate fi trimis.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} trebuie să fie între ${a} și ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} nu se potrivește.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} nu este validă, te rog foloște formatul ${args[0]}`;\n /* */\n }\n /* */\n return 'Câmpul a fost incorect configurat și nu poate fi trimis.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} trebuie să fie între ${date(args[0])} și ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Te rog folosește o adresă de email validă.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} nu se termină cu ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} nu este o valoare acceptată.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} trebuie sa conțină cel puțin un caracter.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} trebuie sa aibă cel mult ${max} caractere.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} ar trebui să aibă ${max} caractere lungi.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} trebuie să aibă cel puțin ${min} caractere.`;\n /* */\n }\n /* */\n return `${sentence(name)} trebuie să aibă între ${min} și ${max} caractere.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} nu este o valoare acceptată.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Nu poate avea mai mult decat ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} trebuie să fie cel mult egal cu ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Tipul de fișier neacceptat.';\n /* */\n }\n /* */\n return `${sentence(name)} trebuie să fie de tipul: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Nu poate avea mai puțin decât ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} trebuie să fie cel puțin ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” nu este o valoare acceptă pentru ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} trebuie să fie un număr.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} este necesar.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} nu începe cu ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Te rog include o adresă web validă`;\n /* */\n },\n};\n\nvar ro = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$c,\n validation: validation$c\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$b = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'Добавить',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Удалить',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Убрать все',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Извините, не все поля заполнены верно.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Отправить',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Файл не выбран',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Переместить вверх',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Переместить вниз',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Загрузка...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Загрузить больше',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$b = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Пожалуйста, примите ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `Дата ${sentence(name)} должна быть позже ${date(args[0])}.`;\n /* */\n }\n /* */\n return `Дата ${sentence(name)} должна быть в будущем.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `Поле ${sentence(name)} может содержать только буквы.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `Поле ${sentence(name)} может содержать только буквы и цифры.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} могут содержать только буквы и пробелы.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `Дата ${sentence(name)} должна быть раньше ${date(args[0])}.`;\n /* */\n }\n /* */\n return `Дата ${sentence(name)} должна быть в прошлом.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Это поле заполнено неверно и не может быть отправлено.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `Поле ${sentence(name)} должно быть между ${a} и ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `Поле ${sentence(name)} не совпадает.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `Поле ${sentence(name)} имеет неверную дату. Пожалуйста, используйте формат ${args[0]}`;\n /* */\n }\n /* */\n return 'Это поле заполнено неверно и не может быть отправлено.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `Дата ${sentence(name)} должна быть между ${date(args[0])} и ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Пожалуйста, введите действительный электронный адрес.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `Поле ${sentence(name)} не должно заканчиваться на ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `Поле ${sentence(name)} имеет неподустимое значение.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `Поле ${sentence(name)} должно содержать минимум один символ.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `Длина поля ${sentence(name)} должна быть меньше или равна ${max} символам.`;\n /* */\n }\n if (min === max) {\n /* */\n return `Длина ${sentence(name)} должна составлять ${max} символов.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `Длина поля ${sentence(name)} должна быть больше или равна ${min} символам.`;\n /* */\n }\n /* */\n return `Длина поля ${sentence(name)} должна быть между ${min} и ${max} символами.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `Поле ${sentence(name)} имеет недопустимое значение.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Не может быть выбрано больше, чем ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `Поле ${sentence(name)} должно быть меньше или равно ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Не указаны поддержиавемые форматы файла.';\n /* */\n }\n /* */\n return `Формат файла в поле ${sentence(name)} должен быть: ${args[0]}.`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Не может быть выбрано меньше, чем ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `Поле ${sentence(name)} должно быть не менее, чем ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” не поддерживается в поле ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `Поле ${sentence(name)} должно быть числом.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `Поле ${sentence(name)} обязательно для заполнения.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `Поле ${sentence(name)} должно начинаться с ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Пожалуйста, введите действительный URL адрес.`;\n /* */\n },\n};\n\nvar ru = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$b,\n validation: validation$b\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$a = {\n /**\n * Shown on a button for adding additional items.\n */\n add: 'Pridať',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Odstrániť',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Odstrániť všetko',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Prepáčte, ale nie všetky polia sú vyplnené správne.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Odoslať',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Nebol vybraný žiadny súbor',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Posunúť hore',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Posunúť dole',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Načítavanie...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Načítať viac',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$a = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Prosím zaškrtnite ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} musí byť za ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} musí byť v budúcnosti.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} môže obsahovať iba písmená.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} môže obsahovať iba písmená a čísla.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} môže obsahovať iba písmená a medzery.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} musí byť pred ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} musí byť v minulosti.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Toto pole bolo nesprávne nakonfigurované a nemôže byť odoslané.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} musí byť medzi ${a} and ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} does not match.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} nie je platným dátumom, prosím, použite formát ${args[0]}`;\n /* */\n }\n /* */\n return 'Toto pole bolo nesprávne nakonfigurované a nemôže byť odoslané.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} musí byť medzi ${date(args[0])} a ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Prosím, zadajte platnú emailovú adresu.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} nekončí na ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} nie je povolená hodnota.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} musí mať najmenej jeden znak.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} musí byť menšie alebo rovné ako ${max} znakov.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} by mala mať dĺžku ${max} znakov.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} musí byť väčšie alebo rovné ako ${min} znakov.`;\n /* */\n }\n /* */\n return `${sentence(name)} musí byť medzi ${min} až ${max} znakov.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} nie je povolená hodnota.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Nie je možné použiť viac než ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} musí byť menšie alebo rovné ako ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Nie sú povolené formáty súborov.';\n /* */\n }\n /* */\n return `${sentence(name)} musí byť typu: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Nemôže byť menej než ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} musí byť minimálne ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” nie je povolené hodnota pre ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} musí byť číslo.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} je povinné.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} nezačíná s ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Zadajte, prosím, platnú URL adresu.`;\n /* */\n },\n};\n\nvar sk = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$a,\n validation: validation$a\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$9 = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'Dodaj',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Odstrani',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Odstrani vse',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Nekatera polja niso pravilno izpolnjena.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Pošlji',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Nobena datoteka ni izbrana',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Premakni se navzgor',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Premakni se navzdol',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Nalaganje...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Naloži več',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$9 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Prosimo popravite ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} mora biti po ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} mora biti v prihodnosti.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} lahko vsebuje samo znake abecede.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} lahko vsebuje samo črke in številke.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} lahko vsebuje samo črke in presledke.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} mora biti pred ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} mora biti v preteklosti.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `To polje je narobe nastavljeno in ne mora biti izpolnjeno.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} mora biti med ${a} in ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} se ne ujema.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} ni pravilen datum, prosimo uporabite format ${args[0]}`;\n /* */\n }\n /* */\n return 'To polje je narobe nastavljeno in ne mora biti izpolnjeno.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} mora biti med ${date(args[0])} in ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Vnesite veljaven e-poštni naslov.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} se mora kočati z ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} ni dovoljena vrednost.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} mora vsebovati vsaj en znak.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} mora vsebovati največ ${max} znakov.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} mora biti dolg ${max} znakov.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} mora vsebovati vsaj ${min} znakov.`;\n /* */\n }\n /* */\n return `${sentence(name)} mora vsebovati med ${min} in ${max} znakov.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} ni dovoljena vrednost.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Največ je ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} je lahko največ ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Nobena vrsta datoteke ni dovoljena.';\n /* */\n }\n /* */\n return `${sentence(name)} mora biti tipa: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Najmanj ${args[0]} ${name} je dovoljenih.`;\n /* */\n }\n /* */\n return `${sentence(name)} mora biti vsaj ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” ni dovoljen(a/o) ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} mora biti številka.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} je zahtevan(o/a).`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} se mora začeti z ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Vnesite veljavno povezavo.`;\n /* */\n },\n};\n\nvar sl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$9,\n validation: validation$9\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$8 = {\n /**\n * Shown on a button for adding additional items.\n */\n add: 'Dodaj',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Ukloni',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Ukloni sve',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Pojedina polja nisu ispravno ispunjena.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Pošalji',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Fajl nije odabran',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Pomerite se gore',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Pomeri se dole',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Učitavanje...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Učitaj više',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$8 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Molimo prihvatite ${name}`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} mora biti posle ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} mora biti u budućnosti.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} može da sadrži samo abecedne znakove.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} može da sadrži samo slova i brojeve.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} može da sadrži samo slova i razmake.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} mora biti pre ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} mora biti u prošlosti.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Ovo polje je pogrešno konfigurisano i ne može se poslati.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} mora biti između ${a} i ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} se ne podudara.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} nije važeći datum, molimo Vas koristite format ${args[0]}`;\n /* */\n }\n /* */\n return 'Ovo polje je pogrešno konfigurisano i ne može se poslati';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} mora biti između ${date(args[0])} i ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Unesite ispravnu e-mail adresu.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} se ne završava sa ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} nije dozvoljena vrednost`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} mora biti najmanje jedan karakter.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} mora biti manji ili jednaki od ${max} karaktera.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} treba da bude ${max} znakova dugačak.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} mora biti veći ili jednaki od ${min} karaktera.`;\n /* */\n }\n /* */\n return `${sentence(name)} mora biti između ${min} i ${max} karaktera.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} nije dozvoljena vrednost.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Ne može imati više od ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} mora biti manji ili jednaki od ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Nisu dozvoljeni formati datoteka.';\n /* */\n }\n /* */\n return `${sentence(name)} mora biti tipa: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Ne može imati manje od ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} mora da ima najmanje ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” nije dozvoljeno ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} mora biti broj.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} je obavezno polje.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} ne počinje sa ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Molimo unesite važeći URL.`;\n /* */\n },\n};\n\nvar sr = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$8,\n validation: validation$8\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$7 = {\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Ta bort',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Ta bort alla',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Tyvärr är inte alla fält korrekt ifyllda',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Skicka',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Ingen fil vald',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Flytta upp',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Flytta ner',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Laddar...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Ladda mer',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$7 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Var god acceptera ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} måste vara efter ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} måste vara framåt i tiden.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} kan enbart innehålla bokstäver i alfabetet.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} kan bara innehålla bokstäver och siffror.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} kan bara innehålla bokstäver och blanksteg.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} måste vara före ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} måste vara bakåt i tiden.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Det här fältet ställdes inte in korrekt och kan inte användas.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} måste vara mellan ${a} och ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} matchar inte.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} är inte ett giltigt datum, var god använd formatet ${args[0]}`;\n /* */\n }\n /* */\n return 'Det här fältet ställdes inte in korrekt och kan inte användas';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} måste vara mellan ${date(args[0])} och ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Var god fyll i en giltig e-postadress.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} slutar inte med ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} är inte ett godkänt värde.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} måste ha minst ett tecken.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} måste vara ${max} tecken eller färre.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} bör vara ${max} tecken långa.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} måste vara ${min} tecken eller fler.`;\n /* */\n }\n /* */\n return `${sentence(name)} måste vara mellan ${min} och ${max} tecken.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} är inte ett godkänt värde.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Kan inte ha mer än ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} måste vara ${args[0]} eller mindre.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Inga filtyper tillåtna.';\n /* */\n }\n /* */\n return `${sentence(name)} måste vara av filtypen: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Kan inte ha mindre än ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `${sentence(name)} måste vara minst ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” är inte ett godkänt ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} måste vara en siffra.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} är obligatoriskt.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} börjar inte med ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Var god fyll i en giltig länk.`;\n /* */\n },\n};\n\nvar sv = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$7,\n validation: validation$7\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$6 = {\n /**\n * Shown on a button for adding additional items.\n */\n add: 'Илова кардан',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Хориҷ кардан',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Ҳамаро хориҷ кунед',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Бубахшед, на ҳама майдонҳо дуруст пур карда шудаанд.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Пешниҳод кунед',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Ягон файл интихоб нашудааст',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$6 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Лутфан ${name}-ро қабул кунед`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} бояд пас аз ${date(args[0])} бошад.`;\n /* */\n }\n /* */\n return `${sentence(name)} бояд дар оянда бошад.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} метавонад танҳо аломатҳои алифборо дар бар гирад.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} метавонад танҳо ҳарфҳо ва рақамҳоро дар бар гирад.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} метавонад танҳо ҳарфҳо ва фосилаҳоро дар бар гирад.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} бояд пеш аз ${date(args[0])} бошад.`;\n /* */\n }\n /* */\n return `${sentence(name)} бояд дар гузашта бошад.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Ин майдон нодуруст танзим шудааст ва онро пешниҳод кардан ғайриимкон аст.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} бояд дар байни ${a} ва ${b} бошад.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} мувофиқат намекунад.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} санаи дуруст нест, лутфан формати ${args[0]}-ро истифода баред`;\n /* */\n }\n /* */\n return 'Ин майдон нодуруст танзим шудааст ва онро пешниҳод кардан ғайриимкон аст';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} бояд дар байни ${date(args[0])} ва ${date(args[1])} бошад`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Лутфан нишонаи имейли амалкунандаро ворид намоед.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} бо ${list(args)} ба охир намерасад.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} арзиши иҷозатдодашуда нест.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} бояд ҳадди аққал як аломат бошад.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} бояд аз ${max} аломат камтар ё баробар бошад.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} бояд ${max} аломат бошад.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} бояд аз ${min} аломат зиёд ё баробар бошад.`;\n /* */\n }\n /* */\n return `${sentence(name)} бояд дар байни ${min} ва ${max} аломат бошад.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} арзиши иҷозатдодашуда нест.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Зиёда аз ${args[0]} ${name} дошта наметавонад.`;\n /* */\n }\n /* */\n return `${sentence(name)} бояд аз ${args[0]} камтар ё баробар бошад.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Ягон формати файл иҷозат дода намешавад.';\n /* */\n }\n /* */\n return `${sentence(name)} бояд чунин намуд бошад: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Камтар аз ${args[0]} ${name} дошта наметавонад.`;\n /* */\n }\n /* */\n return `${sentence(name)} бояд ҳадди аққал ${args[0]} бошад.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `\"${value}\" ${name} иҷозат дода намешавад.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} бояд рақам бошад.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} лозим аст.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} бо ${list(args)} оғоз намешавад.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Лутфан URL-и дурустро дохил кунед.`;\n /* */\n },\n};\n\nvar tg = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$6,\n validation: validation$6\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$5 = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'เพิ่ม',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'เอาออก',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'เอาออกทั้งหมด',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'ขออภัย ข้อมูลบางช่องที่กรอกไม่ถูกต้อง',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'ส่ง',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'ยังไม่ได้เลือกไฟล์',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'เลื่อนขึ้น',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'เลื่อนลง',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'กำลังโหลด...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'โหลดเพิ่มเติม',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$5 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `กรุณายอมรับ ${name}`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} จะต้องเป็นวันที่หลังจาก ${date(args[0])}`;\n /* */\n }\n /* */\n return `${sentence(name)} จะต้องเป็นวันที่ที่ยังไม่มาถึง`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} สามารถเป็นได้แค่ตัวอักษรเท่านั้น`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} สามารถเป็นได้แค่ตัวอักษรและตัวเลขเท่านั้น`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} สามารถเป็นได้แค่ตัวอักษรและเว้นวรรคเท่านั้น`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} จะต้องเป็นวันที่ที่มาก่อน ${date(args[0])}`;\n /* */\n }\n /* */\n return `${sentence(name)} จะต้องเป็นวันที่ที่ผ่านมาแล้ว`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `ช่องนี้ถูกตั้งค่าอย่างไม่ถูกต้อง และจะไม่สามารถส่งข้อมูลได้`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} จะต้องเป็นค่าระหว่าง ${a} และ ${b}`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} ไม่ตรงกัน`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} ไม่อยู่ในรูปแบบวันที่ที่ถูกต้อง กรุณากรอกตามรูปแบบ ${args[0]}`;\n /* */\n }\n /* */\n return 'ช่องนี้ถูกตั้งค่าอย่างไม่ถูกต้อง และจะไม่สามารถส่งข้อมูลได้';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} จะต้องเป็นวันที่ระหว่าง ${date(args[0])} และ ${date(args[1])}`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'กรุณากรอกที่อยู่อีเมลทีถูกต้อง',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} จะต้องลงท้ายด้วย ${list(args)}`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} ไม่ใช่ค่าที่อนุญาตให้กรอก`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} จะต้องมีความยาวอย่างน้อยหนึ่งตัวอักษร`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} จะต้องมีความยาวไม่เกิน ${max} ตัวอักษร`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} ควรจะเป็น ${max} ตัวอักษรยาว`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} จะต้องมีความยาว ${min} ตัวอักษรขึ้นไป`;\n /* */\n }\n /* */\n return `${sentence(name)} จะต้องมีความยาวระหว่าง ${min} และ ${max} ตัวอักษร`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} ไม่ใช่ค่าที่อนุญาตให้กรอก`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `ไม่สามารถเลือกมากกว่า ${args[0]} ${name} ได้`;\n /* */\n }\n /* */\n return `${sentence(name)} จะต้องมีค่าไม่เกิน ${args[0]}`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'ไม่มีประเภทของไฟล์ที่อนุญาต';\n /* */\n }\n /* */\n return `${sentence(name)} จะต้องเป็นไฟล์ประเภท ${args[0]} เท่านั้น`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `ไม่สามารถเลือกน้อยกว่า ${args[0]} ${name} ได้`;\n /* */\n }\n /* */\n return `${sentence(name)} จะต้องมีค่าอย่างน้อย ${args[0]}`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” ไม่ใช่ค่า ${name} ที่อนุญาตให้กรอก`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} จะต้องเป็นตัวเลขเท่านั้น`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `กรุณากรอก ${sentence(name)}`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} จะต้องเริ่มต้นด้วย ${list(args)}`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `กรุณาระบุที่อยู่ลิงก์ให้ถูกต้อง`;\n /* */\n },\n};\n\nvar th = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$5,\n validation: validation$5\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$4 = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'Ekle',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Kaldır',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Hepsini kaldır',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Maalesef, tüm alanlar doğru doldurulmadı.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Gönder',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Dosya yok',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Yukarı Taşı',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Aşağı taşı',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Yükleniyor...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Daha fazla yükle',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$4 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Lütfen ${name}'yi kabul edin.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} ${date(args[0])}'den sonra olmalıdır.`;\n /* */\n }\n /* */\n return `${sentence(name)} gelecekte bir zaman olmalıdır.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} sadece alfabetik karakterler içerebilir.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} sadece alfabetik karakterler ve sayı içerebilir.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} yalnızca harf ve boşluk içerebilir.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} ${date(args[0])} tarihinden önce olmalı.`;\n /* */\n }\n /* */\n return `${sentence(name)} geçmişte olmalı.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Alan yanlış yapılandırılmış ve gönderilemez.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} ${a} ve ${b} aralığında olmalı.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} eşleşmiyor.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} geçerli bir tarih değil, lütfen ${args[0]} biçimini kullanın.`;\n /* */\n }\n /* */\n return 'Alan yanlış yapılandırılmış ve gönderilemez.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)}, ${date(args[0])} ve ${date(args[1])} aralığında olmalı.`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Lütfen geçerli bir e-mail adresi girin.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} ${list(args)} ile bitmiyor.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} izin verilen bir değer değil.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} en azından bir karakter uzunluğunda olmalı.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} ${max}'e eşit veya daha küçük olmalı.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} ${max} karakter uzunluğunda olmalıdır.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} ${min}'e eşit veya daha büyük olmalı.`;\n /* */\n }\n /* */\n return `${sentence(name)}, ${min} ve ${max} karakter uzunluğu aralığında olmalı.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} izin verilen bir değer değil.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${name}'in uzunluğu ${args[0]}'dan daha uzun olamaz.`;\n /* */\n }\n /* */\n return `${sentence(name)} en azından ${args[0]} uzunluğunda veya ona eşit olmalı.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Hiçbir dosya türüne izin verilmez.';\n /* */\n }\n /* */\n return `${sentence(name)} şu tiplerden biri olmalı: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${name}'in uzunluğu ${args[0]}'dan daha kısa olamaz.`;\n /* */\n }\n /* */\n return `${sentence(name)} en azından ${args[0]} uzunluğunda olmalı.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” ${name} olamaz.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} sayı olmalı.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} gerekli.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} ${list(args)} ile başlamıyor.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Lütfen geçerli bir url dahil edin.`;\n /* */\n },\n};\n\nvar tr = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$4,\n validation: validation$4\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$3 = {\n /**\n * Shown on a button for adding additional items.\n */\n add: 'Додати',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Видалити',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Видалити все',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Вибачте, не всі поля заповнені правильно.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Відправити',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Файл не вибрано',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Рухатися вгору',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Пересунути вниз',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Завантаження...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Завантажте більше',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$3 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Будь ласка, прийміть ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `Дата ${sentence(name)} повинна бути пізніше за ${date(args[0])}.`;\n /* */\n }\n /* */\n return `Дата ${sentence(name)} має бути в майбутньому.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `Поле ${sentence(name)} може містити лише літери.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `Поле ${sentence(name)} може містити лише літери та цифри.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `Поле ${sentence(name)} може містити лише літери та пробіли.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `Дата ${sentence(name)} повинна бути раніше за ${date(args[0])}.`;\n /* */\n }\n /* */\n return `Дата ${sentence(name)} повинна бути в минулому.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Це поле заповнено неправильно і не може бути надіслано.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `Поле ${sentence(name)} повинно бути між ${a} та ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `Поле ${sentence(name)} не збігається.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `Поле ${sentence(name)} має неправильну дату. Будь ласка, використовуйте формат ${args[0]}.`;\n /* */\n }\n /* */\n return 'Це поле заповнено неправильно і не може бути надіслано.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `Дата ${sentence(name)} повинна бути між ${date(args[0])} та ${date(args[1])}.`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Будь ласка, введіть дійсну електронну адресу.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `Поле ${sentence(name)} не повинно закінчуватися на ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `Поле ${sentence(name)} має неприпустиме значення.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `Поле ${sentence(name)} має містити щонайменше один символ.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `Довжина поля ${sentence(name)} повинна бути меншою або дорівнювати ${max} символам.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} має бути довжиною ${max} символів.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `Довжина поля ${sentence(name)} повинна бути більшою або дорівнювати ${min} символам.`;\n /* */\n }\n /* */\n return `Довжина поля ${sentence(name)} повинна бути між ${min} та ${max} символами.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `Поле ${sentence(name)} має неприпустиме значення.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Не може бути вибрано більше ніж ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `Поле ${sentence(name)} має бути менше або дорівнювати ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Не вказано дозволені типи файлів.';\n /* */\n }\n /* */\n return `Тип файлу в полі ${sentence(name)} має бути: ${args[0]}.`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `Не може бути вибрано менше ніж ${args[0]} ${name}.`;\n /* */\n }\n /* */\n return `Поле ${sentence(name)} має бути не менше ніж ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}” не дозволено в полі ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `Поле ${sentence(name)} має бути числом.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `Поле ${sentence(name)} є обов'язковим.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `Поле ${sentence(name)} має починатися з ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Будь ласка, введіть дійсну URL-адресу.`;\n /* */\n },\n};\n\nvar uk = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$3,\n validation: validation$3\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$2 = {\n /**\n * Shown on a button for adding additional items.\n */\n add: \"Qo'shish\",\n /**\n * Shown when a button to remove items is visible.\n */\n remove: \"O'chirish\",\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: \"Hammasini o'chirish\",\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: \"Kechirasiz, barcha maydonlar to'g'ri to'ldirilmagan.\",\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Yuborish',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Hech qanday fayl tanlanmagan',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Yuqoriga ko’taring',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Pastga siljish',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Yuklanmoqda...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Ko’proq yuklang',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$2 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `${name} ni qabul qiling.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} ${date(args[0])} dan keyin bo'lishi kerak.`;\n /* */\n }\n /* */\n return `${sentence(name)} kelajakda bo'lishi kerak.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} faqat alifbo tartibidagi belgilardan iborat bo'lishi mumkin.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} faqat harflar va raqamlardan iborat bo'lishi mumkin.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} faqat harf va bo'shliqlardan iborat bo'lishi mumkin.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} ${date(args[0])} dan oldin bo'lishi kerak`;\n /* */\n }\n /* */\n return `${sentence(name)} o'tmishda bo'lishi kerak.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Bu maydon noto'g'ri sozlangan va uni yuborib bo'lmaydi.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} ${a} va ${b} orasida bo'lishi kerak.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} mos emas.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} haqiqiy sana emas, iltimos ${args[0]} formatidan foydalaning`;\n /* */\n }\n /* */\n return \"Bu maydon noto'g'ri sozlangan va uni yuborib bo'lmaydi\";\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} ${date(args[0])} va ${date(args[1])} oralig'ida bo'lishi kerak`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Iltimos amaldagi e-mail manzilingizni kiriting.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} ${list(args)} bilan tugamaydi.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} ruxsat etilgan qiymat emas.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} kamida bitta belgidan iborat bo'lishi kerak.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} ${max} ta belgidan kam yoki teng bo'lishi kerak.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} bo'lishi kerak ${max} belgilar uzun.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} ${min} ta belgidan ko'p yoki teng bo'lishi kerak.`;\n /* */\n }\n /* */\n return `${sentence(name)} ${min} va ${max} gacha belgilardan iborat bo'lishi kerak.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} ruxsat etilgan qiymat emas.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${args[0]} ${name} dan ortiq bo'lishi mumkin emas.`;\n /* */\n }\n /* */\n return `${sentence(name)} ${args[0]} dan kichik yoki teng bo'lishi kerak.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Fayl formatlariga ruxsat berilmagan.';\n /* */\n }\n /* */\n return `${sentence(name)} quyidagi turdagi bo'lishi kerak: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${args[0]} ${name} dan kam bo'lmasligi kerak.`;\n /* */\n }\n /* */\n return `${sentence(name)} kamida ${args[0]} bo'lishi kerak.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `\"${value}\" ruxsat berilmagan ${name}.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} raqam bo'lishi kerak.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} talab qilinadi.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} ${list(args)} bilan boshlanmaydi.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `URL emas`;\n /* */\n },\n};\n\nvar uz = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$2,\n validation: validation$2\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui$1 = {\n /**\n * Shown on buttons for adding new items.\n */\n add: 'Thêm',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: 'Xoá',\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: 'Xoá tất cả',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: 'Xin lỗi, không phải tất cả các trường đều được nhập đúng.',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: 'Gửi',\n /**\n * Shown when no files are selected.\n */\n noFiles: 'Chưa chọn file',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: 'Di chuyển lên',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: 'Di chuyển xuống',\n /**\n * Shown when something is actively loading.\n */\n isLoading: 'Đang tải...',\n /**\n * Shown when there is more to load.\n */\n loadMore: 'Tải thêm',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation$1 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `Hãy đồng ý với ${name}.`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} phải sau ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} phải trong tương lai.`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)} có thể chỉ bao gồm các chữ cái alphabet.`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)} có thể chỉ bao gồm các chữ cái và chữ số.`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)} chỉ có thể chứa các chữ cái và khoảng trắng.`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} phải trước ${date(args[0])}.`;\n /* */\n }\n /* */\n return `${sentence(name)} phải trong quá khứ.`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `Trường này đã được thiết lập sai và không thể gửi.`;\n /* */\n }\n const [a, b] = order(args[0], args[1]);\n /* */\n return `${sentence(name)} phải ở giữa ${a} và ${b}.`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)} không khớp.`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)} không phải ngày hợp lệ, hãy sử dụng định dạng ${args[0]}`;\n /* */\n }\n /* */\n return 'Trường này đã được thiết lập sai và không thể gửi.';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)} phải ở giữa khoảng từ ${date(args[0])} đến ${date(args[1])}.`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: 'Hãy nhập một địa chỉ email hợp lệ.',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)} không kết thúc với ${list(args)}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)} không phải một giá trị được cho phép.`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = Number(first) <= Number(second) ? first : second;\n const max = Number(second) >= Number(first) ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)} phải có độ dài tối thiểu một ký tự.`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)} phải có độ dài tối đa ${max} ký tự.`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} nên dài ${max} ký tự.`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)} phải có độ dài tối thiểu ${min} ký tự.`;\n /* */\n }\n /* */\n return `${sentence(name)} phải có độ dài tối đa trong khoảng từ ${min} đến ${max} ký tự.`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)} không phải một giá trị được cho phép.`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${name} không thể lớn hơn ${args[0]}.`;\n /* */\n }\n /* */\n return `${sentence(name)} phải tối đa bằng ${args[0]}.`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return 'Định dạng tệp tin này không được phép.';\n /* */\n }\n /* */\n return `${sentence(name)} phải là một trong các dạng: ${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${name} không thể nhỏ hơn ${args[0]}.`;\n /* */\n }\n /* */\n return `${sentence(name)} phải tối thiểu bằng ${args[0]}.`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `\"${value}\" không phải giá trị ${name} được phép.`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)} phải là một số.`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)} là bắt buộc.`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)} không bắt đầu với ${list(args)}.`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `Hãy nhập một URL hợp lệ.`;\n /* */\n },\n};\n\nvar vi = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui$1,\n validation: validation$1\n});\n\n/**\n * Here we can import additional helper functions to assist in formatting our\n * language. Feel free to add additional helper methods to libs/formats if it\n * assists in creating good validation messages for your locale.\n */\n/**\n * Standard language for interface features.\n * @public\n */\nconst ui = {\n /**\n * Shown on buttons for adding new items.\n */\n add: '添加',\n /**\n * Shown when a button to remove items is visible.\n */\n remove: '移除',\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: '抱歉,有些字段未被正确填写',\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: '提交',\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: '向上移动',\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: '向下移动',\n /**\n * Shown when something is actively loading.\n */\n isLoading: '正在加载...',\n /**\n * Shown when there is more to load.\n */\n loadMore: '加载更多',\n};\n/**\n * These are all the possible strings that pertain to validation messages.\n * @public\n */\nconst validation = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n /* */\n return `请接受${name}`;\n /* */\n },\n /**\n * The date is not after\n * @see {@link https://docs.formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)}必须晚于${date(args[0])}`;\n /* */\n }\n /* */\n return `${sentence(name)}必须是未来的日期`;\n /* */\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n /* */\n return `${sentence(name)}仅能包含字母字符`;\n /* */\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n /* */\n return `${sentence(name)}仅能包含字母和数字`;\n /* */\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://docs.formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n /* */\n return `${sentence(name)}只能包含字母和空格`;\n /* */\n },\n /**\n * The date is not before\n * @see {@link https://docs.formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)}必须早于${date(args[0])}`;\n /* */\n }\n /* */\n return `${sentence(name)}必须是过去的日期`;\n /* */\n },\n /**\n * The value is not between two numbers\n * @see {@link https://docs.formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n /* */\n return `该字段未被正确设置而无法被提交`;\n /* */\n }\n /* */\n return `${sentence(name)}必须在${args[0]}和${args[1]}之间`;\n /* */\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n /* */\n return `${sentence(name)}不匹配`;\n /* */\n },\n /**\n * The value is not a valid date\n * @see {@link https://docs.formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n /* */\n return `${sentence(name)}不是一个合法日期,请使用此格式${args[0]}`;\n /* */\n }\n /* */\n return '该字段未被正确设置而无法被提交';\n /* */\n },\n /**\n * Is not within expected date range\n * @see {@link https://docs.formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n /* */\n return `${sentence(name)}必须在${date(args[0])}和${date(args[1])}之间`;\n /* */\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://docs.formkit.com/essentials/validation#email}\n */\n email: '请输入一个合法的电子邮件地址',\n /**\n * Does not end with the specified value\n * @see {@link https://docs.formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n /* */\n return `${sentence(name)}并未以${list(args)}结尾`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n /* */\n return `${sentence(name)}不是一个允许值`;\n /* */\n },\n /**\n * Does not match specified length\n * @see {@link https://docs.formkit.com/essentials/validation#length}\n */\n length({ name, args: [first = 0, second = Infinity] }) {\n const min = first <= second ? first : second;\n const max = second >= first ? second : first;\n if (min == 1 && max === Infinity) {\n /* */\n return `${sentence(name)}至少要有一个字符`;\n /* */\n }\n if (min == 0 && max) {\n /* */\n return `${sentence(name)}必须少于或等于${max}个字符`;\n /* */\n }\n if (min === max) {\n /* */\n return `${sentence(name)} 的长度应为 ${max} 个字符。`;\n /* */\n }\n if (min && max === Infinity) {\n /* */\n return `${sentence(name)}必须多于或等于${min}个字符`;\n /* */\n }\n /* */\n return `${sentence(name)}必须有${min}至${max}个字符`;\n /* */\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n /* */\n return `${sentence(name)}不是一个允许值`;\n /* */\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${name}不能超过${args[0]}`;\n /* */\n }\n /* */\n return `${sentence(name)}必须小于或等于${args[0]}`;\n /* */\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://docs.formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n /* */\n return '无允许的文件格式';\n /* */\n }\n /* */\n return `${sentence(name)}必须为此类型:${args[0]}`;\n /* */\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n /* */\n return `${name}不能少于${args[0]}`;\n /* */\n }\n /* */\n return `${sentence(name)}不能小于${args[0]}`;\n /* */\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n /* */\n return `“${value}”不是一个被允许的${name}`;\n /* */\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n /* */\n return `${sentence(name)}必须是一个数字`;\n /* */\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n /* */\n return `${sentence(name)}必须填写`;\n /* */\n },\n /**\n * Does not start with specified value\n * @see {@link https://docs.formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n /* */\n return `${sentence(name)}没有以${list(args)}开头`;\n /* */\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n /* */\n return `请包含一个合法的url`;\n /* */\n },\n};\n\nvar zh = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ui: ui,\n validation: validation\n});\n\n/**\n * Create a new internationalization plugin for FormKit.\n * @param locales - Creates the i18n plugin.\n * @public\n */\nfunction createI18nPlugin(registry) {\n return function i18nPlugin(node) {\n let localeKey = parseLocale(node.config.locale, registry);\n let locale = localeKey ? registry[localeKey] : {};\n /* If the locale prop changes, update the active locale */\n node.on('prop:locale', ({ payload: lang }) => {\n localeKey = parseLocale(lang, registry);\n locale = localeKey ? registry[localeKey] : {};\n // Run through all the messages in the store and update with new locale\n node.store.touch();\n });\n node.on('prop:label', () => node.store.touch());\n node.on('prop:validationLabel', () => node.store.touch());\n /**\n * Hook into the core text or t() hook to perform localization on the\n * output of core functionality.\n */\n node.hook.text((fragment, next) => {\n var _a, _b;\n const key = ((_a = fragment.meta) === null || _a === void 0 ? void 0 : _a.messageKey) || fragment.key;\n if (has(locale, fragment.type) && has(locale[fragment.type], key)) {\n const t = locale[fragment.type][key];\n if (typeof t === 'function') {\n fragment.value = Array.isArray((_b = fragment.meta) === null || _b === void 0 ? void 0 : _b.i18nArgs)\n ? t(...fragment.meta.i18nArgs) // eslint-disable-line @typescript-eslint/no-non-null-assertion\n : t(fragment);\n }\n else {\n fragment.value = t;\n }\n }\n return next(fragment);\n });\n };\n}\n/**\n * @param locale - An ISO 639-1 and (optionally) ISO 639-2 language tag. For\n * example these are valid locale keys:\n * zh\n * zh-CN\n * zh-HK\n * en\n * en-GB\n * @param availableLocales - An array of locales that may be valid.\n */\nfunction parseLocale(locale, availableLocales) {\n if (has(availableLocales, locale)) {\n return locale;\n }\n const [lang] = locale.split('-');\n if (has(availableLocales, lang)) {\n return lang;\n }\n for (const locale in availableLocales) {\n return locale;\n }\n return false;\n}\n\n/**\n * Export all the available locales at once.\n * @public\n */\nconst locales = {\n ar,\n az,\n bg,\n cs,\n da,\n de,\n el,\n en,\n es,\n fa,\n fi,\n fr,\n fy,\n he,\n hr,\n hu,\n id,\n it,\n ja,\n kk,\n ko,\n nb,\n nl,\n pl,\n pt,\n ro,\n ru,\n sk,\n sl,\n sr,\n sv,\n tg,\n th,\n tr,\n uk,\n uz,\n vi,\n zh,\n};\n\nexport { ar, az, bg, createI18nPlugin, cs, da, date, de, el, en, es, fa, fi, fr, fy, he, hr, hu, id, it, ja, kk, ko, list, locales, nb, nl, order, pl, pt, ro, ru, sentence, sk, sl, sr, sv, tg, th, tr, uk, uz, vi, zh };\n","import { FORMKIT_VERSION } from '@formkit/core';\n\n/**\n * A function to generate FormKit class functions from a javascript object\n * @param classes - An object of input types with nested objects of sectionKeys and class lists\n * @returns FormKitClassFunctions\n * @public\n */\nfunction generateClasses(classes) {\n const classesBySectionKey = {};\n Object.keys(classes).forEach((type) => {\n Object.keys(classes[type]).forEach((sectionKey) => {\n if (!classesBySectionKey[sectionKey]) {\n classesBySectionKey[sectionKey] = {\n [type]: classes[type][sectionKey],\n };\n }\n else {\n classesBySectionKey[sectionKey][type] = classes[type][sectionKey];\n }\n });\n });\n Object.keys(classesBySectionKey).forEach((sectionKey) => {\n const classesObject = classesBySectionKey[sectionKey];\n classesBySectionKey[sectionKey] = function (node, sectionKey) {\n return addClassesBySection(node, sectionKey, classesObject);\n };\n });\n return classesBySectionKey;\n}\n/**\n * Updates a class list for a given sectionKey\n * @param node - the FormKit node being operated on\n * @param sectionKey - The section key to which the class list will be applied\n * @param classByType - Object containing mappings of class lists to section keys\n * @returns\n * @public\n */\nfunction addClassesBySection(node, _sectionKey, classesByType) {\n const type = node.props.type;\n const family = node.props.family;\n let classList = '';\n if (classesByType.global) {\n classList += classesByType.global + ' ';\n }\n if (classesByType[`family:${family}`]) {\n classList += classesByType[`family:${family}`] + ' ';\n }\n if (classesByType[type]) {\n classList += classesByType[type];\n }\n const listParts = classList.split('$reset');\n if (listParts.length > 1) {\n return `$reset ${listParts[listParts.length - 1].trim()}`;\n }\n return listParts[0].trim();\n}\n/**\n * The document's computed CSS styles\n */\nlet documentStyles = undefined;\nlet documentThemeLinkTag = null;\n/**\n * Stores the state of theme loading\n */\nlet themeDidLoad;\nlet themeHasLoaded = false;\nlet themeWasRequested = false;\nconst themeLoaded = new Promise((res) => {\n themeDidLoad = () => {\n themeHasLoaded = true;\n res();\n };\n});\n/**\n * Check if we are client-side\n */\nconst isClient = typeof window !== 'undefined' && typeof fetch !== 'undefined';\ndocumentStyles = isClient\n ? getComputedStyle(document.documentElement)\n : undefined;\n/**\n * The FormKit icon Registry - a global record of loaded icons.\n * @public\n */\nconst iconRegistry = {};\n/**\n * A collection of existing icon requests to avoid duplicate fetching\n */\nconst iconRequests = {};\n/**\n * Creates the theme plugin based on a given theme name\n * @param theme - The name or id of the theme to apply\n * @param icons - Icons you want to add to the global icon registry\n * @param iconLoader - A function that handles loading an icon when it is not found in the registry\n * @public\n */\nfunction createThemePlugin(theme, icons, iconLoaderUrl, iconLoader) {\n if (icons) {\n // add any user-provided icons to the registry\n Object.assign(iconRegistry, icons);\n }\n // if we have a theme declared, request it\n if (isClient &&\n !themeWasRequested &&\n (documentStyles === null || documentStyles === void 0 ? void 0 : documentStyles.getPropertyValue('--formkit-theme'))) {\n // we have the theme loaded locally\n themeDidLoad();\n themeWasRequested = true;\n }\n else if (theme && !themeWasRequested && isClient) {\n // we have the theme name but need to request it remotely\n loadTheme(theme);\n }\n else if (!themeWasRequested && isClient) {\n // we don't have a discoverable theme, so don't wait for it\n themeDidLoad();\n }\n const themePlugin = function themePlugin(node) {\n var _a, _b;\n // register the icon handler, and override with local prop value if it exists\n node.addProps(['iconLoader', 'iconLoaderUrl']);\n node.props.iconHandler = createIconHandler(((_a = node.props) === null || _a === void 0 ? void 0 : _a.iconLoader) ? node.props.iconLoader : iconLoader, ((_b = node.props) === null || _b === void 0 ? void 0 : _b.iconLoaderUrl) ? node.props.iconLoaderUrl : iconLoaderUrl);\n loadIconPropIcons(node, node.props.iconHandler);\n node.on('created', () => {\n var _a;\n // set up the `-icon` click handlers\n if ((_a = node === null || node === void 0 ? void 0 : node.context) === null || _a === void 0 ? void 0 : _a.handlers) {\n node.context.handlers.iconClick = (sectionKey) => {\n const clickHandlerProp = `on${sectionKey\n .charAt(0)\n .toUpperCase()}${sectionKey.slice(1)}IconClick`;\n const handlerFunction = node.props[clickHandlerProp];\n if (handlerFunction && typeof handlerFunction === 'function') {\n return (e) => {\n return handlerFunction(node, e);\n };\n }\n return undefined;\n };\n }\n });\n };\n themePlugin.iconHandler = createIconHandler(iconLoader, iconLoaderUrl);\n return themePlugin;\n}\n/**\n * Loads a FormKit theme\n */\nfunction loadTheme(theme) {\n if (!theme || !isClient || typeof getComputedStyle !== 'function') {\n // if we're not client-side then bail\n return;\n }\n // since we're client-side, flag that we've requested the theme\n themeWasRequested = true;\n documentThemeLinkTag = document.getElementById('formkit-theme');\n // retrieve document styles on plugin creation when the window object exists\n if (theme &&\n // if we have a window object\n isClient &&\n // we don't have an existing theme OR the theme being set up is different\n ((!(documentStyles === null || documentStyles === void 0 ? void 0 : documentStyles.getPropertyValue('--formkit-theme')) &&\n !documentThemeLinkTag) ||\n ((documentThemeLinkTag === null || documentThemeLinkTag === void 0 ? void 0 : documentThemeLinkTag.getAttribute('data-theme')) &&\n (documentThemeLinkTag === null || documentThemeLinkTag === void 0 ? void 0 : documentThemeLinkTag.getAttribute('data-theme')) !== theme))) {\n // if for some reason we didn't overwrite the __FKV__ token during publish\n // then use the `latest` tag for CDN fetching. (this applies to local dev as well)\n const formkitVersion = FORMKIT_VERSION.startsWith('__')\n ? 'latest'\n : FORMKIT_VERSION;\n const themeUrl = `https://cdn.jsdelivr.net/npm/@formkit/themes@${formkitVersion}/dist/${theme}/theme.css`;\n const link = document.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.id = 'formkit-theme';\n link.setAttribute('data-theme', theme);\n link.onload = () => {\n documentStyles = getComputedStyle(document.documentElement); // grab new variables from theme\n themeDidLoad();\n };\n document.head.appendChild(link);\n link.href = themeUrl;\n // if we had an existing theme being loaded, remove it.\n if (documentThemeLinkTag) {\n documentThemeLinkTag.remove();\n }\n }\n}\n/**\n * Returns a function responsible for loading an icon by name\n * @param iconLoader - a function for loading an icon when it's not found in the iconRegistry\n * @public\n */\nfunction createIconHandler(iconLoader, iconLoaderUrl) {\n return (iconName) => {\n if (typeof iconName === 'boolean') {\n return; // do nothing if we're dealing with a boolean\n }\n // if we're dealing with an inline SVG, just use it as-is\n if (iconName.startsWith(' {\n if (!iconValue && typeof iconName === 'string' && !isDefault) {\n return (loadedIcon =\n typeof iconLoader === 'function'\n ? iconLoader(iconName)\n : getRemoteIcon(iconName, iconLoaderUrl));\n }\n return iconValue;\n })\n .then((finalIcon) => {\n if (typeof iconName === 'string') {\n iconRegistry[isDefault ? `default:${iconName}` : iconName] =\n finalIcon;\n }\n return finalIcon;\n });\n }\n else if (typeof loadedIcon === 'string') {\n iconRegistry[isDefault ? `default:${iconName}` : iconName] = loadedIcon;\n return loadedIcon;\n }\n }\n return iconRequests[iconName];\n };\n}\nfunction getIconFromStylesheet(iconName) {\n if (!isClient)\n return;\n if (themeHasLoaded) {\n return loadStylesheetIcon(iconName);\n }\n else {\n return themeLoaded.then(() => {\n return loadStylesheetIcon(iconName);\n });\n }\n}\nfunction loadStylesheetIcon(iconName) {\n const cssVarIcon = documentStyles === null || documentStyles === void 0 ? void 0 : documentStyles.getPropertyValue(`--fk-icon-${iconName}`);\n if (cssVarIcon) {\n // if we have a matching icon in the CSS properties, then decode it\n const icon = atob(cssVarIcon);\n if (icon.startsWith(' {\n const icon = await r.text();\n if (icon.startsWith(' {\n console.error(e);\n return undefined;\n });\n}\n/**\n * Loads icons for the matching `-icon` props on a given node\n */\nfunction loadIconPropIcons(node, iconHandler) {\n const iconRegex = /^[a-zA-Z-]+(?:-icon|Icon)$/;\n const iconProps = Object.keys(node.props).filter((prop) => {\n return iconRegex.test(prop);\n });\n iconProps.forEach((sectionKey) => {\n return loadPropIcon(node, iconHandler, sectionKey);\n });\n}\n/**\n * Loads an icon from an icon-prop declaration eg. suffix-icon=\"settings\"\n */\nfunction loadPropIcon(node, iconHandler, sectionKey) {\n const iconName = node.props[sectionKey];\n const loadedIcon = iconHandler(iconName);\n const rawIconProp = `_raw${sectionKey\n .charAt(0)\n .toUpperCase()}${sectionKey.slice(1)}`;\n const clickHandlerProp = `on${sectionKey\n .charAt(0)\n .toUpperCase()}${sectionKey.slice(1)}Click`;\n node.addProps([rawIconProp, clickHandlerProp]);\n // listen for changes to the icon prop\n node.on(`prop:${sectionKey}`, reloadIcon);\n if (loadedIcon instanceof Promise) {\n return loadedIcon.then((svg) => {\n node.props[rawIconProp] = svg;\n });\n }\n else {\n node.props[rawIconProp] = loadedIcon;\n }\n return;\n}\n/**\n * reloads an icon when the prop value changes\n */\nfunction reloadIcon(event) {\n var _a;\n const node = event.origin;\n const iconName = event.payload;\n const iconHandler = (_a = node === null || node === void 0 ? void 0 : node.props) === null || _a === void 0 ? void 0 : _a.iconHandler;\n const sectionKey = event.name.split(':')[1];\n const rawIconProp = `_raw${sectionKey\n .charAt(0)\n .toUpperCase()}${sectionKey.slice(1)}`;\n if (iconHandler && typeof iconHandler === 'function') {\n const loadedIcon = iconHandler(iconName);\n if (loadedIcon instanceof Promise) {\n return loadedIcon.then((svg) => {\n node.props[rawIconProp] = svg;\n });\n }\n else {\n node.props[rawIconProp] = loadedIcon;\n }\n }\n}\n\nexport { createIconHandler, createThemePlugin, generateClasses, iconRegistry };\n","import { errorHandler, warningHandler } from '@formkit/core';\n\nlet registered = false;\n/**\n * Catalog of the error message codes in FormKit.\n * @public\n */\nconst errors = {\n /**\n * FormKit errors:\n */\n 100: ({ data: node }) => `Only groups, lists, and forms can have children (${node.name}).`,\n 101: ({ data: node }) => `You cannot directly modify the store (${node.name}). See: https://formkit.com/advanced/core#message-store`,\n 102: ({ data: [node, property], }) => `You cannot directly assign node.${property} (${node.name})`,\n 103: ({ data: [operator] }) => `Schema expressions cannot start with an operator (${operator})`,\n 104: ({ data: [operator, expression] }) => `Schema expressions cannot end with an operator (${operator} in \"${expression}\")`,\n 105: ({ data: expression }) => `Invalid schema expression: ${expression}`,\n 106: ({ data: name }) => `Cannot submit because (${name}) is not in a form.`,\n 107: ({ data: [node, value] }) => `Cannot set ${node.name} to non object value: ${value}`,\n 108: ({ data: [node, value] }) => `Cannot set ${node.name} to non array value: ${value}`,\n /**\n * Input specific errors:\n */\n 300: ({ data: [node] }) => `Cannot set behavior prop to overscroll (on ${node.name} input) when options prop is a function.`,\n /**\n * FormKit vue errors:\n */\n 600: ({ data: node }) => `Unknown input type${typeof node.props.type === 'string' ? ' \"' + node.props.type + '\"' : ''} (\"${node.name}\")`,\n 601: ({ data: node }) => `Input definition${typeof node.props.type === 'string' ? ' \"' + node.props.type + '\"' : ''} is missing a schema or component property (${node.name}).`,\n};\n/**\n * Catalog of the warning message codes in FormKit.\n * @public\n */\nconst warnings = {\n /**\n * Core warnings:\n */\n 150: ({ data: fn }) => `Schema function \"${fn}()\" is not a valid function.`,\n 151: ({ data: id }) => `No form element with id: ${id}`,\n 152: ({ data: id }) => `No input element with id: ${id}`,\n /**\n * Input specific warnings:\n */\n 350: ({ data: node }) => `Invalid options prop for radio input (${node.name}). See https://formkit.com/inputs/radio`,\n /**\n * Vue warnings:\n */\n 650: 'Schema \"$get()\" must use the id of an input to access.',\n 651: ({ data: id }) => `Cannot setErrors() on \"${id}\" because no such id exists.`,\n 652: ({ data: id }) => `Cannot clearErrors() on \"${id}\" because no such id exists.`,\n /**\n * Deprecation warnings:\n */\n 800: ({ data: name }) => `${name} is deprecated.`,\n};\n/**\n * Decodes an error that is being emitted and console logs it.\n * @param error - The error currently being handled\n * @param next - Call additional handlers\n * @returns\n */\nconst decodeErrors = (error, next) => {\n if (error.code in errors) {\n const err = errors[error.code];\n error.message = typeof err === 'function' ? err(error) : err;\n }\n return next(error);\n};\nif (!registered)\n errorHandler(decodeErrors);\n/**\n * Decodes an error that is being emitted and console logs it.\n * @param error - The error currently being handled\n * @param next - Call additional handlers\n * @returns\n */\nconst decodeWarnings = (warning, next) => {\n if (warning.code in warnings) {\n const warn = warnings[warning.code];\n warning.message = typeof warn === 'function' ? warn(warning) : warn;\n }\n return next(warning);\n};\nif (!registered)\n warningHandler(decodeWarnings);\nregistered = true;\n\nexport { errors, warnings };\n","import { warn, getNode, watchRegistry, isNode, sugar, isDOM, isComponent as isComponent$1, isConditional, compile, error, createConfig, clearErrors, setErrors, submitForm, reset, createNode, createMessage, createClasses, generateClassList } from '@formkit/core';\nexport { clearErrors, errorHandler, reset, resetCount, setErrors, submitForm } from '@formkit/core';\nimport { defineComponent, getCurrentInstance, watch, watchEffect, reactive, ref, createTextVNode, resolveComponent, h, isRef, isReactive, toRaw, inject, computed, provide, toRef, onBeforeUnmount, markRaw, nextTick, triggerRef } from 'vue';\nimport { has, isPojo, cloneAny, extend, camel, kebab, nodeProps, only, except, slugify, isObject, token, empty, eq, shallowClone, undefine } from '@formkit/utils';\nimport { createSection, useSchema, createLibraryPlugin, inputs } from '@formkit/inputs';\nimport * as defaultRules from '@formkit/rules';\nimport { createValidationPlugin } from '@formkit/validation';\nimport { createI18nPlugin, en } from '@formkit/i18n';\nimport { createThemePlugin, createIconHandler } from '@formkit/themes';\nimport { createObserver } from '@formkit/observer';\nimport '@formkit/dev';\n\n/**\n * A registry of memoized schemas (in JSON) to their respective render function\n * and provider registry.\n */\nconst memo = {};\n/**\n * This symbol represents the current component instance during render. It is\n * critical for linking the current instance to the data required for render.\n */\nlet instanceKey;\n/**\n * A registry of scoped data produced during runtime that is keyed by the\n * instance symbol. For example data from: for-loop instances and slot data.\n */\nconst instanceScopes = new Map();\n/**\n * Indicates the a section of the schema is raw.\n */\nconst raw = '__raw__';\n/**\n * Is a class prop.\n */\nconst isClassProp = /[a-zA-Z0-9\\-][cC]lass$/;\n/**\n * Returns a reference as a placeholder to a specific location on an object.\n * @param data - A reactive data object\n * @param token - A dot-syntax string representing the object path\n * @returns\n */\nfunction getRef(token, data) {\n const value = ref(null);\n if (token === 'get') {\n const nodeRefs = {};\n value.value = get$1.bind(null, nodeRefs);\n return value;\n }\n const path = token.split('.');\n watchEffect(() => (value.value = getValue(data, path)));\n return value;\n}\n/**\n * Returns a value inside a set of data objects.\n * @param sets - An array of objects to search through\n * @param path - A array of string paths easily produced by split()\n * @returns\n */\nfunction getValue(set, path) {\n if (Array.isArray(set)) {\n for (const subset of set) {\n const value = subset !== false && getValue(subset, path);\n if (value !== undefined)\n return value;\n }\n return undefined;\n }\n let foundValue = undefined;\n let obj = set;\n for (const i in path) {\n const key = path[i];\n if (typeof obj !== 'object' || obj === null) {\n foundValue = undefined;\n break;\n }\n const currentValue = obj[key];\n if (Number(i) === path.length - 1 && currentValue !== undefined) {\n // When the value is a function, we need to bind the `this` value\n // before providing this back to the compiler.\n foundValue =\n typeof currentValue === 'function'\n ? currentValue.bind(obj)\n : currentValue;\n break;\n }\n obj = currentValue;\n }\n return foundValue;\n}\n/**\n * Get the node from the global registry\n * @param id - A dot-syntax string where the node is located.\n */\nfunction get$1(nodeRefs, id) {\n if (typeof id !== 'string')\n return warn(650);\n if (!(id in nodeRefs))\n nodeRefs[id] = ref(undefined);\n if (nodeRefs[id].value === undefined) {\n nodeRefs[id].value = null;\n const root = getNode(id);\n if (root)\n nodeRefs[id].value = root.context;\n watchRegistry(id, ({ payload: node }) => {\n nodeRefs[id].value = isNode(node) ? node.context : node;\n });\n }\n return nodeRefs[id].value;\n}\n/**\n *\n * @param library - A library of concrete components to use\n * @param schema -\n * @returns\n */\nfunction parseSchema(library, schema) {\n /**\n * Given an if/then/else schema node, pre-compile the node and return the\n * artifacts for the render function.\n * @param data - The schema context object\n * @param library - The available components\n * @param node - The node to parse\n */\n function parseCondition(library, node) {\n const condition = provider(compile(node.if), { if: true });\n const children = createElements(library, node.then);\n const alternate = node.else ? createElements(library, node.else) : null;\n return [condition, children, alternate];\n }\n /**\n * Parses a conditional if/then/else attribute statement.\n * @param data - The data object\n * @param attr - The attribute\n * @param _default - The default value\n * @returns\n */\n function parseConditionAttr(attr, _default) {\n var _a, _b;\n const condition = provider(compile(attr.if));\n let b = () => _default;\n let a = () => _default;\n if (typeof attr.then === 'object') {\n a = parseAttrs(attr.then, undefined);\n }\n else if (typeof attr.then === 'string' && ((_a = attr.then) === null || _a === void 0 ? void 0 : _a.startsWith('$'))) {\n a = provider(compile(attr.then));\n }\n else {\n a = () => attr.then;\n }\n if (has(attr, 'else')) {\n if (typeof attr.else === 'object') {\n b = parseAttrs(attr.else);\n }\n else if (typeof attr.else === 'string' && ((_b = attr.else) === null || _b === void 0 ? void 0 : _b.startsWith('$'))) {\n b = provider(compile(attr.else));\n }\n else {\n b = () => attr.else;\n }\n }\n return () => (condition() ? a() : b());\n }\n /**\n * Parse attributes for dynamic content.\n * @param attrs - Object of attributes\n * @returns\n */\n function parseAttrs(unparsedAttrs, bindExp, _default = {}) {\n const explicitAttrs = new Set(Object.keys(unparsedAttrs || {}));\n const boundAttrs = bindExp ? provider(compile(bindExp)) : () => ({});\n const staticAttrs = {};\n const setters = [\n (attrs) => {\n const bound = boundAttrs();\n for (const attr in bound) {\n if (!explicitAttrs.has(attr)) {\n attrs[attr] = bound[attr];\n }\n }\n },\n ];\n if (unparsedAttrs) {\n if (isConditional(unparsedAttrs)) {\n // This is a root conditional object that must produce an object of\n // attributes.\n const condition = parseConditionAttr(unparsedAttrs, _default);\n return condition;\n }\n // Some attributes are explicitly bound, we need to parse those ones\n // using the compiler and create a dynamic \"setter\".\n for (let attr in unparsedAttrs) {\n const value = unparsedAttrs[attr];\n let getValue;\n const isStr = typeof value === 'string';\n if (attr.startsWith(raw)) {\n // attributes prefixed with __raw__ should not be parsed\n attr = attr.substring(7);\n getValue = () => value;\n }\n else if (isStr &&\n value.startsWith('$') &&\n value.length > 1 &&\n !(value.startsWith('$reset') && isClassProp.test(attr))) {\n // Most attribute values starting with $ should be compiled\n // -class attributes starting with `$reset` should not be compiled\n getValue = provider(compile(value));\n }\n else if (typeof value === 'object' && isConditional(value)) {\n // Conditional attrs require further processing\n getValue = parseConditionAttr(value, undefined);\n }\n else if (typeof value === 'object' && isPojo(value)) {\n // Sub-parse pojos\n getValue = parseAttrs(value);\n }\n else {\n // In all other cases, the value is static\n getValue = () => value;\n staticAttrs[attr] = value;\n }\n setters.push((attrs) => {\n attrs[attr] = getValue();\n });\n }\n }\n return () => {\n const attrs = Array.isArray(unparsedAttrs) ? [] : {};\n setters.forEach((setter) => setter(attrs));\n return attrs;\n };\n }\n /**\n * Given a single schema node, parse it and extract the value.\n * @param data - A state object provided to each node\n * @param node - The schema node being parsed\n * @returns\n */\n function parseNode(library, _node) {\n let element = null;\n let attrs = () => null;\n let condition = false;\n let children = null;\n let alternate = null;\n let iterator = null;\n let resolve = false;\n const node = sugar(_node);\n if (isDOM(node)) {\n // This is an actual HTML DOM element\n element = node.$el;\n attrs =\n node.$el !== 'text' ? parseAttrs(node.attrs, node.bind) : () => null;\n }\n else if (isComponent$1(node)) {\n // This is a Vue Component\n if (typeof node.$cmp === 'string') {\n if (has(library, node.$cmp)) {\n element = library[node.$cmp];\n }\n else {\n element = node.$cmp;\n resolve = true;\n }\n }\n else {\n // in this case it must be an actual component\n element = node.$cmp;\n }\n attrs = parseAttrs(node.props, node.bind);\n }\n else if (isConditional(node)) {\n [condition, children, alternate] = parseCondition(library, node);\n }\n // This is the same as a \"v-if\" statement — not an if/else statement\n if (!isConditional(node) && 'if' in node) {\n condition = provider(compile(node.if));\n }\n else if (!isConditional(node) && element === null) {\n // In this odd case our element is actually a partial and\n // we only want to render the children.\n condition = () => true;\n }\n // Compile children down to a function\n if ('children' in node && node.children) {\n if (typeof node.children === 'string') {\n // We are dealing with a raw string value\n if (node.children.startsWith('$slots.')) {\n // this is a lone text node, turn it into a slot\n element = element === 'text' ? 'slot' : element;\n children = provider(compile(node.children));\n }\n else if (node.children.startsWith('$') && node.children.length > 1) {\n const value = provider(compile(node.children));\n children = () => String(value());\n }\n else {\n children = () => String(node.children);\n }\n }\n else if (Array.isArray(node.children)) {\n // We are dealing with node sub-children\n children = createElements(library, node.children);\n }\n else {\n // This is a conditional if/else clause\n const [childCondition, c, a] = parseCondition(library, node.children);\n children = (iterationData) => childCondition && childCondition()\n ? c && c(iterationData)\n : a && a(iterationData);\n }\n }\n if (isComponent$1(node)) {\n if (children) {\n // Children of components need to be provided as an object of slots\n // so we provide an object with the default slot provided as children.\n // We also create a new scope for this default slot, and then on each\n // render pass the scoped slot props to the scope.\n const produceChildren = children;\n children = (iterationData) => {\n return {\n default(slotData, key) {\n var _a, _b, _c, _d;\n // We need to switch the current instance key back to the one that\n // originally called this component's render function.\n const currentKey = instanceKey;\n if (key)\n instanceKey = key;\n if (slotData)\n (_a = instanceScopes.get(instanceKey)) === null || _a === void 0 ? void 0 : _a.unshift(slotData);\n if (iterationData)\n (_b = instanceScopes.get(instanceKey)) === null || _b === void 0 ? void 0 : _b.unshift(iterationData);\n const c = produceChildren(iterationData);\n // Ensure our instance key never changed during runtime\n if (slotData)\n (_c = instanceScopes.get(instanceKey)) === null || _c === void 0 ? void 0 : _c.shift();\n if (iterationData)\n (_d = instanceScopes.get(instanceKey)) === null || _d === void 0 ? void 0 : _d.shift();\n instanceKey = currentKey;\n return c;\n },\n };\n };\n children.slot = true;\n }\n else {\n // If we dont have any children, we still need to provide an object\n // instead of an empty array (which raises a warning in vue)\n children = () => ({});\n }\n }\n // Compile the for loop down\n if ('for' in node && node.for) {\n const values = node.for.length === 3 ? node.for[2] : node.for[1];\n const getValues = typeof values === 'string' && values.startsWith('$')\n ? provider(compile(values))\n : () => values;\n iterator = [\n getValues,\n node.for[0],\n node.for.length === 3 ? String(node.for[1]) : null,\n ];\n }\n return [condition, element, attrs, children, alternate, iterator, resolve];\n }\n /**\n * Given a particular function that produces children, ensure that the second\n * argument of all these slots is the original instance key being used to\n * render the slots.\n * @param children - The children() function that will produce slots\n */\n function createSlots(children, iterationData) {\n const slots = children(iterationData);\n const currentKey = instanceKey;\n return Object.keys(slots).reduce((allSlots, slotName) => {\n const slotFn = slots && slots[slotName];\n allSlots[slotName] = (data) => {\n return (slotFn && slotFn(data, currentKey)) || null;\n };\n return allSlots;\n }, {});\n }\n /**\n * Creates an element\n * @param data - The context data available to the node\n * @param node - The schema node to render\n * @returns\n */\n function createElement(library, node) {\n // Parses the schema node into pertinent parts\n const [condition, element, attrs, children, alternate, iterator, resolve] = parseNode(library, node);\n // This is a sub-render function (called within a render function). It must\n // only use pre-compiled features, and be organized in the most efficient\n // manner possible.\n let createNodes = ((iterationData) => {\n if (condition && element === null && children) {\n // Handle conditional if/then statements\n return condition()\n ? children(iterationData)\n : alternate && alternate(iterationData);\n }\n if (element && (!condition || condition())) {\n // handle text nodes\n if (element === 'text' && children) {\n return createTextVNode(String(children()));\n }\n // Handle lone slots\n if (element === 'slot' && children)\n return children(iterationData);\n // Handle resolving components\n const el = resolve ? resolveComponent(element) : element;\n // If we are rendering slots as children, ensure their instanceKey is properly added\n const slots = (children === null || children === void 0 ? void 0 : children.slot)\n ? createSlots(children, iterationData)\n : null;\n // Handle dom elements and components\n return h(el, attrs(), (slots || (children ? children(iterationData) : [])));\n }\n return typeof alternate === 'function'\n ? alternate(iterationData)\n : alternate;\n });\n if (iterator) {\n const repeatedNode = createNodes;\n const [getValues, valueName, keyName] = iterator;\n createNodes = (() => {\n const _v = getValues();\n const values = !isNaN(_v)\n ? Array(Number(_v))\n .fill(0)\n .map((_, i) => i)\n : _v;\n const fragment = [];\n if (typeof values !== 'object')\n return null;\n const instanceScope = instanceScopes.get(instanceKey) || [];\n const isArray = Array.isArray(values);\n for (const key in values) {\n if (isArray && key in Array.prototype)\n continue; // Fix #299\n const iterationData = Object.defineProperty({\n ...instanceScope.reduce((previousIterationData, scopedData) => {\n if (previousIterationData.__idata) {\n return { ...previousIterationData, ...scopedData };\n }\n return scopedData;\n }, {}),\n [valueName]: values[key],\n ...(keyName !== null\n ? { [keyName]: isArray ? Number(key) : key }\n : {}),\n }, '__idata', { enumerable: false, value: true });\n instanceScope.unshift(iterationData);\n fragment.push(repeatedNode.bind(null, iterationData)());\n instanceScope.shift();\n }\n return fragment;\n });\n }\n return createNodes;\n }\n /**\n * Given a schema, parse it and return the resulting renderable nodes.\n * @param data - The schema context object\n * @param library - The available components\n * @param node - The node to parse\n * @returns\n */\n function createElements(library, schema) {\n if (Array.isArray(schema)) {\n const els = schema.map(createElement.bind(null, library));\n return (iterationData) => els.map((element) => element(iterationData));\n }\n // Single node to render\n const element = createElement(library, schema);\n return (iterationData) => element(iterationData);\n }\n /**\n * Data providers produced as a result of the compiler.\n */\n const providers = [];\n /**\n * Append the requisite compiler provider and return the compiled function.\n * @param compiled - A compiled function\n * @returns\n */\n function provider(compiled, hints = {}) {\n const compiledFns = {};\n providers.push((callback, key) => {\n compiledFns[key] = compiled.provide((tokens) => callback(tokens, hints));\n });\n return () => compiledFns[instanceKey]();\n }\n /**\n * Creates a new instance of a given schema — this either comes from a\n * memoized copy of the parsed schema or a freshly parsed version. An symbol\n * instance key, and dataProvider functions are passed in.\n * @param providerCallback - A function that is called for each required provider\n * @param key - a symbol representing the current instance\n */\n return function createInstance(providerCallback, key) {\n const memoKey = JSON.stringify(schema);\n const [render, compiledProviders] = has(memo, memoKey)\n ? memo[memoKey]\n : [createElements(library, schema), providers];\n memo[memoKey] = [render, compiledProviders];\n compiledProviders.forEach((compiledProvider) => {\n compiledProvider(providerCallback, key);\n });\n return () => {\n instanceKey = key;\n return render();\n };\n };\n}\n/**\n * Checks the current runtime scope for data.\n * @param token - The token to lookup in the current scope\n * @param defaultValue - The default ref value to use if no scope is found.\n */\nfunction useScope(token, defaultValue) {\n const scopedData = instanceScopes.get(instanceKey) || [];\n let scopedValue = undefined;\n if (scopedData.length) {\n scopedValue = getValue(scopedData, token.split('.'));\n }\n return scopedValue === undefined ? defaultValue : scopedValue;\n}\n/**\n * Get the current scoped data and flatten it.\n */\nfunction slotData(data, key) {\n return new Proxy(data, {\n get(...args) {\n let data = undefined;\n const property = args[1];\n if (typeof property === 'string') {\n const prevKey = instanceKey;\n instanceKey = key;\n data = useScope(property, undefined);\n instanceKey = prevKey;\n }\n return data !== undefined ? data : Reflect.get(...args);\n },\n });\n}\n/**\n * Provides data to a parsed schema.\n * @param provider - The SchemaProvider (output of calling parseSchema)\n * @param data - Data to fetch values from\n * @returns\n */\nfunction createRenderFn(instanceCreator, data, instanceKey) {\n return instanceCreator((requirements, hints = {}) => {\n return requirements.reduce((tokens, token) => {\n if (token.startsWith('slots.')) {\n const slot = token.substring(6);\n const hasSlot = data.slots && has(data.slots, slot);\n if (hints.if) {\n // If statement — dont render the slot, check if it exists\n tokens[token] = () => hasSlot;\n }\n else if (data.slots && hasSlot) {\n // Render the slot with current scope data\n const scopedData = slotData(data, instanceKey);\n tokens[token] = () => data.slots[slot](scopedData);\n return tokens;\n }\n }\n const value = getRef(token, data);\n tokens[token] = () => useScope(token, value.value);\n return tokens;\n }, {});\n }, instanceKey);\n}\nlet i = 0;\n/**\n * The FormKitSchema vue component:\n * @public\n */\nconst FormKitSchema = defineComponent({\n name: 'FormKitSchema',\n props: {\n schema: {\n type: [Array, Object],\n required: true,\n },\n data: {\n type: Object,\n default: () => ({}),\n },\n library: {\n type: Object,\n default: () => ({}),\n },\n },\n setup(props, context) {\n const instance = getCurrentInstance();\n let instanceKey = Symbol(String(i++));\n instanceScopes.set(instanceKey, []);\n let provider = parseSchema(props.library, props.schema);\n let render;\n let data;\n // Re-parse the schema if it changes:\n watch(() => props.schema, (newSchema, oldSchema) => {\n var _a;\n instanceKey = Symbol(String(i++));\n provider = parseSchema(props.library, props.schema);\n render = createRenderFn(provider, data, instanceKey);\n if (newSchema === oldSchema) {\n ((_a = instance === null || instance === void 0 ? void 0 : instance.proxy) === null || _a === void 0 ? void 0 : _a.$forceUpdate)();\n }\n }, { deep: true });\n // Watch the data object explicitly\n watchEffect(() => {\n data = Object.assign(reactive(props.data), {\n slots: context.slots,\n });\n render = createRenderFn(provider, data, instanceKey);\n });\n return () => render();\n },\n});\n\n/**\n * All the explicit FormKit props.\n */\nconst nativeProps = {\n config: {\n type: Object,\n default: {},\n },\n classes: {\n type: Object,\n required: false,\n },\n delay: {\n type: Number,\n required: false,\n },\n errors: {\n type: Array,\n default: [],\n },\n inputErrors: {\n type: Object,\n default: () => ({}),\n },\n index: {\n type: Number,\n required: false,\n },\n id: {\n type: String,\n required: false,\n },\n modelValue: {\n required: false,\n },\n name: {\n type: String,\n required: false,\n },\n parent: {\n type: Object,\n required: false,\n },\n plugins: {\n type: Array,\n default: [],\n },\n sectionsSchema: {\n type: Object,\n default: {},\n },\n type: {\n type: [String, Object],\n default: 'text',\n },\n validation: {\n type: [String, Array],\n required: false,\n },\n validationMessages: {\n type: Object,\n required: false,\n },\n validationRules: {\n type: Object,\n required: false,\n },\n validationLabel: {\n type: [String, Function],\n required: false,\n },\n};\n/**\n * The FormKit props object.\n * @internal\n */\nconst props = nativeProps;\n\n/**\n * The symbol that represents the formkit parent injection value.\n * @public\n */\nconst parentSymbol = Symbol('FormKitParent');\n/**\n * The root FormKit component.\n * @public\n */\nconst FormKit = defineComponent({\n props,\n emits: {\n /* eslint-disable @typescript-eslint/no-unused-vars */\n input: (_value, _node) => true,\n inputRaw: (_value, _node) => true,\n 'update:modelValue': (_value) => true,\n node: (node) => !!node,\n submit: (_data, _node) => true,\n submitRaw: (_event, _node) => true,\n submitInvalid: (_node) => true,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n },\n inheritAttrs: false,\n setup(props, context) {\n const node = useInput(props, context);\n if (!node.props.definition)\n error(600, node);\n if (node.props.definition.component) {\n return () => {\n var _a;\n return h((_a = node.props.definition) === null || _a === void 0 ? void 0 : _a.component, {\n context: node.context,\n }, { ...context.slots });\n };\n }\n const schema = ref([]);\n const generateSchema = () => {\n var _a, _b;\n const schemaDefinition = (_b = (_a = node.props) === null || _a === void 0 ? void 0 : _a.definition) === null || _b === void 0 ? void 0 : _b.schema;\n if (!schemaDefinition)\n error(601, node);\n schema.value =\n typeof schemaDefinition === 'function'\n ? schemaDefinition({ ...props.sectionsSchema })\n : schemaDefinition;\n };\n generateSchema();\n // If someone emits the schema event, we re-generate the schema\n node.on('schema', generateSchema);\n context.emit('node', node);\n const library = node.props.definition.library;\n // Expose the FormKitNode to template refs.\n context.expose({ node });\n return () => h(FormKitSchema, { schema: schema.value, data: node.context, library }, { ...context.slots });\n },\n});\n\n/**\n * The Create a new instance of the FormKit plugin for Vue.\n * @param app - A Vue application\n * @param config - FormKit Vue plugin configuration options\n */\nfunction createPlugin(app, options) {\n app\n .component(options.alias || 'FormKit', FormKit)\n .component(options.schemaAlias || 'FormKitSchema', FormKitSchema);\n return {\n get: getNode,\n setLocale: (locale) => {\n var _a;\n if ((_a = options.config) === null || _a === void 0 ? void 0 : _a.rootConfig) {\n options.config.rootConfig.locale = locale;\n }\n },\n clearErrors,\n setErrors,\n submit: submitForm,\n reset,\n };\n}\n/**\n * The symbol key for accessing the FormKit node options.\n * @public\n */\nconst optionsSymbol = Symbol.for('FormKitOptions');\n/**\n * The symbol key for accessing FormKit root configuration.\n * @public\n */\nconst configSymbol = Symbol.for('FormKitConfig');\n/**\n * Create the FormKit plugin.\n * @public\n */\nconst plugin = {\n install(app, _options) {\n /**\n * Extend the default configuration options.\n */\n const options = Object.assign({\n alias: 'FormKit',\n schemaAlias: 'FormKitSchema',\n }, typeof _options === 'function' ? _options() : _options);\n /**\n * The root configuration options.\n */\n const rootConfig = createConfig(options.config || {});\n /**\n * We dont want to explicitly provide any \"config\" options, only a root\n * config option — so here we override the existing config options.\n */\n options.config = { rootConfig };\n /**\n * Register the global $formkit plugin property.\n */\n app.config.globalProperties.$formkit = createPlugin(app, options);\n /**\n * Provide the config to the application for injection.\n */\n app.provide(optionsSymbol, options);\n /**\n * Provide the root config to the application.\n */\n app.provide(configSymbol, rootConfig);\n },\n};\n\n/**\n * Indicates that the path that was requested is no longer valid in the object.\n */\nconst invalidGet = Symbol();\n/**\n *\n * @param obj - An object to observe at depth\n * @param callback - A callback that\n * @public\n */\nfunction watchVerbose(obj, callback) {\n const watchers = {};\n const applyWatch = (paths) => {\n // Watch each property\n for (const path of paths) {\n // Stops pre-existing watchers at a given location to prevent dupes:\n if (path.__str in watchers)\n watchers[path.__str]();\n watchers[path.__str] = watch(touch.bind(null, obj, path), dispatcher.bind(null, path), { deep: false });\n }\n };\n /**\n * Clear any watchers deeper than this path.\n * @param path - The path to start from\n */\n const clearWatch = (path) => {\n if (!path.length)\n return;\n for (const key in watchers) {\n if (`${key}`.startsWith(`${path.__str}.`)) {\n watchers[key]();\n delete watchers[key];\n }\n }\n };\n const dispatcher = createDispatcher(obj, callback, applyWatch, clearWatch);\n applyWatch(getPaths(obj));\n}\n/**\n * This function synchronously dispatches to the watch callbacks. It uses the\n * knowledge that the getPath function is a depth-first-search thus lower\n * specificity (lower tree nodes) will always have their watchers called first.\n * If a lower specificity watcher is triggered we want to ignore the higher\n * specificity watcher.\n * @param obj - The object to dispatch\n * @param callback - The callback function to emit\n * @param applyWatch - A way to apply watchers to update objects\n * @returns\n */\nfunction createDispatcher(obj, callback, applyWatch, clearChildWatches) {\n // let dispatchedPaths: Record = {}\n // let clear: Promise | null = null\n return (path) => {\n const value = get(obj, path);\n if (value === invalidGet)\n return;\n if (path.__deep)\n clearChildWatches(path);\n if (typeof value === 'object')\n applyWatch(getPaths(value, [path], ...path));\n callback(path, value, obj);\n };\n}\n/**\n * \"Touches\" a given property for reactivity tracking purposes, if the value at\n * the given path is an object, we flatten it to just its keys since we will\n * already be tracking sub properties independently.\n * @param obj - A ref to traverse for a given path\n * @param path - An array of strings representing the path to locate\n * @returns\n */\nfunction touch(obj, path) {\n const value = get(obj, path);\n return value && typeof value === 'object' ? Object.keys(value) : value;\n}\n/**\n * \"Touches\" a given property for reactivity tracking purposes.\n * @param obj - A ref to traverse for a given path\n * @param path - An array of strings representing the path to locate\n * @returns\n */\nfunction get(obj, path) {\n if (isRef(obj)) {\n if (path.length === 0)\n return obj.value;\n obj = obj.value;\n }\n return path.reduce((value, segment) => {\n if (value === invalidGet)\n return value;\n if (value === null || typeof value !== 'object') {\n return invalidGet;\n }\n return value[segment];\n }, obj);\n}\n/**\n * Recursively retrieves all enumerable property paths from the origination\n * object. For example:\n * ```js\n * const obj = {\n * a: {\n * b: 123\n * },\n * c: 567\n * }\n * const paths = getPaths(obj)\n * // [\n * // ['a'],\n * // ['a', 'b'],\n * // ['c']\n * // ]\n * ```\n * @param obj - An object to retrieve paths for.\n * @param parents - An array of parent paths.\n * @returns\n * @internal\n */\nfunction getPaths(obj, paths = [], ...parents) {\n if (obj === null)\n return paths;\n if (!parents.length) {\n const path = Object.defineProperty([], '__str', {\n value: '',\n });\n obj = isRef(obj) ? obj.value : obj;\n if (obj && typeof obj === 'object') {\n Object.defineProperty(path, '__deep', { value: true });\n paths.push(path);\n }\n else {\n return [path];\n }\n }\n if (obj === null || typeof obj !== 'object')\n return paths;\n for (const key in obj) {\n const path = parents.concat(key);\n Object.defineProperty(path, '__str', { value: path.join('.') });\n const value = obj[key];\n if (isPojo(value) || Array.isArray(value)) {\n paths.push(Object.defineProperty(path, '__deep', { value: true }));\n paths = paths.concat(getPaths(value, [], ...path));\n }\n else {\n paths.push(path);\n }\n }\n return paths;\n}\n\n/**\n * Gets the raw underlying target object from a Vue Ref or Reactive object.\n * @param obj - Get the underlying target object, or no-op.\n * @returns\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction useRaw(obj) {\n if (obj === null || typeof obj !== 'object')\n return obj;\n if (isReactive(obj)) {\n obj = toRaw(obj);\n }\n else if (isRef(obj)) {\n obj = (isReactive(obj.value) ? useRaw(obj.value) : obj.value);\n }\n return obj;\n}\n\n/**\n * Props that are extracted from the attrs object.\n * TODO: Currently local, this should probably exported to a inputs or another\n * package.\n */\nconst pseudoProps = [\n 'help',\n 'label',\n 'ignore',\n 'disabled',\n 'preserve',\n /^preserve(-e|E)rrors/,\n /^[a-z]+(?:-visibility|Visibility)$/,\n /^[a-zA-Z-]+(?:-class|Class)$/,\n 'prefixIcon',\n 'suffixIcon',\n /^[a-zA-Z-]+(?:-icon|Icon)$/,\n];\n/**\n * Given some props, map those props to individualized props internally.\n * @param node - A formkit node\n * @param props - Some props that may include a classes object\n */\nfunction classesToNodeProps(node, props) {\n if (props.classes) {\n Object.keys(props.classes).forEach((key) => {\n if (typeof key === 'string') {\n node.props[`_${key}Class`] = props.classes[key];\n // We need to ensure Vue is aware that we want to actually observe the\n // child values too, so we touch them here.\n if (isObject(props.classes[key]) && key === 'inner')\n Object.values(props.classes[key]);\n }\n });\n }\n}\n/**\n * Extracts known FormKit listeners.\n * @param props - Extract known FormKit listeners.\n * @returns\n */\nfunction onlyListeners(props) {\n if (!props)\n return {};\n const knownListeners = ['Submit', 'SubmitRaw', 'SubmitInvalid'].reduce((listeners, listener) => {\n const name = `on${listener}`;\n if (name in props) {\n if (typeof props[name] === 'function') {\n listeners[name] = props[name];\n }\n }\n return listeners;\n }, {});\n return knownListeners;\n}\n/**\n * A composable for creating a new FormKit node.\n * @param type - The type of node (input, group, list)\n * @param attrs - The FormKit \"props\" — which is really the attrs list.\n * @returns\n * @public\n */\nfunction useInput(props, context, options = {}) {\n /**\n * The configuration options, these are provided by either the plugin or by\n * explicit props.\n */\n const config = Object.assign({}, inject(optionsSymbol) || {}, options);\n /**\n * The current instance.\n */\n const instance = getCurrentInstance();\n /**\n * Extracts the listeners.\n */\n const listeners = onlyListeners(instance === null || instance === void 0 ? void 0 : instance.vnode.props);\n /**\n * Determines if the prop is v-modeled.\n */\n const isVModeled = props.modelValue !== undefined;\n /**\n * Determines if the object being passed as a v-model is reactive.\n */\n // const isReactiveVModel = isVModeled && isReactive(props.modelValue)\n /**\n * Define the initial component\n */\n const value = props.modelValue !== undefined\n ? props.modelValue\n : cloneAny(context.attrs.value);\n /**\n * Creates the node's initial props from the context, props, and definition\n * @returns\n */\n function createInitialProps() {\n const initialProps = {\n ...nodeProps(props),\n ...listeners,\n };\n const attrs = except(nodeProps(context.attrs), pseudoProps);\n if (!attrs.key)\n attrs.key = token();\n initialProps.attrs = attrs;\n const propValues = only(nodeProps(context.attrs), pseudoProps);\n for (const propName in propValues) {\n initialProps[camel(propName)] = propValues[propName];\n }\n const classesProps = { props: {} };\n classesToNodeProps(classesProps, props);\n Object.assign(initialProps, classesProps.props);\n if (typeof initialProps.type !== 'string') {\n initialProps.definition = initialProps.type;\n delete initialProps.type;\n }\n return initialProps;\n }\n /**\n * Create the FormKitNode.\n */\n const initialProps = createInitialProps();\n /**\n * The parent node.\n */\n const parent = initialProps.ignore\n ? null\n : props.parent || inject(parentSymbol, null);\n const node = createNode(extend(config || {}, {\n name: props.name || undefined,\n value,\n parent,\n plugins: (config.plugins || []).concat(props.plugins),\n config: props.config,\n props: initialProps,\n index: props.index,\n }, false, true));\n /**\n * If no definition has been assigned at this point — we're out!\n */\n if (!node.props.definition)\n error(600, node);\n /**\n * All props that are bound \"late\" (after node creation) — are added to a set\n * which is used to watch the context.attrs object.\n */\n const lateBoundProps = ref(new Set(node.props.definition.props || []));\n /**\n * Any additional props added at a \"later\" time should also be part of the\n * late bound props.\n */\n node.on('added-props', ({ payload: lateProps }) => {\n if (Array.isArray(lateProps))\n lateProps.forEach((newProp) => lateBoundProps.value.add(newProp));\n });\n /**\n * These prop names must be assigned.\n */\n const pseudoPropNames = computed(() => pseudoProps.concat([...lateBoundProps.value]).reduce((names, prop) => {\n if (typeof prop === 'string') {\n names.push(camel(prop));\n names.push(kebab(prop));\n }\n else {\n names.push(prop);\n }\n return names;\n }, []));\n /* Splits Classes object into discrete props for each key */\n watchEffect(() => classesToNodeProps(node, props));\n /**\n * The props object already has properties even if they start as \"undefined\"\n * so we can loop over them and individual watchEffect to prevent responding\n * inappropriately.\n */\n const passThrough = nodeProps(props);\n for (const prop in passThrough) {\n watch(() => props[prop], () => {\n if (props[prop] !== undefined) {\n node.props[prop] = props[prop];\n }\n });\n }\n /**\n * Watch \"pseudoProp\" attributes explicitly.\n */\n const attributeWatchers = new Set();\n const possibleProps = nodeProps(context.attrs);\n watchEffect(() => {\n watchAttributes(only(possibleProps, pseudoPropNames.value));\n });\n /**\n * Defines attributes that should be used as props.\n * @param attrProps - Attributes that should be used as props instead\n */\n function watchAttributes(attrProps) {\n attributeWatchers.forEach((stop) => {\n stop();\n attributeWatchers.delete(stop);\n });\n for (const prop in attrProps) {\n const camelName = camel(prop);\n attributeWatchers.add(watch(() => context.attrs[prop], () => {\n node.props[camelName] = context.attrs[prop];\n }));\n }\n }\n /**\n * Watch and dynamically set attribute values, those values that are not\n * props and are not pseudoProps\n */\n watchEffect(() => {\n const attrs = except(nodeProps(context.attrs), pseudoPropNames.value);\n node.props.attrs = Object.assign({}, node.props.attrs || {}, attrs);\n });\n /**\n * Add any/all \"prop\" errors to the store.\n */\n watchEffect(() => {\n const messages = props.errors.map((error) => createMessage({\n key: slugify(error),\n type: 'error',\n value: error,\n meta: { source: 'prop' },\n }));\n node.store.apply(messages, (message) => message.type === 'error' && message.meta.source === 'prop');\n });\n /**\n * Add input errors.\n */\n if (node.type !== 'input') {\n const sourceKey = `${node.name}-prop`;\n watchEffect(() => {\n const keys = Object.keys(props.inputErrors);\n if (!keys.length)\n node.clearErrors(true, sourceKey);\n const messages = keys.reduce((messages, key) => {\n let value = props.inputErrors[key];\n if (typeof value === 'string')\n value = [value];\n if (Array.isArray(value)) {\n messages[key] = value.map((error) => createMessage({\n key: error,\n type: 'error',\n value: error,\n meta: { source: sourceKey },\n }));\n }\n return messages;\n }, {});\n node.store.apply(messages, (message) => message.type === 'error' && message.meta.source === sourceKey);\n });\n }\n /**\n * Watch the config prop for any changes.\n */\n watchEffect(() => Object.assign(node.config, props.config));\n /**\n * Produce another parent object.\n */\n if (node.type !== 'input') {\n provide(parentSymbol, node);\n }\n let inputTimeout;\n // eslint-disable-next-line @typescript-eslint/ban-types\n const mutex = new WeakSet();\n /**\n * Explicitly watch the input value, and emit changes (lazy)\n */\n node.on('modelUpdated', () => {\n var _a, _b;\n // Emit the values after commit\n context.emit('inputRaw', (_a = node.context) === null || _a === void 0 ? void 0 : _a.value, node);\n clearTimeout(inputTimeout);\n inputTimeout = setTimeout(context.emit, 20, 'input', (_b = node.context) === null || _b === void 0 ? void 0 : _b.value, node);\n if (isVModeled && node.context) {\n const newValue = useRaw(node.context.value);\n if (isObject(newValue) && useRaw(props.modelValue) !== newValue) {\n // If this is an object that has been mutated inside FormKit core then\n // we know when it is emitted it will \"return\" in the watchVerbose so\n // we pro-actively add it to the mutex.\n mutex.add(newValue);\n }\n context.emit('update:modelValue', newValue);\n }\n });\n /**\n * Enabled support for v-model, using this for groups/lists is not recommended\n */\n if (isVModeled) {\n watchVerbose(toRef(props, 'modelValue'), (path, value) => {\n var _a;\n const rawValue = useRaw(value);\n if (isObject(rawValue) && mutex.has(rawValue)) {\n return mutex.delete(rawValue);\n }\n if (!path.length)\n node.input(value, false);\n else\n (_a = node.at(path)) === null || _a === void 0 ? void 0 : _a.input(value, false);\n });\n /**\n * On initialization, if the node’s value was updated (like in a plugin\n * hook) then we should emit a `modelUpdated` event.\n */\n if (node.value !== value) {\n node.emit('modelUpdated');\n }\n }\n /**\n * When this input shuts down, we need to \"delete\" the node too.\n */\n // onUnmounted(() => node.destroy())\n onBeforeUnmount(() => node.destroy());\n return node;\n}\n\nlet totalCreated = 1;\n/**\n * Determine if the given object is a vue component.\n *\n * @param obj - Object or function\n * @returns\n * @public\n */\nfunction isComponent(obj) {\n return ((typeof obj === 'function' && obj.length === 2) ||\n (typeof obj === 'object' &&\n !Array.isArray(obj) &&\n !('$el' in obj) &&\n !('$cmp' in obj) &&\n !('if' in obj)));\n}\n/**\n * Creates a new input from schema or a Vue component with the \"standard\"\n * FormKit features in place such as labels, help text, validation messages, and\n * class support.\n *\n * @param schemaOrComponent - The actual schema of the input.\n * @public\n */\nfunction createInput(schemaOrComponent, definitionOptions = {}) {\n const definition = {\n type: 'input',\n ...definitionOptions,\n };\n let schema;\n if (isComponent(schemaOrComponent)) {\n const cmpName = `SchemaComponent${totalCreated++}`;\n schema = createSection('input', () => ({\n $cmp: cmpName,\n props: {\n context: '$node.context',\n },\n }));\n definition.library = { [cmpName]: markRaw(schemaOrComponent) };\n }\n else if (typeof schemaOrComponent === 'function') {\n schema = schemaOrComponent;\n }\n else {\n schema = createSection('input', () => cloneAny(schemaOrComponent));\n }\n // Use the default wrapping schema\n definition.schema = useSchema(schema || 'Schema undefined');\n return definition;\n}\n\n/**\n * A plugin that creates Vue-specific context object on each given node.\n * @param node - FormKitNode to create the context on.\n * @public\n */\nconst vueBindings = function vueBindings(node) {\n /**\n * Start a validity counter on all blocking messages.\n */\n node.ledger.count('blocking', (m) => m.blocking);\n const isValid = ref(!node.ledger.value('blocking'));\n /**\n * Start an error message counter.\n */\n node.ledger.count('errors', (m) => m.type === 'error');\n const hasErrors = ref(!!node.ledger.value('errors'));\n /**\n * Keep track of the first time a Vue tick cycle has passed.\n */\n let hasTicked = false;\n nextTick(() => {\n hasTicked = true;\n });\n /**\n * All messages with the visibility state set to true.\n */\n const availableMessages = reactive(node.store.reduce((store, message) => {\n if (message.visible) {\n store[message.key] = message;\n }\n return store;\n }, {}));\n /**\n * A flag that determines when validation messages should be displayed.\n */\n const validationVisibility = ref(node.props.validationVisibility || 'blur');\n node.on('prop:validationVisibility', ({ payload }) => {\n validationVisibility.value = payload;\n });\n /**\n * Keep track of if this input has ever shown validation errors.\n */\n const hasShownErrors = ref(validationVisibility.value === 'live');\n /**\n * The current visibility state of validation messages.\n */\n const validationVisible = computed(() => {\n if (context.state.submitted)\n return true;\n if (!hasShownErrors.value && !context.state.settled) {\n return false;\n }\n switch (validationVisibility.value) {\n case 'live':\n return true;\n case 'blur':\n return context.state.blurred;\n case 'dirty':\n return context.state.dirty;\n default:\n return false;\n }\n });\n /**\n * Determines if the input should be considered \"complete\".\n */\n const isComplete = computed(() => {\n return hasValidation.value\n ? isValid.value && !hasErrors.value\n : context.state.dirty && !empty(context.value);\n });\n /**\n * If the input has validation rules or not.\n */\n const hasValidation = ref(Array.isArray(node.props.parsedRules) && node.props.parsedRules.length > 0);\n node.on('prop:parsedRules', ({ payload: rules }) => {\n hasValidation.value = Array.isArray(rules) && rules.length > 0;\n });\n /**\n * All messages that are currently on display to an end user. This changes\n * based on the current message type visibility, like errorVisibility.\n */\n const messages = computed(() => {\n const visibleMessages = {};\n for (const key in availableMessages) {\n const message = availableMessages[key];\n if (message.type !== 'validation' || validationVisible.value) {\n visibleMessages[key] = message;\n }\n }\n return visibleMessages;\n });\n /**\n * UI Messages.\n */\n const ui = reactive(node.store.reduce((messages, message) => {\n if (message.type === 'ui' && message.visible)\n messages[message.key] = message;\n return messages;\n }, {}));\n /**\n * This is the reactive data object that is provided to all schemas and\n * forms. It is a subset of data in the core node object.\n */\n const cachedClasses = reactive({});\n const classes = new Proxy(cachedClasses, {\n get(...args) {\n const [target, property] = args;\n let className = Reflect.get(...args);\n if (!className && typeof property === 'string') {\n if (!has(target, property) && !property.startsWith('__v')) {\n const observedNode = createObserver(node);\n observedNode.watch((node) => {\n const rootClasses = typeof node.config.rootClasses === 'function'\n ? node.config.rootClasses(property, node)\n : {};\n const globalConfigClasses = node.config.classes\n ? createClasses(property, node, node.config.classes[property])\n : {};\n const classesPropClasses = createClasses(property, node, node.props[`_${property}Class`]);\n const sectionPropClasses = createClasses(property, node, node.props[`${property}Class`]);\n className = generateClassList(node, property, rootClasses, globalConfigClasses, classesPropClasses, sectionPropClasses);\n target[property] = className;\n });\n }\n }\n return className;\n },\n });\n const describedBy = computed(() => {\n const describers = [];\n if (context.help) {\n describers.push(`help-${node.props.id}`);\n }\n for (const key in messages.value) {\n describers.push(`${node.props.id}-${key}`);\n }\n return describers.length ? describers.join(' ') : undefined;\n });\n const value = ref(node.value);\n const _value = ref(node.value);\n const context = reactive({\n _value,\n attrs: node.props.attrs,\n disabled: node.props.disabled,\n describedBy,\n fns: {\n length: (obj) => Object.keys(obj).length,\n number: (value) => Number(value),\n string: (value) => String(value),\n json: (value) => JSON.stringify(value),\n eq,\n },\n handlers: {\n blur: (e) => {\n node.store.set(createMessage({ key: 'blurred', visible: false, value: true }));\n if (typeof node.props.attrs.onBlur === 'function') {\n node.props.attrs.onBlur(e);\n }\n },\n touch: () => {\n node.store.set(createMessage({ key: 'dirty', visible: false, value: true }));\n },\n DOMInput: (e) => {\n node.input(e.target.value);\n node.emit('dom-input-event', e);\n },\n },\n help: node.props.help,\n id: node.props.id,\n label: node.props.label,\n messages,\n node: markRaw(node),\n options: node.props.options,\n state: {\n blurred: false,\n complete: isComplete,\n dirty: false,\n submitted: false,\n settled: node.isSettled,\n valid: isValid,\n errors: hasErrors,\n rules: hasValidation,\n validationVisible,\n },\n type: node.props.type,\n family: node.props.family,\n ui,\n value,\n classes,\n });\n /**\n * Ensure the context object is properly configured after booting up.\n */\n node.on('created', () => {\n if (!eq(context.value, node.value)) {\n _value.value = node.value;\n value.value = node.value;\n triggerRef(value);\n triggerRef(_value);\n }\n node.props._init = cloneAny(node.value);\n });\n /**\n * Sets the settled state.\n */\n node.on('settled', ({ payload: isSettled }) => {\n context.state.settled = isSettled;\n });\n /**\n * Observes node.props properties explicitly and updates them in the context\n * object.\n * @param observe - Props to observe and register as context data.\n */\n function observeProps(observe) {\n observe.forEach((prop) => {\n prop = camel(prop);\n if (!has(context, prop) && has(node.props, prop)) {\n context[prop] = node.props[prop];\n }\n node.on(`prop:${prop}`, ({ payload }) => {\n context[prop] = payload;\n });\n });\n }\n /**\n * We use a node observer to individually observe node props.\n */\n const rootProps = () => {\n const props = [\n 'help',\n 'label',\n 'disabled',\n 'options',\n 'type',\n 'attrs',\n 'preserve',\n 'preserveErrors',\n 'id',\n ];\n const iconPattern = /^[a-zA-Z-]+(?:-icon|Icon)$/;\n const matchingProps = Object.keys(node.props).filter((prop) => {\n return iconPattern.test(prop);\n });\n return props.concat(matchingProps);\n };\n observeProps(rootProps());\n /**\n * Once the input is defined, deal with it.\n * @param definition - Type definition.\n */\n function definedAs(definition) {\n if (definition.props)\n observeProps(definition.props);\n }\n node.props.definition && definedAs(node.props.definition);\n /**\n * When new props are added to the core node as \"props\" (ie not attrs) then\n * we automatically need to start tracking them here.\n */\n node.on('added-props', ({ payload }) => observeProps(payload));\n /**\n * Watch for input events from core.\n */\n node.on('input', ({ payload }) => {\n if (node.type !== 'input' && !isRef(payload) && !isReactive(payload)) {\n _value.value = shallowClone(payload);\n }\n else {\n _value.value = payload;\n triggerRef(_value);\n }\n });\n /**\n * Watch for input commits from core.\n */\n node.on('commit', ({ payload }) => {\n if (node.type !== 'input' && !isRef(payload) && !isReactive(payload)) {\n value.value = _value.value = shallowClone(payload);\n }\n else {\n value.value = _value.value = payload;\n triggerRef(value);\n }\n node.emit('modelUpdated');\n // The input is dirty after a value has been input by a user\n if (!context.state.dirty &&\n node.isCreated &&\n hasTicked &&\n !eq(value.value, node.props._init))\n context.handlers.touch();\n if (isComplete &&\n node.type === 'input' &&\n hasErrors.value &&\n !undefine(node.props.preserveErrors)) {\n node.store.filter((message) => { var _a; return !(message.type === 'error' && ((_a = message.meta) === null || _a === void 0 ? void 0 : _a.autoClear) === true); });\n }\n });\n /**\n * Update the local state in response to messages.\n * @param message - A formkit message\n */\n const updateState = async (message) => {\n if (message.type === 'ui' &&\n message.visible &&\n !message.meta.showAsMessage) {\n ui[message.key] = message;\n }\n else if (message.visible) {\n availableMessages[message.key] = message;\n }\n else if (message.type === 'state') {\n // await node.settled\n context.state[message.key] = !!message.value;\n }\n };\n /**\n * Listen to message events and modify the local message data values.\n */\n node.on('message-added', (e) => updateState(e.payload));\n node.on('message-updated', (e) => updateState(e.payload));\n node.on('message-removed', ({ payload: message }) => {\n delete ui[message.key];\n delete availableMessages[message.key];\n delete context.state[message.key];\n });\n node.on('settled:blocking', () => {\n isValid.value = true;\n });\n node.on('unsettled:blocking', () => {\n isValid.value = false;\n });\n node.on('settled:errors', () => {\n hasErrors.value = false;\n });\n node.on('unsettled:errors', () => {\n hasErrors.value = true;\n });\n /**\n * Watch the validation visible prop and set the hasShownErrors state.\n */\n watch(validationVisible, (value) => {\n if (value) {\n hasShownErrors.value = true;\n }\n });\n node.context = context;\n // The context is complete\n node.emit('context', node, false);\n};\n\n/**\n * Default configuration options. Includes all validation rules,\n * en i18n messages.\n * @public\n */\nconst defaultConfig = (options = {}) => {\n const { rules = {}, locales = {}, inputs: inputs$1 = {}, messages = {}, locale = undefined, theme = undefined, iconLoaderUrl = undefined, iconLoader = undefined, icons = {}, ...nodeOptions } = options;\n /**\n * The default configuration includes the validation plugin,\n * with all core-available validation rules.\n */\n const validation = createValidationPlugin({\n ...defaultRules,\n ...(rules || {}),\n });\n /**\n * Includes the i18n plugin with only the english language\n * messages.\n */\n const i18n = createI18nPlugin(extend({ en, ...(locales || {}) }, messages));\n /**\n * Create the library of inputs that are generally available. This default\n * config imports all \"native\" inputs by default, but\n */\n const library = createLibraryPlugin(inputs, inputs$1);\n /**\n * Create the theme plugin for the user provided theme\n */\n const themePlugin = createThemePlugin(theme, icons, iconLoaderUrl, iconLoader);\n return extend({\n plugins: [library, themePlugin, vueBindings, i18n, validation],\n ...(!locale ? {} : { config: { locale } }),\n }, nodeOptions || {}, true);\n};\n\n/**\n * Renders an icon using the current IconLoader set at the root FormKit config\n * @public\n */\nconst FormKitIcon = defineComponent({\n name: 'FormKitIcon',\n props: {\n icon: {\n type: String,\n default: ''\n },\n iconLoader: {\n type: Function,\n default: null\n },\n iconLoaderUrl: {\n type: Function,\n default: null\n }\n },\n setup(props) {\n var _a, _b;\n const icon = ref(undefined);\n const config = inject(optionsSymbol, {});\n const parent = inject(parentSymbol, null);\n let iconHandler = undefined;\n if (props.iconLoader && typeof props.iconLoader === 'function') {\n // if we have a locally supplied loader, then use it\n iconHandler = createIconHandler(props.iconLoader);\n }\n else if (parent && ((_a = parent.props) === null || _a === void 0 ? void 0 : _a.iconLoader)) {\n // otherwise try to inherit from a parent\n iconHandler = createIconHandler(parent.props.iconLoader);\n }\n else if (props.iconLoaderUrl && typeof props.iconLoaderUrl === 'function') {\n iconHandler = createIconHandler(iconHandler, props.iconLoaderUrl);\n }\n else {\n // grab our iconHandler from the global config\n const iconPlugin = (_b = config === null || config === void 0 ? void 0 : config.plugins) === null || _b === void 0 ? void 0 : _b.find(plugin => {\n return typeof plugin.iconHandler === 'function';\n });\n if (iconPlugin) {\n iconHandler = iconPlugin.iconHandler;\n }\n }\n if (iconHandler && typeof iconHandler === 'function') {\n const iconOrPromise = iconHandler(props.icon);\n if (iconOrPromise instanceof Promise) {\n iconOrPromise.then((iconValue) => {\n icon.value = iconValue;\n });\n }\n else {\n icon.value = iconOrPromise;\n }\n }\n return () => {\n if (icon.value) {\n return h('span', {\n class: 'formkit-icon',\n innerHTML: icon.value\n });\n }\n return null;\n };\n }\n});\n\nexport { FormKit, FormKitIcon, FormKitSchema, vueBindings as bindings, configSymbol, createInput, defaultConfig, optionsSymbol, parentSymbol, plugin, useInput, watchVerbose };\n","!function(){const e=document.createElement(\"meta\");e.name=\"darkreader\",e.content=\"NO-DARKREADER-PLUGIN\";const t=function(){!function(){document.querySelector('meta[content=\"'+e.content+'\"]')||document.head.appendChild(e);let t=document.querySelector('meta[name=\"'+e.name+'\"]');t&&t.content!=e.content&&t.remove()}(),function(){for(const e of document.head.getElementsByClassName(\"darkreader\"))e.remove()}()},n={attributes:!1,childList:!0,subtree:!1},o=new MutationObserver(t);!document.querySelector('meta[content=\"'+e.content+'\"]')&&document.querySelector('meta[name=\"'+e.name+'\"]')?console.error(\"Please add the line below to your index.html:\\n\",'\\n',\"or you may encounter a performance issue!\\n\",\"\\nplease take a look at: https://github.com/hadialqattan/no-darkreader#usage\"):(o.observe(document.head,n),t())}();\n","const DEFAULT_PLUGIN_OPTIONS = {\r\n directive: 'wave',\r\n color: 'currentColor',\r\n initialOpacity: 0.2,\r\n finalOpacity: 0.1,\r\n duration: 0.4,\r\n dissolveDuration: 0.15,\r\n easing: 'ease-out',\r\n cancellationPeriod: 75,\r\n trigger: 'auto',\r\n tagName: 'div'\r\n};\n\nconst isVue3 = (app) => 'config' in app && 'globalProperties' in app.config;\n\nconst getHooks = (app) => {\r\n let vue3;\r\n if (app === 'vue2')\r\n vue3 = false;\r\n else if (app === 'vue3')\r\n vue3 = true;\r\n else\r\n vue3 = isVue3(app);\r\n return vue3\r\n ? {\r\n mounted: 'mounted',\r\n updated: 'updated'\r\n }\r\n : {\r\n mounted: 'inserted',\r\n updated: 'componentUpdated'\r\n };\r\n};\n\nconst triggerIsID = (trigger) => typeof trigger === 'string' && trigger !== 'auto';\n\nconst markWaveBoundary = (el, trigger) => {\r\n el.dataset.vWaveBoundary = triggerIsID(trigger) ? trigger : 'true';\r\n};\n\n/**\r\n * Creates a container element for the wave.\r\n */\r\nconst createContainer = ({ borderTopLeftRadius, borderTopRightRadius, borderBottomLeftRadius, borderBottomRightRadius }, tagName) => {\r\n const waveContainer = document.createElement(tagName);\r\n waveContainer.style.top = '0';\r\n waveContainer.style.left = '0';\r\n waveContainer.style.width = '100%';\r\n waveContainer.style.height = '100%';\r\n waveContainer.style.display = 'block';\r\n waveContainer.style.position = 'absolute';\r\n waveContainer.style.borderRadius = `${borderTopLeftRadius} ${borderTopRightRadius} ${borderBottomRightRadius} ${borderBottomLeftRadius}`;\r\n waveContainer.style.overflow = 'hidden';\r\n waveContainer.style.pointerEvents = 'none';\r\n // Meet Safari, the new IE 💩\r\n waveContainer.style.webkitMaskImage = '-webkit-radial-gradient(white, black)';\r\n return waveContainer;\r\n};\n\nconst createWaveElement = (x, y, size, options) => {\r\n const waveElement = document.createElement('div');\r\n waveElement.style.position = 'absolute';\r\n waveElement.style.width = `${size}px`;\r\n waveElement.style.height = `${size}px`;\r\n waveElement.style.top = `${y}px`;\r\n waveElement.style.left = `${x}px`;\r\n waveElement.style.background = options.color;\r\n waveElement.style.borderRadius = '50%';\r\n waveElement.style.opacity = `${options.initialOpacity}`;\r\n waveElement.style.transform = `translate(-50%,-50%) scale(0)`;\r\n waveElement.style.transition = `transform ${options.duration}s ${options.easing}, opacity ${options.duration}s ${options.easing}`;\r\n return waveElement;\r\n};\n\nfunction magnitude(x1, y1, x2, y2) {\r\n const deltaX = x1 - x2;\r\n const deltaY = y1 - y2;\r\n return Math.sqrt(deltaX * deltaX + deltaY * deltaY);\r\n}\n\nfunction getDistanceToFurthestCorner(x, y, { width, height }) {\r\n const topLeft = magnitude(x, y, 0, 0);\r\n const topRight = magnitude(x, y, width, 0);\r\n const bottomLeft = magnitude(x, y, 0, height);\r\n const bottomRight = magnitude(x, y, width, height);\r\n return Math.max(topLeft, topRight, bottomLeft, bottomRight);\r\n}\n\nconst getRelativePointer = ({ x, y }, { top, left }) => ({\r\n x: x - left,\r\n y: y - top\r\n});\n\nconst WAVE_COUNT = 'vWaveCountInternal';\r\nfunction incrementWaveCount(el) {\r\n const count = getWaveCount(el);\r\n setWaveCount(el, count + 1);\r\n}\r\nfunction decrementWaveCount(el) {\r\n const count = getWaveCount(el);\r\n setWaveCount(el, count - 1);\r\n}\r\nfunction setWaveCount(el, count) {\r\n el.dataset[WAVE_COUNT] = count.toString();\r\n}\r\nfunction getWaveCount(el) {\r\n var _a;\r\n return parseInt((_a = el.dataset[WAVE_COUNT]) !== null && _a !== void 0 ? _a : '0', 10);\r\n}\r\nfunction deleteWaveCount(el) {\r\n delete el.dataset[WAVE_COUNT];\r\n}\n\nconst wave = (event, el, options) => {\r\n const rect = el.getBoundingClientRect();\r\n const computedStyles = window.getComputedStyle(el);\r\n const { x, y } = getRelativePointer(event, rect);\r\n const size = 2.05 * getDistanceToFurthestCorner(x, y, rect); // 2.05 is magic, deal with it.\r\n // We're creating a container for the \"wave\" with `overflow: hidden`\r\n // because if we were to set `overflow: hidden` on `el` we\r\n // risk altering its appearance.\r\n const waveContainer = createContainer(computedStyles, options.tagName);\r\n const waveEl = createWaveElement(x, y, size, options);\r\n // Keep track of how many waves are active on this element.\r\n incrementWaveCount(el);\r\n // We reply on absolute positioning, so we need to make sure `el`'s position is non-static\r\n let originalPositionValue = '';\r\n if (computedStyles.position === 'static') {\r\n if (el.style.position)\r\n originalPositionValue = el.style.position;\r\n el.style.position = 'relative';\r\n }\r\n waveContainer.appendChild(waveEl);\r\n el.appendChild(waveContainer);\r\n let shouldDissolveWave = false;\r\n const releaseWave = (e) => {\r\n if (typeof e !== 'undefined') {\r\n document.removeEventListener('pointerup', releaseWave);\r\n document.removeEventListener('pointercancel', releaseWave);\r\n }\r\n if (shouldDissolveWave)\r\n dissolveWave();\r\n else\r\n shouldDissolveWave = true;\r\n };\r\n const dissolveWave = () => {\r\n waveEl.style.transition = `opacity ${options.dissolveDuration}s linear`;\r\n waveEl.style.opacity = '0';\r\n setTimeout(() => {\r\n waveContainer.remove();\r\n decrementWaveCount(el);\r\n if (getWaveCount(el) === 0) {\r\n deleteWaveCount(el);\r\n // Only reset the style after all active waves have been removed\r\n el.style.position = originalPositionValue;\r\n }\r\n }, options.dissolveDuration * 1000);\r\n };\r\n document.addEventListener('pointerup', releaseWave);\r\n document.addEventListener('pointercancel', releaseWave);\r\n const token = setTimeout(() => {\r\n document.removeEventListener('pointercancel', cancelWave);\r\n requestAnimationFrame(() => {\r\n waveEl.style.transform = `translate(-50%,-50%) scale(1)`;\r\n waveEl.style.opacity = `${options.finalOpacity}`;\r\n setTimeout(() => releaseWave(), options.duration * 1000);\r\n });\r\n }, options.cancellationPeriod);\r\n const cancelWave = () => {\r\n clearTimeout(token);\r\n waveContainer.remove();\r\n document.removeEventListener('pointerup', releaseWave);\r\n document.removeEventListener('pointercancel', releaseWave);\r\n document.removeEventListener('pointercancel', cancelWave);\r\n };\r\n document.addEventListener('pointercancel', cancelWave);\r\n};\n\nconst optionMap = new WeakMap();\r\nconst createDirective = (globalUserOptions = {}, app = 'vue3') => {\r\n const globalOptions = Object.assign(Object.assign({}, DEFAULT_PLUGIN_OPTIONS), globalUserOptions);\r\n const hooks = getHooks(app);\r\n const handleTrigger = (event) => {\r\n const trigger = event.currentTarget.dataset.vWaveTrigger;\r\n const associatedElements = document.querySelectorAll(`[data-v-wave-boundary=\"${trigger}\"]`);\r\n associatedElements.forEach((el) => wave(event, el, Object.assign(Object.assign({}, globalOptions), optionMap.get(el))));\r\n };\r\n const waveDirective = {\r\n [hooks.mounted](el, { value = {} }) {\r\n var _a;\r\n optionMap.set(el, value);\r\n markWaveBoundary(el, (_a = (value && value.trigger)) !== null && _a !== void 0 ? _a : globalOptions.trigger);\r\n el.addEventListener('pointerdown', (event) => {\r\n if (optionMap.get(el) === false)\r\n return;\r\n const options = Object.assign(Object.assign({}, globalOptions), optionMap.get(el));\r\n if (options.trigger === false)\r\n return wave(event, el, options);\r\n if (triggerIsID(options.trigger))\r\n return;\r\n const trigger = el.querySelector('[data-v-wave-trigger=\"true\"]');\r\n if (!trigger && options.trigger === true)\r\n return;\r\n if (trigger && !event.composedPath().includes(trigger))\r\n return;\r\n wave(event, el, options);\r\n });\r\n },\r\n [hooks.updated](el, { value = {} }) {\r\n var _a;\r\n optionMap.set(el, value);\r\n markWaveBoundary(el, (_a = (value && value.trigger)) !== null && _a !== void 0 ? _a : globalOptions.trigger);\r\n }\r\n };\r\n const triggerDirective = {\r\n [hooks.mounted](el, { arg: trigger = 'true' }) {\r\n el.dataset.vWaveTrigger = trigger;\r\n if (trigger !== 'true')\r\n el.addEventListener('pointerdown', handleTrigger);\r\n },\r\n [hooks.updated](el, { arg: trigger = 'true' }) {\r\n el.dataset.vWaveTrigger = trigger;\r\n if (trigger === 'true')\r\n el.removeEventListener('pointerdown', handleTrigger);\r\n else\r\n el.addEventListener('pointerdown', handleTrigger);\r\n }\r\n };\r\n return {\r\n wave: waveDirective,\r\n vWave: waveDirective,\r\n waveTrigger: triggerDirective,\r\n vWaveTrigger: triggerDirective\r\n };\r\n};\r\nconst VWave = {\r\n install(app, globalUserOptions = {}) {\r\n if (this.installed)\r\n return;\r\n this.installed = true;\r\n const globalOptions = Object.assign(Object.assign({}, DEFAULT_PLUGIN_OPTIONS), globalUserOptions);\r\n const { vWave, vWaveTrigger } = createDirective(globalOptions, app);\r\n app.directive(globalOptions.directive, vWave);\r\n app.directive(`${globalOptions.directive}-trigger`, vWaveTrigger);\r\n },\r\n installed: false,\r\n createLocalWaveDirective: createDirective\r\n};\n\nexport { VWave as default };\n","import { createApp, h, provide } from \"vue\";\nimport RouterPrefetch from \"vue-router-prefetch\";\nimport { DefaultApolloClient } from \"@vue/apollo-composable\";\nimport { createHead } from \"@vueuse/head\";\nimport { createPinia } from \"pinia\";\nimport { apolloClient } from \"@/apollo/apollo\";\nimport router from \"@/router/router\";\nimport { i18n } from \"@/i18n\";\nimport { TooltipDirective } from \"./directives/Tooltip\";\nimport App from \"@/App.vue\";\nimport \"@/icons\";\nimport { plugin as formkit, defaultConfig as formkitConfig } from \"@formkit/vue\";\nimport { FontAwesomeIcon } from \"@fortawesome/vue-fontawesome\";\nimport \"@scss/forms.scss\";\n// TODO: remove this after building a custom theme for forms\nimport \"no-darkreader\";\nimport vWave from \"v-wave\";\n\nconst app = createApp({\n\tsetup() {\n\t\tprovide(DefaultApolloClient, apolloClient);\n\t},\n\trender: () => h(App),\n});\n\nformkitConfig;\napp.use(createHead())\n\t.component(\"font-awesome-icon\", FontAwesomeIcon)\n\t.directive(\"tooltip\", TooltipDirective)\n\t.use(createPinia())\n\t.use(router)\n\t.use(i18n)\n\t.use(formkit, formkitConfig)\n\t.use(vWave, {})\n\t.use(RouterPrefetch);\n\n// directives(app);\n\napp.mount(\"#app\");\n"],"names":["inBrowser","conn","canPrefetch","supportIntersectionObserver","preFetched","support","feature","link","linkPrefetchStrategy","url","resolve","reject","xhrPrefetchStrategy","req","highPriFetchStrategy","supportedPrefetchStrategy","prefetcher","isPriority","installRouterPrefetch","app","ref","componentName","enablePrefetch","observer","entries","entry","requestIdleCallback","cb","timeout","start","RouterLink","Link","props","context","route","record","Component","components","i","list","prefetchFiles","i$1","list$1","file","flatHooks","configHooks","hooks","parentName","key","subHook","name","serialCaller","arguments_","promise","hookFunction","parallelCaller","hook","callEachWith","callbacks","argument0","callback","Hookable","function_","options","originalName","dep","message","_unreg","_function","index","deprecated","_hooks","deprecatedHooks","removeFns","unreg","caller","event","result","createHooks","TagsWithInnerContent","HasElementTags$1","UniqueTags$1","tagDedupeKey$1","tag","fn","tagName","n","val","setAttrs","ctx","markSideEffect","$el","k","value","attrSdeKey","c","classSdeKey","hashCode","s","h","renderDOMHead","head","dom","staleSideEffects","sde","preRenderTag","e","renderCtx","renders","pendingRenders","ctx2","markEl","t","pos","queue","elTag","dedupeKey","matchIdx","domUpdatePromise","debouncedRenderDOMHead","doDomUpdate","delayFn","ValidHeadTags","TagConfigKeys","normaliseTag","input","normaliseProps","v","newTag","tagWeight","sortTags","aTag","bTag","UniqueTags","tagDedupeKey","renderTitleTemplate","template","title","resolveTitleTemplateFromTags","tags","titleTemplateIdx","titleIdx","newTitle","DedupesTagsPlugin","dedupeKeys","dedupe","deduping","dupedTag","strategy","oldProps","propCount","SortTagsPlugin","tagIndexForKey","modifiers","prefix","offset","a","b","TitleTemplatePlugin","DeprecatedTagAttrPlugin","IsBrowser$1","ProvideTagHashPlugin","isDynamic","HasElementTags","getActiveHead","PatchDomOnEntryUpdatesPlugin","EventHandlersPlugin","stripEventHandlers","mode","eventHandlers","delayedSrc","$eventListenerTarget","sdeKey","eventName","eventDedupeKey","handler","asArray$1","activeHead","setActiveHead","TagEntityBits","normaliseEntryTags","tagPromises","CorePlugins","DOMPlugins","createHead$1","createHeadCore","_sde","_eid","p","updated","plugin","options2","activeEntry","input2","resolveCtx","tagCtx","resolveUnref","r","unref","resolveUnrefHeadInput","lastKey","root","dynamic","unrefdObj","isRef","Vue3","version","IsBrowser","headSymbol","injectHead","getCurrentInstance","inject","createHead","nextTick","VueReactiveUseHeadPlugin","vuePlugin","clientUseHead","resolvedInput","watchEffect","watch","onBeforeUnmount","serverUseHead","useHead","isBrowser","initHeadObject","unhead","legacyHead","api","document","force","OperationBatcher","_a","batchDebounce","batchInterval","batchMax","batchHandler","batchKey","request","_this","requestCopy","__assign","Observable","batch","isFirstEnqueuedRequest","isFirstSubscriber","operations","forwards","observables","nexts","errors","completes","batchedObservable","onError","error","rejecters","results","next","complete","BatchLink","_super","__extends","fetchParams","_b","_c","_d","_e","operation","forward","ApolloLink","BatchHttpLink","uri","fetcher","print","defaultPrinter","includeExtensions","preserveHeaderCase","requestOptions","__rest","checkFetcher","linkConfig","chosenURI","selectURI","clientAwarenessHeaders","name_1","contextConfig","optsAndBody","selectHttpOptionsAndBodyInternal","fallbackHttpConfig","loadedBody","body","fromError","serializeFetchParameter","parseError","controller","createSignalIfSupported","_controller","signal","response","parseAndCheckHttpResponse","err","httpLink","cycleDetected","authLink","store","useStore","resp","cache","InMemoryCache","_","apolloClient","ApolloClient","getAlignment","placement","getLengthFromAxis","axis","getSide","getMainAxisFromPlacement","computeCoordsFromPlacement","_ref","rtl","reference","floating","commonX","commonY","mainAxis","length","commonAlign","side","isVertical","coords","computePosition","config","middleware","platform","validMiddleware","rects","x","y","statefulPlacement","middlewareData","resetCount","nextX","nextY","data","reset","expandPaddingObject","padding","getSideObjectFromPadding","rectToClientRect","rect","detectOverflow","middlewareArguments","_await$platform$isEle","elements","boundary","rootBoundary","elementContext","altBoundary","paddingObject","element","clippingClientRect","offsetParent","offsetScale","elementClientRect","min","max","within","min$1","max$1","getCrossAxis","shift","checkMainAxis","checkCrossAxis","limiter","detectOverflowOptions","overflow","crossAxis","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","getWindow","node","_node$ownerDocument","getComputedStyle$1","getNodeName","isNode","uaString","getUAString","uaData","item","isHTMLElement","isElement","isShadowRoot","OwnElement","isOverflowElement","overflowX","overflowY","display","isTableElement","isContainingBlock","isFirefox","css","backdropFilter","contain","isLayoutViewport","isLastTraversableNode","round","getCssDimensions","width","height","offsetWidth","offsetHeight","shouldFallback","unwrapElement","FALLBACK_SCALE","getScale","domElement","fallback","getBoundingClientRect","includeScale","isFixedStrategy","_win$visualViewport","_win$visualViewport2","clientRect","scale","win","addVisualOffsets","offsetWin","currentIFrame","iframeScale","iframeRect","getDocumentElement","getNodeScroll","getWindowScrollBarX","getRectRelativeToOffsetParent","isOffsetParentAnElement","documentElement","scroll","offsets","offsetRect","getParentNode","getTrueOffsetParent","getContainingBlock","currentNode","getOffsetParent","window","getDimensions","convertOffsetParentRelativeRectToViewportRelativeRect","getViewportRect","html","visualViewport","layoutViewport","getDocumentRect","_element$ownerDocumen","getNearestOverflowAncestor","parentNode","getOverflowAncestors","scrollableAncestor","isBody","getInnerBoundingClientRect","top","left","getClientRectFromClippingAncestor","clippingAncestor","getClippingElementAncestors","cachedResult","el","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","containingBlock","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getOffsetParentFn","getDimensionsFn","autoUpdate","update","_ancestorScroll","ancestorResize","elementResize","animationFrame","ancestorScroll","ancestors","initialUpdate","frameId","prevRefRect","frameLoop","nextRefRect","_observer","mergedOptions","platformWithCache","computePosition$1","tooltip","reactive","useTooltip","content","show","position","markRaw","xVal","yVal","hide","TooltipDirective","binding","handleTooltip","tooltipText","_imports_0","GetCurrentUser","gql","GetUserCosmetics","UserPartialFragment","GetAppState","useContextMenu","open","ev","component","shallowRef","stop","setInteraction","getRandomInt","_Logger","__publicField","type","text","extraCSS","objects","Logger","log","EventAPIOpCode","EventAPI","transport","op","d","msg","rec","sub","broadcast","id","condition","found","jitter","eventAPI","handleMessage","evt","target","listeners","useWorker","postMessage","createWorker","messageListeners","onMessage","useID","makeUniqueId","_hoisted_1","_createElementVNode","_hoisted_3","_cache","useI18n","theme","computed","changeTheme","devstage","UserQuickSearch","defineAsyncComponent","__vitePreload","LoginButton","LocaleSelector","actorUser","storeToRefs","useActor","useRoute","toggleNav","navLinks","User","highlight","userSearch","modal","useModal","darken","out","onClose","currentModal","ok","ary","last","onEvent","m","f","emit","__emit","container","contextMenuListener","shouldClose","onMounted","onClickOutside","interact","GetEmoteSet","GetEmoteSetMin","GetEmoteSetForCard","useObjectSubscription","subs","watchObject","kind","object","ObjectKind","ApplyFields","fields","push","cf","nestedFields","arr","old_value","setupActor","refreshAuth","actor","user","fetch","identity","onResult","useQuery","res","usr","editableSetIDs","ed","es","uc","editableSets","allOK","set","loading","l","sets","notFoundMode","navOpen","noTransitions","getTheme","seasonalTheme","provideApolloClient","onClientRequiredData","showWAYTOODANK","themeChanges","timeouts","LocalStorageKeys","locale","classList","i18n","updateLocale","newLocale","prevLocale","__variableDynamicImportRuntimeHelper","messages","tooltipContainer","contextMenu","announcement","library","faArrowLeft","faBars","fabChrome","fabDiscord","fabEdge","fabFirefox","fabGithub","faBookSparkles","fabOpera","faBox","fabPaypal","faBrush","fabTwitch","fabTwitter","faBullseye","faBullseyePointer","fabYoutube","faCakeSlice","faCalendarAlt","faCheck","faCheckCircle","faCheckDouble","faChevronDown","faChevronLeft","faChevronRight","faChevronsDown","faChevronsRight","faCircle","faClock","faCodeBranch","faColumns","faCopy","faCreditCard","faCube","faDownload","faEllipsisH","faEllipsisV","faEnvelope","faExclamation","faExclamationTriangle","faExternalLinkAlt","faEye","faEyeSlash","faFaceSunglasses","faFilter","faFire","faFlag","faGavel","faGear","faGift","faGlobe","faHashtag","faHexagonPlus","faLanguage","faLayerGroup","faListCheck","faLock","faMegaphone","faMinus","faMoon","faObjectGroup","faObjectUngroup","faPalette","faPen","faPenField","faPlus","farCircleCheck","faRectangleWide","faReply","faRotateRight","faSave","faSeal","faSearch","faSlash","faSmile","faSquare","faSquareQuestion","faStar","faSunBright","faSync","faTag","faTicket","faTimer","faTimes","faTrash","faTreeChristmas","faTrophy","faUndo","faUnlock","faUser","faUserClock","faUserLock","faUserMinus","faUserPen","faUserPlus","faUsersCog","faUserSlash","faWaveformLines","faWrench","faBellConcierge","faMerge","faPersonRunningFast","explicitKeys","token","arr1","arr2","original","has","obj","property","eq","valA","valB","deep","explicit","empty","_i","escapeExp","string","regexForFormat","format","escaped","formats","tokens","regex","isRecord","o","isObject","isPojo","ctor","prot","extend","additional","extendArrays","ignoreUndefined","merged","isQuotedString","str","quoteType","rmEscapes","clean","lastChar","char","nodeProps","valid","modelValue","plugins","validProps","parseArgs","args","arg","depth","quote","except","toRemove","exps","keysToRemove","exp","only","include","camel","_s","g","kebab","trail","cap","shallowClone","returnObject","applyExplicit","clone","newObj","cloneAny","getAt","addr","segments","segment","undefine","init","slugify","createDispatcher","currentIndex","use","dispatchable","dispatch","payload","current","explicitPayload","createEmitter","receipts","buffer","emitter","wrapper","listener","receipt","eventListeners","child","events","emit$1","bubble","_context","on","_node","off","errorHandler","warningHandler","warning","warn","code","createMessage","conf","storeTraps","applyMessages","setMessage","removeMessage","filterMessages","reduceMessages","releaseBuffer","touchMessages","createStore","_buffer","_m","_r","_target","_t","prop","releaseMissed","messageStore","previous","buffered","_store","reducer","accumulator","_messageStore","clear","applied","address","missed","createMessages","sourceKey","make","errorSet","misses","createLedger","ledger","createCounter","add","merge","counterName","increment","parseCondition","counter","sum","count","initial","post","delta","parent","remove","registry","reflected","register","deregister","getNode$1","watchRegistry","configChange","usingFallback","createConfig$1","nodes","submitForm","formElement","clearState","resetTo","finalInit","defaultConfig","useIndex","valueRemoved","valueMoved","valueInserted","isList","invalidSetter","traps","trap","getContext","addChild","addProps","getAddress","getNode","clearErrors$1","calm","define","disturb","destroy","hydrate","getIndex","setIndex","eachChild","find","setParent","removeChild","getRoot","resetValue","resetConfig","setErrors$1","submit","getName","walkTree","createTraps","getter","setter","curryGetter","nameCount","idCount","createName","createValue","async","validateInput","commit","partial","from","insert","_value","childValue","definition","attrs","attr","camelName","parentContext","listIndex","_property","childIndex","preserve","stopIfFalse","createConfig","run","children","oldIndex","locator","first","pointer","select","selector","matches","action","argStr","searchTerm","searcher","bfs","tree","searchValue","searchGoal","search","stack","localValue","parentVal","rootValue","didSet","fragment","localErrors","childErrors","clearChildErrors","defaultProps","createProps","isEmitting","originalValue","receiver","findDefinition","createContext","nodeInit","createNode","ops","isDOM","isComponent","isConditional","isSugar","sugar","iterator","bind","compile","expr","provideTokens","requirements","operand","operatorRegistry","operatorSymbols","operatorChars","getOp","symbols","expression","candidates","symbol","getStep","direction","reversed","operators","getTail","tail","parseLogicals","step","parenthetical","parenQuote","startP","addTo","hasTail","lStep","rStep","evaluate","fnToken","userFuncReturn","tailCall","userFunc","subTokens","rootTokens","tokenSet","cleaned","compiled","reqs","provide","createClasses","propertyKey","sectionClassList","generateClassList","combinedClassList","finalClassList","currentClassList","$reset","setErrors","clearErrors","clearChildren","FORMKIT_VERSION","createLibraryPlugin","libraries","lib","normalizeOptions","option","optionValue","shouldSelect","valueA","valueB","outer","createSection","inner","label","suffix","help","fieldset","decorator","box","legend","boxOption","boxOptions","boxWrapper","boxHelp","boxLabel","buttonInput","buttonLabel","fileInput","fileItem","fileList","fileName","fileRemove","noFiles","formInput","actions","submitInput","textInput","selectInput$1","optionSlot","textareaInput","icon","sectionKey","rawIconProp","normalizeBoxes","toggleChecked$1","existingValue","isChecked$1","checkboxes","disables","localize","removeHover","preventStrayDrop","files","handleSubmit","submitEvent","retVal","autoDisable","form$1","ignore","initialValue","toggleChecked","isChecked","radios","isSelected","hasNoNullOption","optionA","deferChange","selectInput","applyPlaceholder","placeholder","select$1","isMultiple","hasMatchingValue","defaultIcon","isSchemaObject","schema","isSlotCondition","extendSchema","extension","section","extendable","extensions","createRoot","rootSection","$if","then","otherwise","conditionalNode","$extend","extendWith","$root","button","checkbox","form","group","hidden","radio","textarea","accepted","date_after","compare","timestamp","fieldValue","alpha","selectedSet","alpha_spaces","alphanumeric","date_before","between","to","hasConfirm","confirm","comparison","foreignValue","date_between","dateA","dateB","compareTo","date_format","email","ends_with","is","second","pattern","maximum","minimum","not","number","required","starts_with","protocols","revokedObservers","createObserver","dependencies","deps","addDependency","observeProps","observeLedger","observe","observed","revoke","block","old","newDeps","removeListeners","subArgs","subValue","applyListeners","toAdd","depNode","nodeReceipts","oldDeps","diffDeps","eventsToAdd","previousEvents","eventsToRemove","newEvents","isKilled","validatingMessage","createValidationPlugin","baseRules","availableRules","observedNode","state","validation","reboot","newValidation","newRules","parseRules","validate","validations","removeImmediately","currentRun","createFailedMessage","runRule","after","i18nArgs","createI18nArgs","customMessage","createCustomMessage","createMessageName","hintPattern","rulePattern","ruleExtractor","hintExtractor","debounceExtractor","hasDebounce","defaultHints","rules","extractRules","rule","hints","ruleName","parsedHints","parseHints","fnHints","parsedRule","parseRule","trimmed","map","hintGroups","hint","existingHints","sentence","items","conjunction","oxford","date","dateTime","order","ui$u","validation$u","en","createI18nPlugin","localeKey","parseLocale","lang","availableLocales","documentStyles","documentThemeLinkTag","themeDidLoad","themeHasLoaded","themeWasRequested","themeLoaded","isClient","iconRegistry","iconRequests","createThemePlugin","icons","iconLoaderUrl","iconLoader","loadTheme","themePlugin","createIconHandler","loadIconPropIcons","clickHandlerProp","handlerFunction","themeUrl","iconName","isDefault","loadedIcon","getIconFromStylesheet","iconValue","getRemoteIcon","finalIcon","loadStylesheetIcon","cssVarIcon","formkitVersion","fetchUrl","iconHandler","iconRegex","loadPropIcon","reloadIcon","svg","registered","operator","warnings","decodeErrors","decodeWarnings","memo","instanceKey","instanceScopes","raw","isClassProp","getRef","nodeRefs","get$1","path","getValue","subset","foundValue","currentValue","parseSchema","provider","createElements","alternate","parseConditionAttr","_default","parseAttrs","unparsedAttrs","bindExp","explicitAttrs","boundAttrs","setters","bound","isStr","parseNode","isComponent$1","childCondition","iterationData","produceChildren","slotData","currentKey","values","createSlots","slots","allSlots","slotName","slotFn","createElement","createNodes","createTextVNode","resolveComponent","repeatedNode","getValues","valueName","keyName","_v","instanceScope","isArray","previousIterationData","scopedData","els","providers","compiledFns","providerCallback","memoKey","render","compiledProviders","compiledProvider","useScope","defaultValue","scopedValue","prevKey","createRenderFn","instanceCreator","slot","hasSlot","FormKitSchema","defineComponent","instance","newSchema","oldSchema","nativeProps","parentSymbol","FormKit","_data","_event","useInput","generateSchema","schemaDefinition","createPlugin","optionsSymbol","configSymbol","_options","rootConfig","invalidGet","watchVerbose","watchers","applyWatch","paths","touch","dispatcher","getPaths","clearChildWatches","get","parents","useRaw","isReactive","toRaw","pseudoProps","classesToNodeProps","onlyListeners","isVModeled","createInitialProps","initialProps","propValues","propName","classesProps","lateBoundProps","lateProps","newProp","pseudoPropNames","names","passThrough","attributeWatchers","possibleProps","watchAttributes","attrProps","keys","inputTimeout","mutex","newValue","toRef","rawValue","vueBindings","isValid","hasErrors","hasTicked","availableMessages","validationVisibility","hasShownErrors","validationVisible","isComplete","hasValidation","visibleMessages","ui","cachedClasses","classes","className","rootClasses","globalConfigClasses","classesPropClasses","sectionPropClasses","describedBy","describers","triggerRef","isSettled","iconPattern","matchingProps","definedAs","updateState","locales","inputs$1","nodeOptions","defaultRules","inputs","iconPlugin","iconOrPromise","DEFAULT_PLUGIN_OPTIONS","isVue3","getHooks","vue3","triggerIsID","trigger","markWaveBoundary","createContainer","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","waveContainer","createWaveElement","size","waveElement","magnitude","x1","y1","x2","y2","deltaX","deltaY","getDistanceToFurthestCorner","topLeft","topRight","bottomLeft","bottomRight","getRelativePointer","WAVE_COUNT","incrementWaveCount","getWaveCount","setWaveCount","decrementWaveCount","deleteWaveCount","wave","computedStyles","waveEl","originalPositionValue","shouldDissolveWave","releaseWave","dissolveWave","cancelWave","optionMap","createDirective","globalUserOptions","globalOptions","handleTrigger","waveDirective","triggerDirective","VWave","vWave","vWaveTrigger","createApp","DefaultApolloClient","App","FontAwesomeIcon","createPinia","router","formkit","formkitConfig","RouterPrefetch"],"mappings":"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AA2B,IAAI,EAExDmkB,GAAU,IAAM,CACX0D,EAAiB,QACpB/J,EAAQ,UAAY+J,EAAiB,MACtC,CACA,EAGD,KAAM,CAAE,QAASC,CAAY,EAAI5I,GAAe,EAG1C,CAAE,OAAQ6I,GAAiBlC,GAA4B/G;AAAA;AAAA;AAAA;AAAA,CAI5D,6rCC5HDkJ,GAAQ,IACPC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAA,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAA,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,EACD,ECjNA,MAAMC,GAAe,CACjB,QACA,SACA,SACA,aACA,UACA,WACJ,EAMA,SAASC,IAAQ,CACb,OAAO,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,UAAU,EAAG,EAAE,CACrD,CAkBA,SAAS3mB,GAAO4mB,EAAMC,EAAM,CACxB,MAAMC,EAAWF,aAAgB,IAAMA,EAAO,IAAI,IAAIA,CAAI,EAC1D,OAAIC,GACAA,EAAK,QAASvX,GAASwX,EAAS,IAAIxX,CAAI,CAAC,EACtC,CAAC,GAAGwX,CAAQ,CACvB,CAOA,SAASC,EAAIC,EAAKC,EAAU,CACxB,OAAO,OAAO,UAAU,eAAe,KAAKD,EAAKC,CAAQ,CAC7D,CAUA,SAASC,GAAGC,EACZC,EACAC,EAAO,GAAMC,EAAW,CAAC,OAAO,EAAG,CAC/B,GAAIH,IAASC,EACT,MAAO,GACX,GAAI,OAAOA,GAAS,UAAY,OAAOD,GAAS,SAAU,CAStD,GARIA,aAAgB,KAEhBA,aAAgB,KAEhBA,aAAgB,MAEhBA,IAAS,MAAQC,IAAS,MAE1B,OAAO,KAAKD,CAAI,EAAE,SAAW,OAAO,KAAKC,CAAI,EAAE,OAC/C,MAAO,GACX,UAAWzqB,KAAK2qB,EACZ,IAAK3qB,KAAKwqB,GAAQxqB,KAAKyqB,IAASD,EAAKxqB,KAAOyqB,EAAKzqB,GAC7C,MAAO,GAEf,UAAW5C,KAAOotB,EAKd,GAJI,EAAEptB,KAAOqtB,IAETD,EAAKptB,KAASqtB,EAAKrtB,IAAQ,CAACstB,GAE5BA,GAAQ,CAACH,GAAGC,EAAKptB,GAAMqtB,EAAKrtB,GAAMstB,EAAMC,CAAQ,EAChD,MAAO,GAEf,MAAO,EACV,CACD,MAAO,EACX,CAMA,SAASC,GAAM3qB,EACb,CACE,MAAMmb,EAAO,OAAOnb,EACpB,GAAImb,IAAS,SACT,MAAO,GACX,GAAInb,IAAU,OACV,MAAO,GACX,GAAImb,IAAS,SACT,OAAOnb,IAAU,GAErB,GAAImb,IAAS,SAAU,CACnB,GAAInb,IAAU,KACV,MAAO,GACX,UAAW4qB,KAAM5qB,EACb,MAAO,GAGX,MAFI,EAAAA,aAAiB,QAEjBA,aAAiB,KAGxB,CACD,MAAO,EACX,CAMA,SAAS6qB,GAAUC,EAAQ,CAEvB,OAAOA,EAAO,QAAQ,sBAAuB,MAAM,CACvD,CAOA,SAASC,GAAeC,EAAQ,CAC5B,MAAMC,EAAU,IAAIJ,GAAUG,CAAM,KAC9BE,EAAU,CACZ,GAAI,kBACJ,EAAG,iBACH,GAAI,qBACJ,EAAG,sBACH,KAAM,SACN,GAAI,QACZ,EACUC,EAAS,OAAO,KAAKD,CAAO,EAClC,OAAO,IAAI,OAAOC,EAAO,OAAO,CAACC,EAAOJ,IAC7BI,EAAM,QAAQJ,EAAQE,EAAQF,EAAO,EAC7CC,CAAO,CAAC,CACf,CAqBA,SAASI,GAASC,EAAG,CACjB,OAAO,OAAO,UAAU,SAAS,KAAKA,CAAC,IAAM,iBACjD,CAOA,SAASC,GAASD,EAAG,CACjB,OAAOD,GAASC,CAAC,GAAK,MAAM,QAAQA,CAAC,CACzC,CAUA,SAASE,GAAOF,EAAG,CAGf,GAFID,GAASC,CAAC,IAAM,IAEhBA,EAAE,YAAcA,EAAE,WAAa,GAC/B,MAAO,GACX,MAAMG,EAAOH,EAAE,YACf,GAAIG,IAAS,OACT,MAAO,GACX,MAAMC,EAAOD,EAAK,UAGlB,MAFI,EAAAJ,GAASK,CAAI,IAAM,IAEnBA,EAAK,eAAe,eAAe,IAAM,GAIjD,CASA,SAASC,GAAOzB,EAAU0B,EAAYC,EAAe,GAAOC,EAAkB,GAAO,CACjF,GAAIF,IAAe,KACf,OAAO,KACX,MAAMG,EAAS,CAAA,EACf,GAAI,OAAOH,GAAe,SACtB,OAAOA,EACX,UAAWzuB,KAAO+sB,EACd,GAAIC,EAAIyB,EAAYzuB,CAAG,IAClByuB,EAAWzuB,KAAS,QAAa,CAAC2uB,GAAkB,CACrD,GAAID,GACA,MAAM,QAAQ3B,EAAS/sB,EAAI,GAC3B,MAAM,QAAQyuB,EAAWzuB,EAAI,EAAG,CAChC4uB,EAAO5uB,GAAO+sB,EAAS/sB,GAAK,OAAOyuB,EAAWzuB,EAAI,EAClD,QACH,CACD,GAAIyuB,EAAWzuB,KAAS,OACpB,SAEAquB,GAAOtB,EAAS/sB,EAAI,GAAKquB,GAAOI,EAAWzuB,EAAI,EAC/C4uB,EAAO5uB,GAAOwuB,GAAOzB,EAAS/sB,GAAMyuB,EAAWzuB,GAAM0uB,EAAcC,CAAe,EAGlFC,EAAO5uB,GAAOyuB,EAAWzuB,EAEhC,MAEG4uB,EAAO5uB,GAAO+sB,EAAS/sB,GAG/B,UAAWA,KAAOyuB,EACV,CAACzB,EAAI4B,EAAQ5uB,CAAG,GAAKyuB,EAAWzuB,KAAS,SACzC4uB,EAAO5uB,GAAOyuB,EAAWzuB,IAGjC,OAAO4uB,CACX,CAcA,SAASC,GAAeC,EAAK,CAIzB,GAFIA,EAAI,KAAO,KAAOA,EAAI,KAAO,KAE7BA,EAAI,KAAOA,EAAIA,EAAI,OAAS,GAC5B,MAAO,GACX,MAAMC,EAAYD,EAAI,GACtB,QAASlmB,EAAI,EAAGA,EAAIkmB,EAAI,OAAQlmB,IAC5B,GAAIkmB,EAAIlmB,KAAOmmB,IACVnmB,IAAM,GAAKkmB,EAAIlmB,EAAI,KAAO,OAC3BA,IAAMkmB,EAAI,OAAS,EACnB,MAAO,GAGf,MAAO,EACX,CAMA,SAASE,GAAUF,EAAK,CACpB,GAAI,CAACA,EAAI,OACL,MAAO,GACX,IAAIG,EAAQ,GACRC,EAAW,GACf,QAAStmB,EAAI,EAAGA,EAAIkmB,EAAI,OAAQlmB,IAAK,CACjC,MAAMumB,EAAOL,EAAI,OAAOlmB,CAAC,GACrBumB,IAAS,MAAQD,IAAa,QAC9BD,GAASE,GAEbD,EAAWC,CACd,CACD,OAAOF,CACX,CA+BA,SAASG,MAAavK,EAAM,CACxB,OAAOA,EAAK,OAAO,CAACwK,EAAOrwB,IAAU,CACjC,KAAM,CAAE,MAAA6D,EAAO,KAAA3C,EAAM,WAAAovB,EAAY,OAAA3d,EAAQ,QAAA4d,KAAYC,CAAY,EAAGxwB,EACpE,OAAO,OAAO,OAAOqwB,EAAOG,CAAU,CACzC,EAAE,CAAE,CAAA,CACT,CAMA,SAASC,GAAUX,EAAK,CACpB,MAAMY,EAAO,CAAA,EACb,IAAIC,EAAM,GACNC,EAAQ,EACRC,EAAQ,GACRX,EAAW,GACf,QAAStmB,EAAI,EAAGA,EAAIkmB,EAAI,OAAQlmB,IAAK,CACjC,MAAMumB,EAAOL,EAAI,OAAOlmB,CAAC,EACrBumB,IAASU,GAASX,IAAa,KAC/BW,EAAQ,IAEFV,IAAS,KAAOA,IAAS,MAAQ,CAACU,GAASX,IAAa,KAC9DW,EAAQV,EAEHA,IAAS,KAAO,CAACU,EACtBD,IAEKT,IAAS,KAAO,CAACU,GACtBD,IAEAT,IAAS,KAAO,CAACU,GAASD,IAAU,GACpCF,EAAK,KAAKC,CAAG,EACbA,EAAM,KAEDR,IAAS,KAAOU,KACrBF,GAAOR,GAEXD,EAAWC,CACd,CACD,OAAIQ,GACAD,EAAK,KAAKC,CAAG,EAEVD,CACX,CAQA,SAASI,GAAO7C,EAAK8C,EAAU,CAC3B,MAAMd,EAAQ,CAAA,EACRe,EAAOD,EAAS,OAAQztB,GAAMA,aAAa,MAAM,EACjD2tB,EAAe,IAAI,IAAIF,CAAQ,EACrC,UAAW/vB,KAAOitB,EACV,CAACgD,EAAa,IAAIjwB,CAAG,GAAK,CAACgwB,EAAK,KAAME,GAAQA,EAAI,KAAKlwB,CAAG,CAAC,IAC3DivB,EAAMjvB,GAAOitB,EAAIjtB,IAGzB,OAAOivB,CACX,CAUA,SAASkB,GAAKlD,EAAKmD,EAAS,CACxB,MAAMnB,EAAQ,CAAA,EACRe,EAAOI,EAAQ,OAAQ9tB,GAAMA,aAAa,MAAM,EACtD,OAAA8tB,EAAQ,QAASpwB,GAAQ,CACfA,aAAe,SACjBivB,EAAMjvB,GAAOitB,EAAIjtB,GAE7B,CAAK,EACD,OAAO,KAAKitB,CAAG,EAAE,QAASjtB,GAAQ,CAC1BgwB,EAAK,KAAME,GAAQA,EAAI,KAAKlwB,CAAG,CAAC,IAChCivB,EAAMjvB,GAAOitB,EAAIjtB,GAE7B,CAAK,EACMivB,CACX,CAOA,SAASoB,GAAMvB,EAAK,CAChB,OAAOA,EAAI,QAAQ,gBAAiB,CAACwB,EAAIC,IAAMA,EAAE,YAAW,CAAE,CAClE,CAOA,SAASC,GAAM1B,EAAK,CAChB,OAAOA,EACF,QAAQ,qBAAsB,CAACwB,EAAIG,EAAOC,IAAQD,EAAQ,IAAMC,EAAI,aAAa,EACjF,QAAQ,IAAK,GAAG,EAChB,aACT,CAOA,SAASC,GAAa1D,EAAKM,EAAWZ,GAAc,CAChD,GAAIM,IAAQ,MAAQ,OAAOA,GAAQ,SAAU,CACzC,IAAI2D,EAKJ,GAJI,MAAM,QAAQ3D,CAAG,EACjB2D,EAAe,CAAC,GAAG3D,CAAG,EACjBoB,GAAOpB,CAAG,IACf2D,EAAe,CAAE,GAAG3D,IACpB2D,EACA,OAAAC,GAAc5D,EAAK2D,EAAcrD,CAAQ,EAClCqD,CAEd,CACD,OAAO3D,CACX,CAOA,SAAS6D,GAAM7D,EAAKM,EAAWZ,GAAc,CACzC,GAAIM,IAAQ,MACRA,aAAe,QACfA,aAAe,MACfA,aAAe,KACfA,aAAe,KACd,OAAO,MAAS,YAAcA,aAAe,KAC9C,OAAOA,EACX,IAAI2D,EACA,MAAM,QAAQ3D,CAAG,EACjB2D,EAAe3D,EAAI,IAAKpqB,GAChB,OAAOA,GAAU,SACViuB,GAAMjuB,EAAO0qB,CAAQ,EACzB1qB,CACV,EAGD+tB,EAAe,OAAO,KAAK3D,CAAG,EAAE,OAAO,CAAC8D,EAAQ/wB,KAC5C+wB,EAAO/wB,GACH,OAAOitB,EAAIjtB,IAAS,SACd8wB,GAAM7D,EAAIjtB,GAAMutB,CAAQ,EACxBN,EAAIjtB,GACP+wB,GACR,CAAE,CAAA,EAET,UAAW/wB,KAAOutB,EACVvtB,KAAOitB,GACP,OAAO,eAAe2D,EAAc5wB,EAAK,CACrC,WAAY,GACZ,MAAOitB,EAAIjtB,EAC3B,CAAa,EAGT,OAAO4wB,CACX,CAOA,SAASI,GAAS/D,EAAK,CACnB,OAAO,OAAOA,GAAQ,SAChB6D,GAAM7D,CAAG,EACTA,CACV,CAQA,SAASgE,GAAMhE,EAAKiE,EAAM,CACtB,GAAI,CAACjE,GAAO,OAAOA,GAAQ,SACvB,OAAO,KACX,MAAMkE,EAAWD,EAAK,MAAM,GAAG,EAC/B,IAAI/C,EAAIlB,EACR,UAAW3tB,KAAK6xB,EAAU,CACtB,MAAMC,EAAUD,EAAS7xB,GAIzB,GAHI0tB,EAAImB,EAAGiD,CAAO,IACdjD,EAAIA,EAAEiD,IAEN,CAAC9xB,IAAM6xB,EAAS,OAAS,EACzB,OAAOhD,EACX,GAAI,CAACA,GAAK,OAAOA,GAAM,SACnB,OAAO,IACd,CACD,OAAO,IACX,CAUA,SAASkD,GAASxuB,EAAO,CACrB,OAAOA,IAAU,QAAaA,IAAU,SAAWA,IAAU,GACvD,GACA,MACV,CAQA,SAASyuB,GAAKrE,EAAK,CACf,OAAQ,OAAO,SAASA,CAAG,EAKrBA,EAJA,OAAO,eAAeA,EAAK,SAAU,CACnC,WAAY,GACZ,MAAO,EACnB,CAAS,CAET,CAKA,SAASsE,GAAQzC,EAAK,CAClB,OAAOA,EACF,UAAU,KAAK,EACf,QAAQ,mBAAoB,EAAE,EAC9B,YAAa,EACb,QAAQ,aAAc,GAAG,EACzB,KAAM,EACN,QAAQ,OAAQ,GAAG,CAC5B,CA+BA,SAAS+B,GAAc9D,EAAUE,EAAKM,EAAU,CAC5C,UAAWvtB,KAAOutB,EACVvtB,KAAO+sB,GACP,OAAO,eAAeE,EAAKjtB,EAAK,CAC5B,WAAY,GACZ,MAAO+sB,EAAS/sB,EAChC,CAAa,EAGT,OAAOitB,CACX,CChmBA,SAASuE,IAAmB,CACxB,MAAM5f,EAAa,CAAA,EACnB,IAAI6f,EAAe,EACnB,MAAMC,EAAOC,GAAiB/f,EAAW,KAAK+f,CAAY,EACpDC,EAAYC,GAAY,CAC1B,MAAMC,EAAUlgB,EAAW6f,GAC3B,OAAI,OAAOK,GAAY,WACZA,EAAQD,EAAUE,IACrBN,IACOG,EAASG,IAAoB,OAAYF,EAAUE,CAAe,EAC5E,GAELN,EAAe,EACRI,EACf,EACI,OAAAH,EAAI,SAAWE,EACfF,EAAI,QAAWC,GAAiB/f,EAAW,QAAQ+f,CAAY,EAC/DD,EAAI,OAAUC,GAAiB,CAC3B,MAAMtwB,EAAQuQ,EAAW,QAAQ+f,CAAY,EACzCtwB,EAAQ,IACRuQ,EAAW,OAAOvQ,EAAO,CAAC,CACtC,EACWqwB,CACX,CAOA,SAASM,IAAgB,CACrB,MAAMzS,EAAY,IAAI,IAChB0S,EAAW,IAAI,IACrB,IAAIC,EACJ,MAAMC,EAAU,CAACpd,EAAMnT,IAAU,CAC7B,GAAIswB,EAAQ,CACRA,EAAO,IAAItwB,EAAM,KAAM,CAACmT,EAAMnT,CAAK,CAAC,EACpC,MACH,CACG2d,EAAU,IAAI3d,EAAM,IAAI,GAExB2d,EAAU,IAAI3d,EAAM,IAAI,EAAE,QAASwwB,GAAY,EACvCxwB,EAAM,SAAWmT,GAAQqd,EAAQ,UAAU,SAAS,MAAM,IAC1DA,EAAQ,SAASxwB,CAAK,CAE1C,CAAa,EAEDA,EAAM,QACNmT,EAAK,OAAOnT,CAAK,CAE7B,EAOI,OAAAuwB,EAAQ,GAAK,CAACtqB,EAAWwqB,IAAa,CAClC,KAAM,CAACzwB,KAAU6E,CAAS,EAAIoB,EAAU,MAAM,GAAG,EAC3CyqB,EAAUD,EAAS,SAAWzF,GAAK,EACnCwF,EAAU,CACZ,UAAA3rB,EACA,MAAA7E,EACA,SAAAywB,EACA,QAAAC,CACZ,EAEQ,OAAA/S,EAAU,IAAI3d,CAAK,EACb2d,EAAU,IAAI3d,CAAK,EAAE,KAAKwwB,CAAO,EACjC7S,EAAU,IAAI3d,EAAO,CAACwwB,CAAO,CAAC,EACpCH,EAAS,IAAIK,CAAO,EACdL,EAAS,IAAIK,CAAO,EAAE,KAAK1wB,CAAK,EAChCqwB,EAAS,IAAIK,EAAS,CAAC1wB,CAAK,CAAC,EAE5B0wB,CACf,EAKIH,EAAQ,IAAOG,GAAY,CACvB,IAAI/mB,EACA0mB,EAAS,IAAIK,CAAO,KACnB/mB,EAAK0mB,EAAS,IAAIK,CAAO,KAAO,MAAQ/mB,IAAO,QAAkBA,EAAG,QAAS3J,GAAU,CACpF,MAAM2wB,EAAiBhT,EAAU,IAAI3d,CAAK,EACtC,MAAM,QAAQ2wB,CAAc,GAC5BhT,EAAU,IAAI3d,EAAO2wB,EAAe,OAAQH,GAAYA,EAAQ,UAAYE,CAAO,CAAC,CAExG,CAAa,EACDL,EAAS,OAAOK,CAAO,EAEnC,EAiBIH,EAAQ,MAASpd,GAAS,CACjBmd,IACDA,EAAS,IAAI,KACbnd,GACAA,EAAK,KAAMyd,GAAUA,EAAM,GAAG,MAAK,CAAE,CAEjD,EAKIL,EAAQ,KAAQpd,GAAS,CACrB,GAAI,CAACmd,EACD,OACJ,MAAMO,EAASP,EACfA,EAAS,OACTO,EAAO,QAAQ,CAAC,CAAC1d,EAAMnT,CAAK,IAAMuwB,EAAQpd,EAAMnT,CAAK,CAAC,EAClDmT,GACAA,EAAK,KAAMyd,GAAUA,EAAM,GAAG,KAAI,CAAE,CAEhD,EACWL,CACX,CASA,SAASO,GAAO3d,EAAM9V,EAASiB,EAAM2xB,EACrCc,EAAS,GAAM,CACX,OAAA1zB,EAAQ,GAAG8V,EAAM,CACb,QAAA8c,EACA,KAAA3xB,EACA,OAAAyyB,EACA,OAAQ5d,CAChB,CAAK,EACMA,CACX,CAOA,SAAS4d,GAAO5d,EAAM6d,EAAUhxB,EAAO,CACnC,OAAIuT,GAAOJ,EAAK,MAAM,GAClBA,EAAK,OAAO,GAAGA,EAAK,OAAQnT,CAAK,EAE9BmT,CACX,CAWA,SAAS8d,GAAGC,EAAO7zB,EAASiB,EAAMmyB,EAAU,CACxC,OAAOpzB,EAAQ,GAAG,GAAGiB,EAAMmyB,CAAQ,CACvC,CAQA,SAASU,GAAIhe,EAAM9V,EAASqzB,EAAS,CACjC,OAAArzB,EAAQ,GAAG,IAAIqzB,CAAO,EACfvd,CACX,CAMA,MAAMie,GAAexB,GAAgB,EAIrCwB,GAAa,CAACnmB,EAAOG,KACZH,EAAM,UACPA,EAAM,QAAU,OAAO,IAAIA,EAAM,MAAM,GACpCG,EAAKH,CAAK,EACpB,EAKD,MAAMomB,GAAiBzB,GAAgB,EACvCyB,GAAe,CAACC,EAASlmB,IAAS,CACzBkmB,EAAQ,UACTA,EAAQ,QAAU,OAAO,IAAIA,EAAQ,MAAM,GAC/C,MAAMrxB,EAASmL,EAAKkmB,CAAO,EAC3B,OAAI,SAAW,OAAO,QAAQ,MAAS,YACnC,QAAQ,KAAKrxB,EAAO,OAAO,EACxBA,CACX,CAAC,EAOD,SAASsxB,GAAKC,EAAM7gB,EAAO,GAAI,CAC3B0gB,GAAe,SAAS,CAAE,KAAAG,EAAM,KAAA7gB,CAAM,CAAA,CAC1C,CAOA,SAAS1F,EAAMumB,EAAM7gB,EAAO,GAAI,CAC5B,MAAM,MAAMygB,GAAa,SAAS,CAAE,KAAAI,EAAM,KAAA7gB,CAAM,CAAA,EAAE,OAAO,CAC7D,CAQA,SAAS8gB,GAAcC,EAAMve,EAAM,CAC/B,MAAMiN,EAAI,CACN,SAAU,GACV,IAAK4K,GAAO,EACZ,KAAM,CAAE,EACR,KAAM,QACN,QAAS,GACT,GAAG0G,CACX,EACI,OAAIve,GAAQiN,EAAE,OAASA,EAAE,KAAK,WAAa,KACvCA,EAAE,MAAQjN,EAAK,EAAEiN,CAAC,EAClBA,EAAE,KAAK,OAASjN,EAAK,OAAO,QAEzBiN,CACX,CAIA,MAAMuR,GAAa,CACf,MAAOC,GACP,IAAKC,GACL,OAAQC,GACR,OAAQC,GACR,OAAQC,GACR,QAASC,GACT,MAAOC,EACX,EAKA,SAASC,GAAYC,EAAU,GAAO,CAClC,MAAMhO,EAAW,CAAA,EACjB,IAAIjR,EACAmd,EAAS8B,EACT1mB,EAAK,CAAA,EACT,MAAM2mB,EAAK,IAAI,IACf,IAAIC,EACJ,MAAMnkB,EAAQ,IAAI,MAAMiW,EAAU,CAC9B,OAAO0J,EAAM,CACT,KAAM,CAACyE,EAASjH,CAAQ,EAAIwC,EAC5B,OAAIxC,IAAa,SACNgF,EACPhF,IAAa,KACN5f,EACP4f,IAAa,KACN+G,EACP/G,IAAa,KACNgH,EACPlH,EAAIuG,GAAYrG,CAAQ,EACjBqG,GAAWrG,GAAU,KAAK,KAAMlH,EAAUjW,EAAOgF,CAAI,EAEzD,QAAQ,IAAI,GAAG2a,CAAI,CAC7B,EACD,IAAI0E,EAAIC,EAAMxxB,EAAO,CACjB,OAAIwxB,IAAS,MACTtf,EAAOlS,EACHqxB,IAAO,OACPI,GAAcvf,EAAMhF,CAAK,EACtB,IAEFskB,IAAS,MACd/mB,EAAKzK,EACE,IAEFwxB,IAAS,UACdnC,EAASrvB,EACF,IAEFwxB,IAAS,MACdH,EAAKrxB,EACE,KAEXgK,EAAM,IAAKkI,CAAI,EACR,GACV,CACT,CAAK,EACD,OAAOhF,CACX,CASA,SAAS0jB,GAAWc,EAAcxkB,EAAOgF,EAAM7T,EAAS,CACpD,GAAI6O,EAAM,OACN,OAAAA,EAAM,GAAG,KAAK,CAAC,CAAC7O,CAAO,CAAC,CAAC,EAClB6O,EAEX,GAAIwkB,EAAarzB,EAAQ,OAASA,EAAS,CACvC,GAAI,OAAOA,EAAQ,OAAU,UAAYA,EAAQ,KAAK,WAAa,GAAO,CAEtE,MAAMszB,EAAWtzB,EAAQ,MACzBA,EAAQ,MAAQ6T,EAAK,EAAE7T,CAAO,EAC1BA,EAAQ,QAAUszB,IAClBtzB,EAAQ,KAAK,OAAS6T,EAAK,MAAM,OAExC,CACD,MAAMrR,EAAI,WAAWspB,EAAIuH,EAAcrzB,EAAQ,GAAG,EAAI,UAAY,UAClEqzB,EAAarzB,EAAQ,KAAO,OAAO,OAAO6T,EAAK,KAAK,QAAQ,SAAS7T,CAAO,CAAC,EAC7E6T,EAAK,KAAKrR,EAAGxC,CAAO,CACvB,CACD,OAAO6O,CACX,CAKA,SAAS+jB,GAAcS,EAAcxkB,EAAO,CACxC,UAAW/P,KAAOu0B,EAAc,CAC5B,MAAMrzB,EAAU,CAAE,GAAGqzB,EAAav0B,EAAI,EACtC+P,EAAM,IAAI7O,CAAO,CACpB,CACL,CASA,SAASwyB,GAAca,EAAcxkB,EAAOgF,EAAM/U,EAAK,CACnD,GAAIgtB,EAAIuH,EAAcv0B,CAAG,EAAG,CACxB,MAAMkB,EAAUqzB,EAAav0B,GAC7B,OAAOu0B,EAAav0B,GACpB+U,EAAK,KAAK,kBAAmB7T,CAAO,CACvC,CACD,OAAI6O,EAAM,SAAW,KACjBA,EAAM,GAAKA,EAAM,GAAG,OAAQ0kB,IACxBA,EAAS,GAAKA,EAAS,GAAG,OAAQzS,GAAMA,EAAE,MAAQhiB,CAAG,EAC9Cy0B,EAAS,IAAMA,EAAS,GAAG,OACrC,GAEE1kB,CACX,CASA,SAAS4jB,GAAeY,EAAcxkB,EAAOgF,EAAMnU,EAAUod,EAAM,CAC/D,UAAWhe,KAAOu0B,EAAc,CAC5B,MAAMrzB,EAAUqzB,EAAav0B,IACxB,CAACge,GAAQ9c,EAAQ,OAAS8c,IAAS,CAACpd,EAASM,CAAO,GACrDwyB,GAAca,EAAcxkB,EAAOgF,EAAM/U,CAAG,CAEnD,CACL,CAUA,SAAS4zB,GAAeW,EAAcG,EAAQ5B,EAAO6B,EAASC,EAAa,CACvE,UAAW50B,KAAOu0B,EAAc,CAC5B,MAAMrzB,EAAUqzB,EAAav0B,GAC7B40B,EAAcD,EAAQC,EAAa1zB,CAAO,CAC7C,CACD,OAAO0zB,CACX,CAQA,SAASpB,GAAcqB,EAAe9kB,EAAOgF,EAAMiR,EAAU8O,EAAO,CAChE,GAAI,MAAM,QAAQ9O,CAAQ,EAAG,CACzB,GAAIjW,EAAM,OAAQ,CACdA,EAAM,GAAG,KAAK,CAACiW,EAAU8O,CAAK,CAAC,EAC/B,MACH,CAED,MAAMC,EAAU,IAAI,IAAI/O,EAAS,IAAK9kB,IAClC6O,EAAM,IAAI7O,CAAO,EACVA,EAAQ,IAClB,CAAC,EAEE,OAAO4zB,GAAU,SACjB/kB,EAAM,OAAQ7O,GAAYA,EAAQ,OAAS4zB,GAASC,EAAQ,IAAI7zB,EAAQ,GAAG,CAAC,EAEvE,OAAO4zB,GAAU,YACtB/kB,EAAM,OAAQ7O,GAAY,CAAC4zB,EAAM5zB,CAAO,GAAK6zB,EAAQ,IAAI7zB,EAAQ,GAAG,CAAC,CAE5E,KAEG,WAAW8zB,KAAWhP,EAAU,CAC5B,MAAMwM,EAAQzd,EAAK,GAAGigB,CAAO,EACzBxC,EACAA,EAAM,MAAM,MAAMxM,EAASgP,GAAUF,CAAK,EAG1CG,GAAOlgB,EAAMhF,EAAOilB,EAAShP,EAASgP,GAAUF,CAAK,CAE5D,CAET,CAOA,SAASI,GAAengB,KAAStI,EAAQ,CACrC,MAAM0oB,EAAY,GAAGpgB,EAAK,WACpBqgB,EAAQvoB,GAAUwmB,GAAc,CAClC,IAAK9B,GAAQ1kB,CAAK,EAClB,KAAM,QACN,MAAOA,EACP,KAAM,CAAE,OAAQsoB,EAAW,UAAW,EAAM,CACpD,CAAK,EACD,OAAO1oB,EACF,OAAQuV,GAAM,CAAC,CAACA,CAAC,EACjB,IAAKqT,GAAa,CAGnB,GAFI,OAAOA,GAAa,WACpBA,EAAW,CAACA,CAAQ,GACpB,MAAM,QAAQA,CAAQ,EACtB,OAAOA,EAAS,IAAKxoB,GAAUuoB,EAAKvoB,CAAK,CAAC,EAEzC,CACD,MAAMJ,EAAS,CAAA,EACf,UAAWzM,KAAOq1B,EACV,MAAM,QAAQA,EAASr1B,EAAI,EAC3ByM,EAAOzM,GAAOq1B,EAASr1B,GAAK,IAAK6M,GAAUuoB,EAAKvoB,CAAK,CAAC,EAGtDJ,EAAOzM,GAAO,CAACo1B,EAAKC,EAASr1B,EAAI,CAAC,EAG1C,OAAOyM,CACV,CACT,CAAK,CACL,CAQA,SAASwoB,GAAOlgB,EAAMhF,EAAOilB,EAAShP,EAAU8O,EAAO,CACnD,IAAIvpB,EACJ,MAAM+pB,EAASvlB,EAAM,GAChBulB,EAAO,IAAIN,CAAO,GACnBM,EAAO,IAAIN,EAAS,CAAA,CAAE,EAErBjlB,EAAM,KACPA,EAAM,GAAKukB,GAAcvf,EAAMhF,CAAK,IACvCxE,EAAK+pB,EAAO,IAAIN,CAAO,KAAO,MAAQzpB,IAAO,QAAkBA,EAAG,KAAK,CAACya,EAAU8O,CAAK,CAAC,CAC7F,CAQA,SAASR,GAAcvf,EAAMhF,EAAO,CAChC,OAAOgF,EAAK,GAAG,aAAc,CAAC,CAAE,QAASyd,KAAY,CACjDziB,EAAM,GAAG,QAAQ,CAACulB,EAAQN,IAAY,CAC9BjgB,EAAK,GAAGigB,CAAO,IAAMxC,IACrB8C,EAAO,QAAQ,CAAC,CAACtP,EAAU8O,CAAK,IAAM,CAClCtC,EAAM,MAAM,MAAMxM,EAAU8O,CAAK,CACrD,CAAiB,EACD/kB,EAAM,GAAG,OAAOilB,CAAO,EAEvC,CAAS,EAEGjlB,EAAM,GAAG,OAAS,GAAKA,EAAM,KAC7BgF,EAAK,IAAIhF,EAAM,EAAE,EACjBA,EAAM,GAAK,OAEvB,CAAK,CACL,CAOA,SAAS8jB,GAAcgB,EAAe9kB,EAAO,CACzCA,EAAM,OAAS,GACfA,EAAM,GAAG,QAAQ,CAAC,CAACiW,EAAU8O,CAAK,IAAM/kB,EAAM,MAAMiW,EAAU8O,CAAK,CAAC,EACpE/kB,EAAM,GAAK,EACf,CAMA,SAASwlB,IAAe,CACpB,MAAMC,EAAS,CAAA,EACf,IAAIlzB,EACJ,MAAO,CACH,MAAO,IAAIotB,IAAS+F,GAAcnzB,EAAGkzB,EAAQ,GAAG9F,CAAI,EACpD,KAAK3a,EAAM,CACPzS,EAAIyS,EACJA,EAAK,GAAG,qBAAsB2gB,GAAIF,EAAQ,CAAC,CAAC,EAC5CzgB,EAAK,GAAG,uBAAwB2gB,GAAIF,EAAQ,EAAE,CAAC,CAClD,EACD,MAAQhD,GAAUmD,GAAMrzB,EAAGkzB,EAAQhD,CAAK,EACxC,QAAQoD,EAAa,CACjB,OAAO5I,EAAIwI,EAAQI,CAAW,EACxBJ,EAAOI,GAAa,QACpB,QAAQ,QAAO,CACxB,EACD,QAAUpD,GAAUmD,GAAMrzB,EAAGkzB,EAAQhD,EAAO,EAAI,EAChD,MAAMoD,EAAa,CACf,OAAO5I,EAAIwI,EAAQI,CAAW,EAAIJ,EAAOI,GAAa,MAAQ,CACjE,CACT,CACA,CASA,SAASH,GAAc1gB,EAAMygB,EAAQI,EAAa5W,EAAW6W,EAAY,EAAG,CAExE,GADA7W,EAAY8W,GAAe9W,GAAa4W,CAAW,EAC/C,CAAC5I,EAAIwI,EAAQI,CAAW,EAAG,CAC3B,MAAMG,EAAU,CACZ,UAAA/W,EACA,MAAO,EACP,KAAM4W,EACN,KAAA7gB,EACA,QAAS,QAAQ,QAAS,EAC1B,QAAS,IAAM,CAAG,CAC9B,EACQygB,EAAOI,GAAeG,EACtBF,EAAY9gB,EAAK,MAAM,OAAO,CAACihB,EAAKhU,IAAMgU,EAAMD,EAAQ,UAAU/T,CAAC,EAAI,EAAG6T,CAAS,EACnF9gB,EAAK,KAAMyd,GAAU,CACjBA,EAAM,OAAO,MAAMuD,EAAQ,KAAMA,EAAQ,SAAS,EAClDF,GAAarD,EAAM,OAAO,MAAMuD,EAAQ,IAAI,CACxD,CAAS,CACJ,CACD,OAAOE,GAAMT,EAAOI,GAAcC,CAAS,EAAE,OACjD,CAMA,SAASC,GAAe9W,EAAW,CAC/B,OAAI,OAAOA,GAAc,WACdA,EAEHgD,GAAMA,EAAE,OAAShD,CAC7B,CAOA,SAASiX,GAAMF,EAASF,EAAW,CAC/B,MAAMK,EAAUH,EAAQ,MAClBI,EAAOJ,EAAQ,MAAQF,EAC7B,OAAAE,EAAQ,MAAQI,EACZD,IAAY,GAAKC,IAAS,GAC1BJ,EAAQ,KAAK,KAAK,aAAaA,EAAQ,OAAQA,EAAQ,MAAO,EAAK,EACnEA,EAAQ,QAAU,IAAI,QAAS1sB,GAAO0sB,EAAQ,QAAU1sB,CAAE,GAErD6sB,IAAY,GAAKC,IAAS,IAC/BJ,EAAQ,KAAK,KAAK,WAAWA,EAAQ,OAAQA,EAAQ,MAAO,EAAK,EACjEA,EAAQ,QAAO,GAEnBA,EAAQ,KAAK,KAAK,SAASA,EAAQ,OAAQA,EAAQ,MAAO,EAAK,EACxDA,CACX,CAOA,SAASL,GAAIF,EAAQY,EAAO,CACxB,OAAQ1yB,GAAM,CACV,UAAWxD,KAAQs1B,EAAQ,CACvB,MAAMO,EAAUP,EAAOt1B,GACnB61B,EAAQ,UAAUryB,EAAE,OAAO,GAC3BuyB,GAAMF,EAASK,CAAK,CAE3B,CACT,CACA,CAUA,SAAST,GAAMU,EAAQb,EAAQhD,EAAO8D,EAAS,GAAO,CAClD,UAAWt2B,KAAOw1B,EAAQ,CACtB,MAAMxW,EAAYwW,EAAOx1B,GAAK,UACzBs2B,GACD9D,EAAM,OAAO,MAAMxyB,EAAKgf,CAAS,EACrC,MAAM6W,EAAYrD,EAAM,OAAO,MAAMxyB,CAAG,GAAKs2B,EAAS,GAAK,GAC3D,GAAI,EAACD,EAEL,GACIA,EAAO,OAAO,MAAMr2B,EAAKgf,EAAW6W,CAAS,EAC7CQ,EAASA,EAAO,aACXA,EACZ,CACL,CAKA,MAAME,GAAW,IAAI,IACfC,GAAY,IAAI,IAIhBtU,GAAO8P,GAAa,EAIpBC,GAAW,CAAA,EASjB,SAASwE,GAAS1hB,EAAM,CAChBA,EAAK,MAAM,KACXwhB,GAAS,IAAIxhB,EAAK,MAAM,GAAIA,CAAI,EAChCyhB,GAAU,IAAIzhB,EAAMA,EAAK,MAAM,EAAE,EACjCmN,GAAKnN,EAAM,CACP,QAASA,EACT,KAAMA,EAAK,MAAM,GACjB,OAAQ,GACR,OAAQA,CACpB,CAAS,EAET,CAMA,SAAS2hB,GAAW3hB,EAAM,CACtB,GAAIyhB,GAAU,IAAIzhB,CAAI,EAAG,CACrB,MAAMgK,EAAKyX,GAAU,IAAIzhB,CAAI,EAC7ByhB,GAAU,OAAOzhB,CAAI,EACrBwhB,GAAS,OAAOxX,CAAE,EAClBmD,GAAKnN,EAAM,CACP,QAAS,KACT,KAAMgK,EACN,OAAQ,GACR,OAAQhK,CACpB,CAAS,CACJ,CACL,CAMA,SAAS4hB,GAAU5X,EAAI,CACnB,OAAOwX,GAAS,IAAIxX,CAAE,CAC1B,CAiBA,SAAS6X,GAAc7X,EAAIne,EAAU,CAEjCqxB,GAAS,KAAK/P,GAAK,GAAGnD,EAAIne,CAAQ,CAAC,CACvC,CASA,SAASi2B,GAAa9hB,EAAMsf,EAAMxxB,EAAO,CAErC,IAAIi0B,EAAgB,GACpB,OAAEzC,KAAQtf,EAAK,OAAO,GAEf+hB,EAAgB,GADjB/hB,EAAK,KAAK,UAAUsf,IAAQxxB,EAAO,EAAK,EAExCwxB,KAAQtf,EAAK,QACfA,EAAK,KAAK,OAAQ,CAAE,KAAAsf,EAAM,MAAAxxB,CAAO,CAAA,EACjCkS,EAAK,KAAK,QAAQsf,IAAQxxB,CAAK,GAE5Bi0B,CACX,CASA,SAASC,GAAeh2B,EAAU,GAAI,CAClC,MAAMi2B,EAAQ,IAAI,IACZ1X,EAAS,CACX,GAAGve,EAEC,KAAOgU,GAASiiB,EAAM,IAAIjiB,CAAI,EAC9B,IAAMA,GAASiiB,EAAM,OAAOjiB,CAAI,CAE5C,EASI,OARmB,IAAI,MAAMuK,EAAQ,CACjC,IAAItb,EAAGqwB,EAAMxxB,EAAOwG,EAAG,CACnB,OAAI,OAAOgrB,GAAS,UAChB2C,EAAM,QAASjiB,GAAS8hB,GAAa9hB,EAAMsf,EAAMxxB,CAAK,CAAC,EAEpD,QAAQ,IAAImB,EAAGqwB,EAAMxxB,EAAOwG,CAAC,CACvC,CACT,CAAK,CAEL,CAOA,SAAS4tB,GAAWlY,EAAI,CACpB,MAAMmY,EAAc,SAAS,eAAenY,CAAE,EAC9C,GAAImY,aAAuB,gBAAiB,CACxC,MAAMt1B,EAAQ,IAAI,MAAM,SAAU,CAAE,WAAY,GAAM,QAAS,EAAI,CAAE,EACrEs1B,EAAY,cAAct1B,CAAK,EAC/B,MACH,CACDuxB,GAAK,IAAKpU,CAAE,CAChB,CAKA,SAASoY,GAAWpiB,EAAM,CACtB,MAAM+f,EAAS,GAAM,CACjB,UAAW90B,KAAO,EAAE,MAAO,CACvB,MAAMkB,EAAU,EAAE,MAAMlB,GACpBkB,EAAQ,OAAS,SAChBA,EAAQ,OAAS,MAAQlB,IAAQ,aAClC,EAAE,MAAM,OAAOA,CAAG,EAEbkB,EAAQ,OAAS,SACtB,EAAE,MAAM,IAAI,CAAE,GAAGA,EAAS,MAAO,EAAK,CAAE,CAE/C,CACT,EACI4zB,EAAM/f,CAAI,EACVA,EAAK,KAAK+f,CAAK,CACnB,CAQA,SAAStiB,GAAMuM,EAAIqY,EAAS,CACxB,MAAMriB,EAAO,OAAOgK,GAAO,SAAW4X,GAAU5X,CAAE,EAAIA,EACtD,GAAIhK,EAAM,CACN,MAAMmhB,EAAW5zB,GAAM0uB,GAAS1uB,EAAE,MAAM,OAAO,IAC1CA,EAAE,OAAS,QAAU,GAAKA,EAAE,OAAS,OAAS,GAAK,QAExDyS,EAAK,GAAG,MAAMA,CAAI,EAElBA,EAAK,MAAMic,GAASoG,CAAO,GAAKlB,EAAQnhB,CAAI,EAAG,EAAK,EAEpDA,EAAK,KAAMyd,GAAUA,EAAM,MAAM0D,EAAQ1D,CAAK,EAAG,EAAK,CAAC,EAGvD,MAAM6E,EAAYnB,EAAQnhB,CAAI,EAC9B,OAAAA,EAAK,MAAM,OAAOsiB,GAAc,SAC1BrG,GAASoG,CAAO,GAAK9F,GAAK+F,CAAS,EACnCA,EAAW,EAAK,EAEtBtiB,EAAK,GAAG,KAAKA,CAAI,EACjBoiB,GAAWpiB,CAAI,EACfA,EAAK,KAAK,QAASA,CAAI,EAChBA,CACV,CACDoe,GAAK,IAAKpU,CAAE,CAEhB,CAKA,MAAMuY,GAAgB,CAClB,UAAW,IACX,MAAO,EACP,OAAQ,KACR,YAAct3B,IAAS,CAAE,CAAC,WAAWwwB,GAAMxwB,CAAG,KAAM,IACxD,EAMMu3B,GAAW,OAAO,OAAO,EAMzBC,GAAe,OAAO,SAAS,EAM/BC,GAAa,OAAO,OAAO,EAM3BC,GAAgB,OAAO,UAAU,EAQvC,SAASC,GAAOhI,EAAK,CACjB,OAAOA,EAAI,OAAS,QAAU,MAAM,QAAQA,EAAI,MAAM,CAC1D,CAMA,SAASxa,GAAOJ,EAAM,CAClB,OAAOA,GAAQ,OAAOA,GAAS,UAAYA,EAAK,aAAe,EACnE,CAIA,MAAM6iB,GAAgB,CAAC7iB,EAAM6d,EAAU1F,IAAa,CAChDrgB,EAAM,IAAK,CAACkI,EAAMmY,CAAQ,CAAC,CAC/B,EACM2K,GAAQ,CACV,GAAIC,EAAKC,GAAYH,GAAe,EAAK,EACzC,IAAKE,EAAKE,EAAQ,EAClB,SAAUF,EAAKG,EAAQ,EACvB,QAASH,EAAKI,GAAYN,GAAe,EAAK,EAC9C,GAAIE,EAAKK,EAAO,EAChB,OAAQL,EAAKnF,EAAM,EACnB,YAAamF,EAAKM,EAAa,EAC/B,KAAMN,EAAKO,EAAI,EACf,OAAQP,EAAK,EAAK,EAClB,OAAQA,EAAKQ,EAAM,EACnB,QAASR,EAAKS,EAAO,EACrB,QAAST,EAAKU,EAAO,EACrB,QAASV,EAAKW,EAAO,EACrB,MAAOX,EAAKY,GAAUC,GAAU,EAAK,EACrC,MAAOb,EAAKjzB,EAAK,EACjB,KAAMizB,EAAKc,EAAS,EACpB,KAAMd,EAAKpF,EAAM,EACjB,KAAMoF,EAAKe,EAAI,EACf,GAAIf,EAAKjF,EAAE,EACX,IAAKiF,EAAK/E,EAAG,EACb,OAAQ+E,EAAK,GAAOgB,EAAS,EAC7B,QAAShB,EAAK,EAAK,EACnB,OAAQA,EAAKiB,EAAW,EACxB,KAAMjB,EAAKkB,GAASpB,GAAe,EAAK,EACxC,MAAOE,EAAKmB,EAAU,EACtB,YAAanB,EAAKoB,EAAW,EAC7B,UAAWpB,EAAKqB,EAAW,EAC3B,OAAQrB,EAAKsB,EAAM,EACnB,EAAGtB,EAAK7Z,EAAI,EACZ,IAAK6Z,EAAKpG,EAAG,EACb,KAAMoG,EAAKuB,GAAS,GAAO,EAAK,EAChC,KAAMvB,EAAKwB,EAAQ,CACvB,EAKA,SAASC,IAAc,CACnB,OAAO,IAAI,IAAI,OAAO,QAAQ1B,EAAK,CAAC,CACxC,CAQA,SAASC,EAAK0B,EAAQC,EAAQC,EAAc,GAAM,CAC9C,MAAO,CACH,IAAKF,EACC,CAACzkB,EAAM9V,IAAYy6B,EACf,IAAIhK,IAAS8J,EAAOzkB,EAAM9V,EAAS,GAAGywB,CAAI,EAC1C8J,EAAOzkB,EAAM9V,CAAO,EACxB,GACN,IAAKw6B,IAAW,OAAYA,EAAS7B,GAAc,KAAK,IAAI,CACpE,CACA,CAIA,SAAS91B,IAAc,CACnB,MAAMhC,EAAQ,IAAI,IAClB,OAAO,IAAI,MAAMA,EAAO,CACpB,IAAIsQ,EAAG8c,EAAU,CACb,OAAKptB,EAAM,IAAIotB,CAAQ,GACnBptB,EAAM,IAAIotB,EAAUsE,GAAkB,CAAA,EAEnC1xB,EAAM,IAAIotB,CAAQ,CAC5B,CACT,CAAK,CACL,CAKA,IAAIyM,GAAY,EAIZC,GAAU,EA0Bd,SAASC,GAAW94B,EAAS,CACzB,IAAIwK,EAAI+B,EACR,QAAM/B,EAAKxK,EAAQ,UAAY,MAAQwK,IAAO,OAAS,OAASA,EAAG,QAAU,OAClEgsB,GACJx2B,EAAQ,MAAQ,KAAKuM,EAAKvM,EAAQ,SAAW,MAAQuM,IAAO,OAAS,OAASA,EAAG,OAAS,WAAW,EAAEqsB,IAClH,CASA,SAASG,GAAY/4B,EAAS,CAC1B,OAAIA,EAAQ,OAAS,QACVuwB,GAAKvwB,EAAQ,OAChB,OAAOA,EAAQ,OAAU,UACzB,CAAC,MAAM,QAAQA,EAAQ,KAAK,EAC1BA,EAAQ,MACR,CAAA,CAAE,EAEHA,EAAQ,OAAS,OACfuwB,GAAK,MAAM,QAAQvwB,EAAQ,KAAK,EAAIA,EAAQ,MAAQ,CAAA,CAAE,EAE1DA,EAAQ,KACnB,CAQA,SAAS8D,GAAMkQ,EAAM9V,EAAS4D,EAAOk3B,EAAQ,GAAM,CAC/C,OAAA96B,EAAQ,OAAS+6B,GAAcjlB,EAAMA,EAAK,KAAK,MAAM,SAASlS,CAAK,CAAC,EACpEkS,EAAK,KAAK,QAAS9V,EAAQ,MAAM,EAC7BA,EAAQ,WACR8V,EAAK,QAAO,EACZglB,GACI96B,EAAQ,MACR,aAAaA,EAAQ,IAAI,EAC7BA,EAAQ,KAAO,WAAWg7B,GAAQllB,EAAK,MAAM,MAAOA,EAAM9V,CAAO,GAGjEg7B,GAAOllB,EAAM9V,CAAO,EAEjBA,EAAQ,OACnB,CAMA,SAAS+6B,GAAcjlB,EAAMlS,EAAO,CAChC,OAAQkS,EAAK,KAAI,CAEb,IAAK,QACD,MACJ,IAAK,SACG,CAAClS,GAAS,OAAOA,GAAU,WAC3BgK,EAAM,IAAK,CAACkI,EAAMlS,CAAK,CAAC,EAC5B,MACJ,IAAK,OACI,MAAM,QAAQA,CAAK,GACpBgK,EAAM,IAAK,CAACkI,EAAMlS,CAAK,CAAC,EAC5B,KACP,CACD,OAAOA,CACX,CAQA,SAASo3B,GAAOllB,EAAM9V,EAASo5B,EAAO,GAAMI,EAAU,GAAM,CACxDx5B,EAAQ,OAASA,EAAQ,MAAQ8V,EAAK,KAAK,OAAO,SAAS9V,EAAQ,MAAM,EACrE8V,EAAK,OAAS,SAAW0jB,GACzB1jB,EAAK,QAAO,EAChBA,EAAK,KAAK,SAAU9V,EAAQ,KAAK,EAC7Bo5B,GACAtjB,EAAK,KAAI,CACjB,CASA,SAASmlB,GAAQj7B,EAAS,CAAE,KAAAiB,EAAM,MAAA2C,EAAO,KAAAs3B,CAAI,EAAI,CAC7C,GAAI,QAAO,SAASl7B,EAAQ,MAAM,EAElC,IAAI04B,GAAO14B,CAAO,EAAG,CACjB,MAAMm7B,EAASv3B,IAAU20B,GACnB,CAAE,EACF30B,IAAU40B,IAAc,OAAO0C,GAAS,SACpCl7B,EAAQ,OAAO,OAAOk7B,EAAM,CAAC,EAC7B,CAACt3B,CAAK,EAChB5D,EAAQ,OAAO,OAAOiB,EAAM2C,IAAU40B,IAAc0C,IAASzC,GAAgB,EAAI,EAAG,GAAG0C,CAAM,EAC7F,MACH,CAGGv3B,IAAU20B,GACVv4B,EAAQ,OAAOiB,GAAQ2C,EAGvB,OAAO5D,EAAQ,OAAOiB,GAE9B,CAMA,SAASu4B,GAAQ1jB,EAAM9V,EAAS,CAC5B,MAAMo7B,EAASp7B,EAAQ,OACvB,OAAAA,EAAQ,SAAS,QAASuzB,GAAU,CAChC,GAAI,OAAO6H,GAAW,SAGtB,GAAI7H,EAAM,QAAQ6H,EAAQ,CAItB,MAAMC,EAAa9H,EAAM,OAAS,SAC7B6H,EAAO7H,EAAM,OAAS,OAAO6H,EAAO7H,EAAM,OAAU,SACnDlB,GAAK+I,EAAO7H,EAAM,KAAK,EACvB6H,EAAO7H,EAAM,MACnBA,EAAM,MAAM8H,EAAY,EAAK,CAChC,MAEOvlB,EAAK,OAAS,QAAU,OAAOyd,EAAM,MAAS,WAK9C0H,GAAQj7B,EAAS,CAAE,KAAMuzB,EAAM,KAAM,MAAOA,EAAM,KAAK,CAAE,EAExD6H,EAAO,SAGJ7H,EAAM,OAAS,QACfA,EAAM,MAAM,GAAI,EAAK,EAChBA,EAAM,OAAS,OACpBA,EAAM,MAAM,GAAI,EAAK,EAErBA,EAAM,MAAM,OAAW,EAAK,EAGhD,CAAK,EACMzd,CACX,CAOA,SAASwjB,GAAQxjB,EAAM9V,EAAS,CAC5B,IAAIsM,EACJ,OAAItM,EAAQ,IAAM,IACdA,EAAQ,UAAY,GACpB8V,EAAK,KAAK,UAAW,GAAO,EAAK,EACjC9V,EAAQ,QAAU,IAAI,QAASvB,GAAY,CACvCuB,EAAQ,SAAWvB,CAC/B,CAAS,EACGqX,EAAK,UACJxJ,EAAKwJ,EAAK,UAAY,MAAQxJ,IAAO,QAAkBA,EAAG,QAAO,IAE1EtM,EAAQ,KACD8V,CACX,CAMA,SAASsjB,GAAKtjB,EAAM9V,EAAS4D,EAAO,CAChC,IAAI0I,EACJ,GAAI1I,IAAU,QAAakS,EAAK,OAAS,QACrC,OAAAmlB,GAAQj7B,EAAS4D,CAAK,EAEfo3B,GAAOllB,EAAM9V,EAAS,GAAM,EAAK,EAExCA,EAAQ,GAAK,GACbA,EAAQ,KACRA,EAAQ,KAAO,IACfA,EAAQ,UAAY,GACpB8V,EAAK,KAAK,UAAW,GAAM,EAAK,EAC5BA,EAAK,UACJxJ,EAAKwJ,EAAK,UAAY,MAAQxJ,IAAO,QAAkBA,EAAG,KAAK,CAAE,KAAMwJ,EAAK,KAAM,MAAO9V,EAAQ,KAAK,CAAE,GACzGA,EAAQ,UACRA,EAAQ,SAASA,EAAQ,KAAK,EAE1C,CAMA,SAASu5B,GAAQzjB,EAAM9V,EAAS,CAC5B8V,EAAK,KAAK,aAAcA,CAAI,EAE5BA,EAAK,MAAM,OAAO,IAAM,EAAK,EACzBA,EAAK,QACLA,EAAK,OAAO,OAAOA,CAAI,EAE3B2hB,GAAW3hB,CAAI,EACf9V,EAAQ,OAASA,EAAQ,MAAQ,OACjC8V,EAAK,KAAK,YAAaA,CAAI,CAC/B,CAKA,SAASujB,GAAOvjB,EAAM9V,EAASs7B,EAAY,CAEvCt7B,EAAQ,KAAOs7B,EAAW,KAE1Bt7B,EAAQ,MAAM,WAAa6xB,GAAMyJ,CAAU,EAE3Ct7B,EAAQ,MAAQA,EAAQ,OAAS66B,GAAY,CACzC,KAAM/kB,EAAK,KACX,MAAO9V,EAAQ,KACvB,CAAK,EAIGs7B,EAAW,gBACPxlB,EAAK,MAAM,OACXA,EAAK,MAAM,aAAeA,EAAK,MAAM,MACzC9V,EAAQ,MAAM,KAAOs7B,EAAW,eAKhCA,EAAW,SACXt7B,EAAQ,MAAM,OAASs7B,EAAW,QAGlCA,EAAW,UACXA,EAAW,SAAS,QAASj9B,GAAYA,EAAQyX,CAAI,CAAC,EAItDwlB,EAAW,OACXxlB,EAAK,SAASwlB,EAAW,KAAK,EAElCxlB,EAAK,KAAK,UAAWwlB,CAAU,CACnC,CASA,SAAStC,GAASljB,EAAM9V,EAASD,EAAO,CACpC,IAAIuM,EACJ,GAAIwJ,EAAK,MAAM,MAAO,CAClB,MAAMylB,EAAQ,CAAE,GAAGzlB,EAAK,MAAM,KAAK,EAEnCA,EAAK,MAAM,MAAQ,GACnB,UAAW0lB,KAAQD,EAAO,CACtB,MAAME,EAAYrK,GAAMoK,CAAI,EACxBz7B,EAAM,SAAS07B,CAAS,IACxB3lB,EAAK,MAAM2lB,GAAaF,EAAMC,GAC9B,OAAOD,EAAMC,GAEpB,CACD,MAAMvE,EAAUlF,GAAS/xB,EAAQ,MAAM,EACvC8V,EAAK,MAAM,QACPA,EAAK,OAAS,QAAUuc,GAAK4E,CAAO,EAAIA,EAE5CnhB,EAAK,MAAM,MAAQ,GACnBA,EAAK,MAAM,MAAQylB,EACfzlB,EAAK,MAAM,aACXA,EAAK,MAAM,WAAW,MAAQ,CAC1B,KAAMxJ,EAAKwJ,EAAK,MAAM,cAAgB,MAAQxJ,IAAO,OAAS,OAASA,EAAG,QAAU,CAAA,EACpF,GAAGvM,CACnB,EAEK,CACD,OAAA+V,EAAK,KAAK,cAAe/V,CAAK,EACvB+V,CACX,CAOA,SAASijB,GAAS3B,EAAQsE,EAAenI,EAAOoI,EAAW,CAkCvD,GAjCIvE,EAAO,OAAS,SAChBxpB,EAAM,IAAKwpB,CAAM,EACjB7D,EAAM,QAAUA,EAAM,SAAW6D,GACjC7D,EAAM,OAAO,OAAOA,CAAK,EAGxBmI,EAAc,SAAS,SAASnI,CAAK,IAClCoI,IAAc,QAAavE,EAAO,OAAS,QAE3CsE,EAAc,SAAS,OAAOC,EAAW,EAAGpI,CAAK,EAC7C,MAAM,QAAQ6D,EAAO,KAAK,GAC1BA,EAAO,MAAM,OAASsE,EAAc,SAAS,QAS7CtE,EAAO,QAAS,EAAC,KAAK,CAClB,KAAMuE,EACN,MAAOpI,EAAM,MACb,KAAMkF,EAC1B,CAAiB,GAILiD,EAAc,SAAS,KAAKnI,CAAK,EAEhCA,EAAM,WACP6D,EAAO,QAAO,GAElB7D,EAAM,SAAW6D,GAIjB,GAHA7D,EAAM,OAAS6D,EAGX7D,EAAM,SAAW6D,EACjB,OAAAA,EAAO,OAAO7D,CAAK,EACnBA,EAAM,OAAO,IAAIA,CAAK,EACf6D,OAMX7D,EAAM,IAAI6D,EAAO,OAAO,EAK5B,OAAA4D,GAAO5D,EAAQsE,EAAe,EAAK,EACnCtE,EAAO,OAAO,MAAM7D,CAAK,EACzB6D,EAAO,KAAK,QAAS7D,CAAK,EACnB6D,CACX,CASA,SAASyC,GAAUtG,EAAOvzB,EAAS47B,EAAWxE,EAAQ,CAClD,OAAIlhB,GAAOkhB,CAAM,GACT7D,EAAM,QAAUA,EAAM,SAAW6D,GACjC7D,EAAM,OAAO,OAAOA,CAAK,EAE7BvzB,EAAQ,OAASo3B,EACjB7D,EAAM,YAAW,EAChB6D,EAAO,SAAS,SAAS7D,CAAK,EAEzBA,EAAM,IAAI6D,EAAO,OAAO,EADxBA,EAAO,IAAI7D,CAAK,EAEf,IAEP6D,IAAW,MACXp3B,EAAQ,OAAS,KACV,IAEJ,EACX,CAOA,SAAS85B,GAAYhkB,EAAM9V,EAASuzB,EAAO,CACvC,MAAMsI,EAAa77B,EAAQ,SAAS,QAAQuzB,CAAK,EACjD,GAAIsI,IAAe,GAAI,CACftI,EAAM,WACNzd,EAAK,QAAO,EAChB9V,EAAQ,SAAS,OAAO67B,EAAY,CAAC,EAGrC,IAAIC,EAAW1J,GAASmB,EAAM,MAAM,QAAQ,EACxC6D,EAAS7D,EAAM,OACnB,KAAOuI,IAAa,QAAa1E,GAC7B0E,EAAW1J,GAASgF,EAAO,MAAM,QAAQ,EACzCA,EAASA,EAAO,OAEf0E,EAODhmB,EAAK,KAAI,EANTA,EAAK,KAAK,CACN,KAAMA,EAAK,OAAS,OAAS+lB,EAAatI,EAAM,KAChD,MAAOgF,EACvB,CAAa,EAKLhF,EAAM,OAAS,KAEfA,EAAM,OAAO,KAAOA,CACvB,CACD,OAAAzd,EAAK,OAAO,QAAQyd,CAAK,EAClBzd,CACX,CAOA,SAAS6jB,GAAU9F,EAAO7zB,EAAS2B,EAAU,CACzC3B,EAAQ,SAAS,QAASuzB,GAAU5xB,EAAS4xB,CAAK,CAAC,CACvD,CAOA,SAAS8G,GAASxG,EAAO7zB,EAAS2B,EAAUo6B,EAAc,GAAO,CAC7D/7B,EAAQ,SAAS,QAASuzB,GAAU,EAC5B5xB,EAAS4xB,CAAK,IAAM,IAAS,CAACwI,IAC9BxI,EAAM,KAAK5xB,EAAUo6B,CAAW,CAE5C,CAAK,CACL,CAQA,SAAS9B,GAAYnkB,EAAM9V,EAAS,CAChC,MAAMo3B,EAASthB,EAAK,QAAU,OAC9B9V,EAAQ,OAASg8B,GAAalmB,EAAK,OAAO,GAAIshB,CAAM,EACpDthB,EAAK,KAAMzS,GAAMA,EAAE,YAAa,CAAA,CACpC,CAQA,SAASovB,GAAI3c,EAAM9V,EAAS6J,EAAQoyB,EAAM,GAAM9U,EAAU,GAAM,CAC5D,OAAI,MAAM,QAAQtd,CAAM,GAAKA,aAAkB,KAC3CA,EAAO,QAASF,GAAM8oB,GAAI3c,EAAM9V,EAAS2J,CAAC,CAAC,EACpCmM,IAEN9V,EAAQ,QAAQ,IAAI6J,CAAM,IACvBsd,GAAW,OAAOtd,EAAO,SAAY,YACrCA,EAAO,QAAQiM,CAAI,EAGnBmmB,GAAOpyB,EAAOiM,CAAI,IAAM,KACxB9V,EAAQ,QAAQ,IAAI6J,CAAM,EAC1BiM,EAAK,SAAS,QAASyd,GAAUA,EAAM,IAAI1pB,CAAM,CAAC,IAGnDiM,EACX,CAQA,SAAS4jB,GAAS5jB,EAAM6d,EAAUiI,EAAWlC,EAAU,CACnD,GAAIxjB,GAAOJ,EAAK,MAAM,EAAG,CACrB,MAAMomB,EAAWpmB,EAAK,OAAO,SACvB1T,EAAQs3B,GAAYwC,EAAS,OAC7BA,EAAS,OAAS,EAClBxC,EAAW,EACP,EACAA,EACJyC,EAAWD,EAAS,QAAQpmB,CAAI,EACtC,OAAIqmB,IAAa,GACN,IACXD,EAAS,OAAOC,EAAU,CAAC,EAC3BD,EAAS,OAAO95B,EAAO,EAAG0T,CAAI,EAC9BA,EAAK,OAAO,SAAWomB,EACnBpmB,EAAK,OAAO,OAAS,QACrBA,EAAK,OACA,QAAS,EACT,KAAK,CAAE,KAAM1T,EAAO,MAAOo2B,GAAY,KAAM2D,CAAQ,CAAE,EACzD,GACV,CACD,MAAO,EACX,CAKA,SAAS1C,GAAS3jB,EAAM,CACpB,GAAIA,EAAK,OAAQ,CACb,MAAM1T,EAAQ,CAAC,GAAG0T,EAAK,OAAO,QAAQ,EAAE,QAAQA,CAAI,EAGpD,OAAO1T,IAAU,GAAK0T,EAAK,OAAO,SAAS,OAAS1T,CACvD,CACD,MAAO,EACX,CAOA,SAAS02B,GAAWjF,EAAO7zB,EAAS,CAChC,OAAOA,CACX,CAMA,SAASo6B,GAAQtkB,EAAM9V,EAAS,CAC5B,IAAIsM,EACJ,QAAMA,EAAKwJ,EAAK,UAAY,MAAQxJ,IAAO,OAAS,OAASA,EAAG,QAAU,OAC/DwJ,EAAK,MACT9V,EAAQ,OAASs4B,GAAWt4B,EAAQ,KAAO8V,EAAK,KAC3D,CAMA,SAASmjB,GAAWnjB,EAAM9V,EAAS,CAC/B,OAAOA,EAAQ,OACTA,EAAQ,OAAO,QAAQ,OAAO,CAAC8V,EAAK,IAAI,CAAC,EACzC,CAACA,EAAK,IAAI,CACpB,CAQA,SAASojB,GAAQpjB,EAAM6d,EAAUyI,EAAS,CACtC,MAAMrG,EAAU,OAAOqG,GAAY,SAAWA,EAAQ,MAAMtmB,EAAK,OAAO,SAAS,EAAIsmB,EACrF,GAAI,CAACrG,EAAQ,OACT,OACJ,MAAMsG,EAAQtG,EAAQ,GACtB,IAAIuG,EAAUxmB,EAAK,OAWnB,IAVKwmB,IAEG,OAAOvG,EAAQ,EAAE,IAAM,OAAOjgB,EAAK,IAAI,GACvCigB,EAAQ,MAAK,EAEjBuG,EAAUxmB,GAGVumB,IAAU,WACVtG,EAAQ,MAAK,EACVuG,GAAWvG,EAAQ,QAAQ,CAC9B,MAAM90B,EAAO80B,EAAQ,QACrB,OAAQ90B,EAAI,CACR,IAAK,QACDq7B,EAAUxmB,EAAK,KACf,MACJ,IAAK,UACDwmB,EAAUA,EAAQ,OAClB,MACJ,IAAK,QACDA,EAAUxmB,EACV,MACJ,QACIwmB,EACIA,EAAQ,SAAS,KAAMx4B,GAAM,OAAOA,EAAE,IAAI,IAAM,OAAO7C,CAAI,CAAC,GACxDs7B,GAAOD,EAASr7B,CAAI,CACnC,CACJ,CACD,OAAOq7B,GAAW,MACtB,CAOA,SAASC,GAAOzmB,EAAM0mB,EAAU,CAC5B,MAAMC,EAAU,OAAOD,CAAQ,EAAE,MAAM,kBAAkB,EACzD,GAAIC,EAAS,CACT,KAAM,EAAGC,EAAQC,CAAM,EAAIF,EACrBhM,EAAOkM,EAAO,MAAM,GAAG,EAAE,IAAKjM,GAAQA,EAAI,KAAI,CAAE,EACtD,OAAQgM,EAAM,CACV,IAAK,OACD,OAAO5mB,EAAK,KAAK2a,EAAK,GAAIA,EAAK,EAAE,EACrC,QACI,MACP,CACJ,CAEL,CAUA,SAASmJ,GAAK9jB,EAAM6d,EAAUiJ,EAAYC,EAAU,CAChD,OAAOC,GAAIhnB,EAAM8mB,EAAYC,CAAQ,CACzC,CASA,SAASC,GAAIC,EAAMC,EAAaC,EAAa,OAAQ,CACjD,MAAMC,EAAS,OAAOD,GAAe,SAC9B55B,GAAMA,EAAE45B,IAAeD,EACxBC,EACAE,EAAQ,CAACJ,CAAI,EACnB,KAAOI,EAAM,QAAQ,CACjB,MAAMrnB,EAAOqnB,EAAM,QACnB,GAAID,EAAOpnB,EAAMknB,CAAW,EACxB,OAAOlnB,EACXqnB,EAAM,KAAK,GAAGrnB,EAAK,QAAQ,CAC9B,CAEL,CAIA,SAASikB,GAAQ12B,EAAG,CAChB,IAAIyS,EAAOzS,EACX,KAAOyS,EAAK,QACRA,EAAOA,EAAK,OAEhB,OAAOA,CACX,CAOA,SAASkmB,GAAa3b,EAAS,CAAE,EAAE+W,EAAQ,CACvC,IAAIthB,EACJ,OAAO,IAAI,MAAMuK,EAAQ,CACrB,OAAOoQ,EAAM,CACT,MAAM2E,EAAO3E,EAAK,GAClB,GAAI2E,IAAS,KACT,OAAO/U,EACX,MAAM+c,EAAa,QAAQ,IAAI,GAAG3M,CAAI,EAEtC,GAAI2M,IAAe,OACf,OAAOA,EAEX,GAAIhG,EAAQ,CACR,MAAMiG,EAAYjG,EAAO,OAAOhC,GAChC,GAAIiI,IAAc,OACd,OAAOA,CACd,CACD,GAAIhd,EAAO,YAAc,OAAO+U,GAAS,SAAU,CAC/C,MAAMkI,EAAYjd,EAAO,WAAW+U,GACpC,GAAIkI,IAAc,OACd,OAAOA,CACd,CAED,OAAIlI,IAAS,SAAwDtf,GAAK,OAAU,QACzE,GAEJuiB,GAAcjD,EACxB,EACD,OAAO3E,EAAM,CACT,MAAM2E,EAAO3E,EAAK,GACZ7sB,EAAQ6sB,EAAK,GACnB,GAAI2E,IAAS,KACT,OAAAtf,EAAOlS,EACHyc,EAAO,YACPA,EAAO,WAAW,KAAKvK,CAAI,EACxB,GAEX,GAAIsf,IAAS,OACT,OAAI/U,EAAO,YACPA,EAAO,WAAW,IAAIvK,CAAI,EAC9BA,EAAO,OACA,GAEX,GAAI,CAACoY,GAAG7N,EAAO+U,GAAOxxB,EAAO,EAAK,EAAG,CACjC,MAAM25B,EAAS,QAAQ,IAAI,GAAG9M,CAAI,EAClC,OAAI3a,IACAA,EAAK,KAAK,UAAUsf,IAAQxxB,EAAO,EAAK,EACxCg0B,GAAa9hB,EAAMsf,EAAMxxB,CAAK,EAE9BkS,EAAK,KAAMzS,GAAMu0B,GAAav0B,EAAG+xB,EAAMxxB,CAAK,EAAG,EAAI,GAEhD25B,CACV,CACD,MAAO,EACV,CACT,CAAK,CACL,CAOA,SAASve,GAAKlJ,EAAM6d,EAAU5yB,EAAKge,EAAO,KAAM,CAC5C,MAAMye,EAAW,OAAOz8B,GAAQ,SAAW,CAAE,IAAAA,EAAK,MAAOA,EAAK,KAAAge,CAAM,EAAGhe,EACjE6C,EAAQkS,EAAK,KAAK,KAAK,SAAS0nB,CAAQ,EAC9C,OAAA1nB,EAAK,KAAK,OAAQlS,EAAO,EAAK,EACvBA,EAAM,KACjB,CAMA,SAASu2B,GAAOrkB,EAAM,CAClB,MAAM7U,EAAO6U,EAAK,KAClB,EAAG,CACC,GAAIA,EAAK,MAAM,SAAW,GACtB,MACCA,EAAK,QACNlI,EAAM,IAAK3M,CAAI,EACnB6U,EAAOA,EAAK,MACf,OAAQA,GACLA,EAAK,MAAM,IACXkiB,GAAWliB,EAAK,MAAM,EAAE,CAEhC,CAOA,SAASkkB,GAAWlkB,EAAM6d,EAAU/vB,EAAO,CACvC,OAAO2P,GAAMuC,EAAMlS,CAAK,CAC5B,CAQA,SAASs2B,GAAYpkB,EAAM6d,EAAU8J,EAAaC,EAAa,CAC3D,MAAMxH,EAAY,GAAGpgB,EAAK,WACpBtI,EAASsI,EAAK,KAAK,UAAU,SAAS,CAAE,YAAA2nB,EAAa,YAAAC,CAAW,CAAE,EACxE,OAAAzH,GAAengB,EAAMtI,EAAO,YAAaA,EAAO,WAAW,EAAE,QAASA,GAAW,CAC7EsI,EAAK,MAAM,MAAMtI,EAASvL,GAAYA,EAAQ,KAAK,SAAWi0B,CAAS,CAC/E,CAAK,EACMpgB,CACX,CAQA,SAASqjB,GAAcrjB,EAAM9V,EAAS29B,EAAmB,GAAMzH,EAAW,CACtE,OAAAgE,GAAYpkB,EAAM9V,EAAS,CAAA,CAAE,EACzB29B,IACAzH,EAAYA,GAAa,GAAGpgB,EAAK,WACjCA,EAAK,KAAMyd,GAAU,CACjBA,EAAM,MAAM,OAAQtxB,GACT,EAAEA,EAAQ,OAAS,SACtBA,EAAQ,MACRA,EAAQ,KAAK,SAAWi0B,EAC/B,CACb,CAAS,GAEEpgB,CACX,CAOA,SAAS8nB,GAAa9nB,EAAM,CACxB,OAAKiY,EAAIjY,EAAK,MAAO,IAAI,IACrBA,EAAK,MAAM,GAAK,SAAS6kB,QACtB7kB,CACX,CAKA,SAAS+nB,GAAY5G,EAAS,CAC1B,MAAMl3B,EAAQ,CACV,QAAS,OAAOk3B,GAAY,SAAWlF,GAASkF,CAAO,EAAIA,CACnE,EACI,IAAInhB,EACAgoB,EAAa,GACjB,OAAO,IAAI,MAAM/9B,EAAO,CACpB,OAAO0wB,EAAM,CACT,KAAM,CAAC0E,EAAIC,CAAI,EAAI3E,EACnB,GAAI1C,EAAIhuB,EAAOq1B,CAAI,EACf,OAAO,QAAQ,IAAI,GAAG3E,CAAI,EAC9B,GAAI3a,GAAQ,OAAOsf,GAAS,UAAYtf,EAAK,OAAOsf,KAAU,OAC1D,OAAOtf,EAAK,OAAOsf,EAE1B,EACD,IAAI/U,EAAQ4N,EAAU8P,EAAeC,EAAU,CAC3C,GAAI/P,IAAa,KACb,OAAAnY,EAAOioB,EACA,GAEX,GAAI9P,IAAa,QACb,OAAA6P,EAAaC,EACN,GAEX,KAAM,CAAE,KAAA3I,EAAM,MAAAxxB,CAAO,EAAGkS,EAAK,KAAK,KAAK,SAAS,CAC5C,KAAMmY,EACN,MAAO8P,CACvB,CAAa,EAED,GAAI,CAAC7P,GAAGnuB,EAAMq1B,GAAOxxB,EAAO,EAAK,GAC7B,OAAOA,GAAU,SAAU,CAC3B,MAAM25B,EAAS,QAAQ,IAAIld,EAAQ+U,EAAMxxB,EAAOo6B,CAAQ,EACxD,OAAIF,IACAhoB,EAAK,KAAK,OAAQ,CAAE,KAAAsf,EAAM,MAAAxxB,CAAO,CAAA,EAC7B,OAAOwxB,GAAS,UAChBtf,EAAK,KAAK,QAAQsf,IAAQxxB,CAAK,GAEhC25B,CACV,CACD,MAAO,EACV,CACT,CAAK,CACL,CAQA,SAASU,GAAenoB,EAAMwa,EAAS,CAEnC,GAAIxa,EAAK,MAAM,WACX,OAAOA,EAAK,OAAOA,EAAK,MAAM,UAAU,EAC5C,UAAWjM,KAAUymB,EAAS,CAC1B,GAAIxa,EAAK,MAAM,WACX,OACA,OAAOjM,EAAO,SAAY,YAC1BA,EAAO,QAAQiM,CAAI,CAE1B,CACL,CAMA,SAASooB,GAAcp8B,EAAS,CAC5B,MAAM8B,EAAQi3B,GAAY/4B,CAAO,EAC3B4Q,EAASspB,GAAal6B,EAAQ,QAAU,GAAIA,EAAQ,MAAM,EAChE,MAAO,CACH,GAAI,EACJ,GAAIixB,GAAe,EACnB,SAAU,GACV,KAAM,GACN,OAAQnvB,EACR,SAAUoD,GAAOlF,EAAQ,UAAY,CAAA,CAAE,EACvC,OAAA4Q,EACA,KAAM7P,GAAa,EACnB,UAAW,GACX,UAAW,GACX,OAAQyzB,GAAc,EACtB,KAAMsE,GAAW94B,CAAO,EACxB,OAAQA,EAAQ,QAAU,KAC1B,QAAS,IAAI,IACb,MAAO+7B,GAAYj6B,CAAK,EACxB,QAAS,QAAQ,QAAQA,CAAK,EAC9B,MAAOkxB,GAAY,EAAI,EACvB,MAAOwF,GAAa,EACpB,KAAMx4B,EAAQ,MAAQ,QACtB,MAAA8B,CACR,CACA,CAMA,SAASu6B,GAASroB,EAAMhU,EAAS,CAC7B,IAAIwK,EAeJ,GAbAwJ,EAAK,OAAO,KAAMA,EAAK,MAAM,GAAKA,EAAK,MAAM,GAAKA,EAAK,OAAO,GAAKA,CAAI,EAEvEA,EAAK,MAAM,MAAQ,GACfhU,EAAQ,OACR,OAAO,OAAOgU,EAAK,MAAOhU,EAAQ,KAAK,EAC3CgU,EAAK,MAAM,MAAQ,GAEnBmoB,GAAenoB,EAAM,IAAI,IAAI,CACzB,GAAIhU,EAAQ,SAAW,GACvB,GAAIgU,EAAK,OAASA,EAAK,OAAO,QAAU,CAAA,CAC3C,CAAA,CAAC,EAGEhU,EAAQ,QACR,UAAW+H,KAAU/H,EAAQ,QACzB2wB,GAAI3c,EAAMA,EAAK,GAAIjM,EAAQ,GAAM,EAAK,EAI9C,OAAA+zB,GAAa9nB,CAAI,EAEjBA,EAAK,KAAMyd,GAAUzd,EAAK,IAAIyd,CAAK,CAAC,EAEhCzd,EAAK,QACLA,EAAK,OAAO,IAAIA,EAAMhU,EAAQ,KAAK,EAEnCgU,EAAK,OAAS,SAAWA,EAAK,SAAS,QACvClI,EAAM,IAAKkI,CAAI,EAEnBlQ,GAAMkQ,EAAMA,EAAK,GAAIA,EAAK,OAAQ,EAAK,EAEvCA,EAAK,MAAM,UAEN,GAAAxJ,EAAKxK,EAAQ,SAAW,MAAQwK,IAAO,SAAkBA,EAAG,IAC7DkrB,GAAS1hB,CAAI,EAEjBA,EAAK,KAAK,UAAWA,CAAI,EACzBA,EAAK,UAAY,GACVA,CACX,CASA,SAASsoB,GAAWt8B,EAAS,CACzB,MAAMu8B,EAAMv8B,GAAW,GACjB9B,EAAUk+B,GAAcG,CAAG,EAI3BvoB,EAAO,IAAI,MAAM9V,EAAS,CAC5B,OAAOywB,EAAM,CACT,KAAM,CAAG,CAAAxC,CAAQ,EAAIwC,EACrB,GAAIxC,IAAa,aACb,MAAO,GACX,MAAM4K,EAAO74B,EAAQ,MAAM,IAAIiuB,CAAQ,EACvC,OAAI4K,GAAQA,EAAK,IACNA,EAAK,IAAI/iB,EAAM9V,CAAO,EAC1B,QAAQ,IAAI,GAAGywB,CAAI,CAC7B,EACD,OAAOA,EAAM,CACT,KAAM,EAAGxC,EAAUrqB,CAAK,EAAI6sB,EACtBoI,EAAO74B,EAAQ,MAAM,IAAIiuB,CAAQ,EACvC,OAAI4K,GAAQA,EAAK,IACNA,EAAK,IAAI/iB,EAAM9V,EAASiuB,EAAUrqB,CAAK,EAC3C,QAAQ,IAAI,GAAG6sB,CAAI,CAC7B,CACT,CAAK,EACD,OAAO0N,GAASroB,EAAMuoB,CAAG,CAC7B,CAQA,SAASC,GAAMxoB,EAAM,CACjB,OAAO,OAAOA,GAAS,UAAYiY,EAAIjY,EAAM,KAAK,CACtD,CAOA,SAASyoB,GAAYzoB,EAAM,CACvB,OAAO,OAAOA,GAAS,UAAYiY,EAAIjY,EAAM,MAAM,CACvD,CAOA,SAAS0oB,GAAc1oB,EAAM,CACzB,MAAI,CAACA,GAAQ,OAAOA,GAAS,SAClB,GACJiY,EAAIjY,EAAM,IAAI,GAAKiY,EAAIjY,EAAM,MAAM,CAC9C,CAOA,SAAS2oB,GAAQ3oB,EAAM,CACnB,OAAO,OAAOA,GAAS,UAAY,aAAcA,CACrD,CAOA,SAAS4oB,GAAM5oB,EAAM,CACjB,GAAI,OAAOA,GAAS,SAChB,MAAO,CACH,IAAK,OACL,SAAUA,CACtB,EAEI,GAAI2oB,GAAQ3oB,CAAI,EAAG,CACf,KAAM,CAAE,SAAUiJ,EAAM,IAAK4f,EAAU,GAAI5e,EAAW,SAAAmc,EAAU,KAAA0C,KAAS7+B,CAAK,EAAK+V,EACnF,OAAO,OAAO,OAAO,CACjB,KAAM,UACN,MAAO,CAAE,GAAG/V,EAAO,KAAAgf,CAAM,CACrC,EAAWgB,EAAY,CAAE,GAAIA,CAAS,EAAK,CAAA,EAAI4e,EAAW,CAAE,IAAKA,CAAQ,EAAK,CAAA,EAAIzC,EAAW,CAAE,SAAAA,GAAa,CAAA,EAAI0C,EAAO,CAAE,KAAAA,GAAS,CAAA,CAAE,CAC/H,CACD,OAAO9oB,CACX,CAoBA,SAAS+oB,GAAQC,EAAM,CAQnB,IAAIC,EAKJ,MAAMC,EAAe,IAAI,IAMnBjsB,EAAI,SAAgBksB,EAASlQ,EAAQ,CACvC,OAAO,OAAOkQ,GAAY,WAAaA,EAAQlQ,CAAM,EAAIkQ,CACjE,EAKUC,EAAmB,CACrB,CACI,KAAM,CAACvZ,EAAGvb,EAAGrF,IAAMgO,EAAE4S,EAAG5gB,CAAC,GAAKgO,EAAE3I,EAAGrF,CAAC,EACpC,KAAM,CAAC4gB,EAAGvb,EAAGrF,IAAMgO,EAAE4S,EAAG5gB,CAAC,GAAKgO,EAAE3I,EAAGrF,CAAC,CACvC,EACD,CACI,MAAO,CAAC4gB,EAAGvb,EAAGrF,IAASgO,EAAE4S,EAAG5gB,CAAC,IAAMgO,EAAE3I,EAAGrF,CAAC,EACzC,MAAO,CAAC4gB,EAAGvb,EAAGrF,IAASgO,EAAE4S,EAAG5gB,CAAC,IAAMgO,EAAE3I,EAAGrF,CAAC,EACzC,KAAM,CAAC4gB,EAAGvb,EAAGrF,IAASgO,EAAE4S,EAAG5gB,CAAC,GAAKgO,EAAE3I,EAAGrF,CAAC,EACvC,KAAM,CAAC4gB,EAAGvb,EAAGrF,IAASgO,EAAE4S,EAAG5gB,CAAC,GAAKgO,EAAE3I,EAAGrF,CAAC,EACvC,KAAM,CAAC4gB,EAAGvb,EAAGrF,IAASgO,EAAE4S,EAAG5gB,CAAC,GAAKgO,EAAE3I,EAAGrF,CAAC,EACvC,KAAM,CAAC4gB,EAAGvb,EAAGrF,IAASgO,EAAE4S,EAAG5gB,CAAC,GAAKgO,EAAE3I,EAAGrF,CAAC,EACvC,IAAK,CAAC4gB,EAAGvb,EAAGrF,IAASgO,EAAE4S,EAAG5gB,CAAC,EAAIgO,EAAE3I,EAAGrF,CAAC,EACrC,IAAK,CAAC4gB,EAAGvb,EAAGrF,IAASgO,EAAE4S,EAAG5gB,CAAC,EAAIgO,EAAE3I,EAAGrF,CAAC,CACxC,EACD,CACI,IAAK,CAAC4gB,EAAGvb,EAAGrF,IAAMgO,EAAE4S,EAAG5gB,CAAC,EAAIgO,EAAE3I,EAAGrF,CAAC,EAClC,IAAK,CAAC4gB,EAAGvb,EAAGrF,IAAMgO,EAAE4S,EAAG5gB,CAAC,EAAIgO,EAAE3I,EAAGrF,CAAC,CACrC,EACD,CACI,IAAK,CAAC4gB,EAAGvb,EAAGrF,IAAMgO,EAAE4S,EAAG5gB,CAAC,EAAIgO,EAAE3I,EAAGrF,CAAC,EAClC,IAAK,CAAC4gB,EAAGvb,EAAGrF,IAAMgO,EAAE4S,EAAG5gB,CAAC,EAAIgO,EAAE3I,EAAGrF,CAAC,EAClC,IAAK,CAAC4gB,EAAGvb,EAAGrF,IAAMgO,EAAE4S,EAAG5gB,CAAC,EAAIgO,EAAE3I,EAAGrF,CAAC,CACrC,CACT,EAIUo6B,EAAkBD,EAAiB,OAAO,CAACj7B,EAAGqtB,IACzCrtB,EAAE,OAAO,OAAO,KAAKqtB,CAAC,CAAC,EAC/B,CAAE,CAAA,EAIC8N,EAAgB,IAAI,IAAID,EAAgB,IAAKp+B,GAAQA,EAAI,OAAO,CAAC,CAAC,CAAC,EAUzE,SAASs+B,EAAMC,EAASpP,EAAMvmB,EAAG41B,EAAY,CACzC,MAAMC,EAAaF,EAAQ,OAAQr7B,GAAMA,EAAE,WAAWisB,CAAI,CAAC,EAC3D,OAAKsP,EAAW,OAETA,EAAW,KAAMC,GAChBF,EAAW,QAAU51B,EAAI81B,EAAO,QACdF,EAAW,UAAU51B,EAAGA,EAAI81B,EAAO,MAAM,IACzCA,EACPA,EAER,EACV,EARU,EASd,CAOD,SAASC,EAAQ/1B,EAAG41B,EAAYI,EAAY,EAAG,CAC3C,IAAI5xB,EAAO4xB,EACLJ,EAAW,UAAU51B,EAAI,CAAC,EAAE,KAAM,EAClC41B,EAAW,UAAU,EAAG51B,CAAC,EAAE,KAAI,EACrC,GAAI,CAACoE,EAAK,OACN,MAAO,GACX,GAAI,CAAC4xB,EAAW,CAEZ,MAAMC,EAAW7xB,EAAK,MAAM,EAAE,EAAE,QAAO,EACjCnO,EAAQggC,EAAS,UAAW1P,GAASkP,EAAc,IAAIlP,CAAI,CAAC,EAClEniB,EAAO6xB,EAAS,MAAMhgC,CAAK,EAAE,KAAK,EAAE,CACvC,CACD,MAAMswB,EAAOniB,EAAK,GAClB,OAAOmxB,EAAiB,UAAWW,GAAc,CAC7C,MAAMP,EAAU,OAAO,KAAKO,CAAS,EACrC,MAAO,CAAC,CAACR,EAAMC,EAASpP,EAAM,EAAGniB,CAAI,CACjD,CAAS,CACJ,CAWD,SAAS+xB,EAAQ96B,EAAKu6B,EAAY,CAC9B,IAAIQ,EAAO,GACX,MAAM3tB,EAASmtB,EAAW,OAC1B,IAAI5O,EAAQ,EACZ,QAAShnB,EAAI3E,EAAK2E,EAAIyI,EAAQzI,IAAK,CAC/B,MAAMumB,EAAOqP,EAAW,OAAO51B,CAAC,EAChC,GAAIumB,IAAS,IACTS,YAEKT,IAAS,IACdS,YAEKA,IAAU,GAAKT,IAAS,IAC7B,SAEJ,GAAIS,IAAU,GAAK0O,EAAMF,EAAiBjP,EAAMvmB,EAAG41B,CAAU,EACzD,MAAO,CAACQ,EAAMp2B,EAAI,CAAC,EAGnBo2B,GAAQ7P,CAEf,CACD,MAAO,CAAC6P,EAAMR,EAAW,OAAS,CAAC,CACtC,CAOD,SAASS,EAAcT,EAAYU,EAAO,EAAG,CACzC,MAAMJ,EAAYX,EAAiBe,GAC7B7tB,EAASmtB,EAAW,OACpBD,EAAU,OAAO,KAAKO,CAAS,EACrC,IAAIlP,EAAQ,EACRC,EAAQ,GACRpR,EAAK,KACLyf,EAAU,GACVnkB,EAAO,KACPrM,EACAwhB,EAAW,GACXC,EAAO,GACPgQ,EAAgB,GAChBC,EAAa,GACbC,EAAS,EACb,MAAMC,EAAQ,CAAC1P,EAAOT,IAAS,CAC3BS,EAASuP,GAAiBhQ,EAAS+O,GAAW/O,CAC1D,EACQ,QAASvmB,EAAI,EAAGA,EAAIyI,EAAQzI,IAGxB,GAFAsmB,EAAWC,EACXA,EAAOqP,EAAW,OAAO51B,CAAC,GACrBumB,IAAS,KAAOA,IAAS,MAC1BD,IAAa,OACXU,IAAU,GAAK,CAACC,GAAWD,GAAS,CAACwP,GAAc,CACjDxP,EACAwP,EAAajQ,EAGbU,EAAQV,EAEZmQ,EAAM1P,EAAOT,CAAI,EACjB,QACH,SACSU,IAAUV,IAASU,GAASX,IAAa,OAC9CkQ,IAAejQ,IAASiQ,GAAclQ,IAAa,MAAQ,CAC5DoQ,EAAM1P,EAAOT,CAAI,EACjB,QACH,SACQU,IAAUV,EAAM,CACrBU,EAAQ,GACRyP,EAAM1P,EAAOT,CAAI,EACjB,QACH,SACQiQ,IAAejQ,EAAM,CAC1BiQ,EAAa,GACbE,EAAM1P,EAAOT,CAAI,EACjB,QACH,KACI,IAAIA,IAAS,IACd,SAEC,GAAIA,IAAS,IACVS,IAAU,EACVyP,EAASz2B,EAGTu2B,GAAiBhQ,EAErBS,YAEKT,IAAS,IAEd,GADAS,IACIA,IAAU,EAAG,CAqBb,MAAMxtB,EAAK,OAAO87B,GAAY,UAAYA,EAAQ,WAAW,GAAG,EAC1DA,EACA,OACAqB,EAAUn9B,GAAMo8B,EAAW,OAAO51B,EAAI,CAAC,IAAM,IAEnD,IAAIo2B,EAAO,GACPO,IACA,CAACP,EAAMp2B,CAAC,EAAIm2B,EAAQn2B,EAAI,EAAG41B,CAAU,GAEzC,MAAMgB,GAAQ/gB,EAAKygB,EAAOP,EAAQU,EAAQb,EAAY,CAAC,EACjDiB,GAAQd,EAAQ/1B,EAAG41B,CAAU,EAC/BgB,KAAU,IAAMC,KAAU,GAG1BvB,EAAUwB,EAASP,EAAe,GAAI/8B,EAAI48B,CAAI,EAEzCvgB,IAAO+gB,IAASC,IAASA,KAAU,KAAOP,IAASM,IAExDzlB,EAAO0E,EAAG,KAAK,KAAMihB,EAASP,EAAe,GAAI/8B,EAAI48B,CAAI,CAAC,EAC1DvgB,EAAK,KACLyf,EAAU,IAELuB,GAAQD,IAASN,IAASO,GAE/BvB,EAAUwB,EAASP,EAAe,GAAI/8B,EAAI48B,CAAI,EAG9Cd,GAAW,IAAIiB,KAAiBI,EAAU,IAAIP,IAAS,KAE3DG,EAAgB,EACnB,MAEGA,GAAiBhQ,UAGhBS,IAAU,IACdliB,EAAY4wB,EAAMC,EAASpP,EAAMvmB,EAAG41B,CAAU,GAAI,CAC/C51B,IAAM,GACNiE,EAAM,IAAK,CAACa,EAAW8wB,CAAU,CAAC,EAItC51B,GAAK8E,EAAU,OAAS,EACpB9E,IAAM41B,EAAW,OAAS,GAC1B3xB,EAAM,IAAK,CAACa,EAAW8wB,CAAU,CAAC,EAEjC/f,EAYIyf,IAELnkB,EAAO0E,EAAG,KAAK,KAAMihB,EAASxB,EAASgB,CAAI,CAAC,EAC5CzgB,EAAKqgB,EAAUpxB,GAAW,KAAK,KAAMqM,CAAI,EACzCmkB,EAAU,IAdNnkB,GAEA0E,EAAKqgB,EAAUpxB,GAAW,KAAK,KAAMgyB,EAAS3lB,EAAMmlB,CAAI,CAAC,EACzDnlB,EAAO,OAGP0E,EAAKqgB,EAAUpxB,GAAW,KAAK,KAAMgyB,EAASxB,EAASgB,CAAI,CAAC,EAC5DhB,EAAU,IASlB,QACH,MAEGoB,EAAM1P,EAAOT,CAAI,EAGzB,OAAI+O,GAAWzf,IAGXA,EAAKA,EAAG,KAAK,KAAMihB,EAASxB,EAASgB,CAAI,CAAC,GAI9CzgB,EAAK,CAACA,GAAM1E,EAAOA,EAAO0E,EACtB,CAACA,GAAMyf,IAIPzf,EAAK,CAAC1Z,EAAGf,IACE,OAAOe,GAAM,WAAaA,EAAEf,CAAC,EAAIe,EAE5C0Z,EAAKA,EAAG,KAAK,KAAMihB,EAASxB,EAASgB,CAAI,CAAC,GAE1C,CAACzgB,GAAM,CAACyf,GACRrxB,EAAM,IAAK2xB,CAAU,EAElB/f,CACV,CAQD,SAASihB,EAASxB,EAASgB,EAAMS,EAASX,EACxC,CACE,GAAIW,EAAS,CACT,MAAMv9B,EAAKs9B,EAASC,EAASxB,EAAiB,MAAM,EACpD,IAAIyB,EAIAC,EAAWb,EACTlB,GAAQ,IAAIkB,GAAM,EAClB,GACN,GAAI,OAAO58B,GAAO,WAAY,CAC1B,MAAMstB,EAAOD,GAAU,OAAOyO,CAAO,CAAC,EAAE,IAAKvO,GAAQ+P,EAAS/P,EAAK,EAAE,CAAC,EACtE,OAAQ3B,GAAW,CACf,MAAM8R,EAAW19B,EAAG4rB,CAAM,EAC1B,OAAI,OAAO8R,GAAa,YACpB3M,GAAK,IAAKwM,CAAO,EACVG,IAEXF,EAAiBE,EAAS,GAAGpQ,EAAK,IAAKC,GAAQ,OAAOA,GAAQ,WAAaA,EAAI3B,CAAM,EAAI2B,CAAG,CAAC,EACzFkQ,IACAA,EAAWA,EAAS,QAASE,GAAc,CACvC,MAAMC,EAAahC,EAAc+B,CAAS,EAY1C,OAXUA,EAAU,OAAO,CAACE,EAAUrT,IAAU,CAE5C,GADeA,IAAUoS,GAAqDA,GAAK,WAAW,GAAGpS,IAAQ,EAC7F,CACR,MAAM/pB,EAAQouB,GAAM2O,EAAgBhT,CAAK,EACzCqT,EAASrT,GAAS,IAAM/pB,CAC3B,MAEGo9B,EAASrT,GAASoT,EAAWpT,GAEjC,OAAOqT,CACV,EAAE,CAAE,CAAA,CAEjC,CAAyB,GAEEJ,EAAWA,EAAU,EAAGD,EACnD,CACa,CACJ,SACQ,OAAO1B,GAAY,SAAU,CAElC,GAAIA,IAAY,OACZ,MAAO,GACX,GAAIA,IAAY,QACZ,MAAO,GACX,GAAIA,IAAY,YACZ,OAEJ,GAAIrP,GAAeqP,CAAO,EACtB,OAAOlP,GAAUkP,EAAQ,UAAU,EAAGA,EAAQ,OAAS,CAAC,CAAC,EAE7D,GAAI,CAAC,MAAM,CAACA,CAAO,EACf,OAAO,OAAOA,CAAO,EACzB,GAAIgB,EAAOf,EAAiB,OAAS,EACjC,OAAOc,EAAcf,EAASgB,EAAO,CAAC,EAGtC,GAAIhB,EAAQ,WAAW,GAAG,EAAG,CACzB,MAAMgC,EAAUhC,EAAQ,UAAU,CAAC,EACnC,OAAAD,EAAa,IAAIiC,CAAO,EACjB,SAAkBlS,EAAQ,CAC7B,OAAOkS,KAAWlS,EAASA,EAAOkS,GAAQ,EAAK,MACvE,CACiB,CAGD,OAAOhC,CAEd,CACD,OAAOA,CACV,CAID,MAAMiC,EAAWlB,EAAclB,EAAK,WAAW,IAAI,EAAIA,EAAK,UAAU,CAAC,EAAIA,CAAI,EAIzEqC,EAAO,MAAM,KAAKnC,CAAY,EAMpC,SAASoC,EAAQz/B,EAAU,CACvB,OAAAo9B,EAAgBp9B,EACT,OAAO,OAAOu/B,EAAS,KAAK,KAAMv/B,EAASw/B,CAAI,CAAC,EAAG,CACtD,QAAAC,CACZ,CAAS,CACJ,CACD,OAAO,OAAO,OAAOF,EAAU,CAC3B,QAAAE,CACR,CAAK,CACL,CAUA,SAASC,GAAcC,EAAaxrB,EAAMyrB,EAAkB,CACxD,OAAKA,EAED,OAAOA,GAAqB,SACVA,EAAiB,MAAM,GAAG,EAC3B,OAAO,CAACvT,EAAKjtB,IAAQ,OAAO,OAAOitB,EAAK,CAAE,CAACjtB,GAAM,EAAI,CAAE,EAAG,CAAE,CAAA,EAExE,OAAOwgC,GAAqB,WAC1BF,GAAcC,EAAaxrB,EAAMyrB,EAAiBzrB,EAAMwrB,CAAW,CAAC,EAExEC,EARI,EASf,CASA,SAASC,GAAkB1rB,EAAMmY,KAAawC,EAAM,CAChD,MAAMgR,EAAoBhR,EAAK,OAAO,CAACiR,EAAgBC,IAAqB,CACxE,GAAI,CAACA,EACD,OAAOD,EACX,KAAM,CAAE,OAAAE,KAAWnb,CAAS,EAAKkb,EACjC,OAAIC,EACOnb,EAEJ,OAAO,OAAOib,EAAgBjb,CAAS,CACjD,EAAE,CAAE,CAAA,EACL,OAAQ,OAAO,KAAK3Q,EAAK,KAAK,QAAQ,SAAS,CAAE,SAAAmY,EAAU,QAASwT,EAAmB,EAClF,OAAO,EACP,OAAQ1gC,GAAQ0gC,EAAkB1gC,EAAI,EACtC,KAAK,GAAG,GAAK,IACtB,CASA,SAAS8gC,GAAU/hB,EAAI2d,EAAaC,EAAa,CAC7C,MAAM5nB,EAAO4hB,GAAU5X,CAAE,EACrBhK,EACAA,EAAK,UAAU2nB,EAAaC,CAAW,EAGvCxJ,GAAK,IAAKpU,CAAE,CAEpB,CAOA,SAASgiB,GAAYhiB,EAAIiiB,EAAgB,GAAM,CAC3C,MAAMjsB,EAAO4hB,GAAU5X,CAAE,EACrBhK,EACAA,EAAK,YAAYisB,CAAa,EAG9B7N,GAAK,IAAKpU,CAAE,CAEpB,CAYA,MAAMkiB,GAAkB,gBC9hFxB,SAASC,MAAuBC,EAAW,CAIvC,MAAM/a,EAAU+a,EAAU,OAAO,CAACvS,EAAQwS,IAAQ5S,GAAOI,EAAQwS,CAAG,EAAG,CAAE,CAAA,EAEnEt4B,EAAS,IAAM,GAKrB,OAAAA,EAAO,QAAU,SAAUiM,EAAM,CAC7B,MAAMiJ,EAAOqS,GAAMtb,EAAK,MAAM,IAAI,EAC9BiY,EAAI5G,EAASpI,CAAI,GACjBjJ,EAAK,OAAOqR,EAAQpI,EAAK,CAErC,EACWlV,CACX,CAQA,SAASu4B,GAAiBtgC,EAAS,CAC/B,IAAIzB,EAAI,EACR,OAAI,MAAM,QAAQyB,CAAO,EACdA,EAAQ,IAAKugC,GACZ,OAAOA,GAAW,UAAY,OAAOA,GAAW,SACzC,CACH,MAAO,OAAOA,CAAM,EACpB,MAAO,OAAOA,CAAM,CACxC,GAEgB,OAAOA,GAAU,UACb,UAAWA,GAAU,OAAOA,EAAO,OAAU,UAC7C,OAAO,OAAOA,EAAQ,CAClB,MAAO,UAAUhiC,MACjB,WAAYgiC,EAAO,KAC3C,CAAqB,EAGFA,EACV,EAEE,OAAO,KAAKvgC,CAAO,EAAE,IAAK8B,IACtB,CACH,MAAO9B,EAAQ8B,GACf,MAAAA,CACZ,EACK,CACL,CAOA,SAAS0+B,GAAYxgC,EAAS8B,EAAO,CACjC,GAAI,MAAM,QAAQ9B,CAAO,GACrB,UAAWugC,KAAUvgC,EACjB,GAAI8B,GAASy+B,EAAO,MAChB,MAAO,eAAgBA,EAASA,EAAO,WAAaA,EAAO,MAIvE,OAAOz+B,CACX,CAMA,SAAS2+B,GAAaC,EAAQC,EAAQ,CAClC,OAAID,GAAUC,EACH,GACPrT,GAAOoT,CAAM,GAAKpT,GAAOqT,CAAM,EACxBvU,GAAGsU,EAAQC,CAAM,EACrB,EACX,CAMA,SAAS3gC,GAAQgU,EAAM,CACnBA,EAAK,KAAK,KAAK,CAACsf,EAAMrnB,KACdqnB,EAAK,OAAS,YACV,OAAOA,EAAK,OAAU,YACtBtf,EAAK,MAAM,cAAgBsf,EAAK,MAChCA,EAAK,MAAQ,IAGbA,EAAK,MAAQgN,GAAiBhN,EAAK,KAAK,GAGzCrnB,EAAKqnB,CAAI,EACnB,CACL,CAKA,MAAMsN,GAAQC,EAAc,QAAS,KAAO,CACxC,IAAK,MACL,MAAO,CACH,IAAK,MACL,cAAe,uBACf,YAAa,QACb,gBAAiB,+EACjB,gBAAiB,yBACjB,gBAAiB,+BACjB,eAAgB,kEAChB,cAAe,6BACf,iBAAkB,gCAClB,mBAAoB,6CACpB,mBAAoB,6CACpB,yBAA0B,gDAC1B,yBAA0B,+CAC7B,CACL,GAAI,EAAI,EAKFC,GAAQD,EAAc,QAAS,KAAK,EAKpCxP,GAAUwP,EAAc,UAAW,KAAK,EAKxCE,GAAQF,EAAc,QAAS,KAAO,CACxC,IAAK,QACL,GAAI,SACJ,MAAO,CACH,IAAK,KACR,CACL,EAAE,EAKI5b,GAAW4b,EAAc,WAAY,KAAO,CAC9C,IAAK,KACL,GAAI,wBACR,EAAE,EAKI1gC,GAAU0gC,EAAc,UAAW,KAAO,CAC5C,IAAK,KACL,IAAK,CAAC,UAAW,WAAW,EAC5B,MAAO,CACH,IAAK,eACL,GAAI,2BACJ,oBAAqB,eACxB,CACL,EAAE,EAKIl7B,GAASk7B,EAAc,SAAU,IAAI,EAKrCG,GAASH,EAAc,SAAU,IAAI,EAKrCI,GAAOJ,EAAc,OAAQ,KAAO,CACtC,IAAK,MACL,GAAI,QACJ,MAAO,CACH,GAAI,kBACP,CACL,EAAE,EAKIK,GAAWL,EAAc,WAAY,KAAO,CAC9C,IAAK,WACL,MAAO,CACH,GAAI,MACJ,mBAAoB,CAChB,GAAI,QACJ,KAAM,mBACN,KAAM,MACT,CACJ,CACL,EAAE,EAKIM,GAAYN,EAAc,YAAa,KAAO,CAChD,IAAK,OACL,MAAO,CACH,cAAe,MAClB,CACL,EAAE,EAKIO,GAAMP,EAAc,QAAS,KAAO,CACtC,IAAK,QACL,KAAM,SACN,MAAO,CACH,KAAM,QACN,KAAM,oCACN,SAAU,sCACV,QAAS,0BACT,QAAS,6BACT,OAAQ,iBACR,MAAO,UACP,GAAI,MACJ,mBAAoB,CAChB,GAAI,kBACJ,KAAM,CACF,GAAI,eACJ,KAAM,gCACN,KAAM,MACT,EACD,KAAM,CACF,GAAI,QACJ,KAAM,mBACN,KAAM,MACT,CACJ,CACJ,CACL,EAAE,EAKIQ,GAASR,EAAc,SAAU,KAAO,CAC1C,IAAK,SACL,GAAI,QACR,EAAE,EAKIS,GAAYT,EAAc,SAAU,KAAO,CAC7C,IAAK,KACL,IAAK,CAAC,SAAU,UAAU,EAC1B,MAAO,CACH,gBAAiB,qCACpB,CACL,EAAE,EAKIU,GAAaV,EAAc,UAAW,IAAI,EAK1CW,GAAaX,EAAc,UAAW,KAAO,CAC/C,IAAK,QACL,MAAO,CACH,gBAAiB,CACb,GAAI,kBACJ,KAAM,OACN,KAAM,wBACT,CACJ,CACL,EAAE,EAKIY,GAAUZ,EAAc,aAAc,KAAO,CAC/C,IAAK,MACL,GAAI,eACJ,MAAO,CACH,GAAI,+BACP,CACL,EAAE,EAKIa,GAAWb,EAAc,QAAS,MAAM,EAKxCc,GAAcd,EAAc,QAAS,KAAO,CAC9C,IAAK,SACL,KAAM,SACN,MAAO,CACH,KAAM,QACN,SAAU,YACV,KAAM,aACN,GAAI,KACP,CACL,EAAE,EAKIe,GAAcf,EAAc,UAAW,IAAI,EAK3CgB,GAAYhB,EAAc,QAAS,KAAO,CAC5C,IAAK,QACL,KAAM,SACN,MAAO,CACH,KAAM,OACN,SAAU,YACV,KAAM,aACN,SAAU,kBACV,OAAQ,iBACR,GAAI,MACJ,mBAAoB,cACvB,CACL,EAAE,EAKIiB,GAAWjB,EAAc,WAAY,KAAO,CAC9C,IAAK,KACL,IAAK,CAAC,OAAQ,QAAQ,CAC1B,EAAE,EAKIkB,GAAWlB,EAAc,WAAY,KAAO,CAC9C,IAAK,KACL,GAAI,gBACJ,MAAO,CACH,oBAAqB,CACjB,GAAI,oBACJ,KAAM,MACT,CACJ,CACL,EAAE,EAKImB,GAAWnB,EAAc,WAAY,KAAO,CAC9C,IAAK,OACL,MAAO,CACH,MAAO,mBACV,CACL,EAAE,EAKIoB,GAAapB,EAAc,aAAc,KAAO,CAClD,IAAK,SACL,MAAO,CACH,QAAS,sBACZ,CACL,EAAE,EAKIqB,GAAUrB,EAAc,UAAW,KAAO,CAC5C,IAAK,OACL,GAAI,oBACR,EAAE,EAKIsB,GAAYtB,EAAc,OAAQ,KAAO,CAC3C,IAAK,OACL,KAAM,SACN,MAAO,CACH,GAAI,MACJ,KAAM,aACN,SAAU,mBACV,eAAgB,6BACnB,CACL,GAAI,EAAI,EAKFuB,GAAUvB,EAAc,UAAW,KAAO,CAC5C,IAAK,MACL,GAAI,UACR,EAAE,EAKIwB,GAAcxB,EAAc,SAAU,KAAO,CAC/C,KAAM,UACN,KAAM,eACN,MAAO,CACH,OAAQ,GACR,KAAM,SACN,SAAU,YACV,MAAO,cACV,CACL,EAAE,EAKIyB,GAAYzB,EAAc,QAAS,KAAO,CAC5C,IAAK,QACL,KAAM,SACN,MAAO,CACH,KAAM,QACN,SAAU,YACV,KAAM,aACN,QAAS,qBACT,OAAQ,iBACR,MAAO,UACP,GAAI,MACJ,mBAAoB,cACvB,CACL,EAAE,EAKInF,GAAWmF,EAAc,UAAW,KAAM,EAAI,EAK9C0B,GAAgB1B,EAAc,QAAS,KAAO,CAChD,IAAK,SACL,KAAM,SACN,MAAO,CACH,GAAI,MACJ,mBAAoB,8CACpB,SAAU,YACV,MAAO,iBACP,KAAM,aACN,SAAU,qBACV,QAAS,wBACT,OAAQ,iBACR,mBAAoB,cACvB,CACL,EAAE,EAKIN,GAASM,EAAc,SAAU,KAAO,CAC1C,IAAK,SACL,IAAK,CAAC,SAAU,UAAU,EAC1B,KAAM,gBACN,MAAO,CACH,MAAO,kBACP,MAAO,gBACP,SAAU,0BACb,CACL,EAAE,EAKI2B,GAAa,KAAO,CACtB,IAAK,KACL,GAAI,kBACJ,IAAK,CAAC,SAAU,UAAU,EAC1B,SAAU,eACd,GAKMC,GAAgB5B,EAAc,QAAS,KAAO,CAChD,IAAK,WACL,KAAM,SACN,MAAO,CACH,SAAU,YACV,KAAM,aACN,QAAS,qBACT,OAAQ,iBACR,MAAO,UACP,GAAI,MACJ,mBAAoB,cACvB,EACD,SAAU,eACd,EAAE,EAKI6B,EAAO,CAACC,EAAYtpB,IACfwnB,EAAc,GAAG8B,QAAkB,IAAM,CAC5C,MAAMC,EAAc,OAAOD,EACtB,OAAO,CAAC,EACR,YAAW,IAAKA,EAAW,MAAM,CAAC,QACvC,MAAO,CACH,GAAI,IAAIA,aAAsBC,IAC9B,IAAK,GAAGvpB,GAAU,SAClB,MAAO,CACH,MAAO,YAAYspB,0BACnB,UAAW,IAAIC,IACf,QAAS,uBAAuBD,KAChC,IAAK,CACD,GAAI,GAAGtpB,IAAO,UACd,KAAM,KACT,CACJ,CACb,CACK,CAAA,IASL,SAASwpB,GAAe7uB,EAAM,CAC1B,OAAO,SAAUsf,EAAMrnB,EAAM,CACzB,OAAIqnB,EAAK,OAAS,WAAa,MAAM,QAAQA,EAAK,KAAK,IACnDA,EAAK,MAAQA,EAAK,MAAM,IAAKiN,GAAW,CACpC,IAAI/1B,EACJ,MAAO,GAAAA,EAAK+1B,EAAO,SAAW,MAAQ/1B,IAAO,SAAkBA,EAAG,GAK3D+1B,EAJI9S,GAAO8S,EAAQ,CAClB,MAAO,CAAE,GAAI,GAAGvsB,EAAK,eAAeyb,GAAM,OAAO8Q,EAAO,KAAK,CAAC,GAAK,CAC3F,CAAqB,CAGrB,CAAa,EACGvsB,EAAK,MAAM,OAAS,YAAc,CAAC,MAAM,QAAQA,EAAK,KAAK,IACvDA,EAAK,UACLA,EAAK,MAAM,GAAI,EAAK,EAGpBA,EAAK,GAAG,UAAW,IAAM,CAChB,MAAM,QAAQA,EAAK,KAAK,GACzBA,EAAK,MAAM,GAAI,EAAK,CAEhD,CAAqB,IAIN/H,EAAKqnB,CAAI,CACxB,CACA,CAQA,SAASwP,GAAgB9uB,EAAMrR,EAAG,CAC9B,MAAM0W,EAAK1W,EAAE,OACb,GAAI0W,aAAc,iBAAkB,CAChC,MAAMvX,EAAQ,MAAM,QAAQkS,EAAK,MAAM,OAAO,EACxCwsB,GAAYxsB,EAAK,MAAM,QAASqF,EAAG,KAAK,EACxCA,EAAG,MACL,MAAM,QAAQrF,EAAK,MAAM,OAAO,GAAKA,EAAK,MAAM,QAAQ,OACnD,MAAM,QAAQA,EAAK,MAAM,EAIpBA,EAAK,OAAO,KAAM+uB,GAAkBtC,GAAa3+B,EAAOihC,CAAa,CAAC,EAM5E/uB,EAAK,MAAMA,EAAK,OAAO,OAAQ+uB,GAAkB,CAACtC,GAAa3+B,EAAOihC,CAAa,CAAC,CAAC,EAJrF/uB,EAAK,MAAM,CAAC,GAAGA,EAAK,OAAQlS,CAAK,CAAC,EAJlCkS,EAAK,MAAM,CAAClS,CAAK,CAAC,EAYlBuX,EAAG,QACHrF,EAAK,MAAMA,EAAK,MAAM,OAAO,EAG7BA,EAAK,MAAMA,EAAK,MAAM,QAAQ,CAGzC,CACL,CAOA,SAASgvB,GAAYhvB,EAAMlS,EAAO,CAC9B,IAAI0I,EAAI+B,EAIR,OAFC/B,EAAKwJ,EAAK,WAAa,MAAQxJ,IAAO,QAAkBA,EAAG,OAC3D+B,EAAKyH,EAAK,WAAa,MAAQzH,IAAO,QAAkBA,EAAG,OACxD,MAAM,QAAQyH,EAAK,MAAM,EAClBA,EAAK,OAAO,KAAM+uB,GAAkBtC,GAAaD,GAAYxsB,EAAK,MAAM,QAASlS,CAAK,EAAGihC,CAAa,CAAC,EAE3G,EACX,CAMA,SAASE,GAAWjvB,EAAM,CACtBA,EAAK,GAAG,UAAW,IAAM,CACrB,IAAIxJ,EAAI+B,EACH,GAAA/B,EAAKwJ,EAAK,WAAa,MAAQxJ,IAAO,SAAkBA,EAAG,WAC5DwJ,EAAK,QAAQ,SAAS,cAAgB8uB,GAAgB,KAAK,KAAM9uB,CAAI,GAEpE,GAAAzH,EAAKyH,EAAK,WAAa,MAAQzH,IAAO,SAAkBA,EAAG,MAC5DyH,EAAK,QAAQ,IAAI,UAAYgvB,GAAY,KAAK,KAAMhvB,CAAI,GAGvDiY,EAAIjY,EAAK,MAAO,SAAS,IAC1BA,EAAK,MAAM,QAAU,IACpBiY,EAAIjY,EAAK,MAAO,UAAU,IAC3BA,EAAK,MAAM,SAAW,GAClC,CAAK,EACDA,EAAK,KAAK,KAAK6uB,GAAe7uB,CAAI,CAAC,CACvC,CAOA,SAASkvB,GAASlvB,EAAM,CACpBA,EAAK,GAAG,UAAW,IAAM,CACrBA,EAAK,MAAM,SAAWsc,GAAStc,EAAK,MAAM,QAAQ,CAC1D,CAAK,EACDA,EAAK,KAAK,KAAK,CAAC,CAAE,KAAAsf,EAAM,MAAAxxB,CAAO,EAAEmK,KAC7BnK,EAAQwxB,IAAS,WAAahD,GAASxuB,CAAK,EAAIA,EACzCmK,EAAK,CAAE,KAAAqnB,EAAM,MAAAxxB,CAAO,CAAA,EAC9B,EACDkS,EAAK,GAAG,gBAAiB,CAAC,CAAE,QAASlS,CAAK,IAAO,CAC7CkS,EAAK,OAAO,SAAWsc,GAASxuB,CAAK,CAC7C,CAAK,EACDkS,EAAK,GAAG,UAAW,IAAM,CACrBA,EAAK,OAAO,SAAWsc,GAAStc,EAAK,MAAM,QAAQ,CAC3D,CAAK,CACL,CAWA,SAASmvB,GAASlkC,EAAK6C,EAAO,CAC1B,OAAQkS,GAAS,CACbA,EAAK,MAAM,IAAIse,GAAc,CACzB,IAAArzB,EACA,KAAM,KACN,MAAO6C,GAAS7C,EAChB,KAAM,CACF,SAAU,GACV,SAAU,CAAC+U,CAAI,CAClB,CACJ,CAAA,CAAC,CACV,CACA,CAEA,MAAMhK,GAAY,OAAO,OAAW,IAKpC,SAASo5B,GAAY,EAAG,CAChB,EAAE,kBAAkB,aACpB,EAAE,OAAO,aAAa,iBAAiB,GACvC,EAAE,OAAO,gBAAgB,iBAAiB,CAElD,CAMA,SAASC,GAAiBpmB,EAAMta,EAAG,CACzBA,EAAE,kBAAkB,iBAGjBsa,IAAS,YACdta,EAAE,OAAO,aAAa,kBAAmB,MAAM,EAH/CA,EAAE,eAAc,EAKhBsa,IAAS,QACTmmB,GAAYzgC,CAAC,CAErB,CAMA,SAAS2gC,GAAMtvB,EAAM,CAEjBmvB,GAAS,UAAW,aAAa,EAAEnvB,CAAI,EACvCmvB,GAAS,YAAa,YAAY,EAAEnvB,CAAI,EACxCmvB,GAAS,QAAQ,EAAEnvB,CAAI,EACnBhK,KACK,OAAO,qBACR,OAAO,iBAAiB,WAAYq5B,GAAiB,KAAK,KAAM,UAAU,CAAC,EAC3E,OAAO,iBAAiB,OAAQA,GAAiB,KAAK,KAAM,MAAM,CAAC,EACnE,OAAO,iBAAiB,YAAaD,EAAW,EAChD,OAAO,mBAAqB,KAGpCpvB,EAAK,KAAK,MAAM,CAAClS,EAAOmK,IAASA,EAAK,MAAM,QAAQnK,CAAK,EAAIA,EAAQ,CAAA,CAAE,CAAC,EACxEkS,EAAK,GAAG,UAAW,IAAM,CAChB,MAAM,QAAQA,EAAK,KAAK,GACzBA,EAAK,MAAM,GAAI,EAAK,EACnBA,EAAK,UAEVA,EAAK,QAAQ,SAAS,WAAcrR,GAAM,CAGtC,GAFAA,EAAE,eAAc,EAChBqR,EAAK,MAAM,CAAA,CAAE,EACTA,EAAK,MAAM,IAAMhK,GAAW,CAC5B,MAAMqP,EAAK,SAAS,eAAerF,EAAK,MAAM,EAAE,EAC5CqF,IACAA,EAAG,MAAQ,GAClB,CACb,EACQrF,EAAK,QAAQ,SAAS,MAASrR,GAAM,CACjC,IAAI6H,EAAI+B,EACR,MAAM+2B,EAAQ,CAAA,EACd,GAAI3gC,EAAE,kBAAkB,kBAAoBA,EAAE,OAAO,MAAO,CACxD,QAAS,EAAI,EAAG,EAAIA,EAAE,OAAO,MAAM,OAAQ,IAAK,CAC5C,IAAI/D,GACCA,EAAO+D,EAAE,OAAO,MAAM,KAAK,CAAC,IAC7B2gC,EAAM,KAAK,CAAE,KAAM1kC,EAAK,KAAM,KAAAA,CAAI,CAAE,CAE3C,CACDoV,EAAK,MAAMsvB,CAAK,CACnB,CACGtvB,EAAK,UACLA,EAAK,QAAQ,MAAQsvB,GAErB,QAAS94B,EAAKwJ,EAAK,MAAM,SAAW,MAAQxJ,IAAO,OAAS,OAASA,EAAG,WAAc,cACrF+B,EAAKyH,EAAK,MAAM,SAAW,MAAQzH,IAAO,QAAkBA,EAAG,SAAS5J,CAAC,EAE1F,EACA,CAAK,CACL,CAOA,eAAe4gC,GAAavvB,EAAMwvB,EAAa,CAc3C,GAbAA,EAAY,eAAc,EAC1B,MAAMxvB,EAAK,QAEXA,EAAK,KAAM,GAAM,CACb,EAAE,MAAM,IAAIse,GAAc,CACtB,IAAK,YACL,MAAO,GACP,QAAS,EACZ,CAAA,CAAC,CACV,CAAK,EACG,OAAOte,EAAK,MAAM,aAAgB,YAClCA,EAAK,MAAM,YAAYwvB,EAAaxvB,CAAI,EAExCA,EAAK,OAAO,MAAM,UAAU,EACxB,OAAOA,EAAK,MAAM,iBAAoB,YACtCA,EAAK,MAAM,gBAAgBA,CAAI,EAG/BA,EAAK,MAAM,oBAAsB,IACjCA,EAAK,MAAM,IAAIse,GAAc,CACzB,SAAU,GACV,IAAK,aACL,KAAM,CACF,SAAUte,EAAK,MAAM,oBAAsB,OAC3C,SAAU,CAAC,CAAE,KAAAA,EAAM,EACnB,cAAe,EAClB,EACD,KAAM,KACN,MAAOA,EAAK,MAAM,mBAAqB,kBAC1C,CAAA,CAAC,UAKF,OAAOA,EAAK,MAAM,UAAa,WAAY,CAE3C,MAAMyvB,EAASzvB,EAAK,MAAM,SAASA,EAAK,KAAK,OAAO,SAAS+b,GAAM/b,EAAK,KAAK,CAAC,EAAGA,CAAI,EACrF,GAAIyvB,aAAkB,QAAS,CAC3B,MAAMC,EAAc1vB,EAAK,MAAM,WAAa,QACxCA,EAAK,MAAM,iBAAmB,OAC9B0vB,IACA1vB,EAAK,MAAM,SAAW,IAC1BA,EAAK,MAAM,IAAIse,GAAc,CACzB,IAAK,UACL,MAAO,GACP,QAAS,EACZ,CAAA,CAAC,EACF,MAAMmR,EACFC,IACA1vB,EAAK,MAAM,SAAW,IAC1BA,EAAK,MAAM,OAAO,SAAS,CAC9B,CACJ,MAEOwvB,EAAY,kBAAkB,iBAC9BA,EAAY,OAAO,QAInC,CAMA,SAASG,GAAO3vB,EAAM,CAClBA,EAAK,MAAM,OAAS,GACpBA,EAAK,GAAG,UAAW,IAAM,CACrB,IAAIxJ,EACC,GAAAA,EAAKwJ,EAAK,WAAa,MAAQxJ,IAAO,SAAkBA,EAAG,WAC5DwJ,EAAK,QAAQ,SAAS,OAASuvB,GAAa,KAAK,KAAMvvB,CAAI,GAE1DiY,EAAIjY,EAAK,MAAO,SAAS,IAC1BA,EAAK,MAAM,QAAU,GAEjC,CAAK,EACDA,EAAK,GAAG,mBAAoB,IAAMA,EAAK,MAAM,OAAO,YAAY,CAAC,CACrE,CAOA,SAAS4vB,GAAO5vB,EAAM,CACdA,EAAK,MAAM,SAAW,SACtBA,EAAK,MAAM,OAAS,GACpBA,EAAK,OAAS,KAEtB,CAOA,SAAS6vB,GAAa7vB,EAAM,CACxBA,EAAK,GAAG,UAAW,IAAM,CACjBA,EAAK,UACLA,EAAK,QAAQ,aAAeA,EAAK,OAAS,GAEtD,CAAK,CACL,CAQA,SAAS8vB,GAAc9vB,EAAMnT,EAAO,CAC5BA,EAAM,kBAAkB,kBACxBmT,EAAK,MAAMwsB,GAAYxsB,EAAK,MAAM,QAASnT,EAAM,OAAO,KAAK,CAAC,CAEtE,CAOA,SAASkjC,GAAU/vB,EAAMlS,EAAO,CAC5B,IAAI0I,EAAI+B,EAER,OAAC/B,EAAKwJ,EAAK,WAAa,MAAQxJ,IAAO,QAAkBA,EAAG,OAC3D+B,EAAKyH,EAAK,WAAa,MAAQzH,IAAO,QAAkBA,EAAG,OACrDk0B,GAAaD,GAAYxsB,EAAK,MAAM,QAASlS,CAAK,EAAGkS,EAAK,MAAM,CAC3E,CAMA,SAASgwB,GAAOhwB,EAAM,CAClBA,EAAK,GAAG,UAAW,IAAM,CACrB,IAAIxJ,EAAI+B,EACH,MAAM,QAAQyH,EAAK,MAAM,OAAO,GACjCoe,GAAK,IAAKpe,CAAI,EAEb,GAAAxJ,EAAKwJ,EAAK,WAAa,MAAQxJ,IAAO,SAAkBA,EAAG,WAC5DwJ,EAAK,QAAQ,SAAS,cAAgB8vB,GAAc,KAAK,KAAM9vB,CAAI,GAElE,GAAAzH,EAAKyH,EAAK,WAAa,MAAQzH,IAAO,SAAkBA,EAAG,MAC5DyH,EAAK,QAAQ,IAAI,UAAY+vB,GAAU,KAAK,KAAM/vB,CAAI,EAElE,CAAK,EACDA,EAAK,KAAK,KAAK6uB,GAAe7uB,CAAI,CAAC,CACvC,CASA,SAASiwB,GAAWjwB,EAAMusB,EAAQ,CAE9BvsB,EAAK,SAAWA,EAAK,QAAQ,MAC7B,MAAMwsB,EAAc,eAAgBD,EAASA,EAAO,WAAaA,EAAO,MACxE,SAAS2D,GAAkB,CACvB,MAAO,CAAClwB,EAAK,MAAM,QAAQ,KAAMusB,IAAY,eAAgBA,EAASA,EAAO,WAAaA,EAAO,SAAW,IAAI,CACnH,CACD,OAAO,MAAM,QAAQvsB,EAAK,MAAM,EAC1BA,EAAK,OAAO,KAAMmwB,GAAY1D,GAAa0D,EAAS3D,CAAW,CAAC,GAC/DxsB,EAAK,SAAW,QACdA,EAAK,SAAW,MAAQkwB,MACzB3D,EAAO,OACPA,EAAO,MAAM,uBACX,GACAE,GAAaD,EAAaxsB,EAAK,MAAM,CACnD,CAMA,eAAeowB,GAAYpwB,EAAMrR,EAAG,CAChC,IAAI6H,EACA,QAASA,EAAKwJ,EAAK,MAAM,SAAW,MAAQxJ,IAAO,OAAS,OAASA,EAAG,WAAc,aACtF,MAAM,IAAI,QAAS,GAAM,WAAW,EAAG,CAAC,CAAC,EACzC,MAAMwJ,EAAK,QACXA,EAAK,MAAM,MAAM,SAASrR,CAAC,EAEnC,CAKA,SAAS0hC,GAAYrwB,EAAMrR,EAAG,CAC1B,MAAM4b,EAAS5b,EAAE,OACXb,EAAQyc,EAAO,aAAa,UAAU,EACtC,MAAM,KAAKA,EAAO,eAAe,EAAE,IAAK6O,GAAMoT,GAAYxsB,EAAK,MAAM,QAASoZ,EAAE,KAAK,CAAC,EACtFoT,GAAYxsB,EAAK,MAAM,QAASuK,EAAO,KAAK,EAClDvK,EAAK,MAAMlS,CAAK,CACpB,CAOA,SAASwiC,GAAiBtkC,EAASukC,EAAa,CAC5C,OAAKvkC,EAAQ,KAAMugC,GAAWA,EAAO,OAASA,EAAO,MAAM,sBAAsB,EAc1EvgC,EAbI,CACH,CACI,MAAOukC,EACP,MAAO,GACP,MAAO,CACH,OAAQ,GACR,SAAU,GACV,sBAAuB,MAC1B,CACJ,EACD,GAAGvkC,CACf,CAGA,CAMA,SAASwkC,GAASxwB,EAAM,CAEpBA,EAAK,GAAG,UAAW,IAAM,CACrB,IAAIxJ,EAAI+B,EAAIC,EACZ,MAAMi4B,EAAanU,IAAU9lB,EAAKwJ,EAAK,MAAM,SAAW,MAAQxJ,IAAO,OAAS,OAASA,EAAG,QAAQ,EAChG,CAACi6B,GACDzwB,EAAK,MAAM,aACX,MAAM,QAAQA,EAAK,MAAM,OAAO,IAChCA,EAAK,KAAK,KAAK,CAAC,CAAE,KAAAsf,EAAM,MAAAxxB,CAAO,EAAEmK,KACzBqnB,IAAS,YACTxxB,EAAQwiC,GAAiBxiC,EAAOkS,EAAK,MAAM,WAAW,GAEnD/H,EAAK,CAAE,KAAAqnB,EAAM,MAAAxxB,CAAO,CAAA,EAC9B,EACDkS,EAAK,MAAM,QAAUswB,GAAiBtwB,EAAK,MAAM,QAASA,EAAK,MAAM,WAAW,GAEhFywB,EACIzwB,EAAK,QAAU,QACfA,EAAK,MAAM,GAAI,EAAK,EAGnBA,EAAK,SAAW,CAACA,EAAK,QAAQ,UAGnCA,EAAK,MAAM,MAAQ,OAAO,OAAO,GAAIA,EAAK,MAAM,MAAO,CACnD,MAAOA,EAAK,MAC5B,CAAa,EACDA,EAAK,GAAG,QAAS,CAAC,CAAE,QAAA8c,CAAO,IAAO,CAC9B9c,EAAK,MAAM,MAAQ,OAAO,OAAO,GAAIA,EAAK,MAAM,MAAO,CACnD,MAAO8c,CAC3B,CAAiB,CACjB,CAAa,GAEA,GAAAvkB,EAAKyH,EAAK,WAAa,MAAQzH,IAAO,SAAkBA,EAAG,WAC5DyH,EAAK,QAAQ,SAAS,YAAcqwB,GAAY,KAAK,KAAMrwB,CAAI,EAC/DA,EAAK,QAAQ,SAAS,SAAWowB,GAAY,KAAK,KAAMpwB,CAAI,GAE3D,GAAAxH,EAAKwH,EAAK,WAAa,MAAQxH,IAAO,SAAkBA,EAAG,MAC5DwH,EAAK,QAAQ,IAAI,WAAaiwB,GAAW,KAAK,KAAMjwB,CAAI,EACxDA,EAAK,QAAQ,IAAI,gBAAkB,CAAClS,EAAOyiC,IAAgB,CACvD,GAAI,CAAC,MAAM,QAAQvwB,EAAK,MAAM,OAAO,EACjC,MAAO,GACX,MAAM0wB,EAAmB1wB,EAAK,MAAM,QAAQ,KAAMusB,GAAW,CACzD,GAAIA,EAAO,OAAS,wBAAyBA,EAAO,MAChD,MAAO,GACX,MAAMC,EAAc,eAAgBD,EAASA,EAAO,WAAaA,EAAO,MACxE,OAAOnU,GAAGtqB,EAAO0+B,CAAW,CAChD,CAAiB,EACD,OAAO+D,GAAe,CAACG,EAAmB,GAAO,MACjE,EAEA,CAAK,EACD1wB,EAAK,KAAK,MAAM,CAAClS,EAAOmK,IAAS,CAC7B,IAAIzB,EAAI+B,EAAIC,EACZ,MAAI,CAACwH,EAAK,MAAM,aACZlS,IAAU,QACV,MAAM,SAAS0I,EAAKwJ,EAAK,SAAW,MAAQxJ,IAAO,OAAS,OAASA,EAAG,OAAO,GAC/EwJ,EAAK,MAAM,QAAQ,QACnB,CAACsc,IAAU9jB,GAAMD,EAAKyH,EAAK,SAAW,MAAQzH,IAAO,OAAS,OAASA,EAAG,SAAW,MAAQC,IAAO,OAAS,OAASA,EAAG,QAAQ,IACjI1K,EACI,eAAgBkS,EAAK,MAAM,QAAQ,GAC7BA,EAAK,MAAM,QAAQ,GAAG,WACtBA,EAAK,MAAM,QAAQ,GAAG,OAE7B/H,EAAKnK,CAAK,CACzB,CAAK,CACL,CAOA,SAAS6iC,GAAYhC,EAAYgC,EAAa,CAC1C,OAAQ3wB,GAAS,CACTA,EAAK,MAAM,GAAG2uB,WAAsB,SACpC3uB,EAAK,MAAM,GAAG2uB,SAAoB,WAAWgC,IAEzD,CACA,CAOA,SAASC,GAAeC,EAAQ,CAC5B,OAAQ,OAAOA,GAAW,WACrB,QAASA,GAAU,SAAUA,GAAU,aAAcA,EAC9D,CAcA,SAASC,GAAgB9wB,EAAM,CAC3B,MAAI,GAAA0oB,GAAc1oB,CAAI,GAClBA,EAAK,IACLA,EAAK,GAAG,WAAW,SAAS,GAC5B,OAAOA,EAAK,MAAS,UACrBA,EAAK,KAAK,WAAW,SAAS,GAC9B,SAAUA,EAIlB,CAQA,SAAS+wB,GAAaF,EAAQG,EAAY,GAAI,CAC1C,OAAI,OAAOH,GAAW,SACXD,GAAeI,CAAS,GAAK,OAAOA,GAAc,SACnDA,EACAH,EAED,MAAM,QAAQA,CAAM,EAClBD,GAAeI,CAAS,EAAIA,EAAYH,EAE5CpX,GAAOoX,EAAQG,CAAS,CACnC,CAsDA,SAASnE,EAAcoE,EAAS5rB,EAAI3Q,EAAO,GAAO,CAC9C,MAAO,IAAI0xB,IAAa,CACpB,MAAM8K,EAAcC,GAAe,CAC/B,MAAMnxB,EAAO,CAACqF,GAAM,OAAOA,GAAO,SAAW,CAAE,IAAKA,GAAOA,IAC3D,OAAImjB,GAAMxoB,CAAI,GAAKyoB,GAAYzoB,CAAI,KAC1BA,EAAK,OACNA,EAAK,KAAO,CAAE,QAAAixB,IAEd7K,EAAS,QAAU,CAACpmB,EAAK,WACzBA,EAAK,SAAW,CACZ,GAAGomB,EAAS,IAAK3I,GAAU,OAAOA,GAAU,SAAWA,EAAQA,EAAM0T,CAAU,CAAC,CACxG,GAEoB3I,GAAMxoB,CAAI,IACVA,EAAK,MAAQ,CACT,MAAO,YAAYixB,IACnB,GAAIjxB,EAAK,OAAS,EAC1C,IAGmB,CACH,GAAI,UAAUixB,IACd,KAAM,UAAUA,IAChB,KAAMA,KAAWE,EACXJ,GAAa/wB,EAAMmxB,EAAWF,EAAQ,EACtCjxB,CACtB,CACA,EACQ,OAAOtL,EAAO08B,GAAWF,CAAU,EAAIA,CAC/C,CACA,CAMA,SAASE,GAAWC,EAAa,CAC7B,OAAQF,GACG,CAACE,EAAYF,CAAU,CAAC,CAEvC,CAgCA,SAASG,GAAIrnB,EAAWsnB,EAAMC,EAAW,CACrC,OAAQL,GAAe,CACnB,MAAMnxB,EAAOuxB,EAAKJ,CAAU,EAC5B,GAAIK,GACCZ,GAAe5wB,CAAI,GAAK,OAAQA,GACjC8wB,GAAgB9wB,CAAI,EAAG,CACvB,MAAMyxB,EAAkB,CACpB,GAAIxnB,EACJ,KAAMjK,CACtB,EACY,OAAIwxB,IACAC,EAAgB,KAAOD,EAAUL,CAAU,GAExCM,CACV,MACQX,GAAgB9wB,CAAI,EACzB,OAAO,OAAOA,EAAK,KAAM,CAAE,GAAIiK,CAAS,CAAE,EAErC2mB,GAAe5wB,CAAI,GACxB,OAAO,OAAOA,EAAM,CAAE,GAAIiK,CAAW,CAAA,EAEzC,OAAOjK,CACf,CACA,CA4BA,SAAS0xB,GAAQT,EAASU,EAAY,CAClC,OAAQR,GAAe,CACnB,MAAMnxB,EAAOixB,EAAQ,CAAA,CAAE,EACvB,OAAIH,GAAgB9wB,CAAI,GAChB,MAAM,QAAQA,EAAK,IAAI,IAE3BA,EAAK,KAAO+wB,GAAaA,GAAa/wB,EAAK,KAAM2xB,CAAU,EAAGR,CAAU,GACjEnxB,GAEJ+wB,GAAaA,GAAa/wB,EAAM2xB,CAAU,EAAGR,CAAU,CACtE,CACA,CAOA,SAASS,GAAMX,EAAS,CACpB,OAAOG,GAAWH,CAAO,CAC7B,CAMA,MAAMY,GAAS,CAIX,OAAQjF,GAAM3b,GAAS9kB,GAAQ,gBAAgB,CAAC,EAAGkxB,GAAQsQ,GAAYe,EAAK,QAAQ,EAAG/8B,GAAQ,EAAEi8B,GAAY,4BAA4B,EAAGZ,KAAU0B,EAAK,QAAQ,CAAC,CAAC,EAAGzB,GAAK,OAAO,CAAC,EAIrL,KAAM,QAKN,OAAQ,SAIR,MAAO,CAAE,EAIT,SAAU,CAACkC,GAAS,QAAQ,EAAGS,EAAM,CACzC,EAMMkC,GAAW,CAIb,OAAQlF,GAAM0E,GAAI,wBAIlB9D,GAAWV,GAAMn7B,GAAM,EAAIy7B,GAAK,EAAED,GAAUuB,EAAK,WAAW,CAAC,EAAG1B,GAAM,CAAE,EAAG0E,GAAQhE,GAAS,QAAQ,EAAG,CACnG,GAAI,QACZ,CAAK,CAAC,EAIFR,GAASG,GAAO,QAAQ,EAAGJ,GAAK,OAAO,EAAGM,GAAWD,GAAUE,GAAWV,GAAMn7B,GAAQ,EAAE+/B,GAAQtE,GAAG,EAAI,CACrG,KAAM,gBACN,MAAO,CACH,GAAI,mBACJ,MAAO,gBACP,QAAS,+BACZ,CACJ,CAAA,EAAGD,GAAUuB,EAAK,WAAW,CAAC,EAAG1B,GAAQ,CAAA,EAAG0E,GAAQhE,GAAS,eAAe,EAAG,CAC5E,GAAI,eACP,CAAA,CAAC,EAAGD,GAAQ,cAAc,CAAC,CAAC,CAAC,CAAC,EAE/B6D,GAAI,iCAAkCrE,GAAK,OAAO,CAAC,EAAGhc,GAAS9kB,GAAQ,gBAAgB,CAAC,CAAC,EAIzF,KAAM,QAKN,OAAQ,MAIR,MAAO,CAAC,UAAW,UAAW,WAAY,eAAe,EAIzD,SAAU,CACNH,GACAijC,GACA0B,GAAY,YAAa,mBAAmB,CAC/C,CACL,EAMM/lC,GAAO,CAIT,OAAQgiC,GAAMvP,GAAQ0P,GAAM,QAAQ,EAAGD,GAAM4B,EAAK,SAAU,OAAO,EAAG/8B,GAAQ,EAAEk8B,GAAW,EAAEE,GAASD,GAASY,EAAK,UAAU,EAAGV,GAAS,YAAY,EAAGsD,GAAI,sBAAuBrD,GAAWS,EAAK,YAAY,EAAG,kBAAkB,CAAC,CAAC,CAAC,EAAG4C,GAAI,oBAAqBrD,GAAW,qBAAqB,CAAC,EAAGC,GAAQQ,EAAK,SAAS,EAAG,mBAAmB,EAAG1B,KAAU0B,EAAK,QAAQ,CAAC,CAAC,EAAGzB,GAAK,OAAO,EAAGhc,GAAS9kB,GAAQ,gBAAgB,CAAC,CAAC,EAIra,KAAM,QAKN,OAAQ,OAIR,MAAO,CAAE,EAIT,SAAU,CACNmjC,GACAqB,GAAY,WAAY,UAAU,EAClCA,GAAY,aAAc,YAAY,EACtCA,GAAY,UAAW,SAAS,CACnC,CACL,EAMMoB,GAAO,CAIT,OAAQ5D,GAAU,iBAAkBld,GAAS9kB,GAAQ,gBAAgB,CAAC,EAAGiiC,GAAQC,GAAW,CAAE,CAAC,EAI/F,KAAM,QAIN,MAAO,CACH,UACA,SACA,cACA,cACA,iBACA,mBACH,EAID,SAAU,CAACsB,GAAQT,EAAQ,CAC/B,EAMM8C,GAAQ,CAIV,OAAQtK,GAAS,gBAAgB,EAIjC,KAAM,QAIN,MAAO,CAAE,EAIT,SAAU,CAACwH,EAAQ,CACvB,EAMM+C,GAAS,CAIX,OAAQL,GAAMtD,IAAW,EAIzB,KAAM,QAIN,MAAO,CAAE,EAIT,SAAU,CAAE,CAChB,EAMM9jC,GAAO,CAIT,OAAQk9B,GAAS,gBAAgB,EAIjC,KAAM,OAIN,MAAO,CAAE,EAIT,SAAU,CAACwH,EAAQ,CACvB,EAMMgD,GAAQ,CAIV,OAAQtF,GAAM0E,GAAI,wBAIlB9D,GAAWV,GAAMn7B,GAAM,EAAIy7B,GAAK,EAAED,GAAUuB,EAAK,WAAW,CAAC,EAAG1B,GAAQ,CAAA,EAAGsE,GAAI,SAAU5D,GAAS,QAAQ,CAAC,CAAC,EAI5GR,GAASG,GAAO,QAAQ,EAAGJ,GAAK,OAAO,EAAGM,GAAWD,GAAUE,GAAWV,GAAMn7B,GAAQ,EAAE+/B,GAAQtE,GAAG,EAAI,CACrG,KAAM,gBACN,MAAO,CACH,GAAI,mBACJ,MAAO,gBACP,QAAS,+BACZ,CACT,CAAK,EAAGD,GAAUuB,EAAK,WAAW,CAAC,EAAG1B,GAAQ,CAAA,EAAGsE,GAAI,gBAAiB5D,GAAS,eAAe,CAAC,CAAC,EAAGD,GAAQ,cAAc,CAAC,CAAC,CAAC,CAAC,EAEzH6D,GAAI,kCAAmCrE,GAAK,OAAO,CAAC,EAAGhc,GAAS9kB,GAAQ,gBAAgB,CAAC,CAAC,EAI1F,KAAM,QAKN,OAAQ,MAIR,MAAO,CAAC,UAAW,UAAW,WAAY,eAAe,EAIzD,SAAU,CAACH,GAASgkC,GAAQW,GAAY,YAAa,gBAAgB,CAAC,CAC1E,EAMMlK,GAAS,CAIX,OAAQmG,GAAMvP,GAAQ0P,GAAM,QAAQ,EAAGD,GAAM4B,EAAK,QAAQ,EAAG/8B,GAAM,EAAI48B,GAAc+C,GAAI,iBAAkB,IAAM,iBAAkBA,GAAI,gBAAiB9C,GAAYjC,GAAO,eAAe,CAAC,CAAC,CAAC,EAAG+E,GAAI,gCAAiC,IAAM,GAAI5C,EAAK,QAAQ,CAAC,EAAG1B,GAAQ,EAAE0B,EAAK,QAAQ,CAAC,CAAC,EAAGzB,GAAK,OAAO,EAAGhc,GAAS9kB,GAAQ,gBAAgB,CAAC,CAAC,EAI9U,KAAM,QAIN,MAAO,CAAC,UAAW,cAAe,eAAe,EAIjD,SAAU,CAACH,GAASwkC,GAAUG,GAAY,SAAU,QAAQ,CAAC,CACjE,EAMMwB,GAAW,CAIb,OAAQvF,GAAMvP,GAAQ0P,GAAM,QAAQ,EAAGD,GAAM4B,EAAK,SAAU,OAAO,EAAG/8B,GAAM,EAAI88B,KAAiBzB,KAAU0B,EAAK,QAAQ,CAAC,CAAC,EAAGzB,GAAK,OAAO,EAAGhc,GAAS9kB,GAAQ,gBAAgB,CAAC,CAAC,EAI/K,KAAM,QAIN,MAAO,CAAE,EAIT,SAAU,CAAC0jC,EAAY,CAC3B,EAMM3mB,EAAO,CAIT,OAAQ0jB,GAAMvP,GAAQ0P,GAAM,QAAQ,EAAGD,GAAM4B,EAAK,SAAU,OAAO,EAAG/8B,GAAM,EAAI28B,KAAatB,KAAU0B,EAAK,QAAQ,CAAC,CAAC,EAAGzB,GAAK,OAAO,EAAGhc,GAAS9kB,GAAQ,gBAAgB,CAAC,CAAC,EAI3K,KAAM,QAKN,OAAQ,OAIR,MAAO,CAAE,EAIT,SAAU,CAAE,CAChB,EAEA,IAAIG,GAAqB,OAAO,OAAO,CACnC,UAAW,KACX,OAAQulC,GACR,OAAQA,GACR,SAAUC,GACV,KAAMlnC,GACN,KAAMmnC,GACN,MAAOC,GACP,OAAQC,GACR,KAAMznC,GACN,MAAO0nC,GACP,OAAQzL,GACR,SAAU0L,GACV,KAAMjpB,EACN,MAAOA,EACP,KAAMA,EACN,cAAeA,EACf,MAAOA,EACP,MAAOA,EACP,OAAQA,EACR,SAAUA,EACV,OAAQA,EACR,IAAKA,EACL,KAAMA,EACN,IAAKA,EACL,KAAMA,EACN,MAAOA,CACX,CAAC,ECppDD,MAAMkpB,GAAW,SAAkB,CAAE,MAAAtkC,GAAS,CAC1C,MAAO,CAAC,MAAO,KAAM,IAAK,EAAG,GAAM,MAAM,EAAE,SAASA,CAAK,CAC7D,EACAskC,GAAS,UAAY,GAQrB,MAAMC,GAAa,SAAU,CAAE,MAAAvkC,GAASwkC,EAAU,GAAO,CACrD,MAAMC,EAAY,KAAK,MAAMD,GAAW,IAAI,IAAM,EAC5CE,EAAa,KAAK,MAAM,OAAO1kC,CAAK,CAAC,EAC3C,OAAO,MAAM0kC,CAAU,EAAI,GAAQA,EAAaD,CACpD,EAOME,GAAQ,SAAU,CAAE,MAAA3kC,GAAS6hB,EAAM,UAAW,CAChD,MAAMG,EAAO,CACT,QAAS,yDACT,MAAO,aACf,EACU4iB,EAAcza,EAAInI,EAAMH,CAAG,EAAIA,EAAM,UAC3C,OAAOG,EAAK4iB,GAAa,KAAK,OAAO5kC,CAAK,CAAC,CAC/C,EAOM6kC,GAAe,SAAU,CAAE,MAAA7kC,GAAS6hB,EAAM,UAAW,CACvD,MAAMG,EAAO,CACT,QAAS,0DACT,MAAO,cACf,EACU4iB,EAAcza,EAAInI,EAAMH,CAAG,EAAIA,EAAM,UAC3C,OAAOG,EAAK4iB,GAAa,KAAK,OAAO5kC,CAAK,CAAC,CAC/C,EAOM8kC,GAAe,SAAU,CAAE,MAAA9kC,GAAS6hB,EAAM,UAAW,CACvD,MAAMG,EAAO,CACT,QAAS,0CACT,MAAO,gBACf,EACU4iB,EAAcza,EAAInI,EAAMH,CAAG,EAAIA,EAAM,UAC3C,OAAOG,EAAK4iB,GAAa,KAAK,OAAO5kC,CAAK,CAAC,CAC/C,EAOM+kC,GAAc,SAAU,CAAE,MAAA/kC,GAASwkC,EAAU,GAAO,CACtD,MAAMC,EAAY,KAAK,MAAMD,GAAW,IAAI,IAAM,EAC5CE,EAAa,KAAK,MAAM,OAAO1kC,CAAK,CAAC,EAC3C,OAAO,MAAM0kC,CAAU,EAAI,GAAQA,EAAaD,CACpD,EAOMO,GAAU,SAAiB,CAAE,MAAAhlC,CAAK,EAAIs3B,EAAM2N,EAAI,CAClD,GAAI,CAAC,MAAMjlC,CAAK,GAAK,CAAC,MAAMs3B,CAAI,GAAK,CAAC,MAAM2N,CAAE,EAAG,CAC7C,MAAMvlC,EAAM,EAAIM,EAChBs3B,EAAO,OAAOA,CAAI,EAClB2N,EAAK,OAAOA,CAAE,EACd,KAAM,CAAClhC,EAAGC,CAAC,EAAIszB,GAAQ2N,EAAK,CAAC3N,EAAM2N,CAAE,EAAI,CAACA,EAAI3N,CAAI,EAClD,OAAO53B,GAAO,EAAIqE,GAAKrE,GAAO,EAAIsE,CACrC,CACD,MAAO,EACX,EAEMkhC,GAAa,qBAMbC,GAAU,SAAiBjzB,EAAMigB,EAASiT,EAAa,QAAS,CAClE,IAAI18B,EACCypB,IACDA,EAAU+S,GAAW,KAAKhzB,EAAK,IAAI,EAC7BA,EAAK,KAAK,QAAQgzB,GAAY,EAAE,EAChC,GAAGhzB,EAAK,gBAElB,MAAMmzB,GAAgB38B,EAAKwJ,EAAK,GAAGigB,CAAO,KAAO,MAAQzpB,IAAO,OAAS,OAASA,EAAG,MACrF,OAAO08B,IAAe,SAChBlzB,EAAK,QAAUmzB,EACfnzB,EAAK,OAASmzB,CACxB,EAOMC,GAAe,SAAsB,CAAE,MAAAtlC,CAAK,EAAIulC,EAAOC,EAAO,CAChED,EAAQA,aAAiB,KAAOA,EAAM,QAAO,EAAK,KAAK,MAAMA,CAAK,EAClEC,EAAQA,aAAiB,KAAOA,EAAM,QAAO,EAAK,KAAK,MAAMA,CAAK,EAClE,MAAMC,EAAYzlC,aAAiB,KAAOA,EAAM,UAAY,KAAK,MAAM,OAAOA,CAAK,CAAC,EACpF,GAAIulC,GAAS,CAACC,EACVA,EAAQD,EACRA,EAAQ,KAAK,cAER,CAACA,GAAS,CAACE,EAChB,MAAO,GAEX,OAAOA,GAAaF,GAASE,GAAaD,CAC9C,EAOME,GAAc,SAAc,CAAE,MAAA1lC,CAAK,EAAIgrB,EAAQ,CACjD,OAAIA,GAAU,OAAOA,GAAW,SACrBD,GAAeC,CAAM,EAAE,KAAK,OAAOhrB,CAAK,CAAC,EAE7C,CAAC,MAAM,KAAK,MAAM,OAAOA,CAAK,CAAC,CAAC,CAC3C,EAOM2lC,GAAQ,SAAe,CAAE,MAAA3lC,GAAS,CAEpC,MADgB,yHACD,KAAK,OAAOA,CAAK,CAAC,CACrC,EAOM4lC,GAAY,SAAmB,CAAE,MAAA5lC,CAAO,KAAKu5B,EAAO,CACtD,OAAI,OAAOv5B,GAAU,UAAYu5B,EAAM,OAC5BA,EAAM,KAAM7mB,GACR1S,EAAM,SAAS0S,CAAI,CAC7B,EAEI,OAAO1S,GAAU,UAAYu5B,EAAM,SAAW,CAI3D,EAOMsM,GAAK,SAAY,CAAE,MAAA7lC,CAAO,KAAKu5B,EAAO,CACxC,OAAOA,EAAM,KAAM7mB,GACX,OAAOA,GAAS,SACT4X,GAAG5X,EAAM1S,CAAK,EAElB0S,GAAQ1S,CAClB,CACL,EAOMwO,GAAS,SAAgB,CAAE,MAAAxO,CAAK,EAAIy4B,EAAQ,EAAGqN,EAAS,IAAU,CACpErN,EAAQ,SAASA,CAAK,EACtBqN,EAAS,MAAM,SAASA,CAAM,CAAC,EAAI,IAAW,SAASA,CAAM,EAC7D,MAAM/0B,EAAM0nB,GAASqN,EAASrN,EAAQqN,EAChC90B,EAAM80B,GAAUrN,EAAQqN,EAASrN,EACvC,GAAI,OAAOz4B,GAAU,UAAY,MAAM,QAAQA,CAAK,EAChD,OAAOA,EAAM,QAAU+Q,GAAO/Q,EAAM,QAAUgR,EAE7C,GAAIhR,GAAS,OAAOA,GAAU,SAAU,CACzC,MAAMwO,EAAS,OAAO,KAAKxO,CAAK,EAAE,OAClC,OAAOwO,GAAUuC,GAAOvC,GAAUwC,CACrC,CACD,MAAO,EACX,EAOM6nB,GAAU,SAAiB,CAAE,MAAA74B,CAAO,KAAKu5B,EAAO,CAClD,OAAOA,EAAM,KAAMwM,IACX,OAAOA,GAAY,UACnBA,EAAQ,OAAO,EAAG,CAAC,IAAM,KACzBA,EAAQ,OAAO,EAAE,IAAM,MACvBA,EAAU,IAAI,OAAOA,EAAQ,OAAO,EAAGA,EAAQ,OAAS,CAAC,CAAC,GAE1DA,aAAmB,OACZA,EAAQ,KAAK,OAAO/lC,CAAK,CAAC,EAE9B+lC,IAAY/lC,EACtB,CACL,EAOMgR,GAAM,SAAa,CAAE,MAAAhR,CAAK,EAAIgmC,EAAU,GAAI,CAC9C,OAAI,MAAM,QAAQhmC,CAAK,EACZA,EAAM,QAAUgmC,EAEpB,OAAOhmC,CAAK,GAAK,OAAOgmC,CAAO,CAC1C,EAOMj1B,GAAM,SAAa,CAAE,MAAA/Q,CAAK,EAAIimC,EAAU,EAAG,CAC7C,OAAI,MAAM,QAAQjmC,CAAK,EACZA,EAAM,QAAUimC,EAEpB,OAAOjmC,CAAK,GAAK,OAAOimC,CAAO,CAC1C,EAOMC,GAAM,SAAa,CAAE,MAAAlmC,CAAO,KAAKu5B,EAAO,CAC1C,MAAO,CAACA,EAAM,KAAM7mB,GACZ,OAAOA,GAAS,SACT4X,GAAG5X,EAAM1S,CAAK,EAElB0S,IAAS1S,CACnB,CACL,EAOMmmC,GAAS,SAAgB,CAAE,MAAAnmC,GAAS,CACtC,MAAO,CAAC,MAAMA,CAAK,CACvB,EAOMomC,GAAW,SAAkB,CAAE,MAAApmC,CAAK,EAAI84B,EAAS,UAAW,CAC9D,OAAOA,IAAW,QAAU,OAAO94B,GAAU,SACvC,CAAC2qB,GAAM3qB,EAAM,MAAM,EACnB,CAAC2qB,GAAM3qB,CAAK,CACtB,EAIAomC,GAAS,UAAY,GAOrB,MAAMC,GAAc,SAAqB,CAAE,MAAArmC,CAAO,KAAKu5B,EAAO,CAC1D,OAAI,OAAOv5B,GAAU,UAAYu5B,EAAM,OAC5BA,EAAM,KAAM7mB,GACR1S,EAAM,WAAW0S,CAAI,CAC/B,EAEI,OAAO1S,GAAU,UAAYu5B,EAAM,SAAW,CAI3D,EAOM3+B,GAAM,SAAa,CAAE,MAAAoF,CAAO,KAAKu5B,EAAO,CAC1C,GAAI,CACA,MAAM+M,EAAY/M,EAAM,OAASA,EAAQ,CAAC,QAAS,QAAQ,EACrD3+B,EAAM,IAAI,IAAI,OAAOoF,CAAK,CAAC,EACjC,OAAOsmC,EAAU,SAAS1rC,EAAI,QAAQ,CACzC,MACD,CACI,MAAO,EACV,CACL,yVCtTM2rC,GAAmB,IAAI,QAO7B,SAASC,GAAet0B,EAAMu0B,EAAc,CAExC,MAAMC,EAAOD,GAAgB,OAAO,OAAO,IAAI,IAAO,CAAE,OAAQ,EAAK,CAAE,EAEjErX,EAAW,IAAI,IAKfuX,EAAgB,SAAU5nC,EAAO,CACnC,IAAI2J,EACA,CAACg+B,EAAK,SAELA,EAAK,IAAIx0B,CAAI,GACdw0B,EAAK,IAAIx0B,EAAM,IAAI,GAAK,GAC3BxJ,EAAKg+B,EAAK,IAAIx0B,CAAI,KAAO,MAAQxJ,IAAO,QAAkBA,EAAG,IAAI3J,CAAK,EAC/E,EAQU6nC,EAAe,SAAUzqC,EAAO,CAClC,OAAO,IAAI,MAAMA,EAAO,CACpB,OAAO0wB,EAAM,CACT,cAAOA,EAAK,IAAO,UAAY8Z,EAAc,QAAQ9Z,EAAK,IAAI,EACvD,QAAQ,IAAI,GAAGA,CAAI,CAC7B,CACb,CAAS,CACT,EAKUga,EAAgB,SAAUlU,EAAQ,CACpC,OAAO,IAAI,MAAMA,EAAQ,CACrB,OAAO9F,EAAM,CACT,OAAIA,EAAK,KAAO,QACJ1vB,IACJwpC,EAAc,SAASxpC,GAAK,EACrBw1B,EAAO,MAAMx1B,CAAG,GAGxB,QAAQ,IAAI,GAAG0vB,CAAI,CAC7B,CACb,CAAS,CACT,EAKUia,EAAU,SAAU9mC,EAAOqqB,EAAU,CACvC,OAAI/X,GAAOtS,CAAK,EACLwmC,GAAexmC,EAAO0mC,CAAI,GAEjCrc,IAAa,SACbsc,EAAc,QAAQ,EACtBtc,IAAa,QACNuc,EAAa5mC,CAAK,EACzBqqB,IAAa,SACNwc,EAAc7mC,CAAK,EACvBA,EACf,EAIU,CAAE,MAAO+mC,EAAU,OAAAC,CAAS,EAAG,MAAM,UAAU90B,EAAM,CACvD,OAAO2a,EAAM,CACT,OAAQA,EAAK,GAAE,CACX,IAAK,OACD,OAAO6Z,EACX,IAAK,QACD,OAAQO,GAAUn/B,GAAMi/B,EAAUE,CAAK,EAC3C,IAAK,UACD,MAAO,IAAM,CACT,MAAMC,EAAM,IAAI,IAAIR,CAAI,EACxB,OAAAA,EAAK,MAAK,EACVA,EAAK,OAAS,GACPQ,CAC/B,EACgB,IAAK,cACD,MAAO,IAAM,CACT,MAAMC,EAAU,IAAI,IAAIT,CAAI,EAC5B,OAAAA,EAAK,OAAS,GACPS,CAC/B,EACgB,IAAK,WACD,OAAO/X,EACX,IAAK,OACD,MAAO,IAAM,CACTgY,GAAgBhY,CAAQ,EACxBmX,GAAiB,IAAI1Z,EAAK,EAAE,EAC5Bma,GACxB,CACa,CACD,MAAMhnC,EAAQ,QAAQ,IAAI,GAAG6sB,CAAI,EAGjC,OAAI,OAAO7sB,GAAU,WACV,IAAIqnC,IAAY,CACnB,MAAMC,EAAWtnC,EAAM,GAAGqnC,CAAO,EACjC,OAAOP,EAAQQ,EAAUza,EAAK,EAAE,CACpD,EAEmBia,EAAQ9mC,EAAO6sB,EAAK,EAAE,CAChC,CACT,CAAK,EACD,OAAOka,CACX,CAQA,SAASQ,GAAer1B,EAAM,CAACs1B,EAAOta,CAAQ,EAAGnvB,EAAU,CACvDypC,EAAM,QAAQ,CAAC5X,EAAQ6X,IAAY,CAC/B7X,EAAO,QAAS7wB,GAAU,CACtBmT,EAAK,SAAS,IAAIu1B,CAAO,GAAKv1B,EAAK,SAAS,IAAIu1B,EAAS,CAAA,CAAE,EAC3Dv1B,EAAK,SAAS,IAAIu1B,EAAS,OAAO,OAAOv1B,EAAK,SAAS,IAAIu1B,CAAO,EAAG,CACjE,CAAC1oC,GAAQ0oC,EAAQ,GAAG1oC,EAAOhB,CAAQ,CACtC,CAAA,CAAC,CACd,CAAS,CACT,CAAK,EACDmvB,EAAS,QAAQ,CAAC0C,EAAQ6X,IAAY,CAClC7X,EAAO,QAAS7wB,GAAU,CACtB,GAAImT,EAAK,SAAS,IAAIu1B,CAAO,EAAG,CAC5B,MAAMC,EAAex1B,EAAK,SAAS,IAAIu1B,CAAO,EAC1CC,GAAgBvd,EAAIud,EAAc3oC,CAAK,IACvC0oC,EAAQ,IAAIC,EAAa3oC,EAAM,EAC/B,OAAO2oC,EAAa3oC,GACpBmT,EAAK,SAAS,IAAIu1B,EAASC,CAAY,EAE9C,CACb,CAAS,CACT,CAAK,CACL,CAMA,SAASN,GAAgBhY,EAAU,CAC/BA,EAAS,QAAQ,CAACQ,EAAQ1d,IAAS,CAC/B,UAAWnT,KAAS6wB,EAChB1d,EAAK,IAAI0d,EAAO7wB,EAAM,CAElC,CAAK,CACL,CAQA,eAAe+I,GAAMoK,EAAM+0B,EAAO,CAC9B,MAAMU,EAAU,IAAI,IAAIz1B,EAAK,IAAI,EACjCA,EAAK,QAAO,EACZ,MAAMmP,EAAM4lB,EAAM/0B,CAAI,EAClBmP,aAAe,SACf,MAAMA,EACV,MAAM8lB,EAAUj1B,EAAK,cACrBq1B,GAAer1B,EAAM01B,GAASD,EAASR,CAAO,EAAG,IAAMr/B,GAAMoK,EAAM+0B,CAAK,CAAC,CAC7E,CASA,SAASW,GAASjW,EAAU1C,EAAS,CACjC,MAAMuY,EAAQ,IAAI,IACZta,EAAW,IAAI,IACrB,OAAA+B,EAAQ,QAAQ,CAACW,EAAQ1d,IAAS,CAC9B,GAAI,CAACyf,EAAS,IAAIzf,CAAI,EAClBs1B,EAAM,IAAIt1B,EAAM0d,CAAM,MAErB,CACD,MAAMiY,EAAc,IAAI,IAClBC,EAAiBnW,EAAS,IAAIzf,CAAI,EACxC0d,EAAO,QAAS7wB,GAAU,CAAkE+oC,GAAe,IAAI/oC,CAAK,GAAM8oC,EAAY,IAAI9oC,CAAK,CAAC,EAChJyoC,EAAM,IAAIt1B,EAAM21B,CAAW,CAC9B,CACT,CAAK,EACDlW,EAAS,QAAQ,CAAC/B,EAAQ1d,IAAS,CAC/B,GAAI,CAAC+c,EAAQ,IAAI/c,CAAI,EACjBgb,EAAS,IAAIhb,EAAM0d,CAAM,MAExB,CACD,MAAMmY,EAAiB,IAAI,IACrBC,EAAY/Y,EAAQ,IAAI/c,CAAI,EAClC0d,EAAO,QAAS7wB,GAAU,CAAwDipC,GAAU,IAAIjpC,CAAK,GAAMgpC,EAAe,IAAIhpC,CAAK,CAAC,EACpImuB,EAAS,IAAIhb,EAAM61B,CAAc,CACpC,CACT,CAAK,EACM,CAACP,EAAOta,CAAQ,CAC3B,CAOA,SAAS+a,GAAS/1B,EAAM,CACpB,OAAOq0B,GAAiB,IAAIr0B,CAAI,CACpC,CCzNA,MAAMg2B,GAAoB1X,GAAc,CACpC,KAAM,QACN,SAAU,GACV,QAAS,GACT,MAAO,GACP,IAAK,YACT,CAAC,EAMD,SAAS2X,GAAuBC,EAAY,GAAI,CAC5C,OAAO,SAA0Bl2B,EAAM,CACnC,IAAIm2B,EAAiB,CACjB,GAAGD,EACH,GAAGja,GAASjc,EAAK,MAAM,eAAe,CAClD,EAEYo2B,EAAe9B,GAAet0B,CAAI,EACtC,MAAMq2B,EAAQ,CAAE,MAAOxe,GAAK,EAAI,MAAO,KAAM,UAAW,IACxD,IAAIye,EAAara,GAASjc,EAAK,MAAM,UAAU,EAE/CA,EAAK,GAAG,kBAAmB,CAAC,CAAE,QAAA8c,CAAS,IAAKyZ,EAAOzZ,EAASqZ,CAAc,CAAC,EAC3En2B,EAAK,GAAG,uBAAwB,CAAC,CAAE,QAAA8c,CAAS,IAAKyZ,EAAOD,EAAYxZ,CAAO,CAAC,EAO5E,SAASyZ,EAAOC,EAAeC,EAAU,CACjCre,GAAG+d,EAAgBM,CAAQ,GAAKre,GAAGke,EAAYE,CAAa,IAEhEF,EAAara,GAASua,CAAa,EACnCL,EAAiB,CAAE,GAAGD,EAAW,GAAGja,GAASjc,EAAK,MAAM,eAAe,GAEvEk1B,GAAgBkB,EAAa,QAAQ,EAErCp2B,EAAK,MAAM,OAAO,IAAM,GAAO,YAAY,EAC3CA,EAAK,MAAM,YAAc02B,GAAWF,EAAeL,CAAc,EACjEC,EAAa,KAAI,EACjBA,EAAe9B,GAAet0B,CAAI,EAClC22B,GAASP,EAAcp2B,EAAK,MAAM,YAAaq2B,CAAK,EACvD,CAEDr2B,EAAK,MAAM,YAAc02B,GAAWJ,EAAYH,CAAc,EAC9DQ,GAASP,EAAcp2B,EAAK,MAAM,YAAaq2B,CAAK,CAC5D,CACA,CAQA,SAASM,GAAS32B,EAAM42B,EAAaP,EAAO,CACpCN,GAAS/1B,CAAI,IAEjBq2B,EAAM,MAAQxe,KACdwe,EAAM,UAAY,GAClBr2B,EAAK,MAAM,OAAQ7T,GAAY,CAACA,EAAQ,KAAK,kBAAmB,YAAY,EAC5EyqC,EAAY,QAASN,GAAeA,EAAW,UAAY,aAAaA,EAAW,KAAK,CAAC,EACrFM,EAAY,SACZ52B,EAAK,MAAM,IAAIg2B,EAAiB,EAChC7P,GAAI,EAAGyQ,EAAa52B,EAAMq2B,EAAO,GAAO,IAAM,CAC1Cr2B,EAAK,MAAM,OAAOg2B,GAAkB,GAAG,CACnD,CAAS,GAET,CAYA,SAAS7P,GAAIpJ,EAAS6Z,EAAa52B,EAAMq2B,EAAOQ,EAAmB3+B,EAAU,CACzE,MAAMo+B,EAAaM,EAAY7Z,GAC/B,GAAI,CAACuZ,EACD,OAAOp+B,EAAQ,EACnB,MAAM4+B,EAAaT,EAAM,MACzBC,EAAW,MAAQ,KACnB,SAASr+B,EAAK+sB,EAAOl4B,EAAQ,CACzBupC,EAAM,UAAYA,EAAM,WAAa,CAAC,CAACvpC,EACvCwpC,EAAW,OAAS,GACpB,MAAMrB,EAAUj1B,EAAK,cACrBq1B,GAAer1B,EAAM01B,GAASY,EAAW,KAAMrB,CAAO,EAAG,IAAM,CAC3DqB,EAAW,OAAS,GAChBD,EAAM,OACN,aAAaA,EAAM,KAAK,EAC5BA,EAAM,MAAQ,WAAWM,GAAU,EAAG32B,EAAM42B,EAAaP,CAAK,CAC1E,CAAS,EACDC,EAAW,KAAOrB,EACdoB,EAAM,QAAUS,IAChBR,EAAW,MAAQxpC,EACfA,IAAW,GACXiqC,GAAoB/2B,EAAMs2B,EAAYO,GAAqB7R,CAAK,EAGhErG,GAAc3e,EAAMs2B,CAAU,EAE9BM,EAAY,OAAS7Z,EAAU,EAC/BoJ,GAAIpJ,EAAU,EAAG6Z,EAAa52B,EAAMq2B,EAAOQ,GAAqB7R,EAAO9sB,CAAQ,EAI/EA,IAGX,EACI,CAACugB,GAAMzY,EAAK,KAAK,GAAK,CAACs2B,EAAW,aAClCD,EAAM,WAAaC,EAAW,OAC3BA,EAAW,OACXU,GAAQV,EAAYt2B,EAAOlT,GAAW,CAClCA,aAAkB,QACZA,EAAO,KAAMwH,GAAM2D,EAAK,GAAM3D,CAAC,CAAC,EAChC2D,EAAK,GAAOnL,CAAM,CACxC,CAAa,EAMDq5B,GAAIpJ,EAAU,EAAG6Z,EAAa52B,EAAMq2B,EAAOQ,EAAmB3+B,CAAQ,EAQtEugB,GAAMzY,EAAK,KAAK,GAAKs2B,EAAW,WAAaD,EAAM,WAInDr2B,EAAK,QAAO,EACZA,EAAK,MAKL/H,EAAK,GAAOo+B,EAAM,SAAS,GAG3Bp+B,EAAK,GAAO,IAAI,CAG5B,CAKA,SAAS++B,GAAQV,EAAYt2B,EAAMi3B,EAAO,CAClCX,EAAW,SACXA,EAAW,MAAQ,WAAW,IAAM,CAChCt2B,EAAK,QAAO,EACZi3B,EAAMX,EAAW,KAAKt2B,EAAM,GAAGs2B,EAAW,IAAI,CAAC,CAC3D,EAAWA,EAAW,QAAQ,GAGtBt2B,EAAK,QAAO,EACZi3B,EAAMX,EAAW,KAAKt2B,EAAM,GAAGs2B,EAAW,IAAI,CAAC,EAEvD,CAQA,SAAS3X,GAAc3e,EAAMs2B,EAAY,CACrC,MAAMrrC,EAAM,QAAQqrC,EAAW,OAC3Bre,EAAIjY,EAAK,MAAO/U,CAAG,GACnB+U,EAAK,MAAM,OAAO/U,CAAG,CAE7B,CAMA,SAAS8rC,GAAoB/2B,EAAMs2B,EAAYO,EAAmB,CAC9D,MAAMK,EAAWC,GAAen3B,EAAMs2B,CAAU,EAC1Cc,EAAgBC,GAAoBr3B,EAAMs2B,EAAYY,CAAQ,EAE9D/qC,EAAUmyB,GAAc,CAC1B,SAAUgY,EAAW,SACrB,IAAK,QAAQA,EAAW,OACxB,KAAM,CAKF,WAAYA,EAAW,KAMvB,kBAAAO,EAIA,SAAU,CAACO,EAIX,SAAAF,CACH,EACD,KAAM,aACN,MAAOE,GAAiB,0BAChC,CAAK,EACD,OAAAp3B,EAAK,MAAM,IAAI7T,CAAO,EACfA,CACX,CAMA,SAASkrC,GAAoBr3B,EAAMs2B,EAAYY,EAAU,CACrD,MAAME,EAAgBp3B,EAAK,MAAM,oBAC7BiY,EAAIjY,EAAK,MAAM,mBAAoBs2B,EAAW,IAAI,EAChDt2B,EAAK,MAAM,mBAAmBs2B,EAAW,MACzC,OACN,OAAI,OAAOc,GAAkB,WAClBA,EAAc,GAAGF,CAAQ,EAE7BE,CACX,CAMA,SAASD,GAAen3B,EAAMs2B,EAAY,CAEtC,MAAO,CACH,CACI,KAAAt2B,EACA,KAAMs3B,GAAkBt3B,CAAI,EAC5B,KAAMs2B,EAAW,IACpB,CACT,CACA,CAMA,SAASgB,GAAkBt3B,EAAM,CAC7B,OAAI,OAAOA,EAAK,MAAM,iBAAoB,WAC/BA,EAAK,MAAM,gBAAgBA,CAAI,EAElCA,EAAK,MAAM,iBACfA,EAAK,MAAM,OACXA,EAAK,MAAM,MACX,OAAOA,EAAK,IAAI,CACxB,CAIA,MAAMu3B,GAAc,oBAKdC,GAAc,wBAIdC,GAAgB,IAAI,OAAO,KAAKF,MAAeC,oBAA8B,GAAG,EAKhFE,GAAgB,IAAI,OAAO,KAAKH,OAAgBC,OAAiB,GAAG,EAKpEG,GAAoB,gCAIpBC,GAAc,UAIdC,GAAe,CACjB,SAAU,GACV,SAAU,EACV,MAAO,GACP,UAAW,GACX,KAAM,EACV,EAMA,SAASnB,GAAWJ,EAAYwB,EAAO,CACnC,OAAKxB,GAEW,OAAOA,GAAe,SAChCyB,GAAazB,CAAU,EACvBva,GAAMua,CAAU,GACP,OAAO,CAACM,EAAajc,IAAS,CACzC,IAAIqd,EAAOrd,EAAK,QAChB,MAAMsd,EAAQ,CAAA,EACd,GAAI,OAAOD,GAAS,SAAU,CAC1B,KAAM,CAACE,EAAUC,CAAW,EAAIC,GAAWJ,CAAI,EAC3C/f,EAAI6f,EAAOI,CAAQ,IACnBF,EAAOF,EAAMI,GACb,OAAO,OAAOD,EAAOE,CAAW,EAEvC,CACD,OAAI,OAAOH,GAAS,YAChBpB,EAAY,KAAK,CACb,KAAAoB,EACA,KAAArd,EACA,MAAO,EACP,MAAO,KACP,OAAQ,GACR,KAAM,IAAI,IACV,GAAGkd,GACH,GAAGQ,GAAQJ,EAAOD,CAAI,CACtC,CAAa,EAEEpB,CACV,EAAE,CAAE,CAAA,EA3BM,EA4Bf,CAMA,SAASmB,GAAazB,EAAY,CAC9B,OAAOA,EAAW,MAAM,GAAG,EAAE,OAAO,CAACwB,EAAOE,IAAS,CACjD,MAAMM,EAAaC,GAAUP,CAAI,EACjC,OAAIM,GACAR,EAAM,KAAKQ,CAAU,EAElBR,CACV,EAAE,CAAE,CAAA,CACT,CAMA,SAASS,GAAUP,EAAM,CACrB,MAAMQ,EAAUR,EAAK,OACrB,GAAIQ,EAAS,CACT,MAAM7R,EAAU6R,EAAQ,MAAMf,EAAa,EAC3C,GAAI9Q,GAAW,OAAOA,EAAQ,IAAO,SAAU,CAC3C,MAAMuR,EAAWvR,EAAQ,GAAG,KAAI,EAC1BhM,EAAOgM,EAAQ,IAAM,OAAOA,EAAQ,IAAO,SAC3CA,EAAQ,GAAG,MAAM,GAAG,EAAE,IAAKx4B,GAAMA,EAAE,MAAM,EACzC,GACN,MAAO,CAAC+pC,EAAU,GAAGvd,CAAI,CAC5B,CACJ,CACD,MAAO,EACX,CAMA,SAASyd,GAAWF,EAAU,CAC1B,MAAMvR,EAAUuR,EAAS,MAAMR,EAAa,EAC5C,GAAI,CAAC/Q,EACD,MAAO,CAACuR,EAAU,CAAE,KAAMA,CAAU,CAAA,EAExC,MAAMO,EAAM,CACR,IAAK,CAAE,MAAO,EAAM,EACpB,IAAK,CAAE,UAAW,EAAO,EACzB,IAAK,CAAE,SAAU,EAAO,CAChC,EACU,EAAGR,EAAOD,CAAI,EAAIrR,EAClB+R,EAAad,GAAY,KAAKK,CAAK,EACnCA,EAAM,MAAMN,EAAiB,GAAK,CAAE,EACpC,CAAA,CAAGM,CAAK,EACd,MAAO,CACHD,EACA,CAACU,EAAW,GAAIA,EAAW,GAAIA,EAAW,EAAE,EAAE,OAAO,CAACT,EAAOjG,KACpDA,IAED4F,GAAY,KAAK5F,CAAK,EACtBiG,EAAM,SAAW,SAASjG,EAAM,OAAO,EAAGA,EAAM,OAAS,CAAC,CAAC,EAG3DA,EACK,MAAM,EAAE,EACR,QAAS2G,GAAS1gB,EAAIwgB,EAAKE,CAAI,GAAK,OAAO,OAAOV,EAAOQ,EAAIE,EAAK,CAAC,GAErEV,GACR,CAAE,KAAMD,EAAM,CACzB,CACA,CASA,SAASK,GAAQO,EAAeZ,EAAM,CAClC,OAAKY,EAAc,OACfA,EAAc,KAAOZ,EAAK,UAAYA,EAAK,MAExC,CAAC,YAAa,QAAS,WAAY,UAAU,EAAE,OAAO,CAACC,EAAOU,KAC7D1gB,EAAI+f,EAAMW,CAAI,GAAK,CAAC1gB,EAAIggB,EAAOU,CAAI,GACnC,OAAO,OAAOV,EAAO,CACjB,CAACU,GAAOX,EAAKW,EAC7B,CAAa,EAEEV,GACRW,CAAa,CACpB,CC3aA,SAASC,EAAS9e,EAAK,CACnB,OAAOA,EAAI,GAAG,YAAa,EAAGA,EAAI,OAAO,CAAC,CAC9C,CAQA,SAASvvB,GAAKsuC,EAAOC,EAAc,KAAM,CACrC,OAAOD,EAAM,OAAO,CAACE,EAAQx4B,EAAMlU,KAC/B0sC,GAAUx4B,EACNlU,GAASwsC,EAAM,OAAS,GAAKA,EAAM,OAAS,IAC5CE,GAAU,MAEV1sC,IAAUwsC,EAAM,OAAS,IACzBE,GAAU,GAAGF,EAAM,SAAW,EAAI,IAAM,KAAKC,MAE1CC,GACR,EAAE,CACT,CAMA,SAASC,GAAKA,EAAM,CAChB,MAAMC,EAAW,OAAOD,GAAS,SAAW,IAAI,KAAK,KAAK,MAAMA,CAAI,CAAC,EAAIA,EACzE,OAAMC,aAAoB,KAGnB,IAAI,KAAK,eAAe,OAAW,CACtC,UAAW,QACnB,CAAK,EAAE,OAAOA,CAAQ,EAJP,WAKf,CAQA,SAASC,GAAM5S,EAAOqN,EAAQ,CAC1B,OAAO,OAAOrN,CAAK,GAAK,OAAOqN,CAAM,EAAI,CAACA,EAAQrN,CAAK,EAAI,CAACA,EAAOqN,CAAM,CAC7E,CAouEA,MAAMwF,GAAO,CAIT,IAAK,MAIL,OAAQ,SAIR,UAAW,aAIX,WAAY,kDAIZ,OAAQ,SAIR,QAAS,iBAIT,OAAQ,UAIR,SAAU,YAIV,UAAW,aAIX,SAAU,WACd,EAKMC,GAAe,CAKjB,SAAS,CAAE,KAAAluC,GAAQ,CAEf,MAAO,qBAAqBA,IAE/B,EAKD,WAAW,CAAE,KAAAA,EAAM,KAAAwvB,GAAQ,CACvB,OAAI,MAAM,QAAQA,CAAI,GAAKA,EAAK,OAErB,GAAGke,EAAS1tC,CAAI,mBAAmB8tC,GAAKte,EAAK,EAAE,KAInD,GAAGke,EAAS1tC,CAAI,0BAE1B,EAKD,MAAM,CAAE,KAAAA,GAAQ,CAEZ,MAAO,GAAG0tC,EAAS1tC,CAAI,6CAE1B,EAKD,aAAa,CAAE,KAAAA,GAAQ,CAEnB,MAAO,GAAG0tC,EAAS1tC,CAAI,yCAE1B,EAKD,aAAa,CAAE,KAAAA,GAAQ,CAEnB,MAAO,GAAG0tC,EAAS1tC,CAAI,wCAE1B,EAKD,YAAY,CAAE,KAAAA,EAAM,KAAAwvB,GAAQ,CACxB,OAAI,MAAM,QAAQA,CAAI,GAAKA,EAAK,OAErB,GAAGke,EAAS1tC,CAAI,oBAAoB8tC,GAAKte,EAAK,EAAE,KAIpD,GAAGke,EAAS1tC,CAAI,wBAE1B,EAKD,QAAQ,CAAE,KAAAA,EAAM,KAAAwvB,GAAQ,CACpB,GAAI,MAAMA,EAAK,EAAE,GAAK,MAAMA,EAAK,EAAE,EAE/B,MAAO,gEAGX,KAAM,CAAC9oB,EAAGC,CAAC,EAAIqnC,GAAMxe,EAAK,GAAIA,EAAK,EAAE,EAErC,MAAO,GAAGke,EAAS1tC,CAAI,qBAAqB0G,SAASC,IAExD,EAKD,QAAQ,CAAE,KAAA3G,GAAQ,CAEd,MAAO,GAAG0tC,EAAS1tC,CAAI,mBAE1B,EAKD,YAAY,CAAE,KAAAA,EAAM,KAAAwvB,GAAQ,CACxB,OAAI,MAAM,QAAQA,CAAI,GAAKA,EAAK,OAErB,GAAGke,EAAS1tC,CAAI,gDAAgDwvB,EAAK,KAIzE,8DAEV,EAKD,aAAa,CAAE,KAAAxvB,EAAM,KAAAwvB,GAAQ,CAEzB,MAAO,GAAGke,EAAS1tC,CAAI,qBAAqB8tC,GAAKte,EAAK,EAAE,SAASse,GAAKte,EAAK,EAAE,GAEhF,EAKD,MAAO,sCAKP,UAAU,CAAE,KAAAxvB,EAAM,KAAAwvB,GAAQ,CAEtB,MAAO,GAAGke,EAAS1tC,CAAI,sBAAsBX,GAAKmwB,CAAI,IAEzD,EAKD,GAAG,CAAE,KAAAxvB,GAAQ,CAET,MAAO,GAAG0tC,EAAS1tC,CAAI,4BAE1B,EAKD,OAAO,CAAE,KAAAA,EAAM,KAAM,CAACo7B,EAAQ,EAAGqN,EAAS,GAAQ,GAAK,CACnD,MAAM/0B,EAAM,OAAO0nB,CAAK,GAAK,OAAOqN,CAAM,EAAIrN,EAAQqN,EAChD90B,EAAM,OAAO80B,CAAM,GAAK,OAAOrN,CAAK,EAAIqN,EAASrN,EACvD,OAAI1nB,GAAO,GAAKC,IAAQ,IAEb,GAAG+5B,EAAS1tC,CAAI,oCAGvB0T,GAAO,GAAKC,EAEL,GAAG+5B,EAAS1tC,CAAI,mCAAmC2T,gBAG1DD,IAAQC,EAED,GAAG+5B,EAAS1tC,CAAI,eAAe2T,qBAGtCD,GAAOC,IAAQ,IAER,GAAG+5B,EAAS1tC,CAAI,sCAAsC0T,gBAI1D,GAAGg6B,EAAS1tC,CAAI,qBAAqB0T,SAAWC,eAE1D,EAKD,QAAQ,CAAE,KAAA3T,GAAQ,CAEd,MAAO,GAAG0tC,EAAS1tC,CAAI,4BAE1B,EAKD,IAAI,CAAE,KAAAA,EAAM,KAAM,CAAE,MAAA2C,CAAK,EAAI,KAAA6sB,GAAQ,CACjC,OAAI,MAAM,QAAQ7sB,CAAK,EAEZ,yBAAyB6sB,EAAK,MAAMxvB,KAIxC,GAAG0tC,EAAS1tC,CAAI,mCAAmCwvB,EAAK,KAElE,EAKD,KAAK,CAAE,KAAAxvB,EAAM,KAAAwvB,GAAQ,CACjB,OAAKA,EAAK,GAMH,GAAGke,EAAS1tC,CAAI,0BAA0BwvB,EAAK,KAJ3C,0BAMd,EAKD,IAAI,CAAE,KAAAxvB,EAAM,KAAM,CAAE,MAAA2C,CAAK,EAAI,KAAA6sB,GAAQ,CACjC,OAAI,MAAM,QAAQ7sB,CAAK,EAEZ,yBAAyB6sB,EAAK,MAAMxvB,KAIxC,GAAG0tC,EAAS1tC,CAAI,sBAAsBwvB,EAAK,KAErD,EAKD,IAAI,CAAE,KAAAxvB,EAAM,KAAM,CAAE,MAAA2C,CAAO,CAAA,EAAI,CAE3B,MAAO,IAAIA,wBAA4B3C,IAE1C,EAKD,OAAO,CAAE,KAAAA,GAAQ,CAEb,MAAO,GAAG0tC,EAAS1tC,CAAI,qBAE1B,EAKD,SAAS,CAAE,KAAAA,GAAQ,CAEf,MAAO,GAAG0tC,EAAS1tC,CAAI,gBAE1B,EAKD,YAAY,CAAE,KAAAA,EAAM,KAAAwvB,GAAQ,CAExB,MAAO,GAAGke,EAAS1tC,CAAI,wBAAwBX,GAAKmwB,CAAI,IAE3D,EAKD,KAAM,CAEF,MAAO,6BAEV,CACL,EAEA,IAAI2e,GAAkB,OAAO,OAAO,CAChC,UAAW,KACX,GAAIF,GACJ,WAAYC,EAChB,CAAC,EAu+SD,SAASE,GAAiB/X,EAAU,CAChC,OAAO,SAAoBxhB,EAAM,CAC7B,IAAIw5B,EAAYC,GAAYz5B,EAAK,OAAO,OAAQwhB,CAAQ,EACpD9Q,EAAS8oB,EAAYhY,EAASgY,GAAa,CAAA,EAE/Cx5B,EAAK,GAAG,cAAe,CAAC,CAAE,QAAS05B,CAAI,IAAO,CAC1CF,EAAYC,GAAYC,EAAMlY,CAAQ,EACtC9Q,EAAS8oB,EAAYhY,EAASgY,GAAa,CAAA,EAE3Cx5B,EAAK,MAAM,OACvB,CAAS,EACDA,EAAK,GAAG,aAAc,IAAMA,EAAK,MAAM,MAAK,CAAE,EAC9CA,EAAK,GAAG,uBAAwB,IAAMA,EAAK,MAAM,MAAK,CAAE,EAKxDA,EAAK,KAAK,KAAK,CAAC0nB,EAAUzvB,IAAS,CAC/B,IAAIzB,EAAI+B,EACR,MAAMtN,IAAQuL,EAAKkxB,EAAS,QAAU,MAAQlxB,IAAO,OAAS,OAASA,EAAG,aAAekxB,EAAS,IAClG,GAAIzP,EAAIvH,EAAQgX,EAAS,IAAI,GAAKzP,EAAIvH,EAAOgX,EAAS,MAAOz8B,CAAG,EAAG,CAC/D,MAAMgE,EAAIyhB,EAAOgX,EAAS,MAAMz8B,GAC5B,OAAOgE,GAAM,WACby4B,EAAS,MAAQ,MAAM,SAASnvB,EAAKmvB,EAAS,QAAU,MAAQnvB,IAAO,OAAS,OAASA,EAAG,QAAQ,EAC9FtJ,EAAE,GAAGy4B,EAAS,KAAK,QAAQ,EAC3Bz4B,EAAEy4B,CAAQ,EAGhBA,EAAS,MAAQz4B,CAExB,CACD,OAAOgJ,EAAKyvB,CAAQ,CAChC,CAAS,CACT,CACA,CAWA,SAAS+R,GAAY/oB,EAAQipB,EAAkB,CAC3C,GAAI1hB,EAAI0hB,EAAkBjpB,CAAM,EAC5B,OAAOA,EAEX,KAAM,CAACgpB,CAAI,EAAIhpB,EAAO,MAAM,GAAG,EAC/B,GAAIuH,EAAI0hB,EAAkBD,CAAI,EAC1B,OAAOA,EAEX,UAAWhpB,KAAUipB,EACjB,OAAOjpB,EAEX,MAAO,EACX,CCvjYA,IAAIkpB,GACAC,GAAuB,KAIvBC,GACAC,GAAiB,GACjBC,GAAoB,GACxB,MAAMC,GAAc,IAAI,QAAS9qB,GAAQ,CACrC2qB,GAAe,IAAM,CACjBC,GAAiB,GACjB5qB,GACR,CACA,CAAC,EAIK+qB,GAAW,OAAO,OAAW,KAAe,OAAO,MAAU,IACnEN,GAAiBM,GACX,iBAAiB,SAAS,eAAe,EACzC,OAKN,MAAMC,GAAe,CAAA,EAIfC,GAAe,CAAA,EAQrB,SAASC,GAAkBhvB,EAAOivB,EAAOC,EAAeC,EAAY,CAC5DF,GAEA,OAAO,OAAOH,GAAcG,CAAK,EAGjCJ,IACA,CAACF,IACgEJ,IAAe,iBAAiB,iBAAiB,GAElHE,KACAE,GAAoB,IAEf3uB,GAAS,CAAC2uB,IAAqBE,GAEpCO,GAAUpvB,CAAK,EAEV,CAAC2uB,IAAqBE,IAE3BJ,KAEJ,MAAMY,EAAc,SAAqB16B,EAAM,CAC3C,IAAIxJ,EAAI+B,EAERyH,EAAK,SAAS,CAAC,aAAc,eAAe,CAAC,EAC7CA,EAAK,MAAM,YAAc26B,GAAoB,GAAAnkC,EAAKwJ,EAAK,SAAW,MAAQxJ,IAAO,SAAkBA,EAAG,WAAcwJ,EAAK,MAAM,WAAaw6B,EAAc,GAAAjiC,EAAKyH,EAAK,SAAW,MAAQzH,IAAO,SAAkBA,EAAG,cAAiByH,EAAK,MAAM,cAAgBu6B,CAAa,EAC5QK,GAAkB56B,EAAMA,EAAK,MAAM,WAAW,EAC9CA,EAAK,GAAG,UAAW,IAAM,CACrB,IAAIxJ,EAEC,GAAAA,EAAiDwJ,GAAK,WAAa,MAAQxJ,IAAO,SAAkBA,EAAG,WACxGwJ,EAAK,QAAQ,SAAS,UAAa2uB,GAAe,CAC9C,MAAMkM,EAAmB,KAAKlM,EACzB,OAAO,CAAC,EACR,YAAW,IAAKA,EAAW,MAAM,CAAC,aACjCmM,EAAkB96B,EAAK,MAAM66B,GACnC,GAAIC,GAAmB,OAAOA,GAAoB,WAC9C,OAAQnsC,GACGmsC,EAAgB96B,EAAMrR,CAAC,CAI1D,EAEA,CAAS,CACT,EACI,OAAA+rC,EAAY,YAAcC,GAAkBH,EAAYD,CAAa,EAC9DG,CACX,CAIA,SAASD,GAAUpvB,EAAO,CACtB,GAAI,GAACA,GAAS,CAAC6uB,IAAY,OAAO,kBAAqB,cAKvDF,GAAoB,GACpBH,GAAuB,SAAS,eAAe,eAAe,EAE1DxuB,GAEA6uB,KAEE,CAAkEN,IAAe,iBAAiB,iBAAiB,GACjH,CAACC,IAC6EA,IAAqB,aAAa,YAAY,GAC3CA,IAAqB,aAAa,YAAY,IAAOxuB,IAAS,CAMnJ,MAAM0vB,EAAW,gDAHM7O,GAAgB,WAAW,IAAI,EAChD,SACAA,WACkF7gB,cAClF7iB,EAAO,SAAS,cAAc,MAAM,EAC1CA,EAAK,KAAO,WACZA,EAAK,IAAM,aACXA,EAAK,GAAK,gBACVA,EAAK,aAAa,aAAc6iB,CAAK,EACrC7iB,EAAK,OAAS,IAAM,CAChBoxC,GAAiB,iBAAiB,SAAS,eAAe,EAC1DE,IACZ,EACQ,SAAS,KAAK,YAAYtxC,CAAI,EAC9BA,EAAK,KAAOuyC,EAERlB,IACAA,GAAqB,OAAM,CAElC,CACL,CAMA,SAASc,GAAkBH,EAAYD,EAAe,CAClD,OAAQS,GAAa,CACjB,GAAI,OAAOA,GAAa,UACpB,OAGJ,GAAIA,EAAS,WAAW,MAAM,EAC1B,OAAOA,EAEX,GAAI,OAAOA,GAAa,SACpB,OAEJ,MAAMtM,EAAOyL,GAAaa,GAEpBC,EAAYD,EAAS,WAAW,UAAU,EAChDA,EAAWC,EAAYD,EAAS,MAAM,GAAG,EAAE,GAAKA,EAChD,IAAIE,EACJ,GAAIxM,GAAQsM,KAAYb,GACpB,OAAOA,GAAaa,GAEnB,GAAI,CAACZ,GAAaY,IAMnB,GALAE,EAAaC,GAAsBH,CAAQ,EAC3CE,EACIhB,IAAY,OAAOgB,EAAe,IAC5B,QAAQ,QAAQA,CAAU,EAC1BA,EACNA,aAAsB,QACtBd,GAAaY,GAAYE,EACpB,KAAME,GACH,CAACA,GAAa,OAAOJ,GAAa,UAAY,CAACC,EACvCC,EACJ,OAAOV,GAAe,WAChBA,EAAWQ,CAAQ,EACnBK,GAAcL,EAAUT,CAAa,EAE5Ca,CACV,EACI,KAAME,IACH,OAAON,GAAa,WACpBb,GAAac,EAAY,WAAWD,IAAaA,GAC7CM,GAEDA,EACV,UAEI,OAAOJ,GAAe,SAC3B,OAAAf,GAAac,EAAY,WAAWD,IAAaA,GAAYE,EACtDA,EAGf,OAAOd,GAAaY,EAC5B,CACA,CACA,SAASG,GAAsBH,EAAU,CACrC,GAAI,EAACd,GAEL,OAAIH,GACOwB,GAAmBP,CAAQ,EAG3Bf,GAAY,KAAK,IACbsB,GAAmBP,CAAQ,CACrC,CAET,CACA,SAASO,GAAmBP,EAAU,CAClC,MAAMQ,EAA6E5B,IAAe,iBAAiB,aAAaoB,GAAU,EAC1I,GAAIQ,EAAY,CAEZ,MAAM9M,EAAO,KAAK8M,CAAU,EAC5B,GAAI9M,EAAK,WAAW,MAAM,EACtB,OAAAyL,GAAaa,GAAYtM,EAClBA,CAEd,CAEL,CAMA,SAAS2M,GAAcL,EAAUT,EAAe,CAC5C,MAAMkB,EAAiBvP,GAAgB,WAAW,IAAI,EAChD,SACAA,GACAwP,EAAW,OAAOnB,GAAkB,WACpCA,EAAcS,CAAQ,EACtB,+CAA+CS,gBAA6BT,QAClF,GAAI,EAACd,GAEL,OAAO,MAAM,GAAGwB,GAAU,EACrB,KAAK,MAAOpnC,GAAM,CACnB,MAAMo6B,EAAO,MAAMp6B,EAAE,OACrB,GAAIo6B,EAAK,WAAW,MAAM,EACtB,OAAOA,CAGnB,CAAK,EACI,MAAO//B,GAAM,CACd,QAAQ,MAAMA,CAAC,CAEvB,CAAK,CACL,CAIA,SAASisC,GAAkB56B,EAAM27B,EAAa,CAC1C,MAAMC,EAAY,6BACA,OAAO,KAAK57B,EAAK,KAAK,EAAE,OAAQsf,GACvCsc,EAAU,KAAKtc,CAAI,CAC7B,EACS,QAASqP,GACRkN,GAAa77B,EAAM27B,EAAahN,CAAU,CACpD,CACL,CAIA,SAASkN,GAAa77B,EAAM27B,EAAahN,EAAY,CACjD,MAAMqM,EAAWh7B,EAAK,MAAM2uB,GACtBuM,EAAaS,EAAYX,CAAQ,EACjCpM,EAAc,OAAOD,EACtB,OAAO,CAAC,EACR,YAAW,IAAKA,EAAW,MAAM,CAAC,IACjCkM,EAAmB,KAAKlM,EACzB,OAAO,CAAC,EACR,YAAW,IAAKA,EAAW,MAAM,CAAC,SAIvC,GAHA3uB,EAAK,SAAS,CAAC4uB,EAAaiM,CAAgB,CAAC,EAE7C76B,EAAK,GAAG,QAAQ2uB,IAAcmN,EAAU,EACpCZ,aAAsB,QACtB,OAAOA,EAAW,KAAMa,GAAQ,CAC5B/7B,EAAK,MAAM4uB,GAAemN,CACtC,CAAS,EAGD/7B,EAAK,MAAM4uB,GAAesM,CAGlC,CAIA,SAASY,GAAWjvC,EAAO,CACvB,IAAI2J,EACJ,MAAMwJ,EAAOnT,EAAM,OACbmuC,EAAWnuC,EAAM,QACjB8uC,GAAenlC,EAAiDwJ,GAAK,SAAW,MAAQxJ,IAAO,OAAS,OAASA,EAAG,YACpHm4B,EAAa9hC,EAAM,KAAK,MAAM,GAAG,EAAE,GACnC+hC,EAAc,OAAOD,EACtB,OAAO,CAAC,EACR,YAAW,IAAKA,EAAW,MAAM,CAAC,IACvC,GAAIgN,GAAe,OAAOA,GAAgB,WAAY,CAClD,MAAMT,EAAaS,EAAYX,CAAQ,EACvC,GAAIE,aAAsB,QACtB,OAAOA,EAAW,KAAMa,GAAQ,CAC5B/7B,EAAK,MAAM4uB,GAAemN,CAC1C,CAAa,EAGD/7B,EAAK,MAAM4uB,GAAesM,CAEjC,CACL,CCpWA,IAAIc,GAAa,GAKjB,MAAMtkC,GAAS,CAIX,IAAK,CAAC,CAAE,KAAMsI,CAAI,IAAO,oDAAoDA,EAAK,SAClF,IAAK,CAAC,CAAE,KAAMA,CAAI,IAAO,yCAAyCA,EAAK,8DACvE,IAAK,CAAC,CAAE,KAAM,CAACA,EAAMmY,CAAQ,CAAC,IAAQ,mCAAmCA,MAAanY,EAAK,QAC3F,IAAK,CAAC,CAAE,KAAM,CAACi8B,CAAQ,CAAC,IAAO,qDAAqDA,KACpF,IAAK,CAAC,CAAE,KAAM,CAACA,EAAUxS,CAAU,KAAQ,mDAAmDwS,SAAgBxS,MAC9G,IAAK,CAAC,CAAE,KAAMA,CAAY,IAAK,8BAA8BA,IAC7D,IAAK,CAAC,CAAE,KAAMt+B,CAAM,IAAK,0BAA0BA,uBACnD,IAAK,CAAC,CAAE,KAAM,CAAC6U,EAAMlS,CAAK,CAAC,IAAO,cAAckS,EAAK,6BAA6BlS,IAClF,IAAK,CAAC,CAAE,KAAM,CAACkS,EAAMlS,CAAK,CAAC,IAAO,cAAckS,EAAK,4BAA4BlS,IAIjF,IAAK,CAAC,CAAE,KAAM,CAACkS,CAAI,KAAQ,8CAA8CA,EAAK,+CAI9E,IAAK,CAAC,CAAE,KAAMA,CAAM,IAAK,qBAAqB,OAAOA,EAAK,MAAM,MAAS,SAAW,KAAOA,EAAK,MAAM,KAAO,IAAM,QAAQA,EAAK,SAChI,IAAK,CAAC,CAAE,KAAMA,CAAM,IAAK,mBAAmB,OAAOA,EAAK,MAAM,MAAS,SAAW,KAAOA,EAAK,MAAM,KAAO,IAAM,iDAAiDA,EAAK,QAC3K,EAKMk8B,GAAW,CAIb,IAAK,CAAC,CAAE,KAAM7uC,CAAI,IAAK,oBAAoBA,gCAC3C,IAAK,CAAC,CAAE,KAAM2c,CAAI,IAAK,4BAA4BA,IACnD,IAAK,CAAC,CAAE,KAAMA,CAAI,IAAK,6BAA6BA,IAIpD,IAAK,CAAC,CAAE,KAAMhK,CAAI,IAAO,yCAAyCA,EAAK,8CAIvE,IAAK,yDACL,IAAK,CAAC,CAAE,KAAMgK,CAAI,IAAK,0BAA0BA,gCACjD,IAAK,CAAC,CAAE,KAAMA,CAAI,IAAK,4BAA4BA,gCAInD,IAAK,CAAC,CAAE,KAAM7e,CAAM,IAAK,GAAGA,kBAChC,EAOMgxC,GAAe,CAACrkC,EAAOG,IAAS,CAClC,GAAIH,EAAM,QAAQJ,GAAQ,CACtB,MAAMkD,EAAMlD,GAAOI,EAAM,MACzBA,EAAM,QAAU,OAAO8C,GAAQ,WAAaA,EAAI9C,CAAK,EAAI8C,CAC5D,CACD,OAAO3C,EAAKH,CAAK,CACrB,EACKkkC,IACD/d,GAAake,EAAY,EAO7B,MAAMC,GAAiB,CAACje,EAASlmB,IAAS,CACtC,GAAIkmB,EAAQ,QAAQ+d,GAAU,CAC1B,MAAM9d,EAAO8d,GAAS/d,EAAQ,MAC9BA,EAAQ,QAAU,OAAOC,GAAS,WAAaA,EAAKD,CAAO,EAAIC,CAClE,CACD,OAAOnmB,EAAKkmB,CAAO,CACvB,EACK6d,IACD9d,GAAeke,EAAc,EACjCJ,GAAa,GCtEb,MAAMK,GAAO,CAAA,EAKb,IAAIC,EAKJ,MAAMC,GAAiB,IAAI,IAIrBC,GAAM,UAINC,GAAc,yBAOpB,SAASC,GAAO7kB,EAAOra,EAAM,CACzB,MAAM1P,EAAQzE,EAAI,IAAI,EACtB,GAAIwuB,IAAU,MAAO,CACjB,MAAM8kB,EAAW,CAAA,EACjB,OAAA7uC,EAAM,MAAQ8uC,GAAM,KAAK,KAAMD,CAAQ,EAChC7uC,CACV,CACD,MAAM+uC,EAAOhlB,EAAM,MAAM,GAAG,EAC5B,OAAAliB,GAAY,IAAO7H,EAAM,MAAQgvC,GAASt/B,EAAMq/B,CAAI,CAAE,EAC/C/uC,CACX,CAOA,SAASgvC,GAASntB,EAAKktB,EAAM,CACzB,GAAI,MAAM,QAAQltB,CAAG,EAAG,CACpB,UAAWotB,KAAUptB,EAAK,CACtB,MAAM7hB,EAAQivC,IAAW,IAASD,GAASC,EAAQF,CAAI,EACvD,GAAI/uC,IAAU,OACV,OAAOA,CACd,CACD,MACH,CACD,IAAIkvC,EACA9kB,EAAMvI,EACV,UAAWplB,KAAKsyC,EAAM,CAClB,MAAM5xC,EAAM4xC,EAAKtyC,GACjB,GAAI,OAAO2tB,GAAQ,UAAYA,IAAQ,KAAM,CACzC8kB,EAAa,OACb,KACH,CACD,MAAMC,EAAe/kB,EAAIjtB,GACzB,GAAI,OAAOV,CAAC,IAAMsyC,EAAK,OAAS,GAAKI,IAAiB,OAAW,CAG7DD,EACI,OAAOC,GAAiB,WAClBA,EAAa,KAAK/kB,CAAG,EACrB+kB,EACV,KACH,CACD/kB,EAAM+kB,CACT,CACD,OAAOD,CACX,CAKA,SAASJ,GAAMD,EAAU3yB,EAAI,CACzB,GAAI,OAAOA,GAAO,SACd,OAAOoU,GAAK,GAAG,EAGnB,GAFMpU,KAAM2yB,IACRA,EAAS3yB,GAAM3gB,EAAI,MAAS,GAC5BszC,EAAS3yB,GAAI,QAAU,OAAW,CAClC2yB,EAAS3yB,GAAI,MAAQ,KACrB,MAAMtV,EAAO0uB,GAAQpZ,CAAE,EACnBtV,IACAioC,EAAS3yB,GAAI,MAAQtV,EAAK,SAC9BmtB,GAAc7X,EAAI,CAAC,CAAE,QAAShK,CAAI,IAAO,CACrC28B,EAAS3yB,GAAI,MAAQ5J,GAAOJ,CAAI,EAAIA,EAAK,QAAUA,CAC/D,CAAS,CACJ,CACD,OAAO28B,EAAS3yB,GAAI,KACxB,CAOA,SAASkzB,GAAY7rB,EAASwf,EAAQ,CAQlC,SAAS9P,EAAe1P,EAASrR,EAAM,CACnC,MAAMiK,EAAYkzB,EAASpU,GAAQ/oB,EAAK,EAAE,EAAG,CAAE,GAAI,EAAI,CAAE,EACnDomB,EAAWgX,EAAe/rB,EAASrR,EAAK,IAAI,EAC5Cq9B,EAAYr9B,EAAK,KAAOo9B,EAAe/rB,EAASrR,EAAK,IAAI,EAAI,KACnE,MAAO,CAACiK,EAAWmc,EAAUiX,CAAS,CACzC,CAQD,SAASC,EAAmB5X,EAAM6X,EAAU,CACxC,IAAI/mC,EAAI+B,EACR,MAAM0R,EAAYkzB,EAASpU,GAAQrD,EAAK,EAAE,CAAC,EAC3C,IAAI5zB,EAAI,IAAMyrC,EACV1rC,EAAI,IAAM0rC,EACd,OAAI,OAAO7X,EAAK,MAAS,SACrB7zB,EAAI2rC,EAAW9X,EAAK,KAAM,MAAS,EAE9B,OAAOA,EAAK,MAAS,WAAc,GAAAlvB,EAAKkvB,EAAK,QAAU,MAAQlvB,IAAO,SAAkBA,EAAG,WAAW,GAAG,GAC9G3E,EAAIsrC,EAASpU,GAAQrD,EAAK,IAAI,CAAC,EAG/B7zB,EAAI,IAAM6zB,EAAK,KAEfzN,EAAIyN,EAAM,MAAM,IACZ,OAAOA,EAAK,MAAS,SACrB5zB,EAAI0rC,EAAW9X,EAAK,IAAI,EAEnB,OAAOA,EAAK,MAAS,WAAc,GAAAntB,EAAKmtB,EAAK,QAAU,MAAQntB,IAAO,SAAkBA,EAAG,WAAW,GAAG,GAC9GzG,EAAIqrC,EAASpU,GAAQrD,EAAK,IAAI,CAAC,EAG/B5zB,EAAI,IAAM4zB,EAAK,MAGhB,IAAOzb,EAAW,EAAGpY,EAAC,EAAKC,EAAG,CACxC,CAMD,SAAS0rC,EAAWC,EAAeC,EAASH,EAAW,CAAA,EAAI,CACvD,MAAMI,EAAgB,IAAI,IAAI,OAAO,KAAKF,GAAiB,CAAE,CAAA,CAAC,EACxDG,EAAaF,EAAUP,EAASpU,GAAQ2U,CAAO,CAAC,EAAI,KAAO,CAAA,GAE3DG,EAAU,CACXpY,GAAU,CACP,MAAMqY,EAAQF,IACd,UAAWlY,KAAQoY,EACVH,EAAc,IAAIjY,CAAI,IACvBD,EAAMC,GAAQoY,EAAMpY,GAG/B,CACb,EACQ,GAAI+X,EAAe,CACf,GAAI/U,GAAc+U,CAAa,EAI3B,OADkBH,EAAmBG,EAAeF,CAAQ,EAKhE,QAAS7X,KAAQ+X,EAAe,CAC5B,MAAM3vC,EAAQ2vC,EAAc/X,GAC5B,IAAIoX,EACJ,MAAMiB,EAAQ,OAAOjwC,GAAU,SAC3B43B,EAAK,WAAW8W,EAAG,GAEnB9W,EAAOA,EAAK,UAAU,CAAC,EACvBoX,EAAW,IAAMhvC,GAEZiwC,GACLjwC,EAAM,WAAW,GAAG,GACpBA,EAAM,OAAS,GACf,EAAEA,EAAM,WAAW,QAAQ,GAAK2uC,GAAY,KAAK/W,CAAI,GAGrDoX,EAAWK,EAASpU,GAAQj7B,CAAK,CAAC,EAE7B,OAAOA,GAAU,UAAY46B,GAAc56B,CAAK,EAErDgvC,EAAWQ,EAAmBxvC,EAAO,MAAS,EAEzC,OAAOA,GAAU,UAAYwrB,GAAOxrB,CAAK,EAE9CgvC,EAAWU,EAAW1vC,CAAK,EAI3BgvC,EAAW,IAAMhvC,EAGrB+vC,EAAQ,KAAMpY,GAAU,CACpBA,EAAMC,GAAQoX,GAClC,CAAiB,CACJ,CACJ,CACD,MAAO,IAAM,CACT,MAAMrX,EAAQ,MAAM,QAAQgY,CAAa,EAAI,CAAE,EAAG,GAClD,OAAAI,EAAQ,QAASnZ,GAAWA,EAAOe,CAAK,CAAC,EAClCA,CACnB,CACK,CAOD,SAASuY,EAAU3sB,EAAS0M,EAAO,CAC/B,IAAIvf,EAAU,KACVinB,EAAQ,IAAM,KACdxb,EAAY,GACZmc,EAAW,KACXiX,EAAY,KACZxU,EAAW,KACXlgC,EAAU,GACd,MAAMqX,EAAO4oB,GAAM7K,CAAK,EAqCxB,GApCIyK,GAAMxoB,CAAI,GAEVxB,EAAUwB,EAAK,IACfylB,EACIzlB,EAAK,MAAQ,OAASw9B,EAAWx9B,EAAK,MAAOA,EAAK,IAAI,EAAI,IAAM,MAE/Di+B,GAAcj+B,CAAI,GAEnB,OAAOA,EAAK,MAAS,SACjBiY,EAAI5G,EAASrR,EAAK,IAAI,EACtBxB,EAAU6S,EAAQrR,EAAK,OAGvBxB,EAAUwB,EAAK,KACfrX,EAAU,IAKd6V,EAAUwB,EAAK,KAEnBylB,EAAQ+X,EAAWx9B,EAAK,MAAOA,EAAK,IAAI,GAEnC0oB,GAAc1oB,CAAI,IACvB,CAACiK,EAAWmc,EAAUiX,CAAS,EAAItc,EAAe1P,EAASrR,CAAI,GAG/D,CAAC0oB,GAAc1oB,CAAI,GAAK,OAAQA,EAChCiK,EAAYkzB,EAASpU,GAAQ/oB,EAAK,EAAE,CAAC,EAEhC,CAAC0oB,GAAc1oB,CAAI,GAAKxB,IAAY,OAGzCyL,EAAY,IAAM,IAGlB,aAAcjK,GAAQA,EAAK,SAC3B,GAAI,OAAOA,EAAK,UAAa,SAEzB,GAAIA,EAAK,SAAS,WAAW,SAAS,EAElCxB,EAAUA,IAAY,OAAS,OAASA,EACxC4nB,EAAW+W,EAASpU,GAAQ/oB,EAAK,QAAQ,CAAC,UAErCA,EAAK,SAAS,WAAW,GAAG,GAAKA,EAAK,SAAS,OAAS,EAAG,CAChE,MAAMlS,EAAQqvC,EAASpU,GAAQ/oB,EAAK,QAAQ,CAAC,EAC7ComB,EAAW,IAAM,OAAOt4B,EAAK,CAAE,CAClC,MAEGs4B,EAAW,IAAM,OAAOpmB,EAAK,QAAQ,UAGpC,MAAM,QAAQA,EAAK,QAAQ,EAEhComB,EAAWgX,EAAe/rB,EAASrR,EAAK,QAAQ,MAE/C,CAED,KAAM,CAACk+B,EAAgBlwC,EAAG6D,CAAC,EAAIkvB,EAAe1P,EAASrR,EAAK,QAAQ,EACpEomB,EAAY+X,GAAkBD,GAAkBA,EAAgB,EAC1DlwC,GAAKA,EAAEmwC,CAAa,EACpBtsC,GAAKA,EAAEssC,CAAa,CAC7B,CAEL,GAAIF,GAAcj+B,CAAI,EAClB,GAAIomB,EAAU,CAKV,MAAMgY,EAAkBhY,EACxBA,EAAY+X,IACD,CACH,QAAQE,EAAUpzC,EAAK,CACnB,IAAIuL,EAAI+B,EAAIC,EAAIC,EAGhB,MAAM6lC,EAAahC,EACfrxC,IACAqxC,EAAcrxC,GACdozC,KACC7nC,EAAK+lC,GAAe,IAAID,CAAW,KAAO,MAAQ9lC,IAAO,QAAkBA,EAAG,QAAQ6nC,CAAQ,GAC/FF,KACC5lC,EAAKgkC,GAAe,IAAID,CAAW,KAAO,MAAQ/jC,IAAO,QAAkBA,EAAG,QAAQ4lC,CAAa,GACxG,MAAMnwC,EAAIowC,EAAgBD,CAAa,EAEvC,OAAIE,KACC7lC,EAAK+jC,GAAe,IAAID,CAAW,KAAO,MAAQ9jC,IAAO,QAAkBA,EAAG,MAAK,GACpF2lC,KACC1lC,EAAK8jC,GAAe,IAAID,CAAW,KAAO,MAAQ7jC,IAAO,QAAkBA,EAAG,MAAK,GACxF6jC,EAAcgC,EACPtwC,CACV,CACzB,GAEgBo4B,EAAS,KAAO,EACnB,MAIGA,EAAW,KAAO,CAAA,GAI1B,GAAI,QAASpmB,GAAQA,EAAK,IAAK,CAC3B,MAAMu+B,EAASv+B,EAAK,IAAI,SAAW,EAAIA,EAAK,IAAI,GAAKA,EAAK,IAAI,GAI9D6oB,EAAW,CAHO,OAAO0V,GAAW,UAAYA,EAAO,WAAW,GAAG,EAC/DpB,EAASpU,GAAQwV,CAAM,CAAC,EACxB,IAAMA,EAGRv+B,EAAK,IAAI,GACTA,EAAK,IAAI,SAAW,EAAI,OAAOA,EAAK,IAAI,EAAE,EAAI,IAC9D,CACS,CACD,MAAO,CAACiK,EAAWzL,EAASinB,EAAOW,EAAUiX,EAAWxU,EAAUlgC,CAAO,CAC5E,CAOD,SAAS61C,EAAYpY,EAAU+X,EAAe,CAC1C,MAAMM,EAAQrY,EAAS+X,CAAa,EAC9BG,EAAahC,EACnB,OAAO,OAAO,KAAKmC,CAAK,EAAE,OAAO,CAACC,EAAUC,IAAa,CACrD,MAAMC,EAASH,GAASA,EAAME,GAC9B,OAAAD,EAASC,GAAanhC,GACVohC,GAAUA,EAAOphC,EAAM8gC,CAAU,GAAM,KAE5CI,CACV,EAAE,CAAE,CAAA,CACR,CAOD,SAASG,EAAcxtB,EAASrR,EAAM,CAElC,KAAM,CAACiK,EAAWzL,EAASinB,EAAOW,EAAUiX,EAAWxU,EAAUlgC,CAAO,EAAIq1C,EAAU3sB,EAASrR,CAAI,EAInG,IAAI8+B,EAAgBX,GAAkB,CAClC,GAAIl0B,GAAazL,IAAY,MAAQ4nB,EAEjC,OAAOnc,EAAW,EACZmc,EAAS+X,CAAa,EACtBd,GAAaA,EAAUc,CAAa,EAE9C,GAAI3/B,IAAY,CAACyL,GAAaA,EAAW,GAAG,CAExC,GAAIzL,IAAY,QAAU4nB,EACtB,OAAO2Y,GAAgB,OAAO3Y,EAAQ,CAAE,CAAC,EAG7C,GAAI5nB,IAAY,QAAU4nB,EACtB,OAAOA,EAAS+X,CAAa,EAEjC,MAAM94B,EAAK1c,EAAUq2C,GAAiBxgC,CAAO,EAAIA,EAE3CigC,EAA6DrY,GAAS,KACtEoY,EAAYpY,EAAU+X,CAAa,EACnC,KAEN,OAAO/vC,GAAEiX,EAAIogB,EAAK,EAAKgZ,IAAUrY,EAAWA,EAAS+X,CAAa,EAAI,CAAE,GAC3E,CACD,OAAO,OAAOd,GAAc,WACtBA,EAAUc,CAAa,EACvBd,CAClB,EACQ,GAAIxU,EAAU,CACV,MAAMoW,EAAeH,EACf,CAACI,EAAWC,EAAWC,CAAO,EAAIvW,EACxCiW,EAAe,IAAM,CACjB,MAAMO,EAAKH,IACLX,EAAU,MAAMc,CAAE,EAIlBA,EAHA,MAAM,OAAOA,CAAE,CAAC,EACb,KAAK,CAAC,EACN,IAAI,CAAChkC,EAAG9Q,IAAMA,CAAC,EAElBm9B,EAAW,CAAA,EACjB,GAAI,OAAO6W,GAAW,SAClB,OAAO,KACX,MAAMe,EAAgB/C,GAAe,IAAID,CAAW,GAAK,CAAA,EACnDiD,EAAU,MAAM,QAAQhB,CAAM,EACpC,UAAWtzC,KAAOszC,EAAQ,CACtB,GAAIgB,GAAWt0C,KAAO,MAAM,UACxB,SACJ,MAAMkzC,EAAgB,OAAO,eAAe,CACxC,GAAGmB,EAAc,OAAO,CAACE,EAAuBC,IACxCD,EAAsB,QACf,CAAE,GAAGA,EAAuB,GAAGC,GAEnCA,EACR,EAAE,EACL,CAACN,GAAYZ,EAAOtzC,GACpB,GAAIm0C,IAAY,KACV,CAAE,CAACA,GAAUG,EAAU,OAAOt0C,CAAG,EAAIA,CAAK,EAC1C,EAC9B,EAAuB,UAAW,CAAE,WAAY,GAAO,MAAO,EAAI,CAAE,EAChDq0C,EAAc,QAAQnB,CAAa,EACnCzW,EAAS,KAAKuX,EAAa,KAAK,KAAMd,CAAa,EAAC,CAAE,EACtDmB,EAAc,MAAK,CACtB,CACD,OAAO5X,CACvB,CACS,CACD,OAAOoX,CACV,CAQD,SAAS1B,EAAe/rB,EAASwf,EAAQ,CACrC,GAAI,MAAM,QAAQA,CAAM,EAAG,CACvB,MAAM6O,EAAM7O,EAAO,IAAIgO,EAAc,KAAK,KAAMxtB,CAAO,CAAC,EACxD,OAAQ8sB,GAAkBuB,EAAI,IAAKlhC,GAAYA,EAAQ2/B,CAAa,CAAC,CACxE,CAED,MAAM3/B,EAAUqgC,EAAcxtB,EAASwf,CAAM,EAC7C,OAAQsN,GAAkB3/B,EAAQ2/B,CAAa,CAClD,CAID,MAAMwB,EAAY,CAAA,EAMlB,SAASxC,EAAS/R,EAAU6M,EAAQ,GAAI,CACpC,MAAM2H,EAAc,CAAA,EACpB,OAAAD,EAAU,KAAK,CAAC9zC,EAAUZ,IAAQ,CAC9B20C,EAAY30C,GAAOmgC,EAAS,QAASnS,GAAWptB,EAASotB,EAAQgf,CAAK,CAAC,CACnF,CAAS,EACM,IAAM2H,EAAYtD,IAC5B,CAQD,OAAO,SAAwBuD,EAAkB50C,EAAK,CAClD,MAAM60C,EAAU,KAAK,UAAUjP,CAAM,EAC/B,CAACkP,EAAQC,CAAiB,EAAI/nB,EAAIokB,GAAMyD,CAAO,EAC/CzD,GAAKyD,GACL,CAAC1C,EAAe/rB,EAASwf,CAAM,EAAG8O,CAAS,EACjD,OAAAtD,GAAKyD,GAAW,CAACC,EAAQC,CAAiB,EAC1CA,EAAkB,QAASC,GAAqB,CAC5CA,EAAiBJ,EAAkB50C,CAAG,CAClD,CAAS,EACM,KACHqxC,EAAcrxC,EACP80C,EAAM,EAEzB,CACA,CAMA,SAASG,GAASroB,EAAOsoB,EAAc,CACnC,MAAMV,EAAalD,GAAe,IAAID,CAAW,GAAK,CAAA,EACtD,IAAI8D,EACJ,OAAIX,EAAW,SACXW,EAActD,GAAS2C,EAAY5nB,EAAM,MAAM,GAAG,CAAC,GAEhDuoB,IAAgB,OAAYD,EAAeC,CACtD,CAIA,SAAS/B,GAAS7gC,EAAMvS,EAAK,CACzB,OAAO,IAAI,MAAMuS,EAAM,CACnB,OAAOmd,EAAM,CACT,IAAInd,EACJ,MAAM2a,EAAWwC,EAAK,GACtB,GAAI,OAAOxC,GAAa,SAAU,CAC9B,MAAMkoB,EAAU/D,EAChBA,EAAcrxC,EACduS,EAAO0iC,GAAS/nB,EAAU,MAAS,EACnCmkB,EAAc+D,CACjB,CACD,OAAO7iC,IAAS,OAAYA,EAAO,QAAQ,IAAI,GAAGmd,CAAI,CACzD,CACT,CAAK,CACL,CAOA,SAAS2lB,GAAeC,EAAiB/iC,EAAM8+B,EAAa,CACxD,OAAOiE,EAAgB,CAACrX,EAAc+O,EAAQ,CAAA,IACnC/O,EAAa,OAAO,CAACjQ,EAAQpB,IAAU,CAC1C,GAAIA,EAAM,WAAW,QAAQ,EAAG,CAC5B,MAAM2oB,EAAO3oB,EAAM,UAAU,CAAC,EACxB4oB,EAAUjjC,EAAK,OAASya,EAAIza,EAAK,MAAOgjC,CAAI,EAClD,GAAIvI,EAAM,GAENhf,EAAOpB,GAAS,IAAM4oB,UAEjBjjC,EAAK,OAASijC,EAAS,CAE5B,MAAMhB,EAAapB,GAAS7gC,EAAM8+B,CAAW,EAC7C,OAAArjB,EAAOpB,GAAS,IAAMra,EAAK,MAAMgjC,GAAMf,CAAU,EAC1CxmB,CACV,CACJ,CACD,MAAMnrB,EAAQ4uC,GAAO7kB,EAAOra,CAAI,EAChC,OAAAyb,EAAOpB,GAAS,IAAMqoB,GAASroB,EAAO/pB,EAAM,KAAK,EAC1CmrB,CACV,EAAE,CAAE,CAAA,EACNqjB,CAAW,CAClB,CACA,IAAI/xC,GAAI,EAKR,MAAMm2C,GAAgBC,GAAgB,CAClC,KAAM,gBACN,MAAO,CACH,OAAQ,CACJ,KAAM,CAAC,MAAO,MAAM,EACpB,SAAU,EACb,EACD,KAAM,CACF,KAAM,OACN,QAAS,KAAO,CAAA,EACnB,EACD,QAAS,CACL,KAAM,OACN,QAAS,KAAO,CAAA,EACnB,CACJ,EACD,MAAM12C,EAAOC,EAAS,CAClB,MAAM02C,EAAWzrC,KACjB,IAAImnC,EAAc,OAAO,OAAO/xC,IAAG,CAAC,EACpCgyC,GAAe,IAAID,EAAa,CAAA,CAAE,EAClC,IAAIa,EAAWD,GAAYjzC,EAAM,QAASA,EAAM,MAAM,EAClD81C,EACAviC,EAEJ5H,OAAAA,EAAM,IAAM3L,EAAM,OAAQ,CAAC42C,EAAWC,IAAc,CAChD,IAAItqC,EACJ8lC,EAAc,OAAO,OAAO/xC,IAAG,CAAC,EAChC4yC,EAAWD,GAAYjzC,EAAM,QAASA,EAAM,MAAM,EAClD81C,EAASO,GAAenD,EAAU3/B,EAAM8+B,CAAW,EAC/CuE,IAAcC,KACZtqC,EAAyDoqC,GAAS,SAAW,MAAQpqC,IAAO,OAAS,OAASA,EAAG,eAEnI,EAAW,CAAE,KAAM,EAAI,CAAE,EAEjBb,GAAY,IAAM,CACd6H,EAAO,OAAO,OAAO4J,GAASnd,EAAM,IAAI,EAAG,CACvC,MAAOC,EAAQ,KAC/B,CAAa,EACD61C,EAASO,GAAenD,EAAU3/B,EAAM8+B,CAAW,CAC/D,CAAS,EACM,IAAMyD,EAAM,CACtB,CACL,CAAC,EAKKgB,GAAc,CAChB,OAAQ,CACJ,KAAM,OACN,QAAS,CAAE,CACd,EACD,QAAS,CACL,KAAM,OACN,SAAU,EACb,EACD,MAAO,CACH,KAAM,OACN,SAAU,EACb,EACD,OAAQ,CACJ,KAAM,MACN,QAAS,CAAE,CACd,EACD,YAAa,CACT,KAAM,OACN,QAAS,KAAO,CAAA,EACnB,EACD,MAAO,CACH,KAAM,OACN,SAAU,EACb,EACD,GAAI,CACA,KAAM,OACN,SAAU,EACb,EACD,WAAY,CACR,SAAU,EACb,EACD,KAAM,CACF,KAAM,OACN,SAAU,EACb,EACD,OAAQ,CACJ,KAAM,OACN,SAAU,EACb,EACD,QAAS,CACL,KAAM,MACN,QAAS,CAAE,CACd,EACD,eAAgB,CACZ,KAAM,OACN,QAAS,CAAE,CACd,EACD,KAAM,CACF,KAAM,CAAC,OAAQ,MAAM,EACrB,QAAS,MACZ,EACD,WAAY,CACR,KAAM,CAAC,OAAQ,KAAK,EACpB,SAAU,EACb,EACD,mBAAoB,CAChB,KAAM,OACN,SAAU,EACb,EACD,gBAAiB,CACb,KAAM,OACN,SAAU,EACb,EACD,gBAAiB,CACb,KAAM,CAAC,OAAQ,QAAQ,EACvB,SAAU,EACb,CACL,EAKM92C,GAAQ82C,GAMRC,GAAe,OAAO,eAAe,EAKrCC,GAAUN,GAAgB,CAC5B,MAAA12C,GACA,MAAO,CAEH,MAAO,CAACq7B,EAAQvH,IAAU,GAC1B,SAAU,CAACuH,EAAQvH,IAAU,GAC7B,oBAAsBuH,GAAW,GACjC,KAAOtlB,GAAS,CAAC,CAACA,EAClB,OAAQ,CAACkhC,EAAOnjB,IAAU,GAC1B,UAAW,CAACojB,EAAQpjB,IAAU,GAC9B,cAAgBA,GAAU,EAE7B,EACD,aAAc,GACd,MAAM9zB,EAAOC,EAAS,CAClB,MAAM8V,EAAOohC,GAASn3C,EAAOC,CAAO,EAGpC,GAFK8V,EAAK,MAAM,YACZlI,EAAM,IAAKkI,CAAI,EACfA,EAAK,MAAM,WAAW,UACtB,MAAO,IAAM,CACT,IAAIxJ,EACJ,OAAOpI,IAAGoI,EAAKwJ,EAAK,MAAM,cAAgB,MAAQxJ,IAAO,OAAS,OAASA,EAAG,UAAW,CACrF,QAASwJ,EAAK,OACjB,EAAE,CAAE,GAAG9V,EAAQ,KAAK,CAAE,CACvC,EAEQ,MAAM2mC,EAASxnC,EAAI,CAAA,CAAE,EACfg4C,EAAiB,IAAM,CACzB,IAAI7qC,EAAI+B,EACR,MAAM+oC,GAAoB/oC,GAAM/B,EAAKwJ,EAAK,SAAW,MAAQxJ,IAAO,OAAS,OAASA,EAAG,cAAgB,MAAQ+B,IAAO,OAAS,OAASA,EAAG,OACxI+oC,GACDxpC,EAAM,IAAKkI,CAAI,EACnB6wB,EAAO,MACH,OAAOyQ,GAAqB,WACtBA,EAAiB,CAAE,GAAGr3C,EAAM,eAAgB,EAC5Cq3C,CACtB,EACQD,IAEArhC,EAAK,GAAG,SAAUqhC,CAAc,EAChCn3C,EAAQ,KAAK,OAAQ8V,CAAI,EACzB,MAAMqR,EAAUrR,EAAK,MAAM,WAAW,QAEtC,OAAA9V,EAAQ,OAAO,CAAE,KAAA8V,CAAI,CAAE,EAChB,IAAM5R,GAAEsyC,GAAe,CAAE,OAAQ7P,EAAO,MAAO,KAAM7wB,EAAK,QAAS,QAAAqR,CAAS,EAAE,CAAE,GAAGnnB,EAAQ,KAAK,CAAE,CAC5G,CACL,CAAC,EAOD,SAASq3C,GAAan4C,EAAK4C,EAAS,CAChC,OAAA5C,EACK,UAAU4C,EAAQ,OAAS,UAAWi1C,EAAO,EAC7C,UAAUj1C,EAAQ,aAAe,gBAAiB00C,EAAa,EAC7D,CACH,IAAKtd,GACL,UAAY1S,GAAW,CACnB,IAAIla,EACC,GAAAA,EAAKxK,EAAQ,UAAY,MAAQwK,IAAO,SAAkBA,EAAG,aAC9DxK,EAAQ,OAAO,WAAW,OAAS0kB,EAE1C,EACD,YAAAsb,GACA,UAAAD,GACA,OAAQ7J,GACR,MAAAzkB,EACR,CACA,CAKA,MAAM+jC,GAAgB,OAAO,IAAI,gBAAgB,EAK3CC,GAAe,OAAO,IAAI,eAAe,EAKzC1tC,GAAS,CACX,QAAQ3K,EAAKs4C,EAAU,CAInB,MAAM11C,EAAU,OAAO,OAAO,CAC1B,MAAO,UACP,YAAa,eAChB,EAAE,OAAO01C,GAAa,WAAaA,EAAU,EAAGA,CAAQ,EAInDC,EAAazb,GAAal6B,EAAQ,QAAU,CAAE,CAAA,EAKpDA,EAAQ,OAAS,CAAE,WAAA21C,GAInBv4C,EAAI,OAAO,iBAAiB,SAAWm4C,GAAan4C,EAAK4C,CAAO,EAIhE5C,EAAI,QAAQo4C,GAAex1C,CAAO,EAIlC5C,EAAI,QAAQq4C,GAAcE,CAAU,CACvC,CACL,EAKMC,GAAa,OAAM,EAOzB,SAASC,GAAa3pB,EAAKrsB,EAAU,CACjC,MAAMi2C,EAAW,CAAA,EACXC,EAAcC,GAAU,CAE1B,UAAWnF,KAAQmF,EAEXnF,EAAK,SAASiF,GACdA,EAASjF,EAAK,SAClBiF,EAASjF,EAAK,OAASjnC,EAAMqsC,GAAM,KAAK,KAAM/pB,EAAK2kB,CAAI,EAAGqF,EAAW,KAAK,KAAMrF,CAAI,EAAG,CAAE,KAAM,EAAK,CAAE,CAElH,EAeUqF,EAAazlB,GAAiBvE,EAAKrsB,EAAUk2C,EAV/BlF,GAAS,CACzB,GAAI,EAACA,EAAK,OAEV,UAAW5xC,KAAO62C,EACV,GAAG72C,IAAM,WAAW,GAAG4xC,EAAK,QAAQ,IACpCiF,EAAS72C,KACT,OAAO62C,EAAS72C,GAGhC,CAC6E,EACzE82C,EAAWI,GAASjqB,CAAG,CAAC,CAC5B,CAYA,SAASuE,GAAiBvE,EAAKrsB,EAAUk2C,EAAYK,EAAmB,CAGpE,OAAQvF,GAAS,CACb,MAAM/uC,EAAQu0C,GAAInqB,EAAK2kB,CAAI,EACvB/uC,IAAU8zC,KAEV/E,EAAK,QACLuF,EAAkBvF,CAAI,EACtB,OAAO/uC,GAAU,UACjBi0C,EAAWI,GAASr0C,EAAO,CAAC+uC,CAAI,EAAG,GAAGA,CAAI,CAAC,EAC/ChxC,EAASgxC,EAAM/uC,EAAOoqB,CAAG,EACjC,CACA,CASA,SAAS+pB,GAAM/pB,EAAK2kB,EAAM,CACtB,MAAM/uC,EAAQu0C,GAAInqB,EAAK2kB,CAAI,EAC3B,OAAO/uC,GAAS,OAAOA,GAAU,SAAW,OAAO,KAAKA,CAAK,EAAIA,CACrE,CAOA,SAASu0C,GAAInqB,EAAK2kB,EAAM,CACpB,GAAIhoC,GAAMqjB,CAAG,EAAG,CACZ,GAAI2kB,EAAK,SAAW,EAChB,OAAO3kB,EAAI,MACfA,EAAMA,EAAI,KACb,CACD,OAAO2kB,EAAK,OAAO,CAAC/uC,EAAOuuB,IACnBvuB,IAAU8zC,GACH9zC,EACPA,IAAU,MAAQ,OAAOA,GAAU,SAC5B8zC,GAEJ9zC,EAAMuuB,GACdnE,CAAG,CACV,CAuBA,SAASiqB,GAASjqB,EAAK8pB,EAAQ,CAAE,KAAKM,EAAS,CAC3C,GAAIpqB,IAAQ,KACR,OAAO8pB,EACX,GAAI,CAACM,EAAQ,OAAQ,CACjB,MAAMzF,EAAO,OAAO,eAAe,CAAA,EAAI,QAAS,CAC5C,MAAO,EACnB,CAAS,EAED,GADA3kB,EAAMrjB,GAAMqjB,CAAG,EAAIA,EAAI,MAAQA,EAC3BA,GAAO,OAAOA,GAAQ,SACtB,OAAO,eAAe2kB,EAAM,SAAU,CAAE,MAAO,EAAI,CAAE,EACrDmF,EAAM,KAAKnF,CAAI,MAGf,OAAO,CAACA,CAAI,CAEnB,CACD,GAAI3kB,IAAQ,MAAQ,OAAOA,GAAQ,SAC/B,OAAO8pB,EACX,UAAW/2C,KAAOitB,EAAK,CACnB,MAAM2kB,EAAOyF,EAAQ,OAAOr3C,CAAG,EAC/B,OAAO,eAAe4xC,EAAM,QAAS,CAAE,MAAOA,EAAK,KAAK,GAAG,CAAC,CAAE,EAC9D,MAAM/uC,EAAQoqB,EAAIjtB,GACdquB,GAAOxrB,CAAK,GAAK,MAAM,QAAQA,CAAK,GACpCk0C,EAAM,KAAK,OAAO,eAAenF,EAAM,SAAU,CAAE,MAAO,EAAM,CAAA,CAAC,EACjEmF,EAAQA,EAAM,OAAOG,GAASr0C,EAAO,GAAI,GAAG+uC,CAAI,CAAC,GAGjDmF,EAAM,KAAKnF,CAAI,CAEtB,CACD,OAAOmF,CACX,CAQA,SAASO,GAAOrqB,EAAK,CACjB,OAAIA,IAAQ,MAAQ,OAAOA,GAAQ,WAE/BsqB,GAAWtqB,CAAG,EACdA,EAAMuqB,GAAMvqB,CAAG,EAEVrjB,GAAMqjB,CAAG,IACdA,EAAOsqB,GAAWtqB,EAAI,KAAK,EAAIqqB,GAAOrqB,EAAI,KAAK,EAAIA,EAAI,QAEpDA,CACX,CAOA,MAAMwqB,GAAc,CAChB,OACA,QACA,SACA,WACA,WACA,uBACA,qCACA,+BACA,aACA,aACA,4BACJ,EAMA,SAASC,GAAmB3iC,EAAM/V,EAAO,CACjCA,EAAM,SACN,OAAO,KAAKA,EAAM,OAAO,EAAE,QAASgB,GAAQ,CACpC,OAAOA,GAAQ,WACf+U,EAAK,MAAM,IAAI/U,UAAchB,EAAM,QAAQgB,GAGvCouB,GAASpvB,EAAM,QAAQgB,EAAI,GAAKA,IAAQ,SACxC,OAAO,OAAOhB,EAAM,QAAQgB,EAAI,EAEpD,CAAS,CAET,CAMA,SAAS23C,GAAc34C,EAAO,CAC1B,OAAKA,EAEkB,CAAC,SAAU,YAAa,eAAe,EAAE,OAAO,CAACugB,EAAW8S,IAAa,CAC5F,MAAMnyB,EAAO,KAAKmyB,IAClB,OAAInyB,KAAQlB,GACJ,OAAOA,EAAMkB,IAAU,aACvBqf,EAAUrf,GAAQlB,EAAMkB,IAGzBqf,CACV,EAAE,CAAE,CAAA,EATM,EAWf,CAQA,SAAS42B,GAASn3C,EAAOC,EAAS8B,EAAU,CAAA,EAAI,CAK5C,MAAM4Q,EAAS,OAAO,OAAO,CAAE,EAAExH,GAAOosC,EAAa,GAAK,GAAIx1C,CAAO,EAI/D40C,EAAWzrC,KAIXqV,EAAYo4B,GAAkEhC,GAAS,MAAM,KAAK,EAIlGiC,EAAa54C,EAAM,aAAe,OAQlC6D,EAAQ7D,EAAM,aAAe,OAC7BA,EAAM,WACNgyB,GAAS/xB,EAAQ,MAAM,KAAK,EAKlC,SAAS44C,GAAqB,CAC1B,MAAMC,EAAe,CACjB,GAAG1oB,GAAUpwB,CAAK,EAClB,GAAGugB,CACf,EACcib,EAAQ1K,GAAOV,GAAUnwB,EAAQ,KAAK,EAAGw4C,EAAW,EACrDjd,EAAM,MACPA,EAAM,IAAM5N,MAChBkrB,EAAa,MAAQtd,EACrB,MAAMud,EAAa5nB,GAAKf,GAAUnwB,EAAQ,KAAK,EAAGw4C,EAAW,EAC7D,UAAWO,KAAYD,EACnBD,EAAaznB,GAAM2nB,CAAQ,GAAKD,EAAWC,GAE/C,MAAMC,EAAe,CAAE,MAAO,CAAA,GAC9B,OAAAP,GAAmBO,EAAcj5C,CAAK,EACtC,OAAO,OAAO84C,EAAcG,EAAa,KAAK,EAC1C,OAAOH,EAAa,MAAS,WAC7BA,EAAa,WAAaA,EAAa,KACvC,OAAOA,EAAa,MAEjBA,CACV,CAID,MAAMA,EAAeD,IAIfxhB,EAASyhB,EAAa,OACtB,KACA94C,EAAM,QAAUmL,GAAO4rC,GAAc,IAAI,EACzChhC,EAAOsoB,GAAW7O,GAAO7c,GAAU,CAAA,EAAI,CACzC,KAAM3S,EAAM,MAAQ,OACpB,MAAA6D,EACA,OAAAwzB,EACA,SAAU1kB,EAAO,SAAW,CAAE,GAAE,OAAO3S,EAAM,OAAO,EACpD,OAAQA,EAAM,OACd,MAAO84C,EACP,MAAO94C,EAAM,KACrB,EAAO,GAAO,EAAI,CAAC,EAIV+V,EAAK,MAAM,YACZlI,EAAM,IAAKkI,CAAI,EAKnB,MAAMmjC,EAAiB95C,EAAI,IAAI,IAAI2W,EAAK,MAAM,WAAW,OAAS,CAAE,CAAA,CAAC,EAKrEA,EAAK,GAAG,cAAe,CAAC,CAAE,QAASojC,CAAS,IAAO,CAC3C,MAAM,QAAQA,CAAS,GACvBA,EAAU,QAASC,GAAYF,EAAe,MAAM,IAAIE,CAAO,CAAC,CAC5E,CAAK,EAID,MAAMC,EAAkBh4B,GAAS,IAAMo3B,GAAY,OAAO,CAAC,GAAGS,EAAe,KAAK,CAAC,EAAE,OAAO,CAACI,EAAOjkB,KAC5F,OAAOA,GAAS,UAChBikB,EAAM,KAAKjoB,GAAMgE,CAAI,CAAC,EACtBikB,EAAM,KAAK9nB,GAAM6D,CAAI,CAAC,GAGtBikB,EAAM,KAAKjkB,CAAI,EAEZikB,GACR,CAAA,CAAE,CAAC,EAEN5tC,GAAY,IAAMgtC,GAAmB3iC,EAAM/V,CAAK,CAAC,EAMjD,MAAMu5C,EAAcnpB,GAAUpwB,CAAK,EACnC,UAAWq1B,KAAQkkB,EACf5tC,EAAM,IAAM3L,EAAMq1B,GAAO,IAAM,CACvBr1B,EAAMq1B,KAAU,SAChBtf,EAAK,MAAMsf,GAAQr1B,EAAMq1B,GAEzC,CAAS,EAKL,MAAMmkB,EAAoB,IAAI,IACxBC,EAAgBrpB,GAAUnwB,EAAQ,KAAK,EAC7CyL,GAAY,IAAM,CACdguC,EAAgBvoB,GAAKsoB,EAAeJ,EAAgB,KAAK,CAAC,CAClE,CAAK,EAKD,SAASK,EAAgBC,EAAW,CAChCH,EAAkB,QAAS76B,GAAS,CAChCA,IACA66B,EAAkB,OAAO76B,CAAI,CACzC,CAAS,EACD,UAAW0W,KAAQskB,EAAW,CAC1B,MAAMje,EAAYrK,GAAMgE,CAAI,EAC5BmkB,EAAkB,IAAI7tC,EAAM,IAAM1L,EAAQ,MAAMo1B,GAAO,IAAM,CACzDtf,EAAK,MAAM2lB,GAAaz7B,EAAQ,MAAMo1B,EACzC,CAAA,CAAC,CACL,CACJ,CAwBD,GAnBA3pB,GAAY,IAAM,CACd,MAAM8vB,EAAQ1K,GAAOV,GAAUnwB,EAAQ,KAAK,EAAGo5C,EAAgB,KAAK,EACpEtjC,EAAK,MAAM,MAAQ,OAAO,OAAO,CAAA,EAAIA,EAAK,MAAM,OAAS,CAAE,EAAEylB,CAAK,CAC1E,CAAK,EAID9vB,GAAY,IAAM,CACd,MAAMsb,EAAWhnB,EAAM,OAAO,IAAK6N,GAAUwmB,GAAc,CACvD,IAAK9B,GAAQ1kB,CAAK,EAClB,KAAM,QACN,MAAOA,EACP,KAAM,CAAE,OAAQ,MAAQ,CAC3B,CAAA,CAAC,EACFkI,EAAK,MAAM,MAAMiR,EAAW9kB,GAAYA,EAAQ,OAAS,SAAWA,EAAQ,KAAK,SAAW,MAAM,CAC1G,CAAK,EAIG6T,EAAK,OAAS,QAAS,CACvB,MAAMogB,EAAY,GAAGpgB,EAAK,YAC1BrK,GAAY,IAAM,CACd,MAAMkuC,EAAO,OAAO,KAAK55C,EAAM,WAAW,EACrC45C,EAAK,QACN7jC,EAAK,YAAY,GAAMogB,CAAS,EACpC,MAAMnP,EAAW4yB,EAAK,OAAO,CAAC5yB,EAAUhmB,IAAQ,CAC5C,IAAI6C,EAAQ7D,EAAM,YAAYgB,GAC9B,OAAI,OAAO6C,GAAU,WACjBA,EAAQ,CAACA,CAAK,GACd,MAAM,QAAQA,CAAK,IACnBmjB,EAAShmB,GAAO6C,EAAM,IAAKgK,GAAUwmB,GAAc,CAC/C,IAAKxmB,EACL,KAAM,QACN,MAAOA,EACP,KAAM,CAAE,OAAQsoB,CAAW,CAC9B,CAAA,CAAC,GAECnP,CACV,EAAE,CAAE,CAAA,EACLjR,EAAK,MAAM,MAAMiR,EAAW9kB,GAAYA,EAAQ,OAAS,SAAWA,EAAQ,KAAK,SAAWi0B,CAAS,CACjH,CAAS,CACJ,CAIDzqB,GAAY,IAAM,OAAO,OAAOqK,EAAK,OAAQ/V,EAAM,MAAM,CAAC,EAItD+V,EAAK,OAAS,SACdsrB,GAAQ0V,GAAchhC,CAAI,EAE9B,IAAI8jC,EAEJ,MAAMC,EAAQ,IAAI,QAIlB,OAAA/jC,EAAK,GAAG,eAAgB,IAAM,CAC1B,IAAIxJ,EAAI+B,EAKR,GAHArO,EAAQ,KAAK,YAAasM,EAAKwJ,EAAK,WAAa,MAAQxJ,IAAO,OAAS,OAASA,EAAG,MAAOwJ,CAAI,EAChG,aAAa8jC,CAAY,EACzBA,EAAe,WAAW55C,EAAQ,KAAM,GAAI,SAAUqO,EAAKyH,EAAK,WAAa,MAAQzH,IAAO,OAAS,OAASA,EAAG,MAAOyH,CAAI,EACxH6iC,GAAc7iC,EAAK,QAAS,CAC5B,MAAMgkC,EAAWzB,GAAOviC,EAAK,QAAQ,KAAK,EACtCqZ,GAAS2qB,CAAQ,GAAKzB,GAAOt4C,EAAM,UAAU,IAAM+5C,GAInDD,EAAM,IAAIC,CAAQ,EAEtB95C,EAAQ,KAAK,oBAAqB85C,CAAQ,CAC7C,CACT,CAAK,EAIGnB,IACAhB,GAAaoC,GAAMh6C,EAAO,YAAY,EAAG,CAAC4yC,EAAM/uC,IAAU,CACtD,IAAI0I,EACJ,MAAM0tC,EAAW3B,GAAOz0C,CAAK,EAC7B,GAAIurB,GAAS6qB,CAAQ,GAAKH,EAAM,IAAIG,CAAQ,EACxC,OAAOH,EAAM,OAAOG,CAAQ,EAE3BrH,EAAK,QAGLrmC,EAAKwJ,EAAK,GAAG68B,CAAI,KAAO,MAAQrmC,IAAO,QAAkBA,EAAG,MAAM1I,EAAO,EAAK,EAF/EkS,EAAK,MAAMlS,EAAO,EAAK,CAGvC,CAAS,EAKGkS,EAAK,QAAUlS,GACfkS,EAAK,KAAK,cAAc,GAOhCnK,GAAgB,IAAMmK,EAAK,QAAO,CAAE,EAC7BA,CACX,CA0DA,MAAMmkC,GAAc,SAAqBnkC,EAAM,CAI3CA,EAAK,OAAO,MAAM,WAAaiN,GAAMA,EAAE,QAAQ,EAC/C,MAAMm3B,EAAU/6C,EAAI,CAAC2W,EAAK,OAAO,MAAM,UAAU,CAAC,EAIlDA,EAAK,OAAO,MAAM,SAAWiN,GAAMA,EAAE,OAAS,OAAO,EACrD,MAAMo3B,EAAYh7C,EAAI,CAAC,CAAC2W,EAAK,OAAO,MAAM,QAAQ,CAAC,EAInD,IAAIskC,EAAY,GAChBhvC,GAAS,IAAM,CACXgvC,EAAY,EACpB,CAAK,EAID,MAAMC,EAAoBn9B,GAASpH,EAAK,MAAM,OAAO,CAAChF,EAAO7O,KACrDA,EAAQ,UACR6O,EAAM7O,EAAQ,KAAOA,GAElB6O,GACR,CAAA,CAAE,CAAC,EAIAwpC,EAAuBn7C,EAAI2W,EAAK,MAAM,sBAAwB,MAAM,EAC1EA,EAAK,GAAG,4BAA6B,CAAC,CAAE,QAAA8c,CAAO,IAAO,CAClD0nB,EAAqB,MAAQ1nB,CACrC,CAAK,EAID,MAAM2nB,EAAiBp7C,EAAIm7C,EAAqB,QAAU,MAAM,EAI1DE,EAAoBp5B,GAAS,IAAM,CACrC,GAAIphB,EAAQ,MAAM,UACd,MAAO,GACX,GAAI,CAACu6C,EAAe,OAAS,CAACv6C,EAAQ,MAAM,QACxC,MAAO,GAEX,OAAQs6C,EAAqB,MAAK,CAC9B,IAAK,OACD,MAAO,GACX,IAAK,OACD,OAAOt6C,EAAQ,MAAM,QACzB,IAAK,QACD,OAAOA,EAAQ,MAAM,MACzB,QACI,MAAO,EACd,CACT,CAAK,EAIKy6C,EAAar5B,GAAS,IACjBs5B,EAAc,MACfR,EAAQ,OAAS,CAACC,EAAU,MAC5Bn6C,EAAQ,MAAM,OAAS,CAACuuB,GAAMvuB,EAAQ,KAAK,CACpD,EAIK06C,EAAgBv7C,EAAI,MAAM,QAAQ2W,EAAK,MAAM,WAAW,GAAKA,EAAK,MAAM,YAAY,OAAS,CAAC,EACpGA,EAAK,GAAG,mBAAoB,CAAC,CAAE,QAAS83B,CAAK,IAAO,CAChD8M,EAAc,MAAQ,MAAM,QAAQ9M,CAAK,GAAKA,EAAM,OAAS,CACrE,CAAK,EAKD,MAAM7mB,EAAW3F,GAAS,IAAM,CAC5B,MAAMu5B,EAAkB,CAAA,EACxB,UAAW55C,KAAOs5C,EAAmB,CACjC,MAAMp4C,EAAUo4C,EAAkBt5C,IAC9BkB,EAAQ,OAAS,cAAgBu4C,EAAkB,SACnDG,EAAgB55C,GAAOkB,EAE9B,CACD,OAAO04C,CACf,CAAK,EAIKC,EAAK19B,GAASpH,EAAK,MAAM,OAAO,CAACiR,EAAU9kB,KACzCA,EAAQ,OAAS,MAAQA,EAAQ,UACjC8kB,EAAS9kB,EAAQ,KAAOA,GACrB8kB,GACR,CAAA,CAAE,CAAC,EAKA8zB,EAAgB39B,GAAS,CAAA,CAAE,EAC3B49B,EAAU,IAAI,MAAMD,EAAe,CACrC,OAAOpqB,EAAM,CACT,KAAM,CAACpQ,EAAQ4N,CAAQ,EAAIwC,EAC3B,IAAIsqB,EAAY,QAAQ,IAAI,GAAGtqB,CAAI,EACnC,MAAI,CAACsqB,GAAa,OAAO9sB,GAAa,UAC9B,CAACF,EAAI1N,EAAQ4N,CAAQ,GAAK,CAACA,EAAS,WAAW,KAAK,GAC/Bmc,GAAet0B,CAAI,EAC3B,MAAOA,GAAS,CACzB,MAAMklC,EAAc,OAAOllC,EAAK,OAAO,aAAgB,WACjDA,EAAK,OAAO,YAAYmY,EAAUnY,CAAI,EACtC,GACAmlC,EAAsBnlC,EAAK,OAAO,QAClCurB,GAAcpT,EAAUnY,EAAMA,EAAK,OAAO,QAAQmY,EAAS,EAC3D,GACAitB,EAAqB7Z,GAAcpT,EAAUnY,EAAMA,EAAK,MAAM,IAAImY,SAAgB,EAClFktB,EAAqB9Z,GAAcpT,EAAUnY,EAAMA,EAAK,MAAM,GAAGmY,SAAgB,EACvF8sB,EAAYvZ,GAAkB1rB,EAAMmY,EAAU+sB,EAAaC,EAAqBC,EAAoBC,CAAkB,EACtH96B,EAAO4N,GAAY8sB,CAC3C,CAAqB,EAGFA,CACV,CACT,CAAK,EACKK,EAAch6B,GAAS,IAAM,CAC/B,MAAMi6B,EAAa,CAAA,EACfr7C,EAAQ,MACRq7C,EAAW,KAAK,QAAQvlC,EAAK,MAAM,IAAI,EAE3C,UAAW/U,KAAOgmB,EAAS,MACvBs0B,EAAW,KAAK,GAAGvlC,EAAK,MAAM,MAAM/U,GAAK,EAE7C,OAAOs6C,EAAW,OAASA,EAAW,KAAK,GAAG,EAAI,MAC1D,CAAK,EACKz3C,EAAQzE,EAAI2W,EAAK,KAAK,EACtBslB,EAASj8B,EAAI2W,EAAK,KAAK,EACvB9V,EAAUkd,GAAS,CACrB,OAAAke,EACA,MAAOtlB,EAAK,MAAM,MAClB,SAAUA,EAAK,MAAM,SACrB,YAAAslC,EACA,IAAK,CACD,OAASptB,GAAQ,OAAO,KAAKA,CAAG,EAAE,OAClC,OAASpqB,GAAU,OAAOA,CAAK,EAC/B,OAASA,GAAU,OAAOA,CAAK,EAC/B,KAAOA,GAAU,KAAK,UAAUA,CAAK,EACrC,GAAAsqB,EACH,EACD,SAAU,CACN,KAAOzpB,GAAM,CACTqR,EAAK,MAAM,IAAIse,GAAc,CAAE,IAAK,UAAW,QAAS,GAAO,MAAO,EAAI,CAAE,CAAC,EACzE,OAAOte,EAAK,MAAM,MAAM,QAAW,YACnCA,EAAK,MAAM,MAAM,OAAOrR,CAAC,CAEhC,EACD,MAAO,IAAM,CACTqR,EAAK,MAAM,IAAIse,GAAc,CAAE,IAAK,QAAS,QAAS,GAAO,MAAO,EAAI,CAAE,CAAC,CAC9E,EACD,SAAW3vB,GAAM,CACbqR,EAAK,MAAMrR,EAAE,OAAO,KAAK,EACzBqR,EAAK,KAAK,kBAAmBrR,CAAC,CACjC,CACJ,EACD,KAAMqR,EAAK,MAAM,KACjB,GAAIA,EAAK,MAAM,GACf,MAAOA,EAAK,MAAM,MAClB,SAAAiR,EACA,KAAMxJ,GAAQzH,CAAI,EAClB,QAASA,EAAK,MAAM,QACpB,MAAO,CACH,QAAS,GACT,SAAU2kC,EACV,MAAO,GACP,UAAW,GACX,QAAS3kC,EAAK,UACd,MAAOokC,EACP,OAAQC,EACR,MAAOO,EACP,kBAAAF,CACH,EACD,KAAM1kC,EAAK,MAAM,KACjB,OAAQA,EAAK,MAAM,OACnB,GAAA8kC,EACA,MAAAh3C,EACA,QAAAk3C,CACR,CAAK,EAIDhlC,EAAK,GAAG,UAAW,IAAM,CAChBoY,GAAGluB,EAAQ,MAAO8V,EAAK,KAAK,IAC7BslB,EAAO,MAAQtlB,EAAK,MACpBlS,EAAM,MAAQkS,EAAK,MACnBwlC,GAAW13C,CAAK,EAChB03C,GAAWlgB,CAAM,GAErBtlB,EAAK,MAAM,MAAQic,GAASjc,EAAK,KAAK,CAC9C,CAAK,EAIDA,EAAK,GAAG,UAAW,CAAC,CAAE,QAASylC,CAAS,IAAO,CAC3Cv7C,EAAQ,MAAM,QAAUu7C,CAChC,CAAK,EAMD,SAAS/Q,EAAaE,EAAS,CAC3BA,EAAQ,QAAStV,GAAS,CACtBA,EAAOhE,GAAMgE,CAAI,EACb,CAACrH,EAAI/tB,EAASo1B,CAAI,GAAKrH,EAAIjY,EAAK,MAAOsf,CAAI,IAC3Cp1B,EAAQo1B,GAAQtf,EAAK,MAAMsf,IAE/Btf,EAAK,GAAG,QAAQsf,IAAQ,CAAC,CAAE,QAAAxC,KAAc,CACrC5yB,EAAQo1B,GAAQxC,CAChC,CAAa,CACb,CAAS,CACJ,CAsBD4X,GAlBkB,IAAM,CACpB,MAAMzqC,EAAQ,CACV,OACA,QACA,WACA,UACA,OACA,QACA,WACA,iBACA,IACZ,EACcy7C,EAAc,6BACdC,EAAgB,OAAO,KAAK3lC,EAAK,KAAK,EAAE,OAAQsf,GAC3ComB,EAAY,KAAKpmB,CAAI,CAC/B,EACD,OAAOr1B,EAAM,OAAO07C,CAAa,CACzC,GAC0B,CAAE,EAKxB,SAASC,EAAUpgB,EAAY,CACvBA,EAAW,OACXkP,EAAalP,EAAW,KAAK,CACpC,CACDxlB,EAAK,MAAM,YAAc4lC,EAAU5lC,EAAK,MAAM,UAAU,EAKxDA,EAAK,GAAG,cAAe,CAAC,CAAE,QAAA8c,CAAO,IAAO4X,EAAa5X,CAAO,CAAC,EAI7D9c,EAAK,GAAG,QAAS,CAAC,CAAE,QAAA8c,CAAO,IAAO,CAC1B9c,EAAK,OAAS,SAAW,CAACnL,GAAMioB,CAAO,GAAK,CAAC0lB,GAAW1lB,CAAO,EAC/DwI,EAAO,MAAQ1J,GAAakB,CAAO,GAGnCwI,EAAO,MAAQxI,EACf0oB,GAAWlgB,CAAM,EAE7B,CAAK,EAIDtlB,EAAK,GAAG,SAAU,CAAC,CAAE,QAAA8c,CAAO,IAAO,CAC3B9c,EAAK,OAAS,SAAW,CAACnL,GAAMioB,CAAO,GAAK,CAAC0lB,GAAW1lB,CAAO,EAC/DhvB,EAAM,MAAQw3B,EAAO,MAAQ1J,GAAakB,CAAO,GAGjDhvB,EAAM,MAAQw3B,EAAO,MAAQxI,EAC7B0oB,GAAW13C,CAAK,GAEpBkS,EAAK,KAAK,cAAc,EAEpB,CAAC9V,EAAQ,MAAM,OACf8V,EAAK,WACLskC,GACA,CAAClsB,GAAGtqB,EAAM,MAAOkS,EAAK,MAAM,KAAK,GACjC9V,EAAQ,SAAS,QACjBy6C,GACA3kC,EAAK,OAAS,SACdqkC,EAAU,OACV,CAAC/nB,GAAStc,EAAK,MAAM,cAAc,GACnCA,EAAK,MAAM,OAAQ7T,GAAY,CAAE,IAAIqK,EAAI,MAAO,EAAErK,EAAQ,OAAS,WAAaqK,EAAKrK,EAAQ,QAAU,MAAQqK,IAAO,OAAS,OAASA,EAAG,aAAe,GAAQ,CAAA,CAE9K,CAAK,EAKD,MAAMqvC,EAAc,MAAO15C,GAAY,CAC/BA,EAAQ,OAAS,MACjBA,EAAQ,SACR,CAACA,EAAQ,KAAK,cACd24C,EAAG34C,EAAQ,KAAOA,EAEbA,EAAQ,QACbo4C,EAAkBp4C,EAAQ,KAAOA,EAE5BA,EAAQ,OAAS,UAEtBjC,EAAQ,MAAMiC,EAAQ,KAAO,CAAC,CAACA,EAAQ,MAEnD,EAII6T,EAAK,GAAG,gBAAkBrR,GAAMk3C,EAAYl3C,EAAE,OAAO,CAAC,EACtDqR,EAAK,GAAG,kBAAoBrR,GAAMk3C,EAAYl3C,EAAE,OAAO,CAAC,EACxDqR,EAAK,GAAG,kBAAmB,CAAC,CAAE,QAAS7T,CAAO,IAAO,CACjD,OAAO24C,EAAG34C,EAAQ,KAClB,OAAOo4C,EAAkBp4C,EAAQ,KACjC,OAAOjC,EAAQ,MAAMiC,EAAQ,IACrC,CAAK,EACD6T,EAAK,GAAG,mBAAoB,IAAM,CAC9BokC,EAAQ,MAAQ,EACxB,CAAK,EACDpkC,EAAK,GAAG,qBAAsB,IAAM,CAChCokC,EAAQ,MAAQ,EACxB,CAAK,EACDpkC,EAAK,GAAG,iBAAkB,IAAM,CAC5BqkC,EAAU,MAAQ,EAC1B,CAAK,EACDrkC,EAAK,GAAG,mBAAoB,IAAM,CAC9BqkC,EAAU,MAAQ,EAC1B,CAAK,EAIDzuC,EAAM8uC,EAAoB52C,GAAU,CAC5BA,IACA22C,EAAe,MAAQ,GAEnC,CAAK,EACDzkC,EAAK,QAAU9V,EAEf8V,EAAK,KAAK,UAAWA,EAAM,EAAK,CACpC,EAOMuiB,GAAgB,CAACv2B,EAAU,KAAO,CACpC,KAAM,CAAE,MAAA8rC,EAAQ,GAAI,QAAAgO,EAAU,CAAE,EAAE,OAAQC,EAAW,CAAE,EAAE,SAAA90B,EAAW,CAAA,EAAI,OAAAP,EAAS,OAAW,MAAArF,EAAQ,OAAW,cAAAkvB,EAAgB,OAAW,WAAAC,EAAa,OAAW,MAAAF,EAAQ,CAAE,KAAK0L,CAAW,EAAKh6C,EAK3LsqC,EAAaL,GAAuB,CACtC,GAAGgQ,GACH,GAAInO,GAAS,CAAA,CACrB,CAAK,EAKKlnB,EAAO2oB,GAAiB9f,GAAO,CAAE,GAAA6f,GAAI,GAAIwM,GAAW,EAAG,EAAI70B,CAAQ,CAAC,EAKpEI,EAAU8a,GAAoB+Z,GAAQH,CAAQ,EAI9CrL,EAAcL,GAAkBhvB,EAAOivB,EAAOC,EAAeC,CAAU,EAC7E,OAAO/gB,GAAO,CACV,QAAS,CAACpI,EAASqpB,EAAayJ,GAAavzB,EAAM0lB,CAAU,EAC7D,GAAK5lB,EAAc,CAAE,OAAQ,CAAE,OAAAA,CAAM,GAAvB,CAAE,CACxB,EAAOs1B,GAAe,GAAI,EAAI,CAC9B,EAMoBrF,GAAgB,CAChC,KAAM,cACN,MAAO,CACH,KAAM,CACF,KAAM,OACN,QAAS,EACZ,EACD,WAAY,CACR,KAAM,SACN,QAAS,IACZ,EACD,cAAe,CACX,KAAM,SACN,QAAS,IACZ,CACJ,EACD,MAAM12C,EAAO,CACT,IAAIuM,EAAI+B,EACR,MAAMm2B,EAAOrlC,EAAI,MAAS,EACpBuT,EAASxH,GAAOosC,GAAe,CAAE,CAAA,EACjClgB,EAASlsB,GAAO4rC,GAAc,IAAI,EACxC,IAAIrF,EACJ,GAAI1xC,EAAM,YAAc,OAAOA,EAAM,YAAe,WAEhD0xC,EAAchB,GAAkB1wC,EAAM,UAAU,UAE3Cq3B,IAAY,GAAA9qB,EAAK8qB,EAAO,SAAW,MAAQ9qB,IAAO,SAAkBA,EAAG,YAE5EmlC,EAAchB,GAAkBrZ,EAAO,MAAM,UAAU,UAElDr3B,EAAM,eAAiB,OAAOA,EAAM,eAAkB,WAC3D0xC,EAAchB,GAAkBgB,EAAa1xC,EAAM,aAAa,MAE/D,CAED,MAAMk8C,GAAc5tC,EAAqDqE,GAAO,WAAa,MAAQrE,IAAO,OAAS,OAASA,EAAG,KAAKxE,GAC3H,OAAOA,EAAO,aAAgB,UACxC,EACGoyC,IACAxK,EAAcwK,EAAW,YAEhC,CACD,GAAIxK,GAAe,OAAOA,GAAgB,WAAY,CAClD,MAAMyK,EAAgBzK,EAAY1xC,EAAM,IAAI,EACxCm8C,aAAyB,QACzBA,EAAc,KAAMhL,GAAc,CAC9B1M,EAAK,MAAQ0M,CACjC,CAAiB,EAGD1M,EAAK,MAAQ0X,CAEpB,CACD,MAAO,IACC1X,EAAK,MACEtgC,GAAE,OAAQ,CACb,MAAO,eACP,UAAWsgC,EAAK,KACpC,CAAiB,EAEE,IAEd,CACL,CAAC,GCxxDA,UAAU,CAAC,MAAM,EAAE,SAAS,cAAc,MAAM,EAAE,EAAE,KAAK,aAAa,EAAE,QAAQ,uBAAuB,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,SAAS,cAAc,iBAAiB,EAAE,QAAQ,IAAI,GAAG,SAAS,KAAK,YAAY,CAAC,EAAE,IAAIz/B,EAAE,SAAS,cAAc,cAAc,EAAE,KAAK,IAAI,EAAEA,GAAGA,EAAE,SAAS,EAAE,SAASA,EAAE,QAAQ,GAAC,EAAG,UAAU,CAAC,UAAUN,KAAK,SAAS,KAAK,uBAAuB,YAAY,EAAEA,EAAE,QAAQ,EAAC,CAAE,EAAE,EAAE,CAAC,WAAW,GAAG,UAAU,GAAG,QAAQ,EAAE,EAAEyqB,EAAE,IAAI,iBAAiB,CAAC,EAAE,CAAC,SAAS,cAAc,iBAAiB,EAAE,QAAQ,IAAI,GAAG,SAAS,cAAc,cAAc,EAAE,KAAK,IAAI,EAAE,QAAQ,MAAM;AAAA,EAAkD;AAAA,EAA4D;AAAA,EAA8C;AAAA,2EAA8E,GAAGA,EAAE,QAAQ,SAAS,KAAK,CAAC,EAAE,EAAC,EAAG,GAAG,ECAr2B,MAAMitB,GAAyB,CAC3B,UAAW,OACX,MAAO,eACP,eAAgB,GAChB,aAAc,GACd,SAAU,GACV,iBAAkB,IAClB,OAAQ,WACR,mBAAoB,GACpB,QAAS,OACT,QAAS,KACb,EAEMC,GAAUl9C,GAAQ,WAAYA,GAAO,qBAAsBA,EAAI,OAE/Dm9C,GAAYn9C,GAAQ,CACtB,IAAIo9C,EACJ,OAAIp9C,IAAQ,OACRo9C,EAAO,GACFp9C,IAAQ,OACbo9C,EAAO,GAEPA,EAAOF,GAAOl9C,CAAG,EACdo9C,EACD,CACE,QAAS,UACT,QAAS,SACZ,EACC,CACE,QAAS,WACT,QAAS,kBACrB,CACA,EAEMC,GAAeC,GAAY,OAAOA,GAAY,UAAYA,IAAY,OAEtEC,GAAmB,CAACthC,EAAIqhC,IAAY,CACtCrhC,EAAG,QAAQ,cAAgBohC,GAAYC,CAAO,EAAIA,EAAU,MAChE,EAKME,GAAkB,CAAC,CAAE,oBAAAC,EAAqB,qBAAAC,EAAsB,uBAAAC,EAAwB,wBAAAC,CAAyB,EAAE15C,IAAY,CACjI,MAAM25C,EAAgB,SAAS,cAAc35C,CAAO,EACpD,OAAA25C,EAAc,MAAM,IAAM,IAC1BA,EAAc,MAAM,KAAO,IAC3BA,EAAc,MAAM,MAAQ,OAC5BA,EAAc,MAAM,OAAS,OAC7BA,EAAc,MAAM,QAAU,QAC9BA,EAAc,MAAM,SAAW,WAC/BA,EAAc,MAAM,aAAe,GAAGJ,KAAuBC,KAAwBE,KAA2BD,IAChHE,EAAc,MAAM,SAAW,SAC/BA,EAAc,MAAM,cAAgB,OAEpCA,EAAc,MAAM,gBAAkB,wCAC/BA,CACX,EAEMC,GAAoB,CAACjqC,EAAGC,EAAGiqC,EAAMn7C,IAAY,CAC/C,MAAMo7C,EAAc,SAAS,cAAc,KAAK,EAChD,OAAAA,EAAY,MAAM,SAAW,WAC7BA,EAAY,MAAM,MAAQ,GAAGD,MAC7BC,EAAY,MAAM,OAAS,GAAGD,MAC9BC,EAAY,MAAM,IAAM,GAAGlqC,MAC3BkqC,EAAY,MAAM,KAAO,GAAGnqC,MAC5BmqC,EAAY,MAAM,WAAap7C,EAAQ,MACvCo7C,EAAY,MAAM,aAAe,MACjCA,EAAY,MAAM,QAAU,GAAGp7C,EAAQ,iBACvCo7C,EAAY,MAAM,UAAY,gCAC9BA,EAAY,MAAM,WAAa,aAAap7C,EAAQ,aAAaA,EAAQ,mBAAmBA,EAAQ,aAAaA,EAAQ,SAClHo7C,CACX,EAEA,SAASC,GAAUC,EAAIC,EAAIC,EAAIC,EAAI,CAC/B,MAAMC,EAASJ,EAAKE,EACdG,EAASJ,EAAKE,EACpB,OAAO,KAAK,KAAKC,EAASA,EAASC,EAASA,CAAM,CACtD,CAEA,SAASC,GAA4B3qC,EAAGC,EAAG,CAAE,MAAAyE,EAAO,OAAAC,CAAM,EAAI,CAC1D,MAAMimC,EAAUR,GAAUpqC,EAAGC,EAAG,EAAG,CAAC,EAC9B4qC,EAAWT,GAAUpqC,EAAGC,EAAGyE,EAAO,CAAC,EACnComC,EAAaV,GAAUpqC,EAAGC,EAAG,EAAG0E,CAAM,EACtComC,EAAcX,GAAUpqC,EAAGC,EAAGyE,EAAOC,CAAM,EACjD,OAAO,KAAK,IAAIimC,EAASC,EAAUC,EAAYC,CAAW,CAC9D,CAEA,MAAMC,GAAqB,CAAC,CAAE,EAAAhrC,EAAG,EAAAC,CAAG,EAAE,CAAE,IAAA6H,EAAK,KAAAC,MAAY,CACrD,EAAG/H,EAAI+H,EACP,EAAG9H,EAAI6H,CACX,GAEMmjC,GAAa,qBACnB,SAASC,GAAmB9iC,EAAI,CAC5B,MAAM6b,EAAQknB,GAAa/iC,CAAE,EAC7BgjC,GAAahjC,EAAI6b,EAAQ,CAAC,CAC9B,CACA,SAASonB,GAAmBjjC,EAAI,CAC5B,MAAM6b,EAAQknB,GAAa/iC,CAAE,EAC7BgjC,GAAahjC,EAAI6b,EAAQ,CAAC,CAC9B,CACA,SAASmnB,GAAahjC,EAAI6b,EAAO,CAC7B7b,EAAG,QAAQ6iC,IAAchnB,EAAM,SAAQ,CAC3C,CACA,SAASknB,GAAa/iC,EAAI,CACtB,IAAI7O,EACJ,OAAO,UAAUA,EAAK6O,EAAG,QAAQ6iC,OAAiB,MAAQ1xC,IAAO,OAASA,EAAK,IAAK,EAAE,CAC1F,CACA,SAAS+xC,GAAgBljC,EAAI,CACzB,OAAOA,EAAG,QAAQ6iC,GACtB,CAEA,MAAMM,GAAO,CAAC37C,EAAOwY,EAAIrZ,IAAY,CACjC,MAAM8R,EAAOuH,EAAG,wBACVojC,EAAiB,OAAO,iBAAiBpjC,CAAE,EAC3C,CAAE,EAAApI,EAAG,EAAAC,CAAC,EAAK+qC,GAAmBp7C,EAAOiR,CAAI,EACzCqpC,EAAO,KAAOS,GAA4B3qC,EAAGC,EAAGY,CAAI,EAIpDmpC,EAAgBL,GAAgB6B,EAAgBz8C,EAAQ,OAAO,EAC/D08C,EAASxB,GAAkBjqC,EAAGC,EAAGiqC,EAAMn7C,CAAO,EAEpDm8C,GAAmB9iC,CAAE,EAErB,IAAIsjC,EAAwB,GACxBF,EAAe,WAAa,WACxBpjC,EAAG,MAAM,WACTsjC,EAAwBtjC,EAAG,MAAM,UACrCA,EAAG,MAAM,SAAW,YAExB4hC,EAAc,YAAYyB,CAAM,EAChCrjC,EAAG,YAAY4hC,CAAa,EAC5B,IAAI2B,EAAqB,GACzB,MAAMC,EAAel6C,GAAM,CACnB,OAAOA,EAAM,MACb,SAAS,oBAAoB,YAAak6C,CAAW,EACrD,SAAS,oBAAoB,gBAAiBA,CAAW,GAEzDD,EACAE,IAEAF,EAAqB,EACjC,EACUE,EAAe,IAAM,CACvBJ,EAAO,MAAM,WAAa,WAAW18C,EAAQ,2BAC7C08C,EAAO,MAAM,QAAU,IACvB,WAAW,IAAM,CACbzB,EAAc,OAAM,EACpBqB,GAAmBjjC,CAAE,EACjB+iC,GAAa/iC,CAAE,IAAM,IACrBkjC,GAAgBljC,CAAE,EAElBA,EAAG,MAAM,SAAWsjC,EAEpC,EAAW38C,EAAQ,iBAAmB,GAAI,CAC1C,EACI,SAAS,iBAAiB,YAAa68C,CAAW,EAClD,SAAS,iBAAiB,gBAAiBA,CAAW,EACtD,MAAMhxB,EAAQ,WAAW,IAAM,CAC3B,SAAS,oBAAoB,gBAAiBkxB,CAAU,EACxD,sBAAsB,IAAM,CACxBL,EAAO,MAAM,UAAY,gCACzBA,EAAO,MAAM,QAAU,GAAG18C,EAAQ,eAClC,WAAW,IAAM68C,EAAa,EAAE78C,EAAQ,SAAW,GAAI,CACnE,CAAS,CACT,EAAOA,EAAQ,kBAAkB,EACvB+8C,EAAa,IAAM,CACrB,aAAalxB,CAAK,EAClBovB,EAAc,OAAM,EACpB,SAAS,oBAAoB,YAAa4B,CAAW,EACrD,SAAS,oBAAoB,gBAAiBA,CAAW,EACzD,SAAS,oBAAoB,gBAAiBE,CAAU,CAChE,EACI,SAAS,iBAAiB,gBAAiBA,CAAU,CACzD,EAEMC,GAAY,IAAI,QAChBC,GAAkB,CAACC,EAAoB,GAAI9/C,EAAM,SAAW,CAC9D,MAAM+/C,EAAgB,OAAO,OAAO,OAAO,OAAO,GAAI9C,EAAsB,EAAG6C,CAAiB,EAC1Fn+C,EAAQw7C,GAASn9C,CAAG,EACpBggD,EAAiBv8C,GAAU,CAC7B,MAAM65C,EAAU75C,EAAM,cAAc,QAAQ,aACjB,SAAS,iBAAiB,0BAA0B65C,KAAW,EACvE,QAASrhC,GAAOmjC,GAAK37C,EAAOwY,EAAI,OAAO,OAAO,OAAO,OAAO,CAAA,EAAI8jC,CAAa,EAAGH,GAAU,IAAI3jC,CAAE,CAAC,CAAC,CAAC,CAC9H,EACUgkC,EAAgB,CAClB,CAACt+C,EAAM,SAASsa,EAAI,CAAE,MAAAvX,EAAQ,CAAA,GAAM,CAChC,IAAI0I,EACJwyC,GAAU,IAAI3jC,EAAIvX,CAAK,EACvB64C,GAAiBthC,GAAK7O,EAAM1I,GAASA,EAAM,WAAc,MAAQ0I,IAAO,OAASA,EAAK2yC,EAAc,OAAO,EAC3G9jC,EAAG,iBAAiB,cAAgBxY,GAAU,CAC1C,GAAIm8C,GAAU,IAAI3jC,CAAE,IAAM,GACtB,OACJ,MAAMrZ,EAAU,OAAO,OAAO,OAAO,OAAO,GAAIm9C,CAAa,EAAGH,GAAU,IAAI3jC,CAAE,CAAC,EACjF,GAAIrZ,EAAQ,UAAY,GACpB,OAAOw8C,GAAK37C,EAAOwY,EAAIrZ,CAAO,EAClC,GAAIy6C,GAAYz6C,EAAQ,OAAO,EAC3B,OACJ,MAAM06C,EAAUrhC,EAAG,cAAc,8BAA8B,EAC3D,CAACqhC,GAAW16C,EAAQ,UAAY,IAEhC06C,GAAW,CAAC75C,EAAM,aAAY,EAAG,SAAS65C,CAAO,GAErD8B,GAAK37C,EAAOwY,EAAIrZ,CAAO,CACvC,CAAa,CACJ,EACD,CAACjB,EAAM,SAASsa,EAAI,CAAE,MAAAvX,EAAQ,CAAA,GAAM,CAChC,IAAI0I,EACJwyC,GAAU,IAAI3jC,EAAIvX,CAAK,EACvB64C,GAAiBthC,GAAK7O,EAAM1I,GAASA,EAAM,WAAc,MAAQ0I,IAAO,OAASA,EAAK2yC,EAAc,OAAO,CAC9G,CACT,EACUG,EAAmB,CACrB,CAACv+C,EAAM,SAASsa,EAAI,CAAE,IAAKqhC,EAAU,QAAU,CAC3CrhC,EAAG,QAAQ,aAAeqhC,EACtBA,IAAY,QACZrhC,EAAG,iBAAiB,cAAe+jC,CAAa,CACvD,EACD,CAACr+C,EAAM,SAASsa,EAAI,CAAE,IAAKqhC,EAAU,QAAU,CAC3CrhC,EAAG,QAAQ,aAAeqhC,EACtBA,IAAY,OACZrhC,EAAG,oBAAoB,cAAe+jC,CAAa,EAEnD/jC,EAAG,iBAAiB,cAAe+jC,CAAa,CACvD,CACT,EACI,MAAO,CACH,KAAMC,EACN,MAAOA,EACP,YAAaC,EACb,aAAcA,CACtB,CACA,EACMC,GAAQ,CACV,QAAQngD,EAAK8/C,EAAoB,GAAI,CACjC,GAAI,KAAK,UACL,OACJ,KAAK,UAAY,GACjB,MAAMC,EAAgB,OAAO,OAAO,OAAO,OAAO,GAAI9C,EAAsB,EAAG6C,CAAiB,EAC1F,CAAE,MAAAM,EAAO,aAAAC,CAAY,EAAKR,GAAgBE,EAAe//C,CAAG,EAClEA,EAAI,UAAU+/C,EAAc,UAAWK,CAAK,EAC5CpgD,EAAI,UAAU,GAAG+/C,EAAc,oBAAqBM,CAAY,CACnE,EACD,UAAW,GACX,yBAA0BR,EAC9B,ECrOM7/C,GAAMsgD,GAAU,CACrB,OAAQ,CACPpe,GAAQqe,GAAqBruC,EAAY,CAC1C,EACA,OAAQ,IAAMlN,GAAEw7C,EAAG,CACpB,CAAC,EAGDxgD,GAAI,IAAIiM,GAAA,CAAY,EAClB,UAAU,oBAAqBw0C,EAAe,EAC9C,UAAU,UAAWhiC,EAAgB,EACrC,IAAIiiC,IAAa,EACjB,IAAIC,EAAM,EACV,IAAIn5B,EAAI,EACR,IAAIo5B,GAASC,EAAa,EAC1B,IAAIT,GAAO,CAAA,CAAE,EACb,IAAIU,EAAc,EAIpB9gD,GAAI,MAAM,MAAM"}