{"version":3,"file":"index-BQFEjTa1.js","sources":["../../../node_modules/.pnpm/@formkit+utils@1.6.7/node_modules/@formkit/utils/dist/index.mjs","../../../node_modules/.pnpm/@formkit+core@1.6.7/node_modules/@formkit/core/dist/index.mjs","../../../node_modules/.pnpm/@formkit+observer@1.6.7/node_modules/@formkit/observer/dist/index.mjs","../../../node_modules/.pnpm/@formkit+rules@1.6.7/node_modules/@formkit/rules/dist/index.mjs","../../../node_modules/.pnpm/@formkit+validation@1.6.7/node_modules/@formkit/validation/dist/index.mjs","../../../node_modules/.pnpm/@formkit+i18n@1.6.7/node_modules/@formkit/i18n/dist/index.mjs","../../../node_modules/.pnpm/@formkit+inputs@1.6.7/node_modules/@formkit/inputs/dist/index.mjs","../../../node_modules/.pnpm/@formkit+themes@1.6.7_tailwindcss@3.4.13/node_modules/@formkit/themes/dist/index.mjs","../../../node_modules/.pnpm/@formkit+dev@1.6.7/node_modules/@formkit/dev/dist/index.mjs","../../../node_modules/.pnpm/@formkit+vue@1.6.7_tailwindcss@3.4.13_vue@3.5.12_typescript@5.6.2_/node_modules/@formkit/vue/dist/index.mjs","../../../app/javascript/shared/helpers/emoji.js","../../../app/javascript/shared/components/EmojiOrIcon.vue","../../../app/javascript/dashboard/components/ui/WootButton.vue","../../../app/javascript/shared/constants/countries.js","../../../node_modules/.pnpm/timezone-phone-codes@0.0.2/node_modules/timezone-phone-codes/dist/timezone-phone-codes.es.js","../../../node_modules/.pnpm/countries-and-timezones@3.6.0/node_modules/countries-and-timezones/esm/index.js","../../../app/javascript/shared/components/PhoneInput/helper.js","../../../app/javascript/dashboard/components/widgets/Avatar.vue","../../../app/javascript/dashboard/components/widgets/Thumbnail.vue","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/addDays/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/compareAsc/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/isSameDay/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/differenceInCalendarMonths/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/differenceInMilliseconds/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/endOfDay/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/endOfMonth/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/isLastDayOfMonth/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/differenceInMonths/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/differenceInSeconds/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/_lib/assign/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/_lib/cloneObject/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/formatDistance/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/formatDistanceToNow/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/getHours/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/getMinutes/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/getTime/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/getUnixTime/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/subDays/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/_lib/setUTCDay/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/_lib/setUTCISODay/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/_lib/setUTCWeek/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/parse/_lib/parsers/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/parse/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/isSameYear/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/isToday/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/isYesterday/index.js","../../../app/javascript/dashboard/composables/store.js","../../../node_modules/.pnpm/@rails+actioncable@6.1.3/node_modules/@rails/actioncable/app/assets/javascripts/action_cable.js","../../../app/javascript/shared/helpers/BaseActionCableConnector.js","../../../node_modules/.pnpm/rope-sequence@1.3.2/node_modules/rope-sequence/dist/index.es.js","../../../node_modules/.pnpm/orderedmap@2.1.0/node_modules/orderedmap/dist/index.js","../../../node_modules/.pnpm/prosemirror-model@1.22.3/node_modules/prosemirror-model/dist/index.js","../../../node_modules/.pnpm/prosemirror-transform@1.10.0/node_modules/prosemirror-transform/dist/index.js","../../../node_modules/.pnpm/prosemirror-state@1.4.3/node_modules/prosemirror-state/dist/index.js","../../../node_modules/.pnpm/prosemirror-history@1.4.1/node_modules/prosemirror-history/dist/index.js","../../../node_modules/.pnpm/prosemirror-dropcursor@1.8.1/node_modules/prosemirror-dropcursor/dist/index.js","../../../node_modules/.pnpm/w3c-keyname@2.2.4/node_modules/w3c-keyname/index.es.js","../../../node_modules/.pnpm/prosemirror-keymap@1.2.2/node_modules/prosemirror-keymap/dist/index.js","../../../node_modules/.pnpm/prosemirror-view@1.34.1/node_modules/prosemirror-view/dist/index.js","../../../node_modules/.pnpm/prosemirror-gapcursor@1.3.2/node_modules/prosemirror-gapcursor/dist/index.js","../../../node_modules/.pnpm/crelt@1.0.5/node_modules/crelt/index.es.js","../../../node_modules/.pnpm/prosemirror-commands@1.6.0/node_modules/prosemirror-commands/dist/index.js","../../../node_modules/.pnpm/prosemirror-menu@1.2.4/node_modules/prosemirror-menu/dist/index.js","../../../node_modules/.pnpm/prosemirror-inputrules@1.4.0/node_modules/prosemirror-inputrules/dist/index.js","../../../node_modules/.pnpm/prosemirror-utils@1.2.2_prosemirror-model@1.22.3_prosemirror-state@1.4.3/node_modules/prosemirror-utils/dist/index.js","../../../node_modules/.pnpm/prosemirror-schema-list@1.4.1/node_modules/prosemirror-schema-list/dist/index.js","../../../node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/decode.mjs","../../../node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/encode.mjs","../../../node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/format.mjs","../../../node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/parse.mjs","../../../node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/properties/Any/regex.mjs","../../../node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/Cc/regex.mjs","../../../node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/Cf/regex.mjs","../../../node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/P/regex.mjs","../../../node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/S/regex.mjs","../../../node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/Z/regex.mjs","../../../node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-html.js","../../../node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-xml.js","../../../node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode_codepoint.js","../../../node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode.js","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/common/utils.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/helpers/parse_link_label.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/helpers/parse_link_destination.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/helpers/parse_link_title.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/renderer.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/ruler.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/token.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_core/state_core.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_core/normalize.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_core/block.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_core/inline.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_core/linkify.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_core/replacements.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_core/smartquotes.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_core/text_join.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/parser_core.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_block/state_block.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_block/table.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_block/code.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_block/fence.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_block/blockquote.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_block/hr.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_block/list.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_block/reference.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/common/html_blocks.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/common/html_re.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_block/html_block.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_block/heading.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_block/lheading.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_block/paragraph.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/parser_block.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_inline/state_inline.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_inline/text.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_inline/linkify.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_inline/newline.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_inline/escape.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_inline/backticks.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_inline/strikethrough.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_inline/emphasis.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_inline/link.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_inline/image.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_inline/autolink.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_inline/html_inline.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_inline/entity.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_inline/balance_pairs.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/rules_inline/fragments_join.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/parser_inline.mjs","../../../node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/lib/re.mjs","../../../node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/index.mjs","../../../node_modules/.pnpm/punycode.js@2.3.1/node_modules/punycode.js/punycode.es6.js","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/presets/default.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/presets/zero.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/presets/commonmark.mjs","../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/index.mjs","../../../node_modules/.pnpm/prosemirror-markdown@1.13.0/node_modules/prosemirror-markdown/dist/index.js","../../../node_modules/.pnpm/markdown-it-sup@2.0.0/node_modules/markdown-it-sup/index.mjs","../../../node_modules/.pnpm/@chatwoot+prosemirror-schema@1.1.1-next/node_modules/@chatwoot/prosemirror-schema/dist/index.es.js","../../../app/javascript/dashboard/helper/editorHelper.js","../../../app/javascript/shared/helpers/FileHelper.js","../../../app/javascript/shared/helpers/timeHelper.js","../../../app/javascript/shared/components/ResizableTextArea.vue","../../../app/javascript/widget/i18n/index.js","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/helpers/businessHour.js","../../../app/javascript/shared/helpers/DateHelper.js","../../../node_modules/.pnpm/vue-upload-component@3.1.17/node_modules/vue-upload-component/dist/vue-upload-component.js","../../../node_modules/.pnpm/activestorage@5.2.8/node_modules/activestorage/app/assets/javascripts/activestorage.js","../../../app/javascript/shared/components/ArticleSkeletonLoader.vue","../../../app/javascript/shared/components/IframeLoader.vue","../../../app/javascript/shared/helpers/MessageTypeHelper.js","../../../app/javascript/shared/helpers/IntegrationHelper.js","../../../app/javascript/dashboard/assets/images/typing.gif","../../../node_modules/.pnpm/urlpattern-polyfill@10.0.0/node_modules/urlpattern-polyfill/dist/urlpattern.js","../../../node_modules/.pnpm/urlpattern-polyfill@10.0.0/node_modules/urlpattern-polyfill/index.js"],"sourcesContent":["// packages/utils/src/index.ts\nvar isBrowser = typeof window !== \"undefined\";\nvar explicitKeys = [\n \"__key\",\n \"__init\",\n \"__shim\",\n \"__original\",\n \"__index\",\n \"__prevKey\"\n];\nfunction token() {\n return Math.random().toString(36).substring(2, 15);\n}\nfunction setify(items) {\n return items instanceof Set ? items : new Set(items);\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}\nfunction has(obj, property) {\n return Object.prototype.hasOwnProperty.call(obj, property);\n}\nfunction eq(valA, valB, deep = 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 && valB instanceof Date)\n return valA.getTime() === valB.getTime();\n if (valA instanceof RegExp && valB instanceof RegExp)\n return eqRegExp(valA, valB);\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}\nfunction eqRegExp(x, y) {\n return x.source === y.source && x.flags.split(\"\").sort().join(\"\") === y.flags.split(\"\").sort().join(\"\");\n}\nfunction empty(value) {\n const type = typeof value;\n if (type === \"number\")\n return false;\n if (value === void 0)\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}\nfunction escapeExp(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\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(\n tokens.reduce((regex, format2) => {\n return regex.replace(format2, formats[format2]);\n }, escaped)\n );\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}\nfunction isRecord(o) {\n return Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction isObject(o) {\n return isRecord(o) || Array.isArray(o);\n}\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 === void 0)\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}\nvar extend = /* @__NO_SIDE_EFFECTS__ */ (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) && (additional[key] !== void 0 || !ignoreUndefined)) {\n if (extendArrays && Array.isArray(original[key]) && Array.isArray(additional[key])) {\n merged[key] = original[key].concat(additional[key]);\n continue;\n }\n if (additional[key] === void 0) {\n continue;\n }\n if (isPojo(original[key]) && isPojo(additional[key])) {\n merged[key] = /* @__PURE__ */ extend(\n original[key],\n additional[key],\n extendArrays,\n ignoreUndefined\n );\n } else {\n merged[key] = additional[key];\n }\n } else {\n merged[key] = original[key];\n }\n }\n for (const key in additional) {\n if (!has(merged, key) && additional[key] !== void 0) {\n merged[key] = additional[key];\n }\n }\n return merged;\n};\nfunction isQuotedString(str) {\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 && (p === 1 || str[p - 1] !== \"\\\\\") && p !== str.length - 1) {\n return false;\n }\n }\n return true;\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}\nfunction assignDeep(a, b) {\n for (const key in a) {\n if (has(b, key) && a[key] !== b[key] && !(isPojo(a[key]) && isPojo(b[key]))) {\n a[key] = b[key];\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}\nfunction nodeProps(...sets) {\n return sets.reduce((valid, props) => {\n const { value, name, modelValue, config, plugins, ...validProps } = props;\n return Object.assign(valid, validProps);\n }, {});\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 } else if ((char === \"'\" || char === '\"') && !quote && lastChar !== \"\\\\\") {\n quote = char;\n } else if (char === \"(\" && !quote) {\n depth++;\n } else if (char === \")\" && !quote) {\n depth--;\n }\n if (char === \",\" && !quote && depth === 0) {\n args.push(arg);\n arg = \"\";\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}\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}\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}\nfunction camel(str) {\n return str.replace(\n /-([a-z0-9])/gi,\n (_s, g) => g.toUpperCase()\n );\n}\nfunction kebab(str) {\n return str.replace(\n /([a-z0-9])([A-Z])/g,\n (_s, trail, cap) => trail + \"-\" + cap.toLowerCase()\n ).replace(\" \", \"-\").toLowerCase();\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}\nfunction clone(obj, explicit = explicitKeys) {\n if (obj === null || obj instanceof RegExp || obj instanceof Date || obj instanceof Map || obj instanceof Set || 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 } else {\n returnObject = Object.keys(obj).reduce((newObj, key) => {\n newObj[key] = typeof obj[key] === \"object\" ? clone(obj[key], explicit) : 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}\nfunction cloneAny(obj) {\n return typeof obj === \"object\" ? clone(obj) : obj;\n}\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}\nfunction undefine(value) {\n return value !== void 0 && value !== \"false\" && value !== false ? true : void 0;\n}\nfunction init(obj) {\n return !Object.isFrozen(obj) ? Object.defineProperty(obj, \"__init\", {\n enumerable: false,\n value: true\n }) : obj;\n}\nfunction slugify(str) {\n return str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\").toLowerCase().replace(/[^a-z0-9]/g, \" \").trim().replace(/\\s+/g, \"-\");\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 spread2;\n if (Array.isArray(obj)) {\n spread2 = [...obj];\n } else {\n spread2 = { ...obj };\n }\n return applyExplicit(\n obj,\n spread2,\n explicit\n );\n }\n return obj;\n}\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}\nfunction whenAvailable(childId, callback, root) {\n if (!isBrowser)\n return;\n if (!root)\n root = document;\n const el = root.getElementById(childId);\n if (el)\n return callback(el);\n const observer = new MutationObserver(() => {\n const el2 = root?.getElementById(childId);\n if (el2) {\n observer?.disconnect();\n callback(el2);\n }\n });\n observer.observe(root, { childList: true, subtree: true });\n}\nfunction oncePerTick(fn) {\n let called = false;\n return (...args) => {\n if (called)\n return;\n called = true;\n queueMicrotask(() => called = false);\n return fn(...args);\n };\n}\nfunction boolGetter(value) {\n if (value === \"false\" || value === false)\n return void 0;\n return true;\n}\n\nexport { assignDeep, boolGetter, camel, clone, cloneAny, dedupe, empty, eq, eqRegExp, escapeExp, except, extend, getAt, has, init, isObject, isPojo, isQuotedString, isRecord, kebab, nodeProps, nodeType, oncePerTick, only, parseArgs, regexForFormat, rmEscapes, setify, shallowClone, slugify, spread, token, undefine, whenAvailable };\n//# sourceMappingURL=out.js.map\n//# sourceMappingURL=index.mjs.map","import { token, cloneAny, empty, isObject, init, eq, clone, camel, extend as extend$1, undefine, has, kebab, dedupe, parseArgs, getAt, isQuotedString, rmEscapes, slugify, boolGetter, isRecord } from '@formkit/utils';\n\n// packages/core/src/dispatcher.ts\nfunction createDispatcher() {\n const middleware = [];\n let currentIndex = 0;\n const use2 = (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);\n });\n }\n currentIndex = 0;\n return payload;\n };\n use2.dispatch = dispatch;\n use2.unshift = (dispatchable) => middleware.unshift(dispatchable);\n use2.remove = (dispatchable) => {\n const index = middleware.indexOf(dispatchable);\n if (index > -1)\n middleware.splice(index, 1);\n };\n return use2;\n}\nfunction createEmitter() {\n const listeners = /* @__PURE__ */ new Map();\n const receipts2 = /* @__PURE__ */ new Map();\n let buffer = void 0;\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 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 emitter.flush = () => {\n listeners.clear();\n receipts2.clear();\n buffer?.clear();\n };\n emitter.on = (eventName, listener, pos = \"push\") => {\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 listeners.has(event) ? listeners.get(event)[pos](wrapper) : listeners.set(event, [wrapper]);\n receipts2.has(receipt) ? receipts2.get(receipt)[pos](event) : receipts2.set(receipt, [event]);\n return receipt;\n };\n emitter.off = (receipt) => {\n if (receipts2.has(receipt)) {\n receipts2.get(receipt)?.forEach((event) => {\n const eventListeners = listeners.get(event);\n if (Array.isArray(eventListeners)) {\n listeners.set(\n event,\n eventListeners.filter((wrapper) => wrapper.receipt !== receipt)\n );\n }\n });\n receipts2.delete(receipt);\n }\n };\n emitter.pause = (node) => {\n if (!buffer)\n buffer = /* @__PURE__ */ new Map();\n if (node) {\n node.walk((child) => child._e.pause());\n }\n };\n emitter.play = (node) => {\n if (!buffer)\n return;\n const events = buffer;\n buffer = void 0;\n events.forEach(([node2, event]) => emitter(node2, event));\n if (node) {\n node.walk((child) => child._e.play());\n }\n };\n return emitter;\n}\nfunction emit(node, context, name, payload, bubble2 = true, meta) {\n context._e(node, {\n payload,\n name,\n bubble: bubble2,\n origin: node,\n meta\n });\n return node;\n}\nfunction bubble(node, _context, event) {\n if (isNode(node.parent)) {\n node.parent._e(node.parent, event);\n }\n return node;\n}\nfunction on(_node, context, name, listener, pos) {\n return context._e.on(name, listener, pos);\n}\nfunction off(node, context, receipt) {\n context._e.off(receipt);\n return node;\n}\n\n// packages/core/src/errors.ts\nvar errorHandler = createDispatcher();\nerrorHandler((error2, next) => {\n if (!error2.message)\n error2.message = String(`E${error2.code}`);\n return next(error2);\n});\nvar 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});\nfunction warn(code, data = {}) {\n warningHandler.dispatch({ code, data });\n}\nfunction error(code, data = {}) {\n throw Error(errorHandler.dispatch({ code, data }).message);\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}\nvar storeTraps = {\n apply: applyMessages,\n set: setMessage,\n remove: removeMessage,\n filter: filterMessages,\n reduce: reduceMessages,\n release: releaseBuffer,\n touch: touchMessages\n};\nfunction createStore(_buffer = false) {\n const messages = {};\n let node;\n let buffer = _buffer;\n let _b = [];\n const _m = /* @__PURE__ */ new Map();\n let _r = void 0;\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(\n null,\n messages,\n store,\n node\n );\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 } else if (prop === \"_b\") {\n _b = value;\n return true;\n } else if (prop === \"buffer\") {\n buffer = value;\n return true;\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}\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 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(\n node.hook.message.dispatch(message)\n );\n node.emit(e, message);\n }\n return store;\n}\nfunction touchMessages(messageStore, store) {\n for (const key in messageStore) {\n const message = { ...messageStore[key] };\n store.set(message);\n }\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}\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}\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}\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 const applied = new Set(\n messages.map((message) => {\n store.set(message);\n return message.key;\n })\n );\n if (typeof clear === \"string\") {\n store.filter(\n (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 } else {\n for (const address in messages) {\n const child = node.at(address);\n if (child) {\n child.store.apply(messages[address], clear);\n } else {\n missed(node, store, address, messages[address], clear);\n }\n }\n }\n}\nfunction createMessages(node, ...errors) {\n const sourceKey = `${node.name}-set`;\n const make = (error2) => /* @__PURE__ */ createMessage({\n key: slugify(error2),\n type: \"error\",\n value: error2,\n meta: { source: sourceKey, autoClear: true }\n });\n return errors.filter((m) => !!m).map((errorSet) => {\n if (typeof errorSet === \"string\")\n errorSet = [errorSet];\n if (Array.isArray(errorSet)) {\n return errorSet.map((error2) => make(error2));\n } else {\n const errors2 = {};\n for (const key in errorSet) {\n if (Array.isArray(errorSet[key])) {\n errors2[key] = errorSet[key].map(\n (error2) => make(error2)\n );\n } else {\n errors2[key] = [make(errorSet[key])];\n }\n }\n return errors2;\n }\n });\n}\nfunction missed(node, store, address, messages, clear) {\n const misses = store._m;\n if (!misses.has(address))\n misses.set(address, []);\n if (!store._r)\n store._r = releaseMissed(node, store);\n misses.get(address)?.push([messages, clear]);\n}\nfunction releaseMissed(node, store) {\n return node.on(\n \"child.deep\",\n ({ 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 (store._m.size === 0 && store._r) {\n node.off(store._r);\n store._r = void 0;\n }\n }\n );\n}\nfunction releaseBuffer(_messageStore, store) {\n store.buffer = false;\n store._b.forEach(([messages, clear]) => store.apply(messages, clear));\n store._b = [];\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) ? ledger[counterName].promise : 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}\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: () => {\n }\n // eslint-disable-line @typescript-eslint/no-empty-function\n };\n ledger[counterName] = counter;\n increment = node.store.reduce(\n (sum, m) => sum + counter.condition(m) * 1,\n increment\n );\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}\nfunction parseCondition(condition) {\n if (typeof condition === \"function\") {\n return condition;\n }\n return (m) => m.type === condition;\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 } 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}\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}\nfunction merge(parent, ledger, child, remove = false) {\n const originalParent = parent;\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 parent = originalParent;\n }\n}\n\n// packages/core/src/registry.ts\nvar registry = /* @__PURE__ */ new Map();\nvar reflected = /* @__PURE__ */ new Map();\nvar emit2 = createEmitter();\nvar receipts = [];\nfunction register(node) {\n if (node.props.id) {\n registry.set(node.props.id, node);\n reflected.set(node, node.props.id);\n emit2(node, {\n payload: node,\n name: node.props.id,\n bubble: false,\n origin: node\n });\n }\n}\nfunction deregister(node) {\n if (reflected.has(node)) {\n const id = reflected.get(node);\n reflected.delete(node);\n registry.delete(id);\n emit2(node, {\n payload: null,\n name: id,\n bubble: false,\n origin: node\n });\n }\n}\nfunction getNode(id) {\n return registry.get(id);\n}\nfunction resetRegistry() {\n registry.forEach((node) => {\n deregister(node);\n });\n receipts.forEach((receipt) => emit2.off(receipt));\n}\nfunction watchRegistry(id, callback) {\n const receipt = emit2.on(id, callback);\n receipts.push(receipt);\n return receipt;\n}\nfunction stopWatch(receipt) {\n emit2.off(receipt);\n}\n\n// packages/core/src/config.ts\nfunction configChange(node, prop, value) {\n let usingFallback = true;\n !(prop in node.config._t) ? node.emit(`config:${prop}`, value, false) : 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}\nfunction createConfig(options = {}) {\n const nodes = /* @__PURE__ */ 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// packages/core/src/submitForm.ts\nfunction submitForm(id, root) {\n const formElement = (root || 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}\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\" || message.type === \"ui\" && key === \"incomplete\") {\n n.store.remove(key);\n } else if (message.type === \"state\") {\n n.store.set({ ...message, value: false });\n }\n }\n };\n clear(node);\n node.walk(clear);\n}\nfunction reset(id, resetTo) {\n const node = typeof id === \"string\" ? getNode(id) : id;\n if (node) {\n const initial = (n) => cloneAny(n.props.initial) || (n.type === \"group\" ? {} : n.type === \"list\" ? [] : void 0);\n node._e.pause(node);\n const resetValue2 = cloneAny(resetTo);\n if (resetTo && !empty(resetTo)) {\n node.props.initial = isObject(resetValue2) ? init(resetValue2) : resetValue2;\n node.props._init = node.props.initial;\n }\n node.input(initial(node), false);\n node.walk((child) => {\n if (child.type === \"list\" && child.sync)\n return;\n child.input(initial(child), false);\n });\n node.input(\n empty(resetValue2) && resetValue2 ? resetValue2 : initial(node),\n false\n );\n const isDeepReset = node.type !== \"input\" && resetTo && !empty(resetTo) && isObject(resetTo);\n if (isDeepReset) {\n node.walk((child) => {\n child.props.initial = isObject(child.value) ? init(child.value) : child.value;\n child.props._init = child.props.initial;\n });\n }\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// packages/core/src/node.ts\nvar defaultConfig = {\n delimiter: \".\",\n delay: 0,\n locale: \"en\",\n rootClasses: (key) => ({ [`formkit-${kebab(key)}`]: true })\n};\nvar useIndex = Symbol(\"index\");\nvar valueRemoved = Symbol(\"removed\");\nvar valueMoved = Symbol(\"moved\");\nvar valueInserted = Symbol(\"inserted\");\nfunction isList(arg) {\n return arg.type === \"list\" && Array.isArray(arg._value);\n}\nfunction isNode(node) {\n return node && typeof node === \"object\" && node.__FKNode__ === true;\n}\nvar invalidSetter = (node, _context, property) => {\n error(102, [node, property]);\n};\nvar traps = {\n _c: trap(getContext, invalidSetter, false),\n add: trap(addChild),\n addProps: trap(addProps),\n address: trap(getAddress, invalidSetter, false),\n at: trap(getNode2),\n bubble: trap(bubble),\n clearErrors: trap(clearErrors),\n calm: trap(calm),\n config: trap(false),\n define: trap(define),\n disturb: trap(disturb),\n destroy: trap(destroy),\n extend: trap(extend),\n hydrate: trap(hydrate),\n index: trap(getIndex, setIndex, false),\n input: trap(input),\n each: trap(eachChild),\n emit: trap(emit),\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),\n submit: trap(submit),\n t: trap(text),\n use: trap(use),\n name: trap(getName, false, false),\n walk: trap(walkTree)\n};\nfunction createTraps() {\n return new Map(Object.entries(traps));\n}\nfunction trap(getter, setter, curryGetter = true) {\n return {\n get: getter ? (node, context) => curryGetter ? (...args) => getter(node, context, ...args) : getter(node, context) : false,\n set: setter !== void 0 ? setter : invalidSetter.bind(null)\n };\n}\nfunction createHooks() {\n const hooks = /* @__PURE__ */ 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}\nvar nameCount = 0;\nvar idCount = 0;\nfunction resetCount() {\n nameCount = 0;\n idCount = 0;\n}\nfunction names(children) {\n return children.reduce(\n (named, child) => Object.assign(named, { [child.name]: child }),\n {}\n );\n}\nfunction createName(options) {\n if (options.parent?.type === \"list\")\n return useIndex;\n return options.name || `${options.props?.type || \"input\"}_${++nameCount}`;\n}\nfunction createValue(options) {\n if (options.type === \"group\") {\n return init(\n options.value && typeof options.value === \"object\" && !Array.isArray(options.value) ? options.value : {}\n );\n } else if (options.type === \"list\") {\n return init(Array.isArray(options.value) ? options.value : []);\n }\n return options.value;\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 (node.isCreated && node.type === \"input\" && eq(context._value, context.value) && !node.props.mergeStrategy) {\n node.emit(\"commitRaw\", context.value);\n return context.settled;\n }\n if (context.isSettled)\n node.disturb();\n if (async) {\n if (context._tmo)\n clearTimeout(context._tmo);\n context._tmo = setTimeout(\n commit,\n node.props.delay,\n node,\n context\n );\n } else {\n commit(node, context);\n }\n return context.settled;\n}\nfunction validateInput(node, value) {\n switch (node.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}\nfunction commit(node, context, calm2 = true, hydrate2 = true) {\n context._value = context.value = node.hook.commit.dispatch(context._value);\n if (node.type !== \"input\" && hydrate2)\n node.hydrate();\n node.emit(\"commitRaw\", context.value);\n node.emit(\"commit\", context.value);\n if (calm2)\n node.calm();\n}\nfunction partial(context, { name, value, from }) {\n if (Object.isFrozen(context._value))\n return;\n if (isList(context)) {\n const insert = value === valueRemoved ? [] : value === valueMoved && typeof from === \"number\" ? context._value.splice(from, 1) : [value];\n context._value.splice(\n name,\n value === valueMoved || from === valueInserted ? 0 : 1,\n ...insert\n );\n return;\n }\n if (value !== valueRemoved) {\n context._value[name] = value;\n } else {\n delete context._value[name];\n }\n}\nfunction hydrate(node, context) {\n const _value = context._value;\n if (node.type === \"list\" && node.sync)\n syncListNodes(node, context);\n context.children.forEach((child) => {\n if (typeof _value !== \"object\")\n return;\n if (child.name in _value) {\n const childValue = child.type !== \"input\" || _value[child.name] && typeof _value[child.name] === \"object\" ? init(_value[child.name]) : _value[child.name];\n if (!child.isSettled || (!isObject(childValue) || child.props.mergeStrategy) && eq(childValue, child._value))\n return;\n child.input(childValue, false);\n } else {\n if (node.type !== \"list\" || typeof child.name === \"number\") {\n partial(context, { name: child.name, value: child.value });\n }\n if (!_value.__init) {\n if (child.type === \"group\")\n child.input({}, false);\n else if (child.type === \"list\")\n child.input([], false);\n else\n child.input(void 0, false);\n }\n }\n });\n return node;\n}\nfunction syncListNodes(node, context) {\n const _value = node._value;\n if (!Array.isArray(_value))\n return;\n const newChildren = [];\n const unused = new Set(context.children);\n const placeholderValues = /* @__PURE__ */ new Map();\n _value.forEach((value, i) => {\n if (context.children[i] && context.children[i]._value === value) {\n newChildren.push(context.children[i]);\n unused.delete(context.children[i]);\n } else {\n newChildren.push(null);\n const indexes = placeholderValues.get(value) || [];\n indexes.push(i);\n placeholderValues.set(value, indexes);\n }\n });\n if (unused.size && placeholderValues.size) {\n unused.forEach((child) => {\n if (placeholderValues.has(child._value)) {\n const indexes = placeholderValues.get(child._value);\n const index = indexes.shift();\n newChildren[index] = child;\n unused.delete(child);\n if (!indexes.length)\n placeholderValues.delete(child._value);\n }\n });\n }\n const emptyIndexes = [];\n placeholderValues.forEach((indexes) => {\n emptyIndexes.push(...indexes);\n });\n while (unused.size && emptyIndexes.length) {\n const child = unused.values().next().value;\n const index = emptyIndexes.shift();\n if (index === void 0)\n break;\n newChildren[index] = child;\n unused.delete(child);\n }\n emptyIndexes.forEach((index, value) => {\n newChildren[index] = createPlaceholder({ value });\n });\n if (unused.size) {\n unused.forEach((child) => {\n if (!(\"__FKP\" in child)) {\n const parent = child._c.parent;\n if (!parent || isPlaceholder(parent))\n return;\n parent.ledger.unmerge(child);\n child._c.parent = null;\n child.destroy();\n }\n });\n }\n context.children = newChildren;\n}\nfunction disturb(node, context) {\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 node.parent?.disturb();\n }\n context._d++;\n return node;\n}\nfunction calm(node, context, value) {\n if (value !== void 0 && node.type !== \"input\") {\n partial(context, value);\n const shouldHydrate = !!(node.config.mergeStrategy && node.config.mergeStrategy[value.name]);\n return commit(node, context, true, shouldHydrate);\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 node.parent?.calm({ name: node.name, value: context.value });\n if (context._resolve)\n context._resolve(context.value);\n }\n}\nfunction destroy(node, context) {\n node.emit(\"destroying\", node);\n node.store.filter(() => false);\n if (node.parent) {\n node.parent.remove(node);\n }\n deregister(node);\n node.emit(\"destroyed\", node);\n context._e.flush();\n context._value = context.value = void 0;\n for (const property in context.context) {\n delete context.context[property];\n }\n context.plugins.clear();\n context.context = null;\n}\nfunction define(node, context, definition) {\n context.type = definition.type;\n const clonedDef = clone(definition);\n node.props.__propDefs = mergeProps(\n node.props.__propDefs ?? [],\n clonedDef?.props || []\n );\n clonedDef.props = node.props.__propDefs;\n context.props.definition = clonedDef;\n context.value = context._value = createValue({\n type: node.type,\n value: context.value\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 if (definition.family) {\n context.props.family = definition.family;\n }\n if (definition.features) {\n definition.features.forEach((feature) => feature(node));\n }\n if (definition.props) {\n node.addProps(definition.props);\n }\n node.emit(\"defined\", definition);\n}\nfunction addProps(node, context, props) {\n const propNames = Array.isArray(props) ? props : Object.keys(props);\n const defaults = !Array.isArray(props) ? propNames.reduce((defaults2, name) => {\n if (\"default\" in props[name]) {\n defaults2[name] = props[name].default;\n }\n return defaults2;\n }, {}) : {};\n if (node.props.attrs) {\n const attrs = { ...node.props.attrs };\n node.props._emit = false;\n for (const attr in attrs) {\n const camelName = camel(attr);\n if (propNames.includes(camelName)) {\n node.props[camelName] = attrs[attr];\n delete attrs[attr];\n }\n }\n if (!Array.isArray(props)) {\n propNames.forEach((prop) => {\n if (\"default\" in props[prop] && node.props[prop] === void 0) {\n node.props[prop] = defaults[prop];\n }\n });\n }\n const initial = cloneAny(context._value);\n node.props.initial = node.type !== \"input\" ? init(initial) : initial;\n node.props._emit = true;\n node.props.attrs = attrs;\n }\n const mergedProps = mergeProps(node.props.__propDefs ?? [], props);\n if (node.props.definition) {\n node.props.definition.props = mergedProps;\n }\n node.props.__propDefs = mergedProps;\n node.emit(\"added-props\", props);\n return node;\n}\nfunction toPropsObj(props) {\n return !Array.isArray(props) ? props : props.reduce((props2, prop) => {\n props2[prop] = {};\n return props2;\n }, {});\n}\nfunction mergeProps(props, newProps) {\n if (Array.isArray(props) && Array.isArray(newProps))\n return props.concat(newProps);\n return extend$1(toPropsObj(props), toPropsObj(newProps));\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 if (!parentContext.children.includes(child)) {\n if (listIndex !== void 0 && parent.type === \"list\") {\n const existingNode = parentContext.children[listIndex];\n if (existingNode && \"__FKP\" in existingNode) {\n child._c.uid = existingNode.uid;\n parentContext.children.splice(listIndex, 1, child);\n } else {\n parentContext.children.splice(listIndex, 0, child);\n }\n if (Array.isArray(parent.value) && parent.value.length < parentContext.children.length) {\n parent.disturb().calm({\n name: listIndex,\n value: child.value,\n from: valueInserted\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 if (child.parent !== parent) {\n parent.remove(child);\n child.parent.add(child);\n return parent;\n }\n } else {\n child.use(parent.plugins);\n }\n commit(parent, parentContext, false);\n parent.ledger.merge(child);\n parent.emit(\"child\", child);\n return parent;\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) ? parent.add(child) : child.use(parent.plugins);\n return true;\n }\n if (parent === null) {\n context.parent = null;\n return true;\n }\n return false;\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 let preserve = undefine(child.props.preserve);\n let parent = child.parent;\n while (preserve === void 0 && 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 } else {\n node.calm();\n }\n child.parent = null;\n child.config._rmn = child;\n }\n node.ledger.unmerge(child);\n node.emit(\"childRemoved\", child);\n return node;\n}\nfunction eachChild(_node, context, callback) {\n context.children.forEach((child) => !(\"__FKP\" in child) && callback(child));\n}\nfunction walkTree(_node, context, callback, stopIfFalse = false, skipSubtreeOnFalse = false) {\n context.children.some((child) => {\n if (\"__FKP\" in child)\n return false;\n const val = callback(child);\n if (stopIfFalse && val === false)\n return true;\n if (skipSubtreeOnFalse && val === false)\n return false;\n return child.walk(callback, stopIfFalse, skipSubtreeOnFalse);\n });\n}\nfunction resetConfig(node, context) {\n const parent = node.parent || void 0;\n context.config = createConfig2(node.config._t, parent);\n node.walk((n) => n.resetConfig());\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 if (run && plugin(node) !== false) {\n context.plugins.add(plugin);\n node.children.forEach((child) => child.use(plugin));\n }\n }\n return node;\n}\nfunction setIndex(node, _context, _property, setIndex2) {\n if (isNode(node.parent)) {\n const children = node.parent.children;\n const index = setIndex2 >= children.length ? children.length - 1 : setIndex2 < 0 ? 0 : setIndex2;\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.disturb().calm({ name: index, value: valueMoved, from: oldIndex });\n return true;\n }\n return false;\n}\nfunction getIndex(node) {\n if (node.parent) {\n const index = [...node.parent.children].indexOf(node);\n return index === -1 ? node.parent.children.length : index;\n }\n return -1;\n}\nfunction getContext(_node, context) {\n return context;\n}\nfunction getName(node, context) {\n if (node.parent?.type === \"list\")\n return node.index;\n return context.name !== useIndex ? context.name : node.index;\n}\nfunction getAddress(node, context) {\n return context.parent ? context.parent.address.concat([node.name]) : [node.name];\n}\nfunction getNode2(node, _context, locator) {\n const address = typeof locator === \"string\" ? locator.split(node.config.delimiter) : locator;\n if (!address.length)\n return void 0;\n const first = address[0];\n let pointer = node.parent;\n if (!pointer) {\n if (String(address[0]) === String(node.name))\n address.shift();\n pointer = node;\n }\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 = pointer.children.find(\n (c) => !(\"__FKP\" in c) && String(c.name) === String(name)\n ) || select(pointer, name);\n }\n }\n return pointer || void 0;\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 void 0;\n }\n }\n return void 0;\n}\nfunction find(node, _context, searchTerm, searcher) {\n return bfs(node, searchTerm, searcher);\n}\nfunction bfs(tree, searchValue, searchGoal = \"name\") {\n const search = typeof searchGoal === \"string\" ? (n) => n[searchGoal] == searchValue : searchGoal;\n const stack = [tree];\n while (stack.length) {\n const node = stack.shift();\n if (\"__FKP\" in node)\n continue;\n if (search(node, searchValue))\n return node;\n stack.push(...node.children);\n }\n return void 0;\n}\nfunction getRoot(n) {\n let node = n;\n while (node.parent) {\n node = node.parent;\n }\n return node;\n}\nfunction createConfig2(target = {}, parent) {\n let node = void 0;\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 if (localValue !== void 0)\n return localValue;\n if (parent) {\n const parentVal = parent.config[prop];\n if (parentVal !== void 0)\n return parentVal;\n }\n if (target.rootConfig && typeof prop === \"string\") {\n const rootValue = target.rootConfig[prop];\n if (rootValue !== void 0)\n return rootValue;\n }\n if (prop === \"delay\" && node?.type === \"input\")\n return 20;\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 = void 0;\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 node.walk((n) => configChange(n, prop, value), false, true);\n }\n return didSet;\n }\n return true;\n }\n });\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}\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, node.props.__root);\n }\n}\nfunction resetValue(node, _context, value) {\n return reset(node, value);\n}\nfunction setErrors(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(\n (errors2) => {\n node.store.apply(errors2, (message) => message.meta.source === sourceKey);\n }\n );\n return node;\n}\nfunction clearErrors(node, _context, clearChildErrors = true, sourceKey) {\n node.store.filter((m) => {\n return !(sourceKey === void 0 || m.meta.source === sourceKey);\n }, \"error\");\n if (clearChildErrors) {\n sourceKey = sourceKey || `${node.name}-set`;\n node.walk((child) => {\n child.store.filter((message) => {\n return !(message.type === \"error\" && message.meta && message.meta.source === sourceKey);\n });\n });\n }\n return node;\n}\nfunction createProps(initial) {\n const props = {\n initial: typeof initial === \"object\" ? cloneAny(initial) : initial\n };\n let node;\n let isEmitting = true;\n let propDefs = {};\n return new Proxy(props, {\n get(...args) {\n const [_t, prop] = args;\n let val;\n if (has(props, prop)) {\n val = Reflect.get(...args);\n if (propDefs[prop]?.boolean)\n val = boolGetter(val);\n } else if (node && typeof prop === \"string\" && node.config[prop] !== void 0) {\n val = node.config[prop];\n if (prop === \"mergeStrategy\" && node?.type === \"input\" && isRecord(val) && node.name in val) {\n val = val[node.name];\n }\n } else {\n val = propDefs[prop]?.default;\n }\n const getter = propDefs[prop]?.getter;\n if (propDefs[prop]?.boolean)\n val = !!val;\n return getter ? getter(val, node) : val;\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 let { prop, value } = node.hook.prop.dispatch({\n prop: property,\n value: originalValue\n });\n const setter = propDefs[prop]?.setter;\n value = setter ? setter(value, node) : value;\n if (!eq(props[prop], value, false) || typeof value === \"object\") {\n const didSet = Reflect.set(target, prop, value, receiver);\n if (prop === \"__propDefs\")\n propDefs = toPropsObj(value);\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}\nfunction extend(node, context, property, trap2) {\n context.traps.set(property, trap2);\n return node;\n}\nfunction findDefinition(node, plugins) {\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}\nfunction createContext(options) {\n const value = createValue(options);\n const config = createConfig2(options.config || {}, options.parent);\n return {\n _d: 0,\n _e: createEmitter(),\n uid: Symbol(),\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: /* @__PURE__ */ new Set(),\n props: createProps(value),\n settled: Promise.resolve(value),\n store: createStore(true),\n sync: options.sync || false,\n traps: createTraps(),\n type: options.type || \"input\",\n value\n };\n}\nfunction nodeInit(node, options) {\n const hasInitialId = options.props?.id;\n if (!hasInitialId)\n delete options.props?.id;\n node.ledger.init(node.store._n = node.props._n = node.config._n = node);\n node.props._emit = false;\n Object.assign(\n node.props,\n hasInitialId ? {} : { id: `input_${idCount++}` },\n options.props ?? {}\n );\n node.props._emit = true;\n findDefinition(\n node,\n /* @__PURE__ */ new Set([\n ...options.plugins || [],\n ...node.parent ? node.parent.plugins : []\n ])\n );\n if (options.plugins) {\n for (const plugin of options.plugins) {\n use(node, node._c, plugin, true, false);\n }\n }\n node.each((child) => node.add(child));\n if (node.parent)\n node.parent.add(node, options.index);\n if (node.type === \"input\" && node.children.length)\n error(100, node);\n input(node, node._c, node._value, false);\n node.store.release();\n if (hasInitialId)\n register(node);\n node.emit(\"created\", node);\n node.isCreated = true;\n return node;\n}\nfunction createPlaceholder(options) {\n return {\n __FKP: true,\n uid: Symbol(),\n name: options?.name ?? `p_${nameCount++}`,\n value: options?.value ?? null,\n _value: options?.value ?? null,\n type: options?.type ?? \"input\",\n props: {},\n use: () => {\n },\n input(value) {\n this._value = value;\n this.value = value;\n return Promise.resolve();\n },\n isSettled: true\n };\n}\nfunction isPlaceholder(node) {\n return \"__FKP\" in node;\n}\nfunction createNode(options) {\n const ops = options || {};\n const context = createContext(ops);\n const node = new Proxy(context, {\n get(...args) {\n const [, property] = args;\n if (property === \"__FKNode__\")\n return true;\n const trap2 = context.traps.get(property);\n if (trap2 && trap2.get)\n return trap2.get(node, context);\n return Reflect.get(...args);\n },\n set(...args) {\n const [, property, value] = args;\n const trap2 = context.traps.get(property);\n if (trap2 && trap2.set)\n return trap2.set(node, context, property, value);\n return Reflect.set(...args);\n }\n });\n return nodeInit(node, ops);\n}\nfunction isDOM(node) {\n return typeof node !== \"string\" && has(node, \"$el\");\n}\nfunction isComponent(node) {\n return typeof node !== \"string\" && has(node, \"$cmp\");\n}\nfunction isConditional(node) {\n if (!node || typeof node === \"string\")\n return false;\n return has(node, \"if\") && has(node, \"then\");\n}\nfunction isSugar(node) {\n return typeof node !== \"string\" && \"$formkit\" in node;\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 {\n $formkit: type,\n for: iterator,\n if: condition,\n children,\n bind,\n ...props\n } = node;\n return Object.assign(\n {\n $cmp: \"FormKit\",\n props: { ...props, type }\n },\n condition ? { if: condition } : {},\n iterator ? { for: iterator } : {},\n children ? { children } : {},\n bind ? { bind } : {}\n );\n }\n return node;\n}\nfunction compile(expr) {\n let provideTokens;\n const requirements = /* @__PURE__ */ new Set();\n const x = function expand(operand, tokens) {\n return typeof operand === \"function\" ? operand(tokens) : operand;\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 const operatorSymbols = operatorRegistry.reduce((s, g) => {\n return s.concat(Object.keys(g));\n }, []);\n const operatorChars = new Set(operatorSymbols.map((key) => key.charAt(0)));\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 function getStep(p, expression, direction = 1) {\n let next = direction ? expression.substring(p + 1).trim() : expression.substring(0, p).trim();\n if (!next.length)\n return -1;\n if (!direction) {\n const reversed = next.split(\"\").reverse();\n const start = reversed.findIndex((char2) => operatorChars.has(char2));\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 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 } else if (char === \")\") {\n depth--;\n } else if (depth === 0 && char === \" \") {\n continue;\n }\n if (depth === 0 && getOp(operatorSymbols, char, p, expression)) {\n return [tail, p - 1];\n } else {\n tail += char;\n }\n }\n return [tail, expression.length - 1];\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 = (depth2, char2) => {\n depth2 ? parenthetical += char2 : operand += char2;\n };\n for (let p = 0; p < length; p++) {\n lastChar = char;\n char = expression.charAt(p);\n if ((char === \"'\" || char === '\"') && lastChar !== \"\\\\\" && (depth === 0 && !quote || depth && !parenQuote)) {\n if (depth) {\n parenQuote = char;\n } else {\n quote = char;\n }\n addTo(depth, char);\n continue;\n } else if (quote && (char !== quote || lastChar === \"\\\\\") || parenQuote && (char !== parenQuote || lastChar === \"\\\\\")) {\n addTo(depth, char);\n continue;\n } else if (quote === char) {\n quote = false;\n addTo(depth, char);\n continue;\n } else if (parenQuote === char) {\n parenQuote = false;\n addTo(depth, char);\n continue;\n } else if (char === \" \") {\n continue;\n } else if (char === \"(\") {\n if (depth === 0) {\n startP = p;\n } else {\n parenthetical += char;\n }\n depth++;\n } else if (char === \")\") {\n depth--;\n if (depth === 0) {\n const fn = typeof operand === \"string\" && operand.startsWith(\"$\") ? operand : void 0;\n const hasTail = fn && expression.charAt(p + 1) === \".\";\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 operand = evaluate(parenthetical, -1, fn, tail);\n if (typeof operand === \"string\")\n operand = parenthetical;\n } else if (op && (lStep >= rStep || rStep === -1) && step === lStep) {\n left = op.bind(null, evaluate(parenthetical, -1, fn, tail));\n op = null;\n operand = \"\";\n } else if (rStep > lStep && step === rStep) {\n operand = evaluate(parenthetical, -1, fn, tail);\n } else {\n operand += `(${parenthetical})${hasTail ? `.${tail}` : \"\"}`;\n }\n parenthetical = \"\";\n } else {\n parenthetical += char;\n }\n } else if (depth === 0 && (operation = getOp(symbols, char, p, expression))) {\n if (p === 0) {\n error(103, [operation, expression]);\n }\n p += operation.length - 1;\n if (p === expression.length - 1) {\n error(104, [operation, expression]);\n }\n if (!op) {\n if (left) {\n op = operators[operation].bind(null, evaluate(left, step));\n left = null;\n } else {\n op = operators[operation].bind(null, evaluate(operand, step));\n operand = \"\";\n }\n } else if (operand) {\n left = op.bind(null, evaluate(operand, step));\n op = operators[operation].bind(null, left);\n operand = \"\";\n }\n continue;\n } else {\n addTo(depth, char);\n }\n }\n if (operand && op) {\n op = op.bind(null, evaluate(operand, step));\n }\n op = !op && left ? left : op;\n if (!op && operand) {\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 function evaluate(operand, step, fnToken, tail) {\n if (fnToken) {\n const fn = evaluate(fnToken, operatorRegistry.length);\n let userFuncReturn;\n let tailCall = tail ? compile(`$${tail}`) : false;\n if (typeof fn === \"function\") {\n const args = parseArgs(String(operand)).map(\n (arg) => evaluate(arg, -1)\n );\n return (tokens) => {\n const userFunc = fn(tokens);\n if (typeof userFunc !== \"function\") {\n warn(150, fnToken);\n return userFunc;\n }\n userFuncReturn = userFunc(\n ...args.map(\n (arg) => typeof arg === \"function\" ? arg(tokens) : arg\n )\n );\n if (tailCall) {\n tailCall = tailCall.provide((subTokens) => {\n const rootTokens = provideTokens(subTokens);\n const t = subTokens.reduce(\n (tokenSet, token3) => {\n const isTail = token3 === tail || tail?.startsWith(`${token3}(`);\n if (isTail) {\n const value = getAt(userFuncReturn, token3);\n tokenSet[token3] = () => value;\n } else {\n tokenSet[token3] = rootTokens[token3];\n }\n return tokenSet;\n },\n {}\n );\n return t;\n });\n }\n return tailCall ? tailCall() : userFuncReturn;\n };\n }\n } else if (typeof operand === \"string\") {\n if (operand === \"true\")\n return true;\n if (operand === \"false\")\n return false;\n if (operand === \"undefined\")\n return void 0;\n if (isQuotedString(operand))\n return rmEscapes(operand.substring(1, operand.length - 1));\n if (!isNaN(+operand))\n return Number(operand);\n if (step < operatorRegistry.length - 1) {\n return parseLogicals(operand, step + 1);\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]() : void 0;\n };\n }\n return operand;\n }\n }\n return operand;\n }\n const compiled = parseLogicals(\n expr.startsWith(\"$:\") ? expr.substring(2) : expr\n );\n const reqs = Array.from(requirements);\n function provide(callback) {\n provideTokens = callback;\n return Object.assign(\n // @ts-ignore - @rollup/plugin-typescript doesn't like this\n compiled.bind(null, callback(reqs)),\n { provide }\n );\n }\n return Object.assign(compiled, {\n provide\n });\n}\n\n// packages/core/src/classes.ts\nfunction createClasses(propertyKey, node, sectionClassList) {\n if (!sectionClassList)\n return {};\n if (typeof sectionClassList === \"string\") {\n const classKeys = sectionClassList.split(\" \");\n return classKeys.reduce(\n (obj, key) => Object.assign(obj, { [key]: true }),\n {}\n );\n } else if (typeof sectionClassList === \"function\") {\n return createClasses(\n propertyKey,\n node,\n sectionClassList(node, propertyKey)\n );\n }\n return sectionClassList;\n}\nfunction generateClassList(node, property, ...args) {\n const combinedClassList = args.reduce((finalClassList, currentClassList) => {\n if (!currentClassList)\n return handleNegativeClasses(finalClassList);\n const { $reset, ...classList } = currentClassList;\n if ($reset) {\n return handleNegativeClasses(classList);\n }\n return handleNegativeClasses(Object.assign(finalClassList, classList));\n }, {});\n return Object.keys(\n node.hook.classes.dispatch({ property, classes: combinedClassList }).classes\n ).filter((key) => combinedClassList[key]).join(\" \") || null;\n}\nfunction handleNegativeClasses(classList) {\n const removalToken = \"$remove:\";\n let hasNegativeClassValue = false;\n const applicableClasses = Object.keys(classList).filter((className) => {\n if (classList[className] && className.startsWith(removalToken)) {\n hasNegativeClassValue = true;\n }\n return classList[className];\n });\n if (applicableClasses.length > 1 && hasNegativeClassValue) {\n const negativeClasses = applicableClasses.filter((className) => className.startsWith(removalToken));\n negativeClasses.map((negativeClass) => {\n const targetClass = negativeClass.substring(removalToken.length);\n classList[targetClass] = false;\n classList[negativeClass] = false;\n });\n }\n return classList;\n}\n\n// packages/core/src/setErrors.ts\nfunction setErrors2(id, localErrors, childErrors) {\n const node = getNode(id);\n if (node) {\n node.setErrors(localErrors, childErrors);\n } else {\n warn(651, id);\n }\n}\nfunction clearErrors2(id, clearChildren = true) {\n const node = getNode(id);\n if (node) {\n node.clearErrors(clearChildren);\n } else {\n warn(652, id);\n }\n}\n\n// packages/core/src/index.ts\nvar FORMKIT_VERSION = \"1.6.7\";\n\nexport { FORMKIT_VERSION, bfs, clearErrors2 as clearErrors, compile, createClasses, createConfig, createMessage, createNode, createPlaceholder, createValue, deregister, error, errorHandler, generateClassList, getNode, isComponent, isConditional, isDOM, isList, isNode, isPlaceholder, isSugar, names, register, reset, resetCount, resetRegistry, setErrors2 as setErrors, stopWatch, submitForm, sugar, use, useIndex, valueInserted, valueMoved, valueRemoved, warn, warningHandler, watchRegistry };\n//# sourceMappingURL=out.js.map\n//# sourceMappingURL=index.mjs.map","import { has } from '@formkit/utils';\nimport { isNode } from '@formkit/core';\n\n// packages/observer/src/index.ts\nvar revokedObservers = /* @__PURE__ */ new WeakSet();\nfunction createObserver(node, dependencies) {\n const deps = dependencies || Object.assign(/* @__PURE__ */ new Map(), { active: false });\n const receipts = /* @__PURE__ */ new Map();\n const addDependency = function(event) {\n if (!deps.active)\n return;\n if (!deps.has(node))\n deps.set(node, /* @__PURE__ */ new Set());\n deps.get(node)?.add(event);\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 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 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 === \"_value\")\n addDependency(\"input\");\n if (property === \"props\")\n return observeProps(value);\n if (property === \"ledger\")\n return observeLedger(value);\n if (property === \"children\") {\n addDependency(\"child\");\n addDependency(\"childRemoved\");\n }\n return value;\n };\n const {\n proxy: observed,\n revoke\n } = Proxy.revocable(node, {\n get(...args) {\n switch (args[1]) {\n case \"_node\":\n return node;\n case \"deps\":\n return deps;\n case \"watch\":\n return (block, after, pos) => watch(observed, block, after, pos);\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 return void 0;\n };\n }\n const value = Reflect.get(...args);\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}\nfunction applyListeners(node, [toAdd, toRemove], callback, pos) {\n toAdd.forEach((events, depNode) => {\n events.forEach((event) => {\n node.receipts.has(depNode) || node.receipts.set(depNode, {});\n const events2 = node.receipts.get(depNode) ?? {};\n events2[event] = events2[event] ?? [];\n events2[event].push(depNode.on(event, callback, pos));\n node.receipts.set(depNode, events2);\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 nodeReceipts[event].map(depNode.off);\n delete nodeReceipts[event];\n node.receipts.set(depNode, nodeReceipts);\n }\n }\n });\n });\n}\nfunction removeListeners(receipts) {\n receipts.forEach((events, node) => {\n for (const event in events) {\n events[event].map(node.off);\n }\n });\n receipts.clear();\n}\nfunction watch(node, block, after, pos) {\n const doAfterObservation = (res2) => {\n const newDeps = node.stopObserve();\n applyListeners(\n node,\n diffDeps(oldDeps, newDeps),\n () => watch(node, block, after, pos),\n pos\n );\n if (after)\n after(res2);\n };\n const oldDeps = new Map(node.deps);\n node.observe();\n const res = block(node);\n if (res instanceof Promise)\n res.then((val) => doAfterObservation(val));\n else\n doAfterObservation(res);\n}\nfunction diffDeps(previous, current) {\n const toAdd = /* @__PURE__ */ new Map();\n const toRemove = /* @__PURE__ */ new Map();\n current.forEach((events, node) => {\n if (!previous.has(node)) {\n toAdd.set(node, events);\n } else {\n const eventsToAdd = /* @__PURE__ */ new Set();\n const previousEvents = previous.get(node);\n events.forEach(\n (event) => !previousEvents?.has(event) && eventsToAdd.add(event)\n );\n toAdd.set(node, eventsToAdd);\n }\n });\n previous.forEach((events, node) => {\n if (!current.has(node)) {\n toRemove.set(node, events);\n } else {\n const eventsToRemove = /* @__PURE__ */ new Set();\n const newEvents = current.get(node);\n events.forEach(\n (event) => !newEvents?.has(event) && eventsToRemove.add(event)\n );\n toRemove.set(node, eventsToRemove);\n }\n });\n return [toAdd, toRemove];\n}\nfunction isKilled(node) {\n return revokedObservers.has(node);\n}\n\nexport { applyListeners, createObserver, diffDeps, isKilled, removeListeners };\n//# sourceMappingURL=out.js.map\n//# sourceMappingURL=index.mjs.map","import { has, regexForFormat, eq, empty } from '@formkit/utils';\n\n// packages/rules/src/accepted.ts\nvar accepted = function accepted2({ value }) {\n return [\"yes\", \"on\", \"1\", 1, true, \"true\"].includes(value);\n};\naccepted.skipEmpty = false;\nvar accepted_default = accepted;\n\n// packages/rules/src/date_after.ts\nvar date_after = function({ value }, compare = false) {\n const timestamp = Date.parse(compare || /* @__PURE__ */ new Date());\n const fieldValue = Date.parse(String(value));\n return isNaN(fieldValue) ? false : fieldValue > timestamp;\n};\nvar date_after_default = date_after;\n\n// packages/rules/src/date_after_or_equal.ts\nvar date_after_or_equal = function({ value }, compare = false) {\n const timestamp = Date.parse(compare || /* @__PURE__ */ new Date());\n const fieldValue = Date.parse(String(value));\n return isNaN(fieldValue) ? false : fieldValue > timestamp || fieldValue === timestamp;\n};\nvar date_after_or_equal_default = date_after_or_equal;\n\n// packages/rules/src/date_after_node.ts\nvar date_after_node = function(node, address) {\n if (!address)\n return false;\n const fieldValue = Date.parse(String(node.value));\n const foreignValue = Date.parse(String(node.at(address)?.value));\n if (isNaN(foreignValue))\n return true;\n return isNaN(fieldValue) ? false : fieldValue > foreignValue;\n};\nvar date_after_node_default = date_after_node;\nvar alpha = function({ value }, set = \"default\") {\n const sets = {\n default: /^\\p{L}+$/u,\n latin: /^[a-z]+$/i\n };\n const selectedSet = has(sets, set) ? set : \"default\";\n return sets[selectedSet].test(String(value));\n};\nvar alpha_default = alpha;\nvar alpha_spaces = function({ value }, set = \"default\") {\n const sets = {\n default: /^[\\p{L} ]+$/u,\n latin: /^[a-z ]+$/i\n };\n const selectedSet = has(sets, set) ? set : \"default\";\n return sets[selectedSet].test(String(value));\n};\nvar alpha_spaces_default = alpha_spaces;\nvar alphanumeric = function({ value }, set = \"default\") {\n const sets = {\n default: /^[0-9\\p{L}]+$/u,\n latin: /^[0-9a-z]+$/i\n };\n const selectedSet = has(sets, set) ? set : \"default\";\n return sets[selectedSet].test(String(value));\n};\nvar alphanumeric_default = alphanumeric;\n\n// packages/rules/src/date_before.ts\nvar date_before = function({ value }, compare = false) {\n const timestamp = Date.parse(compare || /* @__PURE__ */ new Date());\n const fieldValue = Date.parse(String(value));\n return isNaN(fieldValue) ? false : fieldValue < timestamp;\n};\nvar date_before_default = date_before;\n\n// packages/rules/src/date_before_node.ts\nvar date_before_node = function(node, address) {\n if (!address)\n return false;\n const fieldValue = Date.parse(String(node.value));\n const foreignValue = Date.parse(String(node.at(address)?.value));\n if (isNaN(foreignValue))\n return true;\n return isNaN(fieldValue) ? false : fieldValue < foreignValue;\n};\nvar date_before_node_default = date_before_node;\n\n// packages/rules/src/date_before_or_equal.ts\nvar date_before_or_equal = function({ value }, compare = false) {\n const timestamp = Date.parse(compare || /* @__PURE__ */ new Date());\n const fieldValue = Date.parse(String(value));\n return isNaN(fieldValue) ? false : fieldValue < timestamp || fieldValue === timestamp;\n};\nvar date_before_or_equal_default = date_before_or_equal;\n\n// packages/rules/src/between.ts\nvar between = function between2({ 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};\nvar between_default = between;\n\n// packages/rules/src/confirm.ts\nvar hasConfirm = /(_confirm(?:ed)?)$/;\nvar confirm = function confirm2(node, address, comparison = \"loose\") {\n if (!address) {\n address = hasConfirm.test(node.name) ? node.name.replace(hasConfirm, \"\") : `${node.name}_confirm`;\n }\n const foreignValue = node.at(address)?.value;\n return comparison === \"strict\" ? node.value === foreignValue : node.value == foreignValue;\n};\nvar confirm_default = confirm;\nvar contains_alpha = function({ value }, set = \"default\") {\n const sets = {\n default: /\\p{L}/u,\n latin: /[a-z]/i\n };\n const selectedSet = has(sets, set) ? set : \"default\";\n return sets[selectedSet].test(String(value));\n};\nvar contains_alpha_default = contains_alpha;\nvar contains_alpha_spaces = function({ value }, set = \"default\") {\n const sets = {\n default: /[\\p{L} ]/u,\n latin: /[a-z ]/i\n };\n const selectedSet = has(sets, set) ? set : \"default\";\n return sets[selectedSet].test(String(value));\n};\nvar contains_alpha_spaces_default = contains_alpha_spaces;\nvar contains_alphanumeric = function({ value }, set = \"default\") {\n const sets = {\n default: /[0-9\\p{L}]/u,\n latin: /[0-9a-z]/i\n };\n const selectedSet = has(sets, set) ? set : \"default\";\n return sets[selectedSet].test(String(value));\n};\nvar contains_alphanumeric_default = contains_alphanumeric;\nvar contains_lowercase = function({ value }, set = \"default\") {\n const sets = {\n default: /\\p{Ll}/u,\n latin: /[a-z]/\n };\n const selectedSet = has(sets, set) ? set : \"default\";\n return sets[selectedSet].test(String(value));\n};\nvar contains_lowercase_default = contains_lowercase;\n\n// packages/rules/src/contains_numeric.ts\nvar contains_numeric = function number({ value }) {\n return /[0-9]/.test(String(value));\n};\nvar contains_numeric_default = contains_numeric;\n\n// packages/rules/src/contains_symbol.ts\nvar contains_symbol = function({ value }) {\n return /[!-/:-@[-`{-~]/.test(String(value));\n};\nvar contains_symbol_default = contains_symbol;\nvar contains_uppercase = function({ value }, set = \"default\") {\n const sets = {\n default: /\\p{Lu}/u,\n latin: /[A-Z]/\n };\n const selectedSet = has(sets, set) ? set : \"default\";\n return sets[selectedSet].test(String(value));\n};\nvar contains_uppercase_default = contains_uppercase;\n\n// packages/rules/src/date_between.ts\nvar date_between = function date_between2({ 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 } else if (!dateA || !compareTo) {\n return false;\n }\n return compareTo >= dateA && compareTo <= dateB;\n};\nvar date_between_default = date_between;\nvar 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};\nvar date_format_default = date_format;\n\n// packages/rules/src/email.ts\nvar email = function email2({ value }) {\n const isEmail = /^(([^<>()\\[\\]\\.,;:\\s@\\\"]+(\\.[^<>()\\[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i;\n return isEmail.test(String(value));\n};\nvar email_default = email;\n\n// packages/rules/src/ends_with.ts\nvar ends_with = function ends_with2({ value }, ...stack) {\n if (typeof value === \"string\" && stack.length) {\n return stack.some((item) => {\n return value.endsWith(item);\n });\n } else if (typeof value === \"string\" && stack.length === 0) {\n return true;\n }\n return false;\n};\nvar ends_with_default = ends_with;\nvar is = function is2({ value }, ...stack) {\n return stack.some((item) => {\n if (typeof item === \"object\") {\n return eq(item, value);\n }\n return item == value;\n });\n};\nvar is_default = is;\n\n// packages/rules/src/length.ts\nvar length = function length2({ value }, first = 0, second = Infinity) {\n first = parseInt(first);\n second = isNaN(parseInt(second)) ? Infinity : parseInt(second);\n const min3 = first <= second ? first : second;\n const max3 = second >= first ? second : first;\n if (typeof value === \"string\" || Array.isArray(value)) {\n return value.length >= min3 && value.length <= max3;\n } else if (value && typeof value === \"object\") {\n const length3 = Object.keys(value).length;\n return length3 >= min3 && length3 <= max3;\n }\n return false;\n};\nvar length_default = length;\nvar lowercase = function({ value }, set = \"default\") {\n const sets = {\n default: /^\\p{Ll}+$/u,\n allow_non_alpha: /^[0-9\\p{Ll}!-/:-@[-`{-~]+$/u,\n allow_numeric: /^[0-9\\p{Ll}]+$/u,\n allow_numeric_dashes: /^[0-9\\p{Ll}-]+$/u,\n latin: /^[a-z]+$/\n };\n const selectedSet = has(sets, set) ? set : \"default\";\n return sets[selectedSet].test(String(value));\n};\nvar lowercase_default = lowercase;\n\n// packages/rules/src/matches.ts\nvar matches = function matches2({ value }, ...stack) {\n return stack.some((pattern) => {\n if (typeof pattern === \"string\" && pattern.substr(0, 1) === \"/\" && 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};\nvar matches_default = matches;\n\n// packages/rules/src/max.ts\nvar max = function max2({ value }, maximum = 10) {\n if (Array.isArray(value)) {\n return value.length <= maximum;\n }\n return Number(value) <= Number(maximum);\n};\nvar max_default = max;\n\n// packages/rules/src/min.ts\nvar min = function min2({ value }, minimum = 1) {\n if (Array.isArray(value)) {\n return value.length >= minimum;\n }\n return Number(value) >= Number(minimum);\n};\nvar min_default = min;\nvar not = function not2({ value }, ...stack) {\n return !stack.some((item) => {\n if (typeof item === \"object\") {\n return eq(item, value);\n }\n return item === value;\n });\n};\nvar not_default = not;\n\n// packages/rules/src/number.ts\nvar number2 = function number3({ value }) {\n return !isNaN(value);\n};\nvar number_default = number2;\nvar require_one = function(node, ...inputNames) {\n if (!empty(node.value))\n return true;\n const values = inputNames.map((name) => node.at(name)?.value);\n return values.some((value) => !empty(value));\n};\nrequire_one.skipEmpty = false;\nvar require_one_default = require_one;\nvar required = function required2({ value }, action = \"default\") {\n return action === \"trim\" && typeof value === \"string\" ? !empty(value.trim()) : !empty(value);\n};\nrequired.skipEmpty = false;\nvar required_default = required;\n\n// packages/rules/src/starts_with.ts\nvar starts_with = function starts_with2({ value }, ...stack) {\n if (typeof value === \"string\" && stack.length) {\n return stack.some((item) => {\n return value.startsWith(item);\n });\n } else if (typeof value === \"string\" && stack.length === 0) {\n return true;\n }\n return false;\n};\nvar starts_with_default = starts_with;\n\n// packages/rules/src/symbol.ts\nvar symbol = function({ value }) {\n return /^[!-/:-@[-`{-~]+$/.test(String(value));\n};\nvar symbol_default = symbol;\nvar uppercase = function({ value }, set = \"default\") {\n const sets = {\n default: /^\\p{Lu}+$/u,\n latin: /^[A-Z]+$/\n };\n const selectedSet = has(sets, set) ? set : \"default\";\n return sets[selectedSet].test(String(value));\n};\nvar uppercase_default = uppercase;\n\n// packages/rules/src/url.ts\nvar url = function url2({ value }, ...stack) {\n try {\n const protocols = stack.length ? stack : [\"http:\", \"https:\"];\n const url3 = new URL(String(value));\n return protocols.includes(url3.protocol);\n } catch {\n return false;\n }\n};\nvar url_default = url;\n\nexport { accepted_default as accepted, alpha_default as alpha, alpha_spaces_default as alpha_spaces, alphanumeric_default as alphanumeric, between_default as between, confirm_default as confirm, contains_alpha_default as contains_alpha, contains_alpha_spaces_default as contains_alpha_spaces, contains_alphanumeric_default as contains_alphanumeric, contains_lowercase_default as contains_lowercase, contains_numeric_default as contains_numeric, contains_symbol_default as contains_symbol, contains_uppercase_default as contains_uppercase, date_after_default as date_after, date_after_node_default as date_after_node, date_after_or_equal_default as date_after_or_equal, date_before_default as date_before, date_before_node_default as date_before_node, date_before_or_equal_default as date_before_or_equal, date_between_default as date_between, date_format_default as date_format, email_default as email, ends_with_default as ends_with, is_default as is, length_default as length, lowercase_default as lowercase, matches_default as matches, max_default as max, min_default as min, not_default as not, number_default as number, require_one_default as require_one, required_default as required, starts_with_default as starts_with, symbol_default as symbol, uppercase_default as uppercase, url_default as url };\n//# sourceMappingURL=out.js.map\n//# sourceMappingURL=index.mjs.map","import { createMessage } from '@formkit/core';\nimport { removeListeners, isKilled, createObserver, diffDeps, applyListeners } from '@formkit/observer';\nimport { cloneAny, token, eq, empty, has, clone } from '@formkit/utils';\n\n// packages/validation/src/validation.ts\nvar validatingMessage = /* @__PURE__ */ createMessage({\n type: \"state\",\n blocking: true,\n visible: false,\n value: true,\n key: \"validating\"\n});\nfunction createValidationPlugin(baseRules = {}) {\n return function validationPlugin(node) {\n let propRules = cloneAny(node.props.validationRules || {});\n let availableRules = { ...baseRules, ...propRules };\n const state = { input: token(), rerun: null, isPassing: true };\n let validation = cloneAny(node.props.validation);\n node.on(\"prop:validation\", ({ payload }) => reboot(payload, propRules));\n node.on(\n \"prop:validationRules\",\n ({ payload }) => reboot(validation, payload)\n );\n function reboot(newValidation, newRules) {\n if (eq(Object.keys(propRules || {}), Object.keys(newRules || {})) && eq(validation, newValidation))\n return;\n propRules = cloneAny(newRules);\n validation = cloneAny(newValidation);\n availableRules = { ...baseRules, ...propRules };\n node.props.parsedRules?.forEach((validation2) => {\n removeMessage(validation2);\n removeListeners(validation2.observer.receipts);\n validation2.observer.kill();\n });\n node.store.filter(() => false, \"validation\");\n node.props.parsedRules = parseRules(newValidation, availableRules, node);\n state.isPassing = true;\n validate(node, node.props.parsedRules, state);\n }\n node.props.parsedRules = parseRules(validation, availableRules, node);\n validate(node, node.props.parsedRules, state);\n };\n}\nfunction validate(node, validations, state) {\n if (isKilled(node))\n return;\n state.input = token();\n node.store.set(\n /* @__PURE__ */ createMessage({\n key: \"failing\",\n value: !state.isPassing,\n visible: false\n })\n );\n state.isPassing = true;\n node.store.filter((message) => !message.meta.removeImmediately, \"validation\");\n validations.forEach(\n (validation) => validation.debounce && clearTimeout(validation.timer)\n );\n if (validations.length) {\n node.store.set(validatingMessage);\n run(0, validations, state, false, () => {\n node.store.remove(validatingMessage.key);\n node.store.set(\n /* @__PURE__ */ createMessage({\n key: \"failing\",\n value: !state.isPassing,\n visible: false\n })\n );\n });\n }\n}\nfunction run(current, validations, state, removeImmediately, complete) {\n const validation = validations[current];\n if (!validation)\n return complete();\n const node = validation.observer;\n if (isKilled(node))\n return;\n const currentRun = state.input;\n validation.state = null;\n function next(async, result) {\n if (state.input !== currentRun)\n return;\n state.isPassing = state.isPassing && !!result;\n validation.queued = false;\n const newDeps = node.stopObserve();\n const diff = diffDeps(validation.deps, newDeps);\n applyListeners(\n node,\n diff,\n function revalidate() {\n try {\n node.store.set(validatingMessage);\n } catch (e) {\n }\n validation.queued = true;\n if (state.rerun)\n clearTimeout(state.rerun);\n state.rerun = setTimeout(\n validate,\n 0,\n node,\n validations,\n state\n );\n },\n \"unshift\"\n // We want these listeners to run before other events are emitted so the 'state.validating' will be reliable.\n );\n validation.deps = newDeps;\n validation.state = result;\n if (result === false) {\n createFailedMessage(validation, removeImmediately || async);\n } else {\n removeMessage(validation);\n }\n if (validations.length > current + 1) {\n const nextValidation = validations[current + 1];\n if ((result || nextValidation.force || !nextValidation.skipEmpty) && nextValidation.state === null) {\n nextValidation.queued = true;\n }\n run(current + 1, validations, state, removeImmediately || async, complete);\n } else {\n complete();\n }\n }\n if ((!empty(node.value) || !validation.skipEmpty) && (state.isPassing || validation.force)) {\n if (validation.queued) {\n runRule(validation, node, (result) => {\n result instanceof Promise ? result.then((r) => next(true, r)) : next(false, result);\n });\n } else {\n run(current + 1, validations, state, removeImmediately, complete);\n }\n } else if (empty(node.value) && validation.skipEmpty && state.isPassing) {\n node.observe();\n node.value;\n next(false, state.isPassing);\n } else {\n next(false, null);\n }\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 } else {\n node.observe();\n after(validation.rule(node, ...validation.args));\n }\n}\nfunction removeMessage(validation) {\n const key = `rule_${validation.name}`;\n if (validation.messageObserver) {\n validation.messageObserver = validation.messageObserver.kill();\n }\n if (has(validation.observer.store, key)) {\n validation.observer.store.remove(key);\n }\n}\nfunction createFailedMessage(validation, removeImmediately) {\n const node = validation.observer;\n if (isKilled(node))\n return;\n if (!validation.messageObserver) {\n validation.messageObserver = createObserver(node._node);\n }\n validation.messageObserver.watch(\n (node2) => {\n const i18nArgs = createI18nArgs(\n node2,\n validation\n );\n return i18nArgs;\n },\n (i18nArgs) => {\n const customMessage = createCustomMessage(node, validation, i18nArgs);\n const message = /* @__PURE__ */ 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 }\n );\n}\nfunction createCustomMessage(node, validation, i18nArgs) {\n const customMessage = node.props.validationMessages && has(node.props.validationMessages, validation.name) ? node.props.validationMessages[validation.name] : void 0;\n if (typeof customMessage === \"function\") {\n return customMessage(...i18nArgs);\n }\n return customMessage;\n}\nfunction createI18nArgs(node, validation) {\n return [\n {\n node,\n name: createMessageName(node),\n args: validation.args\n }\n ];\n}\nfunction createMessageName(node) {\n if (typeof node.props.validationLabel === \"function\") {\n return node.props.validationLabel(node);\n }\n return node.props.validationLabel || node.props.label || node.props.name || String(node.name);\n}\nvar hintPattern = \"(?:[\\\\*+?()0-9]+)\";\nvar rulePattern = \"[a-zA-Z][a-zA-Z0-9_]+\";\nvar ruleExtractor = new RegExp(\n `^(${hintPattern}?${rulePattern})(?:\\\\:(.*)+)?$`,\n \"i\"\n);\nvar hintExtractor = new RegExp(`^(${hintPattern})(${rulePattern})$`, \"i\");\nvar debounceExtractor = /([\\*+?]+)?(\\(\\d+\\))([\\*+?]+)?/;\nvar hasDebounce = /\\(\\d+\\)/;\nvar defaultHints = {\n blocking: true,\n debounce: 0,\n force: false,\n skipEmpty: true,\n name: \"\"\n};\nfunction parseRules(validation, rules, node) {\n if (!validation)\n return [];\n const intents = typeof validation === \"string\" ? extractRules(validation) : 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 observer: createObserver(node),\n rule,\n args,\n timer: 0,\n state: null,\n queued: true,\n deps: /* @__PURE__ */ new Map(),\n ...defaultHints,\n ...fnHints(hints, rule)\n });\n }\n return validations;\n }, []);\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}\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\" ? matches[2].split(\",\").map((s) => s.trim()) : [];\n return [ruleName, ...args];\n }\n }\n return false;\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) ? hints.match(debounceExtractor) || [] : [, hints];\n return [\n rule,\n [hintGroups[1], hintGroups[2], hintGroups[3]].reduce(\n (hints2, group) => {\n if (!group)\n return hints2;\n if (hasDebounce.test(group)) {\n hints2.debounce = parseInt(group.substr(1, group.length - 1));\n } else {\n group.split(\"\").forEach(\n (hint) => has(map, hint) && Object.assign(hints2, map[hint])\n );\n }\n return hints2;\n },\n { name: rule }\n )\n ];\n}\nfunction fnHints(existingHints, rule) {\n if (!existingHints.name) {\n existingHints.name = rule.ruleName || rule.name;\n }\n return [\"skipEmpty\", \"force\", \"debounce\", \"blocking\"].reduce(\n (hints, hint) => {\n if (has(rule, hint) && !has(hints, hint)) {\n Object.assign(hints, {\n [hint]: rule[hint]\n });\n }\n return hints;\n },\n existingHints\n );\n}\nfunction getValidationMessages(node) {\n const messages = /* @__PURE__ */ 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\" && message.visible && 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 { createMessageName, createValidationPlugin, getValidationMessages };\n//# sourceMappingURL=out.js.map\n//# sourceMappingURL=index.mjs.map","import { createMessageName } from '@formkit/validation';\nimport { has } from '@formkit/utils';\n\n// packages/i18n/src/locales/ar.ts\n\n// packages/i18n/src/formatters.ts\nfunction sentence(str) {\n return str[0].toUpperCase() + str.substr(1);\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}\nfunction date(date2) {\n const dateTime = typeof date2 === \"string\" ? new Date(Date.parse(date2)) : date2;\n if (!(dateTime instanceof Date)) {\n return \"(unknown)\";\n }\n return new Intl.DateTimeFormat(void 0, {\n dateStyle: \"medium\",\n timeZone: \"UTC\"\n }).format(dateTime);\n}\nfunction order(first, second) {\n return Number(first) >= Number(second) ? [second, first] : [first, second];\n}\n\n// packages/i18n/src/locales/ar.ts\nvar 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 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 * Shown on buttons that navigate state forward\n */\n next: \"التالي\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"السابق\",\n /**\n * Shown when transferring items between lists.\n */\n addAllValues: \"أض٠جميع القيم\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"إضاÙØ© قيم Ù…Øددة\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"قم بإزالة جميع القيم\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"إزالة القيم المØددة\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"اختر التاريخ\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"تاريخ التغيير\",\n /**\n * Shown when there is something to close\n */\n close: \"أغلق\",\n /**\n * Shown when there is something to open.\n */\n open: \"اÙتØ\"\n};\nvar validation = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `الرجاء قبول ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `يجب أن يكون ${sentence(name)} بعد ${date(args[0])}.`;\n }\n return `يجب أن يكون ${sentence(name)} ÙÙŠ المستقبل.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `يمكن أن ÙŠØتوي ${sentence(name)} على Ø£Øر٠أبجدية Ùقط.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `يمكن أن ÙŠØتوي ${sentence(name)} على Ø£Øر٠وأرقام Ùقط.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `يمكن أن تØتوي ${sentence(name)} على Ø£Øر٠ومساÙات Ùقط.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `يجب أن ÙŠØتوي ${sentence(name)} على Ø£Øر٠أبجدية.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `يجب أن ÙŠØتوي ${sentence(name)} على Ø£Øر٠أو أرقام.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `يجب أن ÙŠØتوي ${sentence(name)} على Ø£Øر٠أو مساÙات.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `يجب أن ÙŠØتوي ${sentence(name)} على رمز.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `يجب أن ÙŠØتوي ${sentence(name)} على Ø£Øر٠كبيرة.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `يجب أن ÙŠØتوي ${sentence(name)} على Ø£Øر٠صغيرة.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `يجب أن ÙŠØتوي ${sentence(name)} على أرقام.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `يجب أن يكون ${sentence(name)} رمزًا.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `يمكن أن ÙŠØتوي ${sentence(name)} على Ø£Øر٠كبيرة Ùقط.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `يمكن أن ÙŠØتوي ${sentence(name)} على Ø£Øر٠صغيرة Ùقط.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `يجب أن يكون ${sentence(name)} قبل ${date(args[0])}.`;\n }\n return `يجب أن يكون ${sentence(name)} ÙÙŠ الماضي.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `تمت تهيئة هذا الØقل بشكل غير صØÙŠØ ÙˆÙ„Ø§ يمكن إرساله.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `يجب أن يكون ${sentence(name)} ما بين ${a} Ùˆ ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} غير متطابق.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} ليس تاريخًا صالØًا ØŒ يرجى استخدام التنسيق ${args[0]}`;\n }\n return \"تمت تهيئة هذا الØقل بشكل غير صØÙŠØ ÙˆÙ„Ø§ يمكن إرساله\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `يجب أن يكون ${sentence(name)} بين ${date(args[0])} Ùˆ ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"الرجاء أدخال بريد إليكتروني صالØ.\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `لا ينتهي ${sentence(name)} بـ ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} ليست قيمة Ù…Ø³Ù…ÙˆØ Ø¨Ù‡Ø§.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `يجب أن يكون ${sentence(name)} ØرÙًا واØدًا على الأقل.`;\n }\n if (min == 0 && max) {\n return `يجب أن يكون ${sentence(name)} أقل من أو يساوي ${max} ØرÙًا.`;\n }\n if (min === max) {\n return `يجب أن يتكون ${sentence(name)} من الأØر٠${max}.`;\n }\n if (min && max === Infinity) {\n return `يجب أن يكون ${sentence(name)} أكبر من أو يساوي ${min} ØرÙًا.`;\n }\n return `يجب أن يكون ${sentence(name)} بين ${min} Ùˆ ${max} ØرÙًا.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} ليست قيمة Ù…Ø³Ù…ÙˆØ Ø¨Ù‡Ø§.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `لا يمكن أن يكون أكثر من ${args[0]} ${name}.`;\n }\n return `يجب أن يكون ${sentence(name)} أقل من أو يساوي ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"لا ÙŠØ³Ù…Ø Ø¨ØªÙ†Ø³ÙŠÙ‚Ø§Øª الملÙات.\";\n }\n return `يجب أن يكون ${sentence(name)} من النوع: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `لا يمكن أن يكون أقل من ${args[0]} ${name}.`;\n }\n return `يجب أن يكون ${sentence(name)} على الأقل ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†ليس ${name} مسموØًا به.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} يجب ان يكون رقماً`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" أو \")} مطلوب.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} مطلوب.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `لا يبدأ ${sentence(name)} بـ ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `يرجى إدخال عنوان URL صالØ.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"التاريخ المØدد غير صالØ.\"\n};\nvar ar = { ui, validation };\nvar ui2 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"NövbÉ™ti\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"ÆvvÉ™lki\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Bütün dÉ™yÉ™rlÉ™ri É™lavÉ™ edin\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"SeçilmiÅŸ dÉ™yÉ™rlÉ™ri É™lavÉ™ edin\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Bütün dÉ™yÉ™rlÉ™ri sil\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"SeçilmiÅŸ dÉ™yÉ™rlÉ™ri sil\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Tarixi seçin\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Tarixi dÉ™yiÅŸdirin\",\n /**\n * Shown when there is something to close\n */\n close: \"BaÄŸlayın\",\n /**\n * Shown when there is something to open.\n */\n open: \"Açıq\"\n};\nvar validation2 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `${name} qÉ™bul edin.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} ${date(args[0])} sonra olmalıdır.`;\n }\n return `${sentence(name)} gÉ™lÉ™cÉ™kdÉ™ olmalıdır.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} yalnız É™lifba sırası simvollarından ibarÉ™t ola bilÉ™r.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} yalnız hÉ™rf vÉ™ rÉ™qÉ™mlÉ™rdÉ™n ibarÉ™t ola bilÉ™r.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} yalnız hÉ™rflÉ™rdÉ™n vÉ™ boÅŸluqlardan ibarÉ™t ola bilÉ™r.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} É™lifba sırası simvolları ehtiva etmÉ™lidir.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} hÉ™rflÉ™ri vÉ™ ya nömrÉ™lÉ™ri ehtiva etmÉ™lidir.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} hÉ™rflÉ™ri vÉ™ ya boÅŸluqları ehtiva etmÉ™lidir.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} simvolu ehtiva etmÉ™lidir.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} böyük olmalıdır.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} kiçik olmalıdır.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} nömrÉ™lÉ™ri ehtiva etmÉ™lidir.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} simvol olmalıdır.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} yalnız böyük hÉ™rflÉ™ri ehtiva edÉ™ bilÉ™r.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} yalnız kiçik hÉ™rflÉ™ri ehtiva edÉ™ bilÉ™r.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} ${date(args[0])} É™vvÉ™l olmalıdır.`;\n }\n return `${sentence(name)} keçmiÅŸdÉ™ olmalıdır.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Bu sahÉ™ sÉ™hv konfiqurasiya edilib vÉ™ onu tÉ™qdim etmÉ™k mümkün deyil.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} ${a} vÉ™ ${b} arasında olmalıdır.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} uyÄŸun gÉ™lmir.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} etibarlı tarix deyil, ${args[0]} formatından istifadÉ™ edin`;\n }\n return \"Bu sahÉ™ sÉ™hv konfiqurasiya edilib vÉ™ onu tÉ™qdim etmÉ™k mümkün deyil\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} ${date(args[0])} vÉ™ ${date(args[1])} arasında olmalıdır`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} ${list(args)} ilÉ™ bitmir.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} icazÉ™ verilÉ™n dÉ™yÉ™r deyil.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} É™n azı bir simvol olmalıdır.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} ${max} simvoldan kiçik vÉ™ ya ona bÉ™rabÉ™r olmalıdır.`;\n }\n if (min === max) {\n return `${sentence(name)} ${max} simvol uzunluÄŸunda olmalıdır.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} ${min} simvoldan böyük vÉ™ ya ona bÉ™rabÉ™r olmalıdır.`;\n }\n return `${sentence(name)} ${min} vÉ™ ${max} simvol arasında olmalıdır.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} icazÉ™ verilÉ™n dÉ™yÉ™r deyil.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${args[0]} ${name}-dÉ™n çox ola bilmÉ™z.`;\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 * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Fayl formatlarına icazÉ™ verilmir.\";\n }\n return `${sentence(name)} aÅŸağıdakı tipdÉ™ olmalıdır: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${args[0]} ${name}-dÉ™n az ola bilmÉ™z.`;\n }\n return `${sentence(name)} É™n azı ${args[0]} olmalıdır.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†icazÉ™ verilÉ™n ${name} deyil.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} rÉ™qÉ™m olmalıdır.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" vÉ™ ya \")} tÉ™lÉ™b olunur.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} tÉ™lÉ™b olunur.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} ${list(args)} ilÉ™ baÅŸlamır.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `XahiÅŸ edirik, düzgün URL daxil edin.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"SeçilmiÅŸ tarix etibarsızdır.\"\n};\nvar az = { ui: ui2, validation: validation2 };\nvar ui3 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Следващ\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Предишен\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Добавете вÑички ÑтойноÑти\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"ДобавÑне на избрани ÑтойноÑти\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Премахнете вÑички ÑтойноÑти\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Премахване на избраните ÑтойноÑти\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Избери дата\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"ПромÑна на датата\",\n /**\n * Shown when there is something to close\n */\n close: \"Затвори\",\n /**\n * Shown when there is something to open.\n */\n open: \"Отворете\"\n};\nvar validation3 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `ÐœÐ¾Ð»Ñ Ð¿Ñ€Ð¸ÐµÐ¼ÐµÑ‚Ðµ ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} Ñ‚Ñ€Ñбва да е Ñлед ${date(args[0])}.`;\n }\n return `${sentence(name)} Ñ‚Ñ€Ñбва да бъде в бъдещето.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} може да Ñъдържа Ñамо букви.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} може да Ñъдържа Ñамо букви и цифри.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} може да Ñъдържа Ñамо букви и интервали.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} Ñ‚Ñ€Ñбва да Ñъдържа азбучни знаци.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} Ñ‚Ñ€Ñбва да Ñъдържа букви или цифри.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} Ñ‚Ñ€Ñбва да Ñъдържа букви или интервали.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} Ñ‚Ñ€Ñбва да Ñъдържа Ñимвол.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} Ñ‚Ñ€Ñбва да Ñъдържа главни букви.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} Ñ‚Ñ€Ñбва да Ñъдържа малки букви.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} Ñ‚Ñ€Ñбва да Ñъдържа чиÑла.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} Ñ‚Ñ€Ñбва да бъде Ñимвол.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} може да Ñъдържа Ñамо главни букви.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} може да Ñъдържа Ñамо малки букви.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} Ñ‚Ñ€Ñбва да е преди ${date(args[0])}.`;\n }\n return `${sentence(name)} Ñ‚Ñ€Ñбва да бъде в миналото.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Това поле е конфигурирано неправилно и не може да бъде изпратено`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} Ñ‚Ñ€Ñбва да бъде между ${a} и ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} не Ñъвпада.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} е невалидна дата. МолÑ, използвайте формата ${args[0]}`;\n }\n return \"Това поле е конфигурирано неправилно и не може да бъде изпратено\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} Ñ‚Ñ€Ñбва да бъде между ${date(args[0])} и ${date(\n args[1]\n )}.`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"МолÑ, въведете валиден имейл адреÑ.\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} не завършва на ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} е неразрешена ÑтойноÑÑ‚.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} Ñ‚Ñ€Ñбва да има поне един Ñимвол.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} Ñ‚Ñ€Ñбва да бъде по-малко или равно на ${max} Ñимвола.`;\n }\n if (min === max) {\n return `${sentence(name)} Ñ‚Ñ€Ñбва да бъде ${max} Ñимволи дълго.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} Ñ‚Ñ€Ñбва да бъде по-голÑмо или равно на ${min} Ñимвола.`;\n }\n return `${sentence(name)} Ñ‚Ñ€Ñбва да бъде между ${min} и ${max} Ñимвола.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} е неразрешена ÑтойноÑÑ‚.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Ðе може да има повече от ${args[0]} ${name}.`;\n }\n return `${sentence(name)} Ñ‚Ñ€Ñбва да бъде по-малко или равно на ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Ðе Ñа разрешени никакви файлови формати.\";\n }\n return `${sentence(name)} Ñ‚Ñ€Ñбва да бъде от тип: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Ðе може да има по-малко от ${args[0]} ${name}.`;\n }\n return `${sentence(name)} Ñ‚Ñ€Ñбва да бъде поне ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†е неразрешен ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} Ñ‚Ñ€Ñбва да бъде чиÑло.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" или \")} изиÑква Ñе.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} е задължително.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} не започва Ñ ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `МолÑ, въведете валиден URL адреÑ.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Избраната дата е невалидна.\"\n};\nvar bg = { ui: ui3, validation: validation3 };\nvar ui4 = {\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: \"Nažalost, nisu sva polja ispravno popunjena.\",\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: \"Nije odabran nijedan fajl\",\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: \"Pomjeri gore\",\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: \"Pomjeri 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 * Show on buttons that navigate state forward\n */\n next: \"Sljedeći\",\n /**\n * Show on buttons that navigate state backward\n */\n prev: \"Prethodni\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Dodajte sve vrijednosti\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Dodajte odabrane vrijednosti\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Uklonite sve vrijednosti\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Uklonite odabrane vrijednosti\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Odaberite datum\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Promjenite datum\",\n /**\n * Shown when there is something to close\n */\n close: \"Zatvori\",\n /**\n * Shown when there is something to open.\n */\n open: \"Otvoreno\"\n};\nvar validation4 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Molimo prihvatite ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} mora biti poslije ${date(args[0])}.`;\n }\n return `${sentence(name)} mora biti u budućnosti.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} može sadržavati samo abecedne karaktere.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} može sadržavati samo slova i brojeve.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} može sadržavati samo slova i razmake.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} mora sadržavati abecedne karaktere.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} mora sadržavati slova ili brojeve.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} mora sadržavati slova ili razmake.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} mora sadržavati simbol.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} mora sadržavati veliko slovo.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} mora sadržavati malo slovo.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} mora sadržavati brojeve.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} mora biti simbol.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} može sadržavati samo velika slova.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} može sadržavati samo mala slova.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} mora biti prije ${date(args[0])}.`;\n }\n return `${sentence(name)} mora biti u proÅ¡losti.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Ovo polje je pogreÅ¡no konfigurirano i ne može se poslati.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} mora biti izmeÄ‘u ${a} i ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} ne podudara se.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} nije ispravan datum, molimo koristite format ${args[0]}`;\n }\n return \"Ovo polje je pogreÅ¡no konfigurirano i ne može se poslati\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} mora biti izmeÄ‘u ${date(args[0])} i ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"Molimo Vas da unesete validnu email adresu.\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} ne zavrÅ¡ava sa ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} nije dozvoljena vrijednost.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} mora biti najmanje jedan karakter.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} mora biti manje od ili jednako ${max} karaktera.`;\n }\n if (min === max) {\n return `${sentence(name)} treba imati ${max} karaktera.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} mora biti veći od ili jednak ${min} karaktera.`;\n }\n return `${sentence(name)} mora biti izmeÄ‘u ${min} i ${max} karaktera.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} nije dozvoljena vrijednost.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Ne može imati viÅ¡e od ${args[0]} ${name}.`;\n }\n return `${sentence(name)} mora biti manji ili jednak ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Nisu dozvoljeni formati datoteka.\";\n }\n return `${sentence(name)} mora biti tipa: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Ne može imati manje od ${args[0]} ${name}.`;\n }\n return `Mora biti barem ${args[0]} ${name} .`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†nije dozvoljeno ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} mora biti broj.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" ili \")} je obavezno.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} je obavezno.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} ne poÄinje sa ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Unesite važeći link.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Odabrani datum je nevažeći.\"\n};\nvar bs = { ui: ui4, validation: validation4 };\nvar ui5 = {\n /**\n * Shown on a button for adding additional items.\n */\n add: \"Afegir\",\n /**\n * Shown when a button to remove items is visible.\n */\n remove: \"Eliminar\",\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: \"Eliminar tot\",\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: \"Disculpi, no tots els camps estan omplerts correctament.\",\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: \"Cap fitxer triat\",\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: \"Moure amunt\",\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: \"Moure avall\",\n /**\n * Shown when something is actively loading.\n */\n isLoading: \"Carregant...\",\n /**\n * Shown when there is more to load.\n */\n loadMore: \"Carregar més\",\n /**\n * Shown on buttons that navigate state forward\n */\n next: \"Següent\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Anterior\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Afegir tots els valors\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Afegeix els valors seleccionats\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Eliminar tots els valors\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Elimina els valors seleccionats\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Trieu la data\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Canviar data\",\n /**\n * Shown when there is something to close\n */\n close: \"Tancar\",\n /**\n * Shown when there is something to open.\n */\n open: \"Obert\"\n};\nvar validation5 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://docs.formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Si us plau accepti ${name}.`;\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 return `${sentence(name)} ha de ser posterior a ${date(args[0])}.`;\n }\n return `${sentence(name)} ha de succeïr al futur.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://docs.formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} només pot contenir carà cters alfabètics.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://docs.formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} només pot contenir lletres i números.`;\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 return `${sentence(name)} només pot contenir lletres i espais.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} ha de contenir carà cters alfabètics.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} ha de contenir lletres o números.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} ha de contenir lletres o espais.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} ha de contenir sÃmbol.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} ha de contenir majúscules.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} ha de contenir minúscules.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} ha de contenir números.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} ha de ser un sÃmbol.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} només pot contenir lletres majúscules.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} només pot contenir lletres minúscules.`;\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 return `${sentence(name)} ha de ser anterior a ${date(args[0])}.`;\n }\n return `${sentence(name)} ha d'estar al passat.`;\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 return `Aquest camp està configurat incorrectament i no pot ésser enviat.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} ha d'estar entre ${a} i ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://docs.formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} no concorda.`;\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 return `${sentence(name)} no és una data và lida, si us plau empri el format ${args[0]}`;\n }\n return \"Aquest camp està configurat incorrectament i no pot ésser enviat\";\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 return `${sentence(name)} ha d'estar entre ${date(args[0])} i ${date(args[1])}`;\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: `Si us plau, entri una adreça d'e-mail và lida.`,\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 return `${sentence(name)} no acaba amb ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://docs.formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} no és un valor acceptat.`;\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 return `${sentence(name)} ha de tenir com a mÃnim un carà cter.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} ha de ser inferior o igual a ${max} carà cters.`;\n }\n if (min === max) {\n return `${sentence(name)} ha de tenir una longitud de ${max} carà cters.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} ha de ser major que o igual a ${min} carà cters.`;\n }\n return `${sentence(name)} ha d'estar entre ${min} i ${max} carà cters.`;\n },\n /**\n * Value is not a match\n * @see {@link https://docs.formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} no és un valor permès.`;\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 return `No pot tenir més de ${args[0]} ${name}.`;\n }\n return `${sentence(name)} ha de ser menys que o igual a ${args[0]}.`;\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 return \"No hi ha cap format de fitxer acceptat.\";\n }\n return `${sentence(name)} ha de ser del tipus: ${args[0]}`;\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 return `No pot tenir menys de ${args[0]} ${name}.`;\n }\n return `${sentence(name)} ha de ser com a mÃnim ${args[0]}.`;\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 return `“${value}†no s'accepta com a ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://docs.formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} ha de ser un número.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" o \")} es requereix.`;\n },\n /**\n * Required field.\n * @see {@link https://docs.formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} és obligatori.`;\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 return `${sentence(name)} no comença amb ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://docs.formkit.com/essentials/validation#url}\n */\n url() {\n return `Si us plau inclogui una url và lida.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"La data seleccionada no és và lida.\"\n};\nvar ca = { ui: ui5, validation: validation5 };\nvar ui6 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"DalÅ¡Ã\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"PÅ™edchozÃ\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"PÅ™idat vÅ¡echny hodnoty\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"PÅ™idánà vybraných hodnot\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Odstraňte vÅ¡echny hodnoty\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"OdstranÄ›nà vybraných hodnot\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Zvolte datum\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"ZmÄ›nit datum\",\n /**\n * Shown when there is something to close\n */\n close: \"ZavÅ™Ãt\",\n /**\n * Shown when there is something to open.\n */\n open: \"OtevÅ™eno\"\n};\nvar validation6 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `ProsÃm, zaÅ¡krtnÄ›te ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} musà být po ${date(args[0])}.`;\n }\n return `${sentence(name)} musà být v budoucnosti.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} může obsahovat pouze pÃsmena.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} může obsahovat pouze pÃsmena a ÄÃsla.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} musà obsahovat abecednà znaky.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} musà obsahovat pÃsmena nebo ÄÃslice.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} musà obsahovat pÃsmena nebo mezery.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} musà obsahovat symbol.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} musà obsahovat velká pÃsmena.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} musà obsahovat malá pÃsmena.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} musà obsahovat ÄÃsla.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} musà být symbol.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} může obsahovat pouze velká pÃsmena.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} může obsahovat pouze malá pÃsmena.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} musà být pÅ™ed ${date(args[0])}.`;\n }\n return `${sentence(name)} musà být v minulosti.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Toto pole bylo Å¡patnÄ› nakonfigurováno a nemůže být odesláno.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} musà být mezi ${a} a ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} nejsou shodná.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} nenà platné datum, prosÃm, použijte formát ${args[0]}`;\n }\n return \"Toto pole bylo Å¡patnÄ› nakonfigurováno a nemůže být odesláno.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} musà být mezi ${date(args[0])} a ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} nekonÄà na ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} nenà povolená hodnota.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} musà mÃt nejménÄ› jeden znak.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} může mÃt maximálnÄ› ${max} znaků.`;\n }\n if (min === max) {\n return `${sentence(name)} by mÄ›lo být ${max} znaků dlouhé.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} musà obsahovat minimálnÄ› ${min} znaků.`;\n }\n return `${sentence(name)} musà být dlouhé ${min} až ${max} znaků.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} nenà povolená hodnota.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Nelze použÃt vÃce než ${args[0]} ${name}.`;\n }\n return `${sentence(name)} musà mÃt menÅ¡Ã nebo rovno než ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Nejsou nakonfigurovány povolené typy souborů.\";\n }\n return `${sentence(name)} musà být typu: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Nelze mÃt ménÄ› než ${args[0]} ${name}.`;\n }\n return `${sentence(name)} musà být minimálnÄ› ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†nenà dovolená hodnota pro ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} musà být ÄÃslo.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" nebo \")} je vyžadován.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} je povinné.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} nezaÄÃná na ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Zadejte prosÃm platnou adresu URL.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Vybrané datum je neplatné.\"\n};\nvar cs = { ui: ui6, validation: validation6 };\nvar ui7 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Næste\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Forrige\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Tilføj alle værdier\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Tilføj valgte værdier\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Fjern alle værdier\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Fjern valgte værdier\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Vælg dato\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Skift dato\",\n /**\n * Shown when there is something to close\n */\n close: \"Luk\",\n /**\n * Shown when there is something to open.\n */\n open: \"Ã…bn\"\n};\nvar validation7 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Accepter venligst ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} skal være senere end ${date(args[0])}.`;\n }\n return `${sentence(name)} skal være i fremtiden.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} kan kun indeholde bogstaver.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} kan kun indeholde bogstaver og tal.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} kan kun indeholde bogstaver og mellemrum.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} skal indeholde alfabetiske tegn.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} skal indeholde bogstaver eller tal.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} skal indeholde bogstaver eller mellemrum.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} skal indeholde symbol.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} skal indeholde store bogstaver.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} skal indeholde smÃ¥ bogstaver.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} skal indeholde tal.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} skal være et symbol.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} kan kun indeholde store bogstaver.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} kan kun indeholde smÃ¥ bogstaver.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} skal være før ${date(args[0])}.`;\n }\n return `${sentence(name)} skal være før i dag.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Dette felt er ikke konfigureret korrekt og kan derfor ikke blive sendt.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} skal være mellem ${a} og ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} matcher ikke.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} er ikke gyldig, brug venligst formatet ${args[0]}`;\n }\n return \"Dette felt er ikke konfigureret korrekt og kan derfor ikke blive sendt.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} skal være mellem ${date(args[0])} og ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} slutter ikke med ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} er ikke en gyldig værdi.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} skal være pÃ¥ mindst ét tegn.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} skal være pÃ¥ højst ${max} tegn.`;\n }\n if (min === max) {\n return `${sentence(name)} skal være ${max} tegn lange.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} skal være pÃ¥ mindst ${min} tegn.`;\n }\n return `${sentence(name)} skal være pÃ¥ mindst ${min} og højst ${max} tegn.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} er ikke en gyldig værdi.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Kan ikke have flere end ${args[0]} ${name}.`;\n }\n return `${sentence(name)} skal være mindre eller lig med ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Ingen filformater tilladt.\";\n }\n return `${sentence(name)} skal være af filtypen: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Kan ikke have mindre end ${args[0]} ${name}.`;\n }\n return `${sentence(name)} skal være mindst ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†er ikke en tilladt ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} skal være et tal.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" eller \")} er pÃ¥krævet.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} er pÃ¥krævet.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} starter ikke med ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Indtast en gyldig URL.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Den valgte dato er ugyldig.\"\n};\nvar da = { ui: ui7, validation: validation7 };\nvar ui8 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Weiter\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Zurück\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Alle Werte hinzufügen\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Ausgewählte Werte hinzufügen\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Alle Werte entfernen\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Ausgewählte Werte entfernen\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Datum wählen\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Datum ändern\",\n /**\n * Shown when there is something to close\n */\n close: \"Schliessen\",\n /**\n * Shown when there is something to open.\n */\n open: \"Offen\"\n};\nvar validation8 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Bitte ${name} akzeptieren.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} muss nach dem ${date(args[0])} liegen.`;\n }\n return `${sentence(name)} muss in der Zukunft liegen.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} darf nur Buchstaben enthalten.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} darf nur Buchstaben und Zahlen enthalten.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} dürfen nur Buchstaben und Leerzeichen enthalten.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} muss alphabetische Zeichen enthalten.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} muss Buchstaben oder Zahlen enthalten.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} muss Buchstaben oder Leerzeichen enthalten.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} muss ein Symbol enthalten.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} muss Großbuchstaben enthalten.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} muss Kleinbuchstaben enthalten.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} muss Zahlen enthalten.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} muss ein Symbol sein.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} kann nur Großbuchstaben enthalten.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} kann nur Kleinbuchstaben enthalten.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} muss vor dem ${date(args[0])} liegen.`;\n }\n return `${sentence(name)} muss in der Vergangenheit liegen.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Dieses Feld wurde falsch konfiguriert und kann nicht übermittelt werden.`;\n }\n return `${sentence(name)} muss zwischen ${args[0]} und ${args[1]} sein.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} stimmt nicht überein.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} ist kein gültiges Datum im Format ${args[0]}.`;\n }\n return \"Dieses Feld wurde falsch konfiguriert und kann nicht übermittelt werden.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} muss zwischen ${date(args[0])} und ${date(\n args[1]\n )} liegen.`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} endet nicht mit ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} enthält einen ungültigen Wert.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} muss mindestens ein Zeichen enthalten.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} darf maximal ${max} Zeichen enthalten.`;\n }\n if (min === max) {\n return `${sentence(name)} sollte ${max} Zeichen lang sein.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} muss mindestens ${min} Zeichen enthalten.`;\n }\n return `${sentence(name)} muss zwischen ${min} und ${max} Zeichen enthalten.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} enthält einen ungültigen Wert.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Darf maximal ${args[0]} ${name} haben.`;\n }\n return `${sentence(name)} darf maximal ${args[0]} sein.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Keine Dateiformate konfiguriert.\";\n }\n return `${sentence(name)} muss vom Typ ${args[0]} sein.`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Mindestens ${args[0]} ${name} erforderlich.`;\n }\n return `${sentence(name)} muss mindestens ${args[0]} sein.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†ist kein gültiger Wert für ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} muss eine Zahl sein.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" oder \")} ist erforderlich.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} ist erforderlich.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} beginnt nicht mit ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Bitte geben Sie eine gültige URL ein.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Das gewählte Datum ist ungültig.\"\n};\nvar de = { ui: ui8, validation: validation8 };\nvar ui9 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Επόμενη\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Î ÏοηγοÏμενο\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Î Ïοσθήκη όλων των τιμών\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Î Ïοσθήκη επιλεγμÎνων τιμών\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"ΚατάÏγηση όλων των τιμών\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"ΑφαίÏεση επιλεγμÎνων τιμών\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"ΕπιλÎξτε ημεÏομηνία\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Αλλαγή ημεÏομηνίας\",\n /**\n * Shown when there is something to close\n */\n close: \"Κλείσιμο\",\n /**\n * Shown when there is something to open.\n */\n open: \"Ανοιχτό\"\n};\nvar validation9 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `ΠαÏακαλώ αποδεχτείτε το ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} Ï€ÏÎπει να είναι μετά της ${date(args[0])}.`;\n }\n return `${sentence(name)} Ï€ÏÎπει να είναι στο μÎλλον.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} μποÏεί να πεÏιÎχει μόνο αλφαβητικοÏÏ‚ χαÏακτήÏες.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} μποÏεί να πεÏιÎχει μόνο γÏάμματα και αÏιθμοÏÏ‚.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} μποÏεί να πεÏιÎχει μόνο γÏάμματα και κενά.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `Το ${sentence(name)} Ï€ÏÎπει να πεÏιÎχει αλφαβητικοÏÏ‚ χαÏακτήÏες.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `Το ${sentence(name)} Ï€ÏÎπει να πεÏιÎχει γÏάμματα ή αÏιθμοÏÏ‚.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} Ï€ÏÎπει να πεÏιÎχει γÏάμματα ή κενά.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `Το ${sentence(name)} Ï€ÏÎπει να πεÏιÎχει το σÏμβολο.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `Το ${sentence(name)} Ï€ÏÎπει να πεÏιÎχει κεφαλαία γÏάμματα.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `Το ${sentence(name)} Ï€ÏÎπει να πεÏιÎχει πεζά γÏάμματα.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `Το ${sentence(name)} Ï€ÏÎπει να πεÏιÎχει αÏιθμοÏÏ‚.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `Το ${sentence(name)} Ï€ÏÎπει να είναι Îνα σÏμβολο.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `Το ${sentence(name)} μποÏεί να πεÏιÎχει μόνο κεφαλαία γÏάμματα.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `Το ${sentence(name)} μποÏεί να πεÏιÎχει μόνο πεζά γÏάμματα.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} Ï€ÏÎπει να είναι Ï€Ïιν της ${date(args[0])}.`;\n }\n return `${sentence(name)} Ï€ÏÎπει να είναι στο παÏελθόν.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Αυτό το πεδίο Îχει Ïυθμιστεί λανθασμÎνα και δεν μποÏεί να υποβληθεί.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} Ï€ÏÎπει να είναι Î¼ÎµÏ„Î±Î¾Ï ${a} και ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} δεν ταιÏιάζει.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(\n name\n )} δεν είναι ÎγυÏη ημεÏομηνία, παÏακαλώ ακολουθήστε την διαμόÏφωση ${args[0]}`;\n }\n return \"Αυτό το πεδίο Îχει Ïυθμιστεί λανθασμÎνα και δεν μποÏεί να υποβληθεί\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} Ï€ÏÎπει να είναι Î¼ÎµÏ„Î±Î¾Ï ${date(args[0])} και ${date(\n args[1]\n )}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"ΠαÏακαλώ πληκτÏολογήστε μια ÎγκυÏη email διεÏθυνση. \",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} δεν καταλήγει με ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} δεν είναι μια επιτÏεπτή τιμή.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} Ï€ÏÎπει να είναι τουλάχιστον ενός χαÏακτήÏα.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} Ï€ÏÎπει να είναι λιγότεÏοι ή ίσοι με ${max} χαÏακτήÏες.`;\n }\n if (min === max) {\n return `Το ${sentence(name)} θα Ï€ÏÎπει να Îχει μήκος ${max} χαÏακτήÏες.`;\n }\n if (min && max === Infinity) {\n return `${sentence(\n name\n )} Ï€ÏÎπει να είναι πεÏισσότεÏοι ή ίσοι με ${min} χαÏακτήÏες.`;\n }\n return `${sentence(name)} Ï€ÏÎπει να είναι Î¼ÎµÏ„Î±Î¾Ï ${min} και ${max} χαÏακτήÏες.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} δεν είναι μια επιτÏεπτή τιμή.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Δεν μποÏεί να Îχει παÏαπάνω από ${args[0]} ${name}.`;\n }\n return `${sentence(name)} Ï€ÏÎπει αν είναι λιγότεÏο ή ίσο με το ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Δεν επιτÏÎπονται αÏχεία.\";\n }\n return `${sentence(name)} Ï€ÏÎπει να είναι Ï„Ïπου: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Δεν μποÏεί να είναι λιγότεÏο από ${args[0]} ${name}.`;\n }\n return `${sentence(name)} Ï€ÏÎπει να είναι τουλάχιστον ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†δεν είναι μια επιτÏεπτή ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} Ï€ÏÎπει να είναι αÏιθμός.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" ή \")} απαιτείται.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} είναι υποχÏεωτικό.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} δεν αÏχίζει με ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `ΠαÏακαλώ εισάγετε Îνα ÎγκυÏο URL.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Η επιλεγμÎνη ημεÏομηνία δεν είναι ÎγκυÏη.\"\n};\nvar el = { ui: ui9, validation: validation9 };\nvar ui10 = {\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 * Show on buttons that navigate state forward\n */\n next: \"Next\",\n /**\n * Show on buttons that navigate state backward\n */\n prev: \"Previous\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Add all values\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Add selected values\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Remove all values\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Remove selected values\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Choose date\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Change date\",\n /**\n * Shown above error summaries when someone attempts to submit a form with\n * errors and the developer has implemented `<FormKitSummary />`.\n */\n summaryHeader: \"There were errors in your form.\",\n /*\n * Shown when there is something to close\n */\n close: \"Close\",\n /**\n * Shown when there is something to open.\n */\n open: \"Open\"\n};\nvar validation10 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Please accept the ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} must be after ${date(args[0])}.`;\n }\n return `${sentence(name)} must be in the future.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} can only contain alphabetical characters.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} can only contain letters and numbers.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} can only contain letters and spaces.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} must contain alphabetical characters.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} must contain letters or numbers.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} must contain letters or spaces.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} must contain a symbol.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} must contain an uppercase letter.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} must contain a lowercase letter.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} must contain numbers.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} must be a symbol.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} can only contain uppercase letters.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name, args }) {\n let postfix = \"\";\n if (Array.isArray(args) && args.length) {\n if (args[0] === \"allow_non_alpha\")\n postfix = \", numbers and symbols\";\n if (args[0] === \"allow_numeric\")\n postfix = \" and numbers\";\n if (args[0] === \"allow_numeric_dashes\")\n postfix = \", numbers and dashes\";\n }\n return `${sentence(name)} can only contain lowercase letters${postfix}.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} must be before ${date(args[0])}.`;\n }\n return `${sentence(name)} must be in the past.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `This field was configured incorrectly and can’t be submitted.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} must be between ${a} and ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} does not match.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} is not a valid date, please use the format ${args[0]}`;\n }\n return \"This field was configured incorrectly and can’t be submitted\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} must be between ${date(args[0])} and ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} doesn’t end with ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} is not an allowed value.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} must be at least one character.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} must be less than or equal to ${max} characters.`;\n }\n if (min === max) {\n return `${sentence(name)} should be ${max} characters long.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} must be greater than or equal to ${min} characters.`;\n }\n return `${sentence(name)} must be between ${min} and ${max} characters.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} is not an allowed value.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Cannot have more than ${args[0]} ${name}.`;\n }\n return `${sentence(name)} must be no more than ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"No file formats allowed.\";\n }\n return `${sentence(name)} must be of the type: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Cannot have fewer than ${args[0]} ${name}.`;\n }\n return `${sentence(name)} must be at least ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†is not an allowed ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} must be a number.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" or \")} is required.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} is required.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} doesn’t start with ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Please enter a valid URL.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"The selected date is invalid.\"\n};\nvar en = { ui: ui10, validation: validation10 };\nvar ui11 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Próximo\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Anterior\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Añadir todos los valores\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Añadir valores seleccionados\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Eliminar todos los valores\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Eliminar los valores seleccionados\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Elige fecha\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Cambiar fecha\",\n /**\n * Shown when there is something to close\n */\n close: \"Cerrar\",\n /**\n * Shown when there is something to open.\n */\n open: \"Abrir\"\n};\nvar validation11 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Acepte el ${name} por favor.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} debe ser posterior a ${date(args[0])}.`;\n }\n return `${sentence(name)} debe ser una fecha futura.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} debe contener solo caractéres alfabéticos.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} debe ser alfanumérico.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} espacios alfa solo pueden contener letras y espacios.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} debe contener caracteres alfabéticos.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} debe contener letras o números.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} debe contener letras o espacios.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} debe contener un sÃmbolo.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} debe estar en mayúsculas.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} debe contener minúsculas.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} debe contener números.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} debe ser un sÃmbolo.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} solo puede contener letras mayúsculas.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} solo puede contener letras minúsculas.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} debe ser anterior a ${date(args[0])}.`;\n }\n return `${sentence(name)} debe ser una fecha pasada.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `El campo no fue completado correctamente y no puede ser enviado.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} debe estar entre ${a} y ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} no coincide.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} no es una fecha válida, por favor utilice el formato ${args[0]}`;\n }\n return \"El campo no fue completado correctamente y no puede ser enviado.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} debe estar entre ${date(args[0])} y ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} no termina con ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} no es un valor permitido.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} debe tener al menos una letra.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} debe tener como máximo ${max} caractéres.`;\n }\n if (min === max) {\n return `${sentence(name)} debe tener ${max} caracteres.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} debe tener como mÃnimo ${min} caractéres.`;\n }\n return `${sentence(name)} debe tener entre ${min} y ${max} caractéres.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} no es un valor permitido.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `No puede tener más de ${args[0]} ${name}.`;\n }\n return `${sentence(name)} debe ser menor o igual a ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"No existen formatos de archivos permitidos.\";\n }\n return `${sentence(name)} debe ser del tipo: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `No puede tener menos de ${args[0]} ${name}.`;\n }\n return `${sentence(name)} debe ser de al menos ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†no es un valor permitido de ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} debe ser un número.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" o \")} se requiere estar.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} es requerido.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} debe comenzar con ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Introduce una URL válida.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"La fecha seleccionada no es válida.\"\n};\nvar es = { ui: ui11, validation: validation11 };\nvar ui12 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"بعدی\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"قبلی\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"تمام مقادیر را اضاÙÙ‡ کنید\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"مقادیر انتخاب شده را اضاÙÙ‡ کنید\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"تمام مقادیر را Øذ٠کنید\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Øذ٠مقادیر انتخاب شده\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"تاریخ را انتخاب کنید\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"تغییر تاریخ\",\n /**\n * Shown when there is something to close\n */\n close: \"بستن\",\n /**\n * Shown when there is something to open.\n */\n open: \"باز کردن\"\n};\nvar validation12 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `لطÙاً ${name} را بپذیرید.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} باید بعد از تاریخ ${date(args[0])} باشد.`;\n }\n return `${sentence(name)} باید مربوط به آینده باشد.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} Ùقط میتواند شامل Øرو٠الÙبا باشد.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} Ùقط میتواند شامل Øرو٠و اعداد باشد.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} Ùقط Ù…ÛŒ تواند شامل Øرو٠و Ùاصله باشد.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} باید Øاوی Øرو٠الÙبا باشد.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} باید Øاوی Øرو٠یا اعداد باشد.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} باید Øاوی Øرو٠یا Ùاصله باشد.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} باید Øاوی نماد باشد.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} باید دارای Øرو٠بزرگ باشد.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} باید Øاوی Øرو٠کوچک باشد.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} باید Øاوی اعداد باشد.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} باید یک نماد باشد.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} تنها می‌تواند شامل Øرو٠بزرگ باشد.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} تنها می‌تواند شامل Øرو٠کوچک باشد.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} باید قبل از تاریخ ${date(args[0])} باشد.`;\n }\n return `${sentence(name)} باید مربوط به گذشته باشد.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `این Ùیلد به اشتباه پیکربندی شده است Ùˆ قابل ارسال نیست`;\n }\n return `${sentence(name)} باید بین ${args[0]} Ùˆ ${args[1]} باشد.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} مطابقت ندارد.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} تاریخ معتبری نیست، لطÙاً از قالب ${args[0]} استÙاده کنید\n`;\n }\n return \"این Ùیلد به اشتباه پیکربندی شده است Ùˆ قابل ارسال نیست\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} باید بین ${date(args[0])} Ùˆ ${date(args[1])} باشد.`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"لطÙا آدرس ایمیل معتبر وارد کنید.\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} باید به ${list(args)} ختم شود.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} مجاز نیست.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} باید Øداقل یک کاراکتر باشد.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} باید کمتر یا برابر با ${max} کاراکتر باشد.`;\n }\n if (min === max) {\n return `${sentence(name)} باید ${max} کاراکتر طولانی باشد.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} باید بزرگتر یا برابر با ${min} کاراکتر باشد.`;\n }\n return `${sentence(name)} باید بین ${min} Ùˆ ${max} کاراکتر باشد.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} مجاز نیست.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${name} نمی تواند بیش از ${args[0]} باشد.`;\n }\n return `${sentence(name)} باید کمتر یا برابر با ${args[0]} باشد.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Ùرمت Ùایل مجاز نیست.\";\n }\n return `${sentence(name)} باید از این نوع باشد: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${name} نمی تواند کمتر از ${args[0]} باشد.\n`;\n }\n return `${sentence(name)} باید Øداقل ${args[0]} باشد.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `\"${value}\" یک ${name} مجاز نیست.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} باید عدد باشد.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" یا \")} مورد نیاز است.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `پر کردن ${sentence(name)} اجباری است.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} باید با ${list(args)} شروع شود.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `لطÙا یک URL معتبر وارد کنید.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"تاریخ انتخاب شده نامعتبر است\"\n};\nvar fa = { ui: ui12, validation: validation12 };\nvar ui13 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Seuraava\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Edellinen\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Lisää kaikki arvot\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Lisää valitut arvot\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Poista kaikki arvot\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Poista valitut arvot\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Valitse päivämäärä\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Vaihda päivämäärä\",\n /**\n * Shown when there is something to close\n */\n close: \"Sulje\",\n /**\n * Shown when there is something to open.\n */\n open: \"Avoinna\"\n};\nvar validation13 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Ole hyvä ja hyväksy ${name}`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} tulee olla ${date(args[0])} jälkeen.`;\n }\n return `${sentence(name)} on oltava tulevaisuudessa.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} saa sisältää vain kirjaimia.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} saa sisältää vain kirjaimia ja numeroita.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} voivat sisältää vain kirjaimia ja välilyöntejä.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} on sisällettävä aakkoselliset merkit.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} täytyy sisältää kirjaimia tai numeroita.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} täytyy sisältää kirjaimia tai välilyöntejä.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} täytyy sisältää symboli.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} täytyy sisältää isoja kirjaimia.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} täytyy sisältää pieniä kirjaimia.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} täytyy sisältää numeroita.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} on oltava symboli.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} voi sisältää vain isoja kirjaimia.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} voi sisältää vain pieniä kirjaimia.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} tulee olla ennen: ${date(args[0])}.`;\n }\n return `${sentence(name)} on oltava menneisyydessä.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Tämä kenttä on täytetty virheellisesti joten sitä ei voitu lähettää.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} on oltava välillä ${a} - ${b} `;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} ei täsmää.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(\n name\n )} ei ole validi päivämäärä, ole hyvä ja syötä muodossa: ${args[0]}`;\n }\n return \"Tämä kenttä on täytetty virheellisesti joten sitä ei voitu lähettää.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} on oltava välillä ${date(args[0])} - ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} tulee päättyä ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} ei ole sallittu vaihtoehto.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} on oltava vähintään yksi merkki.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} on oltava ${max} tai alle merkkiä.`;\n }\n if (min === max) {\n return `${sentence(name)} pitäisi olla ${max} merkkiä pitkä.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} on oltava vähintään ${min} merkkiä.`;\n }\n return `${sentence(name)} on oltava vähintään ${min}, enintään ${max} merkkiä.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} ei ole sallittu arvo.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Valitse enintään ${args[0]} ${name} vaihtoehtoa.`;\n }\n return `${sentence(name)} on oltava ${args[0]} tai alle.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Tiedostoja ei sallita.\";\n }\n return `${sentence(name)} tulee olla ${args[0]}-tiedostotyyppiä.`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Valitse vähintään ${args[0]} ${name} vaihtoehtoa.`;\n }\n return `${sentence(name)} tulee olla ${args[0]} tai suurempi.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†ei ole sallittu ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `Kentän ${sentence(name)} tulee olla numero.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" tai \")} vaaditaan.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} vaaditaan.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} on alettava ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Anna kelvollinen URL-osoite.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Valittu päivämäärä on virheellinen.\"\n};\nvar fi = { ui: ui13, validation: validation13 };\nvar ui14 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Suivant\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Précédent\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Ajouter toutes les valeurs\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Ajouter les valeurs sélectionnées\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Supprimer toutes les valeurs\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Supprimer les valeurs sélectionnées\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Choisissez la date\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Modifier la date\",\n /**\n * Shown when there is something to close\n */\n close: \"Fermer\",\n /**\n * Shown when there is something to open.\n */\n open: \"Ouvrir\"\n};\nvar validation14 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Veuillez accepter le ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} doit être postérieure au ${date(args[0])}.`;\n }\n return `${sentence(name)} doit être dans le futur.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} ne peut contenir que des caractères alphabétiques.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} ne peut contenir que des lettres et des chiffres.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} ne peuvent contenir que des lettres et des espaces.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} doit contenir des caractères alphabétiques.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} doit contenir au moins un lettre ou nombre.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} doit contenir des lettres ou des espaces.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} doit contenir un symbole.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} doit contenir au moins une majuscule.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} doit contenir au moins une minuscule.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} doit contenir des chiffres.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} doit être un symbole.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} ne peuvent contenir que des majuscules.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} ne peut contenir que des lettres minuscules.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} doit être antérieure au ${date(args[0])}.`;\n }\n return `${sentence(name)} doit être dans le passé.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Ce champ a été configuré de manière incorrecte et ne peut pas être soumis.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} doit être comprise entre ${a} et ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} ne correspond pas.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(\n name\n )} n'est pas une date valide, veuillez utiliser le format ${args[0]}`;\n }\n return \"Ce champ a été configuré de manière incorrecte et ne peut pas être soumis.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} doit être comprise entre ${date(args[0])} et ${date(\n args[1]\n )}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} ne se termine pas par ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} n'est pas une valeur autorisée.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} doit comporter au moins un caractère.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} doit être inférieur ou égal à ${max} caractères.`;\n }\n if (min === max) {\n return `${sentence(name)} doit contenir ${max} caractères.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} doit être supérieur ou égal à ${min} caractères.`;\n }\n return `${sentence(name)} doit être comprise entre ${min} et ${max} caractères.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} n'est pas une valeur autorisée.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Ne peut pas avoir plus de ${args[0]} ${name}.`;\n }\n return `${sentence(name)} doit être inférieur ou égal à ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Aucun format de fichier n’est autorisé\";\n }\n return `${sentence(name)} doit être du type: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Ne peut pas avoir moins de ${args[0]} ${name}.`;\n }\n return `${sentence(name)} doit être au moins de ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†n'est pas un ${name} autorisé.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} doit être un nombre.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" ou \")} est requis.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} est requis.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} ne commence pas par ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Entrez une URL valide.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: `La date sélectionnée n'est pas valide.`\n};\nvar fr = { ui: ui14, validation: validation14 };\nvar ui15 = {\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 * Shown on buttons that move fields up in a list.\n */\n moveUp: \"Gean omheech\",\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: \"Nei ûnderen\",\n /**\n * Shown when something is actively loading.\n */\n isLoading: \"Lade…\",\n /**\n * Shown when there is more to load.\n */\n loadMore: \"Mear lade\",\n /**\n * Show on buttons that navigate state forward\n */\n next: \"Folgende\",\n /**\n * Show on buttons that navigate state backward\n */\n prev: \"Foarige\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Foegje alle wearden ta\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Foegje selektearre wearden ta\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Fuortsmite alle wearden\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Fuortsmite selektearre wearden\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Kies datum\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Feroarje datum\"\n};\nvar validation15 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Akseptearje de ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} moat nei ${date(args[0])} wêze.`;\n }\n return `${sentence(name)} moat yn de takomst lizze.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} mei allinne alfabetyske tekens befetsje.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} mei allinne letters en sifers befetsje.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} mei allinne letters en spaasjes befetsje.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} must contain alphabetical characters.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} must contain letters and numbers.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} must contain letters and spaces.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} must contain symbol.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} must contain uppercase.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} must contain lowercase.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} must contain number.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} can only contain symbol.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} can only contain uppercase.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} can only contain lowercase.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} moat foar ${date(args[0])} falle.`;\n }\n return `${sentence(name)} moat yn it ferline wêze.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Dit fjild is ferkeard konfigurearre en kin net ferstjoerd wurde.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} moat tusken ${a} en ${b} lizze.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} komt net oerien.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} is gjin jildige datum, brûk de notaasje ${args[0]}`;\n }\n return \"Dit fjild is ferkeard konfigurearre en kin net ferstjoerd wurde\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} moat tusken ${date(args[0])} en ${date(args[1])} lizze`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} einiget net mei ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} is gjin tastiene wearde.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} moat minimaal ien teken wêze.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} moat lytser wêze as of gelyk wêze oan ${max} tekens.`;\n }\n if (min === max) {\n return `${sentence(name)} moat ${max} tekens lang wêze.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} moat grutter wêze as of gelyk wêze oan ${min} tekens.`;\n }\n return `${sentence(name)} moat tusken de ${min} en ${max} tekens befetsje.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} is gjin tastiene wearde.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Mei net mear as ${args[0]} ${name} hawwe.`;\n }\n return `${sentence(name)} moat lytser wêze as of gelyk wêze oan ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Gjin bestânsnotaasjes tastien.\";\n }\n return `${sentence(name)} moat fan it type: ${args[0]} wêze`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Mei net minder as ${args[0]} ${name} hawwe.`;\n }\n return `${sentence(name)} moat minimaal ${args[0]} wêze.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `\"${value}\" is gjin tastiene ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} moat in getal wêze.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" of \")} is ferplichte.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} is ferplicht.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} begjint net mei ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Doch der in jildige url by.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"De selektearre datum is ûnjildich.\"\n};\nvar fy = { ui: ui15, validation: validation15 };\nvar ui16 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"הב×\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"הקוד×\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"הוסף ×ת כל הערכי×\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"הוספת ×¢×¨×›×™× × ×‘×—×¨×™×\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"הסר ×ת כל הערכי×\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"הסר ×¢×¨×›×™× × ×‘×—×¨×™×\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"בחר ת×ריך\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"×©×™× ×•×™ ת×ריך\",\n /**\n * Shown when there is something to close\n */\n close: \"סגור\",\n /**\n * Shown when there is something to open.\n */\n open: \"פתוח\"\n};\nvar validation16 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `×× × ×שר ×ת ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} חייב להיות ×חרי ${date(args[0])}.`;\n }\n return `${sentence(name)} חייב להיות בעתיד.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} חייב להכיל ×ותיות ×לפבת.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} יכול להכיל רק ×ž×¡×¤×¨×™× ×•×ותיות.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} יכול להכיל רק ×ותיות ורווחי×.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} חייב להכיל ×ª×•×•×™× ×לפביתיי×.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} חייב להכיל ×ותיות ×ו מספרי×.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} חייב להכיל ×ותיות ×ו רווחי×.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} חייב להכיל סמל.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} חייב להכיל ×ותיות רישיות.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} חייב להכיל ×ותיות ×§×˜× ×•×ª.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} חייב להכיל מספרי×.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} חייב להיות סמל.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} יכול להכיל ×ותיות רישיות בלבד.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} יכול להכיל רק ×ותיות ×§×˜× ×•×ª.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} חייב להיות ×œ×¤× ×™ ${date(args[0])}.`;\n }\n return `${sentence(name)} חייב להיות בעבר`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `שדה ×–×” ×œ× ×”×•×’×“×¨ כר×וי ×•×œ× ×™×›×•×œ להישלח.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} חייב להיות בין ${a} ו- ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} ×œ× ×ž×ª××™×.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} ×”×•× ×œ× ×ª×ריך תקין, ×× × ×”×©×ª×ž×© בפורמט ${args[0]}`;\n }\n return \"שדה ×–×” ×œ× ×”×•×’×“×¨ כר×וי ×•×œ× ×™×›×•×œ להישלח.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} חייב להיות בין ${date(args[0])} ו- ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"×× × ×”×§×œ×“ ×ימייל תקין.\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} ×œ× ×ž×¡×ª×™×™× ×‘- ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} ×”×•× ×œ× ×¢×¨×š מורשה.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} חייב להיות לפחות תו ×חד.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} חייב להיות פחות ×ו שווה ל- ${max} תווי×.`;\n }\n if (min === max) {\n return `${sentence(name)} צריך להיות ${max} ×ª×•×•×™× ×רוכי×.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} חייב להיות גדול ×ו שווה ל- ${min} תווי×.`;\n }\n return `${sentence(name)} חייב להיות בין ${min} ו- ${max} תווי×.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} ×”×•× ×œ× ×¢×¨×š תקין.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${name} ×œ× ×™×›×•×œ להיות ×¢× ×™×•×ª×¨ מ- ${args[0]}.`;\n }\n return `${sentence(name)} חייב להיות פחות ×ו שווה ל- ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"פורמט הקובץ ×œ× ×ž×•×¨×©×”.\";\n }\n return `${sentence(name)} חייב להיות מסוג: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${name} ×œ× ×™×›×•×œ להיות ×¢× ×¤×—×•×ª מ- ${args[0]}.`;\n }\n return `${sentence(name)} חייב להיות לפחות ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}â€ ×œ× ×ž×ª××™× ×œ- ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} חייב להיות מספר.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" ×ו \")} × ×“×¨×©.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} ×”×™× ×• חובה.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} ×œ× ×ž×ª×—×™×œ ב- ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `הזן כתובת URL חוקית.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"הת×ריך ×©× ×‘×—×¨ ××™× ×• חוקי.\"\n};\nvar he = { ui: ui16, validation: validation16 };\nvar ui17 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Sljedeći\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"prijaÅ¡nji\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Dodajte sve vrijednosti\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Dodavanje odabranih vrijednosti\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Ukloni sve vrijednosti\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Ukloni odabrane vrijednosti\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Odaberite datum\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Promijeni datum\",\n /**\n * Shown when there is something to close\n */\n close: \"Zatvoriti\",\n /**\n * Shown when there is something to open.\n */\n open: \"Otvori\"\n};\nvar validation17 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Potrebno je potvrditi ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} mora biti u periodu poslije ${date(args[0])}.`;\n }\n return `${sentence(name)} mora biti u budućnosti.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} mora sadržavati samo slova.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} mora sadržavati slova i brojeve.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} mogu sadržavati samo slova i razmake..`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} mora sadržavati abecedne znakove.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} mora sadržavati slova ili brojeve.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} mora sadržavati slova ili razmake.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} mora sadržavati simbol.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} mora sadržavati velika slova.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} mora sadržavati mala slova.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} mora sadržavati brojeve.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} mora biti simbol.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} može sadržavati samo velika slova.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} može sadržavati samo mala slova.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} mora biti prije ${date(args[0])}.`;\n }\n return `${sentence(name)} mora biti u proÅ¡losti.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Format sadržaja nije ispravan i ne može biti predan.`;\n }\n return `${sentence(name)} mora biti izmeÄ‘u ${args[0]} i ${args[1]}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} ne odgovara zadanoj vrijednosti.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(\n name\n )} nije ispravan format datuma. Molimo koristite sljedeći format: ${args[0]}`;\n }\n return \"Ovo polje nije ispravno postavljeno i ne može biti predano.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} mora biti vrijednost izmeÄ‘u ${date(args[0])} i ${date(\n args[1]\n )}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} ne zavrÅ¡ava s ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} nije dopuÅ¡tena vrijednost.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} mora sadržavati barem jedan znak.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} mora imati ${max} ili manje znakova.`;\n }\n if (min === max) {\n return `${sentence(name)} trebao bi biti dugaÄak ${max} znakova.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} mora imati barem ${min} znakova.`;\n }\n return `Broj znakova za polje ${sentence(name)} mora biti izmeÄ‘u ${min} i ${max}.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} nije dozvoljena vrijednost.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Ne smije imati viÅ¡e od ${args[0]} ${name} polja.`;\n }\n return `${sentence(name)} mora imati vrijednost manju ili jednaku ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Format datoteke nije dozvoljen.\";\n }\n return `Format datoteke na polju ${sentence(name)} mora odgovarati: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Broj upisanih vrijednosti na polju ${name} mora biti barem ${args[0]}.`;\n }\n return `${sentence(name)} mora biti barem ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†nije dozvoljena vrijednost na polju ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} mora biti broj.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" ili \")} je potreban.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} je obavezno.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} ne poÄinje s ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Unesite valjanu URL adresu.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Odabrani datum je nevažeći.\"\n};\nvar hr = { ui: ui17, validation: validation17 };\nvar ui18 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"KövetkezÅ‘\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"ElÅ‘zÅ‘\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Adja hozzá az összes értéket\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Kiválasztott értékek hozzáadása\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"TávolÃtsa el az összes értéket\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"A kiválasztott értékek eltávolÃtása\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Válassza ki a dátumot\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Dátum módosÃtása\",\n /**\n * Shown when there is something to close\n */\n close: \"Bezárás\",\n /**\n * Shown when there is something to open.\n */\n open: \"Nyitott\"\n};\nvar validation18 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Fogadja el a ${name} mezÅ‘t.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} mezÅ‘nek ${date(args[0])} után kell lennie.`;\n }\n return `${sentence(name)} mezÅ‘nek a jövÅ‘ben kell lennie.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} csak alfanumerikus karaktereket tartalmazhat.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} csak betűket és számokat tartalmazhat.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} csak betűket és szóközöket tartalmazhat.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `A ${sentence(name)} betűrendes karaktereket kell tartalmaznia.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `A ${sentence(name)} betűket vagy számokat kell tartalmaznia.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `A ${sentence(name)} betűket vagy szóközöket kell tartalmaznia.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `A ${sentence(name)} szimbólumot kell tartalmaznia.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `A ${sentence(name)} nagybetűt kell tartalmaznia.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `A ${sentence(name)} kisbetűt kell tartalmaznia.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `A ${sentence(name)} számot kell tartalmaznia.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `A ${sentence(name)} szimbólumnak kell lennie.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `A ${sentence(name)} csak nagybetűket tartalmazhat.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `A ${sentence(name)} csak kisbetűket tartalmazhat.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} mezÅ‘nek ${date(args[0])} elÅ‘tt kell lennie.`;\n }\n return `${sentence(name)} mezÅ‘nek a múltban kell lennie.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Ez a mezÅ‘ hibásan lett konfigurálva, Ãgy nem lehet beküldeni.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `A ${sentence(name)} mezÅ‘nek ${a} és ${b} között kell lennie.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} nem egyezik.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} nem érvényes dátum, ${args[0]} formátumot használj`;\n }\n return \"Ez a mezÅ‘ hibásan lett konfigurálva, Ãgy nem lehet beküldeni.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} mezÅ‘nek ${date(args[0])} és ${args[1]} között kell lennie`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} mezÅ‘ nem a kijelölt (${list(args)}) módon ér véget.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} nem engedélyezett érték.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} mezÅ‘nek legalább egy karakteresnek kell lennie.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} mezÅ‘nek maximum ${max} karakteresnek kell lennie.`;\n }\n if (min === max) {\n return `${sentence(name)} ${max} karakter hosszúnak kell lennie.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} mezÅ‘nek minimum ${min} karakteresnek kell lennie.`;\n }\n return `${sentence(name)} mezÅ‘nek ${min} és ${max} karakter között kell lennie.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} nem engedélyezett érték.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Nem lehet több mint ${args[0]} ${name}.`;\n }\n return `${sentence(name)} nem lehet nagyobb, mint ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Nincsenek támogatott fájlformátumok.\";\n }\n return `${sentence(name)}-nak/nek a következÅ‘nek kell lennie: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Nem lehet kevesebb, mint ${args[0]} ${name}.`;\n }\n return `${sentence(name)}-nak/nek minimum ${args[0]}-nak/nek kell lennie.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `\"${value}\" nem engedélyezett ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} mezÅ‘nek számnak kell lennie.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" vagy \")} szükséges.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} mezÅ‘ kötelezÅ‘.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} nem a következÅ‘vel kezdÅ‘dik: ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Kérjük, adjon meg egy érvényes URL-t.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"A kiválasztott dátum érvénytelen.\"\n};\nvar hu = { ui: ui18, validation: validation18 };\nvar ui19 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Berikutnya\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Sebelumnya\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Tambahkan semua nilai\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Tambahkan nilai yang dipilih\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Hapus semua nilai\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Hapus nilai yang dipilih\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Pilih tanggal\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Ubah tanggal\",\n /**\n * Shown when there is something to close\n */\n close: \"Tutup\",\n /**\n * Shown when there is something to open.\n */\n open: \"Buka\"\n};\nvar validation19 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Tolong terima kolom ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} nilainya harus lebih dari waktu ${date(args[0])}.`;\n }\n return `${sentence(name)} harus berisi waktu di masa depan.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} hanya bisa diisi huruf alfabet.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} hanya bisa diisi huruf dan angka.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} hanya boleh berisi huruf dan spasi..`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} harus berisi karakter abjad.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} harus mengandung huruf atau angka.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} harus berisi huruf atau spasi.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} harus berisi simbol.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} harus berisi huruf besar.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} harus berisi huruf kecil.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} harus berisi angka.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} harus berupa simbol.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} hanya dapat berisi huruf besar.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} hanya dapat berisi huruf kecil.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} nilainya harus kurang dari waktu ${date(args[0])}.`;\n }\n return `${sentence(name)} harus berisi waktu yang sudah lampau.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Kolom ini tidak diisi dengan benar sehingga tidak bisa dikirim`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} harus bernilai diantara ${a} dan ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} nilainya tidak cocok.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} waktu tidak cocok, mohon gunakan format waktu ${args[0]}`;\n }\n return \"Kolom ini tidak diisi dengan benar sehingga tidak bisa dikirim\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} harus diantara waktu ${date(args[0])} dan waktu ${date(\n args[1]\n )}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} nilainya tidak berakhiran dengan ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} adalah nilai yang tidak diizinkan.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} nilainya setidaknya berisi satu karakter.`;\n }\n if (min == 0 && max) {\n return `${sentence(\n name\n )} jumlah karakternya harus kurang dari atau sama dengan ${max} karakter.`;\n }\n if (min === max) {\n return `${sentence(name)} harus ${max} karakter panjang.`;\n }\n if (min && max === Infinity) {\n return `${sentence(\n name\n )} jumlah karakternya harus lebih dari atau sama dengan ${min} karakter.`;\n }\n return `${sentence(\n name\n )} jumlah karakternya hanya bisa antara ${min} dan ${max} karakter.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} nilainya tidak diizinkan.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Tidak bisa memiliki lebih dari ${args[0]} ${name}.`;\n }\n return `${sentence(name)} harus lebih kecil atau sama dengan ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Format file tidak diizinkan\";\n }\n return `${sentence(name)} hanya bisa bertipe: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Tidak boleh kurang dari ${args[0]} ${name}.`;\n }\n return `${sentence(name)} setidaknya harus berisi ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†adalah nilai yang tidak diperbolehkan untuk ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} harus berupa angka.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" atau \")} diperlukan`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} harus diisi.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} tidak dimulai dengan ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Harap masukkan URL yang valid.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Tanggal yang dipilih tidak valid.\"\n};\nvar id = { ui: ui19, validation: validation19 };\nvar ui20 = {\n /**\n * Shown on a button for adding additional items.\n */\n add: \"Bæta við\",\n /**\n * Shown when a button to remove items is visible.\n */\n remove: \"Fjarlægja\",\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: \"Fjarlægja allt\",\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: \"Þvà miður, það er ekki búið að fylla rétt inn à alla reiti.\",\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: \"Senda\",\n /**\n * Shown when no files are selected.\n */\n noFiles: \"Engin skrá valin\",\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: \"Færa upp\",\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: \"Færa niður\",\n /**\n * Shown when something is actively loading.\n */\n isLoading: \"Hleðsla...\",\n /**\n * Shown when there is more to load.\n */\n loadMore: \"Sækja meira\",\n /**\n * Show on buttons that navigate state forward\n */\n next: \"Ãfram\",\n /**\n * Show on buttons that navigate state backward\n */\n prev: \"Til baka\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Bæta við öllum gildum\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Bæta við völdum gildum\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Fjarlægja öll gildi\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Fjarlægja valin gildi\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Velja dagsetningu\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Breyta dagsetningu\",\n /**\n * Shown when there is something to close\n */\n close: \"Loka\",\n /**\n * Shown when there is something to open.\n */\n open: \"Opið\"\n};\nvar validation20 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Vinsamlegast samþykktu ${name}`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} þarf að vera eftir ${date(args[0])}.`;\n }\n return `${sentence(name)} þarf að vera à framtÃðinni.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} má einungis innihalda bókstafi.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} má einungis innihalda bókstafi og tölur.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} má einungis innihalda bókstafi og bil.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} verður að innihalda bókstafi.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} verður að innihalda bókstafi eða tölur.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} verður að innihalda bókstafi eða bil.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} verður að innihalda tákn.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} verður að innihalda hástaf.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} verður að innihalda lágstaf.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} verður að innihalda tölur.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} verður að vera tákn.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} má einungis innihalda hástafi.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} má einungis innihalda lágstafi.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} þarf að vera á undan ${date(args[0])}.`;\n }\n return `${sentence(name)} þarf að vera liðin.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Þessi reitur var ekki rétt stilltur.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} þarf að vera á milli ${a} og ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} passar ekki.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(\n name\n )} er ekki gild dagsetning, vinsamlegast hafið dagsetninguna à formi ${args[0]}`;\n }\n return \"Þessi reitur var ekki rétt stilltur\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} þarf að vera á milli ${date(args[0])} og ${date(\n args[1]\n )}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"Vinsamlegast sláðu inn gilt netfang.\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} endar ekki á ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} er ekki leyfilegt gildi.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} þarf að vera að minnsta kosti einn stafur.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} þarf að vera færri en eða nákvæmlega ${max} stafir.`;\n }\n if (min === max) {\n return `${sentence(name)} þarf að vera ${max} stafir að lengd.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} þarf að vera fleiri en eða nákvæmlega ${min} stafir.`;\n }\n return `${sentence(name)} þarf að vera á milli ${min} og ${max} stafir.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} er ekki leyfilegt gildi.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Ekki hægt að hafa fleiri en ${args[0]} ${name}.`;\n }\n return `${sentence(name)} þarf að vera minna en eða nákvæmlega ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Ekki leyfileg tegund skráar.\";\n }\n return `${sentence(name)} þarf að vera af tegundinni: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Ekki hægt að hafa færri en ${args[0]} ${name}.`;\n }\n return `Þarf að vera að minnsta kosti ${args[0]} ${name}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†er ekki leyfilegt fyrir ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} þarf að vera tala.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" or \")} is required.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} er skilyrt.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} byrjar ekki á ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Vinsamlegast sláðu inn gilda slóð.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Valin dagsetning er ógild\"\n};\nvar is = { ui: ui20, validation: validation20 };\nvar ui21 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Prossimo\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Precedente\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Aggiungi tutti i valori\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Aggiungi valori selezionati\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Rimuovi tutti i valori\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Rimuovi i valori selezionati\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Scegli la data\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Cambia data\",\n /**\n * Shown when there is something to close\n */\n close: \"Chiudi\",\n /**\n * Shown when there is something to open.\n */\n open: \"Aperta\"\n};\nvar validation21 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Si prega di accettare ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `la data ${sentence(name)} deve essere successiva ${date(args[0])}.`;\n }\n return `la data ${sentence(name)} deve essere nel futuro.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} può contenere solo caratteri alfanumerici.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} può contenere solo lettere e numeri.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} può contenere solo lettere e spazi.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} deve contenere caratteri alfabetici.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} deve contenere lettere o numeri.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} deve contenere lettere o spazi.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} deve contenere un simbolo.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} must contain uppercase.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} deve contenere lettere minuscole.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} deve contenere numeri.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} deve essere un simbolo.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} può contenere solo lettere maiuscole.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} può contenere solo lettere minuscole.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `la data ${sentence(name)} deve essere antecedente ${date(args[0])}.`;\n }\n return `${sentence(name)} deve essere nel passato.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Questo campo è stato configurato male e non può essere inviato.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} deve essere tra ${a} e ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} non corrisponde.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} non è una data valida, per favore usa il formato ${args[0]}`;\n }\n return \"Questo campo è stato configurato in modo errato e non può essere inviato.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} deve essere tra ${date(args[0])} e ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} non termina con ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} non è un valore consentito.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} deve contenere almeno un carattere.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} deve essere minore o uguale a ${max} caratteri.`;\n }\n if (min === max) {\n return `${sentence(name)} deve contenere ${max} caratteri.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} deve essere maggiore o uguale a ${min} caratteri.`;\n }\n return `${sentence(name)} deve essere tra ${min} e ${max} caratteri.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} non è un valore consentito.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Non può avere più di ${args[0]} ${name}.`;\n }\n return `${sentence(name)} deve essere minore o uguale a ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Formato file non consentito.\";\n }\n return `${sentence(name)} deve essere di tipo: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Non può avere meno di ${args[0]} ${name}.`;\n }\n return `${sentence(name)} deve essere almeno ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `\"${value}\" non è un ${name} consentito.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} deve essere un numero.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" o \")} è richiesto.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} è richiesto.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} non inizia con ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Inserisci un URL valido.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"La data selezionata non è valida.\"\n};\nvar it = { ui: ui21, validation: validation21 };\nvar ui22 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"[次ã¸]\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"å‰ã¸\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"ã™ã¹ã¦ã®å€¤ã‚’è¿½åŠ \",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"é¸æŠžã—ãŸå€¤ã‚’è¿½åŠ \",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"ã™ã¹ã¦ã®å€¤ã‚’削除\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"é¸æŠžã—ãŸå€¤ã‚’削除\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"日付をé¸æŠž\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"日付を変更\",\n /**\n * Shown when there is something to close\n */\n close: \"é–‰ã˜ã‚‹\",\n /**\n * Shown when there is something to open.\n */\n open: \"[é–‹ã]\"\n};\nvar validation22 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `${name}ã®åŒæ„ãŒå¿…è¦ã§ã™ã€‚`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)}ã¯${date(args[0])}より後ã®æ—¥ä»˜ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n }\n return `${sentence(name)}ã¯å°†æ¥ã®æ—¥ä»˜ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)}ã«ã¯è‹±å—ã®ã¿ã‚’å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)}ã«ã¯ã€æ–‡å—ã¨æ•°å—ã®ã¿ã‚’å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)}ã«ã¯ã€æ–‡å—ã¨ã‚¹ãƒšãƒ¼ã‚¹ã®ã¿ã‚’å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} ã«ã¯ã‚¢ãƒ«ãƒ•ã‚¡ãƒ™ãƒƒãƒˆæ–‡å—ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} ã«ã¯æ–‡å—ã¾ãŸã¯æ•°å—ã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} ã«ã¯æ–‡å—ã¾ãŸã¯ã‚¹ãƒšãƒ¼ã‚¹ã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} ã«ã¯è¨˜å·ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} ã«ã¯å¤§æ–‡å—ã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} ã«ã¯å°æ–‡å—ã‚’å«ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} ã«ã¯æ•°å—ãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} ã¯ã‚·ãƒ³ãƒœãƒ«ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} ã«ã¯å¤§æ–‡å—ã—ã‹ä½¿ç”¨ã§ãã¾ã›ã‚“`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} ã«ã¯å°æ–‡å—ã—ã‹ä½¿ç”¨ã§ãã¾ã›ã‚“。`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)}ã¯${date(args[0])}よりå‰ã®æ—¥ä»˜ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n }\n return `${sentence(name)}ã¯éŽåŽ»ã®æ—¥ä»˜ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¯æ£ã—ã構æˆã•ã‚Œã¦ã„ãªã„ãŸã‚ã€é€ä¿¡ã§ãã¾ã›ã‚“。`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)}ã¯${a}ã¨${b}ã®é–“ã«ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)}ãŒä¸€è‡´ã—ã¾ã›ã‚“。`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)}ã¯æœ‰åŠ¹ãªæ—¥ä»˜ã§ã¯ã‚ã‚Šã¾ã›ã‚“。${args[0]}ã®å½¢å¼ã‚’使用ã—ã¦ãã ã•ã„。`;\n }\n return \"ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¯æ£ã—ã構æˆã•ã‚Œã¦ãŠã‚‰ãšã€é€ä¿¡ã§ãã¾ã›ã‚“。\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)}ã¯${date(args[0])}ã¨${date(\n args[1]\n )}ã®é–“ã«ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"有効ãªãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’入力ã—ã¦ãã ã•ã„。\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)}ã¯${list(args)}ã§çµ‚ã‚ã£ã¦ã„ã¾ã›ã‚“。`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)}ã¯è¨±å¯ã•ã‚ŒãŸå€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“。`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)}ã¯å°‘ãªãã¨ã‚‚1æ–‡å—ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n }\n if (min == 0 && max) {\n return `${sentence(name)}ã¯${max}æ–‡å—以下ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n }\n if (min === max) {\n return `${sentence(name)} ã®é•·ã•ã¯ ${max} æ–‡å—ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)}ã¯${min}æ–‡å—以上ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n }\n return `${sentence(name)}ã¯${min}ã‹ã‚‰${max}æ–‡å—ã®é–“ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)}ã¯è¨±å¯ã•ã‚ŒãŸå€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“。`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${name}ã¯${args[0]}を超ãˆã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。`;\n }\n return `${sentence(name)}ã¯${args[0]}以下ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"ファイル形å¼ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。\";\n }\n return `${sentence(name)}ã¯${args[0]}ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${name}ã¯${args[0]}未満ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。`;\n }\n return `${sentence(name)}ã¯å°‘ãªãã¨ã‚‚${args[0]}ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}â€ã¯è¨±å¯ã•ã‚ŒãŸ${name}ã§ã¯ã‚ã‚Šã¾ã›ã‚“。`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)}ã¯æ•°å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\"ã¾ãŸã¯\")}${labels}ãŒå¿…è¦ã§ã™ã€‚`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)}ã¯å¿…é ˆã§ã™ã€‚`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)}ã¯${list(args)}ã§å§‹ã¾ã£ã¦ã„ã¾ã›ã‚“。`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `有効㪠URL を入力ã—ã¦ãã ã•ã„。`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"é¸æŠžã—ãŸæ—¥ä»˜ã¯ç„¡åŠ¹ã§ã™ã€‚\"\n};\nvar ja = { ui: ui22, validation: validation22 };\nvar ui23 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"КелеÑÑ–\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Ðлдыңғы\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Барлық мәндерді қоÑыңыз\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Таңдалған мәндерді қоÑыңыз\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Барлық мәндерді алып таÑтаңыз\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Таңдалған мәндерді алып таÑтаңыз\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Күнді таңдаңыз\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Өзгерту күні\",\n /**\n * Shown when there is something to close\n */\n close: \"Жабу\",\n /**\n * Shown when there is something to open.\n */\n open: \"Ðшық\"\n};\nvar validation23 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `қабылдаңыз ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} кейін болуы керек ${date(args[0])}.`;\n }\n return `${sentence(name)} болашақта болуы керек.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} тек алфавиттік таңбаларды қамтуы мүмкін.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} тек әріптер мен Ñандардан тұруы мүмкін.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} тек әріптер мен Ð±Ð¾Ñ Ð¾Ñ€Ñ‹Ð½Ð´Ð°Ñ€ болуы мүмкін.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} алфавиттік таңбалардан тұруы керек.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} құрамында әріптер немеÑе Ñандар болуы керек.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} құрамында әріптер немеÑе Ð±Ð¾Ñ Ð¾Ñ€Ñ‹Ð½Ð´Ð°Ñ€ болуы керек.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} Ñимволы болуы керек.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} құрамында Ð±Ð°Ñ Ó™Ñ€Ñ–Ð¿Ñ‚ÐµÑ€ болуы керек.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} кіші әріп болуы керек.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} Ñандардан тұруы керек.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} Ñимволы болуы керек.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} тек Ð±Ð°Ñ Ó™Ñ€Ñ–Ð¿Ñ‚ÐµÑ€Ð´ÐµÐ½ тұруы мүмкін.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} құрамында тек кіші әріптер болуы мүмкін.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} бұрын болуы керек ${date(args[0])}.`;\n }\n return `${sentence(name)} өткенде болуы керек.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Бұл Ó©Ñ€Ñ–Ñ Ò›Ð°Ñ‚Ðµ конфигурациÑланған және оны жіберу мүмкін емеÑ.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} араÑында болуы керек ${a} және ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} ÑÓ™Ð¹ÐºÐµÑ ÐºÐµÐ»Ð¼ÐµÐ¹Ð´Ñ–.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} жарамды күн емеÑ, пішімді пайдаланыңыз ${args[0]}`;\n }\n return \"Бұл Ó©Ñ€Ñ–Ñ Ò›Ð°Ñ‚Ðµ конфигурациÑланған және оны жіберу мүмкін емеÑ\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} араÑында болуы керек ${date(args[0])} және ${date(\n args[1]\n )}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"Өтінеміз қолданыÑтағы Ñлектронды пошта адреÑін енгізіңіз.\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} -мен бітпейді ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} Ñ€Ò±Ò›Ñат етілген мән емеÑ.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} кем дегенде бір таңба болуы керек.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} кем немеÑе тең болуы керек ${max} кейіпкерлер.`;\n }\n if (min === max) {\n return `${sentence(name)} ${max} таңбалары болуы керек.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} артық немеÑе тең болуы керек ${min} кейіпкерлер.`;\n }\n return `${sentence(name)} араÑында болуы керек ${min} және ${max} кейіпкерлер.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} Ñ€Ò±Ò›Ñат етілген мән емеÑ.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `артық болуы мүмкін ÐµÐ¼ÐµÑ ${args[0]} ${name}.`;\n }\n return `${sentence(name)} кем немеÑе тең болуы керек ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Файл пішімдері Ñ€Ò±Ò›Ñат етілмейді.\";\n }\n return `${sentence(name)} типте болуы керек: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `кем болуы мүмкін ÐµÐ¼ÐµÑ ${args[0]} ${name}.`;\n }\n return `${sentence(name)} кем дегенде болуы керек ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†рұқÑат етілмейді ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} Ñан болуы керек.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" не \")} қажет.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} талап етіледі.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} -ден баÑталмайды ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Жарамды URL мекенжайын енгізіңіз.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Таңдалған күн жарамÑыз.\"\n};\nvar kk = { ui: ui23, validation: validation23 };\nvar ui24 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"다ìŒ\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"ì´ì „\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"ëª¨ë“ ê°’ 추가\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"ì„ íƒí•œ ê°’ 추가\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"ëª¨ë“ ê°’ ì œê±°\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"ì„ íƒí•œ ê°’ ì œê±°\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"ë‚ ì§œ ì„ íƒ\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"ë‚ ì§œ 변경\",\n /**\n * Shown when there is something to close\n */\n close: \"닫기\",\n /**\n * Shown when there is something to open.\n */\n open: \"열기\"\n};\nvar validation24 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `${name} 올바른 ê°’ì„ ì„ íƒ í•´ì£¼ì„¸ìš”`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} ${date(args[0])} ì´í›„여야 합니다`;\n }\n return `${sentence(name)} ë¯¸ëž˜ì˜ ë‚ ì§œì—¬ì•¼í•©ë‹ˆë‹¤`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} 알파벳 문ìžë§Œ í¬í•¨í• 수 있습니다`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} 문ìžì™€ 숫ìžë§Œ í¬í•¨ë 수 있습니다`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} 문ìžì™€ 공백만 í¬í•¨í• 수 있습니다.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} ì—는 알파벳 문ìžê°€ í¬í•¨ë˜ì–´ì•¼ 합니다.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} ì—는 문ìžë‚˜ 숫ìžê°€ í¬í•¨ë˜ì–´ì•¼ 합니다.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} ì—는 문ìžë‚˜ ê³µë°±ì´ í¬í•¨ë˜ì–´ì•¼ 합니다.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} ì—는 기호를 í¬í•¨í•´ì•¼ 합니다.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} 는 대문ìžë¥¼ í¬í•¨í•´ì•¼ 합니다.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} 는 소문ìžë¥¼ í¬í•¨í•´ì•¼ 합니다.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} ì—는 숫ìžê°€ í¬í•¨ë˜ì–´ì•¼ 합니다.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} 는 기호여야 합니다.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} 는 대문ìžë§Œ í¬í•¨í• 수 있습니다.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} 는 소문ìžë§Œ í¬í•¨í• 수 있습니다.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} ${date(args[0])} ì´ì „여야 합니다`;\n }\n return `${sentence(name)} ê³¼ê±°ì˜ ë‚ ì§œì—¬ì•¼í•©ë‹ˆë‹¤`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `ìž˜ëª»ëœ êµ¬ì„±ìœ¼ë¡œ ì œì¶œí• ìˆ˜ 없습니다`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} ${a}와 ${b} 사ì´ì—¬ì•¼ 합니다`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} ì¼ì¹˜í•˜ì§€ 않습니다`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} ìœ íš¨í•œ ë‚ ì§œê°€ 아닙니다. ${args[0]}ê³¼ ê°™ì€ í˜•ì‹ì„ 사용해주세요`;\n }\n return \"ìž˜ëª»ëœ êµ¬ì„±ìœ¼ë¡œ ì œì¶œí• ìˆ˜ 없습니다\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} ${date(args[0])}ì—ì„œ ${date(args[1])} 사ì´ì—¬ì•¼ 합니다`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"올바른 ì´ë©”ì¼ ì£¼ì†Œë¥¼ ìž…ë ¥í•´ì£¼ì„¸ìš”\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} ${list(args)}ë¡œ ë나지 않습니다`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} 허용ë˜ëŠ” ê°’ì´ ì•„ë‹™ë‹ˆë‹¤`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} 하나 ì´ìƒì˜ 문ìžì—¬ì•¼ 합니다`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} ${max}ìž ì´í•˜ì—¬ì•¼ 합니다`;\n }\n if (min === max) {\n return `${sentence(name)} 는 ${max} ìž ê¸¸ì´ì—¬ì•¼ 합니다.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} ${min} 문ìžë³´ë‹¤ í¬ê±°ë‚˜ 같아야 합니다`;\n }\n return `${sentence(name)} ${min}ì—ì„œ ${max}ìž ì‚¬ì´ì—¬ì•¼ 합니다`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} 허용ë˜ëŠ” ê°’ì´ ì•„ë‹™ë‹ˆë‹¤`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${args[0]} ${name} ì´ˆê³¼í• ìˆ˜ 없습니다`;\n }\n return `${sentence(name)} ${args[0]}보다 작거나 같아야 합니다`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"íŒŒì¼ í˜•ì‹ì´ 허용ë˜ì§€ 않습니다\";\n }\n return `${sentence(name)} ${args[0]} ìœ í˜•ì´ì–´ì•¼ 합니다`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${args[0]} ${name}보다 ìž‘ì„ ìˆ˜ 없습니다`;\n }\n return `${sentence(name)} ${args[0]} ì´ìƒì´ì–´ì•¼ 합니다`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `${value}\" 허용ë˜ì§€ 않는 ${name}입니다`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} 숫ìžì—¬ì•¼ 합니다`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" ë˜ëŠ” \")}ê°€ 필요합니다.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} 필수 값입니다`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} ${list(args)}ë¡œ 시작하지 않습니다`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `ìœ íš¨í•œ URLì„ ìž…ë ¥í•˜ì‹ì‹œì˜¤.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"ì„ íƒí•œ ë‚ ì§œê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤.\"\n};\nvar ko = { ui: ui24, validation: validation24 };\nfunction getByQuantity(quantity, vienetas, vienetai, vienetu) {\n const lastTwoDigits = quantity.toString().slice(-2);\n const parsedQuantity = parseInt(lastTwoDigits);\n if (parsedQuantity > 10 && parsedQuantity < 20 || parsedQuantity % 10 === 0) {\n return vienetu;\n }\n if (parsedQuantity === 1 || parsedQuantity % 10 === 1) {\n return vienetas;\n }\n return vienetai;\n}\nvar ui25 = {\n /**\n * Shown on a button for adding additional items.\n */\n add: \"PridÄ—ti\",\n /**\n * Shown when a button to remove items is visible.\n */\n remove: \"PaÅ¡alinti\",\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: \"PaÅ¡alinti visus\",\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: \"AtsipraÅ¡ome, ne visi laukai užpildyti teisingai.\",\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: \"Pateikti\",\n /**\n * Shown when no files are selected.\n */\n noFiles: \"Nepasirinktas joks failas\",\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: \"AukÅ¡tyn\",\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: \"Žemyn\",\n /**\n * Shown when something is actively loading.\n */\n isLoading: \"Kraunama...\",\n /**\n * Shown when there is more to load.\n */\n loadMore: \"Daugiau\",\n /**\n * Show on buttons that navigate state forward\n */\n next: \"Kitas\",\n /**\n * Show on buttons that navigate state backward\n */\n prev: \"Ankstesnis\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"PridÄ—ti visas reikÅ¡mes\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"PridÄ—ti pasirinktas reikÅ¡mes\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"PaÅ¡alinti visas reikÅ¡mes\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"PaÅ¡alinti pasirinktas reikÅ¡mes\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Pasirinkti datÄ…\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Pakeisti datÄ…\",\n /**\n * Shown when there is something to close\n */\n close: \"Uždaryti\",\n /**\n * Shown when there is something to open.\n */\n open: \"Atidaryti\"\n};\nvar validation25 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `PraÅ¡ome priimti ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} turi bÅ«ti po ${date(args[0])}.`;\n }\n return `${sentence(name)} turi bÅ«ti ateityje.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} gali bÅ«ti tik abÄ—cÄ—lÄ—s simboliai.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} gali bÅ«ti tik raidÄ—s ir skaiÄiai.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} gali bÅ«ti tik raidÄ—s ir tarpai.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} turi bÅ«ti abÄ—cÄ—lÄ—s simbolių.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} turi bÅ«ti raidžių arba skaiÄių.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} turi bÅ«ti raidžių arba tarpų.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} turi bÅ«ti simbolių.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} turi bÅ«ti didžioji raidÄ—.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} turi bÅ«ti mažoji raidÄ—.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} turi bÅ«ti skaiÄių.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} turi bÅ«ti simbolis.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} turi bÅ«ti tik didžiosios raidÄ—s.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} turi bÅ«ti tik mažosios raidÄ—s.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} turi bÅ«ti prieÅ¡ ${date(args[0])}.`;\n }\n return `${sentence(name)} turi bÅ«ti praeityje.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Å is laukas buvo sukonfigÅ«ruotas neteisingai ir jo negalima pateikti.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} turi bÅ«ti tarp ${a} ir ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} nesutampa.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} nÄ—ra tinkama data, naudokite formatÄ… ${args[0]}`;\n }\n return \"Å is laukas buvo sukonfigÅ«ruotas neteisingai ir jo negalima pateikti\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} turi bÅ«ti tarp ${date(args[0])} ir ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"Ä®veskite teisingÄ… el. paÅ¡to adresÄ….\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} nesibaigia su ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} nÄ—ra leistina reikÅ¡mÄ—.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} turi bÅ«ti bent vienas simbolis.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} turi bÅ«ti mažiau arba lygiai ${max} ${getByQuantity(\n max,\n \"simbolis\",\n \"simboliai\",\n \"simbolių\"\n )}.`;\n }\n if (min === max) {\n return `${sentence(name)} turi bÅ«ti iÅ¡ ${max} ${getByQuantity(\n max,\n \"simbolio\",\n \"simbolių\",\n \"simbolių\"\n )}.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} turi bÅ«ti daugiau arba lygiai ${min} ${getByQuantity(\n min,\n \"simbolis\",\n \"simboliai\",\n \"simbolių\"\n )}.`;\n }\n return `${sentence(name)} turi bÅ«ti tarp ${min} ir ${max} simbolių.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} nÄ—ra leistina reikÅ¡mÄ—.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Negali turÄ—ti daugiau nei ${args[0]} ${name}.`;\n }\n return `${sentence(name)} turi bÅ«ti mažiau arba lygiai ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Neleidžiami jokie failų formatai.\";\n }\n return `${sentence(name)} turi bÅ«ti tokio tipo: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Negali turÄ—ti mažiau nei ${args[0]} ${name}.`;\n }\n return `Turi bÅ«ti bent ${args[0]} ${name} .`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†nÄ—ra leidžiamas ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} turi bÅ«ti skaiÄius.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" arba \")} yra privaloma.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} yra privaloma.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} neprasideda su ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Ä®veskite teisingÄ… URL.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Pasirinkta data yra netinkama.\"\n};\nvar lt = { ui: ui25, validation: validation25 };\n\n// packages/i18n/src/locales/lv.ts\nvar ui26 = {\n /**\n * Shown on a button for adding additional items.\n */\n add: \"Pievienot\",\n /**\n * Shown when a button to remove items is visible.\n */\n remove: \"Noņemt\",\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: \"Noņemt visus\",\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: \"Piedodiet, visi lauki nav aizpildÄ«ti.\",\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: \"Iesniegt\",\n /**\n * Shown when no files are selected.\n */\n noFiles: \"Nav izvÄ“lÄ“ts fails\",\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: \"Uz augÅ¡u\",\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: \"Uz leju\",\n /**\n * Shown when something is actively loading.\n */\n isLoading: \"IelÄdÄ“jas...\",\n /**\n * Shown when there is more to load.\n */\n loadMore: \"IelÄdÄ“t vÄ“l\",\n /**\n * Show on buttons that navigate state forward\n */\n next: \"TÄlÄk\",\n /**\n * Show on buttons that navigate state backward\n */\n prev: \"Atpakaļ\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Pievienot visas vÄ“rtÄ«bas\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Pievienojiet izvÄ“lÄ“to vÄ“rtÄ«bu\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Noņemt visas vÄ“rtÄ«bas\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Noņemt izvÄ“lÄ“tÄs vÄ“rtÄ«bas\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"IzvÄ“lieties datumu\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"MainÄ«t datumu\",\n /**\n * Shown when there is something to close\n */\n close: \"AizvÄ“rt\",\n /**\n * Shown when there is something to open.\n */\n open: \"AtvÄ“rt\"\n};\nvar validation26 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `LÅ«dzu apstipriniet ${name}`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${name} jÄbÅ«t pÄ“c ${date(args[0])}.`;\n }\n return `${name} jÄbÅ«t pÄ“c Å¡odienas datuma.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${name} var saturÄ“t tikai alfabÄ“tiskÄs rakstzÄ«mes.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${name} var saturÄ“t tikai burtus un ciparus.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${name} var saturÄ“t tikai burtus un atstarpes.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${name} jÄbÅ«t pirms ${date(args[0])}.`;\n }\n return `${name} jÄbÅ«t pirms Å¡odienas datuma.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Å is lauks tika aizpildÄ«ts nepareizi un nevar tikt iesniegts.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${name} jÄbÅ«t starp ${a} un ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${name} nesakrÄ«t.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${name} nav pareizs datums, lÅ«dzu lietojiet formÄtu ${args[0]}`;\n }\n return \"Å is lauks tika aizpildÄ«ts nepareizi un nevar tikt iesniegts.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${name} jÄbÅ«t starp ${date(args[0])} un ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"LÅ«dzu ierakstiet pareizu e-pasta adresi.\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${name} nebeidzas ar ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${name} nav atļauta vÄ“rtÄ«ba.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${name} jÄbÅ«t vismaz vienam simbolam.`;\n }\n if (min == 0 && max) {\n return `${name} jÄbÅ«t mazÄk par vai ${max} simboliem.`;\n }\n if (min === max) {\n return `${name} jÄbÅ«t ${max} simbolu garumÄ.`;\n }\n if (min && max === Infinity) {\n return `${name} jÄbÅ«t vismaz ${min} simboliem.`;\n }\n return `${name} jÄbÅ«t starp ${min} un ${max} simboliem.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${name} nav atļauta vÄ“rtÄ«ba.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Nevar bÅ«t vairÄk par ${args[0]} ${name}.`;\n }\n return `${name} nevar bÅ«t mazÄk par ${args[0]} vai ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Atļauti nenoteikti faila formÄti.\";\n }\n return `${sentence(name)} faila formÄti var bÅ«t Å¡Ädi: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Nevar bÅ«t mazÄk par ${args[0]} ${name}.`;\n }\n return `JÄbÅ«t vismaz ${args[0]} ${name}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†nav atļauta vÄ“rtÄ«ba iekÅ¡ ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${name} jÄbÅ«t ciparam.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${name} ir obligÄti jÄaizpilda`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${name} nesÄkas ar ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `LÅ«dzu pievienojiet pareizu URL.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"IzvÄ“lÄ“tais datums ir nepareizs.\"\n};\nvar lv = { ui: ui26, validation: validation26 };\n\n// packages/i18n/src/locales/mn.ts\nvar ui27 = {\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 * Show on buttons that navigate state forward\n */\n next: \"Дараагийн\",\n /**\n * Show on buttons that navigate state backward\n */\n prev: \"Өмнөх\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Бүх утгуудыг нÑмÑÑ…\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"СонгогдÑон утгуудыг нÑмÑÑ…\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Бүх утгуудыг уÑтгах\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"СонгогдÑон утгуудыг хаÑах\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Огноо Ñонгох\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Огноо өөрчлөх\",\n /**\n * Shown when there is something to close\n */\n close: \"Хаах\",\n /**\n * Shown when there is something to open.\n */\n open: \"ÐÑÑлттÑй\"\n};\nvar validation27 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `${name} утгыг зөвшөөрнө Ò¯Ò¯.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} нь ${date(args[0])}-ны дараа орох Ñ‘Ñтой.`;\n }\n return `${sentence(name)} утга ирÑÑдүйг заах Ñ‘Ñтой.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} зөвхөн Ò¯ÑÑг агуулах Ñ‘Ñтой.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} зөвхөн Ò¯ÑÑг болон тоог агуулах Ñ‘Ñтой.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} зөвхөн Ò¯ÑÑг болон зай агуулах Ñ‘Ñтой.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} нь ${date(args[0])}-ны өмнө байх Ñ‘Ñтой.`;\n }\n return `${sentence(name)} өнгөрÑөн огноо байх Ñ‘Ñтой.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `ÐÐ½Ñ Ð½Ò¯Ð´Ñн дÑÑ…ÑŒ өгөгдөл буруу ÑƒÑ‡Ñ€Ð°Ð°Ñ Ð¸Ð»Ð³ÑÑÑ… боломжгүй.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} нь заавал ${a}, ${b} хоёрын дунд байх Ñ‘Ñтой.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} таарахгүй байна.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} нь хүчинтÑй огноо биш тул ${args[0]} гÑÑÑн огноог ашиглаарай.`;\n }\n return \"ÐнÑÑ…Ò¯Ò¯ нүд буруу тул цааш илгÑÑÑ… боломжгүй.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} нь заавал ${date(args[0])}, ${date(\n args[1]\n )} хоёр огноон дунд байх Ñ‘Ñтой.`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"Та хүчинтÑй имейл хаÑгаа оруулна уу.\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} нь ${list(args)} гÑÑÑн утгаар төгÑөөгүй байна.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} нь зөвшөөрөгдөх утга биш.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} дÑÑÑ€ хаÑж нÑг Ò¯ÑÑг байх Ñ‘Ñтой`;\n }\n if (min == 0 && max) {\n return `${sentence(name)}-н урт нь ${max}-ÑÑÑ Ð¸Ñ…Ð³Ò¯Ð¹ байх Ñ‘Ñтой.`;\n }\n if (min === max) {\n return `${sentence(name)} нь ${max} урт байвал зүгÑÑÑ€.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)}-н урт нь ${min}-ÑÑÑ Ð¸Ñ… буюу Ñ‚Ñнцүү байж болно.`;\n }\n return `${sentence(name)}-н урт нь ${min}, ${max} хоёрын дунд байх Ñ‘Ñтой.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} нь зөвшөөрөгдөх утга биш.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${name} нь ${args[0]}-Ð°Ð°Ñ Ð¸Ñ… байж болохгүй.`;\n }\n return `${sentence(name)} нь ${args[0]}-тай Ñ‚Ñнцүү ÑÑвÑл бага байх Ñ‘Ñтой.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Файлын формат буруу.\";\n }\n return `${sentence(name)} төрөл нь ${args[0]} байх Ñ‘Ñтой.`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${name} нь ${args[0]}-Ð°Ð°Ñ Ð¸Ñ… байж болохгүй.`;\n }\n return `${name} нь дор хаÑж ${args[0]}-тай Ñ‚Ñнцүү байх Ñ‘Ñтой.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†бол зөвшөөрөгдөх ${name} гÑÑÑн утга биш.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} зөвхөн тоо байх Ñ‘Ñтой.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} байх Ñ‘Ñтой.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} нь ${list(args)}-ÑÑÑ€ ÑхлÑÑгүй байна.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Хүчннтай URL оруулна уу.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"СонгоÑон огноо буруу байна.\"\n};\nvar mn = { ui: ui27, validation: validation27 };\nvar ui28 = {\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 * Show on buttons that navigate state forward\n */\n next: \"Neste\",\n /**\n * Show on buttons that navigate state backward\n */\n prev: \"Forrige\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Legg til alle verdier\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Legg til valgte verdier\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Fjern alle verdier\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Fjern valgte verdier\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Velg dato\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Endre dato\"\n};\nvar validation28 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Vennligst aksepter ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} mÃ¥ være senere enn ${date(args[0])}.`;\n }\n return `${sentence(name)} mÃ¥ være i fremtiden.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} kan bare inneholde alfabetiske tegn.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} kan bare inneholde bokstaver og tall.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} kan bare inneholde bokstaver og mellomrom.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} must contain alphabetical characters.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} must contain letters and numbers.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} must contain letters and spaces.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} must contain symbol.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} must contain uppercase.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} must contain lowercase.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} must contain number.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} can only contain symbol.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} can only contain uppercase.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} can only contain lowercase.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} mÃ¥ være tidligere enn ${date(args[0])}.`;\n }\n return `${sentence(name)} mÃ¥ være i fortiden.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Dette feltet er feilkonfigurert og kan ikke innsendes.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} mÃ¥ være mellom ${a} og ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} stemmer ikke overens.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} er ikke en gyldig dato, vennligst bruk formatet ${args[0]}`;\n }\n return \"Dette feltet er feilkonfigurert og kan ikke innsendes.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} mÃ¥ være mellom ${date(args[0])} og ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} slutter ikke med ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} er ikke en tillatt verdi.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} mÃ¥ ha minst ett tegn.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} mÃ¥ ha mindre enn eller nøyaktig ${max} tegn.`;\n }\n if (min === max) {\n return `${sentence(name)} skal være ${max} tegn langt.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} mÃ¥ ha mer enn eller nøyaktig ${min} tegn.`;\n }\n return `${sentence(name)} mÃ¥ ha mellom ${min} og ${max} tegn.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} er ikke en tillatt verdi.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Kan ikke ha mer enn ${args[0]} ${name}.`;\n }\n return `${sentence(name)} mÃ¥ være mindre enn eller nøyaktig ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Ingen tillatte filformater.\";\n }\n return `${sentence(name)} mÃ¥ være av typen: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Kan ikke ha mindre enn ${args[0]} ${name}.`;\n }\n return `${sentence(name)} mÃ¥ være minst ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†er ikke en tillatt ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} mÃ¥ være et tall.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" eller \")} er nødvendig.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} er pÃ¥krevd.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} starter ikke med ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Vennligst inkluder en gyldig url.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Den valgte datoen er ugyldig.\"\n};\nvar nb = { ui: ui28, validation: validation28 };\nvar ui29 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Vervolgens\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Voorgaand\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Alle waarden toevoegen\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Geselecteerde waarden toevoegen\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Alle waarden verwijderen\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Geselecteerde waarden verwijderen\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Kies een datum\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Datum wijzigen\",\n /**\n * Shown when there is something to close\n */\n close: \"Sluiten\",\n /**\n * Shown when there is something to open.\n */\n open: \"Open\"\n};\nvar validation29 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Accepteer de ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} moet na ${date(args[0])} zijn.`;\n }\n return `${sentence(name)} moet in de toekomst liggen.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} mag alleen alfabetische tekens bevatten.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} mag alleen letters en cijfers bevatten.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} mag alleen letters en spaties bevatten.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} moet alfabetische tekens bevatten.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} moet letters of cijfers bevatten.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} moet letters of spaties bevatten.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} moet een symbool bevatten.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} moet hoofdletters bevatten.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} moet kleine letters bevatten.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} moet cijfers bevatten.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} moet een symbool zijn.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} mag alleen hoofdletters bevatten.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} mag alleen kleine letters bevatten.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} moet vóór ${date(args[0])} vallen.`;\n }\n return `${sentence(name)} moet in het verleden liggen.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Dit veld is onjuist geconfigureerd en kan niet worden verzonden.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} moet tussen ${a} en ${b} liggen.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} komt niet overeen.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} is geen geldige datum, gebruik de notatie ${args[0]}`;\n }\n return \"Dit veld is onjuist geconfigureerd en kan niet worden verzonden\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} moet tussen ${date(args[0])} en ${date(args[1])} liggen`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} eindigt niet met ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} is geen toegestane waarde.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} moet minimaal één teken zijn.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} mag maximaal ${max} tekens lang zijn.`;\n }\n if (min === max) {\n return `${sentence(name)} moet ${max} tekens lang zijn.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} moet minimaal ${min} tekens lang zijn.`;\n }\n return `${sentence(name)} moet tussen de ${min} en ${max} tekens zijn.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} is geen toegestane waarde.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Mag niet meer dan ${args[0]} ${name} hebben.`;\n }\n return `${sentence(name)} moet kleiner zijn dan of gelijk zijn aan ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Geen bestandsformaten toegestaan.\";\n }\n return `${sentence(name)} moet van het type: ${args[0]} zijn`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Mag niet minder dan ${args[0]} ${name} hebben.`;\n }\n return `${sentence(name)} moet minimaal ${args[0]} zijn.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `\"${value}\" is geen toegestane ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} moet een getal zijn.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" of \")} is vereist.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} is verplicht.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} begint niet met ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Voer een geldige URL in.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"De geselecteerde datum is ongeldig.\"\n};\nvar nl = { ui: ui29, validation: validation29 };\nvar ui30 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Kolejny\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Poprzednia\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Dodaj wszystkie wartoÅ›ci\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Dodaj wybrane wartoÅ›ci\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"UsuÅ„ wszystkie wartoÅ›ci\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"UsuÅ„ wybrane wartoÅ›ci\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Wybierz datÄ™\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"ZmieÅ„ datÄ™\",\n /**\n * Shown when there is something to close\n */\n close: \"Zamknij\",\n /**\n * Shown when there is something to open.\n */\n open: \"Otwórz\"\n};\nvar validation30 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `ProszÄ™ zaakceptować ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} musi być po ${date(args[0])}.`;\n }\n return `${sentence(name)} musi być w przyszÅ‚oÅ›ci.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `Pole ${sentence(name)} może zawierać tylko znaki alfabetyczne.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `Pole ${sentence(name)} może zawierać tylko znaki alfanumeryczne.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `Pole ${sentence(name)} mogÄ… zawierać tylko litery i spacje.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} musi zawierać znaki alfabetyczne.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} musi zawierać litery lub cyfry.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} musi zawierać litery lub spacje.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} musi zawierać symbol.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} musi zawierać wielkie litery.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} musi zawierać maÅ‚e litery.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} musi zawierać liczby.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} musi być symbolem.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} może zawierać tylko wielkie litery.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} może zawierać tylko maÅ‚e litery.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} musi być przed ${date(args[0])}.`;\n }\n return `${sentence(name)} musi być w przeszÅ‚oÅ›ci.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Pole zostaÅ‚o wypeÅ‚nione niepoprawnie i nie może zostać wysÅ‚ane.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `Wartość pola ${sentence(name)} musi być pomiÄ™dzy ${a} i ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} nie pokrywa siÄ™.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `Wartość pola ${sentence(\n name\n )} nie jest poprawnÄ… datÄ…, proszÄ™ użyć formatu ${args[0]}`;\n }\n return \"To pole zostaÅ‚o wypeÅ‚nione niepoprawnie i nie może zostać wysÅ‚ane\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `Data w polu ${sentence(name)} musi być pomiÄ™dzy ${date(args[0])} i ${date(\n args[1]\n )}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `Pole ${sentence(name)} nie koÅ„czy siÄ™ na ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `Pole ${sentence(name)} nie jest dozwolonÄ… wartoÅ›ciÄ….`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `Pole ${sentence(name)} musi posiadać minimum jeden znak.`;\n }\n if (min == 0 && max) {\n return `Pole ${sentence(name)} musi zawierać ${max} lub mniej znaków.`;\n }\n if (min && max === Infinity) {\n return `Pole ${sentence(name)} musi zawierać ${min} lub wiÄ™cej znaków.`;\n }\n if (min === max) {\n return `Pole ${sentence(name)} musi mieć ${min} znaków.`;\n }\n return `Pole ${sentence(name)} musi mieć ${min}-${max} znaków.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `Pole ${sentence(name)} zawiera niedozwolone znaki.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Nie można mieć wiÄ™cej niż ${args[0]} ${name}.`;\n }\n return `Wartość pola ${sentence(name)} musi być mniejsza lub równa ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Nie podano dozwolonych typów plików.\";\n }\n return `${sentence(name)} musi być typem: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Musisz podać wiÄ™cej niż ${args[0]} ${name}.`;\n }\n return ` Musisz podać conajmniej ${args[0]} ${sentence(name)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name }) {\n return `Wartość pola ${name} jest niedozwolona.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} musi być numerem.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" lub \")} wymagany jest.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `Pole ${sentence(name)} jest wymagane.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `WartoÅ›c pola ${sentence(name)} nie zaczyna siÄ™ od ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Wprowadź prawidÅ‚owy adres URL.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Wybrana data jest nieprawidÅ‚owa.\"\n};\nvar pl = { ui: ui30, validation: validation30 };\nvar ui31 = {\n /**\n * Shown on buttons for adding new items.\n */\n add: \"Incluir\",\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: \"Remover todos\",\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: \"Desculpe, alguns campos não 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 selecionado.\",\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: \"Mover para cima\",\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: \"Mover 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: \"Carregar mais\",\n /**\n * Shown on buttons that navigate state forward\n */\n next: \"Próximo\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Anterior\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Adicione todos os valores\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Adicionar valores selecionados\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Remover todos os valores\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Remover valores selecionados\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Escolha a data\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Data da alteração\",\n /**\n * Shown when there is something to close\n */\n close: \"Fechar\",\n /**\n * Shown when there is something to open.\n */\n open: \"Aberto\"\n};\nvar validation31 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Por favor aceite o ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} precisa ser depois de ${date(args[0])}.`;\n }\n return `${sentence(name)} precisa ser no futuro.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} precisa conter apenas letras.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} pode conter apenas letras e números.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} pode conter apenas números e espaços.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} deve conter caracteres alfabéticos.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} deve conter letras ou números.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} deve conter letras ou espaços.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} deve conter um sÃmbolo.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} deve conter letras maiúsculas.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} deve conter letras minúsculas.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} deve conter números.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} deve ser um sÃmbolo.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} só pode conter letras maiúsculas.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} só pode conter letras minúsculas.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} precisa ser antes de ${date(args[0])}.`;\n }\n return `${sentence(name)} precisa ser no passado.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Este campo não foi configurado corretamente e não pode ser submetido.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} precisa ser entre ${a} e ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} não é igual.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} não é uma data válida, por favor use este formato ${args[0]}`;\n }\n return \"Este campo não foi configurado corretamente e não pode ser submetido.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} precisa ser entre ${date(args[0])} e ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"Por favor, insira um endereço de email válido.\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} não termina com ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} não é um valor permitido.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} precisa conter ao menos um caractere.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} precisa ser menor ou igual a ${max} caracteres.`;\n }\n if (min === max) {\n return `${sentence(name)} precisa conter ${max} caracteres.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} precisa ser maior ou igual a ${min} caracteres.`;\n }\n return `${sentence(name)} precisa ter entre ${min} e ${max} caracteres.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} não é um valor permitido.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Não pode ter mais de ${args[0]} ${name}.`;\n }\n return `${sentence(name)} precisa ser menor ou igual a ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Não há formatos de arquivos permitidos.\";\n }\n return `${sentence(name)} precisa ser do tipo: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Não pode ter menos de ${args[0]} ${name}.`;\n }\n return `${sentence(name)} precisa ser pelo menos ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†não é um(a) ${name} permitido(a).`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} precisa ser um número.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" ou \")} é necessário.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} é obrigatório.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} não começa com ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Por favor, insira uma url válida.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"A data selecionada é inválida.\"\n};\nvar pt = { ui: ui31, validation: validation31 };\nvar ui32 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Urmatorul\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Precedent\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"AdăugaÈ›i toate valorile\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Adăugarea valorilor selectate\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"EliminaÈ›i toate valorile\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"EliminaÈ›i valorile selectate\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Alege data\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"ModificaÈ›i data\",\n /**\n * Shown when there is something to close\n */\n close: \"ÃŽnchide\",\n /**\n * Shown when there is something to open.\n */\n open: \"Deschis\"\n};\nvar validation32 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Te rog acceptă ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} trebuie să fie după ${date(args[0])}.`;\n }\n return `${sentence(name)} trebuie sa fie în viitor.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} poate conÈ›ine doar caractere alafetice.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} poate conÈ›ine doar litere È™i numere.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} poate conÈ›ine doar litere È™i spaÈ›ii.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} trebuie să conÈ›ină caractere alfabetice.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} trebuie să conÈ›ină litere sau numere.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} trebuie să conÈ›ină litere sau spaÈ›ii.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} trebuie să conÈ›ină simbol.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} trebuie să conÈ›ină majuscule.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} trebuie să conÈ›ină litere mici.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} trebuie să conÈ›ină numere.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} trebuie să fie un simbol.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} poate conÈ›ine doar litere mari.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} poate conÈ›ine doar litere mici.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} trebuie să preceadă ${date(args[0])}.`;\n }\n return `${sentence(name)} trebuie să fie în trecut.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Câmpul a fost configurat incorect È™i nu poate fi trimis.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} trebuie să fie între ${a} È™i ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} nu se potriveÈ™te.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} nu este validă, te rog foloÈ™te formatul ${args[0]}`;\n }\n return \"Câmpul a fost incorect configurat È™i nu poate fi trimis.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} trebuie să fie între ${date(args[0])} È™i ${date(\n args[1]\n )}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} nu se termină cu ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} nu este o valoare acceptată.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} trebuie sa conÈ›ină cel puÈ›in un caracter.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} trebuie sa aibă cel mult ${max} caractere.`;\n }\n if (min === max) {\n return `${sentence(name)} ar trebui să aibă ${max} caractere lungi.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} trebuie să aibă cel puÈ›in ${min} caractere.`;\n }\n return `${sentence(name)} trebuie să aibă între ${min} È™i ${max} caractere.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} nu este o valoare acceptată.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Nu poate avea mai mult decat ${args[0]} ${name}.`;\n }\n return `${sentence(name)} trebuie să fie cel mult egal cu ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Tipul de fiÈ™ier neacceptat.\";\n }\n return `${sentence(name)} trebuie să fie de tipul: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Nu poate avea mai puÈ›in decât ${args[0]} ${name}.`;\n }\n return `${sentence(name)} trebuie să fie cel puÈ›in ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†nu este o valoare acceptă pentru ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} trebuie să fie un număr.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" sau \")} este necesar.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} este necesar.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} nu începe cu ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `IntroduceÈ›i o adresă URL validă.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Data selectată este nevalidă.\"\n};\nvar ro = { ui: ui32, validation: validation32 };\nvar ui33 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Следующий\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Предыдущий\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Добавить вÑе значениÑ\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Добавить выбранные значениÑ\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Удалить вÑе значениÑ\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Удалить выбранные значениÑ\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Выберите дату\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Изменить дату\",\n /**\n * Shown when there is something to close\n */\n close: \"Закрыть\",\n /**\n * Shown when there is something to open.\n */\n open: \"Открыть\"\n};\nvar validation33 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `ПожалуйÑта, примите ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `Дата ${sentence(name)} должна быть позже ${date(args[0])}.`;\n }\n return `Дата ${sentence(name)} должна быть в будущем.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `Поле ${sentence(name)} может Ñодержать только буквы.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `Поле ${sentence(name)} может Ñодержать только буквы и цифры.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} могут Ñодержать только буквы и пробелы.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} должен Ñодержать алфавитные Ñимволы.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} должен Ñодержать буквы или цифры.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} должно Ñодержать буквы или пробелы.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} должен Ñодержать Ñимвол.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} должно Ñодержать пропиÑные буквы.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} должно Ñодержать Ñтрочные буквы.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} должен Ñодержать чиÑла.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} должен быть Ñимволом.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} может Ñодержать только пропиÑные буквы.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} может Ñодержать только буквы нижнего региÑтра.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `Дата ${sentence(name)} должна быть раньше ${date(args[0])}.`;\n }\n return `Дата ${sentence(name)} должна быть в прошлом.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Ðто поле заполнено неверно и не может быть отправлено.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `Поле ${sentence(name)} должно быть между ${a} и ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `Поле ${sentence(name)} не Ñовпадает.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `Поле ${sentence(\n name\n )} имеет неверную дату. ПожалуйÑта, иÑпользуйте формат ${args[0]}`;\n }\n return \"Ðто поле заполнено неверно и не может быть отправлено.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `Дата ${sentence(name)} должна быть между ${date(args[0])} и ${date(\n args[1]\n )}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"ПожалуйÑта, введите дейÑтвительный Ñлектронный адреÑ.\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `Поле ${sentence(name)} не должно заканчиватьÑÑ Ð½Ð° ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `Поле ${sentence(name)} имеет неподуÑтимое значение.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `Поле ${sentence(name)} должно Ñодержать минимум один Ñимвол.`;\n }\n if (min == 0 && max) {\n return `Длина Ð¿Ð¾Ð»Ñ ${sentence(\n name\n )} должна быть меньше или равна ${max} Ñимволам.`;\n }\n if (min === max) {\n return `Длина ${sentence(name)} должна ÑоÑтавлÑÑ‚ÑŒ ${max} Ñимволов.`;\n }\n if (min && max === Infinity) {\n return `Длина Ð¿Ð¾Ð»Ñ ${sentence(\n name\n )} должна быть больше или равна ${min} Ñимволам.`;\n }\n return `Длина Ð¿Ð¾Ð»Ñ ${sentence(name)} должна быть между ${min} и ${max} Ñимволами.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `Поле ${sentence(name)} имеет недопуÑтимое значение.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Ðе может быть выбрано больше, чем ${args[0]} ${name}.`;\n }\n return `Поле ${sentence(name)} должно быть меньше или равно ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Ðе указаны поддержиавемые форматы файла.\";\n }\n return `Формат файла в поле ${sentence(name)} должен быть: ${args[0]}.`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Ðе может быть выбрано меньше, чем ${args[0]} ${name}.`;\n }\n return `Поле ${sentence(name)} должно быть не менее, чем ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†не поддерживаетÑÑ Ð² поле ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `Поле ${sentence(name)} должно быть чиÑлом.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" или \")} требуетÑÑ.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `Поле ${sentence(name)} обÑзательно Ð´Ð»Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `Поле ${sentence(name)} должно начинатьÑÑ Ñ ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `ПожалуйÑта, введите дейÑтвительный URL-адреÑ.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Ð’Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ð´Ð°Ñ‚Ð° недейÑтвительна.\"\n};\nvar ru = { ui: ui33, validation: validation33 };\nvar ui34 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"ÄŽalÅ¡ie\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"PredoÅ¡lý\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Pridajte vÅ¡etky hodnoty\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Pridajte vybrané hodnoty\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"OdstrániÅ¥ vÅ¡etky hodnoty\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"OdstrániÅ¥ vybrané hodnoty\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Vyberte dátum\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Zmena dátumu\",\n /**\n * Shown when there is something to close\n */\n close: \"ZavrieÅ¥\",\n /**\n * Shown when there is something to open.\n */\n open: \"Otvorené\"\n};\nvar validation34 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `ProsÃm zaÅ¡krtnite ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} musà byÅ¥ za ${date(args[0])}.`;\n }\n return `${sentence(name)} musà byÅ¥ v budúcnosti.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} môže obsahovaÅ¥ iba pÃsmená.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} môže obsahovaÅ¥ iba pÃsmená a ÄÃsla.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} môže obsahovaÅ¥ iba pÃsmená a medzery.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} musà obsahovaÅ¥ abecedné znaky.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} musà obsahovaÅ¥ pÃsmená alebo ÄÃslice.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} musà obsahovaÅ¥ pÃsmená alebo medzery.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} musà obsahovaÅ¥ symbol.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} musà obsahovaÅ¥ veľké pÃsmená.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} musà obsahovaÅ¥ malé pÃsmená.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} musà obsahovaÅ¥ ÄÃsla.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} musà byÅ¥ symbol.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} môže obsahovaÅ¥ iba veľké pÃsmená.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} môže obsahovaÅ¥ len malé pÃsmená.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} musà byÅ¥ pred ${date(args[0])}.`;\n }\n return `${sentence(name)} musà byÅ¥ v minulosti.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Toto pole bolo nesprávne nakonfigurované a nemôže byÅ¥ odoslané.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} musà byÅ¥ medzi ${a} and ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} does not match.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} nie je platným dátumom, prosÃm, použite formát ${args[0]}`;\n }\n return \"Toto pole bolo nesprávne nakonfigurované a nemôže byÅ¥ odoslané.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} musà byÅ¥ medzi ${date(args[0])} a ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} nekonÄà na ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} nie je povolená hodnota.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} musà maÅ¥ najmenej jeden znak.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} musà byÅ¥ menÅ¡ie alebo rovné ako ${max} znakov.`;\n }\n if (min === max) {\n return `${sentence(name)} by mala maÅ¥ dĺžku ${max} znakov.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} musà byÅ¥ väÄÅ¡ie alebo rovné ako ${min} znakov.`;\n }\n return `${sentence(name)} musà byÅ¥ medzi ${min} až ${max} znakov.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} nie je povolená hodnota.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Nie je možné použiÅ¥ viac než ${args[0]} ${name}.`;\n }\n return `${sentence(name)} musà byÅ¥ menÅ¡ie alebo rovné ako ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Nie sú povolené formáty súborov.\";\n }\n return `${sentence(name)} musà byÅ¥ typu: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Nemôže byÅ¥ menej než ${args[0]} ${name}.`;\n }\n return `${sentence(name)} musà byÅ¥ minimálne ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†nie je povolené hodnota pre ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} musà byÅ¥ ÄÃslo.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" alebo \")} je potrebný.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} je povinné.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} nezaÄÃná s ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Zadajte platnú adresu URL.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Vybraný dátum je neplatný.\"\n};\nvar sk = { ui: ui34, validation: validation34 };\nvar ui35 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Naslednji\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"PrejÅ¡nji\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Dodajte vse vrednosti\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Dodajanje izbranih vrednosti\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Odstranite vse vrednosti\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Odstrani izbrane vrednosti\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Izberite datum\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Spremeni datum\",\n /**\n * Shown when there is something to close\n */\n close: \"Zapri\",\n /**\n * Shown when there is something to open.\n */\n open: \"Odpri\"\n};\nvar validation35 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Prosimo popravite ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} mora biti po ${date(args[0])}.`;\n }\n return `${sentence(name)} mora biti v prihodnosti.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} lahko vsebuje samo znake abecede.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} lahko vsebuje samo Ärke in Å¡tevilke.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} lahko vsebuje samo Ärke in presledke.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} mora vsebovati abecedne znake.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} mora vsebovati Ärke ali Å¡tevilke.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} mora vsebovati Ärke ali presledke.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} mora vsebovati simbol.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} mora vsebovati velike Ärke.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} mora vsebovati male Ärke.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} mora vsebovati Å¡tevilke.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} mora biti simbol.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} lahko vsebuje le velike Ärke.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} lahko vsebuje le male Ärke.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} mora biti pred ${date(args[0])}.`;\n }\n return `${sentence(name)} mora biti v preteklosti.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `To polje je narobe nastavljeno in ne mora biti izpolnjeno.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} mora biti med ${a} in ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} se ne ujema.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} ni pravilen datum, prosimo uporabite format ${args[0]}`;\n }\n return \"To polje je narobe nastavljeno in ne mora biti izpolnjeno.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} mora biti med ${date(args[0])} in ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} se mora koÄati z ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} ni dovoljena vrednost.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} mora vsebovati vsaj en znak.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} mora vsebovati najveÄ ${max} znakov.`;\n }\n if (min === max) {\n return `${sentence(name)} mora biti dolg ${max} znakov.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} mora vsebovati vsaj ${min} znakov.`;\n }\n return `${sentence(name)} mora vsebovati med ${min} in ${max} znakov.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} ni dovoljena vrednost.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `NajveÄ je ${args[0]} ${name}.`;\n }\n return `${sentence(name)} je lahko najveÄ ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Nobena vrsta datoteke ni dovoljena.\";\n }\n return `${sentence(name)} mora biti tipa: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Najmanj ${args[0]} ${name} je dovoljenih.`;\n }\n return `${sentence(name)} mora biti vsaj ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†ni dovoljen(a/o) ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} mora biti Å¡tevilka.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" ali \")} zahtevan je.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} je zahtevan(o/a).`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} se mora zaÄeti z ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Vnesite veljaven URL.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Izbrani datum je neveljaven.\"\n};\nvar sl = { ui: ui35, validation: validation35 };\nvar ui36 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Sledeća\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Prethodna\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Dodajte sve vrednosti\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Dodajte izabrane vrednosti\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Uklonite sve vrednosti\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Uklonite izabrane vrednosti\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Izaberite datum\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Promenite datum\",\n /**\n * Shown when there is something to close\n */\n close: \"Zatvori\",\n /**\n * Shown when there is something to open.\n */\n open: \"Otvori\"\n};\nvar validation36 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Molimo prihvatite ${name}`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} mora biti posle ${date(args[0])}.`;\n }\n return `${sentence(name)} mora biti u buducÌnosti.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} može da sadrži samo abecedne znakove.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} može da sadrži samo slova i brojeve.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} može da sadrži samo slova i razmake.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} mora da sadrži abecedne znakove.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} mora da sadrži slova ili brojeve.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} mora da sadrži slova ili razmake.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} mora da sadrži simbol.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} mora da sadrži velika slova.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} mora da sadrži mala slova.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} mora da sadrži brojeve.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} mora biti simbol.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} može da sadrži samo velika slova.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} može da sadrži samo mala slova.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} mora biti pre ${date(args[0])}.`;\n }\n return `${sentence(name)} mora biti u proÅ¡losti.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Ovo polje je pogreÅ¡no konfigurisano i ne može se poslati.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} mora biti izmeÄ‘u ${a} i ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} se ne podudara.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} nije važecÌi datum, molimo Vas koristite format ${args[0]}`;\n }\n return \"Ovo polje je pogreÅ¡no konfigurisano i ne može se poslati\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} mora biti izmeÄ‘u ${date(args[0])} i ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} se ne zavrÅ¡ava sa ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} nije dozvoljena vrednost`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} mora biti najmanje jedan karakter.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} mora biti manji ili jednaki od ${max} karaktera.`;\n }\n if (min === max) {\n return `${sentence(name)} treba da bude ${max} znakova dugaÄak.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} mora biti vecÌi ili jednaki od ${min} karaktera.`;\n }\n return `${sentence(name)} mora biti izmeÄ‘u ${min} i ${max} karaktera.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} nije dozvoljena vrednost.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Ne može imati viÅ¡e od ${args[0]} ${name}.`;\n }\n return `${sentence(name)} mora biti manji ili jednaki od ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Nisu dozvoljeni formati datoteka.\";\n }\n return `${sentence(name)} mora biti tipa: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Ne može imati manje od ${args[0]} ${name}.`;\n }\n return `${sentence(name)} mora da ima najmanje ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†nije dozvoljeno ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} mora biti broj.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" или \")} потребан је.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} je obavezno polje.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} ne poÄinje sa ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Unesite važeću URL adresu.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Izabrani datum je nevažeći.\"\n};\nvar sr = { ui: ui36, validation: validation36 };\nvar ui37 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Nästa\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"FöregÃ¥ende\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Lägg till alla värden\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Lägg till valda värden\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Ta bort alla värden\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Ta bort valda värden\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Välj datum\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Ändra datum\",\n /**\n * Shown when there is something to close\n */\n close: \"Stäng\",\n /**\n * Shown when there is something to open.\n */\n open: \"Öppna\"\n};\nvar validation37 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Var god acceptera ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} mÃ¥ste vara efter ${date(args[0])}.`;\n }\n return `${sentence(name)} mÃ¥ste vara framÃ¥t i tiden.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} kan enbart innehÃ¥lla bokstäver i alfabetet.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} kan bara innehÃ¥lla bokstäver och siffror.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} kan bara innehÃ¥lla bokstäver och blanksteg.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} mÃ¥ste innehÃ¥lla alfabetiska tecken.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} mÃ¥ste innehÃ¥lla bokstäver eller siffror.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} mÃ¥ste innehÃ¥lla bokstäver eller mellanslag.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} mÃ¥ste innehÃ¥lla symbol.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} mÃ¥ste innehÃ¥lla versaler.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} mÃ¥ste innehÃ¥lla gemener.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} mÃ¥ste innehÃ¥lla siffror.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} mÃ¥ste vara en symbol.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} kan bara innehÃ¥lla versaler.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} kan bara innehÃ¥lla smÃ¥ bokstäver.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} mÃ¥ste vara före ${date(args[0])}.`;\n }\n return `${sentence(name)} mÃ¥ste vara bakÃ¥t i tiden.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Det här fältet ställdes inte in korrekt och kan inte användas.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} mÃ¥ste vara mellan ${a} och ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} matchar inte.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} är inte ett giltigt datum, var god använd formatet ${args[0]}`;\n }\n return \"Det här fältet ställdes inte in korrekt och kan inte användas\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} mÃ¥ste vara mellan ${date(args[0])} och ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} slutar inte med ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} är inte ett godkänt värde.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} mÃ¥ste ha minst ett tecken.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} mÃ¥ste vara ${max} tecken eller färre.`;\n }\n if (min === max) {\n return `${sentence(name)} bör vara ${max} tecken lÃ¥nga.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} mÃ¥ste vara ${min} tecken eller fler.`;\n }\n return `${sentence(name)} mÃ¥ste vara mellan ${min} och ${max} tecken.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} är inte ett godkänt värde.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Kan inte ha mer än ${args[0]} ${name}.`;\n }\n return `${sentence(name)} mÃ¥ste vara ${args[0]} eller mindre.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Inga filtyper tillÃ¥tna.\";\n }\n return `${sentence(name)} mÃ¥ste vara av filtypen: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Kan inte ha mindre än ${args[0]} ${name}.`;\n }\n return `${sentence(name)} mÃ¥ste vara minst ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†är inte ett godkänt ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} mÃ¥ste vara en siffra.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" eller \")} krävs.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} är obligatoriskt.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} börjar inte med ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Ange en giltig URL.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Det valda datumet är ogiltigt.\"\n};\nvar sv = { ui: ui37, validation: validation37 };\n\n// packages/i18n/src/locales/tet.ts\nvar ui38 = {\n /**\n * Shown on a button for adding additional items.\n */\n add: \"Aumenta\",\n /**\n * Shown when a button to remove items is visible.\n */\n remove: \"Hasai\",\n /**\n * Shown when there are multiple items to remove at the same time.\n */\n removeAll: \"Hasai Hotu\",\n /**\n * Shown when all fields are not filled out correctly.\n */\n incomplete: \"Deskulpa, iha informasaun neebe sala iha formuláriu\",\n /**\n * Shown in a button inside a form to submit the form.\n */\n submit: \"Submete\",\n /**\n * Shown when no files are selected.\n */\n noFiles: \"Seidauk hili file\",\n /**\n * Shown on buttons that move fields up in a list.\n */\n moveUp: \"Muda ba leten\",\n /**\n * Shown on buttons that move fields down in a list.\n */\n moveDown: \"Muda ba kotuk\",\n /**\n * Shown when something is actively loading.\n */\n isLoading: \"Hein lai...\",\n /**\n * Shown when there is more to load.\n */\n loadMore: \"Foti tan\",\n /**\n * Show on buttons that navigate state forward\n */\n next: \"Ba oin\",\n /**\n * Show on buttons that navigate state backward\n */\n prev: \"Ba kotuk\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Aumenta hotu\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Aumenta buat neebe hili ona\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Hasai hotu\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Hasai buat neebe hili ona\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Hili data\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Troka data\"\n};\nvar validation38 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Favor ida simu ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} tenki depoid ${date(args[0])}.`;\n }\n return `${sentence(name)} tenki iha futuru.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} bele uza letra deit.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} bele uza letra ka numeru deit.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} bele uza letra ka numeru deit.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} tenki antes ${date(args[0])}.`;\n }\n return `${sentence(name)} tenki antes ohin loron.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Informasaun nee la loos no la bele submete.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} tenki iha klaran entre ${a} no ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} la hanesan.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} la loos, favor ida hakerek tuir ${args[0]}`;\n }\n return \"Informasaun nee la loos no la bele submete.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} tenki iha ${date(args[0])} no ${date(\n args[1]\n )} nia klaran`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"Favor hakerek endresu email neebe loos.\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} la remata ho ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `la bele uza ${sentence(name)}.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} tenki iha letra ida ka liu.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} tenki badak liu ${max} letra.`;\n }\n if (min === max) {\n return `${sentence(name)} tenki iha letra ${max}.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} tenki iha letra ${min} ka liu.`;\n }\n return `${sentence(name)} tenki iha letra ${min} too ${max}.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `la bele uza ${sentence(name)}.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `La bele iha ${args[0]} ka liu ${name}.`;\n }\n return `${sentence(name)} tenki kiik liu ka hanesan ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return `La bele simu 'format' ida.`;\n }\n return `${sentence(name)} tenki iha tipo: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Presiza ${args[0]} ${name} ka liu.`;\n }\n return `${name} tenki ${args[0]} ka liu.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `La bele uza “${value}†ba ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} tenki numeru.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `Presiza ${sentence(name)}.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} la komesa ho ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Favor hakerek URL neebe loos.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Data la loos.\"\n};\nvar tet = { ui: ui38, validation: validation38 };\nvar ui39 = {\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 * Show on buttons that navigate state forward\n */\n next: \"Баъдӣ\",\n /**\n * Show on buttons that navigate state backward\n */\n prev: \"Гузашта\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Ҳама арзишҳоро илова кунед\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Илова кардани арзишҳои интихобшуда\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Ҳама арзишҳоро хориҷ кунед\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Ðрзишҳои интихобшударо хориҷ кунед\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Сана интихоб кунед\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Тағйир додани Ñана\"\n};\nvar validation39 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Лутфан ${name}-ро қабул кунед`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} боÑд Ð¿Ð°Ñ Ð°Ð· ${date(args[0])} бошад.`;\n }\n return `${sentence(name)} боÑд дар оÑнда бошад.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} метавонад танҳо аломатҳои алифборо дар бар гирад.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} метавонад танҳо ҳарфҳо ва рақамҳоро дар бар гирад.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} метавонад танҳо ҳарфҳо ва фоÑилаҳоро дар бар гирад.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} must contain alphabetical characters.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} must contain letters and numbers.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} must contain letters and spaces.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} must contain symbol.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} must contain uppercase.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} must contain lowercase.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} must contain number.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} can only contain symbol.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} can only contain uppercase.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} can only contain lowercase.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} боÑд пеш аз ${date(args[0])} бошад.`;\n }\n return `${sentence(name)} боÑд дар гузашта бошад.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Ин майдон нодуруÑÑ‚ танзим шудааÑÑ‚ ва онро пешниҳод кардан ғайриимкон аÑÑ‚.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} боÑд дар байни ${a} ва ${b} бошад.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} мувофиқат намекунад.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} Ñанаи дуруÑÑ‚ неÑÑ‚, лутфан формати ${args[0]}-ро иÑтифода баред`;\n }\n return \"Ин майдон нодуруÑÑ‚ танзим шудааÑÑ‚ ва онро пешниҳод кардан ғайриимкон аÑÑ‚\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} боÑд дар байни ${date(args[0])} ва ${date(\n args[1]\n )} бошад`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"Лутфан нишонаи имейли амалкунандаро ворид намоед.\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} бо ${list(args)} ба охир намераÑад.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} арзиши иҷозатдодашуда неÑÑ‚.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} боÑд ҳадди аққал Ñк аломат бошад.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} боÑд аз ${max} аломат камтар Ñ‘ баробар бошад.`;\n }\n if (min === max) {\n return `${sentence(name)} боÑд ${max} аломат бошад.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} боÑд аз ${min} аломат зиёд Ñ‘ баробар бошад.`;\n }\n return `${sentence(name)} боÑд дар байни ${min} ва ${max} аломат бошад.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} арзиши иҷозатдодашуда неÑÑ‚.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Зиёда аз ${args[0]} ${name} дошта наметавонад.`;\n }\n return `${sentence(name)} боÑд аз ${args[0]} камтар Ñ‘ баробар бошад.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Ягон формати файл иҷозат дода намешавад.\";\n }\n return `${sentence(name)} боÑд чунин намуд бошад: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Камтар аз ${args[0]} ${name} дошта наметавонад.`;\n }\n return `${sentence(name)} боÑд ҳадди аққал ${args[0]} бошад.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `\"${value}\" ${name} иҷозат дода намешавад.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} боÑд рақам бошад.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" Ñ‘ \")} зарур а`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} лозим аÑÑ‚.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} бо ${list(args)} оғоз намешавад.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Лутфан URL-и дуруÑтро дохил кунед.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Санаи интихобшуда нодуруÑÑ‚ аÑÑ‚.\"\n};\nvar tg = { ui: ui39, validation: validation39 };\nvar ui40 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"ถัดไป\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"à¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"เพิ่มค่าทั้งหมด\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"เพิ่มค่าที่เลืà¸à¸\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"ลบค่าทั้งหมด\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"ลบค่าที่เลืà¸à¸\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"เลืà¸à¸à¸§à¸±à¸™à¸—ี่\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"เปลี่ยนวันที่\",\n /**\n * Shown when there is something to close\n */\n close: \"ปิด\",\n /**\n * Shown when there is something to open.\n */\n open: \"เปิด\"\n};\nvar validation40 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `à¸à¸£à¸¸à¸“ายà¸à¸¡à¸£à¸±à¸š ${name}`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} จะต้à¸à¸‡à¹€à¸›à¹‡à¸™à¸§à¸±à¸™à¸—ี่หลังจาภ${date(args[0])}`;\n }\n return `${sentence(name)} จะต้à¸à¸‡à¹€à¸›à¹‡à¸™à¸§à¸±à¸™à¸—ี่ที่ยังไม่มาถึง`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} สามารถเป็นได้à¹à¸„่ตัวà¸à¸±à¸à¸©à¸£à¹€à¸—่านั้น`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} สามารถเป็นได้à¹à¸„่ตัวà¸à¸±à¸à¸©à¸£à¹à¸¥à¸°à¸•à¸±à¸§à¹€à¸¥à¸‚เท่านั้น`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} สามารถเป็นได้à¹à¸„่ตัวà¸à¸±à¸à¸©à¸£à¹à¸¥à¸°à¹€à¸§à¹‰à¸™à¸§à¸£à¸£à¸„เท่านั้น`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} ต้à¸à¸‡à¸¡à¸µà¸•à¸±à¸§à¸à¸±à¸à¸©à¸£à¸•à¸±à¸§à¸à¸±à¸à¸©à¸£`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} ต้à¸à¸‡à¸¡à¸µà¸•à¸±à¸§à¸à¸±à¸à¸©à¸£à¸«à¸£à¸·à¸à¸•à¸±à¸§à¹€à¸¥à¸‚`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} ต้à¸à¸‡à¸¡à¸µà¸•à¸±à¸§à¸à¸±à¸à¸©à¸£à¸«à¸£à¸·à¸à¸Šà¹ˆà¸à¸‡à¸§à¹ˆà¸²à¸‡`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} ต้à¸à¸‡à¸¡à¸µà¸ªà¸±à¸à¸¥à¸±à¸à¸©à¸“์`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} ต้à¸à¸‡à¸¡à¸µà¸•à¸±à¸§à¸žà¸´à¸¡à¸žà¹Œà¹ƒà¸«à¸à¹ˆ`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} ต้à¸à¸‡à¸¡à¸µà¸•à¸±à¸§à¸žà¸´à¸¡à¸žà¹Œà¹€à¸¥à¹‡à¸`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} ต้à¸à¸‡à¸¡à¸µà¸•à¸±à¸§à¹€à¸¥à¸‚`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} จะต้à¸à¸‡à¹€à¸›à¹‡à¸™à¸ªà¸±à¸à¸¥à¸±à¸à¸©à¸“์`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} เท่านั้นที่สามารถมีตัวà¸à¸±à¸à¸©à¸£à¸•à¸±à¸§à¸žà¸´à¸¡à¸žà¹Œà¹ƒà¸«à¸à¹ˆ`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} เท่านั้นที่สามารถมีตัวà¸à¸±à¸à¸©à¸£à¸•à¸±à¸§à¸žà¸´à¸¡à¸žà¹Œà¹€à¸¥à¹‡à¸`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} จะต้à¸à¸‡à¹€à¸›à¹‡à¸™à¸§à¸±à¸™à¸—ี่ที่มาà¸à¹ˆà¸à¸™ ${date(args[0])}`;\n }\n return `${sentence(name)} จะต้à¸à¸‡à¹€à¸›à¹‡à¸™à¸§à¸±à¸™à¸—ี่ที่ผ่านมาà¹à¸¥à¹‰à¸§`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `ช่à¸à¸‡à¸™à¸µà¹‰à¸–ูà¸à¸•à¸±à¹‰à¸‡à¸„่าà¸à¸¢à¹ˆà¸²à¸‡à¹„ม่ถูà¸à¸•à¹‰à¸à¸‡ à¹à¸¥à¸°à¸ˆà¸°à¹„ม่สามารถส่งข้à¸à¸¡à¸¹à¸¥à¹„ด้`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} จะต้à¸à¸‡à¹€à¸›à¹‡à¸™à¸„่าระหว่าง ${a} à¹à¸¥à¸° ${b}`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} ไม่ตรงà¸à¸±à¸™`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} ไม่à¸à¸¢à¸¹à¹ˆà¹ƒà¸™à¸£à¸¹à¸›à¹à¸šà¸šà¸§à¸±à¸™à¸—ี่ที่ถูà¸à¸•à¹‰à¸à¸‡ à¸à¸£à¸¸à¸“าà¸à¸£à¸à¸à¸•à¸²à¸¡à¸£à¸¹à¸›à¹à¸šà¸š ${args[0]}`;\n }\n return \"ช่à¸à¸‡à¸™à¸µà¹‰à¸–ูà¸à¸•à¸±à¹‰à¸‡à¸„่าà¸à¸¢à¹ˆà¸²à¸‡à¹„ม่ถูà¸à¸•à¹‰à¸à¸‡ à¹à¸¥à¸°à¸ˆà¸°à¹„ม่สามารถส่งข้à¸à¸¡à¸¹à¸¥à¹„ด้\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} จะต้à¸à¸‡à¹€à¸›à¹‡à¸™à¸§à¸±à¸™à¸—ี่ระหว่าง ${date(args[0])} à¹à¸¥à¸° ${date(\n args[1]\n )}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"à¸à¸£à¸¸à¸“าà¸à¸£à¸à¸à¸—ี่à¸à¸¢à¸¹à¹ˆà¸à¸µà¹€à¸¡à¸¥à¸—ีถูà¸à¸•à¹‰à¸à¸‡\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} จะต้à¸à¸‡à¸¥à¸‡à¸—้ายด้วย ${list(args)}`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} ไม่ใช่ค่าที่à¸à¸™à¸¸à¸à¸²à¸•à¹ƒà¸«à¹‰à¸à¸£à¸à¸`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} จะต้à¸à¸‡à¸¡à¸µà¸„วามยาวà¸à¸¢à¹ˆà¸²à¸‡à¸™à¹‰à¸à¸¢à¸«à¸™à¸¶à¹ˆà¸‡à¸•à¸±à¸§à¸à¸±à¸à¸©à¸£`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} จะต้à¸à¸‡à¸¡à¸µà¸„วามยาวไม่เà¸à¸´à¸™ ${max} ตัวà¸à¸±à¸à¸©à¸£`;\n }\n if (min === max) {\n return `${sentence(name)} ควรจะเป็น ${max} ตัวà¸à¸±à¸à¸©à¸£à¸¢à¸²à¸§`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} จะต้à¸à¸‡à¸¡à¸µà¸„วามยาว ${min} ตัวà¸à¸±à¸à¸©à¸£à¸‚ึ้นไป`;\n }\n return `${sentence(name)} จะต้à¸à¸‡à¸¡à¸µà¸„วามยาวระหว่าง ${min} à¹à¸¥à¸° ${max} ตัวà¸à¸±à¸à¸©à¸£`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} ไม่ใช่ค่าที่à¸à¸™à¸¸à¸à¸²à¸•à¹ƒà¸«à¹‰à¸à¸£à¸à¸`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `ไม่สามารถเลืà¸à¸à¸¡à¸²à¸à¸à¸§à¹ˆà¸² ${args[0]} ${name} ได้`;\n }\n return `${sentence(name)} จะต้à¸à¸‡à¸¡à¸µà¸„่าไม่เà¸à¸´à¸™ ${args[0]}`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"ไม่มีประเภทขà¸à¸‡à¹„ฟล์ที่à¸à¸™à¸¸à¸à¸²à¸•\";\n }\n return `${sentence(name)} จะต้à¸à¸‡à¹€à¸›à¹‡à¸™à¹„ฟล์ประเภท ${args[0]} เท่านั้น`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `ไม่สามารถเลืà¸à¸à¸™à¹‰à¸à¸¢à¸à¸§à¹ˆà¸² ${args[0]} ${name} ได้`;\n }\n return `${sentence(name)} จะต้à¸à¸‡à¸¡à¸µà¸„่าà¸à¸¢à¹ˆà¸²à¸‡à¸™à¹‰à¸à¸¢ ${args[0]}`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†ไม่ใช่ค่า ${name} ที่à¸à¸™à¸¸à¸à¸²à¸•à¹ƒà¸«à¹‰à¸à¸£à¸à¸`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} จะต้à¸à¸‡à¹€à¸›à¹‡à¸™à¸•à¸±à¸§à¹€à¸¥à¸‚เท่านั้น`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" หรืภ\")} ต้à¸à¸‡à¸à¸²à¸£.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `à¸à¸£à¸¸à¸“าà¸à¸£à¸à¸ ${sentence(name)}`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} จะต้à¸à¸‡à¹€à¸£à¸´à¹ˆà¸¡à¸•à¹‰à¸™à¸”้วย ${list(args)}`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `à¸à¸£à¸¸à¸“าระบุที่à¸à¸¢à¸¹à¹ˆà¸¥à¸´à¸‡à¸à¹Œà¹ƒà¸«à¹‰à¸–ูà¸à¸•à¹‰à¸à¸‡`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"วันที่ที่เลืà¸à¸à¹„ม่ถูà¸à¸•à¹‰à¸à¸‡\"\n};\nvar th = { ui: ui40, validation: validation40 };\nvar ui41 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Sonraki\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Önceki\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Tüm deÄŸerleri ekle\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Seçili deÄŸerleri ekle\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Tüm deÄŸerleri kaldır\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Seçili deÄŸerleri kaldır\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Tarih seçin\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Tarihi deÄŸiÅŸtir\",\n /**\n * Shown when there is something to close\n */\n close: \"Kapat\",\n /**\n * Shown when there is something to open.\n */\n open: \"Açık\"\n};\nvar validation41 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Lütfen ${name}'yi kabul edin.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} ${date(args[0])}'den sonra olmalıdır.`;\n }\n return `${sentence(name)} gelecekte bir zaman olmalıdır.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} sadece alfabetik karakterler içerebilir.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} sadece alfabetik karakterler ve sayı içerebilir.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} yalnızca harf ve boÅŸluk içerebilir.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} alfabetik karakterler içermelidir.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} harf veya rakamı içermelidir.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} harf veya boÅŸluk içermelidir.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} sembol içermelidir.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} büyük harf içermelidir.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} küçük harf içermelidir.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} sayı içermelidir.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} bir sembol olmalıdır.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} yalnızca büyük harfler içerebilir.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} yalnızca küçük harfler içerebilir.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} ${date(args[0])} tarihinden önce olmalı.`;\n }\n return `${sentence(name)} geçmiÅŸte olmalı.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Alan yanlış yapılandırılmış ve gönderilemez.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} ${a} ve ${b} aralığında olmalı.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} eÅŸleÅŸmiyor.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} geçerli bir tarih deÄŸil, lütfen ${args[0]} biçimini kullanın.`;\n }\n return \"Alan yanlış yapılandırılmış ve gönderilemez.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)}, ${date(args[0])} ve ${date(args[1])} aralığında olmalı.`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} ${list(args)} ile bitmiyor.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} izin verilen bir deÄŸer deÄŸil.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} en azından bir karakter uzunluÄŸunda olmalı.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} ${max}'e eÅŸit veya daha küçük olmalı.`;\n }\n if (min === max) {\n return `${sentence(name)} ${max} karakter uzunluÄŸunda olmalıdır.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} ${min}'e eÅŸit veya daha büyük olmalı.`;\n }\n return `${sentence(name)}, ${min} ve ${max} karakter uzunluÄŸu aralığında olmalı.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} izin verilen bir deÄŸer deÄŸil.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${name}'in uzunluÄŸu ${args[0]}'dan daha uzun olamaz.`;\n }\n return `${sentence(name)} en azından ${args[0]} uzunluÄŸunda veya ona eÅŸit olmalı.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Hiçbir dosya türüne izin verilmez.\";\n }\n return `${sentence(name)} ÅŸu tiplerden biri olmalı: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${name}'in uzunluÄŸu ${args[0]}'dan daha kısa olamaz.`;\n }\n return `${sentence(name)} en azından ${args[0]} uzunluÄŸunda olmalı.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†${name} olamaz.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} sayı olmalı.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" veya \")} gereklidir.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} gerekli.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} ${list(args)} ile baÅŸlamıyor.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Lütfen geçerli bir URL girin.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Seçilen tarih geçersiz.\"\n};\nvar tr = { ui: ui41, validation: validation41 };\nvar ui42 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"ÐаÑтупний\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Попередній\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Додати вÑÑ– значеннÑ\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Додати вибрані значеннÑ\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Вилучити вÑÑ– значеннÑ\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Вилучити вибрані значеннÑ\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Виберіть дату\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Змінити дату\",\n /**\n * Shown when there is something to close\n */\n close: \"Закрити\",\n /**\n * Shown when there is something to open.\n */\n open: \"Відкрити\"\n};\nvar validation42 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Будь лаÑка, прийміть ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `Дата ${sentence(name)} повинна бути пізніше за ${date(args[0])}.`;\n }\n return `Дата ${sentence(name)} має бути в майбутньому.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `Поле ${sentence(name)} може міÑтити лише літери.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `Поле ${sentence(name)} може міÑтити лише літери та цифри.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `Поле ${sentence(name)} може міÑтити лише літери та пробіли.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} повинен міÑтити алфавітні Ñимволи.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} повинен міÑтити букви або цифри.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} повинен міÑтити літери або пробіли.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} повинен міÑтити Ñимвол.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} повинен міÑтити великі регіÑтри.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} повинен міÑтити малі регіÑтри.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} повинен міÑтити цифри.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} має бути Ñимволом.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} може міÑтити лише великі літери.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} може міÑтити лише малі літери.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `Дата ${sentence(name)} повинна бути раніше за ${date(args[0])}.`;\n }\n return `Дата ${sentence(name)} повинна бути в минулому.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Це поле заповнено неправильно Ñ– не може бути надіÑлано.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `Поле ${sentence(name)} повинно бути між ${a} та ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `Поле ${sentence(name)} не збігаєтьÑÑ.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `Поле ${sentence(\n name\n )} має неправильну дату. Будь лаÑка, викориÑтовуйте формат ${args[0]}.`;\n }\n return \"Це поле заповнено неправильно Ñ– не може бути надіÑлано.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `Дата ${sentence(name)} повинна бути між ${date(args[0])} та ${date(\n args[1]\n )}.`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"Будь лаÑка, введіть дійÑну електронну адреÑу.\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `Поле ${sentence(name)} не повинно закінчуватиÑÑ Ð½Ð° ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `Поле ${sentence(name)} має неприпуÑтиме значеннÑ.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `Поле ${sentence(name)} має міÑтити щонайменше один Ñимвол.`;\n }\n if (min == 0 && max) {\n return `Довжина Ð¿Ð¾Ð»Ñ ${sentence(\n name\n )} повинна бути меншою або дорівнювати ${max} Ñимволам.`;\n }\n if (min === max) {\n return `${sentence(name)} має бути довжиною ${max} Ñимволів.`;\n }\n if (min && max === Infinity) {\n return `Довжина Ð¿Ð¾Ð»Ñ ${sentence(\n name\n )} повинна бути більшою або дорівнювати ${min} Ñимволам.`;\n }\n return `Довжина Ð¿Ð¾Ð»Ñ ${sentence(\n name\n )} повинна бути між ${min} та ${max} Ñимволами.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `Поле ${sentence(name)} має неприпуÑтиме значеннÑ.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Ðе може бути вибрано більше ніж ${args[0]} ${name}.`;\n }\n return `Поле ${sentence(name)} має бути менше або дорівнювати ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Ðе вказано дозволені типи файлів.\";\n }\n return `Тип файлу в полі ${sentence(name)} має бути: ${args[0]}.`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `Ðе може бути вибрано менше ніж ${args[0]} ${name}.`;\n }\n return `Поле ${sentence(name)} має бути не менше ніж ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†не дозволено в полі ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `Поле ${sentence(name)} має бути чиÑлом.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" або \")} потрібно.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `Поле ${sentence(name)} Ñ” обов'Ñзковим.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `Поле ${sentence(name)} має починатиÑÑ Ð· ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Будь лаÑка, введіть коректну URL-адреÑу.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Вибрана дата недійÑна.\"\n};\nvar uk = { ui: ui42, validation: validation42 };\nvar ui43 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Keyingi\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"Oldingi\",\n /**\n * Shown when adding all values.\n */\n addAllValues: `Barcha qiymatlarni qo'shish`,\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: `Tanlangan qiymatlarni qoÊ»shish`,\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Barcha qiymatlarni olib tashlang\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Tanlangan qiymatlarni olib tashlash\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Sanani tanlang\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: `O'zgartirish sanasi`,\n /**\n * Shown when there is something to close\n */\n close: \"Yopish\",\n /**\n * Shown when there is something to open.\n */\n open: \"Ochiq\"\n};\nvar validation43 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `${name} ni qabul qiling.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} ${date(args[0])} dan keyin bo'lishi kerak.`;\n }\n return `${sentence(name)} kelajakda bo'lishi kerak.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(\n name\n )} faqat alifbo tartibidagi belgilardan iborat bo'lishi mumkin.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} faqat harflar va raqamlardan iborat bo'lishi mumkin.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} faqat harf va bo'shliqlardan iborat bo'lishi mumkin.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} alfavit belgilarini o'z ichiga olishi kerak.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} harflar yoki raqamlarni o'z ichiga olishi kerak.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} harflar yoki bo'shliqlar bo'lishi kerak.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} belgisi bo'lishi kerak.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} katta harfni o'z ichiga olishi kerak.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} kichik harflarni o'z ichiga olishi kerak.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} raqamlarini o'z ichiga olishi kerak.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} belgisi bo'lishi kerak.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} faqat katta harflarni o'z ichiga olishi mumkin.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} faqat kichik harflarni o'z ichiga olishi mumkin.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} ${date(args[0])} dan oldin bo'lishi kerak`;\n }\n return `${sentence(name)} o'tmishda bo'lishi kerak.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `Bu maydon noto'g'ri sozlangan va uni yuborib bo'lmaydi.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} ${a} va ${b} orasida bo'lishi kerak.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} mos emas.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} haqiqiy sana emas, iltimos ${args[0]} formatidan foydalaning`;\n }\n return \"Bu maydon noto'g'ri sozlangan va uni yuborib bo'lmaydi\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} ${date(args[0])} va ${date(\n args[1]\n )} oralig'ida bo'lishi kerak`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} ${list(args)} bilan tugamaydi.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} ruxsat etilgan qiymat emas.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} kamida bitta belgidan iborat bo'lishi kerak.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} ${max} ta belgidan kam yoki teng bo'lishi kerak.`;\n }\n if (min === max) {\n return `${sentence(name)} bo'lishi kerak ${max} belgilar uzun.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} ${min} ta belgidan ko'p yoki teng bo'lishi kerak.`;\n }\n return `${sentence(\n name\n )} ${min} va ${max} gacha belgilardan iborat bo'lishi kerak.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} ruxsat etilgan qiymat emas.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${args[0]} ${name} dan ortiq bo'lishi mumkin emas.`;\n }\n return `${sentence(name)} ${args[0]} dan kichik yoki teng bo'lishi kerak.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Fayl formatlariga ruxsat berilmagan.\";\n }\n return `${sentence(name)} quyidagi turdagi bo'lishi kerak: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${args[0]} ${name} dan kam bo'lmasligi kerak.`;\n }\n return `${sentence(name)} kamida ${args[0]} bo'lishi kerak.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `\"${value}\" ruxsat berilmagan ${name}.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} raqam bo'lishi kerak.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" yoki \")} kerak.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} talab qilinadi.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} ${list(args)} bilan boshlanmaydi.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Iltimos, tegishli URL manzilini kiriting.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Tanlangan sana yaroqsiz.\"\n};\nvar uz = { ui: ui43, validation: validation43 };\nvar ui44 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"Tiếp\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"TrÆ°á»›c\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"Thêm tất cả các giá trị\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"Thêm các giá trị đã chá»n\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"Loại bá» tất cả các giá trị\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"Loại bá» các giá trị đã chá»n\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"Chá»n ngà y\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"Thay đổi ngà y\",\n /**\n * Shown when there is something to close\n */\n close: \"Äóng\",\n /**\n * Shown when there is something to open.\n */\n open: \"Mở\"\n};\nvar validation44 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `Hãy đồng ý vá»›i ${name}.`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} phải sau ${date(args[0])}.`;\n }\n return `${sentence(name)} phải trong tÆ°Æ¡ng lai.`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} có thể chỉ bao gồm các chữ cái alphabet.`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} có thể chỉ bao gồm các chữ cái và chữ số.`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} chỉ có thể chứa các chữ cái và khoảng trắng.`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} phải chứa các ký tá»± chữ cái.`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} phải chứa chữ cái hoặc số.`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} phải chứa chữ cái hoặc dấu cách.`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} phải chứa ký hiệu.`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} phải chứa chữ hoa.`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} phải chứa chữ thÆ°á»ng.`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} phải chứa số.`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} phải là má»™t ký hiệu.`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} chỉ có thể chứa chữ hoa.`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} chỉ có thể chứa chữ thÆ°á»ng.`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} phải trÆ°á»›c ${date(args[0])}.`;\n }\n return `${sentence(name)} phải trong quá khứ.`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `TrÆ°á»ng nà y đã được thiết láºp sai và không thể gá»i.`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} phải ở giữa ${a} và ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} không khá»›p.`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\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 return \"TrÆ°á»ng nà y đã được thiết láºp sai và không thể gá»i.\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} phải ở giữa khoảng từ ${date(args[0])} đến ${date(\n args[1]\n )}.`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://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://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} không kết thúc vá»›i ${list(args)}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} không phải má»™t giá trị được cho phép.`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} phải có Ä‘á»™ dà i tối thiểu má»™t ký tá»±.`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} phải có Ä‘á»™ dà i tối Ä‘a ${max} ký tá»±.`;\n }\n if (min === max) {\n return `${sentence(name)} nên dà i ${max} ký tá»±.`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} phải có Ä‘á»™ dà i tối thiểu ${min} ký tá»±.`;\n }\n return `${sentence(\n name\n )} phải có Ä‘á»™ dà i tối Ä‘a trong khoảng từ ${min} đến ${max} ký tá»±.`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} không phải má»™t giá trị được cho phép.`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${name} không thể lá»›n hÆ¡n ${args[0]}.`;\n }\n return `${sentence(name)} phải tối Ä‘a bằng ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"Äịnh dạng tệp tin nà y không được phép.\";\n }\n return `${sentence(name)} phải là má»™t trong các dạng: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${name} không thể nhá» hÆ¡n ${args[0]}.`;\n }\n return `${sentence(name)} phải tối thiểu bằng ${args[0]}.`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `\"${value}\" không phải giá trị ${name} được phép.`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} phải là má»™t số.`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\" hoặc \")} cần có.`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} là bắt buá»™c.`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} không bắt đầu vá»›i ${list(args)}.`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `Vui lòng nháºp má»™t URL hợp lệ.`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"Ngà y đã chá»n không hợp lệ.\"\n};\nvar vi = { ui: ui44, validation: validation44 };\nvar ui45 = {\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 * Shown on buttons that navigate state forward\n */\n next: \"下一æ¥\",\n /**\n * Shown on buttons that navigate state backward\n */\n prev: \"上一æ¥\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"æ·»åŠ æ‰€æœ‰å€¼\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"æ·»åŠ æ‰€é€‰å€¼\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"移除所有值\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"移除所选值\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"选择日期\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"更改日期\",\n /**\n * Shown when there is something to close\n */\n close: \"å…³é—\",\n /**\n * Shown when there is something to open.\n */\n open: \"打开\"\n};\nvar validation45 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `请接å—${name}。`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)}必须晚于${date(args[0])}。`;\n }\n return `${sentence(name)}必须是未æ¥çš„日期。`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)}åªèƒ½åŒ…å«è‹±æ–‡å—æ¯ã€‚`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)}åªèƒ½åŒ…å«å—æ¯å’Œæ•°å—。`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)}åªèƒ½åŒ…å«å—æ¯å’Œç©ºæ ¼ã€‚`;\n },\n /**\n * The value have no letter.\n * @see {@link https://formkit.com/essentials/validation#contains_alpha}\n */\n contains_alpha({ name }) {\n return `${sentence(name)} 必须包å«å—æ¯å—符`;\n },\n /**\n * The value have no alphanumeric\n * @see {@link https://formkit.com/essentials/validation#contains_alphanumeric}\n */\n contains_alphanumeric({ name }) {\n return `${sentence(name)} 必须包å«å—æ¯æˆ–æ•°å—。`;\n },\n /**\n * The value have no letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#contains_alpha-spaces}\n */\n contains_alpha_spaces({ name }) {\n return `${sentence(name)} 必须包å«å—æ¯æˆ–ç©ºæ ¼ã€‚`;\n },\n /**\n * The value have no symbol\n * @see {@link https://formkit.com/essentials/validation#contains_symbol}\n */\n contains_symbol({ name }) {\n return `${sentence(name)} 必须包å«ç¬¦å·ã€‚`;\n },\n /**\n * The value have no uppercase\n * @see {@link https://formkit.com/essentials/validation#contains_uppercase}\n */\n contains_uppercase({ name }) {\n return `${sentence(name)} 必须包å«å¤§å†™å—æ¯ã€‚`;\n },\n /**\n * The value have no lowercase\n * @see {@link https://formkit.com/essentials/validation#contains_lowercase}\n */\n contains_lowercase({ name }) {\n return `${sentence(name)} 必须包å«å°å†™å—æ¯ã€‚`;\n },\n /**\n * The value have no numeric\n * @see {@link https://formkit.com/essentials/validation#contains_numeric}\n */\n contains_numeric({ name }) {\n return `${sentence(name)} 必须包å«æ•°å—。`;\n },\n /**\n * The value is not symbol\n * @see {@link https://formkit.com/essentials/validation#symbol}\n */\n symbol({ name }) {\n return `${sentence(name)} 必须是符å·ã€‚`;\n },\n /**\n * The value is not uppercase\n * @see {@link https://formkit.com/essentials/validation#uppercase}\n */\n uppercase({ name }) {\n return `${sentence(name)} åªèƒ½åŒ…å«å¤§å†™å—æ¯ã€‚`;\n },\n /**\n * The value is not lowercase\n * @see {@link https://formkit.com/essentials/validation#lowercase}\n */\n lowercase({ name }) {\n return `${sentence(name)} åªèƒ½åŒ…å«å°å†™å—æ¯ã€‚`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)}必须早于${date(args[0])}。`;\n }\n return `${sentence(name)}必须是过去的日期。`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `该å—段未被æ£ç¡®è®¾ç½®è€Œæ— 法æ交。`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)}必须在${a}å’Œ${b}之间。`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)}ä¸åŒ¹é…。`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)}ä¸æ˜¯åˆæ³•æ—¥æœŸï¼Œè¯·ä½¿ç”¨ ${args[0]} æ ¼å¼`;\n }\n return \"该å—段未被æ£ç¡®è®¾ç½®è€Œæ— 法æ交\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)}必须在${date(args[0])}å’Œ${date(args[1])}之间`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"请输入åˆæ³•çš„电å邮件地å€ã€‚\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)}必须以${list(args)}结尾。`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)}是ä¸å…许的。`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)}至少è¦æœ‰ä¸€ä¸ªå—符。`;\n }\n if (min == 0 && max) {\n return `${sentence(name)}必须少于或ç‰äºŽ${max}个å—符。`;\n }\n if (min === max) {\n return `${sentence(name)}必须包å«${max}个å—符。`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)}必须多于或ç‰äºŽ${min}个å—符。`;\n }\n return `${sentence(name)}必须介于${min}å’Œ${max}个å—符之间。`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)}是ä¸å…许的。`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${name}ä¸å¾—多于${args[0]}个值。`;\n }\n return `${name}ä¸å¾—大于${args[0]}。`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"没有å…è®¸çš„æ–‡ä»¶æ ¼å¼ã€‚\";\n }\n return `${sentence(name)}的类型必须为:${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `${name}ä¸å¾—少于${args[0]}个值。`;\n }\n return `${sentence(name)}ä¸å¾—å°äºŽ${args[0]}。`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `\"${value}\"ä¸æ˜¯ä¸€ä¸ªåˆæ³•çš„${name}。`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)}必须为数å—。`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\"或\")}${labels}需è¦ã€‚`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)}ä¸å¾—留空。`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)}必须以${list(args)}开头。`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `请输入有效的 URL。`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"æ‰€é€‰æ—¥æœŸæ— æ•ˆã€‚\"\n};\nvar zh = { ui: ui45, validation: validation45 };\nvar ui46 = {\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 * Show on buttons that navigate state forward\n */\n next: \"下一個\",\n /**\n * Show on buttons that navigate state backward\n */\n prev: \"上一個\",\n /**\n * Shown when adding all values.\n */\n addAllValues: \"åŠ å…¥å…¨éƒ¨çš„å€¼\",\n /**\n * Shown when adding selected values.\n */\n addSelectedValues: \"åŠ å…¥é¸å–的值\",\n /**\n * Shown when removing all values.\n */\n removeAllValues: \"移除全部的值\",\n /**\n * Shown when removing selected values.\n */\n removeSelectedValues: \"移除é¸å–的值\",\n /**\n * Shown when there is a date to choose.\n */\n chooseDate: \"é¸æ“‡æ—¥æœŸ\",\n /**\n * Shown when there is a date to change.\n */\n changeDate: \"變更日期\",\n /**\n * Shown when there is something to close\n */\n close: \"關閉\",\n /**\n * Shown when there is something to open.\n */\n open: \"開放\"\n};\nvar validation46 = {\n /**\n * The value is not an accepted value.\n * @see {@link https://formkit.com/essentials/validation#accepted}\n */\n accepted({ name }) {\n return `è«‹æŽ¥å— ${name}`;\n },\n /**\n * The date is not after\n * @see {@link https://formkit.com/essentials/validation#date-after}\n */\n date_after({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} å¿…é ˆæ™šæ–¼ ${date(args[0])}`;\n }\n return `${sentence(name)} å¿…é ˆæ™šæ–¼ä»Šæ—¥`;\n },\n /**\n * The value is not a letter.\n * @see {@link https://formkit.com/essentials/validation#alpha}\n */\n alpha({ name }) {\n return `${sentence(name)} 欄ä½å„˜èƒ½å¡«å¯«è‹±æ–‡å—æ¯`;\n },\n /**\n * The value is not alphanumeric\n * @see {@link https://formkit.com/essentials/validation#alphanumeric}\n */\n alphanumeric({ name }) {\n return `${sentence(name)} 欄ä½åƒ…能填寫英文å—æ¯èˆ‡æ•¸å—`;\n },\n /**\n * The value is not letter and/or spaces\n * @see {@link https://formkit.com/essentials/validation#alpha-spaces}\n */\n alpha_spaces({ name }) {\n return `${sentence(name)} 欄ä½å„˜èƒ½å¡«å¯«è‹±æ–‡å—æ¯èˆ‡ç©ºç™½`;\n },\n /**\n * The date is not before\n * @see {@link https://formkit.com/essentials/validation#date-before}\n */\n date_before({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} å¿…é ˆæ—©æ–¼ ${date(args[0])}.`;\n }\n return `${sentence(name)} å¿…é ˆæ—©æ–¼ä»Šæ—¥`;\n },\n /**\n * The value is not between two numbers\n * @see {@link https://formkit.com/essentials/validation#between}\n */\n between({ name, args }) {\n if (isNaN(args[0]) || isNaN(args[1])) {\n return `欄ä½å€¼éŒ¯èª¤ï¼Œç„¡æ³•æ交`;\n }\n const [a, b] = order(args[0], args[1]);\n return `${sentence(name)} å¿…é ˆä»‹æ–¼ ${a} å’Œ ${b}.`;\n },\n /**\n * The confirmation field does not match\n * @see {@link https://formkit.com/essentials/validation#confirm}\n */\n confirm({ name }) {\n return `${sentence(name)} 與目標ä¸ä¸€è‡´`;\n },\n /**\n * The value is not a valid date\n * @see {@link https://formkit.com/essentials/validation#date-format}\n */\n date_format({ name, args }) {\n if (Array.isArray(args) && args.length) {\n return `${sentence(name)} ä¸æ˜¯æœ‰æ•ˆçš„日期,請使用 ${args[0]} æ ¼å¼`;\n }\n return \"欄ä½å€¼éŒ¯èª¤ï¼Œç„¡æ³•æ交\";\n },\n /**\n * Is not within expected date range\n * @see {@link https://formkit.com/essentials/validation#date-between}\n */\n date_between({ name, args }) {\n return `${sentence(name)} å¿…é ˆä»‹æ–¼ ${date(args[0])} å’Œ ${date(args[1])}`;\n },\n /**\n * Shown when the user-provided value is not a valid email address.\n * @see {@link https://formkit.com/essentials/validation#email}\n */\n email: \"請輸入有效的 email\",\n /**\n * Does not end with the specified value\n * @see {@link https://formkit.com/essentials/validation#ends-with}\n */\n ends_with({ name, args }) {\n return `${sentence(name)} çš„çµå°¾å¿…é ˆæ˜¯ ${list(args)}`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#is}\n */\n is({ name }) {\n return `${sentence(name)} 欄ä½çš„值ä¸åˆè¦å‰‡`;\n },\n /**\n * Does not match specified length\n * @see {@link https://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 return `${sentence(name)} 欄ä½å¿…é ˆè‡³å°‘åŒ…å«ä¸€å€‹å—`;\n }\n if (min == 0 && max) {\n return `${sentence(name)} çš„å—æ•¸å¿…é ˆå°æ–¼ç‰æ–¼ ${max}`;\n }\n if (min === max) {\n return `${sentence(name)} çš„å—æ•¸å¿…é ˆç‚º ${max}`;\n }\n if (min && max === Infinity) {\n return `${sentence(name)} çš„å—æ•¸å¿…é ˆå¤§æ–¼ç‰æ–¼ ${min}`;\n }\n return `${sentence(name)} çš„å—æ•¸å¿…é ˆä»‹æ–¼ ${min} å’Œ ${max}`;\n },\n /**\n * Value is not a match\n * @see {@link https://formkit.com/essentials/validation#matches}\n */\n matches({ name }) {\n return `${sentence(name)} 欄ä½çš„值無效`;\n },\n /**\n * Exceeds maximum allowed value\n * @see {@link https://formkit.com/essentials/validation#max}\n */\n max({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `ä¸èƒ½è¶…éŽ ${args[0]} 個 ${name}.`;\n }\n return `${sentence(name)} å¿…é ˆå°æ–¼ç‰æ–¼ ${args[0]}.`;\n },\n /**\n * The (field-level) value does not match specified mime type\n * @see {@link https://formkit.com/essentials/validation#mime}\n */\n mime({ name, args }) {\n if (!args[0]) {\n return \"éžæœ‰æ•ˆçš„æª”æ¡ˆæ ¼å¼\";\n }\n return `${sentence(name)} å¯æŽ¥å—çš„æª”æ¡ˆæ ¼å¼ç‚º: ${args[0]}`;\n },\n /**\n * Does not fulfill minimum allowed value\n * @see {@link https://formkit.com/essentials/validation#min}\n */\n min({ name, node: { value }, args }) {\n if (Array.isArray(value)) {\n return `ä¸å¯å°‘æ–¼ ${args[0]} 個 ${name}`;\n }\n return `${name} å¿…é ˆå¤§æ–¼ç‰æ–¼ ${args[0]}`;\n },\n /**\n * Is not an allowed value\n * @see {@link https://formkit.com/essentials/validation#not}\n */\n not({ name, node: { value } }) {\n return `“${value}†ä¸æ˜¯ ${name} 欄ä½å¯æŽ¥å—的值`;\n },\n /**\n * Is not a number\n * @see {@link https://formkit.com/essentials/validation#number}\n */\n number({ name }) {\n return `${sentence(name)} 欄ä½å¿…é ˆæ˜¯æ•¸å—`;\n },\n /**\n * Require one field.\n * @see {@link https://formkit.com/essentials/validation#require-one}\n */\n require_one: ({ name, node, args: inputNames }) => {\n const labels = inputNames.map((name2) => {\n const dependentNode = node.at(name2);\n if (dependentNode) {\n return createMessageName(dependentNode);\n }\n return false;\n }).filter((name2) => !!name2);\n labels.unshift(name);\n return `${labels.join(\"或\")}${labels}需è¦ã€‚`;\n },\n /**\n * Required field.\n * @see {@link https://formkit.com/essentials/validation#required}\n */\n required({ name }) {\n return `${sentence(name)} 是必è¦æ¬„ä½`;\n },\n /**\n * Does not start with specified value\n * @see {@link https://formkit.com/essentials/validation#starts-with}\n */\n starts_with({ name, args }) {\n return `${sentence(name)} çš„é–‹é å¿…é ˆæ˜¯ ${list(args)}`;\n },\n /**\n * Is not a url\n * @see {@link https://formkit.com/essentials/validation#url}\n */\n url() {\n return `請輸入有效的 url`;\n },\n /**\n * Shown when the date is invalid.\n */\n invalidDate: \"é¸å–的日期無效\"\n};\nvar zhTW = { ui: ui46, validation: validation46 };\nvar i18nNodes = /* @__PURE__ */ new Set();\nvar activeLocale = null;\nfunction createI18nPlugin(registry) {\n return function i18nPlugin(node) {\n i18nNodes.add(node);\n if (activeLocale)\n node.config.locale = activeLocale;\n node.on(\"destroying\", () => i18nNodes.delete(node));\n let localeKey = parseLocale(node.config.locale, registry);\n let locale = localeKey ? registry[localeKey] : {};\n node.on(\"prop:locale\", ({ payload: lang }) => {\n localeKey = parseLocale(lang, registry);\n locale = localeKey ? registry[localeKey] : {};\n node.store.touch();\n });\n node.on(\"prop:label\", () => node.store.touch());\n node.on(\"prop:validationLabel\", () => node.store.touch());\n node.hook.text((fragment, next) => {\n const key = fragment.meta?.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(fragment.meta?.i18nArgs) ? t(...fragment.meta.i18nArgs) : t(fragment);\n } else {\n fragment.value = t;\n }\n }\n return next(fragment);\n });\n };\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 locale2 in availableLocales) {\n return locale2;\n }\n return false;\n}\nfunction changeLocale(locale) {\n activeLocale = locale;\n for (const node of i18nNodes) {\n node.config.locale = locale;\n }\n}\n\n// packages/i18n/src/index.ts\nvar locales = {\n ar,\n az,\n bg,\n bs,\n ca,\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 lt,\n lv,\n nb,\n nl,\n pl,\n pt,\n ro,\n ru,\n sk,\n sl,\n sr,\n sv,\n tet,\n tg,\n th,\n tr,\n uk,\n uz,\n vi,\n zh,\n \"zh-TW\": zhTW,\n is,\n mn\n};\n\nexport { ar, az, bg, bs, ca, changeLocale, createI18nPlugin, cs, da, date, de, el, en, es, fa, fi, fr, fy, he, hr, hu, id, is, it, ja, kk, ko, list, locales, lt, lv, mn, nb, nl, order, pl, pt, ro, ru, sentence, sk, sl, sr, sv, tet, tg, th, tr, uk, uz, vi, zh, zhTW };\n//# sourceMappingURL=out.js.map\n//# sourceMappingURL=index.mjs.map","import { extend, camel, has, slugify, undefine, eq, token, clone, isObject, isPojo } from '@formkit/utils';\nimport { createMessage, warn, isConditional, isComponent, isDOM } from '@formkit/core';\n\n// packages/inputs/src/plugin.ts\nfunction createLibraryPlugin(...libraries) {\n const library = libraries.reduce(\n (merged, lib) => extend(merged, lib),\n {}\n );\n const 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// packages/inputs/src/props.ts\nvar runtimeProps = [\n \"classes\",\n \"config\",\n \"delay\",\n \"errors\",\n \"id\",\n \"index\",\n \"inputErrors\",\n \"library\",\n \"modelValue\",\n \"onUpdate:modelValue\",\n \"name\",\n \"number\",\n \"parent\",\n \"plugins\",\n \"sectionsSchema\",\n \"type\",\n \"validation\",\n \"validationLabel\",\n \"validationMessages\",\n \"validationRules\",\n // Runtime event props:\n \"onInput\",\n \"onInputRaw\",\n \"onUpdate:modelValue\",\n \"onNode\",\n \"onSubmit\",\n \"onSubmitInvalid\",\n \"onSubmitRaw\"\n];\nfunction isGroupOption(option2) {\n return option2 && typeof option2 === \"object\" && \"group\" in option2 && Array.isArray(option2.options);\n}\nfunction normalizeOptions(options2, i = { count: 1 }) {\n if (Array.isArray(options2)) {\n return options2.map(\n (option2) => {\n if (typeof option2 === \"string\" || typeof option2 === \"number\") {\n return {\n label: String(option2),\n value: String(option2)\n };\n }\n if (typeof option2 == \"object\") {\n if (\"group\" in option2) {\n option2.options = normalizeOptions(option2.options || [], i);\n return option2;\n } else if (\"value\" in option2 && typeof option2.value !== \"string\") {\n Object.assign(option2, {\n value: `__mask_${i.count++}`,\n __original: option2.value\n });\n }\n }\n return option2;\n }\n );\n }\n return Object.keys(options2).map((value) => {\n return {\n label: options2[value],\n value\n };\n });\n}\nfunction optionValue(options2, value, undefinedIfNotFound = false) {\n if (Array.isArray(options2)) {\n for (const option2 of options2) {\n if (typeof option2 !== \"object\" && option2)\n continue;\n if (isGroupOption(option2)) {\n const found = optionValue(option2.options, value, true);\n if (found !== void 0) {\n return found;\n }\n } else if (value == option2.value) {\n return \"__original\" in option2 ? option2.__original : option2.value;\n }\n }\n }\n return undefinedIfNotFound ? void 0 : value;\n}\nfunction shouldSelect(valueA, valueB) {\n if (valueA === null && valueB === void 0 || valueA === void 0 && valueB === null)\n return false;\n if (valueA == valueB)\n return true;\n if (isPojo(valueA) && isPojo(valueB))\n return eq(valueA, valueB);\n return false;\n}\nfunction options(node) {\n node.hook.prop((prop, next) => {\n var _a;\n if (prop.prop === \"options\") {\n if (typeof prop.value === \"function\") {\n node.props.optionsLoader = prop.value;\n prop.value = [];\n } else {\n (_a = node.props)._normalizeCounter ?? (_a._normalizeCounter = { count: 1 });\n prop.value = normalizeOptions(prop.value, node.props._normalizeCounter);\n }\n }\n return next(prop);\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction createSection(section, el, fragment2 = 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 } else {\n node.meta.section = section;\n }\n if (children.length && !node.children) {\n node.children = [\n ...children.map(\n (child) => typeof child === \"function\" ? child(extensions) : child\n )\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 ? /* @__PURE__ */ extendSchema(node, extensions[section]) : node\n };\n };\n extendable._s = section;\n return fragment2 ? /* @__PURE__ */ createRoot(extendable) : extendable;\n };\n}\n// @__NO_SIDE_EFFECTS__\nfunction createRoot(rootSection) {\n return (extensions) => {\n return [rootSection(extensions)];\n };\n}\nfunction isSchemaObject(schema) {\n return !!(schema && typeof schema === \"object\" && (\"$el\" in schema || \"$cmp\" in schema || \"$formkit\" in schema));\n}\n// @__NO_SIDE_EFFECTS__\nfunction extendSchema(schema, extension = {}) {\n if (typeof schema === \"string\") {\n return isSchemaObject(extension) || typeof extension === \"string\" ? extension : schema;\n } else if (Array.isArray(schema)) {\n return isSchemaObject(extension) ? extension : schema;\n }\n return extend(schema, extension);\n}\n\n// packages/inputs/src/sections/actions.ts\nvar actions = createSection(\"actions\", () => ({\n $el: \"div\",\n if: \"$actions\"\n}));\n\n// packages/inputs/src/sections/box.ts\nvar 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: void 0\n },\n else: {\n if: \"$help\",\n then: '$: \"help-\" + $id',\n else: void 0\n }\n }\n }\n}));\n\n// packages/inputs/src/sections/boxHelp.ts\nvar boxHelp = createSection(\"optionHelp\", () => ({\n $el: \"div\",\n if: \"$option.help\",\n attrs: {\n id: '$: \"help-\" + $option.attrs.id'\n }\n}));\n\n// packages/inputs/src/sections/boxInner.ts\nvar boxInner = createSection(\"inner\", \"span\");\n\n// packages/inputs/src/sections/boxLabel.ts\nvar boxLabel = createSection(\"label\", \"span\");\n\n// packages/inputs/src/sections/boxOption.ts\nvar boxOption = createSection(\"option\", () => ({\n $el: \"li\",\n for: [\"option\", \"$options\"],\n attrs: {\n \"data-disabled\": \"$option.attrs.disabled || $disabled || undefined\"\n }\n}));\n\n// packages/inputs/src/sections/boxOptions.ts\nvar boxOptions = createSection(\"options\", \"ul\");\n\n// packages/inputs/src/sections/boxWrapper.ts\nvar boxWrapper = createSection(\"wrapper\", () => ({\n $el: \"label\",\n attrs: {\n \"data-disabled\": {\n if: \"$options.length\",\n then: void 0,\n else: \"$disabled || undefined\"\n },\n \"data-checked\": {\n if: \"$options == undefined\",\n then: \"$fns.eq($_value, $onValue) || undefined\",\n else: \"$fns.isChecked($option.value) || undefined\"\n }\n }\n}));\n\n// packages/inputs/src/sections/buttonInput.ts\nvar 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// packages/inputs/src/sections/buttonLabel.ts\nvar buttonLabel = createSection(\"default\", null);\n\n// packages/inputs/src/sections/decorator.ts\nvar decorator = createSection(\"decorator\", () => ({\n $el: \"span\",\n attrs: {\n \"aria-hidden\": \"true\"\n }\n}));\n\n// packages/inputs/src/sections/fieldset.ts\nvar fieldset = createSection(\"fieldset\", () => ({\n $el: \"fieldset\",\n attrs: {\n id: \"$id\",\n \"aria-describedby\": {\n if: \"$help\",\n then: '$: \"help-\" + $id',\n else: void 0\n }\n }\n}));\n\n// packages/inputs/src/sections/fileInput.ts\nvar 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 \"aria-required\": \"$state.required || undefined\"\n }\n}));\n\n// packages/inputs/src/sections/fileItem.ts\nvar fileItem = createSection(\"fileItem\", () => ({\n $el: \"li\",\n for: [\"file\", \"$value\"]\n}));\n\n// packages/inputs/src/sections/fileList.ts\nvar fileList = createSection(\"fileList\", () => ({\n $el: \"ul\",\n if: \"$value.length\",\n attrs: {\n \"data-has-multiple\": \"$_hasMultipleFiles\"\n }\n}));\n\n// packages/inputs/src/sections/fileName.ts\nvar fileName = createSection(\"fileName\", () => ({\n $el: \"span\",\n attrs: {\n class: \"$classes.fileName\"\n }\n}));\n\n// packages/inputs/src/sections/fileRemove.ts\nvar fileRemove = createSection(\"fileRemove\", () => ({\n $el: \"button\",\n attrs: {\n type: \"button\",\n onClick: \"$handlers.resetFiles\"\n }\n}));\n\n// packages/inputs/src/sections/formInput.ts\nvar formInput = createSection(\"form\", () => ({\n $el: \"form\",\n bind: \"$attrs\",\n meta: {\n autoAnimate: true\n },\n attrs: {\n id: \"$id\",\n name: \"$node.name\",\n onSubmit: \"$handlers.submit\",\n \"data-loading\": \"$state.loading || undefined\"\n }\n}));\n\n// packages/inputs/src/sections/fragment.ts\nvar fragment = createSection(\"wrapper\", null, true);\n\n// packages/inputs/src/sections/help.ts\nvar help = createSection(\"help\", () => ({\n $el: \"div\",\n if: \"$help\",\n attrs: {\n id: '$: \"help-\" + $id'\n }\n}));\n\n// packages/inputs/src/sections/icon.ts\nvar icon = (sectionKey, el) => {\n return createSection(`${sectionKey}Icon`, () => {\n const rawIconProp = `_raw${sectionKey.charAt(0).toUpperCase()}${sectionKey.slice(1)}Icon`;\n return {\n if: `$${sectionKey}Icon && $${rawIconProp}`,\n $el: `${el ? el : \"span\"}`,\n attrs: {\n class: `$classes.${sectionKey}Icon + \" \" + $classes.icon`,\n innerHTML: `$${rawIconProp}`,\n onClick: `$handlers.iconClick(${sectionKey})`,\n role: `$fns.iconRole(${sectionKey})`,\n tabindex: `$fns.iconRole(${sectionKey}) === \"button\" && \"0\" || undefined`,\n for: {\n if: `${el === \"label\"}`,\n then: \"$id\"\n }\n }\n };\n })();\n};\n\n// packages/inputs/src/sections/inner.ts\nvar inner = createSection(\"inner\", \"div\");\n\n// packages/inputs/src/sections/label.ts\nvar label = createSection(\"label\", () => ({\n $el: \"label\",\n if: \"$label\",\n attrs: {\n for: \"$id\"\n }\n}));\n\n// packages/inputs/src/sections/legend.ts\nvar legend = createSection(\"legend\", () => ({\n $el: \"legend\",\n if: \"$label\"\n}));\n\n// packages/inputs/src/sections/message.ts\nvar 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// packages/inputs/src/sections/messages.ts\nvar messages = createSection(\"messages\", () => ({\n $el: \"ul\",\n if: \"$defaultMessagePlacement && $fns.length($messages)\"\n}));\n\n// packages/inputs/src/sections/noFiles.ts\nvar noFiles = createSection(\"noFiles\", () => ({\n $el: \"span\",\n if: \"$value == null || $value.length == 0\"\n}));\n\n// packages/inputs/src/sections/optGroup.ts\nvar optGroup = createSection(\"optGroup\", () => ({\n $el: \"optgroup\",\n bind: \"$option.attrs\",\n attrs: {\n label: \"$option.group\"\n }\n}));\n\n// packages/inputs/src/sections/option.ts\nvar option = createSection(\"option\", () => ({\n $el: \"option\",\n bind: \"$option.attrs\",\n attrs: {\n class: \"$classes.option\",\n value: \"$option.value\",\n selected: \"$fns.isSelected($option)\"\n }\n}));\n\n// packages/inputs/src/sections/optionSlot.ts\nvar optionSlot = createSection(\"options\", () => ({\n $el: null,\n if: \"$options.length\",\n for: [\"option\", \"$option.options || $options\"]\n}));\n\n// packages/inputs/src/sections/outer.ts\nvar outer = createSection(\"outer\", () => ({\n $el: \"div\",\n meta: {\n autoAnimate: true\n },\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-has-multiple\": \"$_hasMultipleFiles\",\n \"data-disabled\": '$: ($disabled !== \"false\" && $disabled) || undefined',\n \"data-empty\": \"$state.empty || undefined\",\n \"data-complete\": \"$state.complete || undefined\",\n \"data-invalid\": \"$state.invalid || 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}));\n\n// packages/inputs/src/sections/prefix.ts\nvar prefix = createSection(\"prefix\", null);\n\n// packages/inputs/src/sections/selectInput.ts\nvar selectInput = 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 \"aria-required\": \"$state.required || undefined\"\n }\n}));\n\n// packages/inputs/src/sections/submitInput.ts\nvar submitInput = createSection(\"submit\", () => ({\n $cmp: \"FormKit\",\n bind: \"$submitAttrs\",\n props: {\n type: \"submit\",\n label: \"$submitLabel\"\n }\n}));\n\n// packages/inputs/src/sections/suffix.ts\nvar suffix = createSection(\"suffix\", null);\n\n// packages/inputs/src/sections/textInput.ts\nvar 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 \"aria-required\": \"$state.required || undefined\"\n }\n}));\n\n// packages/inputs/src/sections/textareaInput.ts\nvar 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 \"aria-required\": \"$state.required || undefined\"\n },\n children: \"$initialValue\"\n}));\n\n// packages/inputs/src/sections/wrapper.ts\nvar wrapper = createSection(\"wrapper\", \"div\");\n\n// packages/inputs/src/features/renamesRadios.ts\nvar radioInstance = 0;\nfunction resetRadio() {\n radioInstance = 0;\n}\nfunction renamesRadios(node) {\n if (node.type === \"group\" || node.type === \"list\") {\n node.plugins.add(renamesRadiosPlugin);\n }\n}\nfunction renamesRadiosPlugin(node) {\n if (node.props.type === \"radio\") {\n node.addProps([\"altName\"]);\n node.props.altName = `${node.name}_${radioInstance++}`;\n }\n}\nfunction normalizeBoxes(node) {\n return function(prop, next) {\n if (prop.prop === \"options\" && Array.isArray(prop.value)) {\n prop.value = prop.value.map((option2) => {\n if (!option2.attrs?.id) {\n return extend(option2, {\n attrs: {\n id: `${node.props.id}-option-${slugify(String(option2.value))}`\n }\n });\n }\n return option2;\n });\n if (node.props.type === \"checkbox\" && !Array.isArray(node.value)) {\n if (node.isCreated) {\n node.input([], false);\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// packages/inputs/src/features/checkboxes.ts\nfunction toggleChecked(node, e) {\n const el = e.target;\n if (el instanceof HTMLInputElement) {\n const value = Array.isArray(node.props.options) ? optionValue(node.props.options, el.value) : el.value;\n if (Array.isArray(node.props.options) && node.props.options.length) {\n if (!Array.isArray(node._value)) {\n node.input([value]);\n } else if (!node._value.some((existingValue) => shouldSelect(value, existingValue))) {\n node.input([...node._value, value]);\n } else {\n node.input(\n node._value.filter(\n (existingValue) => !shouldSelect(value, existingValue)\n )\n );\n }\n } else {\n if (el.checked) {\n node.input(node.props.onValue);\n } else {\n node.input(node.props.offValue);\n }\n }\n }\n}\nfunction isChecked(node, value) {\n node.context?.value;\n node.context?._value;\n if (Array.isArray(node._value)) {\n return node._value.some(\n (existingValue) => shouldSelect(optionValue(node.props.options, value), existingValue)\n );\n }\n return false;\n}\nfunction checkboxes(node) {\n node.on(\"created\", () => {\n if (node.context?.handlers) {\n node.context.handlers.toggleChecked = toggleChecked.bind(null, node);\n }\n if (node.context?.fns) {\n node.context.fns.isChecked = isChecked.bind(null, node);\n }\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// packages/inputs/src/features/icon.ts\nfunction defaultIcon(sectionKey, defaultIcon2) {\n return (node) => {\n if (node.props[`${sectionKey}Icon`] === void 0) {\n node.props[`${sectionKey}Icon`] = defaultIcon2.startsWith(\"<svg\") ? defaultIcon2 : `default:${defaultIcon2}`;\n }\n };\n}\nfunction disables(node) {\n node.on(\"created\", () => {\n if (\"disabled\" in node.props) {\n node.props.disabled = undefine(node.props.disabled);\n node.config.disabled = undefine(node.props.disabled);\n }\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}\nfunction localize(key, value) {\n return (node) => {\n node.store.set(\n /* @__PURE__ */ createMessage({\n key,\n type: \"ui\",\n value: value || key,\n meta: {\n localize: true,\n i18nArgs: [node]\n }\n })\n );\n };\n}\n\n// packages/inputs/src/features/files.ts\nvar isBrowser = typeof window !== \"undefined\";\nfunction removeHover(e) {\n if (e.target instanceof HTMLElement && e.target.hasAttribute(\"data-file-hover\")) {\n e.target.removeAttribute(\"data-file-hover\");\n }\n}\nfunction preventStrayDrop(type, e) {\n if (!(e.target instanceof HTMLInputElement)) {\n e.preventDefault();\n } else if (type === \"dragover\") {\n e.target.setAttribute(\"data-file-hover\", \"true\");\n }\n if (type === \"drop\") {\n removeHover(e);\n }\n}\nfunction files(node) {\n localize(\"noFiles\", \"Select file\")(node);\n localize(\"removeAll\", \"Remove all\")(node);\n localize(\"remove\")(node);\n node.addProps([\"_hasMultipleFiles\"]);\n if (isBrowser) {\n if (!window._FormKit_File_Drop) {\n window.addEventListener(\n \"dragover\",\n preventStrayDrop.bind(null, \"dragover\")\n );\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(\"input\", ({ payload: value }) => {\n node.props._hasMultipleFiles = Array.isArray(value) && value.length > 1 ? true : void 0;\n });\n node.on(\"reset\", () => {\n if (node.props.id && isBrowser) {\n const el = document.getElementById(node.props.id);\n if (el)\n el.value = \"\";\n }\n });\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 el?.focus();\n }\n };\n node.context.handlers.files = (e) => {\n const files2 = [];\n if (e.target instanceof HTMLInputElement && e.target.files) {\n for (let i = 0; i < e.target.files.length; i++) {\n let file2;\n if (file2 = e.target.files.item(i)) {\n files2.push({ name: file2.name, file: file2 });\n }\n }\n node.input(files2);\n }\n if (node.context)\n node.context.files = files2;\n if (typeof node.props.attrs?.onChange === \"function\") {\n node.props.attrs?.onChange(e);\n }\n };\n });\n}\nvar loading = /* @__PURE__ */ createMessage({\n key: \"loading\",\n value: true,\n visible: false\n});\nasync function handleSubmit(node, submitEvent) {\n const submitNonce = Math.random();\n node.props._submitNonce = submitNonce;\n submitEvent.preventDefault();\n await node.settled;\n if (node.ledger.value(\"validating\")) {\n node.store.set(loading);\n await node.ledger.settled(\"validating\");\n node.store.remove(\"loading\");\n if (node.props._submitNonce !== submitNonce)\n return;\n }\n const setSubmitted = (n) => n.store.set(\n /* @__PURE__ */ createMessage({\n key: \"submitted\",\n value: true,\n visible: false\n })\n );\n node.walk(setSubmitted);\n setSubmitted(node);\n node.emit(\"submit-raw\");\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 if (node.props.incompleteMessage !== false) {\n setIncompleteMessage(node);\n }\n } else {\n if (typeof node.props.onSubmit === \"function\") {\n const retVal = node.props.onSubmit(\n node.hook.submit.dispatch(clone(node.value)),\n node\n );\n if (retVal instanceof Promise) {\n const autoDisable = node.props.disabled === void 0 && node.props.submitBehavior !== \"live\";\n if (autoDisable)\n node.props.disabled = true;\n node.store.set(loading);\n await retVal;\n if (autoDisable)\n node.props.disabled = false;\n node.store.remove(\"loading\");\n }\n } else {\n if (submitEvent.target instanceof HTMLFormElement) {\n submitEvent.target.submit();\n }\n }\n }\n}\nfunction setIncompleteMessage(node) {\n node.store.set(\n /* @__PURE__ */ createMessage({\n blocking: false,\n key: `incomplete`,\n meta: {\n localize: node.props.incompleteMessage === void 0,\n i18nArgs: [{ node }],\n showAsMessage: true\n },\n type: \"ui\",\n value: node.props.incompleteMessage || \"Form incomplete.\"\n })\n );\n}\nfunction form(node) {\n var _a;\n node.props.isForm = true;\n node.ledger.count(\"validating\", (m) => m.key === \"validating\");\n (_a = node.props).submitAttrs ?? (_a.submitAttrs = {\n disabled: node.props.disabled\n });\n node.on(\"prop:disabled\", ({ payload: disabled }) => {\n node.props.submitAttrs = { ...node.props.submitAttrs, disabled };\n });\n node.on(\"created\", () => {\n if (node.context?.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(\"prop:incompleteMessage\", () => {\n if (node.store.incomplete)\n setIncompleteMessage(node);\n });\n node.on(\"settled:blocking\", () => node.store.remove(\"incomplete\"));\n}\n\n// packages/inputs/src/features/ignores.ts\nfunction ignore(node) {\n if (node.props.ignore === void 0) {\n node.props.ignore = true;\n node.parent = null;\n }\n}\n\n// packages/inputs/src/features/initialValue.ts\nfunction initialValue(node) {\n node.on(\"created\", () => {\n if (node.context) {\n node.context.initialValue = node.value || \"\";\n }\n });\n}\n\n// packages/inputs/src/features/casts.ts\nfunction casts(node) {\n if (typeof node.props.number === \"undefined\")\n return;\n const strict = [\"number\", \"range\", \"hidden\"].includes(node.props.type);\n node.hook.input((value, next) => {\n if (value === \"\")\n return next(void 0);\n const numericValue = node.props.number === \"integer\" ? parseInt(value) : parseFloat(value);\n if (!Number.isFinite(numericValue))\n return strict ? next(void 0) : next(value);\n return next(numericValue);\n });\n}\nfunction toggleChecked2(node, event) {\n if (event.target instanceof HTMLInputElement) {\n node.input(optionValue(node.props.options, event.target.value));\n }\n}\nfunction isChecked2(node, value) {\n node.context?.value;\n node.context?._value;\n return shouldSelect(optionValue(node.props.options, value), node._value);\n}\nfunction radios(node) {\n node.on(\"created\", () => {\n if (!Array.isArray(node.props.options)) {\n warn(350, {\n node,\n inputType: \"radio\"\n });\n }\n if (node.context?.handlers) {\n node.context.handlers.toggleChecked = toggleChecked2.bind(null, node);\n }\n if (node.context?.fns) {\n node.context.fns.isChecked = isChecked2.bind(null, node);\n }\n });\n node.hook.prop(normalizeBoxes(node));\n}\nfunction isSelected(node, option2) {\n if (isGroupOption(option2))\n return false;\n node.context && node.context.value;\n const optionValue2 = \"__original\" in option2 ? option2.__original : option2.value;\n return Array.isArray(node._value) ? node._value.some((optionA) => shouldSelect(optionA, optionValue2)) : (node._value === void 0 || node._value === null && !containsValue(node.props.options, null)) && option2.attrs && option2.attrs[\"data-is-placeholder\"] ? true : shouldSelect(optionValue2, node._value);\n}\nfunction containsValue(options2, value) {\n return options2.some((option2) => {\n if (isGroupOption(option2)) {\n return containsValue(option2.options, value);\n } else {\n return (\"__original\" in option2 ? option2.__original : option2.value) === value;\n }\n });\n}\nasync function deferChange(node, e) {\n if (typeof node.props.attrs?.onChange === \"function\") {\n await new Promise((r) => setTimeout(r, 0));\n await node.settled;\n node.props.attrs.onChange(e);\n }\n}\nfunction selectInput2(node, e) {\n const target = e.target;\n const value = target.hasAttribute(\"multiple\") ? Array.from(target.selectedOptions).map(\n (o) => optionValue(node.props.options, o.value)\n ) : optionValue(node.props.options, target.value);\n node.input(value);\n}\nfunction applyPlaceholder(options2, placeholder) {\n if (!options2.some(\n (option2) => option2.attrs && option2.attrs[\"data-is-placeholder\"]\n )) {\n return [\n {\n label: placeholder,\n value: \"\",\n attrs: {\n hidden: true,\n disabled: true,\n \"data-is-placeholder\": \"true\"\n }\n },\n ...options2\n ];\n }\n return options2;\n}\nfunction firstValue(options2) {\n const option2 = options2.length > 0 ? options2[0] : void 0;\n if (!option2)\n return void 0;\n if (isGroupOption(option2))\n return firstValue(option2.options);\n return \"__original\" in option2 ? option2.__original : option2.value;\n}\nfunction select(node) {\n node.on(\"created\", () => {\n const isMultiple = undefine(node.props.attrs?.multiple);\n if (!isMultiple && node.props.placeholder && 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(\n node.props.options,\n node.props.placeholder\n );\n }\n if (isMultiple) {\n if (node.value === void 0) {\n node.input([], false);\n }\n } else if (node.context && !node.context.options) {\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 (node.context?.handlers) {\n node.context.handlers.selectInput = selectInput2.bind(null, node);\n node.context.handlers.onChange = deferChange.bind(null, node);\n }\n if (node.context?.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(\n (option2) => {\n if (option2.attrs && \"data-is-placeholder\" in option2.attrs)\n return false;\n const optionValue2 = \"__original\" in option2 ? option2.__original : option2.value;\n return eq(value, optionValue2);\n }\n );\n return placeholder && !hasMatchingValue ? true : void 0;\n };\n }\n });\n node.hook.input((value, next) => {\n if (!node.props.placeholder && value === void 0 && Array.isArray(node.props?.options) && node.props.options.length && !undefine(node.props?.attrs?.multiple)) {\n value = firstValue(node.props.options);\n }\n return next(value);\n });\n}\n\n// packages/inputs/src/compose.ts\n// @__NO_SIDE_EFFECTS__\nfunction isSlotCondition(node) {\n if (isConditional(node) && node.if && node.if.startsWith(\"$slots.\") && typeof node.then === \"string\" && node.then.startsWith(\"$slots.\") && \"else\" in node) {\n return true;\n }\n return false;\n}\n// @__NO_SIDE_EFFECTS__\nfunction findSection(schema, target) {\n return eachSection(\n schema,\n (section, sectionCondition, parent) => {\n if (section.meta?.section === target) {\n return [parent, sectionCondition];\n }\n return;\n },\n true\n ) ?? [false, false];\n}\nfunction eachSection(schema, callback, stopOnCallbackReturn = false, schemaParent) {\n if (Array.isArray(schema)) {\n for (const node of schema) {\n const callbackReturn = eachSection(\n node,\n callback,\n stopOnCallbackReturn,\n schema\n );\n if (callbackReturn && stopOnCallbackReturn) {\n return callbackReturn;\n }\n }\n return;\n }\n if (isSection(schema)) {\n const callbackReturn = callback(schema.else, schema, schemaParent);\n if (callbackReturn && stopOnCallbackReturn) {\n return callbackReturn;\n }\n return eachSection(schema.else, callback, stopOnCallbackReturn, schema);\n } else if ((isComponent(schema) || isDOM(schema)) && schema.children) {\n return eachSection(\n schema.children,\n callback,\n stopOnCallbackReturn\n );\n } else if (isConditional(schema)) {\n let callbackReturn = void 0;\n if (schema.then && typeof schema.then !== \"string\") {\n callbackReturn = eachSection(\n schema.then,\n callback,\n stopOnCallbackReturn,\n schema\n );\n }\n if (!callbackReturn && schema.else && typeof schema.else !== \"string\") {\n callbackReturn = eachSection(\n schema.else,\n callback,\n stopOnCallbackReturn,\n schema\n );\n }\n if (callbackReturn && stopOnCallbackReturn) {\n return callbackReturn;\n }\n }\n}\nfunction isSection(section) {\n if (isConditional(section) && typeof section.then === \"string\" && section.else && typeof section.else !== \"string\" && !Array.isArray(section.else) && !isConditional(section.else) && section.else.meta?.section) {\n return true;\n }\n return false;\n}\n// @__NO_SIDE_EFFECTS__\nfunction useSchema(inputSection, sectionsSchema = {}) {\n const schema = /* @__PURE__ */ outer(\n /* @__PURE__ */ wrapper(\n /* @__PURE__ */ label(\"$label\"),\n /* @__PURE__ */ inner(/* @__PURE__ */ icon(\"prefix\"), /* @__PURE__ */ prefix(), inputSection(), /* @__PURE__ */ suffix(), /* @__PURE__ */ icon(\"suffix\"))\n ),\n /* @__PURE__ */ help(\"$help\"),\n /* @__PURE__ */ messages(/* @__PURE__ */ message(\"$message.value\"))\n );\n return (propSectionsSchema = {}) => schema(extend(sectionsSchema, propSectionsSchema));\n}\n// @__NO_SIDE_EFFECTS__\nfunction $attrs(attrs, section) {\n const extendable = (extensions) => {\n const node = section(extensions);\n const attributes = typeof attrs === \"function\" ? attrs() : attrs;\n if (!isObject(attributes))\n return node;\n if (/* @__PURE__ */ isSlotCondition(node) && isDOM(node.else)) {\n node.else.attrs = { ...node.else.attrs, ...attributes };\n } else if (isDOM(node)) {\n node.attrs = { ...node.attrs, ...attributes };\n }\n return node;\n };\n extendable._s = section._s;\n return extendable;\n}\n// @__NO_SIDE_EFFECTS__\nfunction $if(condition, then, otherwise) {\n const extendable = (extensions) => {\n const node = then(extensions);\n if (otherwise || isSchemaObject(node) && \"if\" in node || /* @__PURE__ */ 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 } else if (/* @__PURE__ */ isSlotCondition(node)) {\n Object.assign(node.else, { if: condition });\n } else if (isSchemaObject(node)) {\n Object.assign(node, { if: condition });\n }\n return node;\n };\n extendable._s = token();\n return extendable;\n}\n// @__NO_SIDE_EFFECTS__\nfunction $for(varName, inName, section) {\n return (extensions) => {\n const node = section(extensions);\n if (/* @__PURE__ */ isSlotCondition(node)) {\n Object.assign(node.else, { for: [varName, inName] });\n } else if (isSchemaObject(node)) {\n Object.assign(node, { for: [varName, inName] });\n }\n return node;\n };\n}\n// @__NO_SIDE_EFFECTS__\nfunction $extend(section, extendWith) {\n const extendable = (extensions) => {\n const node = section({});\n if (/* @__PURE__ */ isSlotCondition(node)) {\n if (Array.isArray(node.else))\n return node;\n node.else = extendSchema(\n extendSchema(node.else, extendWith),\n section._s ? extensions[section._s] : {}\n );\n return node;\n }\n return extendSchema(\n extendSchema(node, extendWith),\n section._s ? extensions[section._s] : {}\n );\n };\n extendable._s = section._s;\n return extendable;\n}\n// @__NO_SIDE_EFFECTS__\nfunction $root(section) {\n warn(800, \"$root\");\n return createRoot(section);\n}\nfunction resetCounts() {\n resetRadio();\n}\n\n// packages/inputs/src/inputs/button.ts\nvar button = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: /* @__PURE__ */ outer(\n /* @__PURE__ */ messages(/* @__PURE__ */ message(\"$message.value\")),\n /* @__PURE__ */ wrapper(\n /* @__PURE__ */ buttonInput(\n /* @__PURE__ */ icon(\"prefix\"),\n /* @__PURE__ */ prefix(),\n /* @__PURE__ */ buttonLabel(\"$label || $ui.submit.value\"),\n /* @__PURE__ */ suffix(),\n /* @__PURE__ */ icon(\"suffix\")\n )\n ),\n /* @__PURE__ */ help(\"$help\")\n ),\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 * A key to use for memoizing the schema. This is used to prevent the schema\n * from needing to be stringified when performing a memo lookup.\n */\n schemaMemoKey: \"h6st4epl3j8\"\n};\n\n// packages/inputs/src/inputs/checkbox.ts\nvar checkbox = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: /* @__PURE__ */ outer(\n $if(\n \"$options == undefined\",\n /**\n * Single checkbox structure.\n */\n /* @__PURE__ */ boxWrapper(\n /* @__PURE__ */ boxInner(/* @__PURE__ */ prefix(), /* @__PURE__ */ box(), /* @__PURE__ */ decorator(/* @__PURE__ */ icon(\"decorator\")), /* @__PURE__ */ suffix()),\n $extend(/* @__PURE__ */ boxLabel(\"$label\"), {\n if: \"$label\"\n })\n ),\n /**\n * Multi checkbox structure.\n */\n /* @__PURE__ */ fieldset(\n /* @__PURE__ */ legend(\"$label\"),\n /* @__PURE__ */ help(\"$help\"),\n /* @__PURE__ */ boxOptions(\n /* @__PURE__ */ boxOption(\n /* @__PURE__ */ boxWrapper(\n /* @__PURE__ */ boxInner(\n /* @__PURE__ */ prefix(),\n $extend(/* @__PURE__ */ box(), {\n bind: \"$option.attrs\",\n attrs: {\n id: \"$option.attrs.id\",\n value: \"$option.value\",\n checked: \"$fns.isChecked($option.value)\"\n }\n }),\n /* @__PURE__ */ decorator(/* @__PURE__ */ icon(\"decorator\")),\n /* @__PURE__ */ suffix()\n ),\n $extend(/* @__PURE__ */ boxLabel(\"$option.label\"), {\n if: \"$option.label\"\n })\n ),\n /* @__PURE__ */ boxHelp(\"$option.help\")\n )\n )\n )\n ),\n // Help text only goes under the input when it is a single.\n $if(\"$options == undefined && $help\", /* @__PURE__ */ help(\"$help\")),\n /* @__PURE__ */ messages(/* @__PURE__ */ message(\"$message.value\"))\n ),\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 * The key used to memoize the schema.\n */\n schemaMemoKey: \"qje02tb3gu8\"\n};\n\n// packages/inputs/src/inputs/file.ts\nvar file = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: /* @__PURE__ */ outer(\n /* @__PURE__ */ wrapper(\n /* @__PURE__ */ label(\"$label\"),\n /* @__PURE__ */ inner(\n /* @__PURE__ */ icon(\"prefix\", \"label\"),\n /* @__PURE__ */ prefix(),\n /* @__PURE__ */ fileInput(),\n /* @__PURE__ */ fileList(\n /* @__PURE__ */ fileItem(\n /* @__PURE__ */ icon(\"fileItem\"),\n /* @__PURE__ */ fileName(\"$file.name\"),\n $if(\n \"$value.length === 1\",\n /* @__PURE__ */ fileRemove(\n /* @__PURE__ */ icon(\"fileRemove\"),\n '$ui.remove.value + \" \" + $file.name'\n )\n )\n )\n ),\n $if(\"$value.length > 1\", /* @__PURE__ */ fileRemove(\"$ui.removeAll.value\")),\n /* @__PURE__ */ noFiles(/* @__PURE__ */ icon(\"noFiles\"), \"$ui.noFiles.value\"),\n /* @__PURE__ */ suffix(),\n /* @__PURE__ */ icon(\"suffix\")\n )\n ),\n /* @__PURE__ */ help(\"$help\"),\n /* @__PURE__ */ messages(/* @__PURE__ */ message(\"$message.value\"))\n ),\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 * The key used to memoize the schema.\n */\n schemaMemoKey: \"9kqc4852fv8\"\n};\n\n// packages/inputs/src/inputs/form.ts\nvar form2 = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: /* @__PURE__ */ formInput(\n \"$slots.default\",\n /* @__PURE__ */ messages(/* @__PURE__ */ message(\"$message.value\")),\n /* @__PURE__ */ actions(/* @__PURE__ */ submitInput())\n ),\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, disables],\n /**\n * The key used to memoize the schema.\n */\n schemaMemoKey: \"5bg016redjo\"\n};\n\n// packages/inputs/src/inputs/group.ts\nvar group = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: /* @__PURE__ */ 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, renamesRadios]\n};\n\n// packages/inputs/src/inputs/hidden.ts\nvar hidden = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: /* @__PURE__ */ 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: [casts]\n};\n\n// packages/inputs/src/inputs/list.ts\nvar list = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: /* @__PURE__ */ 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: [\"sync\", \"dynamic\"],\n /**\n * Additional features that should be added to your input\n */\n features: [disables, renamesRadios]\n};\n\n// packages/inputs/src/inputs/meta.ts\nvar meta = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: /* @__PURE__ */ fragment(),\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// packages/inputs/src/inputs/radio.ts\nvar radio = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: /* @__PURE__ */ outer(\n $if(\n \"$options == undefined\",\n /**\n * Single radio structure.\n */\n /* @__PURE__ */ boxWrapper(\n /* @__PURE__ */ boxInner(/* @__PURE__ */ prefix(), /* @__PURE__ */ box(), /* @__PURE__ */ decorator(/* @__PURE__ */ icon(\"decorator\")), /* @__PURE__ */ suffix()),\n $extend(/* @__PURE__ */ boxLabel(\"$label\"), {\n if: \"$label\"\n })\n ),\n /**\n * Multi radio structure.\n */\n /* @__PURE__ */ fieldset(\n /* @__PURE__ */ legend(\"$label\"),\n /* @__PURE__ */ help(\"$help\"),\n /* @__PURE__ */ boxOptions(\n /* @__PURE__ */ boxOption(\n /* @__PURE__ */ boxWrapper(\n /* @__PURE__ */ boxInner(\n /* @__PURE__ */ prefix(),\n $extend(/* @__PURE__ */ box(), {\n bind: \"$option.attrs\",\n attrs: {\n id: \"$option.attrs.id\",\n value: \"$option.value\",\n checked: \"$fns.isChecked($option.value)\"\n }\n }),\n /* @__PURE__ */ decorator(/* @__PURE__ */ icon(\"decorator\")),\n /* @__PURE__ */ suffix()\n ),\n $extend(/* @__PURE__ */ boxLabel(\"$option.label\"), {\n if: \"$option.label\"\n })\n ),\n /* @__PURE__ */ boxHelp(\"$option.help\")\n )\n )\n )\n ),\n // Help text only goes under the input when it is a single.\n $if(\"$options == undefined && $help\", /* @__PURE__ */ help(\"$help\")),\n /* @__PURE__ */ messages(/* @__PURE__ */ message(\"$message.value\"))\n ),\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 * The key used to memoize the schema.\n */\n schemaMemoKey: \"qje02tb3gu8\"\n};\n\n// packages/inputs/src/inputs/select.ts\nvar select2 = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: /* @__PURE__ */ outer(\n /* @__PURE__ */ wrapper(\n /* @__PURE__ */ label(\"$label\"),\n /* @__PURE__ */ inner(\n /* @__PURE__ */ icon(\"prefix\"),\n /* @__PURE__ */ prefix(),\n /* @__PURE__ */ selectInput(\n $if(\n \"$slots.default\",\n () => \"$slots.default\",\n /* @__PURE__ */ optionSlot(\n $if(\n \"$option.group\",\n /* @__PURE__ */ optGroup(/* @__PURE__ */ optionSlot(/* @__PURE__ */ option(\"$option.label\"))),\n /* @__PURE__ */ option(\"$option.label\")\n )\n )\n )\n ),\n $if(\"$attrs.multiple !== undefined\", () => \"\", /* @__PURE__ */ icon(\"select\")),\n /* @__PURE__ */ suffix(),\n /* @__PURE__ */ icon(\"suffix\")\n )\n ),\n /* @__PURE__ */ help(\"$help\"),\n /* @__PURE__ */ messages(/* @__PURE__ */ message(\"$message.value\"))\n ),\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, defaultIcon(\"select\", \"select\")],\n /**\n * The key used to memoize the schema.\n */\n schemaMemoKey: \"cb119h43krg\"\n};\n\n// packages/inputs/src/inputs/textarea.ts\nvar textarea = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: /* @__PURE__ */ outer(\n /* @__PURE__ */ wrapper(\n /* @__PURE__ */ label(\"$label\"),\n /* @__PURE__ */ inner(\n /* @__PURE__ */ icon(\"prefix\", \"label\"),\n /* @__PURE__ */ prefix(),\n /* @__PURE__ */ textareaInput(),\n /* @__PURE__ */ suffix(),\n /* @__PURE__ */ icon(\"suffix\")\n )\n ),\n /* @__PURE__ */ help(\"$help\"),\n /* @__PURE__ */ messages(/* @__PURE__ */ message(\"$message.value\"))\n ),\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 * The key used to memoize the schema.\n */\n schemaMemoKey: \"b1n0td79m9g\"\n};\n\n// packages/inputs/src/inputs/text.ts\nvar text = {\n /**\n * The actual schema of the input, or a function that returns the schema.\n */\n schema: /* @__PURE__ */ outer(\n /* @__PURE__ */ wrapper(\n /* @__PURE__ */ label(\"$label\"),\n /* @__PURE__ */ inner(\n /* @__PURE__ */ icon(\"prefix\", \"label\"),\n /* @__PURE__ */ prefix(),\n /* @__PURE__ */ textInput(),\n /* @__PURE__ */ suffix(),\n /* @__PURE__ */ icon(\"suffix\")\n )\n ),\n /* @__PURE__ */ help(\"$help\"),\n /* @__PURE__ */ messages(/* @__PURE__ */ message(\"$message.value\"))\n ),\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: [casts],\n /**\n * The key used to memoize the schema.\n */\n schemaMemoKey: \"c3cc4kflsg\"\n};\n\n// packages/inputs/src/index.ts\nvar inputs = {\n button,\n submit: button,\n checkbox,\n file,\n form: form2,\n group,\n hidden,\n list,\n meta,\n radio,\n select: select2,\n textarea,\n 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, boxInner, boxLabel, boxOption, boxOptions, boxWrapper, button, buttonInput, buttonLabel, casts, checkbox, checkboxes, text as color, createLibraryPlugin, createSection, text as date, text as datetimeLocal, decorator, defaultIcon, disables as disablesChildren, eachSection, text as email, extendSchema, fieldset, file, fileInput, fileItem, fileList, fileName, fileRemove, files, findSection, form2 as form, formInput, form as forms, fragment, group, help, hidden, icon, ignore as ignores, initialValue, inner, inputs, isGroupOption, isSchemaObject, isSlotCondition, label, legend, list, localize, message, messages, meta, text as month, noFiles, normalizeBoxes, normalizeOptions, text as number, optGroup, option, optionSlot, options, outer, text as password, prefix, radio, radios, text as range, renamesRadios, resetCounts, resetRadio, runtimeProps, text as search, select2 as select, selectInput, select 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//# sourceMappingURL=out.js.map\n//# sourceMappingURL=index.mjs.map","import { FORMKIT_VERSION } from '@formkit/core';\n\n// packages/themes/src/index.ts\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 } 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, sectionKey2) {\n return addClassesBySection(node, sectionKey2, classesObject);\n };\n });\n return classesBySectionKey;\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}\nvar documentStyles = void 0;\nvar documentThemeLinkTag = null;\nvar themeDidLoad;\nvar themeHasLoaded = false;\nvar themeWasRequested = false;\nvar themeLoaded = /* @__PURE__ */ new Promise((res) => {\n themeDidLoad = () => {\n themeHasLoaded = true;\n res();\n };\n});\nvar isClient = typeof window !== \"undefined\" && typeof fetch !== \"undefined\";\ndocumentStyles = isClient ? /* @__PURE__ */ getComputedStyle(document.documentElement) : void 0;\nvar iconRegistry = {};\nvar iconRequests = {};\nfunction createThemePlugin(theme, icons, iconLoaderUrl, iconLoader) {\n if (icons) {\n Object.assign(iconRegistry, icons);\n }\n if (isClient && !themeWasRequested && documentStyles?.getPropertyValue(\"--formkit-theme\")) {\n themeDidLoad();\n themeWasRequested = true;\n } else if (theme && !themeWasRequested && isClient) {\n loadTheme(theme);\n } else if (!themeWasRequested && isClient) {\n themeDidLoad();\n }\n const themePlugin = function themePlugin2(node) {\n node.addProps([\"iconLoader\", \"iconLoaderUrl\"]);\n node.props.iconHandler = createIconHandler(\n node.props?.iconLoader ? node.props.iconLoader : iconLoader,\n node.props?.iconLoaderUrl ? node.props.iconLoaderUrl : iconLoaderUrl\n );\n loadIconPropIcons(node, node.props.iconHandler);\n node.on(\"created\", () => {\n if (node?.context?.handlers) {\n node.context.handlers.iconClick = (sectionKey) => {\n const clickHandlerProp = `on${sectionKey.charAt(0).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 void 0;\n };\n }\n if (node?.context?.fns) {\n node.context.fns.iconRole = (sectionKey) => {\n const clickHandlerProp = `on${sectionKey.charAt(0).toUpperCase()}${sectionKey.slice(1)}IconClick`;\n return typeof node.props[clickHandlerProp] === \"function\" ? \"button\" : null;\n };\n }\n });\n };\n themePlugin.iconHandler = createIconHandler(iconLoader, iconLoaderUrl);\n return themePlugin;\n}\nfunction loadTheme(theme) {\n if (!theme || !isClient || typeof getComputedStyle !== \"function\") {\n return;\n }\n themeWasRequested = true;\n documentThemeLinkTag = document.getElementById(\"formkit-theme\");\n if (theme && // if we have a window object\n isClient && // we don't have an existing theme OR the theme being set up is different\n (!documentStyles?.getPropertyValue(\"--formkit-theme\") && !documentThemeLinkTag || documentThemeLinkTag?.getAttribute(\"data-theme\") && documentThemeLinkTag?.getAttribute(\"data-theme\") !== theme)) {\n const formkitVersion = FORMKIT_VERSION.startsWith(\"__\") ? \"latest\" : 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);\n themeDidLoad();\n };\n document.head.appendChild(link);\n link.href = themeUrl;\n if (documentThemeLinkTag) {\n documentThemeLinkTag.remove();\n }\n }\n}\nfunction createIconHandler(iconLoader, iconLoaderUrl) {\n return (iconName) => {\n if (typeof iconName !== \"string\")\n return;\n if (iconName.startsWith(\"<svg\")) {\n return iconName;\n }\n const isDefault = iconName.startsWith(\"default:\");\n iconName = isDefault ? iconName.split(\":\")[1] : iconName;\n const iconWasAlreadyLoaded = iconName in iconRegistry;\n let loadedIcon = void 0;\n if (iconWasAlreadyLoaded) {\n return iconRegistry[iconName];\n } else if (!iconRequests[iconName]) {\n loadedIcon = getIconFromStylesheet(iconName);\n loadedIcon = isClient && typeof loadedIcon === \"undefined\" ? Promise.resolve(loadedIcon) : loadedIcon;\n if (loadedIcon instanceof Promise) {\n iconRequests[iconName] = loadedIcon.then((iconValue) => {\n if (!iconValue && typeof iconName === \"string\" && !isDefault) {\n return loadedIcon = typeof iconLoader === \"function\" ? iconLoader(iconName) : getRemoteIcon(iconName, iconLoaderUrl);\n }\n return iconValue;\n }).then((finalIcon) => {\n if (typeof iconName === \"string\") {\n iconRegistry[isDefault ? `default:${iconName}` : iconName] = finalIcon;\n }\n return finalIcon;\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 } else {\n return themeLoaded.then(() => {\n return loadStylesheetIcon(iconName);\n });\n }\n}\nfunction loadStylesheetIcon(iconName) {\n const cssVarIcon = documentStyles?.getPropertyValue(`--fk-icon-${iconName}`);\n if (cssVarIcon) {\n const icon = atob(cssVarIcon);\n if (icon.startsWith(\"<svg\")) {\n iconRegistry[iconName] = icon;\n return icon;\n }\n }\n return void 0;\n}\nfunction getRemoteIcon(iconName, iconLoaderUrl) {\n const formkitVersion = FORMKIT_VERSION.startsWith(\"__\") ? \"latest\" : FORMKIT_VERSION;\n const fetchUrl = typeof iconLoaderUrl === \"function\" ? iconLoaderUrl(iconName) : `https://cdn.jsdelivr.net/npm/@formkit/icons@${formkitVersion}/dist/icons/${iconName}.svg`;\n if (!isClient)\n return void 0;\n return fetch(`${fetchUrl}`).then(async (r) => {\n const icon = await r.text();\n if (icon.startsWith(\"<svg\")) {\n return icon;\n }\n return void 0;\n }).catch((e) => {\n console.error(e);\n return void 0;\n });\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}\nfunction loadPropIcon(node, iconHandler, sectionKey) {\n const iconName = node.props[sectionKey];\n const loadedIcon = iconHandler(iconName);\n const rawIconProp = `_raw${sectionKey.charAt(0).toUpperCase()}${sectionKey.slice(1)}`;\n const clickHandlerProp = `on${sectionKey.charAt(0).toUpperCase()}${sectionKey.slice(1)}Click`;\n node.addProps([rawIconProp, clickHandlerProp]);\n node.on(`prop:${sectionKey}`, reloadIcon);\n if (loadedIcon instanceof Promise) {\n return loadedIcon.then((svg) => {\n node.props[rawIconProp] = svg;\n });\n } else {\n node.props[rawIconProp] = loadedIcon;\n }\n return;\n}\nfunction reloadIcon(event) {\n const node = event.origin;\n const iconName = event.payload;\n const iconHandler = node?.props?.iconHandler;\n const sectionKey = event.name.split(\":\")[1];\n const rawIconProp = `_raw${sectionKey.charAt(0).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 } else {\n node.props[rawIconProp] = loadedIcon;\n }\n }\n}\n\nexport { createIconHandler, createThemePlugin, generateClasses, iconRegistry };\n//# sourceMappingURL=out.js.map\n//# sourceMappingURL=index.mjs.map","import { errorHandler, warningHandler } from '@formkit/core';\n\n// packages/dev/src/index.ts\nvar 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: ({\n data: [node, property]\n }) => `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};\nvar 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: ({\n data: { node, inputType }\n }) => `Invalid options prop for ${node.name} input (${inputType}). See https://formkit.com/inputs/${inputType}`,\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};\nvar 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};\nvar registered = false;\nfunction register() {\n if (!registered) {\n errorHandler(decodeErrors);\n warningHandler(decodeWarnings);\n registered = true;\n }\n}\nvar 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};\n\nexport { errors, register, warnings };\n//# sourceMappingURL=out.js.map\n//# sourceMappingURL=index.mjs.map","import { defineComponent, getCurrentInstance, markRaw, watch, watchEffect, reactive, onMounted, onUnmounted, ref, provide, h, inject, computed, toRef, onBeforeUnmount, KeepAlive, Suspense, nextTick, triggerRef, isRef, isReactive, createTextVNode, resolveComponent } from 'vue';\nimport { createConfig, createNode, error, createMessage, getNode, watchRegistry, stopWatch, resetCount as resetCount$1, clearErrors, setErrors, submitForm, reset, createClasses, generateClassList, warn, isNode, sugar, isDOM, isComponent, isConditional, compile } from '@formkit/core';\nexport { clearErrors, errorHandler, reset, setErrors, submitForm } from '@formkit/core';\nimport { cloneAny, extend, undefine, camel, kebab, nodeProps, only, except, oncePerTick, slugify, shallowClone, eq, token, isObject, empty, has, isPojo } from '@formkit/utils';\nimport { createObserver } from '@formkit/observer';\nimport * as defaultRules from '@formkit/rules';\nimport { createValidationPlugin } from '@formkit/validation';\nimport { createI18nPlugin, en } from '@formkit/i18n';\nexport { changeLocale } from '@formkit/i18n';\nimport { createSection, useSchema, localize, resetCounts, createLibraryPlugin, inputs, runtimeProps } from '@formkit/inputs';\nimport { createIconHandler, createThemePlugin } from '@formkit/themes';\nimport { register } from '@formkit/dev';\n\nvar __defProp = Object.defineProperty;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __esm = (fn, res) => function __init() {\n return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;\n};\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar vueBindings, bindings_default;\nvar init_bindings = __esm({\n \"packages/vue/src/bindings.ts\"() {\n vueBindings = function vueBindings2(node) {\n node.ledger.count(\"blocking\", (m) => m.blocking);\n const isValid = ref(!node.ledger.value(\"blocking\"));\n node.ledger.count(\"errors\", (m) => m.type === \"error\");\n const hasErrors = ref(!!node.ledger.value(\"errors\"));\n let hasTicked = false;\n nextTick(() => {\n hasTicked = true;\n });\n const availableMessages = reactive(\n node.store.reduce((store, message3) => {\n if (message3.visible) {\n store[message3.key] = message3;\n }\n return store;\n }, {})\n );\n const validationVisibility = ref(\n node.props.validationVisibility || (node.props.type === \"checkbox\" ? \"dirty\" : \"blur\")\n );\n node.on(\"prop:validationVisibility\", ({ payload }) => {\n validationVisibility.value = payload;\n });\n const hasShownErrors = ref(validationVisibility.value === \"live\");\n const isRequired = ref(false);\n const checkForRequired = (parsedRules) => {\n isRequired.value = (parsedRules ?? []).some(\n (rule) => rule.name === \"required\"\n );\n };\n checkForRequired(node.props.parsedRules);\n node.on(\"prop:parsedRules\", ({ payload }) => checkForRequired(payload));\n const items = ref(node.children.map((child) => child.uid));\n const validationVisible = computed(() => {\n if (!context.state)\n return false;\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 const isInvalid = computed(() => {\n return context.state.failing && validationVisible.value;\n });\n const isComplete = computed(() => {\n return context && hasValidation.value ? isValid.value && !hasErrors.value : context.state.dirty && !empty(context.value);\n });\n const hasValidation = ref(\n Array.isArray(node.props.parsedRules) && node.props.parsedRules.length > 0\n );\n node.on(\"prop:parsedRules\", ({ payload: rules }) => {\n hasValidation.value = Array.isArray(rules) && rules.length > 0;\n });\n const messages3 = computed(() => {\n const visibleMessages = {};\n for (const key in availableMessages) {\n const message3 = availableMessages[key];\n if (message3.type !== \"validation\" || validationVisible.value) {\n visibleMessages[key] = message3;\n }\n }\n return visibleMessages;\n });\n const ui = reactive(\n node.store.reduce((messages4, message3) => {\n if (message3.type === \"ui\" && message3.visible)\n messages4[message3.key] = message3;\n return messages4;\n }, {})\n );\n const passing = computed(() => !context.state.failing);\n const cachedClasses = reactive({});\n const classes2 = new Proxy(cachedClasses, {\n get(...args) {\n if (!node)\n return \"\";\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((node2) => {\n const rootClasses = typeof node2.config.rootClasses === \"function\" ? node2.config.rootClasses(property, node2) : {};\n const globalConfigClasses = node2.config.classes ? createClasses(property, node2, node2.config.classes[property]) : {};\n const classesPropClasses = createClasses(\n property,\n node2,\n node2.props[`_${property}Class`]\n );\n const sectionPropClasses = createClasses(\n property,\n node2,\n node2.props[`${property}Class`]\n );\n className = generateClassList(\n node2,\n property,\n rootClasses,\n globalConfigClasses,\n classesPropClasses,\n sectionPropClasses\n );\n target[property] = className ?? \"\";\n });\n }\n }\n return className;\n }\n });\n node.on(\"prop:rootClasses\", () => {\n const keys = Object.keys(cachedClasses);\n for (const key of keys) {\n delete cachedClasses[key];\n }\n });\n const describedBy = computed(() => {\n if (!node)\n return void 0;\n const describers = [];\n if (context.help) {\n describers.push(`help-${node.props.id}`);\n }\n for (const key in messages3.value) {\n describers.push(`${node.props.id}-${key}`);\n }\n return describers.length ? describers.join(\" \") : void 0;\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: (value2) => Number(value2),\n string: (value2) => String(value2),\n json: (value2) => JSON.stringify(value2),\n eq: eq\n },\n handlers: {\n blur: (e) => {\n if (!node)\n return;\n node.store.set(\n /* @__PURE__ */ createMessage({ key: \"blurred\", visible: false, value: true })\n );\n if (typeof node.props.attrs.onBlur === \"function\") {\n node.props.attrs.onBlur(e);\n }\n },\n touch: () => {\n const doCompare = context.dirtyBehavior === \"compare\";\n if (node.store.dirty?.value && !doCompare)\n return;\n const isDirty = !eq(node.props._init, node._value);\n if (!isDirty && !doCompare)\n return;\n node.store.set(\n /* @__PURE__ */ createMessage({ key: \"dirty\", visible: false, value: isDirty })\n );\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 items,\n label: node.props.label,\n messages: messages3,\n didMount: false,\n node: markRaw(node),\n options: node.props.options,\n defaultMessagePlacement: true,\n slots: node.props.__slots,\n state: {\n blurred: false,\n complete: isComplete,\n dirty: false,\n empty: empty(value),\n submitted: false,\n settled: node.isSettled,\n valid: isValid,\n invalid: isInvalid,\n errors: hasErrors,\n rules: hasValidation,\n validationVisible,\n required: isRequired,\n failing: false,\n passing\n },\n type: node.props.type,\n family: node.props.family,\n ui,\n value,\n classes: classes2\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 (async () => {\n await node.settled;\n if (node)\n node.props._init = cloneAny(node.value);\n })();\n });\n node.on(\"mounted\", () => {\n context.didMount = true;\n });\n node.on(\"settled\", ({ payload: isSettled }) => {\n context.state.settled = isSettled;\n });\n function observeProps(observe) {\n const propNames = Array.isArray(observe) ? observe : Object.keys(observe);\n propNames.forEach((prop) => {\n prop = camel(prop);\n if (!has(context, prop)) {\n context[prop] = node.props[prop];\n }\n node.on(`prop:${prop}`, ({ payload }) => {\n context[prop] = payload;\n });\n });\n }\n const rootProps = () => {\n const props = [\n \"__root\",\n \"help\",\n \"label\",\n \"disabled\",\n \"options\",\n \"type\",\n \"attrs\",\n \"preserve\",\n \"preserveErrors\",\n \"id\",\n \"dirtyBehavior\"\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 function definedAs(definition3) {\n if (definition3.props)\n observeProps(definition3.props);\n }\n node.props.definition && definedAs(node.props.definition);\n node.on(\"added-props\", ({ payload }) => observeProps(payload));\n node.on(\"input\", ({ payload }) => {\n if (node.type !== \"input\" && !isRef(payload) && !isReactive(payload)) {\n _value.value = shallowClone(payload);\n } else {\n _value.value = payload;\n triggerRef(_value);\n }\n });\n node.on(\"commitRaw\", ({ payload }) => {\n if (node.type !== \"input\" && !isRef(payload) && !isReactive(payload)) {\n value.value = _value.value = shallowClone(payload);\n } else {\n value.value = _value.value = payload;\n triggerRef(value);\n }\n node.emit(\"modelUpdated\");\n });\n node.on(\"commit\", ({ payload }) => {\n if ((!context.state.dirty || context.dirtyBehavior === \"compare\") && node.isCreated && hasTicked) {\n if (!node.store.validating?.value) {\n context.handlers.touch();\n } else {\n const receipt = node.on(\"message-removed\", ({ payload: message3 }) => {\n if (message3.key === \"validating\") {\n context.handlers.touch();\n node.off(receipt);\n }\n });\n }\n }\n if (isComplete && node.type === \"input\" && hasErrors.value && !undefine(node.props.preserveErrors)) {\n node.store.filter(\n (message3) => !(message3.type === \"error\" && message3.meta?.autoClear === true)\n );\n }\n if (node.type === \"list\" && node.sync) {\n items.value = node.children.map((child) => child.uid);\n }\n context.state.empty = empty(payload);\n });\n const updateState = async (message3) => {\n if (message3.type === \"ui\" && message3.visible && !message3.meta.showAsMessage) {\n ui[message3.key] = message3;\n } else if (message3.visible) {\n availableMessages[message3.key] = message3;\n } else if (message3.type === \"state\") {\n context.state[message3.key] = !!message3.value;\n }\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: message3 }) => {\n delete ui[message3.key];\n delete availableMessages[message3.key];\n delete context.state[message3.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 watch(validationVisible, (value2) => {\n if (value2) {\n hasShownErrors.value = true;\n }\n });\n node.context = context;\n node.emit(\"context\", node, false);\n node.on(\"destroyed\", () => {\n node.context = void 0;\n node = null;\n });\n };\n bindings_default = vueBindings;\n }\n});\n\n// packages/vue/src/defaultConfig.ts\nvar defaultConfig_exports = {};\n__export(defaultConfig_exports, {\n defaultConfig: () => defaultConfig\n});\nvar defaultConfig;\nvar init_defaultConfig = __esm({\n \"packages/vue/src/defaultConfig.ts\"() {\n init_bindings();\n defaultConfig = (options = {}) => {\n register();\n const {\n rules = {},\n locales = {},\n inputs: inputs$1 = {},\n messages: messages3 = {},\n locale = void 0,\n theme = void 0,\n iconLoaderUrl = void 0,\n iconLoader = void 0,\n icons = {},\n ...nodeOptions\n } = options;\n const validation = createValidationPlugin({\n ...defaultRules,\n ...rules || {}\n });\n const i18n = createI18nPlugin(\n extend({ en, ...locales || {} }, messages3)\n );\n const library = createLibraryPlugin(inputs, inputs$1);\n const themePlugin = createThemePlugin(theme, icons, iconLoaderUrl, iconLoader);\n return extend(\n {\n plugins: [library, themePlugin, bindings_default, i18n, validation],\n ...!locale ? {} : { config: { locale } }\n },\n nodeOptions || {},\n true\n );\n };\n }\n});\n\n// packages/vue/src/composables/onSSRComplete.ts\nvar isServer = typeof window === \"undefined\";\nvar ssrCompleteRegistry = /* @__PURE__ */ new Map();\nfunction ssrComplete(app) {\n if (!isServer)\n return;\n const callbacks = ssrCompleteRegistry.get(app);\n if (!callbacks)\n return;\n for (const callback of callbacks) {\n callback();\n }\n callbacks.clear();\n ssrCompleteRegistry.delete(app);\n}\nfunction onSSRComplete(app, callback) {\n if (!isServer || !app)\n return;\n if (!ssrCompleteRegistry.has(app))\n ssrCompleteRegistry.set(app, /* @__PURE__ */ new Set());\n ssrCompleteRegistry.get(app)?.add(callback);\n}\n\n// packages/vue/src/FormKitSchema.ts\nvar isServer2 = typeof window === \"undefined\";\nvar memo = {};\nvar memoKeys = {};\nvar instanceKey;\nvar instanceScopes = /* @__PURE__ */ new WeakMap();\nvar raw = \"__raw__\";\nvar isClassProp = /[a-zA-Z0-9\\-][cC]lass$/;\nfunction getRef(token3, data) {\n const value = ref(null);\n if (token3 === \"get\") {\n const nodeRefs = {};\n value.value = get.bind(null, nodeRefs);\n return value;\n }\n const path = token3.split(\".\");\n watchEffect(() => {\n value.value = getValue(\n isRef(data) ? data.value : data,\n path\n );\n });\n return value;\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 !== void 0)\n return value;\n }\n return void 0;\n }\n let foundValue = void 0;\n let obj = set;\n for (const i in path) {\n const key = path[i];\n if (typeof obj !== \"object\" || obj === null) {\n foundValue = void 0;\n break;\n }\n const currentValue = obj[key];\n if (Number(i) === path.length - 1 && currentValue !== void 0) {\n foundValue = typeof currentValue === \"function\" ? currentValue.bind(obj) : currentValue;\n break;\n }\n obj = currentValue;\n }\n return foundValue;\n}\nfunction get(nodeRefs, id) {\n if (typeof id !== \"string\")\n return warn(650);\n if (!(id in nodeRefs))\n nodeRefs[id] = ref(void 0);\n if (nodeRefs[id].value === void 0) {\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}\nfunction parseSchema(library, schema, memoKey) {\n function parseCondition(library2, node) {\n const condition = provider(compile(node.if), { if: true });\n const children = createElements(library2, node.then);\n const alternate = node.else ? createElements(library2, node.else) : null;\n return [condition, children, alternate];\n }\n function parseConditionAttr(attr, _default) {\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, void 0);\n } else if (typeof attr.then === \"string\" && attr.then?.startsWith(\"$\")) {\n a = provider(compile(attr.then));\n } else {\n a = () => attr.then;\n }\n if (has(attr, \"else\")) {\n if (typeof attr.else === \"object\") {\n b = parseAttrs(attr.else);\n } else if (typeof attr.else === \"string\" && attr.else?.startsWith(\"$\")) {\n b = provider(compile(attr.else));\n } else {\n b = () => attr.else;\n }\n }\n return () => condition() ? a() : b();\n }\n function parseAttrs(unparsedAttrs, bindExp, _default = {}) {\n const explicitAttrs = new Set(Object.keys(unparsedAttrs || {}));\n const boundAttrs = bindExp ? provider(compile(bindExp)) : () => ({});\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 const condition = parseConditionAttr(\n unparsedAttrs,\n _default\n );\n return condition;\n }\n for (let attr in unparsedAttrs) {\n const value = unparsedAttrs[attr];\n let getValue2;\n const isStr = typeof value === \"string\";\n if (attr.startsWith(raw)) {\n attr = attr.substring(7);\n getValue2 = () => value;\n } else if (isStr && value.startsWith(\"$\") && value.length > 1 && !(value.startsWith(\"$reset\") && isClassProp.test(attr))) {\n getValue2 = provider(compile(value));\n } else if (typeof value === \"object\" && isConditional(value)) {\n getValue2 = parseConditionAttr(value, void 0);\n } else if (typeof value === \"object\" && isPojo(value)) {\n getValue2 = parseAttrs(value);\n } else {\n getValue2 = () => value;\n }\n setters.push((attrs) => {\n attrs[attr] = getValue2();\n });\n }\n }\n return () => {\n const attrs = Array.isArray(unparsedAttrs) ? [] : {};\n setters.forEach((setter) => setter(attrs));\n return attrs;\n };\n }\n function parseNode(library2, _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 element = node.$el;\n attrs = node.$el !== \"text\" ? parseAttrs(node.attrs, node.bind) : () => null;\n } else if (isComponent(node)) {\n if (typeof node.$cmp === \"string\") {\n if (has(library2, node.$cmp)) {\n element = library2[node.$cmp];\n } else {\n element = node.$cmp;\n resolve = true;\n }\n } else {\n element = node.$cmp;\n }\n attrs = parseAttrs(node.props, node.bind);\n } else if (isConditional(node)) {\n [condition, children, alternate] = parseCondition(library2, node);\n }\n if (!isConditional(node) && \"if\" in node) {\n condition = provider(compile(node.if));\n } else if (!isConditional(node) && element === null) {\n condition = () => true;\n }\n if (\"children\" in node && node.children) {\n if (typeof node.children === \"string\") {\n if (node.children.startsWith(\"$slots.\")) {\n element = element === \"text\" ? \"slot\" : element;\n children = provider(compile(node.children));\n } else if (node.children.startsWith(\"$\") && node.children.length > 1) {\n const value = provider(compile(node.children));\n children = () => String(value());\n } else {\n children = () => String(node.children);\n }\n } else if (Array.isArray(node.children)) {\n children = createElements(library2, node.children);\n } else {\n const [childCondition, c, a] = parseCondition(library2, node.children);\n children = (iterationData) => childCondition && childCondition() ? c && c(iterationData) : a && a(iterationData);\n }\n }\n if (isComponent(node)) {\n if (children) {\n const produceChildren = children;\n children = (iterationData) => {\n return {\n default(slotData2, key) {\n const currentKey = instanceKey;\n if (key)\n instanceKey = key;\n if (slotData2)\n instanceScopes.get(instanceKey)?.unshift(slotData2);\n if (iterationData)\n instanceScopes.get(instanceKey)?.unshift(iterationData);\n const c = produceChildren(iterationData);\n if (slotData2)\n instanceScopes.get(instanceKey)?.shift();\n if (iterationData)\n instanceScopes.get(instanceKey)?.shift();\n instanceKey = currentKey;\n return c;\n }\n };\n };\n children.slot = true;\n } else {\n children = () => ({});\n }\n }\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(\"$\") ? provider(compile(values)) : () => 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 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 function createElement(library2, node) {\n const [condition, element, attrs, children, alternate, iterator, resolve] = parseNode(library2, node);\n let createNodes = (iterationData) => {\n if (condition && element === null && children) {\n return condition() ? children(iterationData) : alternate && alternate(iterationData);\n }\n if (element && (!condition || condition())) {\n if (element === \"text\" && children) {\n return createTextVNode(String(children()));\n }\n if (element === \"slot\" && children)\n return children(iterationData);\n const el = resolve ? resolveComponent(element) : element;\n const slots = children?.slot ? createSlots(children, iterationData) : null;\n return h(\n el,\n attrs(),\n slots || (children ? children(iterationData) : [])\n );\n }\n return typeof alternate === \"function\" ? alternate(iterationData) : alternate;\n };\n if (iterator) {\n const repeatedNode = createNodes;\n const [getValues, valueName, keyName] = iterator;\n createNodes = () => {\n const _v = getValues();\n const values = Number.isFinite(_v) ? Array(Number(_v)).fill(0).map((_, i) => i) : _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;\n const iterationData = Object.defineProperty(\n {\n ...instanceScope.reduce(\n (previousIterationData, scopedData) => {\n if (previousIterationData.__idata) {\n return { ...previousIterationData, ...scopedData };\n }\n return scopedData;\n },\n {}\n ),\n [valueName]: values[key],\n ...keyName !== null ? { [keyName]: isArray ? Number(key) : key } : {}\n },\n \"__idata\",\n { enumerable: false, value: true }\n );\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 function createElements(library2, schema2) {\n if (Array.isArray(schema2)) {\n const els = schema2.map(createElement.bind(null, library2));\n return (iterationData) => els.map((element2) => element2(iterationData));\n }\n const element = createElement(library2, schema2);\n return (iterationData) => element(iterationData);\n }\n const providers = [];\n function provider(compiled, hints = {}) {\n const compiledFns = /* @__PURE__ */ new WeakMap();\n providers.push((callback, key) => {\n compiledFns.set(\n key,\n compiled.provide((tokens) => callback(tokens, hints))\n );\n });\n return () => compiledFns.get(instanceKey)();\n }\n function createInstance(providerCallback, key) {\n memoKey ?? (memoKey = toMemoKey(schema));\n const [render, compiledProviders] = has(memo, memoKey) ? memo[memoKey] : [createElements(library, schema), providers];\n if (!isServer2) {\n memoKeys[memoKey] ?? (memoKeys[memoKey] = 0);\n memoKeys[memoKey]++;\n memo[memoKey] = [render, compiledProviders];\n }\n compiledProviders.forEach((compiledProvider) => {\n compiledProvider(providerCallback, key);\n });\n return () => {\n instanceKey = key;\n return render();\n };\n }\n return createInstance;\n}\nfunction useScope(token3, defaultValue) {\n const scopedData = instanceScopes.get(instanceKey) || [];\n let scopedValue = void 0;\n if (scopedData.length) {\n scopedValue = getValue(scopedData, token3.split(\".\"));\n }\n return scopedValue === void 0 ? defaultValue : scopedValue;\n}\nfunction slotData(data, key) {\n return new Proxy(data, {\n get(...args) {\n let data2 = void 0;\n const property = args[1];\n if (typeof property === \"string\") {\n const prevKey = instanceKey;\n instanceKey = key;\n data2 = useScope(property, void 0);\n instanceKey = prevKey;\n }\n return data2 !== void 0 ? data2 : Reflect.get(...args);\n }\n });\n}\nfunction createRenderFn(instanceCreator, data, instanceKey2) {\n return instanceCreator(\n (requirements, hints = {}) => {\n return requirements.reduce((tokens, token3) => {\n if (token3.startsWith(\"slots.\")) {\n const slot = token3.substring(6);\n const hasSlot = () => data.slots && has(data.slots, slot) && typeof data.slots[slot] === \"function\";\n if (hints.if) {\n tokens[token3] = hasSlot;\n } else if (data.slots) {\n const scopedData = slotData(data, instanceKey2);\n tokens[token3] = () => hasSlot() ? data.slots[slot](scopedData) : null;\n }\n } else {\n const value = getRef(token3, data);\n tokens[token3] = () => useScope(token3, value.value);\n }\n return tokens;\n }, {});\n },\n instanceKey2\n );\n}\nfunction clean(schema, memoKey, instanceKey2) {\n memoKey ?? (memoKey = toMemoKey(schema));\n memoKeys[memoKey]--;\n if (memoKeys[memoKey] === 0) {\n delete memoKeys[memoKey];\n const [, providers] = memo[memoKey];\n delete memo[memoKey];\n providers.length = 0;\n }\n instanceScopes.delete(instanceKey2);\n}\nfunction toMemoKey(schema) {\n return JSON.stringify(schema, (_, value) => {\n if (typeof value === \"function\") {\n return value.toString();\n }\n return value;\n });\n}\nvar FormKitSchema = /* @__PURE__ */ 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 memoKey: {\n type: String,\n required: false\n }\n },\n emits: [\"mounted\"],\n setup(props, context) {\n const instance = getCurrentInstance();\n let instanceKey2 = {};\n instanceScopes.set(instanceKey2, []);\n const library = { FormKit: markRaw(FormKit_default), ...props.library };\n let provider = parseSchema(library, props.schema, props.memoKey);\n let render;\n let data;\n if (!isServer2) {\n watch(\n () => props.schema,\n (newSchema, oldSchema) => {\n const oldKey = instanceKey2;\n instanceKey2 = {};\n instanceScopes.set(instanceKey2, []);\n provider = parseSchema(library, props.schema, props.memoKey);\n render = createRenderFn(provider, data, instanceKey2);\n if (newSchema === oldSchema) {\n (instance?.proxy?.$forceUpdate)();\n }\n clean(props.schema, props.memoKey, oldKey);\n },\n { deep: true }\n );\n }\n watchEffect(() => {\n data = Object.assign(reactive(props.data ?? {}), {\n slots: context.slots\n });\n context.slots;\n render = createRenderFn(provider, data, instanceKey2);\n });\n function cleanUp() {\n clean(props.schema, props.memoKey, instanceKey2);\n if (data) {\n if (data.node)\n data.node.destroy();\n data.slots = null;\n data = null;\n }\n render = null;\n }\n onMounted(() => context.emit(\"mounted\"));\n onUnmounted(cleanUp);\n onSSRComplete(getCurrentInstance()?.appContext.app, cleanUp);\n return () => render ? render() : null;\n }\n});\nvar FormKitSchema_default = FormKitSchema;\nvar isServer3 = typeof window === \"undefined\";\nvar parentSymbol = Symbol(\"FormKitParent\");\nvar componentSymbol = Symbol(\"FormKitComponentCallback\");\nvar currentSchemaNode = null;\nvar getCurrentSchemaNode = () => currentSchemaNode;\nfunction FormKit(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 () => h(\n node.props.definition?.component,\n {\n context: node.context\n },\n { ...context.slots }\n );\n }\n const schema = ref([]);\n let memoKey = node.props.definition.schemaMemoKey;\n const generateSchema = () => {\n const schemaDefinition = node.props?.definition?.schema;\n if (!schemaDefinition)\n error(601, node);\n if (typeof schemaDefinition === \"function\") {\n currentSchemaNode = node;\n schema.value = schemaDefinition({ ...props.sectionsSchema || {} });\n currentSchemaNode = null;\n if (memoKey && props.sectionsSchema || \"memoKey\" in schemaDefinition && typeof schemaDefinition.memoKey === \"string\") {\n memoKey = (memoKey ?? schemaDefinition?.memoKey) + JSON.stringify(props.sectionsSchema);\n }\n } else {\n schema.value = schemaDefinition;\n }\n };\n generateSchema();\n if (!isServer3) {\n node.on(\"schema\", () => {\n memoKey += \"â™»ï¸\";\n generateSchema();\n });\n }\n context.emit(\"node\", node);\n const definitionLibrary = node.props.definition.library;\n const library = {\n FormKit: markRaw(formkitComponent),\n ...definitionLibrary,\n ...props.library ?? {}\n };\n function didMount() {\n node.emit(\"mounted\");\n }\n context.expose({ node });\n return () => h(\n FormKitSchema,\n {\n schema: schema.value,\n data: node.context,\n onMounted: didMount,\n library,\n memoKey\n },\n { ...context.slots }\n );\n}\nvar formkitComponent = /* @__PURE__ */ defineComponent(\n FormKit,\n {\n props: runtimeProps,\n inheritAttrs: false\n }\n);\nvar FormKit_default = formkitComponent;\nvar rootSymbol = Symbol();\nvar FormKitRoot = /* @__PURE__ */ defineComponent((_p, context) => {\n const boundary = ref(null);\n const showBody = ref(false);\n const shadowRoot = ref(void 0);\n const stopWatch2 = watch(boundary, (el) => {\n let parent = el;\n let root = null;\n while (parent = parent?.parentNode) {\n root = parent;\n if (root instanceof ShadowRoot || root instanceof Document) {\n foundRoot(root);\n break;\n }\n }\n stopWatch2();\n showBody.value = true;\n });\n provide(rootSymbol, shadowRoot);\n function foundRoot(root) {\n shadowRoot.value = root;\n }\n return () => showBody.value && context.slots.default ? context.slots.default() : h(\"template\", { ref: boundary });\n});\nfunction createPlugin(app, options) {\n app.component(options.alias || \"FormKit\", FormKit_default).component(options.schemaAlias || \"FormKitSchema\", FormKitSchema_default);\n return {\n get: getNode,\n setLocale: (locale) => {\n if (options.config?.rootConfig) {\n options.config.rootConfig.locale = locale;\n }\n },\n clearErrors,\n setErrors,\n submit: submitForm,\n reset\n };\n}\nvar optionsSymbol = Symbol.for(\"FormKitOptions\");\nvar configSymbol = Symbol.for(\"FormKitConfig\");\nvar plugin = {\n install(app, _options) {\n const options = Object.assign(\n {\n alias: \"FormKit\",\n schemaAlias: \"FormKitSchema\"\n },\n typeof _options === \"function\" ? _options() : _options\n );\n const rootConfig = createConfig(options.config || {});\n options.config = { rootConfig };\n app.config.globalProperties.$formkit = createPlugin(app, options);\n app.provide(optionsSymbol, options);\n app.provide(configSymbol, rootConfig);\n if (typeof window !== \"undefined\") {\n globalThis.__FORMKIT_CONFIGS__ = (globalThis.__FORMKIT_CONFIGS__ || []).concat([rootConfig]);\n }\n }\n};\n\n// packages/vue/src/composables/useInput.ts\nvar isBrowser = typeof window !== \"undefined\";\nvar pseudoProps = [\n // Boolean props\n \"ignore\",\n \"disabled\",\n \"preserve\",\n // String props\n \"help\",\n \"label\",\n /^preserve(-e|E)rrors/,\n /^[a-z]+(?:-visibility|Visibility|-behavior|Behavior)$/,\n /^[a-zA-Z-]+(?:-class|Class)$/,\n \"prefixIcon\",\n \"suffixIcon\",\n /^[a-zA-Z-]+(?:-icon|Icon)$/\n];\nvar boolProps = [\"disabled\", \"ignore\", \"preserve\"];\nfunction classesToNodeProps(node, props) {\n if (props.classes) {\n Object.keys(props.classes).forEach(\n (key) => {\n if (typeof key === \"string\") {\n node.props[`_${key}Class`] = props.classes[key];\n if (isObject(props.classes[key]) && key === \"inner\")\n Object.values(props.classes[key]);\n }\n }\n );\n }\n}\nfunction onlyListeners(props) {\n if (!props)\n return {};\n const knownListeners = [\"Submit\", \"SubmitRaw\", \"SubmitInvalid\"].reduce(\n (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 {}\n );\n return knownListeners;\n}\nfunction useInput(props, context, options = {}) {\n const config = Object.assign({}, inject(optionsSymbol) || {}, options);\n const __root = inject(rootSymbol, ref(isBrowser ? document : void 0));\n const __cmpCallback = inject(componentSymbol, () => {\n });\n const instance = getCurrentInstance();\n const listeners = onlyListeners(instance?.vnode.props);\n const isVModeled = [\"modelValue\", \"model-value\"].some(\n (prop) => prop in (instance?.vnode.props ?? {})\n );\n let isMounted = false;\n onMounted(() => {\n isMounted = true;\n });\n const value = props.modelValue !== void 0 ? props.modelValue : cloneAny(context.attrs.value);\n function createInitialProps() {\n const initialProps2 = {\n ...nodeProps(props),\n ...listeners,\n type: props.type ?? \"text\",\n __root: __root.value,\n __slots: context.slots\n };\n const attrs = except(nodeProps(context.attrs), pseudoProps);\n if (!attrs.key)\n attrs.key = token();\n initialProps2.attrs = attrs;\n const propValues = only(nodeProps(context.attrs), pseudoProps);\n for (const propName in propValues) {\n if (boolProps.includes(propName) && propValues[propName] === \"\") {\n propValues[propName] = true;\n }\n initialProps2[camel(propName)] = propValues[propName];\n }\n const classesProps = { props: {} };\n classesToNodeProps(classesProps, props);\n Object.assign(initialProps2, classesProps.props);\n if (typeof initialProps2.type !== \"string\") {\n initialProps2.definition = initialProps2.type;\n delete initialProps2.type;\n }\n return initialProps2;\n }\n const initialProps = createInitialProps();\n const parent = initialProps.ignore ? null : props.parent || inject(parentSymbol, null);\n const node = createNode(\n extend(\n config || {},\n {\n name: props.name || void 0,\n value,\n parent,\n plugins: (config.plugins || []).concat(props.plugins ?? []),\n config: props.config || {},\n props: initialProps,\n index: props.index,\n sync: !!undefine(context.attrs.sync || context.attrs.dynamic)\n },\n false,\n true\n )\n );\n __cmpCallback(node);\n if (!node.props.definition)\n error(600, node);\n const lateBoundProps = ref(\n new Set(\n Array.isArray(node.props.__propDefs) ? node.props.__propDefs : Object.keys(node.props.__propDefs ?? {})\n )\n );\n node.on(\n \"added-props\",\n ({ payload: lateProps }) => {\n const propNames = Array.isArray(lateProps) ? lateProps : Object.keys(lateProps ?? {});\n propNames.forEach((newProp) => lateBoundProps.value.add(newProp));\n }\n );\n const pseudoPropNames = computed(\n () => pseudoProps.concat([...lateBoundProps.value]).reduce((names, prop) => {\n if (typeof prop === \"string\") {\n names.push(camel(prop));\n names.push(kebab(prop));\n } else {\n names.push(prop);\n }\n return names;\n }, [])\n );\n watchEffect(() => classesToNodeProps(node, props));\n const passThrough = nodeProps(props);\n for (const prop in passThrough) {\n watch(\n () => props[prop],\n () => {\n if (props[prop] !== void 0) {\n node.props[prop] = props[prop];\n }\n }\n );\n }\n watchEffect(() => {\n node.props.__root = __root.value;\n });\n const attributeWatchers = /* @__PURE__ */ new Set();\n const possibleProps = nodeProps(context.attrs);\n watchEffect(() => {\n watchAttributes(only(possibleProps, pseudoPropNames.value));\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(\n watch(\n () => context.attrs[prop],\n () => {\n node.props[camelName] = context.attrs[prop];\n }\n )\n );\n }\n }\n watchEffect(() => {\n const attrs = except(nodeProps(context.attrs), pseudoPropNames.value);\n if (\"multiple\" in attrs)\n attrs.multiple = undefine(attrs.multiple);\n if (typeof attrs.onBlur === \"function\") {\n attrs.onBlur = oncePerTick(attrs.onBlur);\n }\n node.props.attrs = Object.assign({}, node.props.attrs || {}, attrs);\n });\n watchEffect(() => {\n const messages3 = (props.errors ?? []).map(\n (error3) => /* @__PURE__ */ createMessage({\n key: slugify(error3),\n type: \"error\",\n value: error3,\n meta: { source: \"prop\" }\n })\n );\n node.store.apply(\n messages3,\n (message3) => message3.type === \"error\" && message3.meta.source === \"prop\"\n );\n });\n if (node.type !== \"input\") {\n const sourceKey = `${node.name}-prop`;\n watchEffect(() => {\n const inputErrors = props.inputErrors ?? {};\n const keys = Object.keys(inputErrors);\n if (!keys.length)\n node.clearErrors(true, sourceKey);\n const messages3 = keys.reduce((messages4, key) => {\n let value2 = inputErrors[key];\n if (typeof value2 === \"string\")\n value2 = [value2];\n if (Array.isArray(value2)) {\n messages4[key] = value2.map(\n (error3) => /* @__PURE__ */ createMessage({\n key: error3,\n type: \"error\",\n value: error3,\n meta: { source: sourceKey }\n })\n );\n }\n return messages4;\n }, {});\n node.store.apply(\n messages3,\n (message3) => message3.type === \"error\" && message3.meta.source === sourceKey\n );\n });\n }\n watchEffect(() => Object.assign(node.config, props.config));\n if (node.type !== \"input\") {\n provide(parentSymbol, node);\n }\n let clonedValueBeforeVmodel = void 0;\n node.on(\"modelUpdated\", () => {\n context.emit(\"inputRaw\", node.context?.value, node);\n if (isMounted) {\n context.emit(\"input\", node.context?.value, node);\n }\n if (isVModeled && node.context) {\n clonedValueBeforeVmodel = cloneAny(node.value);\n context.emit(\"update:modelValue\", shallowClone(node.value));\n }\n });\n if (isVModeled) {\n watch(\n toRef(props, \"modelValue\"),\n (value2) => {\n if (!eq(clonedValueBeforeVmodel, value2)) {\n node.input(value2, false);\n }\n },\n { deep: true }\n );\n if (node.value !== value) {\n node.emit(\"modelUpdated\");\n }\n }\n onBeforeUnmount(() => node.destroy());\n return node;\n}\nvar totalCreated = 1;\nfunction isComponent2(obj) {\n return typeof obj === \"function\" && obj.length === 2 || typeof obj === \"object\" && !Array.isArray(obj) && !(\"$el\" in obj) && !(\"$cmp\" in obj) && !(\"if\" in obj);\n}\nfunction createInput(schemaOrComponent, definitionOptions = {}, sectionsSchema = {}) {\n const definition3 = {\n type: \"input\",\n ...definitionOptions\n };\n let schema;\n if (isComponent2(schemaOrComponent)) {\n const cmpName = `SchemaComponent${totalCreated++}`;\n schema = createSection(\"input\", () => ({\n $cmp: cmpName,\n props: {\n context: \"$node.context\"\n }\n }));\n definition3.library = { [cmpName]: markRaw(schemaOrComponent) };\n } else if (typeof schemaOrComponent === \"function\") {\n schema = schemaOrComponent;\n } else {\n schema = createSection(\"input\", () => cloneAny(schemaOrComponent));\n }\n definition3.schema = useSchema(schema || \"Schema undefined\", sectionsSchema);\n if (!definition3.schemaMemoKey) {\n definition3.schemaMemoKey = `${Math.random()}`;\n }\n return definition3;\n}\n\n// packages/vue/src/composables/defineFormKitConfig.ts\nfunction defineFormKitConfig(config) {\n return () => typeof config === \"function\" ? config() : config;\n}\nvar inputList = {};\nvar schemas = {};\nvar classes = {\n container: `\n formkit-kitchen-sink \n p-8\n `,\n tabs: `\n formkit-tabs \n mt-4 \n mr-[min(350px,25vw)]\n `,\n tab: `\n formkit-kitchen-sink-tab\n inline-block\n mb-4\n -mr-px\n cursor-pointer\n px-4\n py-2\n border\n border-neutral-200\n text-neutral-800\n data-[active]:bg-neutral-800\n data-[active]:border-neutral-800\n data-[active]:text-neutral-50\n hover:bg-neutral-100\n hover:text-neutral-900\n dark:border-neutral-700\n dark:text-neutral-50\n dark:data-[active]:bg-neutral-100\n dark:data-[active]:border-neutral-100\n dark:data-[active]:text-neutral-800\n dark:hover:bg-neutral-800\n dark:hover:text-neutral-50\n `,\n filterContainer: `\n formkit-filter-container\n grid\n grid-cols-[repeat(auto-fit,300px)]\n mr-[min(350px,25vw)]\n -mt-4\n mb-8\n px-4\n pt-8\n pb-4\n border\n relative\n -translate-y-px\n max-w-[1000px]\n border-neutral-200\n dark:border-neutral-700\n `,\n filterGroup: `\n formkit-filter-group\n mr-8\n mb-8\n [&_legend]:text-lg\n [&_ul]:columns-2\n [&_ul>li:first-child]:[column-span:all]\n [&_ul>li:first-child]:mt-2\n [&_ul>li:first-child]:mb-2\n [&_ul>li:first-child]:pb-2\n [&_ul>li:first-child]:border-b\n [&_ul>li:first-child]:border-neutral-200\n dark:[&_ul>li:first-child]:border-neutral-700\n `,\n formContainer: `\n formkit-form-container\n w-full\n bg-white\n rounded\n border\n border-neutral-100\n shadow-lg\n max-w-[800px]\n p-[min(5vw,5rem)]\n dark:bg-neutral-900\n dark:border-neutral-800\n dark:shadow-3xl\n [&_form>h1]:text-2xl\n [&_form>h1]:mb-4\n [&_form>h1]:font-bold\n [&_form>h1+p]:text-base\n [&_form>h1+p]:mb-4\n [&_form>h1+p]:-mt-2\n [&_form_.double]:flex\n [&_form_.double>*]:w-1/2\n [&_form_.double>*:first-child]:mr-2\n [&_form_.triple]:flex\n [&_form_.triple>*]:w-1/3\n [&_form_.triple>*:first-child]:mr-2\n [&_form_.triple>*:last-child]:ml-2\n `,\n inputs: `formkit-inputs`,\n specimen: `\n formkit-specimen \n flex \n flex-col \n p-2 \n max-w-[75vw]\n `,\n inputSection: `\n group/section\n formkit-input-section \n mr-[min(325px,25vw)]\n `,\n specimenGroup: `\n formkit-specimen-group\n grid\n mb-16\n grid-cols-[repeat(auto-fit,400px)]\n group-data-[type=\"transferlist\"]/section:grid-cols-[repeat(auto-fit,650px)]\n group-data-[type=\"multi-step\"]/section:grid-cols-[repeat(auto-fit,550px)]\n `,\n inputType: `\n formkit-input-type\n block\n font-bold\n text-neutral-900\n border-b\n border-neutral-100\n text-3xl\n mb-8\n pb-2\n capitalize\n dark:border-neutral-800 \n dark:text-neutral-50\n `\n};\nasync function fetchInputList() {\n const response = await fetch(\n \"https://raw.githubusercontent.com/formkit/input-schemas/master/index.json\"\n );\n const json = await response.json();\n return json;\n}\nasync function fetchInputSchema(input) {\n try {\n const response = await fetch(\n `https://raw.githubusercontent.com/formkit/input-schemas/master/schemas/${input}.json`\n );\n const json = await response.json();\n return json;\n } catch (error3) {\n console.error(error3);\n }\n}\nvar FormKitKitchenSink = /* @__PURE__ */ defineComponent({\n name: \"FormKitKitchenSink\",\n props: {\n schemas: {\n type: Array,\n required: false\n },\n pro: {\n type: Boolean,\n default: true\n },\n addons: {\n type: Boolean,\n default: true\n },\n forms: {\n type: Boolean,\n default: true\n },\n navigation: {\n type: Boolean,\n default: true\n }\n },\n async setup(props) {\n onMounted(() => {\n const filterNode = getNode(\"filter-checkboxes\");\n data.filters = computed(() => {\n if (!filterNode?.context)\n return [];\n const filters = filterNode.context.value;\n const filterValues = [];\n Object.keys(filters).forEach((key) => {\n filterValues.push(...filters[key]);\n });\n return filterValues;\n });\n });\n inputList = Object.keys(inputList).length ? inputList : await fetchInputList();\n const promises = [];\n const activeTab = ref(\"\");\n const inputCheckboxes = computed(() => {\n const inputGroups = {\n core: { label: \"Inputs\", name: \"core\", inputs: inputList.core }\n };\n if (props.pro) {\n inputGroups.pro = {\n label: \"Pro Inputs\",\n name: \"pro\",\n inputs: inputList.pro\n };\n }\n if (props.addons) {\n inputGroups.addons = {\n label: \"Add-ons\",\n name: \"addons\",\n inputs: inputList.addons\n };\n }\n return inputGroups;\n });\n if (!props.schemas) {\n const coreInputPromises = inputList.core.map(async (schema) => {\n const response = await fetchInputSchema(schema);\n schemas[schema] = response;\n });\n promises.push(...coreInputPromises);\n if (props.forms) {\n const formsPromises = inputList.forms.map(async (schema) => {\n const schemaName = `form/${schema}`;\n const response = await fetchInputSchema(schemaName);\n schemas[schemaName] = response;\n });\n promises.push(...formsPromises);\n }\n if (props.pro) {\n const proInputPromises = inputList.pro.map(async (schema) => {\n const response = await fetchInputSchema(schema);\n schemas[schema] = response;\n });\n promises.push(...proInputPromises);\n }\n if (props.addons) {\n const addonPromises = inputList.addons.map(async (schema) => {\n const response = await fetchInputSchema(schema);\n schemas[schema] = response;\n });\n promises.push(...addonPromises);\n }\n } else {\n const schemaPromises = props.schemas.map(async (schema) => {\n const response = await fetchInputSchema(`${schema}`);\n schemas[`${schema}`] = response;\n });\n promises.push(...schemaPromises);\n }\n const selectAll = (node) => {\n let previousValue = [];\n let skip = false;\n if (node.props.type !== \"checkbox\")\n return;\n node.on(\"created\", () => {\n const currentValue = node.value;\n if (Array.isArray(currentValue) && currentValue.length === 1 && currentValue[0] === \"all\") {\n node.input(\n node.props.options.map((option) => {\n if (typeof option !== \"string\")\n return option.value;\n return option;\n })\n );\n }\n previousValue = Array.isArray(node.value) ? node.value : [];\n });\n node.on(\"commit\", ({ payload }) => {\n if (skip) {\n skip = false;\n return;\n }\n if (!Array.isArray(payload))\n return;\n const previousValueHadAll = previousValue.includes(\"all\");\n const currentValueHasAll = payload.includes(\"all\");\n if (!previousValueHadAll && currentValueHasAll) {\n const computedOptions = node.props.options.map(\n (option) => {\n if (typeof option !== \"string\")\n return option.value;\n return option;\n }\n );\n node.input(computedOptions);\n previousValue = computedOptions;\n return;\n }\n if (previousValueHadAll && !currentValueHasAll) {\n node.input([]);\n previousValue = [];\n return;\n }\n const valueMinusAll = payload.filter((value) => value !== \"all\");\n if (valueMinusAll.length < node.props.options.length - 1 && currentValueHasAll) {\n node.input(valueMinusAll);\n previousValue = valueMinusAll;\n skip = true;\n return;\n }\n if (valueMinusAll.length === node.props.options.length - 1 && !currentValueHasAll) {\n const computedOptions = node.props.options.map(\n (option) => {\n if (typeof option !== \"string\")\n return option.value;\n return option;\n }\n );\n node.input(computedOptions);\n previousValue = Array.isArray(node.value) ? node.value : [];\n return;\n }\n });\n };\n const data = reactive({\n twClasses: classes,\n basicOptions: Array.from({ length: 15 }, (_, i) => `Option ${i + 1}`),\n asyncLoader: async () => {\n return await new Promise(() => {\n });\n },\n paginatedLoader: async ({\n page,\n hasNextPage\n }) => {\n const base = (page - 1) * 10;\n hasNextPage();\n return Array.from({ length: 10 }, (_, i) => `Option ${base + i + 1}`);\n },\n formSubmitHandler: async (data2) => {\n await new Promise((resolve) => setTimeout(resolve, 1e3));\n alert(\"Form submitted (fake) — check console for data object\");\n console.log(\"Form data:\", data2);\n },\n includes: (array, value) => {\n if (!Array.isArray(array))\n return false;\n return array.includes(value);\n },\n checkboxPlugins: [selectAll],\n filters: []\n });\n await Promise.all(promises);\n const inputKeys = Object.keys(schemas);\n const formNames = inputKeys.map((key) => {\n if (key.startsWith(\"form/\")) {\n switch (key) {\n case \"form/tshirt\":\n return {\n id: key,\n name: \"Order Form\"\n };\n default:\n const name = key.replace(\"form/\", \"\");\n return {\n id: key,\n name: name.charAt(0).toUpperCase() + name.slice(1) + \" Form\"\n };\n }\n }\n return {\n id: key,\n name: \"\"\n };\n });\n const filteredFormNames = formNames.filter((form) => form.name !== \"\");\n const forms = inputKeys.filter((schema) => {\n return schema.startsWith(\"form/\");\n });\n const inputs = inputKeys.filter(\n (schema) => !schema.startsWith(\"form/\")\n );\n const tabs = [];\n if (inputs.length) {\n tabs.push({\n id: \"kitchen-sink\",\n name: \"Kitchen Sink\"\n });\n }\n if (forms.length) {\n tabs.push(...filteredFormNames.sort((a, b) => a.name > b.name ? 1 : -1));\n }\n if (tabs.length) {\n activeTab.value = tabs[0].id;\n }\n const kitchenSinkRenders = computed(() => {\n inputs.sort();\n const schemaDefinitions = inputs.reduce(\n (schemaDefinitions2, inputName) => {\n const schemaDefinition = schemas[inputName];\n schemaDefinitions2.push({\n $el: \"div\",\n if: '$includes($filters, \"' + inputName + '\")',\n attrs: {\n key: inputName,\n class: \"$twClasses.inputSection\",\n \"data-type\": inputName\n },\n children: [\n {\n $el: \"h2\",\n attrs: {\n class: \"$twClasses.inputType\"\n },\n children: inputName\n },\n {\n $el: \"div\",\n attrs: {\n class: \"$twClasses.specimenGroup\"\n },\n children: [\n ...(Array.isArray(schemaDefinition) ? schemaDefinition : [schemaDefinition]).map((specimen) => {\n return {\n $el: \"div\",\n attrs: {\n class: \"$twClasses.specimen\"\n },\n children: [specimen]\n };\n })\n ]\n }\n ]\n });\n return schemaDefinitions2;\n },\n []\n );\n return h(\n KeepAlive,\n {},\n {\n default: () => {\n return activeTab.value === \"kitchen-sink\" ? h(FormKitSchema, { schema: schemaDefinitions, data }) : null;\n }\n }\n );\n });\n const formRenders = computed(() => {\n return filteredFormNames.map((form) => {\n const schemaDefinition = schemas[form.id];\n return h(\n \"div\",\n {\n key: form.id\n },\n activeTab.value === form.id ? [\n h(\n \"div\",\n {\n class: classes.formContainer\n },\n [\n h(FormKitSchema, {\n schema: schemaDefinition[0],\n data\n })\n ]\n )\n ] : \"\"\n );\n }).filter((form) => form.children);\n });\n const tabBar = computed(() => {\n return h(\n \"div\",\n {\n key: \"tab-bar\",\n class: classes.tabs\n },\n tabs.map((tab) => {\n return h(\n \"span\",\n {\n class: classes.tab,\n key: tab.id,\n \"data-tab\": tab.id,\n \"data-active\": activeTab.value === tab.id || void 0,\n onClick: () => {\n activeTab.value = tab.id;\n }\n },\n tab.name\n );\n })\n );\n });\n const filterCheckboxes = computed(() => {\n const createCheckboxSchema = (inputGroup) => {\n return {\n $el: \"div\",\n attrs: {\n class: \"$twClasses.filterGroup\"\n },\n children: [\n {\n $formkit: \"checkbox\",\n name: inputGroup.name,\n label: inputGroup.label,\n plugins: \"$checkboxPlugins\",\n value: [\"all\"],\n options: [\n {\n label: \"All\",\n value: \"all\"\n },\n ...Array.isArray(inputGroup.inputs) ? inputGroup.inputs : []\n ]\n }\n ]\n };\n };\n const filterSchema = h(FormKitSchema, {\n key: \"filter-checkboxes\",\n data,\n schema: {\n $formkit: \"group\",\n id: \"filter-checkboxes\",\n children: [\n {\n $el: \"div\",\n attrs: {\n class: \"$twClasses.filterContainer\"\n },\n children: Object.keys(inputCheckboxes.value).map((key) => {\n const inputGroup = inputCheckboxes.value[key];\n return createCheckboxSchema(inputGroup);\n })\n }\n ]\n }\n });\n return h(\n KeepAlive,\n {},\n {\n default: () => {\n if (!(tabs.find((tab) => tab.id === \"kitchen-sink\") && activeTab.value === \"kitchen-sink\")) {\n return null;\n }\n return filterSchema;\n }\n }\n );\n });\n return () => {\n return h(\n \"div\",\n {\n class: classes.container\n },\n [\n tabs.length > 1 ? tabBar.value : void 0,\n filterCheckboxes.value,\n ...formRenders.value,\n kitchenSinkRenders.value\n ]\n );\n };\n }\n});\nvar messages = createSection(\"messages\", () => ({\n $el: \"ul\",\n if: \"$fns.length($messages)\"\n}));\nvar 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}));\nvar definition = messages(message(\"$message.value\"));\nvar FormKitMessages = /* @__PURE__ */ defineComponent({\n props: {\n node: {\n type: Object,\n required: false\n },\n sectionsSchema: {\n type: Object,\n default: {}\n },\n defaultPosition: {\n type: [String, Boolean],\n default: false\n },\n library: {\n type: Object,\n default: () => ({})\n }\n },\n setup(props, context) {\n const node = computed(() => {\n return props.node || inject(parentSymbol, void 0);\n });\n watch(\n node,\n () => {\n if (node.value?.context && !undefine(props.defaultPosition)) {\n node.value.context.defaultMessagePlacement = false;\n }\n },\n { immediate: true }\n );\n const schema = definition(props.sectionsSchema || {});\n const data = computed(() => {\n return {\n messages: node.value?.context?.messages || {},\n fns: node.value?.context?.fns || {},\n classes: node.value?.context?.classes || {}\n };\n });\n return () => node.value?.context ? h(\n FormKitSchema_default,\n { schema, data: data.value, library: props.library },\n { ...context.slots }\n ) : null;\n }\n});\nfunction useConfig(config) {\n const options = Object.assign(\n {\n alias: \"FormKit\",\n schemaAlias: \"FormKitSchema\"\n },\n typeof config === \"function\" ? config() : config\n );\n const rootConfig = createConfig(options.config || {});\n options.config = { rootConfig };\n provide(optionsSymbol, options);\n provide(configSymbol, rootConfig);\n if (typeof window !== \"undefined\") {\n globalThis.__FORMKIT_CONFIGS__ = (globalThis.__FORMKIT_CONFIGS__ || []).concat([rootConfig]);\n }\n}\nvar FormKitProvider = /* @__PURE__ */ defineComponent(\n function FormKitProvider2(props, { slots, attrs }) {\n const options = {};\n if (props.config) {\n useConfig(props.config);\n }\n return () => slots.default ? slots.default(options).map((vnode) => {\n return h(vnode, {\n ...attrs,\n ...vnode.props\n });\n }) : null;\n },\n { props: [\"config\"], name: \"FormKitProvider\", inheritAttrs: false }\n);\nvar FormKitConfigLoader = /* @__PURE__ */ defineComponent(\n async function FormKitConfigLoader2(props, context) {\n let config = {};\n if (props.configFile) {\n const configFile = await import(\n /*@__formkit.config.ts__*/\n /* @vite-ignore */\n /* webpackIgnore: true */\n props.configFile\n );\n config = \"default\" in configFile ? configFile.default : configFile;\n }\n if (typeof config === \"function\") {\n config = config();\n }\n const useDefaultConfig = props.defaultConfig ?? true;\n if (useDefaultConfig) {\n const { defaultConfig: defaultConfig2 } = await Promise.resolve().then(() => (init_defaultConfig(), defaultConfig_exports));\n config = /* @__PURE__ */ defaultConfig2(config);\n }\n return () => h(FormKitProvider, { ...context.attrs, config }, context.slots);\n },\n {\n props: [\"defaultConfig\", \"configFile\"],\n inheritAttrs: false\n }\n);\nvar FormKitLazyProvider = /* @__PURE__ */ defineComponent(\n function FormKitLazyProvider2(props, context) {\n const config = inject(optionsSymbol, null);\n const passthru = (vnode) => {\n return h(vnode, {\n ...context.attrs,\n ...vnode.props\n });\n };\n if (config) {\n return () => context.slots?.default ? context.slots.default().map(passthru) : null;\n }\n const instance = getCurrentInstance();\n if (instance.suspense) {\n return () => h(FormKitConfigLoader, props, {\n default: () => context.slots?.default ? context.slots.default().map(passthru) : null\n });\n }\n return () => h(Suspense, null, {\n ...context.slots,\n default: () => h(FormKitConfigLoader, { ...context.attrs, ...props }, context.slots)\n });\n },\n {\n props: [\"defaultConfig\", \"configFile\"],\n inheritAttrs: false\n }\n);\nfunction useFormKitContext(addressOrEffect, optionalEffect) {\n const address = typeof addressOrEffect === \"string\" ? addressOrEffect : void 0;\n const effect = typeof addressOrEffect === \"function\" ? addressOrEffect : optionalEffect;\n const context = ref();\n const parentNode = inject(parentSymbol, null);\n if (parentNode) {\n if (address) {\n context.value = parentNode.at(address)?.context;\n const root = parentNode.at(\"$root\");\n if (root) {\n const receipt = root.on(\"child.deep\", () => {\n const targetNode = parentNode.at(address);\n if (targetNode && targetNode.context !== context.value) {\n context.value = targetNode.context;\n if (effect)\n effect(context.value);\n }\n });\n onUnmounted(() => {\n root.off(receipt);\n });\n }\n } else {\n context.value = parentNode?.context;\n }\n }\n if (context.value && effect)\n effect(context.value);\n return context;\n}\nfunction useFormKitContextById(id, effect) {\n const context = ref();\n const targetNode = getNode(id);\n if (targetNode)\n context.value = targetNode.context;\n if (!targetNode) {\n const receipt = watchRegistry(id, ({ payload: node }) => {\n if (node) {\n context.value = node.context;\n stopWatch(receipt);\n if (effect)\n effect(context.value);\n }\n });\n }\n if (context.value && effect)\n effect(context.value);\n return context;\n}\nfunction useFormKitNodeById(id, effect) {\n const nodeRef = ref();\n const targetNode = getNode(id);\n if (targetNode)\n nodeRef.value = targetNode;\n if (!targetNode) {\n const receipt = watchRegistry(id, ({ payload: node }) => {\n if (node) {\n nodeRef.value = node;\n stopWatch(receipt);\n if (effect)\n effect(node);\n }\n });\n }\n if (nodeRef.value && effect)\n effect(nodeRef.value);\n return nodeRef;\n}\nvar summary = createSection(\"summary\", () => ({\n $el: \"div\",\n attrs: {\n \"aria-live\": \"polite\"\n }\n}));\nvar summaryInner = createSection(\"summaryInner\", () => ({\n $el: \"div\",\n if: \"$summaries.length && $showSummaries\"\n}));\nvar messages2 = createSection(\"messages\", () => ({\n $el: \"ul\",\n if: \"$summaries.length && $showSummaries\"\n}));\nvar message2 = createSection(\"message\", () => ({\n $el: \"li\",\n for: [\"summary\", \"$summaries\"],\n attrs: {\n key: \"$summary.key\",\n \"data-message-type\": \"$summary.type\"\n }\n}));\nvar summaryHeader = createSection(\"summaryHeader\", () => ({\n $el: \"h2\",\n attrs: {\n id: \"$id\"\n }\n}));\nvar messageLink = createSection(\"messageLink\", () => ({\n $el: \"a\",\n attrs: {\n id: \"$summary.key\",\n href: '$: \"#\" + $summary.id',\n onClick: \"$jumpLink\"\n }\n}));\nvar definition2 = summary(\n summaryInner(\n summaryHeader(\"$summaryHeader\"),\n messages2(message2(messageLink(\"$summary.message\")))\n )\n);\nvar FormKitSummary = /* @__PURE__ */ defineComponent({\n props: {\n node: {\n type: Object,\n required: false\n },\n forceShow: {\n type: Boolean,\n default: false\n },\n sectionsSchema: {\n type: Object,\n default: {}\n }\n },\n emits: {\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n show: (_summaries) => true\n },\n setup(props, context) {\n const id = `summary-${token()}`;\n const node = computed(() => {\n return props.node || inject(parentSymbol, void 0);\n });\n if (!node)\n throw new Error(\n \"FormKitSummary must have a FormKit parent or use the node prop.\"\n );\n const summaryContexts = ref([]);\n const showSummaries = ref(false);\n const summaries = computed(() => {\n const summarizedMessages = [];\n summaryContexts.value.forEach((context2) => {\n for (const idx in context2.messages) {\n const message3 = context2.messages[idx];\n if (typeof message3.value !== \"string\")\n continue;\n summarizedMessages.push({\n message: message3.value,\n id: context2.id,\n key: `${context2.id}-${message3.key}`,\n type: message3.type\n });\n }\n });\n return summarizedMessages;\n });\n const addContexts = () => {\n summaryContexts.value = [];\n node.value?.walk(\n (child) => child.context && summaryContexts.value.push(child.context)\n );\n };\n node.value?.on(\"submit-raw\", async () => {\n addContexts();\n if (summaries.value.length === 0)\n return;\n context.emit(\"show\", summaries.value);\n showSummaries.value = true;\n await nextTick();\n if (typeof window !== \"undefined\") {\n document.getElementById(id)?.scrollIntoView({ behavior: \"smooth\" });\n if (summaries.value[0]) {\n document.getElementById(summaries.value[0].key)?.focus();\n }\n }\n });\n node.value?.on(\"child\", addContexts);\n function jumpLink(e) {\n if (e.target instanceof HTMLAnchorElement) {\n e.preventDefault();\n const id2 = e.target.getAttribute(\"href\")?.substring(1);\n if (id2) {\n document.getElementById(id2)?.scrollIntoView({ behavior: \"smooth\" });\n document.getElementById(id2)?.focus();\n }\n }\n }\n localize(\"summaryHeader\", \"There were errors in your form.\")(node.value);\n const schema = definition2(props.sectionsSchema || {});\n const data = computed(() => {\n return {\n id,\n fns: node.value?.context?.fns || {},\n classes: node.value?.context?.classes || {},\n summaries: summaries.value,\n showSummaries: props.forceShow || showSummaries.value,\n summaryHeader: node.value?.context?.ui?.summaryHeader?.value || \"\",\n jumpLink\n };\n });\n return () => node.value?.context ? h(FormKitSchema_default, { schema, data: data.value }, { ...context.slots }) : null;\n }\n});\n\n// packages/vue/src/index.ts\ninit_defaultConfig();\ninit_bindings();\nvar FormKitIcon = /* @__PURE__ */ 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 const icon = ref(void 0);\n const config = inject(optionsSymbol, {});\n const parent = inject(parentSymbol, null);\n let iconHandler = void 0;\n function loadIcon() {\n if (!iconHandler || typeof iconHandler !== \"function\")\n return;\n const iconOrPromise = iconHandler(props.icon);\n if (iconOrPromise instanceof Promise) {\n iconOrPromise.then((iconValue) => {\n icon.value = iconValue;\n });\n } else {\n icon.value = iconOrPromise;\n }\n }\n if (props.iconLoader && typeof props.iconLoader === \"function\") {\n iconHandler = createIconHandler(props.iconLoader);\n } else if (parent && parent.props?.iconLoader) {\n iconHandler = createIconHandler(parent.props.iconLoader);\n } else if (props.iconLoaderUrl && typeof props.iconLoaderUrl === \"function\") {\n iconHandler = createIconHandler(iconHandler, props.iconLoaderUrl);\n } else {\n const iconPlugin = config?.plugins?.find((plugin2) => {\n return typeof plugin2.iconHandler === \"function\";\n });\n if (iconPlugin) {\n iconHandler = iconPlugin.iconHandler;\n }\n }\n watch(\n () => props.icon,\n () => {\n loadIcon();\n },\n { immediate: true }\n );\n return () => {\n if (props.icon && icon.value) {\n return h(\"span\", {\n class: \"formkit-icon\",\n innerHTML: icon.value\n });\n }\n return null;\n };\n }\n});\nfunction resetCount() {\n resetCounts();\n resetCount$1();\n}\n\nexport { FormKit_default as FormKit, FormKitIcon, FormKitKitchenSink, FormKitLazyProvider, FormKitMessages, FormKitProvider, FormKitRoot, FormKitSchema, FormKitSummary, bindings_default as bindings, componentSymbol, configSymbol, createInput, defaultConfig, defineFormKitConfig, getCurrentSchemaNode, onSSRComplete, optionsSymbol, parentSymbol, plugin, resetCount, rootSymbol, ssrComplete, useConfig, useFormKitContext, useFormKitContextById, useFormKitNodeById, useInput };\n//# sourceMappingURL=out.js.map\n//# sourceMappingURL=index.mjs.map","/**\n * Detects support for emoji character sets.\n *\n * Based on the Modernizr emoji detection.\n * https://github.com/Modernizr/Modernizr/blob/347ddb078116cee91b25b6e897e211b023f9dcb4/feature-detects/emoji.js\n *\n * @return {Boolean} true or false\n * @example\n *\n * hasEmojiSupport()\n * // => true|false\n */\nexport const hasEmojiSupport = () => {\n const pixelRatio = window.devicePixelRatio || 1;\n const offset = 12 * pixelRatio;\n const node = document.createElement('canvas');\n\n // canvastext support\n if (\n !node.getContext ||\n !node.getContext('2d') ||\n typeof node.getContext('2d').fillText !== 'function'\n ) {\n return false;\n }\n\n const ctx = node.getContext('2d');\n\n ctx.fillStyle = '#f00';\n ctx.textBaseline = 'top';\n ctx.font = '32px Arial';\n ctx.fillText('\\ud83d\\udc28', 0, 0); // U+1F428 KOALA\n return ctx.getImageData(offset, offset, 1, 1).data[0] !== 0;\n};\n\nexport const removeEmoji = text => {\n if (text) {\n return text\n .replace(\n /([\\u2700-\\u27BF]|[\\uE000-\\uF8FF]|\\uD83C[\\uDC00-\\uDFFF]|\\uD83D[\\uDC00-\\uDFFF]|[\\u2011-\\u26FF]|\\uD83E[\\uDD10-\\uDDFF])/g,\n ''\n )\n .replace(/\\s+/g, ' ')\n .trim();\n }\n return '';\n};\n","<script>\n// 🚨 This component is deprecated. Please use fluent-icon instead.\nimport { hasEmojiSupport } from 'shared/helpers/emoji';\nimport { mapGetters } from 'vuex';\n\nexport default {\n props: {\n icon: { type: String, default: '' },\n iconSize: { type: [Number, String], default: 20 },\n emoji: { type: String, default: '' },\n },\n computed: {\n ...mapGetters({ uiSettings: 'getUISettings' }),\n isIconTypeEmoji() {\n const { icon_type: iconType } = this.uiSettings || {};\n return iconType === 'emoji';\n },\n showEmoji() {\n return this.isIconTypeEmoji && this.emoji && hasEmojiSupport(this.emoji);\n },\n showIcon() {\n return !this.showEmoji && this.icon;\n },\n iconContent() {\n return this.showEmoji ? this.emoji : '';\n },\n className() {\n return {\n 'icon--emoji': this.showEmoji,\n 'icon--font': this.showIcon,\n [this.icon]: this.showIcon,\n };\n },\n },\n};\n</script>\n\n<template>\n <i v-if=\"showEmoji\" :class=\"className\">{{ iconContent }}</i>\n <fluent-icon\n v-else-if=\"showIcon\"\n :size=\"iconSize\"\n :icon=\"icon\"\n class=\"flex-shrink-0\"\n :class=\"className\"\n />\n</template>\n\n<style lang=\"scss\" scoped>\n.icon--emoji {\n font-style: normal;\n}\n</style>\n","<script>\nimport Spinner from 'shared/components/Spinner.vue';\nimport EmojiOrIcon from 'shared/components/EmojiOrIcon.vue';\n\nexport default {\n name: 'WootButton',\n components: { EmojiOrIcon, Spinner },\n props: {\n type: {\n type: String,\n default: 'submit',\n },\n variant: {\n type: String,\n default: '',\n },\n size: {\n type: String,\n default: '',\n },\n icon: {\n type: String,\n default: '',\n },\n emoji: {\n type: String,\n default: '',\n },\n colorScheme: {\n type: String,\n default: 'primary',\n },\n classNames: {\n type: [String, Object],\n default: '',\n },\n isDisabled: {\n type: Boolean,\n default: false,\n },\n isLoading: {\n type: Boolean,\n default: false,\n },\n isExpanded: {\n type: Boolean,\n default: false,\n },\n },\n computed: {\n variantClasses() {\n if (this.variant.includes('link')) {\n return `clear ${this.variant}`;\n }\n return this.variant;\n },\n hasOnlyIcon() {\n const hasEmojiOrIcon = this.emoji || this.icon;\n return !this.$slots.default && hasEmojiOrIcon;\n },\n hasOnlyIconClasses() {\n return this.hasOnlyIcon ? 'button--only-icon' : '';\n },\n buttonClasses() {\n return [\n this.variantClasses,\n this.hasOnlyIconClasses,\n this.size,\n this.colorScheme,\n this.classNames,\n this.isDisabled ? 'disabled' : '',\n this.isExpanded ? 'expanded' : '',\n ];\n },\n iconSize() {\n switch (this.size) {\n case 'tiny':\n return 12;\n case 'small':\n return 14;\n case 'medium':\n return 16;\n case 'large':\n return 18;\n\n default:\n return 16;\n }\n },\n showDarkSpinner() {\n return (\n this.colorScheme === 'secondary' ||\n this.variant === 'clear' ||\n this.variant === 'link' ||\n this.variant === 'hollow'\n );\n },\n },\n};\n</script>\n\n<template>\n <button\n class=\"button\"\n :type=\"type\"\n :class=\"buttonClasses\"\n :disabled=\"isDisabled || isLoading\"\n >\n <Spinner\n v-if=\"isLoading\"\n size=\"small\"\n :color-scheme=\"showDarkSpinner ? 'dark' : ''\"\n />\n <EmojiOrIcon\n v-else-if=\"icon || emoji\"\n class=\"icon\"\n :emoji=\"emoji\"\n :icon=\"icon\"\n :icon-size=\"iconSize\"\n />\n <span\n v-if=\"$slots.default\"\n class=\"button__content\"\n :class=\"{ 'text-left rtl:text-right': size !== 'expanded' }\"\n >\n <slot />\n </span>\n </button>\n</template>\n","const countries = [\n {\n name: 'Afghanistan',\n dial_code: '+93',\n emoji: '🇦🇫',\n id: 'AF',\n },\n {\n name: 'Aland Islands',\n dial_code: '+358',\n emoji: '🇦🇽',\n id: 'AX',\n },\n {\n name: 'Albania',\n dial_code: '+355',\n emoji: '🇦🇱',\n id: 'AL',\n },\n {\n name: 'Algeria',\n dial_code: '+213',\n emoji: '🇩🇿',\n id: 'DZ',\n },\n {\n name: 'AmericanSamoa',\n dial_code: '+1684',\n emoji: '🇦🇸',\n id: 'AS',\n },\n {\n name: 'Andorra',\n dial_code: '+376',\n emoji: '🇦🇩',\n id: 'AD',\n },\n {\n name: 'Angola',\n dial_code: '+244',\n emoji: '🇦🇴',\n id: 'AO',\n },\n {\n name: 'Anguilla',\n dial_code: '+1264',\n emoji: '🇦🇮',\n id: 'AI',\n },\n {\n name: 'Antarctica',\n dial_code: '+672',\n emoji: '🇦🇶',\n id: 'AQ',\n },\n {\n name: 'Antigua and Barbuda',\n dial_code: '+1268',\n emoji: '🇦🇬',\n id: 'AG',\n },\n {\n name: 'Argentina',\n dial_code: '+54',\n emoji: '🇦🇷',\n id: 'AR',\n },\n {\n name: 'Armenia',\n dial_code: '+374',\n emoji: '🇦🇲',\n id: 'AM',\n },\n {\n name: 'Aruba',\n dial_code: '+297',\n emoji: '🇦🇼',\n id: 'AW',\n },\n {\n name: 'Australia',\n dial_code: '+61',\n emoji: '🇦🇺',\n id: 'AU',\n },\n {\n name: 'Austria',\n dial_code: '+43',\n emoji: '🇦🇹',\n id: 'AT',\n },\n {\n name: 'Azerbaijan',\n dial_code: '+994',\n emoji: '🇦🇿',\n id: 'AZ',\n },\n {\n name: 'Bahamas',\n dial_code: '+1242',\n emoji: '🇧🇸',\n id: 'BS',\n },\n {\n name: 'Bahrain',\n dial_code: '+973',\n emoji: '🇧ðŸ‡',\n id: 'BH',\n },\n {\n name: 'Bangladesh',\n dial_code: '+880',\n emoji: '🇧🇩',\n id: 'BD',\n },\n {\n name: 'Barbados',\n dial_code: '+1246',\n emoji: '🇧🇧',\n id: 'BB',\n },\n {\n name: 'Belarus',\n dial_code: '+375',\n emoji: '🇧🇾',\n id: 'BY',\n },\n {\n name: 'Belgium',\n dial_code: '+32',\n emoji: '🇧🇪',\n id: 'BE',\n },\n {\n name: 'Belize',\n dial_code: '+501',\n emoji: '🇧🇿',\n id: 'BZ',\n },\n {\n name: 'Benin',\n dial_code: '+229',\n emoji: '🇧🇯',\n id: 'BJ',\n },\n {\n name: 'Bermuda',\n dial_code: '+1441',\n emoji: '🇧🇲',\n id: 'BM',\n },\n {\n name: 'Bhutan',\n dial_code: '+975',\n emoji: '🇧🇹',\n id: 'BT',\n },\n {\n name: 'Bolivia, Plurinational State of',\n dial_code: '+591',\n emoji: '🇧🇴',\n id: 'BO',\n },\n {\n name: 'Bosnia and Herzegovina',\n dial_code: '+387',\n emoji: '🇧🇦',\n id: 'BA',\n },\n {\n name: 'Botswana',\n dial_code: '+267',\n emoji: '🇧🇼',\n id: 'BW',\n },\n {\n name: 'Brazil',\n dial_code: '+55',\n emoji: '🇧🇷',\n id: 'BR',\n },\n {\n name: 'British Indian Ocean Territory',\n dial_code: '+246',\n emoji: '🇮🇴',\n id: 'IO',\n },\n {\n name: 'Brunei Darussalam',\n dial_code: '+673',\n emoji: '🇧🇳',\n id: 'BN',\n },\n {\n name: 'Bulgaria',\n dial_code: '+359',\n emoji: '🇧🇬',\n id: 'BG',\n },\n {\n name: 'Burkina Faso',\n dial_code: '+226',\n emoji: '🇧🇫',\n id: 'BF',\n },\n {\n name: 'Burundi',\n dial_code: '+257',\n emoji: '🇧🇮',\n id: 'BI',\n },\n {\n name: 'Cambodia',\n dial_code: '+855',\n emoji: '🇰ðŸ‡',\n id: 'KH',\n },\n {\n name: 'Cameroon',\n dial_code: '+237',\n emoji: '🇨🇲',\n id: 'CM',\n },\n {\n name: 'Canada',\n dial_code: '+1',\n emoji: '🇨🇦',\n id: 'CA',\n },\n {\n name: 'Cape Verde',\n dial_code: '+238',\n emoji: '🇨🇻',\n id: 'CV',\n },\n {\n name: 'Cayman Islands',\n dial_code: '+345',\n emoji: '🇰🇾',\n id: 'KY',\n },\n {\n name: 'Central African Republic',\n dial_code: '+236',\n emoji: '🇨🇫',\n id: 'CF',\n },\n {\n name: 'Chad',\n dial_code: '+235',\n emoji: '🇹🇩',\n id: 'TD',\n },\n {\n name: 'Chile',\n dial_code: '+56',\n emoji: '🇨🇱',\n id: 'CL',\n },\n {\n name: 'China',\n dial_code: '+86',\n emoji: '🇨🇳',\n id: 'CN',\n },\n {\n name: 'Christmas Island',\n dial_code: '+61',\n emoji: '🇨🇽',\n id: 'CX',\n },\n {\n name: 'Cocos (Keeling) Islands',\n dial_code: '+61',\n emoji: '🇨🇨',\n id: 'CC',\n },\n {\n name: 'Colombia',\n dial_code: '+57',\n emoji: '🇨🇴',\n id: 'CO',\n },\n {\n name: 'Comoros',\n dial_code: '+269',\n emoji: '🇰🇲',\n id: 'KM',\n },\n {\n name: 'Congo',\n dial_code: '+242',\n emoji: '🇨🇬',\n id: 'CG',\n },\n {\n name: 'Congo, The Democratic Republic of the Congo',\n dial_code: '+243',\n emoji: '🇨🇩',\n id: 'CD',\n },\n {\n name: 'Cook Islands',\n dial_code: '+682',\n emoji: '🇨🇰',\n id: 'CK',\n },\n {\n name: 'Costa Rica',\n dial_code: '+506',\n emoji: '🇨🇷',\n id: 'CR',\n },\n {\n name: \"Cote d'Ivoire\",\n dial_code: '+225',\n emoji: '🇨🇮',\n id: 'CI',\n },\n {\n name: 'Croatia',\n dial_code: '+385',\n emoji: 'ðŸ‡ðŸ‡·',\n id: 'HR',\n },\n {\n name: 'Cuba',\n dial_code: '+53',\n emoji: '🇨🇺',\n id: 'CU',\n },\n {\n name: 'Cyprus',\n dial_code: '+357',\n emoji: '🇨🇾',\n id: 'CY',\n },\n {\n name: 'Czech Republic',\n dial_code: '+420',\n emoji: '🇨🇿',\n id: 'CZ',\n },\n {\n name: 'Denmark',\n dial_code: '+45',\n emoji: '🇩🇰',\n id: 'DK',\n },\n {\n name: 'Djibouti',\n dial_code: '+253',\n emoji: '🇩🇯',\n id: 'DJ',\n },\n {\n name: 'Dominica',\n dial_code: '+1767',\n emoji: '🇩🇲',\n id: 'DM',\n },\n {\n name: 'Dominican Republic',\n dial_code: '+1849',\n emoji: '🇩🇴',\n id: 'DO',\n },\n {\n name: 'Ecuador',\n dial_code: '+593',\n emoji: '🇪🇨',\n id: 'EC',\n },\n {\n name: 'Egypt',\n dial_code: '+20',\n emoji: '🇪🇬',\n id: 'EG',\n },\n {\n name: 'El Salvador',\n dial_code: '+503',\n emoji: '🇸🇻',\n id: 'SV',\n },\n {\n name: 'Equatorial Guinea',\n dial_code: '+240',\n emoji: '🇬🇶',\n id: 'GQ',\n },\n {\n name: 'Eritrea',\n dial_code: '+291',\n emoji: '🇪🇷',\n id: 'ER',\n },\n {\n name: 'Estonia',\n dial_code: '+372',\n emoji: '🇪🇪',\n id: 'EE',\n },\n {\n name: 'Ethiopia',\n dial_code: '+251',\n emoji: '🇪🇹',\n id: 'ET',\n },\n {\n name: 'Falkland Islands (Malvinas)',\n dial_code: '+500',\n emoji: '🇫🇰',\n id: 'FK',\n },\n {\n name: 'Faroe Islands',\n dial_code: '+298',\n emoji: '🇫🇴',\n id: 'FO',\n },\n {\n name: 'Fiji',\n dial_code: '+679',\n emoji: '🇫🇯',\n id: 'FJ',\n },\n {\n name: 'Finland',\n dial_code: '+358',\n emoji: '🇫🇮',\n id: 'FI',\n },\n {\n name: 'France',\n dial_code: '+33',\n emoji: '🇫🇷',\n id: 'FR',\n },\n {\n name: 'French Guiana',\n dial_code: '+594',\n emoji: '🇬🇫',\n id: 'GF',\n },\n {\n name: 'French Polynesia',\n dial_code: '+689',\n emoji: '🇵🇫',\n id: 'PF',\n },\n {\n name: 'Gabon',\n dial_code: '+241',\n emoji: '🇬🇦',\n id: 'GA',\n },\n {\n name: 'Gambia',\n dial_code: '+220',\n emoji: '🇬🇲',\n id: 'GM',\n },\n {\n name: 'Georgia',\n dial_code: '+995',\n emoji: '🇬🇪',\n id: 'GE',\n },\n {\n name: 'Germany',\n dial_code: '+49',\n emoji: '🇩🇪',\n id: 'DE',\n },\n {\n name: 'Ghana',\n dial_code: '+233',\n emoji: '🇬ðŸ‡',\n id: 'GH',\n },\n {\n name: 'Gibraltar',\n dial_code: '+350',\n emoji: '🇬🇮',\n id: 'GI',\n },\n {\n name: 'Greece',\n dial_code: '+30',\n emoji: '🇬🇷',\n id: 'GR',\n },\n {\n name: 'Greenland',\n dial_code: '+299',\n emoji: '🇬🇱',\n id: 'GL',\n },\n {\n name: 'Grenada',\n dial_code: '+1473',\n emoji: '🇬🇩',\n id: 'GD',\n },\n {\n name: 'Guadeloupe',\n dial_code: '+590',\n emoji: '🇬🇵',\n id: 'GP',\n },\n {\n name: 'Guam',\n dial_code: '+1671',\n emoji: '🇬🇺',\n id: 'GU',\n },\n {\n name: 'Guatemala',\n dial_code: '+502',\n emoji: '🇬🇹',\n id: 'GT',\n },\n {\n name: 'Guernsey',\n dial_code: '+44',\n emoji: '🇬🇬',\n id: 'GG',\n },\n {\n name: 'Guinea',\n dial_code: '+224',\n emoji: '🇬🇳',\n id: 'GN',\n },\n {\n name: 'Guinea-Bissau',\n dial_code: '+245',\n emoji: '🇬🇼',\n id: 'GW',\n },\n {\n name: 'Guyana',\n dial_code: '+595',\n emoji: '🇬🇾',\n id: 'GY',\n },\n {\n name: 'Haiti',\n dial_code: '+509',\n emoji: 'ðŸ‡ðŸ‡¹',\n id: 'HT',\n },\n {\n name: 'Holy See (Vatican City State)',\n dial_code: '+379',\n emoji: '🇻🇦',\n id: 'VA',\n },\n {\n name: 'Honduras',\n dial_code: '+504',\n emoji: 'ðŸ‡ðŸ‡³',\n id: 'HN',\n },\n {\n name: 'Hong Kong',\n dial_code: '+852',\n emoji: 'ðŸ‡ðŸ‡°',\n id: 'HK',\n },\n {\n name: 'Hungary',\n dial_code: '+36',\n emoji: 'ðŸ‡ðŸ‡º',\n id: 'HU',\n },\n {\n name: 'Iceland',\n dial_code: '+354',\n emoji: '🇮🇸',\n id: 'IS',\n },\n {\n name: 'India',\n dial_code: '+91',\n emoji: '🇮🇳',\n id: 'IN',\n },\n {\n name: 'Indonesia',\n dial_code: '+62',\n emoji: '🇮🇩',\n id: 'ID',\n },\n {\n name: 'Iran, Islamic Republic of Persian Gulf',\n dial_code: '+98',\n emoji: '🇮🇷',\n id: 'IR',\n },\n {\n name: 'Iraq',\n dial_code: '+964',\n emoji: '🇮🇷',\n id: 'IQ',\n },\n {\n name: 'Ireland',\n dial_code: '+353',\n emoji: '🇮🇪',\n id: 'IE',\n },\n {\n name: 'Isle of Man',\n dial_code: '+44',\n emoji: '🇮🇲',\n id: 'IM',\n },\n {\n name: 'Israel',\n dial_code: '+972',\n emoji: '🇮🇱',\n id: 'IL',\n },\n {\n name: 'Italy',\n dial_code: '+39',\n emoji: '🇮🇹',\n id: 'IT',\n },\n {\n name: 'Jamaica',\n dial_code: '+1876',\n emoji: '🇯🇲',\n id: 'JM',\n },\n {\n name: 'Japan',\n dial_code: '+81',\n emoji: '🇯🇵',\n id: 'JP',\n },\n {\n name: 'Jersey',\n dial_code: '+44',\n emoji: '🇯🇪',\n id: 'JE',\n },\n {\n name: 'Jordan',\n dial_code: '+962',\n emoji: '🇯🇴',\n id: 'JO',\n },\n {\n name: 'Kazakhstan',\n dial_code: '+77',\n emoji: '🇰🇿',\n id: 'KZ',\n },\n {\n name: 'Kenya',\n dial_code: '+254',\n emoji: '🇰🇪',\n id: 'KE',\n },\n {\n name: 'Kiribati',\n dial_code: '+686',\n emoji: '🇰🇮',\n id: 'KI',\n },\n {\n name: \"Korea, Democratic People's Republic of Korea\",\n dial_code: '+850',\n emoji: '🇰🇵',\n id: 'KP',\n },\n {\n name: 'Korea, Republic of South Korea',\n dial_code: '+82',\n emoji: '🇰🇷',\n id: 'KR',\n },\n {\n name: 'Kuwait',\n dial_code: '+965',\n emoji: '🇰🇼',\n id: 'KW',\n },\n {\n name: 'Kyrgyzstan',\n dial_code: '+996',\n emoji: '🇰🇬',\n id: 'KG',\n },\n {\n name: 'Laos',\n dial_code: '+856',\n emoji: '🇱🇦',\n id: 'LA',\n },\n {\n name: 'Latvia',\n dial_code: '+371',\n emoji: '🇱🇻',\n id: 'LV',\n },\n {\n name: 'Lebanon',\n dial_code: '+961',\n emoji: '🇱🇧',\n id: 'LB',\n },\n {\n name: 'Lesotho',\n dial_code: '+266',\n emoji: '🇱🇸',\n id: 'LS',\n },\n {\n name: 'Liberia',\n dial_code: '+231',\n emoji: '🇱🇷',\n id: 'LR',\n },\n {\n name: 'Libyan Arab Jamahiriya',\n dial_code: '+218',\n emoji: '🇱🇾',\n id: 'LY',\n },\n {\n name: 'Liechtenstein',\n dial_code: '+423',\n emoji: '🇱🇮',\n id: 'LI',\n },\n {\n name: 'Lithuania',\n dial_code: '+370',\n emoji: '🇱🇹',\n id: 'LT',\n },\n {\n name: 'Luxembourg',\n dial_code: '+352',\n emoji: '🇱🇺',\n id: 'LU',\n },\n {\n name: 'Macao',\n dial_code: '+853',\n emoji: '🇲🇴',\n id: 'MO',\n },\n {\n name: 'Macedonia',\n dial_code: '+389',\n emoji: '🇲🇰',\n id: 'MK',\n },\n {\n name: 'Madagascar',\n dial_code: '+261',\n emoji: '🇲🇬',\n id: 'MG',\n },\n {\n name: 'Malawi',\n dial_code: '+265',\n emoji: '🇲🇼',\n id: 'MW',\n },\n {\n name: 'Malaysia',\n dial_code: '+60',\n emoji: '🇲🇾',\n id: 'MY',\n },\n {\n name: 'Maldives',\n dial_code: '+960',\n emoji: '🇲🇻',\n id: 'MV',\n },\n {\n name: 'Mali',\n dial_code: '+223',\n emoji: '🇲🇱',\n id: 'ML',\n },\n {\n name: 'Malta',\n dial_code: '+356',\n emoji: '🇲🇹',\n id: 'MT',\n },\n {\n name: 'Marshall Islands',\n dial_code: '+692',\n emoji: '🇲ðŸ‡',\n id: 'MH',\n },\n {\n name: 'Martinique',\n dial_code: '+596',\n emoji: '🇲🇶',\n id: 'MQ',\n },\n {\n name: 'Mauritania',\n dial_code: '+222',\n emoji: '🇲🇷',\n id: 'MR',\n },\n {\n name: 'Mauritius',\n dial_code: '+230',\n emoji: '🇲🇺',\n id: 'MU',\n },\n {\n name: 'Mayotte',\n dial_code: '+262',\n emoji: '🇾🇹',\n id: 'YT',\n },\n {\n name: 'Mexico',\n dial_code: '+52',\n emoji: '🇲🇽',\n id: 'MX',\n },\n {\n name: 'Micronesia, Federated States of Micronesia',\n dial_code: '+691',\n emoji: '🇫🇲',\n id: 'FM',\n },\n {\n name: 'Moldova',\n dial_code: '+373',\n emoji: '🇲🇩',\n id: 'MD',\n },\n {\n name: 'Monaco',\n dial_code: '+377',\n emoji: '🇲🇨',\n id: 'MC',\n },\n {\n name: 'Mongolia',\n dial_code: '+976',\n emoji: '🇲🇳',\n id: 'MN',\n },\n {\n name: 'Montenegro',\n dial_code: '+382',\n emoji: '🇲🇪',\n id: 'ME',\n },\n {\n name: 'Montserrat',\n dial_code: '+1664',\n emoji: '🇲🇸',\n id: 'MS',\n },\n {\n name: 'Morocco',\n dial_code: '+212',\n emoji: '🇲🇦',\n id: 'MA',\n },\n {\n name: 'Mozambique',\n dial_code: '+258',\n emoji: '🇲🇿',\n id: 'MZ',\n },\n {\n name: 'Myanmar',\n dial_code: '+95',\n emoji: '🇲🇲',\n id: 'MM',\n },\n {\n name: 'Namibia',\n emoji: '🇳🇦',\n dial_code: '+264',\n id: 'NA',\n },\n {\n name: 'Nauru',\n dial_code: '+674',\n emoji: '🇳🇷',\n id: 'NR',\n },\n {\n name: 'Nepal',\n dial_code: '+977',\n emoji: '🇳🇵',\n id: 'NP',\n },\n {\n name: 'Netherlands',\n dial_code: '+31',\n emoji: '🇳🇱',\n id: 'NL',\n },\n {\n name: 'Netherlands Antilles',\n dial_code: '+599',\n emoji: '🇧🇶',\n id: 'AN',\n },\n {\n name: 'New Caledonia',\n dial_code: '+687',\n emoji: '🇳🇨',\n id: 'NC',\n },\n {\n name: 'New Zealand',\n dial_code: '+64',\n emoji: '🇳🇿',\n id: 'NZ',\n },\n {\n name: 'Nicaragua',\n dial_code: '+505',\n emoji: '🇳🇮',\n id: 'NI',\n },\n {\n name: 'Niger',\n dial_code: '+227',\n emoji: '🇳🇪',\n id: 'NE',\n },\n {\n name: 'Nigeria',\n dial_code: '+234',\n emoji: '🇳🇬',\n id: 'NG',\n },\n {\n name: 'Niue',\n dial_code: '+683',\n emoji: '🇳🇺',\n id: 'NU',\n },\n {\n name: 'Norfolk Island',\n dial_code: '+672',\n emoji: '🇳🇫',\n id: 'NF',\n },\n {\n name: 'Northern Mariana Islands',\n dial_code: '+1670',\n emoji: '🇲🇵',\n id: 'MP',\n },\n {\n name: 'Norway',\n dial_code: '+47',\n emoji: '🇳🇴',\n id: 'NO',\n },\n {\n name: 'Oman',\n dial_code: '+968',\n emoji: '🇴🇲',\n id: 'OM',\n },\n {\n name: 'Pakistan',\n dial_code: '+92',\n emoji: '🇵🇰',\n id: 'PK',\n },\n {\n name: 'Palau',\n dial_code: '+680',\n emoji: '🇵🇼',\n id: 'PW',\n },\n {\n name: 'Palestinian Territory, Occupied',\n dial_code: '+970',\n emoji: '🇵🇸',\n id: 'PS',\n },\n {\n name: 'Panama',\n dial_code: '+507',\n emoji: '🇵🇦',\n id: 'PA',\n },\n {\n name: 'Papua New Guinea',\n dial_code: '+675',\n emoji: '🇵🇬',\n id: 'PG',\n },\n {\n name: 'Paraguay',\n dial_code: '+595',\n emoji: '🇵🇾',\n id: 'PY',\n },\n {\n name: 'Peru',\n dial_code: '+51',\n emoji: '🇵🇪',\n id: 'PE',\n },\n {\n name: 'Philippines',\n dial_code: '+63',\n emoji: '🇵ðŸ‡',\n id: 'PH',\n },\n {\n name: 'Pitcairn',\n dial_code: '+872',\n emoji: '🇵🇳',\n id: 'PN',\n },\n {\n name: 'Poland',\n dial_code: '+48',\n emoji: '🇵🇱',\n id: 'PL',\n },\n {\n name: 'Portugal',\n dial_code: '+351',\n emoji: '🇵🇹',\n id: 'PT',\n },\n {\n name: 'Puerto Rico',\n dial_code: '+1939',\n emoji: '🇵🇷',\n id: 'PR',\n },\n {\n name: 'Qatar',\n dial_code: '+974',\n emoji: '🇶🇦',\n id: 'QA',\n },\n {\n name: 'Romania',\n dial_code: '+40',\n emoji: '🇷🇴',\n id: 'RO',\n },\n {\n name: 'Russia',\n dial_code: '+7',\n emoji: '🇷🇺',\n id: 'RU',\n },\n {\n name: 'Rwanda',\n dial_code: '+250',\n emoji: '🇷🇼',\n id: 'RW',\n },\n {\n name: 'Reunion',\n dial_code: '+262',\n emoji: '🇷🇪',\n id: 'RE',\n },\n {\n name: 'Saint Barthelemy',\n dial_code: '+590',\n emoji: '🇧🇱',\n id: 'BL',\n },\n {\n name: 'Saint Helena, Ascension and Tristan Da Cunha',\n dial_code: '+290',\n emoji: '🇸ðŸ‡',\n id: 'SH',\n },\n {\n name: 'Saint Kitts and Nevis',\n dial_code: '+1869',\n emoji: '🇰🇳',\n id: 'KN',\n },\n {\n name: 'Saint Lucia',\n dial_code: '+1758',\n emoji: '🇱🇨',\n id: 'LC',\n },\n {\n name: 'Saint Martin',\n dial_code: '+590',\n emoji: '🇲🇫',\n id: 'MF',\n },\n {\n name: 'Saint Pierre and Miquelon',\n dial_code: '+508',\n emoji: '🇵🇲',\n id: 'PM',\n },\n {\n name: 'Saint Vincent and the Grenadines',\n dial_code: '+1784',\n emoji: '🇻🇨',\n id: 'VC',\n },\n {\n name: 'Samoa',\n dial_code: '+685',\n emoji: '🇼🇸',\n id: 'WS',\n },\n {\n name: 'San Marino',\n dial_code: '+378',\n emoji: '🇸🇲',\n id: 'SM',\n },\n {\n name: 'Sao Tome and Principe',\n dial_code: '+239',\n emoji: '🇸🇹',\n id: 'ST',\n },\n {\n name: 'Saudi Arabia',\n dial_code: '+966',\n emoji: '🇸🇦',\n id: 'SA',\n },\n {\n name: 'Senegal',\n dial_code: '+221',\n emoji: '🇸🇳',\n id: 'SN',\n },\n {\n name: 'Serbia',\n dial_code: '+381',\n emoji: '🇷🇸',\n id: 'RS',\n },\n {\n name: 'Seychelles',\n dial_code: '+248',\n emoji: '🇸🇨',\n id: 'SC',\n },\n {\n name: 'Sierra Leone',\n dial_code: '+232',\n emoji: '🇸🇱',\n id: 'SL',\n },\n {\n name: 'Singapore',\n dial_code: '+65',\n emoji: '🇸🇬',\n id: 'SG',\n },\n {\n name: 'Slovakia',\n dial_code: '+421',\n emoji: '🇸🇰',\n id: 'SK',\n },\n {\n name: 'Slovenia',\n dial_code: '+386',\n emoji: '🇸🇮',\n id: 'SI',\n },\n {\n name: 'Solomon Islands',\n dial_code: '+677',\n emoji: '🇸🇧',\n id: 'SB',\n },\n {\n name: 'Somalia',\n dial_code: '+252',\n emoji: '🇸🇴',\n id: 'SO',\n },\n {\n name: 'South Africa',\n dial_code: '+27',\n emoji: '🇿🇦',\n id: 'ZA',\n },\n {\n name: 'South Sudan',\n dial_code: '+211',\n emoji: '🇸🇸',\n id: 'SS',\n },\n {\n name: 'South Georgia and the South Sandwich Islands',\n dial_code: '+500',\n emoji: '🇬🇸',\n id: 'GS',\n },\n {\n name: 'Spain',\n dial_code: '+34',\n emoji: '🇪🇸',\n id: 'ES',\n },\n {\n name: 'Sri Lanka',\n dial_code: '+94',\n emoji: '🇱🇰',\n id: 'LK',\n },\n {\n name: 'Sudan',\n dial_code: '+249',\n emoji: '🇸🇩',\n id: 'SD',\n },\n {\n name: 'Suriname',\n dial_code: '+597',\n emoji: '🇸🇷',\n id: 'SR',\n },\n {\n name: 'Svalbard and Jan Mayen',\n dial_code: '+47',\n emoji: '🇸🇯',\n id: 'SJ',\n },\n {\n name: 'Swaziland',\n dial_code: '+268',\n emoji: '🇸🇿',\n id: 'SZ',\n },\n {\n name: 'Sweden',\n dial_code: '+46',\n emoji: '🇸🇪',\n id: 'SE',\n },\n {\n name: 'Switzerland',\n dial_code: '+41',\n emoji: '🇨ðŸ‡',\n id: 'CH',\n },\n {\n name: 'Syrian Arab Republic',\n dial_code: '+963',\n emoji: '🇸🇾',\n id: 'SY',\n },\n {\n name: 'Taiwan',\n dial_code: '+886',\n emoji: '🇹🇼',\n id: 'TW',\n },\n {\n name: 'Tajikistan',\n dial_code: '+992',\n emoji: '🇹🇯',\n id: 'TJ',\n },\n {\n name: 'Tanzania, United Republic of Tanzania',\n dial_code: '+255',\n emoji: '🇹🇿',\n id: 'TZ',\n },\n {\n name: 'Thailand',\n dial_code: '+66',\n emoji: '🇹ðŸ‡',\n id: 'TH',\n },\n {\n name: 'Timor-Leste',\n dial_code: '+670',\n emoji: '🇹🇱',\n id: 'TL',\n },\n {\n name: 'Togo',\n dial_code: '+228',\n emoji: '🇹🇬',\n id: 'TG',\n },\n {\n name: 'Tokelau',\n dial_code: '+690',\n emoji: '🇹🇰',\n id: 'TK',\n },\n {\n name: 'Tonga',\n dial_code: '+676',\n emoji: '🇹🇴',\n id: 'TO',\n },\n {\n name: 'Trinidad and Tobago',\n dial_code: '+1868',\n emoji: '🇹🇹',\n id: 'TT',\n },\n {\n name: 'Tunisia',\n dial_code: '+216',\n emoji: '🇹🇳',\n id: 'TN',\n },\n {\n name: 'Turkey',\n dial_code: '+90',\n emoji: '🇹🇷',\n id: 'TR',\n },\n {\n name: 'Turkmenistan',\n dial_code: '+993',\n emoji: '🇹🇲',\n id: 'TM',\n },\n {\n name: 'Turks and Caicos Islands',\n dial_code: '+1649',\n emoji: '🇹🇨',\n id: 'TC',\n },\n {\n name: 'Tuvalu',\n dial_code: '+688',\n emoji: '🇹🇻',\n id: 'TV',\n },\n {\n name: 'Uganda',\n dial_code: '+256',\n emoji: '🇺🇬',\n id: 'UG',\n },\n {\n name: 'Ukraine',\n dial_code: '+380',\n emoji: '🇺🇦',\n id: 'UA',\n },\n {\n name: 'United Arab Emirates',\n dial_code: '+971',\n emoji: '🇦🇪',\n id: 'AE',\n },\n {\n name: 'United Kingdom',\n dial_code: '+44',\n emoji: '🇬🇧',\n id: 'GB',\n },\n {\n name: 'United States',\n dial_code: '+1',\n emoji: '🇺🇸',\n id: 'US',\n },\n {\n name: 'Uruguay',\n dial_code: '+598',\n emoji: '🇺🇾',\n id: 'UY',\n },\n {\n name: 'Uzbekistan',\n dial_code: '+998',\n emoji: '🇺🇿',\n id: 'UZ',\n },\n {\n name: 'Vanuatu',\n dial_code: '+678',\n emoji: '🇻🇺',\n id: 'VU',\n },\n {\n name: 'Venezuela, Bolivarian Republic of Venezuela',\n dial_code: '+58',\n emoji: '🇻🇪',\n id: 'VE',\n },\n {\n name: 'Vietnam',\n dial_code: '+84',\n emoji: '🇻🇳',\n id: 'VN',\n },\n {\n name: 'Virgin Islands, British',\n dial_code: '+1284',\n emoji: '🇻🇬',\n id: 'VG',\n },\n {\n name: 'Virgin Islands, U.S.',\n dial_code: '+1340',\n emoji: '🇻🇮',\n id: 'VI',\n },\n {\n name: 'Wallis and Futuna',\n dial_code: '+681',\n emoji: '🇼🇫',\n id: 'WF',\n },\n {\n name: 'Yemen',\n dial_code: '+967',\n emoji: '🇾🇪',\n id: 'YE',\n },\n {\n name: 'Zambia',\n dial_code: '+260',\n emoji: '🇿🇲',\n id: 'ZM',\n },\n {\n name: 'Zimbabwe',\n dial_code: '+263',\n emoji: '🇿🇼',\n id: 'ZW',\n },\n];\n\nexport default countries;\n","const i = {\n \"Africa/Abidjan\": \"+225\",\n \"Africa/Accra\": \"+233\",\n \"Africa/Addis_Ababa\": \"+251\",\n \"Africa/Algiers\": \"+213\",\n \"Africa/Asmara\": \"+291\",\n \"Africa/Bamako\": \"+223\",\n \"Africa/Bangui\": \"+236\",\n \"Africa/Banjul\": \"+220\",\n \"Africa/Bissau\": \"+245\",\n \"Africa/Blantyre\": \"+265\",\n \"Africa/Brazzaville\": \"+242\",\n \"Africa/Bujumbura\": \"+257\",\n \"Africa/Cairo\": \"+20\",\n \"Africa/Casablanca\": \"+212\",\n \"Africa/Ceuta\": \"+34\",\n \"Africa/Conakry\": \"+224\",\n \"Africa/Dakar\": \"+221\",\n \"Africa/Dar_es_Salaam\": \"+255\",\n \"Africa/Djibouti\": \"+253\",\n \"Africa/Douala\": \"+237\",\n \"Africa/El_Aaiun\": \"+212\",\n \"Africa/Freetown\": \"+232\",\n \"Africa/Gaborone\": \"+267\",\n \"Africa/Harare\": \"+263\",\n \"Africa/Johannesburg\": \"+27\",\n \"Africa/Juba\": \"+211\",\n \"Africa/Kampala\": \"+256\",\n \"Africa/Khartoum\": \"+249\",\n \"Africa/Kigali\": \"+250\",\n \"Africa/Kinshasa\": \"+243\",\n \"Africa/Lagos\": \"+234\",\n \"Africa/Libreville\": \"+241\",\n \"Africa/Lome\": \"+228\",\n \"Africa/Luanda\": \"+244\",\n \"Africa/Lubumbashi\": \"+243\",\n \"Africa/Lusaka\": \"+260\",\n \"Africa/Malabo\": \"+240\",\n \"Africa/Maputo\": \"+258\",\n \"Africa/Maseru\": \"+266\",\n \"Africa/Mbabane\": \"+268\",\n \"Africa/Mogadishu\": \"+252\",\n \"Africa/Monrovia\": \"+231\",\n \"Africa/Nairobi\": \"+254\",\n \"Africa/Ndjamena\": \"+235\",\n \"Africa/Niamey\": \"+227\",\n \"Africa/Nouakchott\": \"+222\",\n \"Africa/Ouagadougou\": \"+226\",\n \"Africa/Porto-Novo\": \"+229\",\n \"Africa/Sao_Tome\": \"+239\",\n \"Africa/Tripoli\": \"+218\",\n \"Africa/Tunis\": \"+216\",\n \"Africa/Windhoek\": \"+264\",\n \"America/Adak\": \"+1\",\n \"America/Anchorage\": \"+1\",\n \"America/Anguilla\": \"+1\",\n \"America/Antigua\": \"+1\",\n \"America/Araguaina\": \"+55\",\n \"America/Argentina/Buenos_Aires\": \"+54\",\n \"America/Buenos_Aires\": \"+54\",\n \"America/Argentina/Catamarca\": \"+54\",\n \"America/Argentina/Cordoba\": \"+54\",\n \"America/Argentina/Jujuy\": \"+54\",\n \"America/Argentina/La_Rioja\": \"+54\",\n \"America/Argentina/Mendoza\": \"+54\",\n \"America/Argentina/Rio_Gallegos\": \"+54\",\n \"America/Argentina/Salta\": \"+54\",\n \"America/Argentina/San_Juan\": \"+54\",\n \"America/Argentina/San_Luis\": \"+54\",\n \"America/Argentina/Tucuman\": \"+54\",\n \"America/Argentina/Ushuaia\": \"+54\",\n \"America/Aruba\": \"+297\",\n \"America/Asuncion\": \"+595\",\n \"America/Atikokan\": \"+1\",\n \"America/Bahia\": \"+55\",\n \"America/Bahia_Banderas\": \"+52\",\n \"America/Barbados\": \"+1\",\n \"America/Belem\": \"+55\",\n \"America/Belize\": \"+501\",\n \"America/Blanc-Sablon\": \"+1\",\n \"America/Boa_Vista\": \"+55\",\n \"America/Bogota\": \"+57\",\n \"America/Boise\": \"+1\",\n \"America/Cambridge_Bay\": \"+1\",\n \"America/Campo_Grande\": \"+55\",\n \"America/Cancun\": \"+52\",\n \"America/Caracas\": \"+58\",\n \"America/Cayenne\": \"+594\",\n \"America/Cayman\": \"+1\",\n \"America/Chicago\": \"+1\",\n \"America/Chihuahua\": \"+52\",\n \"America/Costa_Rica\": \"+506\",\n \"America/Creston\": \"+1\",\n \"America/Cuiaba\": \"+55\",\n \"America/Curacao\": \"+599\",\n \"America/Danmarkshavn\": \"+299\",\n \"America/Dawson\": \"+1\",\n \"America/Dawson_Creek\": \"+1\",\n \"America/Denver\": \"+1\",\n \"America/Detroit\": \"+1\",\n \"America/Dominica\": \"+1\",\n \"America/Edmonton\": \"+1\",\n \"America/Eirunepe\": \"+55\",\n \"America/El_Salvador\": \"+503\",\n \"America/Fort_Nelson\": \"+1\",\n \"America/Fortaleza\": \"+55\",\n \"America/Glace_Bay\": \"+1\",\n \"America/Goose_Bay\": \"+1\",\n \"America/Grand_Turk\": \"+1\",\n \"America/Grenada\": \"+1\",\n \"America/Guadeloupe\": \"+590\",\n \"America/Guatemala\": \"+502\",\n \"America/Guayaquil\": \"+593\",\n \"America/Guyana\": \"+592\",\n \"America/Halifax\": \"+1\",\n \"America/Havana\": \"+53\",\n \"America/Hermosillo\": \"+52\",\n \"America/Indiana/Indianapolis\": \"+1\",\n \"America/Indiana/Knox\": \"+1\",\n \"America/Indiana/Marengo\": \"+1\",\n \"America/Indiana/Petersburg\": \"+1\",\n \"America/Indiana/Tell_City\": \"+1\",\n \"America/Indiana/Vevay\": \"+1\",\n \"America/Indiana/Vincennes\": \"+1\",\n \"America/Indiana/Winamac\": \"+1\",\n \"America/Inuvik\": \"+1\",\n \"America/Iqaluit\": \"+1\",\n \"America/Jamaica\": \"+1\",\n \"America/Juneau\": \"+1\",\n \"America/Kentucky/Louisville\": \"+1\",\n \"America/Kentucky/Monticello\": \"+1\",\n \"America/Kralendijk\": \"+599\",\n \"America/La_Paz\": \"+591\",\n \"America/Lima\": \"+51\",\n \"America/Los_Angeles\": \"+1\",\n \"America/Louisville\": \"+1\",\n \"America/Lower_Princes\": \"+1\",\n \"America/Maceio\": \"+55\",\n \"America/Managua\": \"+505\",\n \"America/Manaus\": \"+55\",\n \"America/Marigot\": \"+590\",\n \"America/Martinique\": \"+596\",\n \"America/Matamoros\": \"+52\",\n \"America/Mazatlan\": \"+52\",\n \"America/Mendoza\": \"+1\",\n \"America/Menominee\": \"+1\",\n \"America/Merida\": \"+52\",\n \"America/Metlakatla\": \"+1\",\n \"America/Mexico_City\": \"+52\",\n \"America/Miquelon\": \"+508\",\n \"America/Moncton\": \"+1\",\n \"America/Monterrey\": \"+52\",\n \"America/Montevideo\": \"+598\",\n \"America/Montserrat\": \"+1\",\n \"America/Nassau\": \"+1\",\n \"America/New_York\": \"+1\",\n \"America/Nipigon\": \"+1\",\n \"America/Nome\": \"+1\",\n \"America/Noronha\": \"+55\",\n \"America/North_Dakota/Beulah\": \"+1\",\n \"America/North_Dakota/Center\": \"+1\",\n \"America/North_Dakota/New_Salem\": \"+1\",\n \"America/Nuuk\": \"+299\",\n \"America/Ojinaga\": \"+52\",\n \"America/Panama\": \"+507\",\n \"America/Pangnirtung\": \"+1\",\n \"America/Paramaribo\": \"+597\",\n \"America/Phoenix\": \"+1\",\n \"America/Port-au-Prince\": \"+509\",\n \"America/Port_of_Spain\": \"+1\",\n \"America/Porto_Velho\": \"+55\",\n \"America/Puerto_Rico\": \"+1\",\n \"America/Punta_Arenas\": \"+56\",\n \"America/Rainy_River\": \"+1\",\n \"America/Rankin_Inlet\": \"+1\",\n \"America/Recife\": \"+55\",\n \"America/Regina\": \"+1\",\n \"America/Resolute\": \"+1\",\n \"America/Rio_Branco\": \"+55\",\n \"America/Santarem\": \"+55\",\n \"America/Santiago\": \"+56\",\n \"America/Santo_Domingo\": \"+1\",\n \"America/Sao_Paulo\": \"+55\",\n \"America/Scoresbysund\": \"+299\",\n \"America/Sitka\": \"+1\",\n \"America/St_Barthelemy\": \"+590\",\n \"America/St_Johns\": \"+1\",\n \"America/St_Kitts\": \"+1\",\n \"America/St_Lucia\": \"+1\",\n \"America/St_Thomas\": \"+1\",\n \"America/St_Vincent\": \"+1\",\n \"America/Swift_Current\": \"+1\",\n \"America/Tegucigalpa\": \"+504\",\n \"America/Thule\": \"+299\",\n \"America/Thunder_Bay\": \"+1\",\n \"America/Tijuana\": \"+52\",\n \"America/Toronto\": \"+1\",\n \"America/Tortola\": \"+1\",\n \"America/Vancouver\": \"+1\",\n \"America/Whitehorse\": \"+1\",\n \"America/Winnipeg\": \"+1\",\n \"America/Yakutat\": \"+1\",\n \"America/Yellowknife\": \"+1\",\n \"Antarctica/Casey\": \"+672\",\n \"Antarctica/Davis\": \"+672\",\n \"Antarctica/DumontDUrville\": \"+672\",\n \"Antarctica/Macquarie\": \"+61\",\n \"Antarctica/Mawson\": \"+672\",\n \"Antarctica/McMurdo\": \"+64\",\n \"Antarctica/Palmer\": \"+56\",\n \"Antarctica/Rothera\": \"+672\",\n \"Antarctica/Syowa\": \"+672\",\n \"Antarctica/Troll\": \"+47\",\n \"Antarctica/Vostok\": \"+672\",\n \"Arctic/Longyearbyen\": \"+47\",\n \"Asia/Aden\": \"+967\",\n \"Asia/Almaty\": \"+7\",\n \"Asia/Amman\": \"+962\",\n \"Asia/Anadyr\": \"+7\",\n \"Asia/Aqtau\": \"+7\",\n \"Asia/Aqtobe\": \"+7\",\n \"Asia/Ashgabat\": \"+993\",\n \"Asia/Atyrau\": \"+7\",\n \"Asia/Baghdad\": \"+964\",\n \"Asia/Bahrain\": \"+973\",\n \"Asia/Baku\": \"+994\",\n \"Asia/Bangkok\": \"+66\",\n \"Asia/Barnaul\": \"+7\",\n \"Asia/Beirut\": \"+961\",\n \"Asia/Bishkek\": \"+996\",\n \"Asia/Brunei\": \"+673\",\n \"Asia/Calcutta\": \"+91\",\n \"Asia/Chita\": \"+7\",\n \"Asia/Choibalsan\": \"+976\",\n \"Asia/Colombo\": \"+94\",\n \"Asia/Damascus\": \"+963\",\n \"Asia/Dhaka\": \"+880\",\n \"Asia/Dili\": \"+670\",\n \"Asia/Dubai\": \"+971\",\n \"Asia/Dushanbe\": \"+992\",\n \"Asia/Famagusta\": \"+357\",\n \"Asia/Gaza\": \"+970\",\n \"Asia/Hebron\": \"+970\",\n \"Asia/Ho_Chi_Minh\": \"+84\",\n \"Asia/Hong_Kong\": \"+852\",\n \"Asia/Hovd\": \"+976\",\n \"Asia/Irkutsk\": \"+7\",\n \"Asia/Jakarta\": \"+62\",\n \"Asia/Jayapura\": \"+62\",\n \"Asia/Jerusalem\": \"+972\",\n \"Asia/Kabul\": \"+93\",\n \"Asia/Kamchatka\": \"+7\",\n \"Asia/Karachi\": \"+92\",\n \"Asia/Kathmandu\": \"+977\",\n \"Asia/Khandyga\": \"+7\",\n \"Asia/Kolkata\": \"+91\",\n \"Asia/Krasnoyarsk\": \"+7\",\n \"Asia/Kuala_Lumpur\": \"+60\",\n \"Asia/Kuching\": \"+60\",\n \"Asia/Kuwait\": \"+965\",\n \"Asia/Macau\": \"+853\",\n \"Asia/Magadan\": \"+7\",\n \"Asia/Makassar\": \"+62\",\n \"Asia/Manila\": \"+63\",\n \"Asia/Muscat\": \"+968\",\n \"Asia/Nicosia\": \"+357\",\n \"Asia/Novokuznetsk\": \"+7\",\n \"Asia/Novosibirsk\": \"+7\",\n \"Asia/Omsk\": \"+7\",\n \"Asia/Oral\": \"+7\",\n \"Asia/Phnom_Penh\": \"+855\",\n \"Asia/Pontianak\": \"+62\",\n \"Asia/Pyongyang\": \"+850\",\n \"Asia/Qatar\": \"+974\",\n \"Asia/Qostanay\": \"+7\",\n \"Asia/Qyzylorda\": \"+7\",\n \"Asia/Rangoon\": \"+95\",\n \"Asia/Riyadh\": \"+966\",\n \"Asia/Saigon\": \"+84\",\n \"Asia/Sakhalin\": \"+7\",\n \"Asia/Samarkand\": \"+998\",\n \"Asia/Seoul\": \"+82\",\n \"Asia/Shanghai\": \"+86\",\n \"Asia/Singapore\": \"+65\",\n \"Asia/Srednekolymsk\": \"+7\",\n \"Asia/Taipei\": \"+886\",\n \"Asia/Tashkent\": \"+998\",\n \"Asia/Tbilisi\": \"+995\",\n \"Asia/Tehran\": \"+98\",\n \"Asia/Thimphu\": \"+975\",\n \"Asia/Tokyo\": \"+81\",\n \"Asia/Tomsk\": \"+7\",\n \"Asia/Ulaanbaatar\": \"+976\",\n \"Asia/Urumqi\": \"+86\",\n \"Asia/Ust-Nera\": \"+7\",\n \"Asia/Vientiane\": \"+856\",\n \"Asia/Vladivostok\": \"+7\",\n \"Asia/Yakutsk\": \"+7\",\n \"Asia/Yekaterinburg\": \"+7\",\n \"Asia/Yerevan\": \"+374\",\n \"Atlantic/Azores\": \"+351\",\n \"Atlantic/Bermuda\": \"+1\",\n \"Atlantic/Canary\": \"+34\",\n \"Atlantic/Cape_Verde\": \"+238\",\n \"Atlantic/Faroe\": \"+298\",\n \"Atlantic/Madeira\": \"+351\",\n \"Atlantic/Reykjavik\": \"+354\",\n \"Atlantic/South_Georgia\": \"+500\",\n \"Atlantic/St_Helena\": \"+290\",\n \"Atlantic/Stanley\": \"+500\",\n \"Australia/Adelaide\": \"+61\",\n \"Australia/Brisbane\": \"+61\",\n \"Australia/Broken_Hill\": \"+61\",\n \"Australia/Darwin\": \"+61\",\n \"Australia/Eucla\": \"+61\",\n \"Australia/Hobart\": \"+61\",\n \"Australia/Lindeman\": \"+61\",\n \"Australia/Lord_Howe\": \"+61\",\n \"Australia/Melbourne\": \"+61\",\n \"Australia/Perth\": \"+61\",\n \"Australia/Sydney\": \"+61\",\n \"Europe/Amsterdam\": \"+31\",\n \"Europe/Andorra\": \"+376\",\n \"Europe/Astrakhan\": \"+7\",\n \"Europe/Athens\": \"+30\",\n \"Europe/Belgrade\": \"+381\",\n \"Europe/Berlin\": \"+49\",\n \"Europe/Bratislava\": \"+421\",\n \"Europe/Brussels\": \"+32\",\n \"Europe/Bucharest\": \"+40\",\n \"Europe/Budapest\": \"+36\",\n \"Europe/Busingen\": \"+41\",\n \"Europe/Chisinau\": \"+373\",\n \"Europe/Copenhagen\": \"+45\",\n \"Europe/Dublin\": \"+353\",\n \"Europe/Gibraltar\": \"+350\",\n \"Europe/Guernsey\": \"+44\",\n \"Europe/Helsinki\": \"+358\",\n \"Europe/Isle_of_Man\": \"+44\",\n \"Europe/Istanbul\": \"+90\",\n \"Europe/Jersey\": \"+44\",\n \"Europe/Kaliningrad\": \"+7\",\n \"Europe/Kyiv\": \"+380\",\n \"Europe/Kiev\": \"+380\",\n \"Europe/Kirov\": \"+7\",\n \"Europe/Lisbon\": \"+351\",\n \"Europe/Ljubljana\": \"+386\",\n \"Europe/London\": \"+44\",\n \"Europe/Luxembourg\": \"+352\",\n \"Europe/Madrid\": \"+34\",\n \"Europe/Malta\": \"+356\",\n \"Europe/Mariehamn\": \"+358\",\n \"Europe/Minsk\": \"+375\",\n \"Europe/Monaco\": \"+377\",\n \"Europe/Moscow\": \"+7\",\n \"Europe/Oslo\": \"+47\",\n \"Europe/Paris\": \"+33\",\n \"Europe/Podgorica\": \"+382\",\n \"Europe/Prague\": \"+420\",\n \"Europe/Riga\": \"+371\",\n \"Europe/Rome\": \"+39\",\n \"Europe/Samara\": \"+7\",\n \"Europe/San_Marino\": \"+378\",\n \"Europe/Sarajevo\": \"+387\",\n \"Europe/Saratov\": \"+7\",\n \"Europe/Simferopol\": \"+7\",\n \"Europe/Skopje\": \"+389\",\n \"Europe/Sofia\": \"+359\",\n \"Europe/Stockholm\": \"+46\",\n \"Europe/Tallinn\": \"+372\",\n \"Europe/Tirane\": \"+355\",\n \"Europe/Ulyanovsk\": \"+7\",\n \"Europe/Vaduz\": \"+423\",\n \"Europe/Vatican\": \"+39\",\n \"Europe/Vienna\": \"+43\",\n \"Europe/Vilnius\": \"+370\",\n \"Europe/Volgograd\": \"+7\",\n \"Europe/Warsaw\": \"+48\",\n \"Europe/Zagreb\": \"+385\",\n \"Europe/Zurich\": \"+41\",\n \"Indian/Antananarivo\": \"+261\",\n \"Indian/Chagos\": \"+246\",\n \"Indian/Christmas\": \"+61\",\n \"Indian/Cocos\": \"+61\",\n \"Indian/Comoro\": \"+269\",\n \"Indian/Kerguelen\": \"+262\",\n \"Indian/Mahe\": \"+248\",\n \"Indian/Maldives\": \"+960\",\n \"Indian/Mauritius\": \"+230\",\n \"Indian/Mayotte\": \"+262\",\n \"Indian/Reunion\": \"+262\",\n \"Pacific/Apia\": \"+685\",\n \"Pacific/Auckland\": \"+64\",\n \"Pacific/Bougainville\": \"+675\",\n \"Pacific/Chatham\": \"+64\",\n \"Pacific/Chuuk\": \"+691\",\n \"Pacific/Easter\": \"+56\",\n \"Pacific/Efate\": \"+678\",\n \"Pacific/Enderbury\": \"+686\",\n \"Pacific/Fakaofo\": \"+690\",\n \"Pacific/Fiji\": \"+679\",\n \"Pacific/Funafuti\": \"+688\",\n \"Pacific/Galapagos\": \"+593\",\n \"Pacific/Gambier\": \"+689\",\n \"Pacific/Guadalcanal\": \"+677\",\n \"Pacific/Guam\": \"+1\",\n \"Pacific/Honolulu\": \"+1\",\n \"Pacific/Kiritimati\": \"+686\",\n \"Pacific/Kosrae\": \"+691\",\n \"Pacific/Kwajalein\": \"+692\",\n \"Pacific/Majuro\": \"+692\",\n \"Pacific/Marquesas\": \"+689\",\n \"Pacific/Midway\": \"+1\",\n \"Pacific/Nauru\": \"+674\",\n \"Pacific/Niue\": \"+683\",\n \"Pacific/Norfolk\": \"+672\",\n \"Pacific/Noumea\": \"+687\",\n \"Pacific/Pago_Pago\": \"+1\",\n \"Pacific/Palau\": \"+680\",\n \"Pacific/Pitcairn\": \"+64\",\n \"Pacific/Pohnpei\": \"+691\",\n \"Pacific/Port_Moresby\": \"+675\",\n \"Pacific/Rarotonga\": \"+682\",\n \"Pacific/Saipan\": \"+1\",\n \"Pacific/Tahiti\": \"+689\",\n \"Pacific/Tarawa\": \"+686\",\n \"Pacific/Tongatapu\": \"+676\",\n \"Pacific/Wake\": \"+1\",\n \"Pacific/Wallis\": \"+681\"\n}, r = (a) => i[a] || null;\nexport {\n r as getPhoneCodeByTimezone\n};\n","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nvar countries$1 = {\n\tAD: \"Andorra\",\n\tAE: \"United Arab Emirates\",\n\tAF: \"Afghanistan\",\n\tAG: \"Antigua and Barbuda\",\n\tAI: \"Anguilla\",\n\tAL: \"Albania\",\n\tAM: \"Armenia\",\n\tAO: \"Angola\",\n\tAQ: \"Antarctica\",\n\tAR: \"Argentina\",\n\tAS: \"American Samoa\",\n\tAT: \"Austria\",\n\tAU: \"Australia\",\n\tAW: \"Aruba\",\n\tAX: \"Ã…land Islands\",\n\tAZ: \"Azerbaijan\",\n\tBA: \"Bosnia and Herzegovina\",\n\tBB: \"Barbados\",\n\tBD: \"Bangladesh\",\n\tBE: \"Belgium\",\n\tBF: \"Burkina Faso\",\n\tBG: \"Bulgaria\",\n\tBH: \"Bahrain\",\n\tBI: \"Burundi\",\n\tBJ: \"Benin\",\n\tBL: \"Saint Barthélemy\",\n\tBM: \"Bermuda\",\n\tBN: \"Brunei\",\n\tBO: \"Bolivia\",\n\tBQ: \"Caribbean Netherlands\",\n\tBR: \"Brazil\",\n\tBS: \"Bahamas\",\n\tBT: \"Bhutan\",\n\tBW: \"Botswana\",\n\tBY: \"Belarus\",\n\tBZ: \"Belize\",\n\tCA: \"Canada\",\n\tCC: \"Cocos Islands\",\n\tCD: \"Democratic Republic of the Congo\",\n\tCF: \"Central African Republic\",\n\tCG: \"Republic of the Congo\",\n\tCH: \"Switzerland\",\n\tCI: \"Ivory Coast\",\n\tCK: \"Cook Islands\",\n\tCL: \"Chile\",\n\tCM: \"Cameroon\",\n\tCN: \"China\",\n\tCO: \"Colombia\",\n\tCR: \"Costa Rica\",\n\tCU: \"Cuba\",\n\tCV: \"Cabo Verde\",\n\tCW: \"Curaçao\",\n\tCX: \"Christmas Island\",\n\tCY: \"Cyprus\",\n\tCZ: \"Czechia\",\n\tDE: \"Germany\",\n\tDJ: \"Djibouti\",\n\tDK: \"Denmark\",\n\tDM: \"Dominica\",\n\tDO: \"Dominican Republic\",\n\tDZ: \"Algeria\",\n\tEC: \"Ecuador\",\n\tEE: \"Estonia\",\n\tEG: \"Egypt\",\n\tEH: \"Western Sahara\",\n\tER: \"Eritrea\",\n\tES: \"Spain\",\n\tET: \"Ethiopia\",\n\tFI: \"Finland\",\n\tFJ: \"Fiji\",\n\tFK: \"Falkland Islands\",\n\tFM: \"Micronesia\",\n\tFO: \"Faroe Islands\",\n\tFR: \"France\",\n\tGA: \"Gabon\",\n\tGB: \"United Kingdom\",\n\tGD: \"Grenada\",\n\tGE: \"Georgia\",\n\tGF: \"French Guiana\",\n\tGG: \"Guernsey\",\n\tGH: \"Ghana\",\n\tGI: \"Gibraltar\",\n\tGL: \"Greenland\",\n\tGM: \"Gambia\",\n\tGN: \"Guinea\",\n\tGP: \"Guadeloupe\",\n\tGQ: \"Equatorial Guinea\",\n\tGR: \"Greece\",\n\tGS: \"South Georgia and the South Sandwich Islands\",\n\tGT: \"Guatemala\",\n\tGU: \"Guam\",\n\tGW: \"Guinea-Bissau\",\n\tGY: \"Guyana\",\n\tHK: \"Hong Kong\",\n\tHN: \"Honduras\",\n\tHR: \"Croatia\",\n\tHT: \"Haiti\",\n\tHU: \"Hungary\",\n\tID: \"Indonesia\",\n\tIE: \"Ireland\",\n\tIL: \"Israel\",\n\tIM: \"Isle of Man\",\n\tIN: \"India\",\n\tIO: \"British Indian Ocean Territory\",\n\tIQ: \"Iraq\",\n\tIR: \"Iran\",\n\tIS: \"Iceland\",\n\tIT: \"Italy\",\n\tJE: \"Jersey\",\n\tJM: \"Jamaica\",\n\tJO: \"Jordan\",\n\tJP: \"Japan\",\n\tKE: \"Kenya\",\n\tKG: \"Kyrgyzstan\",\n\tKH: \"Cambodia\",\n\tKI: \"Kiribati\",\n\tKM: \"Comoros\",\n\tKN: \"Saint Kitts and Nevis\",\n\tKP: \"North Korea\",\n\tKR: \"South Korea\",\n\tKW: \"Kuwait\",\n\tKY: \"Cayman Islands\",\n\tKZ: \"Kazakhstan\",\n\tLA: \"Laos\",\n\tLB: \"Lebanon\",\n\tLC: \"Saint Lucia\",\n\tLI: \"Liechtenstein\",\n\tLK: \"Sri Lanka\",\n\tLR: \"Liberia\",\n\tLS: \"Lesotho\",\n\tLT: \"Lithuania\",\n\tLU: \"Luxembourg\",\n\tLV: \"Latvia\",\n\tLY: \"Libya\",\n\tMA: \"Morocco\",\n\tMC: \"Monaco\",\n\tMD: \"Moldova\",\n\tME: \"Montenegro\",\n\tMF: \"Saint Martin\",\n\tMG: \"Madagascar\",\n\tMH: \"Marshall Islands\",\n\tMK: \"North Macedonia\",\n\tML: \"Mali\",\n\tMM: \"Myanmar\",\n\tMN: \"Mongolia\",\n\tMO: \"Macao\",\n\tMP: \"Northern Mariana Islands\",\n\tMQ: \"Martinique\",\n\tMR: \"Mauritania\",\n\tMS: \"Montserrat\",\n\tMT: \"Malta\",\n\tMU: \"Mauritius\",\n\tMV: \"Maldives\",\n\tMW: \"Malawi\",\n\tMX: \"Mexico\",\n\tMY: \"Malaysia\",\n\tMZ: \"Mozambique\",\n\tNA: \"Namibia\",\n\tNC: \"New Caledonia\",\n\tNE: \"Niger\",\n\tNF: \"Norfolk Island\",\n\tNG: \"Nigeria\",\n\tNI: \"Nicaragua\",\n\tNL: \"Netherlands\",\n\tNO: \"Norway\",\n\tNP: \"Nepal\",\n\tNR: \"Nauru\",\n\tNU: \"Niue\",\n\tNZ: \"New Zealand\",\n\tOM: \"Oman\",\n\tPA: \"Panama\",\n\tPE: \"Peru\",\n\tPF: \"French Polynesia\",\n\tPG: \"Papua New Guinea\",\n\tPH: \"Philippines\",\n\tPK: \"Pakistan\",\n\tPL: \"Poland\",\n\tPM: \"Saint Pierre and Miquelon\",\n\tPN: \"Pitcairn\",\n\tPR: \"Puerto Rico\",\n\tPS: \"Palestine\",\n\tPT: \"Portugal\",\n\tPW: \"Palau\",\n\tPY: \"Paraguay\",\n\tQA: \"Qatar\",\n\tRE: \"Réunion\",\n\tRO: \"Romania\",\n\tRS: \"Serbia\",\n\tRU: \"Russia\",\n\tRW: \"Rwanda\",\n\tSA: \"Saudi Arabia\",\n\tSB: \"Solomon Islands\",\n\tSC: \"Seychelles\",\n\tSD: \"Sudan\",\n\tSE: \"Sweden\",\n\tSG: \"Singapore\",\n\tSH: \"Saint Helena, Ascension and Tristan da Cunha\",\n\tSI: \"Slovenia\",\n\tSJ: \"Svalbard and Jan Mayen\",\n\tSK: \"Slovakia\",\n\tSL: \"Sierra Leone\",\n\tSM: \"San Marino\",\n\tSN: \"Senegal\",\n\tSO: \"Somalia\",\n\tSR: \"Suriname\",\n\tSS: \"South Sudan\",\n\tST: \"Sao Tome and Principe\",\n\tSV: \"El Salvador\",\n\tSX: \"Sint Maarten\",\n\tSY: \"Syria\",\n\tSZ: \"Eswatini\",\n\tTC: \"Turks and Caicos Islands\",\n\tTD: \"Chad\",\n\tTF: \"French Southern Territories\",\n\tTG: \"Togo\",\n\tTH: \"Thailand\",\n\tTJ: \"Tajikistan\",\n\tTK: \"Tokelau\",\n\tTL: \"Timor-Leste\",\n\tTM: \"Turkmenistan\",\n\tTN: \"Tunisia\",\n\tTO: \"Tonga\",\n\tTR: \"Türkiye\",\n\tTT: \"Trinidad and Tobago\",\n\tTV: \"Tuvalu\",\n\tTW: \"Taiwan\",\n\tTZ: \"Tanzania\",\n\tUA: \"Ukraine\",\n\tUG: \"Uganda\",\n\tUM: \"United States Minor Outlying Islands\",\n\tUS: \"United States of America\",\n\tUY: \"Uruguay\",\n\tUZ: \"Uzbekistan\",\n\tVA: \"Holy See\",\n\tVC: \"Saint Vincent and the Grenadines\",\n\tVE: \"Venezuela\",\n\tVG: \"Virgin Islands (UK)\",\n\tVI: \"Virgin Islands (US)\",\n\tVN: \"Vietnam\",\n\tVU: \"Vanuatu\",\n\tWF: \"Wallis and Futuna\",\n\tWS: \"Samoa\",\n\tYE: \"Yemen\",\n\tYT: \"Mayotte\",\n\tZA: \"South Africa\",\n\tZM: \"Zambia\",\n\tZW: \"Zimbabwe\"\n};\nvar timezones$1 = {\n\t\"Africa/Abidjan\": {\n\t\tu: 0,\n\t\tc: [\n\t\t\t\"CI\",\n\t\t\t\"BF\",\n\t\t\t\"GH\",\n\t\t\t\"GM\",\n\t\t\t\"GN\",\n\t\t\t\"IS\",\n\t\t\t\"ML\",\n\t\t\t\"MR\",\n\t\t\t\"SH\",\n\t\t\t\"SL\",\n\t\t\t\"SN\",\n\t\t\t\"TG\"\n\t\t]\n\t},\n\t\"Africa/Accra\": {\n\t\ta: \"Africa/Abidjan\",\n\t\tc: [\n\t\t\t\"GH\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Addis_Ababa\": {\n\t\ta: \"Africa/Nairobi\",\n\t\tc: [\n\t\t\t\"ET\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Algiers\": {\n\t\tu: 60,\n\t\tc: [\n\t\t\t\"DZ\"\n\t\t]\n\t},\n\t\"Africa/Asmara\": {\n\t\ta: \"Africa/Nairobi\",\n\t\tc: [\n\t\t\t\"ER\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Asmera\": {\n\t\ta: \"Africa/Nairobi\",\n\t\tc: [\n\t\t\t\"ER\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Bamako\": {\n\t\ta: \"Africa/Abidjan\",\n\t\tc: [\n\t\t\t\"ML\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Bangui\": {\n\t\ta: \"Africa/Lagos\",\n\t\tc: [\n\t\t\t\"CF\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Banjul\": {\n\t\ta: \"Africa/Abidjan\",\n\t\tc: [\n\t\t\t\"GM\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Bissau\": {\n\t\tu: 0,\n\t\tc: [\n\t\t\t\"GW\"\n\t\t]\n\t},\n\t\"Africa/Blantyre\": {\n\t\ta: \"Africa/Maputo\",\n\t\tc: [\n\t\t\t\"MW\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Brazzaville\": {\n\t\ta: \"Africa/Lagos\",\n\t\tc: [\n\t\t\t\"CG\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Bujumbura\": {\n\t\ta: \"Africa/Maputo\",\n\t\tc: [\n\t\t\t\"BI\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Cairo\": {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: [\n\t\t\t\"EG\"\n\t\t]\n\t},\n\t\"Africa/Casablanca\": {\n\t\tu: 60,\n\t\td: 0,\n\t\tc: [\n\t\t\t\"MA\"\n\t\t]\n\t},\n\t\"Africa/Ceuta\": {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: [\n\t\t\t\"ES\"\n\t\t]\n\t},\n\t\"Africa/Conakry\": {\n\t\ta: \"Africa/Abidjan\",\n\t\tc: [\n\t\t\t\"GN\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Dakar\": {\n\t\ta: \"Africa/Abidjan\",\n\t\tc: [\n\t\t\t\"SN\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Dar_es_Salaam\": {\n\t\ta: \"Africa/Nairobi\",\n\t\tc: [\n\t\t\t\"TZ\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Djibouti\": {\n\t\ta: \"Africa/Nairobi\",\n\t\tc: [\n\t\t\t\"DJ\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Douala\": {\n\t\ta: \"Africa/Lagos\",\n\t\tc: [\n\t\t\t\"CM\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/El_Aaiun\": {\n\t\tu: 60,\n\t\td: 0,\n\t\tc: [\n\t\t\t\"EH\"\n\t\t]\n\t},\n\t\"Africa/Freetown\": {\n\t\ta: \"Africa/Abidjan\",\n\t\tc: [\n\t\t\t\"SL\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Gaborone\": {\n\t\ta: \"Africa/Maputo\",\n\t\tc: [\n\t\t\t\"BW\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Harare\": {\n\t\ta: \"Africa/Maputo\",\n\t\tc: [\n\t\t\t\"ZW\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Johannesburg\": {\n\t\tu: 120,\n\t\tc: [\n\t\t\t\"ZA\",\n\t\t\t\"LS\",\n\t\t\t\"SZ\"\n\t\t]\n\t},\n\t\"Africa/Juba\": {\n\t\tu: 120,\n\t\tc: [\n\t\t\t\"SS\"\n\t\t]\n\t},\n\t\"Africa/Kampala\": {\n\t\ta: \"Africa/Nairobi\",\n\t\tc: [\n\t\t\t\"UG\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Khartoum\": {\n\t\tu: 120,\n\t\tc: [\n\t\t\t\"SD\"\n\t\t]\n\t},\n\t\"Africa/Kigali\": {\n\t\ta: \"Africa/Maputo\",\n\t\tc: [\n\t\t\t\"RW\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Kinshasa\": {\n\t\ta: \"Africa/Lagos\",\n\t\tc: [\n\t\t\t\"CD\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Lagos\": {\n\t\tu: 60,\n\t\tc: [\n\t\t\t\"NG\",\n\t\t\t\"AO\",\n\t\t\t\"BJ\",\n\t\t\t\"CD\",\n\t\t\t\"CF\",\n\t\t\t\"CG\",\n\t\t\t\"CM\",\n\t\t\t\"GA\",\n\t\t\t\"GQ\",\n\t\t\t\"NE\"\n\t\t]\n\t},\n\t\"Africa/Libreville\": {\n\t\ta: \"Africa/Lagos\",\n\t\tc: [\n\t\t\t\"GA\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Lome\": {\n\t\ta: \"Africa/Abidjan\",\n\t\tc: [\n\t\t\t\"TG\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Luanda\": {\n\t\ta: \"Africa/Lagos\",\n\t\tc: [\n\t\t\t\"AO\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Lubumbashi\": {\n\t\ta: \"Africa/Maputo\",\n\t\tc: [\n\t\t\t\"CD\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Lusaka\": {\n\t\ta: \"Africa/Maputo\",\n\t\tc: [\n\t\t\t\"ZM\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Malabo\": {\n\t\ta: \"Africa/Lagos\",\n\t\tc: [\n\t\t\t\"GQ\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Maputo\": {\n\t\tu: 120,\n\t\tc: [\n\t\t\t\"MZ\",\n\t\t\t\"BI\",\n\t\t\t\"BW\",\n\t\t\t\"CD\",\n\t\t\t\"MW\",\n\t\t\t\"RW\",\n\t\t\t\"ZM\",\n\t\t\t\"ZW\"\n\t\t]\n\t},\n\t\"Africa/Maseru\": {\n\t\ta: \"Africa/Johannesburg\",\n\t\tc: [\n\t\t\t\"LS\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Mbabane\": {\n\t\ta: \"Africa/Johannesburg\",\n\t\tc: [\n\t\t\t\"SZ\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Mogadishu\": {\n\t\ta: \"Africa/Nairobi\",\n\t\tc: [\n\t\t\t\"SO\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Monrovia\": {\n\t\tu: 0,\n\t\tc: [\n\t\t\t\"LR\"\n\t\t]\n\t},\n\t\"Africa/Nairobi\": {\n\t\tu: 180,\n\t\tc: [\n\t\t\t\"KE\",\n\t\t\t\"DJ\",\n\t\t\t\"ER\",\n\t\t\t\"ET\",\n\t\t\t\"KM\",\n\t\t\t\"MG\",\n\t\t\t\"SO\",\n\t\t\t\"TZ\",\n\t\t\t\"UG\",\n\t\t\t\"YT\"\n\t\t]\n\t},\n\t\"Africa/Ndjamena\": {\n\t\tu: 60,\n\t\tc: [\n\t\t\t\"TD\"\n\t\t]\n\t},\n\t\"Africa/Niamey\": {\n\t\ta: \"Africa/Lagos\",\n\t\tc: [\n\t\t\t\"NE\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Nouakchott\": {\n\t\ta: \"Africa/Abidjan\",\n\t\tc: [\n\t\t\t\"MR\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Ouagadougou\": {\n\t\ta: \"Africa/Abidjan\",\n\t\tc: [\n\t\t\t\"BF\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Porto-Novo\": {\n\t\ta: \"Africa/Lagos\",\n\t\tc: [\n\t\t\t\"BJ\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Sao_Tome\": {\n\t\tu: 0,\n\t\tc: [\n\t\t\t\"ST\"\n\t\t]\n\t},\n\t\"Africa/Timbuktu\": {\n\t\ta: \"Africa/Abidjan\",\n\t\tc: [\n\t\t\t\"ML\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Africa/Tripoli\": {\n\t\tu: 120,\n\t\tc: [\n\t\t\t\"LY\"\n\t\t]\n\t},\n\t\"Africa/Tunis\": {\n\t\tu: 60,\n\t\tc: [\n\t\t\t\"TN\"\n\t\t]\n\t},\n\t\"Africa/Windhoek\": {\n\t\tu: 120,\n\t\tc: [\n\t\t\t\"NA\"\n\t\t]\n\t},\n\t\"America/Adak\": {\n\t\tu: -600,\n\t\td: -540,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Anchorage\": {\n\t\tu: -540,\n\t\td: -480,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Anguilla\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"AI\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Antigua\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"AG\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Araguaina\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"BR\"\n\t\t]\n\t},\n\t\"America/Argentina/Buenos_Aires\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"AR\"\n\t\t]\n\t},\n\t\"America/Argentina/Catamarca\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"AR\"\n\t\t]\n\t},\n\t\"America/Argentina/ComodRivadavia\": {\n\t\ta: \"America/Argentina/Catamarca\",\n\t\tr: 1\n\t},\n\t\"America/Argentina/Cordoba\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"AR\"\n\t\t]\n\t},\n\t\"America/Argentina/Jujuy\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"AR\"\n\t\t]\n\t},\n\t\"America/Argentina/La_Rioja\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"AR\"\n\t\t]\n\t},\n\t\"America/Argentina/Mendoza\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"AR\"\n\t\t]\n\t},\n\t\"America/Argentina/Rio_Gallegos\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"AR\"\n\t\t]\n\t},\n\t\"America/Argentina/Salta\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"AR\"\n\t\t]\n\t},\n\t\"America/Argentina/San_Juan\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"AR\"\n\t\t]\n\t},\n\t\"America/Argentina/San_Luis\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"AR\"\n\t\t]\n\t},\n\t\"America/Argentina/Tucuman\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"AR\"\n\t\t]\n\t},\n\t\"America/Argentina/Ushuaia\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"AR\"\n\t\t]\n\t},\n\t\"America/Aruba\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"AW\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Asuncion\": {\n\t\tu: -240,\n\t\td: -180,\n\t\tc: [\n\t\t\t\"PY\"\n\t\t]\n\t},\n\t\"America/Atikokan\": {\n\t\ta: \"America/Panama\",\n\t\tc: [\n\t\t\t\"CA\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Atka\": {\n\t\ta: \"America/Adak\",\n\t\tr: 1\n\t},\n\t\"America/Bahia\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"BR\"\n\t\t]\n\t},\n\t\"America/Bahia_Banderas\": {\n\t\tu: -360,\n\t\tc: [\n\t\t\t\"MX\"\n\t\t]\n\t},\n\t\"America/Barbados\": {\n\t\tu: -240,\n\t\tc: [\n\t\t\t\"BB\"\n\t\t]\n\t},\n\t\"America/Belem\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"BR\"\n\t\t]\n\t},\n\t\"America/Belize\": {\n\t\tu: -360,\n\t\tc: [\n\t\t\t\"BZ\"\n\t\t]\n\t},\n\t\"America/Blanc-Sablon\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"CA\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Boa_Vista\": {\n\t\tu: -240,\n\t\tc: [\n\t\t\t\"BR\"\n\t\t]\n\t},\n\t\"America/Bogota\": {\n\t\tu: -300,\n\t\tc: [\n\t\t\t\"CO\"\n\t\t]\n\t},\n\t\"America/Boise\": {\n\t\tu: -420,\n\t\td: -360,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Buenos_Aires\": {\n\t\ta: \"America/Argentina/Buenos_Aires\",\n\t\tr: 1\n\t},\n\t\"America/Cambridge_Bay\": {\n\t\tu: -420,\n\t\td: -360,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Campo_Grande\": {\n\t\tu: -240,\n\t\tc: [\n\t\t\t\"BR\"\n\t\t]\n\t},\n\t\"America/Cancun\": {\n\t\tu: -300,\n\t\tc: [\n\t\t\t\"MX\"\n\t\t]\n\t},\n\t\"America/Caracas\": {\n\t\tu: -240,\n\t\tc: [\n\t\t\t\"VE\"\n\t\t]\n\t},\n\t\"America/Catamarca\": {\n\t\ta: \"America/Argentina/Catamarca\",\n\t\tr: 1\n\t},\n\t\"America/Cayenne\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"GF\"\n\t\t]\n\t},\n\t\"America/Cayman\": {\n\t\ta: \"America/Panama\",\n\t\tc: [\n\t\t\t\"KY\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Chicago\": {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Chihuahua\": {\n\t\tu: -360,\n\t\tc: [\n\t\t\t\"MX\"\n\t\t]\n\t},\n\t\"America/Ciudad_Juarez\": {\n\t\tu: -420,\n\t\td: -360,\n\t\tc: [\n\t\t\t\"MX\"\n\t\t]\n\t},\n\t\"America/Coral_Harbour\": {\n\t\ta: \"America/Panama\",\n\t\tc: [\n\t\t\t\"CA\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Cordoba\": {\n\t\ta: \"America/Argentina/Cordoba\",\n\t\tr: 1\n\t},\n\t\"America/Costa_Rica\": {\n\t\tu: -360,\n\t\tc: [\n\t\t\t\"CR\"\n\t\t]\n\t},\n\t\"America/Creston\": {\n\t\ta: \"America/Phoenix\",\n\t\tc: [\n\t\t\t\"CA\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Cuiaba\": {\n\t\tu: -240,\n\t\tc: [\n\t\t\t\"BR\"\n\t\t]\n\t},\n\t\"America/Curacao\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"CW\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Danmarkshavn\": {\n\t\tu: 0,\n\t\tc: [\n\t\t\t\"GL\"\n\t\t]\n\t},\n\t\"America/Dawson\": {\n\t\tu: -420,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Dawson_Creek\": {\n\t\tu: -420,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Denver\": {\n\t\tu: -420,\n\t\td: -360,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Detroit\": {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Dominica\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"DM\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Edmonton\": {\n\t\tu: -420,\n\t\td: -360,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Eirunepe\": {\n\t\tu: -300,\n\t\tc: [\n\t\t\t\"BR\"\n\t\t]\n\t},\n\t\"America/El_Salvador\": {\n\t\tu: -360,\n\t\tc: [\n\t\t\t\"SV\"\n\t\t]\n\t},\n\t\"America/Ensenada\": {\n\t\ta: \"America/Tijuana\",\n\t\tr: 1\n\t},\n\t\"America/Fort_Nelson\": {\n\t\tu: -420,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Fort_Wayne\": {\n\t\ta: \"America/Indiana/Indianapolis\",\n\t\tr: 1\n\t},\n\t\"America/Fortaleza\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"BR\"\n\t\t]\n\t},\n\t\"America/Glace_Bay\": {\n\t\tu: -240,\n\t\td: -180,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Godthab\": {\n\t\ta: \"America/Nuuk\",\n\t\tr: 1\n\t},\n\t\"America/Goose_Bay\": {\n\t\tu: -240,\n\t\td: -180,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Grand_Turk\": {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: [\n\t\t\t\"TC\"\n\t\t]\n\t},\n\t\"America/Grenada\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"GD\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Guadeloupe\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"GP\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Guatemala\": {\n\t\tu: -360,\n\t\tc: [\n\t\t\t\"GT\"\n\t\t]\n\t},\n\t\"America/Guayaquil\": {\n\t\tu: -300,\n\t\tc: [\n\t\t\t\"EC\"\n\t\t]\n\t},\n\t\"America/Guyana\": {\n\t\tu: -240,\n\t\tc: [\n\t\t\t\"GY\"\n\t\t]\n\t},\n\t\"America/Halifax\": {\n\t\tu: -240,\n\t\td: -180,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Havana\": {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: [\n\t\t\t\"CU\"\n\t\t]\n\t},\n\t\"America/Hermosillo\": {\n\t\tu: -420,\n\t\tc: [\n\t\t\t\"MX\"\n\t\t]\n\t},\n\t\"America/Indiana/Indianapolis\": {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Indiana/Knox\": {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Indiana/Marengo\": {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Indiana/Petersburg\": {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Indiana/Tell_City\": {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Indiana/Vevay\": {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Indiana/Vincennes\": {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Indiana/Winamac\": {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Indianapolis\": {\n\t\ta: \"America/Indiana/Indianapolis\",\n\t\tr: 1\n\t},\n\t\"America/Inuvik\": {\n\t\tu: -420,\n\t\td: -360,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Iqaluit\": {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Jamaica\": {\n\t\tu: -300,\n\t\tc: [\n\t\t\t\"JM\"\n\t\t]\n\t},\n\t\"America/Jujuy\": {\n\t\ta: \"America/Argentina/Jujuy\",\n\t\tr: 1\n\t},\n\t\"America/Juneau\": {\n\t\tu: -540,\n\t\td: -480,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Kentucky/Louisville\": {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Kentucky/Monticello\": {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Knox_IN\": {\n\t\ta: \"America/Indiana/Knox\",\n\t\tr: 1\n\t},\n\t\"America/Kralendijk\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"BQ\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/La_Paz\": {\n\t\tu: -240,\n\t\tc: [\n\t\t\t\"BO\"\n\t\t]\n\t},\n\t\"America/Lima\": {\n\t\tu: -300,\n\t\tc: [\n\t\t\t\"PE\"\n\t\t]\n\t},\n\t\"America/Los_Angeles\": {\n\t\tu: -480,\n\t\td: -420,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Louisville\": {\n\t\ta: \"America/Kentucky/Louisville\",\n\t\tr: 1\n\t},\n\t\"America/Lower_Princes\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"SX\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Maceio\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"BR\"\n\t\t]\n\t},\n\t\"America/Managua\": {\n\t\tu: -360,\n\t\tc: [\n\t\t\t\"NI\"\n\t\t]\n\t},\n\t\"America/Manaus\": {\n\t\tu: -240,\n\t\tc: [\n\t\t\t\"BR\"\n\t\t]\n\t},\n\t\"America/Marigot\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"MF\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Martinique\": {\n\t\tu: -240,\n\t\tc: [\n\t\t\t\"MQ\"\n\t\t]\n\t},\n\t\"America/Matamoros\": {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: [\n\t\t\t\"MX\"\n\t\t]\n\t},\n\t\"America/Mazatlan\": {\n\t\tu: -420,\n\t\tc: [\n\t\t\t\"MX\"\n\t\t]\n\t},\n\t\"America/Mendoza\": {\n\t\ta: \"America/Argentina/Mendoza\",\n\t\tr: 1\n\t},\n\t\"America/Menominee\": {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Merida\": {\n\t\tu: -360,\n\t\tc: [\n\t\t\t\"MX\"\n\t\t]\n\t},\n\t\"America/Metlakatla\": {\n\t\tu: -540,\n\t\td: -480,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Mexico_City\": {\n\t\tu: -360,\n\t\tc: [\n\t\t\t\"MX\"\n\t\t]\n\t},\n\t\"America/Miquelon\": {\n\t\tu: -180,\n\t\td: -120,\n\t\tc: [\n\t\t\t\"PM\"\n\t\t]\n\t},\n\t\"America/Moncton\": {\n\t\tu: -240,\n\t\td: -180,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Monterrey\": {\n\t\tu: -360,\n\t\tc: [\n\t\t\t\"MX\"\n\t\t]\n\t},\n\t\"America/Montevideo\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"UY\"\n\t\t]\n\t},\n\t\"America/Montreal\": {\n\t\ta: \"America/Toronto\",\n\t\tc: [\n\t\t\t\"CA\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Montserrat\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"MS\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Nassau\": {\n\t\ta: \"America/Toronto\",\n\t\tc: [\n\t\t\t\"BS\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/New_York\": {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Nipigon\": {\n\t\ta: \"America/Toronto\",\n\t\tc: [\n\t\t\t\"CA\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Nome\": {\n\t\tu: -540,\n\t\td: -480,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Noronha\": {\n\t\tu: -120,\n\t\tc: [\n\t\t\t\"BR\"\n\t\t]\n\t},\n\t\"America/North_Dakota/Beulah\": {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/North_Dakota/Center\": {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/North_Dakota/New_Salem\": {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Nuuk\": {\n\t\tu: -120,\n\t\td: -60,\n\t\tc: [\n\t\t\t\"GL\"\n\t\t]\n\t},\n\t\"America/Ojinaga\": {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: [\n\t\t\t\"MX\"\n\t\t]\n\t},\n\t\"America/Panama\": {\n\t\tu: -300,\n\t\tc: [\n\t\t\t\"PA\",\n\t\t\t\"CA\",\n\t\t\t\"KY\"\n\t\t]\n\t},\n\t\"America/Pangnirtung\": {\n\t\ta: \"America/Iqaluit\",\n\t\tr: 1\n\t},\n\t\"America/Paramaribo\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"SR\"\n\t\t]\n\t},\n\t\"America/Phoenix\": {\n\t\tu: -420,\n\t\tc: [\n\t\t\t\"US\",\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Port-au-Prince\": {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: [\n\t\t\t\"HT\"\n\t\t]\n\t},\n\t\"America/Port_of_Spain\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"TT\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Porto_Acre\": {\n\t\ta: \"America/Rio_Branco\",\n\t\tr: 1\n\t},\n\t\"America/Porto_Velho\": {\n\t\tu: -240,\n\t\tc: [\n\t\t\t\"BR\"\n\t\t]\n\t},\n\t\"America/Puerto_Rico\": {\n\t\tu: -240,\n\t\tc: [\n\t\t\t\"PR\",\n\t\t\t\"AG\",\n\t\t\t\"CA\",\n\t\t\t\"AI\",\n\t\t\t\"AW\",\n\t\t\t\"BL\",\n\t\t\t\"BQ\",\n\t\t\t\"CW\",\n\t\t\t\"DM\",\n\t\t\t\"GD\",\n\t\t\t\"GP\",\n\t\t\t\"KN\",\n\t\t\t\"LC\",\n\t\t\t\"MF\",\n\t\t\t\"MS\",\n\t\t\t\"SX\",\n\t\t\t\"TT\",\n\t\t\t\"VC\",\n\t\t\t\"VG\",\n\t\t\t\"VI\"\n\t\t]\n\t},\n\t\"America/Punta_Arenas\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"CL\"\n\t\t]\n\t},\n\t\"America/Rainy_River\": {\n\t\ta: \"America/Winnipeg\",\n\t\tr: 1\n\t},\n\t\"America/Rankin_Inlet\": {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Recife\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"BR\"\n\t\t]\n\t},\n\t\"America/Regina\": {\n\t\tu: -360,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Resolute\": {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Rio_Branco\": {\n\t\tu: -300,\n\t\tc: [\n\t\t\t\"BR\"\n\t\t]\n\t},\n\t\"America/Rosario\": {\n\t\ta: \"America/Argentina/Cordoba\",\n\t\tr: 1\n\t},\n\t\"America/Santa_Isabel\": {\n\t\ta: \"America/Tijuana\",\n\t\tr: 1\n\t},\n\t\"America/Santarem\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"BR\"\n\t\t]\n\t},\n\t\"America/Santiago\": {\n\t\tu: -240,\n\t\td: -180,\n\t\tc: [\n\t\t\t\"CL\"\n\t\t]\n\t},\n\t\"America/Santo_Domingo\": {\n\t\tu: -240,\n\t\tc: [\n\t\t\t\"DO\"\n\t\t]\n\t},\n\t\"America/Sao_Paulo\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"BR\"\n\t\t]\n\t},\n\t\"America/Scoresbysund\": {\n\t\tu: -60,\n\t\td: 0,\n\t\tc: [\n\t\t\t\"GL\"\n\t\t]\n\t},\n\t\"America/Shiprock\": {\n\t\ta: \"America/Denver\",\n\t\tr: 1\n\t},\n\t\"America/Sitka\": {\n\t\tu: -540,\n\t\td: -480,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/St_Barthelemy\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"BL\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/St_Johns\": {\n\t\tu: -210,\n\t\td: -150,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/St_Kitts\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"KN\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/St_Lucia\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"LC\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/St_Thomas\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"VI\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/St_Vincent\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"VC\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Swift_Current\": {\n\t\tu: -360,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Tegucigalpa\": {\n\t\tu: -360,\n\t\tc: [\n\t\t\t\"HN\"\n\t\t]\n\t},\n\t\"America/Thule\": {\n\t\tu: -240,\n\t\td: -180,\n\t\tc: [\n\t\t\t\"GL\"\n\t\t]\n\t},\n\t\"America/Thunder_Bay\": {\n\t\ta: \"America/Toronto\",\n\t\tc: [\n\t\t\t\"CA\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Tijuana\": {\n\t\tu: -480,\n\t\td: -420,\n\t\tc: [\n\t\t\t\"MX\"\n\t\t]\n\t},\n\t\"America/Toronto\": {\n\t\tu: -300,\n\t\td: -240,\n\t\tc: [\n\t\t\t\"CA\",\n\t\t\t\"BS\"\n\t\t]\n\t},\n\t\"America/Tortola\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"VG\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Vancouver\": {\n\t\tu: -480,\n\t\td: -420,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Virgin\": {\n\t\ta: \"America/Puerto_Rico\",\n\t\tc: [\n\t\t\t\"VI\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"America/Whitehorse\": {\n\t\tu: -420,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Winnipeg\": {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: [\n\t\t\t\"CA\"\n\t\t]\n\t},\n\t\"America/Yakutat\": {\n\t\tu: -540,\n\t\td: -480,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"America/Yellowknife\": {\n\t\ta: \"America/Edmonton\",\n\t\tr: 1\n\t},\n\t\"Antarctica/Casey\": {\n\t\tu: 660,\n\t\tc: [\n\t\t\t\"AQ\"\n\t\t]\n\t},\n\t\"Antarctica/Davis\": {\n\t\tu: 420,\n\t\tc: [\n\t\t\t\"AQ\"\n\t\t]\n\t},\n\t\"Antarctica/DumontDUrville\": {\n\t\ta: \"Pacific/Port_Moresby\",\n\t\tc: [\n\t\t\t\"AQ\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Antarctica/Macquarie\": {\n\t\tu: 600,\n\t\td: 660,\n\t\tc: [\n\t\t\t\"AU\"\n\t\t]\n\t},\n\t\"Antarctica/Mawson\": {\n\t\tu: 300,\n\t\tc: [\n\t\t\t\"AQ\"\n\t\t]\n\t},\n\t\"Antarctica/McMurdo\": {\n\t\ta: \"Pacific/Auckland\",\n\t\tc: [\n\t\t\t\"AQ\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Antarctica/Palmer\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"AQ\"\n\t\t]\n\t},\n\t\"Antarctica/Rothera\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"AQ\"\n\t\t]\n\t},\n\t\"Antarctica/South_Pole\": {\n\t\ta: \"Pacific/Auckland\",\n\t\tc: [\n\t\t\t\"AQ\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Antarctica/Syowa\": {\n\t\ta: \"Asia/Riyadh\",\n\t\tc: [\n\t\t\t\"AQ\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Antarctica/Troll\": {\n\t\tu: 0,\n\t\td: 120,\n\t\tc: [\n\t\t\t\"AQ\"\n\t\t]\n\t},\n\t\"Antarctica/Vostok\": {\n\t\ta: \"Asia/Urumqi\",\n\t\tc: [\n\t\t\t\"AQ\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Arctic/Longyearbyen\": {\n\t\ta: \"Europe/Berlin\",\n\t\tc: [\n\t\t\t\"SJ\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Asia/Aden\": {\n\t\ta: \"Asia/Riyadh\",\n\t\tc: [\n\t\t\t\"YE\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Asia/Almaty\": {\n\t\tu: 360,\n\t\tc: [\n\t\t\t\"KZ\"\n\t\t]\n\t},\n\t\"Asia/Amman\": {\n\t\tu: 180,\n\t\tc: [\n\t\t\t\"JO\"\n\t\t]\n\t},\n\t\"Asia/Anadyr\": {\n\t\tu: 720,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Aqtau\": {\n\t\tu: 300,\n\t\tc: [\n\t\t\t\"KZ\"\n\t\t]\n\t},\n\t\"Asia/Aqtobe\": {\n\t\tu: 300,\n\t\tc: [\n\t\t\t\"KZ\"\n\t\t]\n\t},\n\t\"Asia/Ashgabat\": {\n\t\tu: 300,\n\t\tc: [\n\t\t\t\"TM\"\n\t\t]\n\t},\n\t\"Asia/Ashkhabad\": {\n\t\ta: \"Asia/Ashgabat\",\n\t\tr: 1\n\t},\n\t\"Asia/Atyrau\": {\n\t\tu: 300,\n\t\tc: [\n\t\t\t\"KZ\"\n\t\t]\n\t},\n\t\"Asia/Baghdad\": {\n\t\tu: 180,\n\t\tc: [\n\t\t\t\"IQ\"\n\t\t]\n\t},\n\t\"Asia/Bahrain\": {\n\t\ta: \"Asia/Qatar\",\n\t\tc: [\n\t\t\t\"BH\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Asia/Baku\": {\n\t\tu: 240,\n\t\tc: [\n\t\t\t\"AZ\"\n\t\t]\n\t},\n\t\"Asia/Bangkok\": {\n\t\tu: 420,\n\t\tc: [\n\t\t\t\"TH\",\n\t\t\t\"CX\",\n\t\t\t\"KH\",\n\t\t\t\"LA\",\n\t\t\t\"VN\"\n\t\t]\n\t},\n\t\"Asia/Barnaul\": {\n\t\tu: 420,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Beirut\": {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: [\n\t\t\t\"LB\"\n\t\t]\n\t},\n\t\"Asia/Bishkek\": {\n\t\tu: 360,\n\t\tc: [\n\t\t\t\"KG\"\n\t\t]\n\t},\n\t\"Asia/Brunei\": {\n\t\ta: \"Asia/Kuching\",\n\t\tc: [\n\t\t\t\"BN\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Asia/Calcutta\": {\n\t\ta: \"Asia/Kolkata\",\n\t\tr: 1\n\t},\n\t\"Asia/Chita\": {\n\t\tu: 540,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Choibalsan\": {\n\t\tu: 480,\n\t\tc: [\n\t\t\t\"MN\"\n\t\t]\n\t},\n\t\"Asia/Chongqing\": {\n\t\ta: \"Asia/Shanghai\",\n\t\tr: 1\n\t},\n\t\"Asia/Chungking\": {\n\t\ta: \"Asia/Shanghai\",\n\t\tr: 1\n\t},\n\t\"Asia/Colombo\": {\n\t\tu: 330,\n\t\tc: [\n\t\t\t\"LK\"\n\t\t]\n\t},\n\t\"Asia/Dacca\": {\n\t\ta: \"Asia/Dhaka\",\n\t\tr: 1\n\t},\n\t\"Asia/Damascus\": {\n\t\tu: 180,\n\t\tc: [\n\t\t\t\"SY\"\n\t\t]\n\t},\n\t\"Asia/Dhaka\": {\n\t\tu: 360,\n\t\tc: [\n\t\t\t\"BD\"\n\t\t]\n\t},\n\t\"Asia/Dili\": {\n\t\tu: 540,\n\t\tc: [\n\t\t\t\"TL\"\n\t\t]\n\t},\n\t\"Asia/Dubai\": {\n\t\tu: 240,\n\t\tc: [\n\t\t\t\"AE\",\n\t\t\t\"OM\",\n\t\t\t\"RE\",\n\t\t\t\"SC\",\n\t\t\t\"TF\"\n\t\t]\n\t},\n\t\"Asia/Dushanbe\": {\n\t\tu: 300,\n\t\tc: [\n\t\t\t\"TJ\"\n\t\t]\n\t},\n\t\"Asia/Famagusta\": {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: [\n\t\t\t\"CY\"\n\t\t]\n\t},\n\t\"Asia/Gaza\": {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: [\n\t\t\t\"PS\"\n\t\t]\n\t},\n\t\"Asia/Harbin\": {\n\t\ta: \"Asia/Shanghai\",\n\t\tr: 1\n\t},\n\t\"Asia/Hebron\": {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: [\n\t\t\t\"PS\"\n\t\t]\n\t},\n\t\"Asia/Ho_Chi_Minh\": {\n\t\tu: 420,\n\t\tc: [\n\t\t\t\"VN\"\n\t\t]\n\t},\n\t\"Asia/Hong_Kong\": {\n\t\tu: 480,\n\t\tc: [\n\t\t\t\"HK\"\n\t\t]\n\t},\n\t\"Asia/Hovd\": {\n\t\tu: 420,\n\t\tc: [\n\t\t\t\"MN\"\n\t\t]\n\t},\n\t\"Asia/Irkutsk\": {\n\t\tu: 480,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Istanbul\": {\n\t\ta: \"Europe/Istanbul\",\n\t\tr: 1\n\t},\n\t\"Asia/Jakarta\": {\n\t\tu: 420,\n\t\tc: [\n\t\t\t\"ID\"\n\t\t]\n\t},\n\t\"Asia/Jayapura\": {\n\t\tu: 540,\n\t\tc: [\n\t\t\t\"ID\"\n\t\t]\n\t},\n\t\"Asia/Jerusalem\": {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: [\n\t\t\t\"IL\"\n\t\t]\n\t},\n\t\"Asia/Kabul\": {\n\t\tu: 270,\n\t\tc: [\n\t\t\t\"AF\"\n\t\t]\n\t},\n\t\"Asia/Kamchatka\": {\n\t\tu: 720,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Karachi\": {\n\t\tu: 300,\n\t\tc: [\n\t\t\t\"PK\"\n\t\t]\n\t},\n\t\"Asia/Kashgar\": {\n\t\ta: \"Asia/Urumqi\",\n\t\tc: [\n\t\t\t\"CN\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Asia/Kathmandu\": {\n\t\tu: 345,\n\t\tc: [\n\t\t\t\"NP\"\n\t\t]\n\t},\n\t\"Asia/Katmandu\": {\n\t\ta: \"Asia/Kathmandu\",\n\t\tr: 1\n\t},\n\t\"Asia/Khandyga\": {\n\t\tu: 540,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Kolkata\": {\n\t\tu: 330,\n\t\tc: [\n\t\t\t\"IN\"\n\t\t]\n\t},\n\t\"Asia/Krasnoyarsk\": {\n\t\tu: 420,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Kuala_Lumpur\": {\n\t\ta: \"Asia/Singapore\",\n\t\tc: [\n\t\t\t\"MY\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Asia/Kuching\": {\n\t\tu: 480,\n\t\tc: [\n\t\t\t\"MY\",\n\t\t\t\"BN\"\n\t\t]\n\t},\n\t\"Asia/Kuwait\": {\n\t\ta: \"Asia/Riyadh\",\n\t\tc: [\n\t\t\t\"KW\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Asia/Macao\": {\n\t\ta: \"Asia/Macau\",\n\t\tr: 1\n\t},\n\t\"Asia/Macau\": {\n\t\tu: 480,\n\t\tc: [\n\t\t\t\"MO\"\n\t\t]\n\t},\n\t\"Asia/Magadan\": {\n\t\tu: 660,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Makassar\": {\n\t\tu: 480,\n\t\tc: [\n\t\t\t\"ID\"\n\t\t]\n\t},\n\t\"Asia/Manila\": {\n\t\tu: 480,\n\t\tc: [\n\t\t\t\"PH\"\n\t\t]\n\t},\n\t\"Asia/Muscat\": {\n\t\ta: \"Asia/Dubai\",\n\t\tc: [\n\t\t\t\"OM\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Asia/Nicosia\": {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: [\n\t\t\t\"CY\"\n\t\t]\n\t},\n\t\"Asia/Novokuznetsk\": {\n\t\tu: 420,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Novosibirsk\": {\n\t\tu: 420,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Omsk\": {\n\t\tu: 360,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Oral\": {\n\t\tu: 300,\n\t\tc: [\n\t\t\t\"KZ\"\n\t\t]\n\t},\n\t\"Asia/Phnom_Penh\": {\n\t\ta: \"Asia/Bangkok\",\n\t\tc: [\n\t\t\t\"KH\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Asia/Pontianak\": {\n\t\tu: 420,\n\t\tc: [\n\t\t\t\"ID\"\n\t\t]\n\t},\n\t\"Asia/Pyongyang\": {\n\t\tu: 540,\n\t\tc: [\n\t\t\t\"KP\"\n\t\t]\n\t},\n\t\"Asia/Qatar\": {\n\t\tu: 180,\n\t\tc: [\n\t\t\t\"QA\",\n\t\t\t\"BH\"\n\t\t]\n\t},\n\t\"Asia/Qostanay\": {\n\t\tu: 360,\n\t\tc: [\n\t\t\t\"KZ\"\n\t\t]\n\t},\n\t\"Asia/Qyzylorda\": {\n\t\tu: 300,\n\t\tc: [\n\t\t\t\"KZ\"\n\t\t]\n\t},\n\t\"Asia/Rangoon\": {\n\t\ta: \"Asia/Yangon\",\n\t\tc: [\n\t\t\t\"MM\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Asia/Riyadh\": {\n\t\tu: 180,\n\t\tc: [\n\t\t\t\"SA\",\n\t\t\t\"AQ\",\n\t\t\t\"KW\",\n\t\t\t\"YE\"\n\t\t]\n\t},\n\t\"Asia/Saigon\": {\n\t\ta: \"Asia/Ho_Chi_Minh\",\n\t\tr: 1\n\t},\n\t\"Asia/Sakhalin\": {\n\t\tu: 660,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Samarkand\": {\n\t\tu: 300,\n\t\tc: [\n\t\t\t\"UZ\"\n\t\t]\n\t},\n\t\"Asia/Seoul\": {\n\t\tu: 540,\n\t\tc: [\n\t\t\t\"KR\"\n\t\t]\n\t},\n\t\"Asia/Shanghai\": {\n\t\tu: 480,\n\t\tc: [\n\t\t\t\"CN\"\n\t\t]\n\t},\n\t\"Asia/Singapore\": {\n\t\tu: 480,\n\t\tc: [\n\t\t\t\"SG\",\n\t\t\t\"MY\"\n\t\t]\n\t},\n\t\"Asia/Srednekolymsk\": {\n\t\tu: 660,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Taipei\": {\n\t\tu: 480,\n\t\tc: [\n\t\t\t\"TW\"\n\t\t]\n\t},\n\t\"Asia/Tashkent\": {\n\t\tu: 300,\n\t\tc: [\n\t\t\t\"UZ\"\n\t\t]\n\t},\n\t\"Asia/Tbilisi\": {\n\t\tu: 240,\n\t\tc: [\n\t\t\t\"GE\"\n\t\t]\n\t},\n\t\"Asia/Tehran\": {\n\t\tu: 210,\n\t\tc: [\n\t\t\t\"IR\"\n\t\t]\n\t},\n\t\"Asia/Tel_Aviv\": {\n\t\ta: \"Asia/Jerusalem\",\n\t\tr: 1\n\t},\n\t\"Asia/Thimbu\": {\n\t\ta: \"Asia/Thimphu\",\n\t\tr: 1\n\t},\n\t\"Asia/Thimphu\": {\n\t\tu: 360,\n\t\tc: [\n\t\t\t\"BT\"\n\t\t]\n\t},\n\t\"Asia/Tokyo\": {\n\t\tu: 540,\n\t\tc: [\n\t\t\t\"JP\"\n\t\t]\n\t},\n\t\"Asia/Tomsk\": {\n\t\tu: 420,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Ujung_Pandang\": {\n\t\ta: \"Asia/Makassar\",\n\t\tr: 1\n\t},\n\t\"Asia/Ulaanbaatar\": {\n\t\tu: 480,\n\t\tc: [\n\t\t\t\"MN\"\n\t\t]\n\t},\n\t\"Asia/Ulan_Bator\": {\n\t\ta: \"Asia/Ulaanbaatar\",\n\t\tr: 1\n\t},\n\t\"Asia/Urumqi\": {\n\t\tu: 360,\n\t\tc: [\n\t\t\t\"CN\",\n\t\t\t\"AQ\"\n\t\t]\n\t},\n\t\"Asia/Ust-Nera\": {\n\t\tu: 600,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Vientiane\": {\n\t\ta: \"Asia/Bangkok\",\n\t\tc: [\n\t\t\t\"LA\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Asia/Vladivostok\": {\n\t\tu: 600,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Yakutsk\": {\n\t\tu: 540,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Yangon\": {\n\t\tu: 390,\n\t\tc: [\n\t\t\t\"MM\",\n\t\t\t\"CC\"\n\t\t]\n\t},\n\t\"Asia/Yekaterinburg\": {\n\t\tu: 300,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Asia/Yerevan\": {\n\t\tu: 240,\n\t\tc: [\n\t\t\t\"AM\"\n\t\t]\n\t},\n\t\"Atlantic/Azores\": {\n\t\tu: -60,\n\t\td: 0,\n\t\tc: [\n\t\t\t\"PT\"\n\t\t]\n\t},\n\t\"Atlantic/Bermuda\": {\n\t\tu: -240,\n\t\td: -180,\n\t\tc: [\n\t\t\t\"BM\"\n\t\t]\n\t},\n\t\"Atlantic/Canary\": {\n\t\tu: 0,\n\t\td: 60,\n\t\tc: [\n\t\t\t\"ES\"\n\t\t]\n\t},\n\t\"Atlantic/Cape_Verde\": {\n\t\tu: -60,\n\t\tc: [\n\t\t\t\"CV\"\n\t\t]\n\t},\n\t\"Atlantic/Faeroe\": {\n\t\ta: \"Atlantic/Faroe\",\n\t\tr: 1\n\t},\n\t\"Atlantic/Faroe\": {\n\t\tu: 0,\n\t\td: 60,\n\t\tc: [\n\t\t\t\"FO\"\n\t\t]\n\t},\n\t\"Atlantic/Jan_Mayen\": {\n\t\ta: \"Europe/Berlin\",\n\t\tc: [\n\t\t\t\"SJ\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Atlantic/Madeira\": {\n\t\tu: 0,\n\t\td: 60,\n\t\tc: [\n\t\t\t\"PT\"\n\t\t]\n\t},\n\t\"Atlantic/Reykjavik\": {\n\t\ta: \"Africa/Abidjan\",\n\t\tc: [\n\t\t\t\"IS\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Atlantic/South_Georgia\": {\n\t\tu: -120,\n\t\tc: [\n\t\t\t\"GS\"\n\t\t]\n\t},\n\t\"Atlantic/St_Helena\": {\n\t\ta: \"Africa/Abidjan\",\n\t\tc: [\n\t\t\t\"SH\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Atlantic/Stanley\": {\n\t\tu: -180,\n\t\tc: [\n\t\t\t\"FK\"\n\t\t]\n\t},\n\t\"Australia/ACT\": {\n\t\ta: \"Australia/Sydney\",\n\t\tr: 1\n\t},\n\t\"Australia/Adelaide\": {\n\t\tu: 570,\n\t\td: 630,\n\t\tc: [\n\t\t\t\"AU\"\n\t\t]\n\t},\n\t\"Australia/Brisbane\": {\n\t\tu: 600,\n\t\tc: [\n\t\t\t\"AU\"\n\t\t]\n\t},\n\t\"Australia/Broken_Hill\": {\n\t\tu: 570,\n\t\td: 630,\n\t\tc: [\n\t\t\t\"AU\"\n\t\t]\n\t},\n\t\"Australia/Canberra\": {\n\t\ta: \"Australia/Sydney\",\n\t\tr: 1\n\t},\n\t\"Australia/Currie\": {\n\t\ta: \"Australia/Hobart\",\n\t\tr: 1\n\t},\n\t\"Australia/Darwin\": {\n\t\tu: 570,\n\t\tc: [\n\t\t\t\"AU\"\n\t\t]\n\t},\n\t\"Australia/Eucla\": {\n\t\tu: 525,\n\t\tc: [\n\t\t\t\"AU\"\n\t\t]\n\t},\n\t\"Australia/Hobart\": {\n\t\tu: 600,\n\t\td: 660,\n\t\tc: [\n\t\t\t\"AU\"\n\t\t]\n\t},\n\t\"Australia/LHI\": {\n\t\ta: \"Australia/Lord_Howe\",\n\t\tr: 1\n\t},\n\t\"Australia/Lindeman\": {\n\t\tu: 600,\n\t\tc: [\n\t\t\t\"AU\"\n\t\t]\n\t},\n\t\"Australia/Lord_Howe\": {\n\t\tu: 630,\n\t\td: 660,\n\t\tc: [\n\t\t\t\"AU\"\n\t\t]\n\t},\n\t\"Australia/Melbourne\": {\n\t\tu: 600,\n\t\td: 660,\n\t\tc: [\n\t\t\t\"AU\"\n\t\t]\n\t},\n\t\"Australia/NSW\": {\n\t\ta: \"Australia/Sydney\",\n\t\tr: 1\n\t},\n\t\"Australia/North\": {\n\t\ta: \"Australia/Darwin\",\n\t\tr: 1\n\t},\n\t\"Australia/Perth\": {\n\t\tu: 480,\n\t\tc: [\n\t\t\t\"AU\"\n\t\t]\n\t},\n\t\"Australia/Queensland\": {\n\t\ta: \"Australia/Brisbane\",\n\t\tr: 1\n\t},\n\t\"Australia/South\": {\n\t\ta: \"Australia/Adelaide\",\n\t\tr: 1\n\t},\n\t\"Australia/Sydney\": {\n\t\tu: 600,\n\t\td: 660,\n\t\tc: [\n\t\t\t\"AU\"\n\t\t]\n\t},\n\t\"Australia/Tasmania\": {\n\t\ta: \"Australia/Hobart\",\n\t\tr: 1\n\t},\n\t\"Australia/Victoria\": {\n\t\ta: \"Australia/Melbourne\",\n\t\tr: 1\n\t},\n\t\"Australia/West\": {\n\t\ta: \"Australia/Perth\",\n\t\tr: 1\n\t},\n\t\"Australia/Yancowinna\": {\n\t\ta: \"Australia/Broken_Hill\",\n\t\tr: 1\n\t},\n\t\"Brazil/Acre\": {\n\t\ta: \"America/Rio_Branco\",\n\t\tr: 1\n\t},\n\t\"Brazil/DeNoronha\": {\n\t\ta: \"America/Noronha\",\n\t\tr: 1\n\t},\n\t\"Brazil/East\": {\n\t\ta: \"America/Sao_Paulo\",\n\t\tr: 1\n\t},\n\t\"Brazil/West\": {\n\t\ta: \"America/Manaus\",\n\t\tr: 1\n\t},\n\tCET: {\n\t\tu: 60,\n\t\td: 120\n\t},\n\tCST6CDT: {\n\t\tu: -360,\n\t\td: -300\n\t},\n\t\"Canada/Atlantic\": {\n\t\ta: \"America/Halifax\",\n\t\tr: 1\n\t},\n\t\"Canada/Central\": {\n\t\ta: \"America/Winnipeg\",\n\t\tr: 1\n\t},\n\t\"Canada/Eastern\": {\n\t\ta: \"America/Toronto\",\n\t\tc: [\n\t\t\t\"CA\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Canada/Mountain\": {\n\t\ta: \"America/Edmonton\",\n\t\tr: 1\n\t},\n\t\"Canada/Newfoundland\": {\n\t\ta: \"America/St_Johns\",\n\t\tr: 1\n\t},\n\t\"Canada/Pacific\": {\n\t\ta: \"America/Vancouver\",\n\t\tr: 1\n\t},\n\t\"Canada/Saskatchewan\": {\n\t\ta: \"America/Regina\",\n\t\tr: 1\n\t},\n\t\"Canada/Yukon\": {\n\t\ta: \"America/Whitehorse\",\n\t\tr: 1\n\t},\n\t\"Chile/Continental\": {\n\t\ta: \"America/Santiago\",\n\t\tr: 1\n\t},\n\t\"Chile/EasterIsland\": {\n\t\ta: \"Pacific/Easter\",\n\t\tr: 1\n\t},\n\tCuba: {\n\t\ta: \"America/Havana\",\n\t\tr: 1\n\t},\n\tEET: {\n\t\tu: 120,\n\t\td: 180\n\t},\n\tEST: {\n\t\tu: -300\n\t},\n\tEST5EDT: {\n\t\tu: -300,\n\t\td: -240\n\t},\n\tEgypt: {\n\t\ta: \"Africa/Cairo\",\n\t\tr: 1\n\t},\n\tEire: {\n\t\ta: \"Europe/Dublin\",\n\t\tr: 1\n\t},\n\t\"Etc/GMT\": {\n\t\tu: 0\n\t},\n\t\"Etc/GMT+0\": {\n\t\ta: \"Etc/GMT\",\n\t\tr: 1\n\t},\n\t\"Etc/GMT+1\": {\n\t\tu: -60\n\t},\n\t\"Etc/GMT+10\": {\n\t\tu: -600\n\t},\n\t\"Etc/GMT+11\": {\n\t\tu: -660\n\t},\n\t\"Etc/GMT+12\": {\n\t\tu: -720\n\t},\n\t\"Etc/GMT+2\": {\n\t\tu: -120\n\t},\n\t\"Etc/GMT+3\": {\n\t\tu: -180\n\t},\n\t\"Etc/GMT+4\": {\n\t\tu: -240\n\t},\n\t\"Etc/GMT+5\": {\n\t\tu: -300\n\t},\n\t\"Etc/GMT+6\": {\n\t\tu: -360\n\t},\n\t\"Etc/GMT+7\": {\n\t\tu: -420\n\t},\n\t\"Etc/GMT+8\": {\n\t\tu: -480\n\t},\n\t\"Etc/GMT+9\": {\n\t\tu: -540\n\t},\n\t\"Etc/GMT-0\": {\n\t\ta: \"Etc/GMT\",\n\t\tr: 1\n\t},\n\t\"Etc/GMT-1\": {\n\t\tu: 60\n\t},\n\t\"Etc/GMT-10\": {\n\t\tu: 600\n\t},\n\t\"Etc/GMT-11\": {\n\t\tu: 660\n\t},\n\t\"Etc/GMT-12\": {\n\t\tu: 720\n\t},\n\t\"Etc/GMT-13\": {\n\t\tu: 780\n\t},\n\t\"Etc/GMT-14\": {\n\t\tu: 840\n\t},\n\t\"Etc/GMT-2\": {\n\t\tu: 120\n\t},\n\t\"Etc/GMT-3\": {\n\t\tu: 180\n\t},\n\t\"Etc/GMT-4\": {\n\t\tu: 240\n\t},\n\t\"Etc/GMT-5\": {\n\t\tu: 300\n\t},\n\t\"Etc/GMT-6\": {\n\t\tu: 360\n\t},\n\t\"Etc/GMT-7\": {\n\t\tu: 420\n\t},\n\t\"Etc/GMT-8\": {\n\t\tu: 480\n\t},\n\t\"Etc/GMT-9\": {\n\t\tu: 540\n\t},\n\t\"Etc/GMT0\": {\n\t\ta: \"Etc/GMT\",\n\t\tr: 1\n\t},\n\t\"Etc/Greenwich\": {\n\t\ta: \"Etc/GMT\",\n\t\tr: 1\n\t},\n\t\"Etc/UCT\": {\n\t\ta: \"Etc/UTC\",\n\t\tr: 1\n\t},\n\t\"Etc/UTC\": {\n\t\tu: 0\n\t},\n\t\"Etc/Universal\": {\n\t\ta: \"Etc/UTC\",\n\t\tr: 1\n\t},\n\t\"Etc/Zulu\": {\n\t\ta: \"Etc/UTC\",\n\t\tr: 1\n\t},\n\t\"Europe/Amsterdam\": {\n\t\ta: \"Europe/Brussels\",\n\t\tc: [\n\t\t\t\"NL\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Andorra\": {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: [\n\t\t\t\"AD\"\n\t\t]\n\t},\n\t\"Europe/Astrakhan\": {\n\t\tu: 240,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Europe/Athens\": {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: [\n\t\t\t\"GR\"\n\t\t]\n\t},\n\t\"Europe/Belfast\": {\n\t\ta: \"Europe/London\",\n\t\tc: [\n\t\t\t\"GB\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Belgrade\": {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: [\n\t\t\t\"RS\",\n\t\t\t\"BA\",\n\t\t\t\"HR\",\n\t\t\t\"ME\",\n\t\t\t\"MK\",\n\t\t\t\"SI\"\n\t\t]\n\t},\n\t\"Europe/Berlin\": {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: [\n\t\t\t\"DE\",\n\t\t\t\"DK\",\n\t\t\t\"NO\",\n\t\t\t\"SE\",\n\t\t\t\"SJ\"\n\t\t]\n\t},\n\t\"Europe/Bratislava\": {\n\t\ta: \"Europe/Prague\",\n\t\tc: [\n\t\t\t\"SK\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Brussels\": {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: [\n\t\t\t\"BE\",\n\t\t\t\"LU\",\n\t\t\t\"NL\"\n\t\t]\n\t},\n\t\"Europe/Bucharest\": {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: [\n\t\t\t\"RO\"\n\t\t]\n\t},\n\t\"Europe/Budapest\": {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: [\n\t\t\t\"HU\"\n\t\t]\n\t},\n\t\"Europe/Busingen\": {\n\t\ta: \"Europe/Zurich\",\n\t\tc: [\n\t\t\t\"DE\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Chisinau\": {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: [\n\t\t\t\"MD\"\n\t\t]\n\t},\n\t\"Europe/Copenhagen\": {\n\t\ta: \"Europe/Berlin\",\n\t\tc: [\n\t\t\t\"DK\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Dublin\": {\n\t\tu: 60,\n\t\td: 0,\n\t\tc: [\n\t\t\t\"IE\"\n\t\t]\n\t},\n\t\"Europe/Gibraltar\": {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: [\n\t\t\t\"GI\"\n\t\t]\n\t},\n\t\"Europe/Guernsey\": {\n\t\ta: \"Europe/London\",\n\t\tc: [\n\t\t\t\"GG\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Helsinki\": {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: [\n\t\t\t\"FI\",\n\t\t\t\"AX\"\n\t\t]\n\t},\n\t\"Europe/Isle_of_Man\": {\n\t\ta: \"Europe/London\",\n\t\tc: [\n\t\t\t\"IM\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Istanbul\": {\n\t\tu: 180,\n\t\tc: [\n\t\t\t\"TR\"\n\t\t]\n\t},\n\t\"Europe/Jersey\": {\n\t\ta: \"Europe/London\",\n\t\tc: [\n\t\t\t\"JE\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Kaliningrad\": {\n\t\tu: 120,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Europe/Kiev\": {\n\t\ta: \"Europe/Kyiv\",\n\t\tr: 1\n\t},\n\t\"Europe/Kirov\": {\n\t\tu: 180,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Europe/Kyiv\": {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: [\n\t\t\t\"UA\"\n\t\t]\n\t},\n\t\"Europe/Lisbon\": {\n\t\tu: 0,\n\t\td: 60,\n\t\tc: [\n\t\t\t\"PT\"\n\t\t]\n\t},\n\t\"Europe/Ljubljana\": {\n\t\ta: \"Europe/Belgrade\",\n\t\tc: [\n\t\t\t\"SI\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/London\": {\n\t\tu: 0,\n\t\td: 60,\n\t\tc: [\n\t\t\t\"GB\",\n\t\t\t\"GG\",\n\t\t\t\"IM\",\n\t\t\t\"JE\"\n\t\t]\n\t},\n\t\"Europe/Luxembourg\": {\n\t\ta: \"Europe/Brussels\",\n\t\tc: [\n\t\t\t\"LU\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Madrid\": {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: [\n\t\t\t\"ES\"\n\t\t]\n\t},\n\t\"Europe/Malta\": {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: [\n\t\t\t\"MT\"\n\t\t]\n\t},\n\t\"Europe/Mariehamn\": {\n\t\ta: \"Europe/Helsinki\",\n\t\tc: [\n\t\t\t\"AX\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Minsk\": {\n\t\tu: 180,\n\t\tc: [\n\t\t\t\"BY\"\n\t\t]\n\t},\n\t\"Europe/Monaco\": {\n\t\ta: \"Europe/Paris\",\n\t\tc: [\n\t\t\t\"MC\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Moscow\": {\n\t\tu: 180,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Europe/Nicosia\": {\n\t\ta: \"Asia/Nicosia\",\n\t\tr: 1\n\t},\n\t\"Europe/Oslo\": {\n\t\ta: \"Europe/Berlin\",\n\t\tc: [\n\t\t\t\"NO\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Paris\": {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: [\n\t\t\t\"FR\",\n\t\t\t\"MC\"\n\t\t]\n\t},\n\t\"Europe/Podgorica\": {\n\t\ta: \"Europe/Belgrade\",\n\t\tc: [\n\t\t\t\"ME\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Prague\": {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: [\n\t\t\t\"CZ\",\n\t\t\t\"SK\"\n\t\t]\n\t},\n\t\"Europe/Riga\": {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: [\n\t\t\t\"LV\"\n\t\t]\n\t},\n\t\"Europe/Rome\": {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: [\n\t\t\t\"IT\",\n\t\t\t\"SM\",\n\t\t\t\"VA\"\n\t\t]\n\t},\n\t\"Europe/Samara\": {\n\t\tu: 240,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Europe/San_Marino\": {\n\t\ta: \"Europe/Rome\",\n\t\tc: [\n\t\t\t\"SM\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Sarajevo\": {\n\t\ta: \"Europe/Belgrade\",\n\t\tc: [\n\t\t\t\"BA\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Saratov\": {\n\t\tu: 240,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Europe/Simferopol\": {\n\t\tu: 180,\n\t\tc: [\n\t\t\t\"RU\",\n\t\t\t\"UA\"\n\t\t]\n\t},\n\t\"Europe/Skopje\": {\n\t\ta: \"Europe/Belgrade\",\n\t\tc: [\n\t\t\t\"MK\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Sofia\": {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: [\n\t\t\t\"BG\"\n\t\t]\n\t},\n\t\"Europe/Stockholm\": {\n\t\ta: \"Europe/Berlin\",\n\t\tc: [\n\t\t\t\"SE\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Tallinn\": {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: [\n\t\t\t\"EE\"\n\t\t]\n\t},\n\t\"Europe/Tirane\": {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: [\n\t\t\t\"AL\"\n\t\t]\n\t},\n\t\"Europe/Tiraspol\": {\n\t\ta: \"Europe/Chisinau\",\n\t\tr: 1\n\t},\n\t\"Europe/Ulyanovsk\": {\n\t\tu: 240,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Europe/Uzhgorod\": {\n\t\ta: \"Europe/Kyiv\",\n\t\tr: 1\n\t},\n\t\"Europe/Vaduz\": {\n\t\ta: \"Europe/Zurich\",\n\t\tc: [\n\t\t\t\"LI\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Vatican\": {\n\t\ta: \"Europe/Rome\",\n\t\tc: [\n\t\t\t\"VA\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Vienna\": {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: [\n\t\t\t\"AT\"\n\t\t]\n\t},\n\t\"Europe/Vilnius\": {\n\t\tu: 120,\n\t\td: 180,\n\t\tc: [\n\t\t\t\"LT\"\n\t\t]\n\t},\n\t\"Europe/Volgograd\": {\n\t\tu: 180,\n\t\tc: [\n\t\t\t\"RU\"\n\t\t]\n\t},\n\t\"Europe/Warsaw\": {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: [\n\t\t\t\"PL\"\n\t\t]\n\t},\n\t\"Europe/Zagreb\": {\n\t\ta: \"Europe/Belgrade\",\n\t\tc: [\n\t\t\t\"HR\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Europe/Zaporozhye\": {\n\t\ta: \"Europe/Kyiv\",\n\t\tr: 1\n\t},\n\t\"Europe/Zurich\": {\n\t\tu: 60,\n\t\td: 120,\n\t\tc: [\n\t\t\t\"CH\",\n\t\t\t\"DE\",\n\t\t\t\"LI\"\n\t\t]\n\t},\n\tFactory: {\n\t\tu: 0\n\t},\n\tGB: {\n\t\ta: \"Europe/London\",\n\t\tc: [\n\t\t\t\"GB\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"GB-Eire\": {\n\t\ta: \"Europe/London\",\n\t\tc: [\n\t\t\t\"GB\"\n\t\t],\n\t\tr: 1\n\t},\n\tGMT: {\n\t\ta: \"Etc/GMT\",\n\t\tr: 1\n\t},\n\t\"GMT+0\": {\n\t\ta: \"Etc/GMT\",\n\t\tr: 1\n\t},\n\t\"GMT-0\": {\n\t\ta: \"Etc/GMT\",\n\t\tr: 1\n\t},\n\tGMT0: {\n\t\ta: \"Etc/GMT\",\n\t\tr: 1\n\t},\n\tGreenwich: {\n\t\ta: \"Etc/GMT\",\n\t\tr: 1\n\t},\n\tHST: {\n\t\tu: -600\n\t},\n\tHongkong: {\n\t\ta: \"Asia/Hong_Kong\",\n\t\tr: 1\n\t},\n\tIceland: {\n\t\ta: \"Africa/Abidjan\",\n\t\tc: [\n\t\t\t\"IS\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Indian/Antananarivo\": {\n\t\ta: \"Africa/Nairobi\",\n\t\tc: [\n\t\t\t\"MG\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Indian/Chagos\": {\n\t\tu: 360,\n\t\tc: [\n\t\t\t\"IO\"\n\t\t]\n\t},\n\t\"Indian/Christmas\": {\n\t\ta: \"Asia/Bangkok\",\n\t\tc: [\n\t\t\t\"CX\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Indian/Cocos\": {\n\t\ta: \"Asia/Yangon\",\n\t\tc: [\n\t\t\t\"CC\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Indian/Comoro\": {\n\t\ta: \"Africa/Nairobi\",\n\t\tc: [\n\t\t\t\"KM\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Indian/Kerguelen\": {\n\t\ta: \"Indian/Maldives\",\n\t\tc: [\n\t\t\t\"TF\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Indian/Mahe\": {\n\t\ta: \"Asia/Dubai\",\n\t\tc: [\n\t\t\t\"SC\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Indian/Maldives\": {\n\t\tu: 300,\n\t\tc: [\n\t\t\t\"MV\",\n\t\t\t\"TF\"\n\t\t]\n\t},\n\t\"Indian/Mauritius\": {\n\t\tu: 240,\n\t\tc: [\n\t\t\t\"MU\"\n\t\t]\n\t},\n\t\"Indian/Mayotte\": {\n\t\ta: \"Africa/Nairobi\",\n\t\tc: [\n\t\t\t\"YT\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Indian/Reunion\": {\n\t\ta: \"Asia/Dubai\",\n\t\tc: [\n\t\t\t\"RE\"\n\t\t],\n\t\tr: 1\n\t},\n\tIran: {\n\t\ta: \"Asia/Tehran\",\n\t\tr: 1\n\t},\n\tIsrael: {\n\t\ta: \"Asia/Jerusalem\",\n\t\tr: 1\n\t},\n\tJamaica: {\n\t\ta: \"America/Jamaica\",\n\t\tr: 1\n\t},\n\tJapan: {\n\t\ta: \"Asia/Tokyo\",\n\t\tr: 1\n\t},\n\tKwajalein: {\n\t\ta: \"Pacific/Kwajalein\",\n\t\tr: 1\n\t},\n\tLibya: {\n\t\ta: \"Africa/Tripoli\",\n\t\tr: 1\n\t},\n\tMET: {\n\t\tu: 60,\n\t\td: 120\n\t},\n\tMST: {\n\t\tu: -420\n\t},\n\tMST7MDT: {\n\t\tu: -420,\n\t\td: -360\n\t},\n\t\"Mexico/BajaNorte\": {\n\t\ta: \"America/Tijuana\",\n\t\tr: 1\n\t},\n\t\"Mexico/BajaSur\": {\n\t\ta: \"America/Mazatlan\",\n\t\tr: 1\n\t},\n\t\"Mexico/General\": {\n\t\ta: \"America/Mexico_City\",\n\t\tr: 1\n\t},\n\tNZ: {\n\t\ta: \"Pacific/Auckland\",\n\t\tc: [\n\t\t\t\"NZ\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"NZ-CHAT\": {\n\t\ta: \"Pacific/Chatham\",\n\t\tr: 1\n\t},\n\tNavajo: {\n\t\ta: \"America/Denver\",\n\t\tr: 1\n\t},\n\tPRC: {\n\t\ta: \"Asia/Shanghai\",\n\t\tr: 1\n\t},\n\tPST8PDT: {\n\t\tu: -480,\n\t\td: -420\n\t},\n\t\"Pacific/Apia\": {\n\t\tu: 780,\n\t\tc: [\n\t\t\t\"WS\"\n\t\t]\n\t},\n\t\"Pacific/Auckland\": {\n\t\tu: 720,\n\t\td: 780,\n\t\tc: [\n\t\t\t\"NZ\",\n\t\t\t\"AQ\"\n\t\t]\n\t},\n\t\"Pacific/Bougainville\": {\n\t\tu: 660,\n\t\tc: [\n\t\t\t\"PG\"\n\t\t]\n\t},\n\t\"Pacific/Chatham\": {\n\t\tu: 765,\n\t\td: 825,\n\t\tc: [\n\t\t\t\"NZ\"\n\t\t]\n\t},\n\t\"Pacific/Chuuk\": {\n\t\ta: \"Pacific/Port_Moresby\",\n\t\tc: [\n\t\t\t\"FM\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Pacific/Easter\": {\n\t\tu: -360,\n\t\td: -300,\n\t\tc: [\n\t\t\t\"CL\"\n\t\t]\n\t},\n\t\"Pacific/Efate\": {\n\t\tu: 660,\n\t\tc: [\n\t\t\t\"VU\"\n\t\t]\n\t},\n\t\"Pacific/Enderbury\": {\n\t\ta: \"Pacific/Kanton\",\n\t\tr: 1\n\t},\n\t\"Pacific/Fakaofo\": {\n\t\tu: 780,\n\t\tc: [\n\t\t\t\"TK\"\n\t\t]\n\t},\n\t\"Pacific/Fiji\": {\n\t\tu: 720,\n\t\tc: [\n\t\t\t\"FJ\"\n\t\t]\n\t},\n\t\"Pacific/Funafuti\": {\n\t\ta: \"Pacific/Tarawa\",\n\t\tc: [\n\t\t\t\"TV\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Pacific/Galapagos\": {\n\t\tu: -360,\n\t\tc: [\n\t\t\t\"EC\"\n\t\t]\n\t},\n\t\"Pacific/Gambier\": {\n\t\tu: -540,\n\t\tc: [\n\t\t\t\"PF\"\n\t\t]\n\t},\n\t\"Pacific/Guadalcanal\": {\n\t\tu: 660,\n\t\tc: [\n\t\t\t\"SB\",\n\t\t\t\"FM\"\n\t\t]\n\t},\n\t\"Pacific/Guam\": {\n\t\tu: 600,\n\t\tc: [\n\t\t\t\"GU\",\n\t\t\t\"MP\"\n\t\t]\n\t},\n\t\"Pacific/Honolulu\": {\n\t\tu: -600,\n\t\tc: [\n\t\t\t\"US\"\n\t\t]\n\t},\n\t\"Pacific/Johnston\": {\n\t\ta: \"Pacific/Honolulu\",\n\t\tr: 1\n\t},\n\t\"Pacific/Kanton\": {\n\t\tu: 780,\n\t\tc: [\n\t\t\t\"KI\"\n\t\t]\n\t},\n\t\"Pacific/Kiritimati\": {\n\t\tu: 840,\n\t\tc: [\n\t\t\t\"KI\"\n\t\t]\n\t},\n\t\"Pacific/Kosrae\": {\n\t\tu: 660,\n\t\tc: [\n\t\t\t\"FM\"\n\t\t]\n\t},\n\t\"Pacific/Kwajalein\": {\n\t\tu: 720,\n\t\tc: [\n\t\t\t\"MH\"\n\t\t]\n\t},\n\t\"Pacific/Majuro\": {\n\t\ta: \"Pacific/Tarawa\",\n\t\tc: [\n\t\t\t\"MH\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Pacific/Marquesas\": {\n\t\tu: -570,\n\t\tc: [\n\t\t\t\"PF\"\n\t\t]\n\t},\n\t\"Pacific/Midway\": {\n\t\ta: \"Pacific/Pago_Pago\",\n\t\tc: [\n\t\t\t\"UM\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Pacific/Nauru\": {\n\t\tu: 720,\n\t\tc: [\n\t\t\t\"NR\"\n\t\t]\n\t},\n\t\"Pacific/Niue\": {\n\t\tu: -660,\n\t\tc: [\n\t\t\t\"NU\"\n\t\t]\n\t},\n\t\"Pacific/Norfolk\": {\n\t\tu: 660,\n\t\td: 720,\n\t\tc: [\n\t\t\t\"NF\"\n\t\t]\n\t},\n\t\"Pacific/Noumea\": {\n\t\tu: 660,\n\t\tc: [\n\t\t\t\"NC\"\n\t\t]\n\t},\n\t\"Pacific/Pago_Pago\": {\n\t\tu: -660,\n\t\tc: [\n\t\t\t\"AS\",\n\t\t\t\"UM\"\n\t\t]\n\t},\n\t\"Pacific/Palau\": {\n\t\tu: 540,\n\t\tc: [\n\t\t\t\"PW\"\n\t\t]\n\t},\n\t\"Pacific/Pitcairn\": {\n\t\tu: -480,\n\t\tc: [\n\t\t\t\"PN\"\n\t\t]\n\t},\n\t\"Pacific/Pohnpei\": {\n\t\ta: \"Pacific/Guadalcanal\",\n\t\tc: [\n\t\t\t\"FM\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Pacific/Ponape\": {\n\t\ta: \"Pacific/Guadalcanal\",\n\t\tc: [\n\t\t\t\"FM\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Pacific/Port_Moresby\": {\n\t\tu: 600,\n\t\tc: [\n\t\t\t\"PG\",\n\t\t\t\"AQ\",\n\t\t\t\"FM\"\n\t\t]\n\t},\n\t\"Pacific/Rarotonga\": {\n\t\tu: -600,\n\t\tc: [\n\t\t\t\"CK\"\n\t\t]\n\t},\n\t\"Pacific/Saipan\": {\n\t\ta: \"Pacific/Guam\",\n\t\tc: [\n\t\t\t\"MP\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Pacific/Samoa\": {\n\t\ta: \"Pacific/Pago_Pago\",\n\t\tc: [\n\t\t\t\"AS\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Pacific/Tahiti\": {\n\t\tu: -600,\n\t\tc: [\n\t\t\t\"PF\"\n\t\t]\n\t},\n\t\"Pacific/Tarawa\": {\n\t\tu: 720,\n\t\tc: [\n\t\t\t\"KI\",\n\t\t\t\"MH\",\n\t\t\t\"TV\",\n\t\t\t\"UM\",\n\t\t\t\"WF\"\n\t\t]\n\t},\n\t\"Pacific/Tongatapu\": {\n\t\tu: 780,\n\t\tc: [\n\t\t\t\"TO\"\n\t\t]\n\t},\n\t\"Pacific/Truk\": {\n\t\ta: \"Pacific/Port_Moresby\",\n\t\tc: [\n\t\t\t\"FM\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Pacific/Wake\": {\n\t\ta: \"Pacific/Tarawa\",\n\t\tc: [\n\t\t\t\"UM\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Pacific/Wallis\": {\n\t\ta: \"Pacific/Tarawa\",\n\t\tc: [\n\t\t\t\"WF\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"Pacific/Yap\": {\n\t\ta: \"Pacific/Port_Moresby\",\n\t\tc: [\n\t\t\t\"FM\"\n\t\t],\n\t\tr: 1\n\t},\n\tPoland: {\n\t\ta: \"Europe/Warsaw\",\n\t\tr: 1\n\t},\n\tPortugal: {\n\t\ta: \"Europe/Lisbon\",\n\t\tr: 1\n\t},\n\tROC: {\n\t\ta: \"Asia/Taipei\",\n\t\tr: 1\n\t},\n\tROK: {\n\t\ta: \"Asia/Seoul\",\n\t\tr: 1\n\t},\n\tSingapore: {\n\t\ta: \"Asia/Singapore\",\n\t\tc: [\n\t\t\t\"SG\"\n\t\t],\n\t\tr: 1\n\t},\n\tTurkey: {\n\t\ta: \"Europe/Istanbul\",\n\t\tr: 1\n\t},\n\tUCT: {\n\t\ta: \"Etc/UTC\",\n\t\tr: 1\n\t},\n\t\"US/Alaska\": {\n\t\ta: \"America/Anchorage\",\n\t\tr: 1\n\t},\n\t\"US/Aleutian\": {\n\t\ta: \"America/Adak\",\n\t\tr: 1\n\t},\n\t\"US/Arizona\": {\n\t\ta: \"America/Phoenix\",\n\t\tc: [\n\t\t\t\"US\"\n\t\t],\n\t\tr: 1\n\t},\n\t\"US/Central\": {\n\t\ta: \"America/Chicago\",\n\t\tr: 1\n\t},\n\t\"US/East-Indiana\": {\n\t\ta: \"America/Indiana/Indianapolis\",\n\t\tr: 1\n\t},\n\t\"US/Eastern\": {\n\t\ta: \"America/New_York\",\n\t\tr: 1\n\t},\n\t\"US/Hawaii\": {\n\t\ta: \"Pacific/Honolulu\",\n\t\tr: 1\n\t},\n\t\"US/Indiana-Starke\": {\n\t\ta: \"America/Indiana/Knox\",\n\t\tr: 1\n\t},\n\t\"US/Michigan\": {\n\t\ta: \"America/Detroit\",\n\t\tr: 1\n\t},\n\t\"US/Mountain\": {\n\t\ta: \"America/Denver\",\n\t\tr: 1\n\t},\n\t\"US/Pacific\": {\n\t\ta: \"America/Los_Angeles\",\n\t\tr: 1\n\t},\n\t\"US/Samoa\": {\n\t\ta: \"Pacific/Pago_Pago\",\n\t\tc: [\n\t\t\t\"AS\"\n\t\t],\n\t\tr: 1\n\t},\n\tUTC: {\n\t\ta: \"Etc/UTC\",\n\t\tr: 1\n\t},\n\tUniversal: {\n\t\ta: \"Etc/UTC\",\n\t\tr: 1\n\t},\n\t\"W-SU\": {\n\t\ta: \"Europe/Moscow\",\n\t\tr: 1\n\t},\n\tWET: {\n\t\tu: 0,\n\t\td: 60\n\t},\n\tZulu: {\n\t\ta: \"Etc/UTC\",\n\t\tr: 1\n\t}\n};\nvar data = {\n\tcountries: countries$1,\n\ttimezones: timezones$1\n};\n\nvar timezonesMap;\nfunction buildCountry(data, id) {\n var name = data.countries[id];\n if (!name) return null;\n var tzMap = getTimezonesMap(data)[id] || {};\n return {\n id: id,\n name: name,\n timezones: tzMap.current || [],\n allTimezones: tzMap.all || []\n };\n}\nfunction getTimezonesMap(data) {\n if (!timezonesMap) timezonesMap = buildTimezonesMap(data);\n return timezonesMap;\n}\nfunction buildTimezonesMap(data) {\n return Object.keys(data.timezones).reduce(function (result, id) {\n var tz = data.timezones[id];\n var c = tz.c,\n a = tz.a;\n var aliasTz = data.timezones[a] || {};\n var countries = c || aliasTz.c;\n if (!countries) return result;\n countries.forEach(function (country) {\n if (!result[country]) Object.assign(result, _defineProperty({}, country, {\n current: [],\n all: []\n }));\n if (tz.r === undefined) result[country].current.push(id);\n result[country].all.push(id);\n });\n return result;\n }, {});\n}\n\nfunction buildTimezone(data, name) {\n var timezone = data.timezones[name];\n if (!timezone) return null;\n var _timezone$a = timezone.a,\n aliasOf = _timezone$a === void 0 ? null : _timezone$a;\n var aliasTz = aliasOf ? data.timezones[aliasOf] : {};\n var tz = _objectSpread2(_objectSpread2({}, aliasTz), data.timezones[name]);\n var countries = tz.c || [];\n var utcOffset = tz.u;\n var dstOffset = Number.isInteger(tz.d) ? tz.d : utcOffset;\n var result = {\n name: name,\n countries: countries,\n utcOffset: utcOffset,\n utcOffsetStr: getOffsetStr(utcOffset),\n dstOffset: dstOffset,\n dstOffsetStr: getOffsetStr(dstOffset),\n aliasOf: aliasOf\n };\n if (timezone.r) result.deprecated = true;\n return result;\n}\nfunction getOffsetStr(offset) {\n var hours = Math.floor(Math.abs(offset) / 60);\n var min = offset % 60;\n var sign = offset < 0 ? '-' : '+';\n return \"\".concat(sign).concat(getNumStr(hours), \":\").concat(getNumStr(min));\n}\nfunction getNumStr(input) {\n var num = Math.abs(input);\n var prefix = num < 10 ? '0' : '';\n return \"\".concat(prefix).concat(num);\n}\n\nvar _excluded = [\"allTimezones\"];\nvar totalTimezones = Object.keys(data.timezones).length;\nvar countries = {};\nvar timezones = {};\nvar memoizedTimezones = 0;\nfunction getAllCountries() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return Object.keys(data.countries).reduce(function (prev, id) {\n return Object.assign(prev, _defineProperty({}, id, getCountry(id, options)));\n }, {});\n}\nfunction getAllTimezones() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (totalTimezones !== memoizedTimezones) Object.keys(data.timezones).forEach(getTimezone);\n return deliverTimezones(timezones, options);\n}\nfunction getCountry(id) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!countries[id]) memoizeCountry(buildCountry(data, id));\n return deliverCountry(countries[id], options);\n}\nfunction memoizeCountry(country) {\n if (!country) return;\n countries[country.id] = country;\n}\nfunction getTimezone(name) {\n if (!timezones[name]) memoizeTimezone(buildTimezone(data, name));\n return timezones[name] ? _objectSpread2({}, timezones[name]) : null;\n}\nfunction memoizeTimezone(timezone) {\n if (!timezone) return;\n timezones[timezone.name] = timezone;\n memoizedTimezones = Object.keys(timezone).length;\n}\nfunction getCountriesForTimezone(tzName) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var timezone = getTimezone(tzName) || {};\n var values = timezone.countries || [];\n return values.map(function (c) {\n return getCountry(c, options);\n });\n}\nfunction getCountryForTimezone(tzName) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _getCountriesForTimez = getCountriesForTimezone(tzName, options),\n _getCountriesForTimez2 = _slicedToArray(_getCountriesForTimez, 1),\n main = _getCountriesForTimez2[0];\n return main || null;\n}\nfunction getTimezonesForCountry(countryId) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var country = getCountry(countryId, options);\n if (!country) return null;\n var values = country.timezones || [];\n return values.map(getTimezone);\n}\nfunction deliverTimezones(tzs, options) {\n var _ref = options || {},\n deprecated = _ref.deprecated;\n if (deprecated === true) return tzs;\n return Object.keys(tzs).reduce(function (prev, key) {\n if (!tzs[key].deprecated) Object.assign(prev, _defineProperty({}, key, tzs[key]));\n return prev;\n }, {});\n}\nfunction deliverCountry(country, options) {\n if (!country) return null;\n var _ref2 = options || {},\n deprecated = _ref2.deprecated;\n country.allTimezones;\n var other = _objectWithoutProperties(country, _excluded);\n var tz = deprecated ? country.allTimezones : country.timezones;\n return _objectSpread2(_objectSpread2({}, other), {}, {\n timezones: tz\n });\n}\nvar index = {\n getCountry: getCountry,\n getTimezone: getTimezone,\n getAllCountries: getAllCountries,\n getAllTimezones: getAllTimezones,\n getTimezonesForCountry: getTimezonesForCountry,\n getCountriesForTimezone: getCountriesForTimezone,\n getCountryForTimezone: getCountryForTimezone\n};\n\nexport { index as default, getAllCountries, getAllTimezones, getCountriesForTimezone, getCountry, getCountryForTimezone, getTimezone, getTimezonesForCountry };\n//# sourceMappingURL=index.js.map\n","import { getPhoneCodeByTimezone } from 'timezone-phone-codes';\nimport ct from 'countries-and-timezones';\n\nconst getTimezone = () => Intl.DateTimeFormat().resolvedOptions().timeZone;\n\nexport const getActiveDialCode = () => {\n return getPhoneCodeByTimezone(getTimezone()) || '';\n};\n\nexport const getActiveCountryCode = () => {\n const country = ct.getCountryForTimezone(getTimezone()) || {};\n return country.id || '';\n};\n","<script>\nexport default {\n name: 'Avatar',\n props: {\n username: {\n type: String,\n default: '',\n },\n size: {\n type: Number,\n default: 40,\n },\n },\n computed: {\n style() {\n return {\n fontSize: `${Math.floor(this.size / 2.5)}px`,\n };\n },\n userInitial() {\n const parts = this.username.split(/[ -]/);\n let initials = parts.reduce((acc, curr) => acc + curr.charAt(0), '');\n\n if (initials.length > 2 && initials.search(/[A-Z]/) !== -1) {\n initials = initials.replace(/[a-z]+/g, '');\n }\n initials = initials.substring(0, 2).toUpperCase();\n\n return initials;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"avatar-container\" :style=\"style\" aria-hidden=\"true\">\n <slot>{{ userInitial }}</slot>\n </div>\n</template>\n\n<style scoped>\n@tailwind components;\n@layer components {\n .avatar-color {\n background-image: linear-gradient(to top, #c2e1ff 0%, #d6ebff 100%);\n }\n\n .dark-avatar-color {\n background-image: linear-gradient(to top, #135899 0%, #135899 100%);\n }\n}\n.avatar-container {\n @apply flex leading-[100%] font-medium items-center justify-center text-center cursor-default avatar-color dark:dark-avatar-color text-woot-600 dark:text-woot-200;\n}\n</style>\n","<script>\n/**\n * Thumbnail Component\n * Src - source for round image\n * Size - Size of the thumbnail\n * Badge - Chat source indication { fb / telegram }\n * Username - Username for avatar\n */\nimport Avatar from './Avatar.vue';\nimport { removeEmoji } from 'shared/helpers/emoji';\n\nexport default {\n components: {\n Avatar,\n },\n props: {\n src: {\n type: String,\n default: '',\n },\n size: {\n type: String,\n default: '40px',\n },\n badge: {\n type: String,\n default: '',\n },\n username: {\n type: String,\n default: '',\n },\n status: {\n type: String,\n default: '',\n },\n hasBorder: {\n type: Boolean,\n default: false,\n },\n shouldShowStatusAlways: {\n type: Boolean,\n default: false,\n },\n title: {\n type: String,\n default: '',\n },\n variant: {\n type: String,\n default: 'circle',\n },\n },\n data() {\n return {\n hasImageLoaded: false,\n imgError: false,\n };\n },\n computed: {\n userNameWithoutEmoji() {\n return removeEmoji(this.username);\n },\n showStatusIndicator() {\n if (this.shouldShowStatusAlways) return true;\n return this.status === 'online' || this.status === 'busy';\n },\n avatarSize() {\n return Number(this.size.replace(/\\D+/g, ''));\n },\n badgeSrc() {\n return {\n instagram_direct_message: 'instagram-dm',\n facebook: 'messenger',\n 'twitter-tweet': 'twitter-tweet',\n 'twitter-dm': 'twitter-dm',\n whatsapp: 'whatsapp',\n sms: 'sms',\n 'Channel::Line': 'line',\n 'Channel::Telegram': 'telegram',\n 'Channel::WebWidget': '',\n }[this.badge];\n },\n badgeStyle() {\n const size = Math.floor(this.avatarSize / 3);\n const badgeSize = `${size + 2}px`;\n const borderRadius = `${size / 2}px`;\n return { width: badgeSize, height: badgeSize, borderRadius };\n },\n statusStyle() {\n const statusSize = `${this.avatarSize / 4}px`;\n return { width: statusSize, height: statusSize };\n },\n thumbnailClass() {\n const className = this.hasBorder\n ? 'border border-solid border-white dark:border-slate-700/50'\n : '';\n const variant =\n this.variant === 'circle' ? 'thumbnail-rounded' : 'thumbnail-square';\n return `user-thumbnail ${className} ${variant}`;\n },\n thumbnailBoxClass() {\n const boxClass = this.variant === 'circle' ? 'is-rounded' : '';\n return `user-thumbnail-box ${boxClass}`;\n },\n shouldShowImage() {\n if (!this.src) {\n return false;\n }\n if (this.hasImageLoaded) {\n return !this.imgError;\n }\n return false;\n },\n },\n watch: {\n src(value, oldValue) {\n if (value !== oldValue && this.imgError) {\n this.imgError = false;\n }\n },\n },\n methods: {\n onImgError() {\n this.imgError = true;\n },\n onImgLoad() {\n this.hasImageLoaded = true;\n },\n },\n};\n</script>\n\n<template>\n <div\n :class=\"thumbnailBoxClass\"\n :style=\"{ height: size, width: size }\"\n :title=\"title\"\n >\n <!-- Using v-show instead of v-if to avoid flickering as v-if removes dom elements. -->\n <slot>\n <img\n v-show=\"shouldShowImage\"\n :src=\"src\"\n draggable=\"false\"\n :class=\"thumbnailClass\"\n @load=\"onImgLoad\"\n @error=\"onImgError\"\n />\n <Avatar\n v-show=\"!shouldShowImage\"\n :username=\"userNameWithoutEmoji\"\n :class=\"thumbnailClass\"\n :size=\"avatarSize\"\n />\n </slot>\n <img\n v-if=\"badgeSrc\"\n class=\"source-badge z-20\"\n :style=\"badgeStyle\"\n :src=\"`/integrations/channels/badges/${badgeSrc}.png`\"\n alt=\"Badge\"\n />\n <div\n v-if=\"showStatusIndicator\"\n class=\"z-20\"\n :class=\"`source-badge user-online-status user-online-status--${status}`\"\n :style=\"statusStyle\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.user-thumbnail-box {\n flex: 0 0 auto;\n max-width: 100%;\n position: relative;\n\n &.is-rounded {\n border-radius: 50%;\n }\n\n .user-thumbnail {\n border-radius: 50%;\n &.thumbnail-square {\n border-radius: var(--border-radius-large);\n }\n height: 100%;\n width: 100%;\n box-sizing: border-box;\n object-fit: cover;\n vertical-align: initial;\n }\n\n .source-badge {\n border-radius: var(--border-radius-small);\n bottom: var(--space-minus-micro);\n box-shadow: var(--shadow-small);\n height: var(--space-slab);\n padding: var(--space-micro);\n position: absolute;\n right: 0;\n width: var(--space-slab);\n @apply bg-white dark:bg-slate-900;\n }\n\n .user-online-status {\n border-radius: 50%;\n bottom: var(--space-micro);\n\n &:after {\n content: ' ';\n }\n }\n\n .user-online-status--online {\n @apply bg-green-400 dark:bg-green-400;\n }\n\n .user-online-status--busy {\n @apply bg-yellow-500 dark:bg-yellow-500;\n }\n\n .user-online-status--offline {\n @apply bg-slate-500 dark:bg-slate-500;\n }\n}\n</style>\n","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} - the new date with the days added\n * @throws {TypeError} - 2 arguments required\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\n\nexport default function addDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var amount = toInteger(dirtyAmount);\n\n if (isNaN(amount)) {\n return new Date(NaN);\n }\n\n if (!amount) {\n // If 0 days, no-op to avoid changing times in the hour before end of DST\n return date;\n }\n\n date.setDate(date.getDate() + amount);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * const result = [\n * new Date(1995, 6, 2),\n * new Date(1987, 1, 11),\n * new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * // Wed Feb 11 1987 00:00:00,\n * // Mon Jul 10 1989 00:00:00,\n * // Sun Jul 02 1995 00:00:00\n * // ]\n */\n\nexport default function compareAsc(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var diff = dateLeft.getTime() - dateRight.getTime();\n\n if (diff < 0) {\n return -1;\n } else if (diff > 0) {\n return 1; // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff;\n }\n}","import startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day?\n *\n * @description\n * Are the given dates in the same day?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * var result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n */\n\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeftStartOfDay = startOfDay(dirtyDateLeft);\n var dateRightStartOfDay = startOfDay(dirtyDateRight);\n return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * var result = differenceInCalendarMonths(\n * new Date(2014, 8, 1),\n * new Date(2014, 0, 31)\n * )\n * //=> 8\n */\n\nexport default function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear();\n var monthDiff = dateLeft.getMonth() - dateRight.getMonth();\n return yearDiff * 12 + monthDiff;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of milliseconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * var result = differenceInMilliseconds(\n * new Date(2014, 6, 2, 12, 30, 21, 700),\n * new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\n\nexport default function differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getTime() - dateRight.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\n\nexport default function endOfDay(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setHours(23, 59, 59, 999);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\n\nexport default function endOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n date.setFullYear(date.getFullYear(), month + 1, 0);\n date.setHours(23, 59, 59, 999);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport endOfDay from \"../endOfDay/index.js\";\nimport endOfMonth from \"../endOfMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * var result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\n\nexport default function isLastDayOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n return endOfDay(date).getTime() === endOfMonth(date).getTime();\n}","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarMonths from \"../differenceInCalendarMonths/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport isLastDayOfMonth from \"../isLastDayOfMonth/index.js\";\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @description\n * Get the number of full months between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * var result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\n\nexport default function differenceInMonths(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var sign = compareAsc(dateLeft, dateRight);\n var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight));\n var result; // Check for the difference of less than month\n\n if (difference < 1) {\n result = 0;\n } else {\n if (dateLeft.getMonth() === 1 && dateLeft.getDate() > 27) {\n // This will check if the date is end of Feb and assign a higher end of month date\n // to compare it with Jan\n dateLeft.setDate(30);\n }\n\n dateLeft.setMonth(dateLeft.getMonth() - sign * difference); // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full\n // If so, result must be decreased by 1 in absolute value\n\n var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign; // Check for cases of one full calendar month\n\n if (isLastDayOfMonth(toDate(dirtyDateLeft)) && difference === 1 && compareAsc(dirtyDateLeft, dateRight) === 1) {\n isLastMonthNotFull = false;\n }\n\n result = sign * (difference - isLastMonthNotFull);\n } // Prevent negative zero\n\n\n return result === 0 ? 0 : result;\n}","import differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of seconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * var result = differenceInSeconds(\n * new Date(2014, 6, 2, 12, 30, 20, 0),\n * new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\n\nexport default function differenceInSeconds(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / 1000;\n return diff > 0 ? Math.floor(diff) : Math.ceil(diff);\n}","export default function assign(target, dirtyObject) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n\n dirtyObject = dirtyObject || {};\n\n for (var property in dirtyObject) {\n if (dirtyObject.hasOwnProperty(property)) {\n target[property] = dirtyObject[property];\n }\n }\n\n return target;\n}","import assign from \"../assign/index.js\";\nexport default function cloneObject(dirtyObject) {\n return assign({}, dirtyObject);\n}","import compareAsc from \"../compareAsc/index.js\";\nimport differenceInMonths from \"../differenceInMonths/index.js\";\nimport differenceInSeconds from \"../differenceInSeconds/index.js\";\nimport defaultLocale from \"../locale/en-US/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport cloneObject from \"../_lib/cloneObject/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MINUTES_IN_DAY = 1440;\nvar MINUTES_IN_ALMOST_TWO_DAYS = 2520;\nvar MINUTES_IN_MONTH = 43200;\nvar MINUTES_IN_TWO_MONTHS = 86400;\n/**\n * @name formatDistance\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words.\n *\n * | Distance between dates | Result |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs | less than a minute |\n * | 30 secs ... 1 min 30 secs | 1 minute |\n * | 1 min 30 secs ... 44 mins 30 secs | [2..44] minutes |\n * | 44 mins ... 30 secs ... 89 mins 30 secs | about 1 hour |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs | 1 day |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs | [2..30] days |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr | [2..12] months |\n * | 1 yr ... 1 yr 3 months | about 1 year |\n * | 1 yr 3 months ... 1 yr 9 month s | over 1 year |\n * | 1 yr 9 months ... 2 yrs | almost 2 years |\n * | N yrs ... N yrs 3 months | about N years |\n * | N yrs 3 months ... N yrs 9 months | over N years |\n * | N yrs 9 months ... N+1 yrs | almost N+1 years |\n *\n * With `options.includeSeconds == true`:\n * | Distance between dates | Result |\n * |------------------------|----------------------|\n * | 0 secs ... 5 secs | less than 5 seconds |\n * | 5 secs ... 10 secs | less than 10 seconds |\n * | 10 secs ... 20 secs | less than 20 seconds |\n * | 20 secs ... 40 secs | half a minute |\n * | 40 secs ... 60 secs | less than a minute |\n * | 60 secs ... 90 secs | 1 minute |\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `distanceInWords ` to `formatDistance`\n * to make its name consistent with `format` and `formatRelative`.\n *\n * - The order of arguments is swapped to make the function\n * consistent with `differenceIn...` functions.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * distanceInWords(\n * new Date(1986, 3, 4, 10, 32, 0),\n * new Date(1986, 3, 4, 11, 32, 0),\n * { addSuffix: true }\n * ) //=> 'in about 1 hour'\n *\n * // v2.0.0 onward\n *\n * formatDistance(\n * new Date(1986, 3, 4, 11, 32, 0),\n * new Date(1986, 3, 4, 10, 32, 0),\n * { addSuffix: true }\n * ) //=> 'in about 1 hour'\n * ```\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.includeSeconds=false] - distances less than a minute are more detailed\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `baseDate` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * var result = formatDistance(new Date(2014, 6, 2), new Date(2015, 0, 1))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00, including seconds?\n * var result = formatDistance(\n * new Date(2015, 0, 1, 0, 0, 15),\n * new Date(2015, 0, 1, 0, 0, 0),\n * { includeSeconds: true }\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * var result = formatDistance(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n * addSuffix: true\n * })\n * //=> 'about 1 year ago'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = formatDistance(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n * locale: eoLocale\n * })\n * //=> 'pli ol 1 jaro'\n */\n\nexport default function formatDistance(dirtyDate, dirtyBaseDate, dirtyOptions) {\n requiredArgs(2, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale || defaultLocale;\n\n if (!locale.formatDistance) {\n throw new RangeError('locale must contain formatDistance property');\n }\n\n var comparison = compareAsc(dirtyDate, dirtyBaseDate);\n\n if (isNaN(comparison)) {\n throw new RangeError('Invalid time value');\n }\n\n var localizeOptions = cloneObject(options);\n localizeOptions.addSuffix = Boolean(options.addSuffix);\n localizeOptions.comparison = comparison;\n var dateLeft;\n var dateRight;\n\n if (comparison > 0) {\n dateLeft = toDate(dirtyBaseDate);\n dateRight = toDate(dirtyDate);\n } else {\n dateLeft = toDate(dirtyDate);\n dateRight = toDate(dirtyBaseDate);\n }\n\n var seconds = differenceInSeconds(dateRight, dateLeft);\n var offsetInSeconds = (getTimezoneOffsetInMilliseconds(dateRight) - getTimezoneOffsetInMilliseconds(dateLeft)) / 1000;\n var minutes = Math.round((seconds - offsetInSeconds) / 60);\n var months; // 0 up to 2 mins\n\n if (minutes < 2) {\n if (options.includeSeconds) {\n if (seconds < 5) {\n return locale.formatDistance('lessThanXSeconds', 5, localizeOptions);\n } else if (seconds < 10) {\n return locale.formatDistance('lessThanXSeconds', 10, localizeOptions);\n } else if (seconds < 20) {\n return locale.formatDistance('lessThanXSeconds', 20, localizeOptions);\n } else if (seconds < 40) {\n return locale.formatDistance('halfAMinute', null, localizeOptions);\n } else if (seconds < 60) {\n return locale.formatDistance('lessThanXMinutes', 1, localizeOptions);\n } else {\n return locale.formatDistance('xMinutes', 1, localizeOptions);\n }\n } else {\n if (minutes === 0) {\n return locale.formatDistance('lessThanXMinutes', 1, localizeOptions);\n } else {\n return locale.formatDistance('xMinutes', minutes, localizeOptions);\n }\n } // 2 mins up to 0.75 hrs\n\n } else if (minutes < 45) {\n return locale.formatDistance('xMinutes', minutes, localizeOptions); // 0.75 hrs up to 1.5 hrs\n } else if (minutes < 90) {\n return locale.formatDistance('aboutXHours', 1, localizeOptions); // 1.5 hrs up to 24 hrs\n } else if (minutes < MINUTES_IN_DAY) {\n var hours = Math.round(minutes / 60);\n return locale.formatDistance('aboutXHours', hours, localizeOptions); // 1 day up to 1.75 days\n } else if (minutes < MINUTES_IN_ALMOST_TWO_DAYS) {\n return locale.formatDistance('xDays', 1, localizeOptions); // 1.75 days up to 30 days\n } else if (minutes < MINUTES_IN_MONTH) {\n var days = Math.round(minutes / MINUTES_IN_DAY);\n return locale.formatDistance('xDays', days, localizeOptions); // 1 month up to 2 months\n } else if (minutes < MINUTES_IN_TWO_MONTHS) {\n months = Math.round(minutes / MINUTES_IN_MONTH);\n return locale.formatDistance('aboutXMonths', months, localizeOptions);\n }\n\n months = differenceInMonths(dateRight, dateLeft); // 2 months up to 12 months\n\n if (months < 12) {\n var nearestMonth = Math.round(minutes / MINUTES_IN_MONTH);\n return locale.formatDistance('xMonths', nearestMonth, localizeOptions); // 1 year up to max Date\n } else {\n var monthsSinceStartOfYear = months % 12;\n var years = Math.floor(months / 12); // N years up to 1 years 3 months\n\n if (monthsSinceStartOfYear < 3) {\n return locale.formatDistance('aboutXYears', years, localizeOptions); // N years 3 months up to N years 9 months\n } else if (monthsSinceStartOfYear < 9) {\n return locale.formatDistance('overXYears', years, localizeOptions); // N years 9 months up to N year 12 months\n } else {\n return locale.formatDistance('almostXYears', years + 1, localizeOptions);\n }\n }\n}","import distanceInWords from \"../formatDistance/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name formatDistanceToNow\n * @category Common Helpers\n * @summary Return the distance between the given date and now in words.\n * @pure false\n *\n * @description\n * Return the distance between the given date and now in words.\n *\n * | Distance to now | Result |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs | less than a minute |\n * | 30 secs ... 1 min 30 secs | 1 minute |\n * | 1 min 30 secs ... 44 mins 30 secs | [2..44] minutes |\n * | 44 mins ... 30 secs ... 89 mins 30 secs | about 1 hour |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs | 1 day |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs | [2..30] days |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr | [2..12] months |\n * | 1 yr ... 1 yr 3 months | about 1 year |\n * | 1 yr 3 months ... 1 yr 9 month s | over 1 year |\n * | 1 yr 9 months ... 2 yrs | almost 2 years |\n * | N yrs ... N yrs 3 months | about N years |\n * | N yrs 3 months ... N yrs 9 months | over N years |\n * | N yrs 9 months ... N+1 yrs | almost N+1 years |\n *\n * With `options.includeSeconds == true`:\n * | Distance to now | Result |\n * |---------------------|----------------------|\n * | 0 secs ... 5 secs | less than 5 seconds |\n * | 5 secs ... 10 secs | less than 10 seconds |\n * | 10 secs ... 20 secs | less than 20 seconds |\n * | 20 secs ... 40 secs | half a minute |\n * | 40 secs ... 60 secs | less than a minute |\n * | 60 secs ... 90 secs | 1 minute |\n *\n * > âš ï¸ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `distanceInWordsToNow ` to `formatDistanceToNow`\n * to make its name consistent with `format` and `formatRelative`.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * distanceInWordsToNow(new Date(2014, 6, 2), { addSuffix: true })\n * //=> 'in 6 months'\n *\n * // v2.0.0 onward\n *\n * formatDistanceToNow(new Date(2014, 6, 2), { addSuffix: true })\n * //=> 'in 6 months'\n * ```\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - the object with options\n * @param {Boolean} [options.includeSeconds=false] - distances less than a minute are more detailed\n * @param {Boolean} [options.addSuffix=false] - result specifies if now is earlier or later than the passed date\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // If today is 1 January 2015, what is the distance to 2 July 2014?\n * var result = formatDistanceToNow(\n * new Date(2014, 6, 2)\n * )\n * //=> '6 months'\n *\n * @example\n * // If now is 1 January 2015 00:00:00,\n * // what is the distance to 1 January 2015 00:00:15, including seconds?\n * var result = formatDistanceToNow(\n * new Date(2015, 0, 1, 0, 0, 15),\n * {includeSeconds: true}\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 January 2016, with a suffix?\n * var result = formatDistanceToNow(\n * new Date(2016, 0, 1),\n * {addSuffix: true}\n * )\n * //=> 'in about 1 year'\n *\n * @example\n * // If today is 1 January 2015,\n * // what is the distance to 1 August 2016 in Esperanto?\n * var eoLocale = require('date-fns/locale/eo')\n * var result = formatDistanceToNow(\n * new Date(2016, 7, 1),\n * {locale: eoLocale}\n * )\n * //=> 'pli ol 1 jaro'\n */\n\nexport default function formatDistanceToNow(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n return distanceInWords(dirtyDate, Date.now(), dirtyOptions);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * const result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\n\nexport default function getHours(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var hours = date.getHours();\n return hours;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMinutes\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * const result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */\n\nexport default function getMinutes(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var minutes = date.getMinutes();\n return minutes;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getTime\n * @category Timestamp Helpers\n * @summary Get the milliseconds timestamp of the given date.\n *\n * @description\n * Get the milliseconds timestamp of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the timestamp\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05.123:\n * const result = getTime(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 1330515905123\n */\n\nexport default function getTime(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var timestamp = date.getTime();\n return timestamp;\n}","import getTime from \"../getTime/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getUnixTime\n * @category Timestamp Helpers\n * @summary Get the seconds timestamp of the given date.\n *\n * @description\n * Get the seconds timestamp of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the timestamp\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05 CET:\n * const result = getUnixTime(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 1330512305\n */\n\nexport default function getUnixTime(dirtyDate) {\n requiredArgs(1, arguments);\n return Math.floor(getTime(dirtyDate) / 1000);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\n\nexport default function subDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addDays(dirtyDate, -amount);\n}","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCDay(dirtyDate, dirtyDay, dirtyOptions) {\n requiredArgs(2, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = toInteger(dirtyDay);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n requiredArgs(2, arguments);\n var day = toInteger(dirtyDay);\n\n if (day % 7 === 0) {\n day = day - 7;\n }\n\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCISOWeek from \"../getUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var isoWeek = toInteger(dirtyISOWeek);\n var diff = getUTCISOWeek(date) - isoWeek;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\n}","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCWeek from \"../getUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var week = toInteger(dirtyWeek);\n var diff = getUTCWeek(date, options) - week;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\n}","import getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\";\nimport setUTCISODay from \"../../../_lib/setUTCISODay/index.js\";\nimport setUTCISOWeek from \"../../../_lib/setUTCISOWeek/index.js\";\nimport setUTCWeek from \"../../../_lib/setUTCWeek/index.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\";\nvar MILLISECONDS_IN_HOUR = 3600000;\nvar MILLISECONDS_IN_MINUTE = 60000;\nvar MILLISECONDS_IN_SECOND = 1000;\nvar numericPatterns = {\n month: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/,\n // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/,\n // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/,\n // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/,\n // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/,\n // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n minute: /^[0-5]?\\d/,\n // 0 to 59\n second: /^[0-5]?\\d/,\n // 0 to 59\n singleDigit: /^\\d/,\n // 0 to 9\n twoDigits: /^\\d{1,2}/,\n // 0 to 99\n threeDigits: /^\\d{1,3}/,\n // 0 to 999\n fourDigits: /^\\d{1,4}/,\n // 0 to 9999\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/,\n // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/,\n // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/,\n // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n\n};\nvar timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};\n\nfunction parseNumericPattern(pattern, string, valueCallback) {\n var matchResult = string.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n var value = parseInt(matchResult[0], 10);\n return {\n value: valueCallback ? valueCallback(value) : value,\n rest: string.slice(matchResult[0].length)\n };\n}\n\nfunction parseTimezonePattern(pattern, string) {\n var matchResult = string.match(pattern);\n\n if (!matchResult) {\n return null;\n } // Input is 'Z'\n\n\n if (matchResult[0] === 'Z') {\n return {\n value: 0,\n rest: string.slice(1)\n };\n }\n\n var sign = matchResult[1] === '+' ? 1 : -1;\n var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n return {\n value: sign * (hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * MILLISECONDS_IN_SECOND),\n rest: string.slice(matchResult[0].length)\n };\n}\n\nfunction parseAnyDigitsSigned(string, valueCallback) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, string, valueCallback);\n}\n\nfunction parseNDigits(n, string, valueCallback) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, string, valueCallback);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, string, valueCallback);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, string, valueCallback);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, string, valueCallback);\n\n default:\n return parseNumericPattern(new RegExp('^\\\\d{1,' + n + '}'), string, valueCallback);\n }\n}\n\nfunction parseNDigitsSigned(n, string, valueCallback) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, string, valueCallback);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, string, valueCallback);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, string, valueCallback);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, string, valueCallback);\n\n default:\n return parseNumericPattern(new RegExp('^-?\\\\d{1,' + n + '}'), string, valueCallback);\n }\n}\n\nfunction dayPeriodEnumToHours(enumValue) {\n switch (enumValue) {\n case 'morning':\n return 4;\n\n case 'evening':\n return 17;\n\n case 'pm':\n case 'noon':\n case 'afternoon':\n return 12;\n\n case 'am':\n case 'midnight':\n case 'night':\n default:\n return 0;\n }\n}\n\nfunction normalizeTwoDigitYear(twoDigitYear, currentYear) {\n var isCommonEra = currentYear > 0; // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n\n var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n var result;\n\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n var rangeEnd = absCurrentYear + 50;\n var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;\n var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\n\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // User for validation\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O* | Timezone (GMT) |\n * | p | | P | |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n */\n\n\nvar parsers = {\n // Era\n G: {\n priority: 140,\n parse: function (string, token, match, _options) {\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return match.era(string, {\n width: 'abbreviated'\n }) || match.era(string, {\n width: 'narrow'\n });\n // A, B\n\n case 'GGGGG':\n return match.era(string, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return match.era(string, {\n width: 'wide'\n }) || match.era(string, {\n width: 'abbreviated'\n }) || match.era(string, {\n width: 'narrow'\n });\n }\n },\n set: function (date, flags, value, _options) {\n flags.era = value;\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['R', 'u', 't', 'T']\n },\n // Year\n y: {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n priority: 130,\n parse: function (string, token, match, _options) {\n var valueCallback = function (year) {\n return {\n year: year,\n isTwoDigitYear: token === 'yy'\n };\n };\n\n switch (token) {\n case 'y':\n return parseNDigits(4, string, valueCallback);\n\n case 'yo':\n return match.ordinalNumber(string, {\n unit: 'year',\n valueCallback: valueCallback\n });\n\n default:\n return parseNDigits(token.length, string, valueCallback);\n }\n },\n validate: function (_date, value, _options) {\n return value.isTwoDigitYear || value.year > 0;\n },\n set: function (date, flags, value, _options) {\n var currentYear = date.getUTCFullYear();\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']\n },\n // Local week-numbering year\n Y: {\n priority: 130,\n parse: function (string, token, match, _options) {\n var valueCallback = function (year) {\n return {\n year: year,\n isTwoDigitYear: token === 'YY'\n };\n };\n\n switch (token) {\n case 'Y':\n return parseNDigits(4, string, valueCallback);\n\n case 'Yo':\n return match.ordinalNumber(string, {\n unit: 'year',\n valueCallback: valueCallback\n });\n\n default:\n return parseNDigits(token.length, string, valueCallback);\n }\n },\n validate: function (_date, value, _options) {\n return value.isTwoDigitYear || value.year > 0;\n },\n set: function (date, flags, value, options) {\n var currentYear = getUTCWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n },\n incompatibleTokens: ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']\n },\n // ISO week-numbering year\n R: {\n priority: 130,\n parse: function (string, token, _match, _options) {\n if (token === 'R') {\n return parseNDigitsSigned(4, string);\n }\n\n return parseNDigitsSigned(token.length, string);\n },\n set: function (_date, _flags, value, _options) {\n var firstWeekOfYear = new Date(0);\n firstWeekOfYear.setUTCFullYear(value, 0, 4);\n firstWeekOfYear.setUTCHours(0, 0, 0, 0);\n return startOfUTCISOWeek(firstWeekOfYear);\n },\n incompatibleTokens: ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']\n },\n // Extended year\n u: {\n priority: 130,\n parse: function (string, token, _match, _options) {\n if (token === 'u') {\n return parseNDigitsSigned(4, string);\n }\n\n return parseNDigitsSigned(token.length, string);\n },\n set: function (date, _flags, value, _options) {\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']\n },\n // Quarter\n Q: {\n priority: 120,\n parse: function (string, token, match, _options) {\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n case 'QQ':\n // 01, 02, 03, 04\n return parseNDigits(token.length, string);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return match.ordinalNumber(string, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return match.quarter(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return match.quarter(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return match.quarter(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.quarter(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 4;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Stand-alone quarter\n q: {\n priority: 120,\n parse: function (string, token, match, _options) {\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n case 'qq':\n // 01, 02, 03, 04\n return parseNDigits(token.length, string);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return match.ordinalNumber(string, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return match.quarter(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return match.quarter(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return match.quarter(string, {\n width: 'wide',\n context: 'standalone'\n }) || match.quarter(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(string, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 4;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Month\n M: {\n priority: 110,\n parse: function (string, token, match, _options) {\n var valueCallback = function (value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'M':\n return parseNumericPattern(numericPatterns.month, string, valueCallback);\n // 01, 02, ..., 12\n\n case 'MM':\n return parseNDigits(2, string, valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return match.ordinalNumber(string, {\n unit: 'month',\n valueCallback: valueCallback\n });\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return match.month(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return match.month(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return match.month(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.month(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 11;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Stand-alone month\n L: {\n priority: 110,\n parse: function (string, token, match, _options) {\n var valueCallback = function (value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return parseNumericPattern(numericPatterns.month, string, valueCallback);\n // 01, 02, ..., 12\n\n case 'LL':\n return parseNDigits(2, string, valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return match.ordinalNumber(string, {\n unit: 'month',\n valueCallback: valueCallback\n });\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return match.month(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return match.month(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return match.month(string, {\n width: 'wide',\n context: 'standalone'\n }) || match.month(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(string, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 11;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Local week of year\n w: {\n priority: 100,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'w':\n return parseNumericPattern(numericPatterns.week, string);\n\n case 'wo':\n return match.ordinalNumber(string, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 53;\n },\n set: function (date, _flags, value, options) {\n return startOfUTCWeek(setUTCWeek(date, value, options), options);\n },\n incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']\n },\n // ISO week of year\n I: {\n priority: 100,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'I':\n return parseNumericPattern(numericPatterns.week, string);\n\n case 'Io':\n return match.ordinalNumber(string, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 53;\n },\n set: function (date, _flags, value, options) {\n return startOfUTCISOWeek(setUTCISOWeek(date, value, options), options);\n },\n incompatibleTokens: ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']\n },\n // Day of the month\n d: {\n priority: 90,\n subPriority: 1,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'd':\n return parseNumericPattern(numericPatterns.date, string);\n\n case 'do':\n return match.ordinalNumber(string, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (date, value, _options) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n var month = date.getUTCMonth();\n\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n },\n set: function (date, _flags, value, _options) {\n date.setUTCDate(value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Day of year\n D: {\n priority: 90,\n subPriority: 1,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'D':\n case 'DD':\n return parseNumericPattern(numericPatterns.dayOfYear, string);\n\n case 'Do':\n return match.ordinalNumber(string, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (date, value, _options) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMonth(0, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']\n },\n // Day of week\n E: {\n priority: 90,\n parse: function (string, token, match, _options) {\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return match.day(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 6;\n },\n set: function (date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['D', 'i', 'e', 'c', 't', 'T']\n },\n // Local day of week\n e: {\n priority: 90,\n parse: function (string, token, match, options) {\n var valueCallback = function (value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'e':\n case 'ee':\n // 03\n return parseNDigits(token.length, string, valueCallback);\n // 3rd\n\n case 'eo':\n return match.ordinalNumber(string, {\n unit: 'day',\n valueCallback: valueCallback\n });\n // Tue\n\n case 'eee':\n return match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return match.day(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 6;\n },\n set: function (date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']\n },\n // Stand-alone local day of week\n c: {\n priority: 90,\n parse: function (string, token, match, options) {\n var valueCallback = function (value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'c':\n case 'cc':\n // 03\n return parseNDigits(token.length, string, valueCallback);\n // 3rd\n\n case 'co':\n return match.ordinalNumber(string, {\n unit: 'day',\n valueCallback: valueCallback\n });\n // Tue\n\n case 'ccc':\n return match.day(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(string, {\n width: 'short',\n context: 'standalone'\n }) || match.day(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return match.day(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return match.day(string, {\n width: 'short',\n context: 'standalone'\n }) || match.day(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return match.day(string, {\n width: 'wide',\n context: 'standalone'\n }) || match.day(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(string, {\n width: 'short',\n context: 'standalone'\n }) || match.day(string, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 6;\n },\n set: function (date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']\n },\n // ISO day of week\n i: {\n priority: 90,\n parse: function (string, token, match, _options) {\n var valueCallback = function (value) {\n if (value === 0) {\n return 7;\n }\n\n return value;\n };\n\n switch (token) {\n // 2\n case 'i':\n case 'ii':\n // 02\n return parseNDigits(token.length, string);\n // 2nd\n\n case 'io':\n return match.ordinalNumber(string, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return match.day(string, {\n width: 'abbreviated',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n });\n // T\n\n case 'iiiii':\n return match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n });\n // Tu\n\n case 'iiiiii':\n return match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n });\n // Tuesday\n\n case 'iiii':\n default:\n return match.day(string, {\n width: 'wide',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'abbreviated',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 7;\n },\n set: function (date, _flags, value, options) {\n date = setUTCISODay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']\n },\n // AM or PM\n a: {\n priority: 80,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaaa':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return match.dayPeriod(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n set: function (date, _flags, value, _options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['b', 'B', 'H', 'K', 'k', 't', 'T']\n },\n // AM, PM, midnight\n b: {\n priority: 80,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbbb':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return match.dayPeriod(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n set: function (date, _flags, value, _options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['a', 'B', 'H', 'K', 'k', 't', 'T']\n },\n // in the morning, in the afternoon, in the evening, at night\n B: {\n priority: 80,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return match.dayPeriod(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n set: function (date, _flags, value, _options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['a', 'b', 't', 'T']\n },\n // Hour [1-12]\n h: {\n priority: 70,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'h':\n return parseNumericPattern(numericPatterns.hour12h, string);\n\n case 'ho':\n return match.ordinalNumber(string, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 12;\n },\n set: function (date, _flags, value, _options) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setUTCHours(0, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n },\n incompatibleTokens: ['H', 'K', 'k', 't', 'T']\n },\n // Hour [0-23]\n H: {\n priority: 70,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'H':\n return parseNumericPattern(numericPatterns.hour23h, string);\n\n case 'Ho':\n return match.ordinalNumber(string, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 23;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCHours(value, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['a', 'b', 'h', 'K', 'k', 't', 'T']\n },\n // Hour [0-11]\n K: {\n priority: 70,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'K':\n return parseNumericPattern(numericPatterns.hour11h, string);\n\n case 'Ko':\n return match.ordinalNumber(string, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 11;\n },\n set: function (date, _flags, value, _options) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n },\n incompatibleTokens: ['a', 'b', 'h', 'H', 'k', 't', 'T']\n },\n // Hour [1-24]\n k: {\n priority: 70,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'k':\n return parseNumericPattern(numericPatterns.hour24h, string);\n\n case 'ko':\n return match.ordinalNumber(string, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 24;\n },\n set: function (date, _flags, value, _options) {\n var hours = value <= 24 ? value % 24 : value;\n date.setUTCHours(hours, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['a', 'b', 'h', 'H', 'K', 't', 'T']\n },\n // Minute\n m: {\n priority: 60,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'm':\n return parseNumericPattern(numericPatterns.minute, string);\n\n case 'mo':\n return match.ordinalNumber(string, {\n unit: 'minute'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 59;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMinutes(value, 0, 0);\n return date;\n },\n incompatibleTokens: ['t', 'T']\n },\n // Second\n s: {\n priority: 50,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 's':\n return parseNumericPattern(numericPatterns.second, string);\n\n case 'so':\n return match.ordinalNumber(string, {\n unit: 'second'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 59;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCSeconds(value, 0);\n return date;\n },\n incompatibleTokens: ['t', 'T']\n },\n // Fraction of second\n S: {\n priority: 30,\n parse: function (string, token, _match, _options) {\n var valueCallback = function (value) {\n return Math.floor(value * Math.pow(10, -token.length + 3));\n };\n\n return parseNDigits(token.length, string, valueCallback);\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMilliseconds(value);\n return date;\n },\n incompatibleTokens: ['t', 'T']\n },\n // Timezone (ISO-8601. +00:00 is `'Z'`)\n X: {\n priority: 10,\n parse: function (string, token, _match, _options) {\n switch (token) {\n case 'X':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, string);\n\n case 'XX':\n return parseTimezonePattern(timezonePatterns.basic, string);\n\n case 'XXXX':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, string);\n\n case 'XXXXX':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, string);\n\n case 'XXX':\n default:\n return parseTimezonePattern(timezonePatterns.extended, string);\n }\n },\n set: function (date, flags, value, _options) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n },\n incompatibleTokens: ['t', 'T', 'x']\n },\n // Timezone (ISO-8601)\n x: {\n priority: 10,\n parse: function (string, token, _match, _options) {\n switch (token) {\n case 'x':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, string);\n\n case 'xx':\n return parseTimezonePattern(timezonePatterns.basic, string);\n\n case 'xxxx':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, string);\n\n case 'xxxxx':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, string);\n\n case 'xxx':\n default:\n return parseTimezonePattern(timezonePatterns.extended, string);\n }\n },\n set: function (date, flags, value, _options) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n },\n incompatibleTokens: ['t', 'T', 'X']\n },\n // Seconds timestamp\n t: {\n priority: 40,\n parse: function (string, _token, _match, _options) {\n return parseAnyDigitsSigned(string);\n },\n set: function (_date, _flags, value, _options) {\n return [new Date(value * 1000), {\n timestampIsSet: true\n }];\n },\n incompatibleTokens: '*'\n },\n // Milliseconds timestamp\n T: {\n priority: 20,\n parse: function (string, _token, _match, _options) {\n return parseAnyDigitsSigned(string);\n },\n set: function (_date, _flags, value, _options) {\n return [new Date(value), {\n timestampIsSet: true\n }];\n },\n incompatibleTokens: '*'\n }\n};\nexport default parsers;","import defaultLocale from \"../locale/en-US/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport assign from \"../_lib/assign/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport parsers from \"./_lib/parsers/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar TIMEZONE_UNIT_PRIORITY = 10; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > âš ï¸ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | QQ | 01, 02, 03, 04 | |\n * | | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | qq | 01, 02, 03, 04 | |\n * | | | qqq | Q1, Q2, Q3, Q4 | |\n * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | | qqqqq | 1, 2, 3, 4 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\n * | | | MM | 01, 02, ..., 12 | |\n * | | | MMM | Jan, Feb, ..., Dec | |\n * | | | MMMM | January, February, ..., December | 2 |\n * | | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\n * | | | LL | 01, 02, ..., 12 | |\n * | | | LLL | Jan, Feb, ..., Dec | |\n * | | | LLLL | January, February, ..., December | 2 |\n * | | | LLLLL | J, F, ..., D | |\n * | Local week of year | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | | EEEEE | M, T, W, T, F, S, S | |\n * | | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\n * | | | ee | 02, 03, ..., 01 | |\n * | | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | | eeeee | M, T, W, T, F, S, S | |\n * | | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\n * | | | cc | 02, 03, ..., 01 | |\n * | | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | | ccccc | M, T, W, T, F, S, S | |\n * | | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | AM, PM | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |\n * | | | BBBB | at night, in the morning, ... | 2 |\n * | | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 0001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |\n * | | | XX | -0800, +0530, Z | |\n * | | | XXX | -08:00, +05:30, Z | |\n * | | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |\n * | | | xx | -0800, +0530, +0000 | |\n * | | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular.\n * In `format` function, they will produce different result:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Old `parse` was renamed to `toDate`.\n * Now `parse` is a new function which parses a string using a provided format.\n *\n * ```javascript\n * // Before v2.0.0\n * parse('2016-01-01')\n *\n * // v2.0.0 onward (toDate no longer accepts a string)\n * toDate(1392098430000) // Unix to timestamp\n * toDate(new Date(2014, 1, 11, 11, 30, 30)) // Cloning the date\n * parse('2016-01-01', 'yyyy-MM-dd', new Date())\n * ```\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://git.io/fxCyr\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://git.io/fxCyr\n * @returns {Date} the parsed date\n * @throws {TypeError} 3 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.locale` must contain `match` property\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\n\nexport default function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, dirtyOptions) {\n requiredArgs(3, arguments);\n var dateString = String(dirtyDateString);\n var formatString = String(dirtyFormatString);\n var options = dirtyOptions || {};\n var locale = options.locale || defaultLocale;\n\n if (!locale.match) {\n throw new RangeError('locale must contain match property');\n }\n\n var localeFirstWeekContainsDate = locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var localeWeekStartsOn = locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n if (formatString === '') {\n if (dateString === '') {\n return toDate(dirtyReferenceDate);\n } else {\n return new Date(NaN);\n }\n }\n\n var subFnOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale // If timezone isn't specified, it will be set to the system timezone\n\n };\n var setters = [{\n priority: TIMEZONE_UNIT_PRIORITY,\n subPriority: -1,\n set: dateToSystemTimezone,\n index: 0\n }];\n var i;\n var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong, subFnOptions);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp);\n var usedTokens = [];\n\n for (i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (!options.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n if (!options.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n var firstCharacter = token[0];\n var parser = parsers[firstCharacter];\n\n if (parser) {\n var incompatibleTokens = parser.incompatibleTokens;\n\n if (Array.isArray(incompatibleTokens)) {\n var incompatibleToken = void 0;\n\n for (var _i = 0; _i < usedTokens.length; _i++) {\n var usedToken = usedTokens[_i].token;\n\n if (incompatibleTokens.indexOf(usedToken) !== -1 || usedToken === firstCharacter) {\n incompatibleToken = usedTokens[_i];\n break;\n }\n }\n\n if (incompatibleToken) {\n throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(token, \"` at the same time\"));\n }\n } else if (parser.incompatibleTokens === '*' && usedTokens.length) {\n throw new RangeError(\"The format string mustn't contain `\".concat(token, \"` and any other token at the same time\"));\n }\n\n usedTokens.push({\n token: firstCharacter,\n fullToken: token\n });\n var parseResult = parser.parse(dateString, token, locale.match, subFnOptions);\n\n if (!parseResult) {\n return new Date(NaN);\n }\n\n setters.push({\n priority: parser.priority,\n subPriority: parser.subPriority || 0,\n set: parser.set,\n validate: parser.validate,\n value: parseResult.value,\n index: setters.length\n });\n dateString = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n } // Replace two single quote characters with one single quote character\n\n\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n } // Cut token from string, or, if string doesn't match the token, return Invalid Date\n\n\n if (dateString.indexOf(token) === 0) {\n dateString = dateString.slice(token.length);\n } else {\n return new Date(NaN);\n }\n }\n } // Check if the remaining input contains something other than whitespace\n\n\n if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n return new Date(NaN);\n }\n\n var uniquePrioritySetters = setters.map(function (setter) {\n return setter.priority;\n }).sort(function (a, b) {\n return b - a;\n }).filter(function (priority, index, array) {\n return array.indexOf(priority) === index;\n }).map(function (priority) {\n return setters.filter(function (setter) {\n return setter.priority === priority;\n }).sort(function (a, b) {\n return b.subPriority - a.subPriority;\n });\n }).map(function (setterArray) {\n return setterArray[0];\n });\n var date = toDate(dirtyReferenceDate);\n\n if (isNaN(date)) {\n return new Date(NaN);\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/37\n\n\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n var flags = {};\n\n for (i = 0; i < uniquePrioritySetters.length; i++) {\n var setter = uniquePrioritySetters[i];\n\n if (setter.validate && !setter.validate(utcDate, setter.value, subFnOptions)) {\n return new Date(NaN);\n }\n\n var result = setter.set(utcDate, flags, setter.value, subFnOptions); // Result is tuple (date, flags)\n\n if (result[0]) {\n utcDate = result[0];\n assign(flags, result[1]); // Result is date\n } else {\n utcDate = result;\n }\n }\n\n return utcDate;\n}\n\nfunction dateToSystemTimezone(date, flags) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n var convertedDate = new Date(0);\n convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n return convertedDate;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameYear\n * @category Year Helpers\n * @summary Are the given dates in the same year?\n *\n * @description\n * Are the given dates in the same year?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same year\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same year?\n * var result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\n\nexport default function isSameYear(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getFullYear() === dateRight.getFullYear();\n}","import isSameDay from \"../isSameDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isToday\n * @category Day Helpers\n * @summary Is the given date today?\n * @pure false\n *\n * @description\n * Is the given date today?\n *\n * > âš ï¸ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is today\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 6 October 2014, is 6 October 14:00:00 today?\n * var result = isToday(new Date(2014, 9, 6, 14, 0))\n * //=> true\n */\n\nexport default function isToday(dirtyDate) {\n requiredArgs(1, arguments);\n return isSameDay(dirtyDate, Date.now());\n}","import isSameDay from \"../isSameDay/index.js\";\nimport subDays from \"../subDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isYesterday\n * @category Day Helpers\n * @summary Is the given date yesterday?\n * @pure false\n *\n * @description\n * Is the given date yesterday?\n *\n * > âš ï¸ Please note that this function is not present in the FP submodule as\n * > it uses `Date.now()` internally hence impure and can't be safely curried.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is yesterday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // If today is 6 October 2014, is 5 October 14:00:00 yesterday?\n * var result = isYesterday(new Date(2014, 9, 5, 14, 0))\n * //=> true\n */\n\nexport default function isYesterday(dirtyDate) {\n requiredArgs(1, arguments);\n return isSameDay(dirtyDate, subDays(Date.now(), 1));\n}","import { computed, unref } from 'vue';\nimport { getCurrentInstance } from 'vue';\n\nexport const useStore = () => {\n const vm = getCurrentInstance();\n if (!vm) throw new Error('must be called in setup');\n return vm.proxy.$store;\n};\n\nexport const useStoreGetters = () => {\n const store = useStore();\n return Object.fromEntries(\n Object.keys(store.getters).map(getter => [\n getter,\n computed(() => store.getters[getter]),\n ])\n );\n};\n\nexport const useMapGetter = key => {\n const store = useStore();\n return computed(() => store.getters[key]);\n};\n\nexport const useFunctionGetter = (key, ...args) => {\n const store = useStore();\n return computed(() => {\n const unrefedArgs = args.map(arg => unref(arg));\n return store.getters[key](...unrefedArgs);\n });\n};\n","(function(global, factory) {\n typeof exports === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([ \"exports\" ], factory) : factory(global.ActionCable = {});\n})(this, function(exports) {\n \"use strict\";\n var adapters = {\n logger: self.console,\n WebSocket: self.WebSocket\n };\n var logger = {\n log: function log() {\n if (this.enabled) {\n var _adapters$logger;\n for (var _len = arguments.length, messages = Array(_len), _key = 0; _key < _len; _key++) {\n messages[_key] = arguments[_key];\n }\n messages.push(Date.now());\n (_adapters$logger = adapters.logger).log.apply(_adapters$logger, [ \"[ActionCable]\" ].concat(messages));\n }\n }\n };\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function(obj) {\n return typeof obj;\n } : function(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n var classCallCheck = function(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n var createClass = function() {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function(Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n var now = function now() {\n return new Date().getTime();\n };\n var secondsSince = function secondsSince(time) {\n return (now() - time) / 1e3;\n };\n var clamp = function clamp(number, min, max) {\n return Math.max(min, Math.min(max, number));\n };\n var ConnectionMonitor = function() {\n function ConnectionMonitor(connection) {\n classCallCheck(this, ConnectionMonitor);\n this.visibilityDidChange = this.visibilityDidChange.bind(this);\n this.connection = connection;\n this.reconnectAttempts = 0;\n }\n ConnectionMonitor.prototype.start = function start() {\n if (!this.isRunning()) {\n this.startedAt = now();\n delete this.stoppedAt;\n this.startPolling();\n addEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(\"ConnectionMonitor started. pollInterval = \" + this.getPollInterval() + \" ms\");\n }\n };\n ConnectionMonitor.prototype.stop = function stop() {\n if (this.isRunning()) {\n this.stoppedAt = now();\n this.stopPolling();\n removeEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(\"ConnectionMonitor stopped\");\n }\n };\n ConnectionMonitor.prototype.isRunning = function isRunning() {\n return this.startedAt && !this.stoppedAt;\n };\n ConnectionMonitor.prototype.recordPing = function recordPing() {\n this.pingedAt = now();\n };\n ConnectionMonitor.prototype.recordConnect = function recordConnect() {\n this.reconnectAttempts = 0;\n this.recordPing();\n delete this.disconnectedAt;\n logger.log(\"ConnectionMonitor recorded connect\");\n };\n ConnectionMonitor.prototype.recordDisconnect = function recordDisconnect() {\n this.disconnectedAt = now();\n logger.log(\"ConnectionMonitor recorded disconnect\");\n };\n ConnectionMonitor.prototype.startPolling = function startPolling() {\n this.stopPolling();\n this.poll();\n };\n ConnectionMonitor.prototype.stopPolling = function stopPolling() {\n clearTimeout(this.pollTimeout);\n };\n ConnectionMonitor.prototype.poll = function poll() {\n var _this = this;\n this.pollTimeout = setTimeout(function() {\n _this.reconnectIfStale();\n _this.poll();\n }, this.getPollInterval());\n };\n ConnectionMonitor.prototype.getPollInterval = function getPollInterval() {\n var _constructor$pollInte = this.constructor.pollInterval, min = _constructor$pollInte.min, max = _constructor$pollInte.max, multiplier = _constructor$pollInte.multiplier;\n var interval = multiplier * Math.log(this.reconnectAttempts + 1);\n return Math.round(clamp(interval, min, max) * 1e3);\n };\n ConnectionMonitor.prototype.reconnectIfStale = function reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(\"ConnectionMonitor detected stale connection. reconnectAttempts = \" + this.reconnectAttempts + \", pollInterval = \" + this.getPollInterval() + \" ms, time disconnected = \" + secondsSince(this.disconnectedAt) + \" s, stale threshold = \" + this.constructor.staleThreshold + \" s\");\n this.reconnectAttempts++;\n if (this.disconnectedRecently()) {\n logger.log(\"ConnectionMonitor skipping reopening recent disconnect\");\n } else {\n logger.log(\"ConnectionMonitor reopening\");\n this.connection.reopen();\n }\n }\n };\n ConnectionMonitor.prototype.connectionIsStale = function connectionIsStale() {\n return secondsSince(this.pingedAt ? this.pingedAt : this.startedAt) > this.constructor.staleThreshold;\n };\n ConnectionMonitor.prototype.disconnectedRecently = function disconnectedRecently() {\n return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\n };\n ConnectionMonitor.prototype.visibilityDidChange = function visibilityDidChange() {\n var _this2 = this;\n if (document.visibilityState === \"visible\") {\n setTimeout(function() {\n if (_this2.connectionIsStale() || !_this2.connection.isOpen()) {\n logger.log(\"ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = \" + document.visibilityState);\n _this2.connection.reopen();\n }\n }, 200);\n }\n };\n return ConnectionMonitor;\n }();\n ConnectionMonitor.pollInterval = {\n min: 3,\n max: 30,\n multiplier: 5\n };\n ConnectionMonitor.staleThreshold = 6;\n var INTERNAL = {\n message_types: {\n welcome: \"welcome\",\n disconnect: \"disconnect\",\n ping: \"ping\",\n confirmation: \"confirm_subscription\",\n rejection: \"reject_subscription\"\n },\n disconnect_reasons: {\n unauthorized: \"unauthorized\",\n invalid_request: \"invalid_request\",\n server_restart: \"server_restart\"\n },\n default_mount_path: \"/cable\",\n protocols: [ \"actioncable-v1-json\", \"actioncable-unsupported\" ]\n };\n var message_types = INTERNAL.message_types, protocols = INTERNAL.protocols;\n var supportedProtocols = protocols.slice(0, protocols.length - 1);\n var indexOf = [].indexOf;\n var Connection = function() {\n function Connection(consumer) {\n classCallCheck(this, Connection);\n this.open = this.open.bind(this);\n this.consumer = consumer;\n this.subscriptions = this.consumer.subscriptions;\n this.monitor = new ConnectionMonitor(this);\n this.disconnected = true;\n }\n Connection.prototype.send = function send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data));\n return true;\n } else {\n return false;\n }\n };\n Connection.prototype.open = function open() {\n if (this.isActive()) {\n logger.log(\"Attempted to open WebSocket, but existing socket is \" + this.getState());\n return false;\n } else {\n logger.log(\"Opening WebSocket, current state is \" + this.getState() + \", subprotocols: \" + protocols);\n if (this.webSocket) {\n this.uninstallEventHandlers();\n }\n this.webSocket = new adapters.WebSocket(this.consumer.url, protocols);\n this.installEventHandlers();\n this.monitor.start();\n return true;\n }\n };\n Connection.prototype.close = function close() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n allowReconnect: true\n }, allowReconnect = _ref.allowReconnect;\n if (!allowReconnect) {\n this.monitor.stop();\n }\n if (this.isActive()) {\n return this.webSocket.close();\n }\n };\n Connection.prototype.reopen = function reopen() {\n logger.log(\"Reopening WebSocket, current state is \" + this.getState());\n if (this.isActive()) {\n try {\n return this.close();\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error);\n } finally {\n logger.log(\"Reopening WebSocket in \" + this.constructor.reopenDelay + \"ms\");\n setTimeout(this.open, this.constructor.reopenDelay);\n }\n } else {\n return this.open();\n }\n };\n Connection.prototype.getProtocol = function getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol;\n }\n };\n Connection.prototype.isOpen = function isOpen() {\n return this.isState(\"open\");\n };\n Connection.prototype.isActive = function isActive() {\n return this.isState(\"open\", \"connecting\");\n };\n Connection.prototype.isProtocolSupported = function isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;\n };\n Connection.prototype.isState = function isState() {\n for (var _len = arguments.length, states = Array(_len), _key = 0; _key < _len; _key++) {\n states[_key] = arguments[_key];\n }\n return indexOf.call(states, this.getState()) >= 0;\n };\n Connection.prototype.getState = function getState() {\n if (this.webSocket) {\n for (var state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase();\n }\n }\n }\n return null;\n };\n Connection.prototype.installEventHandlers = function installEventHandlers() {\n for (var eventName in this.events) {\n var handler = this.events[eventName].bind(this);\n this.webSocket[\"on\" + eventName] = handler;\n }\n };\n Connection.prototype.uninstallEventHandlers = function uninstallEventHandlers() {\n for (var eventName in this.events) {\n this.webSocket[\"on\" + eventName] = function() {};\n }\n };\n return Connection;\n }();\n Connection.reopenDelay = 500;\n Connection.prototype.events = {\n message: function message(event) {\n if (!this.isProtocolSupported()) {\n return;\n }\n var _JSON$parse = JSON.parse(event.data), identifier = _JSON$parse.identifier, message = _JSON$parse.message, reason = _JSON$parse.reason, reconnect = _JSON$parse.reconnect, type = _JSON$parse.type;\n switch (type) {\n case message_types.welcome:\n this.monitor.recordConnect();\n return this.subscriptions.reload();\n\n case message_types.disconnect:\n logger.log(\"Disconnecting. Reason: \" + reason);\n return this.close({\n allowReconnect: reconnect\n });\n\n case message_types.ping:\n return this.monitor.recordPing();\n\n case message_types.confirmation:\n return this.subscriptions.notify(identifier, \"connected\");\n\n case message_types.rejection:\n return this.subscriptions.reject(identifier);\n\n default:\n return this.subscriptions.notify(identifier, \"received\", message);\n }\n },\n open: function open() {\n logger.log(\"WebSocket onopen event, using '\" + this.getProtocol() + \"' subprotocol\");\n this.disconnected = false;\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\");\n return this.close({\n allowReconnect: false\n });\n }\n },\n close: function close(event) {\n logger.log(\"WebSocket onclose event\");\n if (this.disconnected) {\n return;\n }\n this.disconnected = true;\n this.monitor.recordDisconnect();\n return this.subscriptions.notifyAll(\"disconnected\", {\n willAttemptReconnect: this.monitor.isRunning()\n });\n },\n error: function error() {\n logger.log(\"WebSocket onerror event\");\n }\n };\n var extend = function extend(object, properties) {\n if (properties != null) {\n for (var key in properties) {\n var value = properties[key];\n object[key] = value;\n }\n }\n return object;\n };\n var Subscription = function() {\n function Subscription(consumer) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var mixin = arguments[2];\n classCallCheck(this, Subscription);\n this.consumer = consumer;\n this.identifier = JSON.stringify(params);\n extend(this, mixin);\n }\n Subscription.prototype.perform = function perform(action) {\n var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n data.action = action;\n return this.send(data);\n };\n Subscription.prototype.send = function send(data) {\n return this.consumer.send({\n command: \"message\",\n identifier: this.identifier,\n data: JSON.stringify(data)\n });\n };\n Subscription.prototype.unsubscribe = function unsubscribe() {\n return this.consumer.subscriptions.remove(this);\n };\n return Subscription;\n }();\n var Subscriptions = function() {\n function Subscriptions(consumer) {\n classCallCheck(this, Subscriptions);\n this.consumer = consumer;\n this.subscriptions = [];\n }\n Subscriptions.prototype.create = function create(channelName, mixin) {\n var channel = channelName;\n var params = (typeof channel === \"undefined\" ? \"undefined\" : _typeof(channel)) === \"object\" ? channel : {\n channel: channel\n };\n var subscription = new Subscription(this.consumer, params, mixin);\n return this.add(subscription);\n };\n Subscriptions.prototype.add = function add(subscription) {\n this.subscriptions.push(subscription);\n this.consumer.ensureActiveConnection();\n this.notify(subscription, \"initialized\");\n this.sendCommand(subscription, \"subscribe\");\n return subscription;\n };\n Subscriptions.prototype.remove = function remove(subscription) {\n this.forget(subscription);\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\");\n }\n return subscription;\n };\n Subscriptions.prototype.reject = function reject(identifier) {\n var _this = this;\n return this.findAll(identifier).map(function(subscription) {\n _this.forget(subscription);\n _this.notify(subscription, \"rejected\");\n return subscription;\n });\n };\n Subscriptions.prototype.forget = function forget(subscription) {\n this.subscriptions = this.subscriptions.filter(function(s) {\n return s !== subscription;\n });\n return subscription;\n };\n Subscriptions.prototype.findAll = function findAll(identifier) {\n return this.subscriptions.filter(function(s) {\n return s.identifier === identifier;\n });\n };\n Subscriptions.prototype.reload = function reload() {\n var _this2 = this;\n return this.subscriptions.map(function(subscription) {\n return _this2.sendCommand(subscription, \"subscribe\");\n });\n };\n Subscriptions.prototype.notifyAll = function notifyAll(callbackName) {\n var _this3 = this;\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return this.subscriptions.map(function(subscription) {\n return _this3.notify.apply(_this3, [ subscription, callbackName ].concat(args));\n });\n };\n Subscriptions.prototype.notify = function notify(subscription, callbackName) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n var subscriptions = void 0;\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription);\n } else {\n subscriptions = [ subscription ];\n }\n return subscriptions.map(function(subscription) {\n return typeof subscription[callbackName] === \"function\" ? subscription[callbackName].apply(subscription, args) : undefined;\n });\n };\n Subscriptions.prototype.sendCommand = function sendCommand(subscription, command) {\n var identifier = subscription.identifier;\n return this.consumer.send({\n command: command,\n identifier: identifier\n });\n };\n return Subscriptions;\n }();\n var Consumer = function() {\n function Consumer(url) {\n classCallCheck(this, Consumer);\n this._url = url;\n this.subscriptions = new Subscriptions(this);\n this.connection = new Connection(this);\n }\n Consumer.prototype.send = function send(data) {\n return this.connection.send(data);\n };\n Consumer.prototype.connect = function connect() {\n return this.connection.open();\n };\n Consumer.prototype.disconnect = function disconnect() {\n return this.connection.close({\n allowReconnect: false\n });\n };\n Consumer.prototype.ensureActiveConnection = function ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open();\n }\n };\n createClass(Consumer, [ {\n key: \"url\",\n get: function get$$1() {\n return createWebSocketURL(this._url);\n }\n } ]);\n return Consumer;\n }();\n function createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url();\n }\n if (url && !/^wss?:/i.test(url)) {\n var a = document.createElement(\"a\");\n a.href = url;\n a.href = a.href;\n a.protocol = a.protocol.replace(\"http\", \"ws\");\n return a.href;\n } else {\n return url;\n }\n }\n function createConsumer() {\n var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getConfig(\"url\") || INTERNAL.default_mount_path;\n return new Consumer(url);\n }\n function getConfig(name) {\n var element = document.head.querySelector(\"meta[name='action-cable-\" + name + \"']\");\n if (element) {\n return element.getAttribute(\"content\");\n }\n }\n exports.Connection = Connection;\n exports.ConnectionMonitor = ConnectionMonitor;\n exports.Consumer = Consumer;\n exports.INTERNAL = INTERNAL;\n exports.Subscription = Subscription;\n exports.Subscriptions = Subscriptions;\n exports.adapters = adapters;\n exports.createWebSocketURL = createWebSocketURL;\n exports.logger = logger;\n exports.createConsumer = createConsumer;\n exports.getConfig = getConfig;\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n});\n","import { createConsumer } from '@rails/actioncable';\n\nconst PRESENCE_INTERVAL = 20000;\nconst RECONNECT_INTERVAL = 1000;\n\nclass BaseActionCableConnector {\n static isDisconnected = false;\n\n constructor(app, pubsubToken, websocketHost = '') {\n const websocketURL = websocketHost ? `${websocketHost}/cable` : undefined;\n\n this.consumer = createConsumer(websocketURL);\n this.subscription = this.consumer.subscriptions.create(\n {\n channel: 'RoomChannel',\n pubsub_token: pubsubToken,\n account_id: app.$store.getters.getCurrentAccountId,\n user_id: app.$store.getters.getCurrentUserID,\n },\n {\n updatePresence() {\n this.perform('update_presence');\n },\n received: this.onReceived,\n disconnected: () => {\n BaseActionCableConnector.isDisconnected = true;\n this.onDisconnected();\n this.initReconnectTimer();\n },\n }\n );\n this.app = app;\n this.events = {};\n this.reconnectTimer = null;\n this.isAValidEvent = () => true;\n this.triggerPresenceInterval = () => {\n setTimeout(() => {\n this.subscription.updatePresence();\n this.triggerPresenceInterval();\n }, PRESENCE_INTERVAL);\n };\n this.triggerPresenceInterval();\n }\n\n checkConnection() {\n const isConnectionActive = this.consumer.connection.isOpen();\n const isReconnected =\n BaseActionCableConnector.isDisconnected && isConnectionActive;\n if (isReconnected) {\n this.clearReconnectTimer();\n this.onReconnect();\n BaseActionCableConnector.isDisconnected = false;\n } else {\n this.initReconnectTimer();\n }\n }\n\n clearReconnectTimer = () => {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n };\n\n initReconnectTimer = () => {\n this.clearReconnectTimer();\n this.reconnectTimer = setTimeout(() => {\n this.checkConnection();\n }, RECONNECT_INTERVAL);\n };\n\n // eslint-disable-next-line class-methods-use-this\n onReconnect = () => {};\n\n // eslint-disable-next-line class-methods-use-this\n onDisconnected = () => {};\n\n disconnect() {\n this.consumer.disconnect();\n }\n\n onReceived = ({ event, data } = {}) => {\n if (this.isAValidEvent(data)) {\n if (this.events[event] && typeof this.events[event] === 'function') {\n this.events[event](data);\n }\n }\n };\n}\n\nexport default BaseActionCableConnector;\n","var GOOD_LEAF_SIZE = 200;\n\n// :: class<T> A rope sequence is a persistent sequence data structure\n// that supports appending, prepending, and slicing without doing a\n// full copy. It is represented as a mostly-balanced tree.\nvar RopeSequence = function RopeSequence () {};\n\nRopeSequence.prototype.append = function append (other) {\n if (!other.length) { return this }\n other = RopeSequence.from(other);\n\n return (!this.length && other) ||\n (other.length < GOOD_LEAF_SIZE && this.leafAppend(other)) ||\n (this.length < GOOD_LEAF_SIZE && other.leafPrepend(this)) ||\n this.appendInner(other)\n};\n\n// :: (union<[T], RopeSequence<T>>) → RopeSequence<T>\n// Prepend an array or other rope to this one, returning a new rope.\nRopeSequence.prototype.prepend = function prepend (other) {\n if (!other.length) { return this }\n return RopeSequence.from(other).append(this)\n};\n\nRopeSequence.prototype.appendInner = function appendInner (other) {\n return new Append(this, other)\n};\n\n// :: (?number, ?number) → RopeSequence<T>\n// Create a rope repesenting a sub-sequence of this rope.\nRopeSequence.prototype.slice = function slice (from, to) {\n if ( from === void 0 ) from = 0;\n if ( to === void 0 ) to = this.length;\n\n if (from >= to) { return RopeSequence.empty }\n return this.sliceInner(Math.max(0, from), Math.min(this.length, to))\n};\n\n// :: (number) → T\n// Retrieve the element at the given position from this rope.\nRopeSequence.prototype.get = function get (i) {\n if (i < 0 || i >= this.length) { return undefined }\n return this.getInner(i)\n};\n\n// :: ((element: T, index: number) → ?bool, ?number, ?number)\n// Call the given function for each element between the given\n// indices. This tends to be more efficient than looping over the\n// indices and calling `get`, because it doesn't have to descend the\n// tree for every element.\nRopeSequence.prototype.forEach = function forEach (f, from, to) {\n if ( from === void 0 ) from = 0;\n if ( to === void 0 ) to = this.length;\n\n if (from <= to)\n { this.forEachInner(f, from, to, 0); }\n else\n { this.forEachInvertedInner(f, from, to, 0); }\n};\n\n// :: ((element: T, index: number) → U, ?number, ?number) → [U]\n// Map the given functions over the elements of the rope, producing\n// a flat array.\nRopeSequence.prototype.map = function map (f, from, to) {\n if ( from === void 0 ) from = 0;\n if ( to === void 0 ) to = this.length;\n\n var result = [];\n this.forEach(function (elt, i) { return result.push(f(elt, i)); }, from, to);\n return result\n};\n\n// :: (?union<[T], RopeSequence<T>>) → RopeSequence<T>\n// Create a rope representing the given array, or return the rope\n// itself if a rope was given.\nRopeSequence.from = function from (values) {\n if (values instanceof RopeSequence) { return values }\n return values && values.length ? new Leaf(values) : RopeSequence.empty\n};\n\nvar Leaf = /*@__PURE__*/(function (RopeSequence) {\n function Leaf(values) {\n RopeSequence.call(this);\n this.values = values;\n }\n\n if ( RopeSequence ) Leaf.__proto__ = RopeSequence;\n Leaf.prototype = Object.create( RopeSequence && RopeSequence.prototype );\n Leaf.prototype.constructor = Leaf;\n\n var prototypeAccessors = { length: { configurable: true },depth: { configurable: true } };\n\n Leaf.prototype.flatten = function flatten () {\n return this.values\n };\n\n Leaf.prototype.sliceInner = function sliceInner (from, to) {\n if (from == 0 && to == this.length) { return this }\n return new Leaf(this.values.slice(from, to))\n };\n\n Leaf.prototype.getInner = function getInner (i) {\n return this.values[i]\n };\n\n Leaf.prototype.forEachInner = function forEachInner (f, from, to, start) {\n for (var i = from; i < to; i++)\n { if (f(this.values[i], start + i) === false) { return false } }\n };\n\n Leaf.prototype.forEachInvertedInner = function forEachInvertedInner (f, from, to, start) {\n for (var i = from - 1; i >= to; i--)\n { if (f(this.values[i], start + i) === false) { return false } }\n };\n\n Leaf.prototype.leafAppend = function leafAppend (other) {\n if (this.length + other.length <= GOOD_LEAF_SIZE)\n { return new Leaf(this.values.concat(other.flatten())) }\n };\n\n Leaf.prototype.leafPrepend = function leafPrepend (other) {\n if (this.length + other.length <= GOOD_LEAF_SIZE)\n { return new Leaf(other.flatten().concat(this.values)) }\n };\n\n prototypeAccessors.length.get = function () { return this.values.length };\n\n prototypeAccessors.depth.get = function () { return 0 };\n\n Object.defineProperties( Leaf.prototype, prototypeAccessors );\n\n return Leaf;\n}(RopeSequence));\n\n// :: RopeSequence\n// The empty rope sequence.\nRopeSequence.empty = new Leaf([]);\n\nvar Append = /*@__PURE__*/(function (RopeSequence) {\n function Append(left, right) {\n RopeSequence.call(this);\n this.left = left;\n this.right = right;\n this.length = left.length + right.length;\n this.depth = Math.max(left.depth, right.depth) + 1;\n }\n\n if ( RopeSequence ) Append.__proto__ = RopeSequence;\n Append.prototype = Object.create( RopeSequence && RopeSequence.prototype );\n Append.prototype.constructor = Append;\n\n Append.prototype.flatten = function flatten () {\n return this.left.flatten().concat(this.right.flatten())\n };\n\n Append.prototype.getInner = function getInner (i) {\n return i < this.left.length ? this.left.get(i) : this.right.get(i - this.left.length)\n };\n\n Append.prototype.forEachInner = function forEachInner (f, from, to, start) {\n var leftLen = this.left.length;\n if (from < leftLen &&\n this.left.forEachInner(f, from, Math.min(to, leftLen), start) === false)\n { return false }\n if (to > leftLen &&\n this.right.forEachInner(f, Math.max(from - leftLen, 0), Math.min(this.length, to) - leftLen, start + leftLen) === false)\n { return false }\n };\n\n Append.prototype.forEachInvertedInner = function forEachInvertedInner (f, from, to, start) {\n var leftLen = this.left.length;\n if (from > leftLen &&\n this.right.forEachInvertedInner(f, from - leftLen, Math.max(to, leftLen) - leftLen, start + leftLen) === false)\n { return false }\n if (to < leftLen &&\n this.left.forEachInvertedInner(f, Math.min(from, leftLen), to, start) === false)\n { return false }\n };\n\n Append.prototype.sliceInner = function sliceInner (from, to) {\n if (from == 0 && to == this.length) { return this }\n var leftLen = this.left.length;\n if (to <= leftLen) { return this.left.slice(from, to) }\n if (from >= leftLen) { return this.right.slice(from - leftLen, to - leftLen) }\n return this.left.slice(from, leftLen).append(this.right.slice(0, to - leftLen))\n };\n\n Append.prototype.leafAppend = function leafAppend (other) {\n var inner = this.right.leafAppend(other);\n if (inner) { return new Append(this.left, inner) }\n };\n\n Append.prototype.leafPrepend = function leafPrepend (other) {\n var inner = this.left.leafPrepend(other);\n if (inner) { return new Append(inner, this.right) }\n };\n\n Append.prototype.appendInner = function appendInner (other) {\n if (this.left.depth >= Math.max(this.right.depth, other.depth) + 1)\n { return new Append(this.left, new Append(this.right, other)) }\n return new Append(this, other)\n };\n\n return Append;\n}(RopeSequence));\n\nvar ropeSequence = RopeSequence;\n\nexport default ropeSequence;\n","// ::- Persistent data structure representing an ordered mapping from\n// strings to values, with some convenient update methods.\nfunction OrderedMap(content) {\n this.content = content;\n}\n\nOrderedMap.prototype = {\n constructor: OrderedMap,\n\n find: function(key) {\n for (var i = 0; i < this.content.length; i += 2)\n if (this.content[i] === key) return i\n return -1\n },\n\n // :: (string) → ?any\n // Retrieve the value stored under `key`, or return undefined when\n // no such key exists.\n get: function(key) {\n var found = this.find(key);\n return found == -1 ? undefined : this.content[found + 1]\n },\n\n // :: (string, any, ?string) → OrderedMap\n // Create a new map by replacing the value of `key` with a new\n // value, or adding a binding to the end of the map. If `newKey` is\n // given, the key of the binding will be replaced with that key.\n update: function(key, value, newKey) {\n var self = newKey && newKey != key ? this.remove(newKey) : this;\n var found = self.find(key), content = self.content.slice();\n if (found == -1) {\n content.push(newKey || key, value);\n } else {\n content[found + 1] = value;\n if (newKey) content[found] = newKey;\n }\n return new OrderedMap(content)\n },\n\n // :: (string) → OrderedMap\n // Return a map with the given key removed, if it existed.\n remove: function(key) {\n var found = this.find(key);\n if (found == -1) return this\n var content = this.content.slice();\n content.splice(found, 2);\n return new OrderedMap(content)\n },\n\n // :: (string, any) → OrderedMap\n // Add a new key to the start of the map.\n addToStart: function(key, value) {\n return new OrderedMap([key, value].concat(this.remove(key).content))\n },\n\n // :: (string, any) → OrderedMap\n // Add a new key to the end of the map.\n addToEnd: function(key, value) {\n var content = this.remove(key).content.slice();\n content.push(key, value);\n return new OrderedMap(content)\n },\n\n // :: (string, string, any) → OrderedMap\n // Add a key after the given key. If `place` is not found, the new\n // key is added to the end.\n addBefore: function(place, key, value) {\n var without = this.remove(key), content = without.content.slice();\n var found = without.find(place);\n content.splice(found == -1 ? content.length : found, 0, key, value);\n return new OrderedMap(content)\n },\n\n // :: ((key: string, value: any))\n // Call the given function for each key/value pair in the map, in\n // order.\n forEach: function(f) {\n for (var i = 0; i < this.content.length; i += 2)\n f(this.content[i], this.content[i + 1]);\n },\n\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a new map by prepending the keys in this map that don't\n // appear in `map` before the keys in `map`.\n prepend: function(map) {\n map = OrderedMap.from(map);\n if (!map.size) return this\n return new OrderedMap(map.content.concat(this.subtract(map).content))\n },\n\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a new map by appending the keys in this map that don't\n // appear in `map` after the keys in `map`.\n append: function(map) {\n map = OrderedMap.from(map);\n if (!map.size) return this\n return new OrderedMap(this.subtract(map).content.concat(map.content))\n },\n\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a map containing all the keys in this map that don't\n // appear in `map`.\n subtract: function(map) {\n var result = this;\n map = OrderedMap.from(map);\n for (var i = 0; i < map.content.length; i += 2)\n result = result.remove(map.content[i]);\n return result\n },\n\n // :: () → Object\n // Turn ordered map into a plain object.\n toObject: function() {\n var result = {};\n this.forEach(function(key, value) { result[key] = value; });\n return result\n },\n\n // :: number\n // The amount of keys in this map.\n get size() {\n return this.content.length >> 1\n }\n};\n\n// :: (?union<Object, OrderedMap>) → OrderedMap\n// Return a map with the given content. If null, create an empty\n// map. If given an ordered map, return that map itself. If given an\n// object, create a map from the object's properties.\nOrderedMap.from = function(value) {\n if (value instanceof OrderedMap) return value\n var content = [];\n if (value) for (var prop in value) content.push(prop, value[prop]);\n return new OrderedMap(content)\n};\n\nexport default OrderedMap;\n","import OrderedMap from 'orderedmap';\n\nfunction findDiffStart(a, b, pos) {\n for (let i = 0;; i++) {\n if (i == a.childCount || i == b.childCount)\n return a.childCount == b.childCount ? null : pos;\n let childA = a.child(i), childB = b.child(i);\n if (childA == childB) {\n pos += childA.nodeSize;\n continue;\n }\n if (!childA.sameMarkup(childB))\n return pos;\n if (childA.isText && childA.text != childB.text) {\n for (let j = 0; childA.text[j] == childB.text[j]; j++)\n pos++;\n return pos;\n }\n if (childA.content.size || childB.content.size) {\n let inner = findDiffStart(childA.content, childB.content, pos + 1);\n if (inner != null)\n return inner;\n }\n pos += childA.nodeSize;\n }\n}\nfunction findDiffEnd(a, b, posA, posB) {\n for (let iA = a.childCount, iB = b.childCount;;) {\n if (iA == 0 || iB == 0)\n return iA == iB ? null : { a: posA, b: posB };\n let childA = a.child(--iA), childB = b.child(--iB), size = childA.nodeSize;\n if (childA == childB) {\n posA -= size;\n posB -= size;\n continue;\n }\n if (!childA.sameMarkup(childB))\n return { a: posA, b: posB };\n if (childA.isText && childA.text != childB.text) {\n let same = 0, minSize = Math.min(childA.text.length, childB.text.length);\n while (same < minSize && childA.text[childA.text.length - same - 1] == childB.text[childB.text.length - same - 1]) {\n same++;\n posA--;\n posB--;\n }\n return { a: posA, b: posB };\n }\n if (childA.content.size || childB.content.size) {\n let inner = findDiffEnd(childA.content, childB.content, posA - 1, posB - 1);\n if (inner)\n return inner;\n }\n posA -= size;\n posB -= size;\n }\n}\n\n/**\nA fragment represents a node's collection of child nodes.\n\nLike nodes, fragments are persistent data structures, and you\nshould not mutate them or their content. Rather, you create new\ninstances whenever needed. The API tries to make this easy.\n*/\nclass Fragment {\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n content, size) {\n this.content = content;\n this.size = size || 0;\n if (size == null)\n for (let i = 0; i < content.length; i++)\n this.size += content[i].nodeSize;\n }\n /**\n Invoke a callback for all descendant nodes between the given two\n positions (relative to start of this fragment). Doesn't descend\n into a node when the callback returns `false`.\n */\n nodesBetween(from, to, f, nodeStart = 0, parent) {\n for (let i = 0, pos = 0; pos < to; i++) {\n let child = this.content[i], end = pos + child.nodeSize;\n if (end > from && f(child, nodeStart + pos, parent || null, i) !== false && child.content.size) {\n let start = pos + 1;\n child.nodesBetween(Math.max(0, from - start), Math.min(child.content.size, to - start), f, nodeStart + start);\n }\n pos = end;\n }\n }\n /**\n Call the given callback for every descendant node. `pos` will be\n relative to the start of the fragment. The callback may return\n `false` to prevent traversal of a given node's children.\n */\n descendants(f) {\n this.nodesBetween(0, this.size, f);\n }\n /**\n Extract the text between `from` and `to`. See the same method on\n [`Node`](https://prosemirror.net/docs/ref/#model.Node.textBetween).\n */\n textBetween(from, to, blockSeparator, leafText) {\n let text = \"\", first = true;\n this.nodesBetween(from, to, (node, pos) => {\n let nodeText = node.isText ? node.text.slice(Math.max(from, pos) - pos, to - pos)\n : !node.isLeaf ? \"\"\n : leafText ? (typeof leafText === \"function\" ? leafText(node) : leafText)\n : node.type.spec.leafText ? node.type.spec.leafText(node)\n : \"\";\n if (node.isBlock && (node.isLeaf && nodeText || node.isTextblock) && blockSeparator) {\n if (first)\n first = false;\n else\n text += blockSeparator;\n }\n text += nodeText;\n }, 0);\n return text;\n }\n /**\n Create a new fragment containing the combined content of this\n fragment and the other.\n */\n append(other) {\n if (!other.size)\n return this;\n if (!this.size)\n return other;\n let last = this.lastChild, first = other.firstChild, content = this.content.slice(), i = 0;\n if (last.isText && last.sameMarkup(first)) {\n content[content.length - 1] = last.withText(last.text + first.text);\n i = 1;\n }\n for (; i < other.content.length; i++)\n content.push(other.content[i]);\n return new Fragment(content, this.size + other.size);\n }\n /**\n Cut out the sub-fragment between the two given positions.\n */\n cut(from, to = this.size) {\n if (from == 0 && to == this.size)\n return this;\n let result = [], size = 0;\n if (to > from)\n for (let i = 0, pos = 0; pos < to; i++) {\n let child = this.content[i], end = pos + child.nodeSize;\n if (end > from) {\n if (pos < from || end > to) {\n if (child.isText)\n child = child.cut(Math.max(0, from - pos), Math.min(child.text.length, to - pos));\n else\n child = child.cut(Math.max(0, from - pos - 1), Math.min(child.content.size, to - pos - 1));\n }\n result.push(child);\n size += child.nodeSize;\n }\n pos = end;\n }\n return new Fragment(result, size);\n }\n /**\n @internal\n */\n cutByIndex(from, to) {\n if (from == to)\n return Fragment.empty;\n if (from == 0 && to == this.content.length)\n return this;\n return new Fragment(this.content.slice(from, to));\n }\n /**\n Create a new fragment in which the node at the given index is\n replaced by the given node.\n */\n replaceChild(index, node) {\n let current = this.content[index];\n if (current == node)\n return this;\n let copy = this.content.slice();\n let size = this.size + node.nodeSize - current.nodeSize;\n copy[index] = node;\n return new Fragment(copy, size);\n }\n /**\n Create a new fragment by prepending the given node to this\n fragment.\n */\n addToStart(node) {\n return new Fragment([node].concat(this.content), this.size + node.nodeSize);\n }\n /**\n Create a new fragment by appending the given node to this\n fragment.\n */\n addToEnd(node) {\n return new Fragment(this.content.concat(node), this.size + node.nodeSize);\n }\n /**\n Compare this fragment to another one.\n */\n eq(other) {\n if (this.content.length != other.content.length)\n return false;\n for (let i = 0; i < this.content.length; i++)\n if (!this.content[i].eq(other.content[i]))\n return false;\n return true;\n }\n /**\n The first child of the fragment, or `null` if it is empty.\n */\n get firstChild() { return this.content.length ? this.content[0] : null; }\n /**\n The last child of the fragment, or `null` if it is empty.\n */\n get lastChild() { return this.content.length ? this.content[this.content.length - 1] : null; }\n /**\n The number of child nodes in this fragment.\n */\n get childCount() { return this.content.length; }\n /**\n Get the child node at the given index. Raise an error when the\n index is out of range.\n */\n child(index) {\n let found = this.content[index];\n if (!found)\n throw new RangeError(\"Index \" + index + \" out of range for \" + this);\n return found;\n }\n /**\n Get the child node at the given index, if it exists.\n */\n maybeChild(index) {\n return this.content[index] || null;\n }\n /**\n Call `f` for every child node, passing the node, its offset\n into this parent node, and its index.\n */\n forEach(f) {\n for (let i = 0, p = 0; i < this.content.length; i++) {\n let child = this.content[i];\n f(child, p, i);\n p += child.nodeSize;\n }\n }\n /**\n Find the first position at which this fragment and another\n fragment differ, or `null` if they are the same.\n */\n findDiffStart(other, pos = 0) {\n return findDiffStart(this, other, pos);\n }\n /**\n Find the first position, searching from the end, at which this\n fragment and the given fragment differ, or `null` if they are\n the same. Since this position will not be the same in both\n nodes, an object with two separate positions is returned.\n */\n findDiffEnd(other, pos = this.size, otherPos = other.size) {\n return findDiffEnd(this, other, pos, otherPos);\n }\n /**\n Find the index and inner offset corresponding to a given relative\n position in this fragment. The result object will be reused\n (overwritten) the next time the function is called. @internal\n */\n findIndex(pos, round = -1) {\n if (pos == 0)\n return retIndex(0, pos);\n if (pos == this.size)\n return retIndex(this.content.length, pos);\n if (pos > this.size || pos < 0)\n throw new RangeError(`Position ${pos} outside of fragment (${this})`);\n for (let i = 0, curPos = 0;; i++) {\n let cur = this.child(i), end = curPos + cur.nodeSize;\n if (end >= pos) {\n if (end == pos || round > 0)\n return retIndex(i + 1, end);\n return retIndex(i, curPos);\n }\n curPos = end;\n }\n }\n /**\n Return a debugging string that describes this fragment.\n */\n toString() { return \"<\" + this.toStringInner() + \">\"; }\n /**\n @internal\n */\n toStringInner() { return this.content.join(\", \"); }\n /**\n Create a JSON-serializeable representation of this fragment.\n */\n toJSON() {\n return this.content.length ? this.content.map(n => n.toJSON()) : null;\n }\n /**\n Deserialize a fragment from its JSON representation.\n */\n static fromJSON(schema, value) {\n if (!value)\n return Fragment.empty;\n if (!Array.isArray(value))\n throw new RangeError(\"Invalid input for Fragment.fromJSON\");\n return new Fragment(value.map(schema.nodeFromJSON));\n }\n /**\n Build a fragment from an array of nodes. Ensures that adjacent\n text nodes with the same marks are joined together.\n */\n static fromArray(array) {\n if (!array.length)\n return Fragment.empty;\n let joined, size = 0;\n for (let i = 0; i < array.length; i++) {\n let node = array[i];\n size += node.nodeSize;\n if (i && node.isText && array[i - 1].sameMarkup(node)) {\n if (!joined)\n joined = array.slice(0, i);\n joined[joined.length - 1] = node\n .withText(joined[joined.length - 1].text + node.text);\n }\n else if (joined) {\n joined.push(node);\n }\n }\n return new Fragment(joined || array, size);\n }\n /**\n Create a fragment from something that can be interpreted as a\n set of nodes. For `null`, it returns the empty fragment. For a\n fragment, the fragment itself. For a node or array of nodes, a\n fragment containing those nodes.\n */\n static from(nodes) {\n if (!nodes)\n return Fragment.empty;\n if (nodes instanceof Fragment)\n return nodes;\n if (Array.isArray(nodes))\n return this.fromArray(nodes);\n if (nodes.attrs)\n return new Fragment([nodes], nodes.nodeSize);\n throw new RangeError(\"Can not convert \" + nodes + \" to a Fragment\" +\n (nodes.nodesBetween ? \" (looks like multiple versions of prosemirror-model were loaded)\" : \"\"));\n }\n}\n/**\nAn empty fragment. Intended to be reused whenever a node doesn't\ncontain anything (rather than allocating a new empty fragment for\neach leaf node).\n*/\nFragment.empty = new Fragment([], 0);\nconst found = { index: 0, offset: 0 };\nfunction retIndex(index, offset) {\n found.index = index;\n found.offset = offset;\n return found;\n}\n\nfunction compareDeep(a, b) {\n if (a === b)\n return true;\n if (!(a && typeof a == \"object\") ||\n !(b && typeof b == \"object\"))\n return false;\n let array = Array.isArray(a);\n if (Array.isArray(b) != array)\n return false;\n if (array) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!compareDeep(a[i], b[i]))\n return false;\n }\n else {\n for (let p in a)\n if (!(p in b) || !compareDeep(a[p], b[p]))\n return false;\n for (let p in b)\n if (!(p in a))\n return false;\n }\n return true;\n}\n\n/**\nA mark is a piece of information that can be attached to a node,\nsuch as it being emphasized, in code font, or a link. It has a\ntype and optionally a set of attributes that provide further\ninformation (such as the target of the link). Marks are created\nthrough a `Schema`, which controls which types exist and which\nattributes they have.\n*/\nclass Mark {\n /**\n @internal\n */\n constructor(\n /**\n The type of this mark.\n */\n type, \n /**\n The attributes associated with this mark.\n */\n attrs) {\n this.type = type;\n this.attrs = attrs;\n }\n /**\n Given a set of marks, create a new set which contains this one as\n well, in the right position. If this mark is already in the set,\n the set itself is returned. If any marks that are set to be\n [exclusive](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) with this mark are present,\n those are replaced by this one.\n */\n addToSet(set) {\n let copy, placed = false;\n for (let i = 0; i < set.length; i++) {\n let other = set[i];\n if (this.eq(other))\n return set;\n if (this.type.excludes(other.type)) {\n if (!copy)\n copy = set.slice(0, i);\n }\n else if (other.type.excludes(this.type)) {\n return set;\n }\n else {\n if (!placed && other.type.rank > this.type.rank) {\n if (!copy)\n copy = set.slice(0, i);\n copy.push(this);\n placed = true;\n }\n if (copy)\n copy.push(other);\n }\n }\n if (!copy)\n copy = set.slice();\n if (!placed)\n copy.push(this);\n return copy;\n }\n /**\n Remove this mark from the given set, returning a new set. If this\n mark is not in the set, the set itself is returned.\n */\n removeFromSet(set) {\n for (let i = 0; i < set.length; i++)\n if (this.eq(set[i]))\n return set.slice(0, i).concat(set.slice(i + 1));\n return set;\n }\n /**\n Test whether this mark is in the given set of marks.\n */\n isInSet(set) {\n for (let i = 0; i < set.length; i++)\n if (this.eq(set[i]))\n return true;\n return false;\n }\n /**\n Test whether this mark has the same type and attributes as\n another mark.\n */\n eq(other) {\n return this == other ||\n (this.type == other.type && compareDeep(this.attrs, other.attrs));\n }\n /**\n Convert this mark to a JSON-serializeable representation.\n */\n toJSON() {\n let obj = { type: this.type.name };\n for (let _ in this.attrs) {\n obj.attrs = this.attrs;\n break;\n }\n return obj;\n }\n /**\n Deserialize a mark from JSON.\n */\n static fromJSON(schema, json) {\n if (!json)\n throw new RangeError(\"Invalid input for Mark.fromJSON\");\n let type = schema.marks[json.type];\n if (!type)\n throw new RangeError(`There is no mark type ${json.type} in this schema`);\n let mark = type.create(json.attrs);\n type.checkAttrs(mark.attrs);\n return mark;\n }\n /**\n Test whether two sets of marks are identical.\n */\n static sameSet(a, b) {\n if (a == b)\n return true;\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!a[i].eq(b[i]))\n return false;\n return true;\n }\n /**\n Create a properly sorted mark set from null, a single mark, or an\n unsorted array of marks.\n */\n static setFrom(marks) {\n if (!marks || Array.isArray(marks) && marks.length == 0)\n return Mark.none;\n if (marks instanceof Mark)\n return [marks];\n let copy = marks.slice();\n copy.sort((a, b) => a.type.rank - b.type.rank);\n return copy;\n }\n}\n/**\nThe empty set of marks.\n*/\nMark.none = [];\n\n/**\nError type raised by [`Node.replace`](https://prosemirror.net/docs/ref/#model.Node.replace) when\ngiven an invalid replacement.\n*/\nclass ReplaceError extends Error {\n}\n/*\nReplaceError = function(this: any, message: string) {\n let err = Error.call(this, message)\n ;(err as any).__proto__ = ReplaceError.prototype\n return err\n} as any\n\nReplaceError.prototype = Object.create(Error.prototype)\nReplaceError.prototype.constructor = ReplaceError\nReplaceError.prototype.name = \"ReplaceError\"\n*/\n/**\nA slice represents a piece cut out of a larger document. It\nstores not only a fragment, but also the depth up to which nodes on\nboth side are ‘open’ (cut through).\n*/\nclass Slice {\n /**\n Create a slice. When specifying a non-zero open depth, you must\n make sure that there are nodes of at least that depth at the\n appropriate side of the fragment—i.e. if the fragment is an\n empty paragraph node, `openStart` and `openEnd` can't be greater\n than 1.\n \n It is not necessary for the content of open nodes to conform to\n the schema's content constraints, though it should be a valid\n start/end/middle for such a node, depending on which sides are\n open.\n */\n constructor(\n /**\n The slice's content.\n */\n content, \n /**\n The open depth at the start of the fragment.\n */\n openStart, \n /**\n The open depth at the end.\n */\n openEnd) {\n this.content = content;\n this.openStart = openStart;\n this.openEnd = openEnd;\n }\n /**\n The size this slice would add when inserted into a document.\n */\n get size() {\n return this.content.size - this.openStart - this.openEnd;\n }\n /**\n @internal\n */\n insertAt(pos, fragment) {\n let content = insertInto(this.content, pos + this.openStart, fragment);\n return content && new Slice(content, this.openStart, this.openEnd);\n }\n /**\n @internal\n */\n removeBetween(from, to) {\n return new Slice(removeRange(this.content, from + this.openStart, to + this.openStart), this.openStart, this.openEnd);\n }\n /**\n Tests whether this slice is equal to another slice.\n */\n eq(other) {\n return this.content.eq(other.content) && this.openStart == other.openStart && this.openEnd == other.openEnd;\n }\n /**\n @internal\n */\n toString() {\n return this.content + \"(\" + this.openStart + \",\" + this.openEnd + \")\";\n }\n /**\n Convert a slice to a JSON-serializable representation.\n */\n toJSON() {\n if (!this.content.size)\n return null;\n let json = { content: this.content.toJSON() };\n if (this.openStart > 0)\n json.openStart = this.openStart;\n if (this.openEnd > 0)\n json.openEnd = this.openEnd;\n return json;\n }\n /**\n Deserialize a slice from its JSON representation.\n */\n static fromJSON(schema, json) {\n if (!json)\n return Slice.empty;\n let openStart = json.openStart || 0, openEnd = json.openEnd || 0;\n if (typeof openStart != \"number\" || typeof openEnd != \"number\")\n throw new RangeError(\"Invalid input for Slice.fromJSON\");\n return new Slice(Fragment.fromJSON(schema, json.content), openStart, openEnd);\n }\n /**\n Create a slice from a fragment by taking the maximum possible\n open value on both side of the fragment.\n */\n static maxOpen(fragment, openIsolating = true) {\n let openStart = 0, openEnd = 0;\n for (let n = fragment.firstChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.firstChild)\n openStart++;\n for (let n = fragment.lastChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.lastChild)\n openEnd++;\n return new Slice(fragment, openStart, openEnd);\n }\n}\n/**\nThe empty slice.\n*/\nSlice.empty = new Slice(Fragment.empty, 0, 0);\nfunction removeRange(content, from, to) {\n let { index, offset } = content.findIndex(from), child = content.maybeChild(index);\n let { index: indexTo, offset: offsetTo } = content.findIndex(to);\n if (offset == from || child.isText) {\n if (offsetTo != to && !content.child(indexTo).isText)\n throw new RangeError(\"Removing non-flat range\");\n return content.cut(0, from).append(content.cut(to));\n }\n if (index != indexTo)\n throw new RangeError(\"Removing non-flat range\");\n return content.replaceChild(index, child.copy(removeRange(child.content, from - offset - 1, to - offset - 1)));\n}\nfunction insertInto(content, dist, insert, parent) {\n let { index, offset } = content.findIndex(dist), child = content.maybeChild(index);\n if (offset == dist || child.isText) {\n if (parent && !parent.canReplace(index, index, insert))\n return null;\n return content.cut(0, dist).append(insert).append(content.cut(dist));\n }\n let inner = insertInto(child.content, dist - offset - 1, insert);\n return inner && content.replaceChild(index, child.copy(inner));\n}\nfunction replace($from, $to, slice) {\n if (slice.openStart > $from.depth)\n throw new ReplaceError(\"Inserted content deeper than insertion position\");\n if ($from.depth - slice.openStart != $to.depth - slice.openEnd)\n throw new ReplaceError(\"Inconsistent open depths\");\n return replaceOuter($from, $to, slice, 0);\n}\nfunction replaceOuter($from, $to, slice, depth) {\n let index = $from.index(depth), node = $from.node(depth);\n if (index == $to.index(depth) && depth < $from.depth - slice.openStart) {\n let inner = replaceOuter($from, $to, slice, depth + 1);\n return node.copy(node.content.replaceChild(index, inner));\n }\n else if (!slice.content.size) {\n return close(node, replaceTwoWay($from, $to, depth));\n }\n else if (!slice.openStart && !slice.openEnd && $from.depth == depth && $to.depth == depth) { // Simple, flat case\n let parent = $from.parent, content = parent.content;\n return close(parent, content.cut(0, $from.parentOffset).append(slice.content).append(content.cut($to.parentOffset)));\n }\n else {\n let { start, end } = prepareSliceForReplace(slice, $from);\n return close(node, replaceThreeWay($from, start, end, $to, depth));\n }\n}\nfunction checkJoin(main, sub) {\n if (!sub.type.compatibleContent(main.type))\n throw new ReplaceError(\"Cannot join \" + sub.type.name + \" onto \" + main.type.name);\n}\nfunction joinable($before, $after, depth) {\n let node = $before.node(depth);\n checkJoin(node, $after.node(depth));\n return node;\n}\nfunction addNode(child, target) {\n let last = target.length - 1;\n if (last >= 0 && child.isText && child.sameMarkup(target[last]))\n target[last] = child.withText(target[last].text + child.text);\n else\n target.push(child);\n}\nfunction addRange($start, $end, depth, target) {\n let node = ($end || $start).node(depth);\n let startIndex = 0, endIndex = $end ? $end.index(depth) : node.childCount;\n if ($start) {\n startIndex = $start.index(depth);\n if ($start.depth > depth) {\n startIndex++;\n }\n else if ($start.textOffset) {\n addNode($start.nodeAfter, target);\n startIndex++;\n }\n }\n for (let i = startIndex; i < endIndex; i++)\n addNode(node.child(i), target);\n if ($end && $end.depth == depth && $end.textOffset)\n addNode($end.nodeBefore, target);\n}\nfunction close(node, content) {\n node.type.checkContent(content);\n return node.copy(content);\n}\nfunction replaceThreeWay($from, $start, $end, $to, depth) {\n let openStart = $from.depth > depth && joinable($from, $start, depth + 1);\n let openEnd = $to.depth > depth && joinable($end, $to, depth + 1);\n let content = [];\n addRange(null, $from, depth, content);\n if (openStart && openEnd && $start.index(depth) == $end.index(depth)) {\n checkJoin(openStart, openEnd);\n addNode(close(openStart, replaceThreeWay($from, $start, $end, $to, depth + 1)), content);\n }\n else {\n if (openStart)\n addNode(close(openStart, replaceTwoWay($from, $start, depth + 1)), content);\n addRange($start, $end, depth, content);\n if (openEnd)\n addNode(close(openEnd, replaceTwoWay($end, $to, depth + 1)), content);\n }\n addRange($to, null, depth, content);\n return new Fragment(content);\n}\nfunction replaceTwoWay($from, $to, depth) {\n let content = [];\n addRange(null, $from, depth, content);\n if ($from.depth > depth) {\n let type = joinable($from, $to, depth + 1);\n addNode(close(type, replaceTwoWay($from, $to, depth + 1)), content);\n }\n addRange($to, null, depth, content);\n return new Fragment(content);\n}\nfunction prepareSliceForReplace(slice, $along) {\n let extra = $along.depth - slice.openStart, parent = $along.node(extra);\n let node = parent.copy(slice.content);\n for (let i = extra - 1; i >= 0; i--)\n node = $along.node(i).copy(Fragment.from(node));\n return { start: node.resolveNoCache(slice.openStart + extra),\n end: node.resolveNoCache(node.content.size - slice.openEnd - extra) };\n}\n\n/**\nYou can [_resolve_](https://prosemirror.net/docs/ref/#model.Node.resolve) a position to get more\ninformation about it. Objects of this class represent such a\nresolved position, providing various pieces of context\ninformation, and some helper methods.\n\nThroughout this interface, methods that take an optional `depth`\nparameter will interpret undefined as `this.depth` and negative\nnumbers as `this.depth + value`.\n*/\nclass ResolvedPos {\n /**\n @internal\n */\n constructor(\n /**\n The position that was resolved.\n */\n pos, \n /**\n @internal\n */\n path, \n /**\n The offset this position has into its parent node.\n */\n parentOffset) {\n this.pos = pos;\n this.path = path;\n this.parentOffset = parentOffset;\n this.depth = path.length / 3 - 1;\n }\n /**\n @internal\n */\n resolveDepth(val) {\n if (val == null)\n return this.depth;\n if (val < 0)\n return this.depth + val;\n return val;\n }\n /**\n The parent node that the position points into. Note that even if\n a position points into a text node, that node is not considered\n the parent—text nodes are ‘flat’ in this model, and have no content.\n */\n get parent() { return this.node(this.depth); }\n /**\n The root node in which the position was resolved.\n */\n get doc() { return this.node(0); }\n /**\n The ancestor node at the given level. `p.node(p.depth)` is the\n same as `p.parent`.\n */\n node(depth) { return this.path[this.resolveDepth(depth) * 3]; }\n /**\n The index into the ancestor at the given level. If this points\n at the 3rd node in the 2nd paragraph on the top level, for\n example, `p.index(0)` is 1 and `p.index(1)` is 2.\n */\n index(depth) { return this.path[this.resolveDepth(depth) * 3 + 1]; }\n /**\n The index pointing after this position into the ancestor at the\n given level.\n */\n indexAfter(depth) {\n depth = this.resolveDepth(depth);\n return this.index(depth) + (depth == this.depth && !this.textOffset ? 0 : 1);\n }\n /**\n The (absolute) position at the start of the node at the given\n level.\n */\n start(depth) {\n depth = this.resolveDepth(depth);\n return depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;\n }\n /**\n The (absolute) position at the end of the node at the given\n level.\n */\n end(depth) {\n depth = this.resolveDepth(depth);\n return this.start(depth) + this.node(depth).content.size;\n }\n /**\n The (absolute) position directly before the wrapping node at the\n given level, or, when `depth` is `this.depth + 1`, the original\n position.\n */\n before(depth) {\n depth = this.resolveDepth(depth);\n if (!depth)\n throw new RangeError(\"There is no position before the top-level node\");\n return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1];\n }\n /**\n The (absolute) position directly after the wrapping node at the\n given level, or the original position when `depth` is `this.depth + 1`.\n */\n after(depth) {\n depth = this.resolveDepth(depth);\n if (!depth)\n throw new RangeError(\"There is no position after the top-level node\");\n return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1] + this.path[depth * 3].nodeSize;\n }\n /**\n When this position points into a text node, this returns the\n distance between the position and the start of the text node.\n Will be zero for positions that point between nodes.\n */\n get textOffset() { return this.pos - this.path[this.path.length - 1]; }\n /**\n Get the node directly after the position, if any. If the position\n points into a text node, only the part of that node after the\n position is returned.\n */\n get nodeAfter() {\n let parent = this.parent, index = this.index(this.depth);\n if (index == parent.childCount)\n return null;\n let dOff = this.pos - this.path[this.path.length - 1], child = parent.child(index);\n return dOff ? parent.child(index).cut(dOff) : child;\n }\n /**\n Get the node directly before the position, if any. If the\n position points into a text node, only the part of that node\n before the position is returned.\n */\n get nodeBefore() {\n let index = this.index(this.depth);\n let dOff = this.pos - this.path[this.path.length - 1];\n if (dOff)\n return this.parent.child(index).cut(0, dOff);\n return index == 0 ? null : this.parent.child(index - 1);\n }\n /**\n Get the position at the given index in the parent node at the\n given depth (which defaults to `this.depth`).\n */\n posAtIndex(index, depth) {\n depth = this.resolveDepth(depth);\n let node = this.path[depth * 3], pos = depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;\n for (let i = 0; i < index; i++)\n pos += node.child(i).nodeSize;\n return pos;\n }\n /**\n Get the marks at this position, factoring in the surrounding\n marks' [`inclusive`](https://prosemirror.net/docs/ref/#model.MarkSpec.inclusive) property. If the\n position is at the start of a non-empty node, the marks of the\n node after it (if any) are returned.\n */\n marks() {\n let parent = this.parent, index = this.index();\n // In an empty parent, return the empty array\n if (parent.content.size == 0)\n return Mark.none;\n // When inside a text node, just return the text node's marks\n if (this.textOffset)\n return parent.child(index).marks;\n let main = parent.maybeChild(index - 1), other = parent.maybeChild(index);\n // If the `after` flag is true of there is no node before, make\n // the node after this position the main reference.\n if (!main) {\n let tmp = main;\n main = other;\n other = tmp;\n }\n // Use all marks in the main node, except those that have\n // `inclusive` set to false and are not present in the other node.\n let marks = main.marks;\n for (var i = 0; i < marks.length; i++)\n if (marks[i].type.spec.inclusive === false && (!other || !marks[i].isInSet(other.marks)))\n marks = marks[i--].removeFromSet(marks);\n return marks;\n }\n /**\n Get the marks after the current position, if any, except those\n that are non-inclusive and not present at position `$end`. This\n is mostly useful for getting the set of marks to preserve after a\n deletion. Will return `null` if this position is at the end of\n its parent node or its parent node isn't a textblock (in which\n case no marks should be preserved).\n */\n marksAcross($end) {\n let after = this.parent.maybeChild(this.index());\n if (!after || !after.isInline)\n return null;\n let marks = after.marks, next = $end.parent.maybeChild($end.index());\n for (var i = 0; i < marks.length; i++)\n if (marks[i].type.spec.inclusive === false && (!next || !marks[i].isInSet(next.marks)))\n marks = marks[i--].removeFromSet(marks);\n return marks;\n }\n /**\n The depth up to which this position and the given (non-resolved)\n position share the same parent nodes.\n */\n sharedDepth(pos) {\n for (let depth = this.depth; depth > 0; depth--)\n if (this.start(depth) <= pos && this.end(depth) >= pos)\n return depth;\n return 0;\n }\n /**\n Returns a range based on the place where this position and the\n given position diverge around block content. If both point into\n the same textblock, for example, a range around that textblock\n will be returned. If they point into different blocks, the range\n around those blocks in their shared ancestor is returned. You can\n pass in an optional predicate that will be called with a parent\n node to see if a range into that parent is acceptable.\n */\n blockRange(other = this, pred) {\n if (other.pos < this.pos)\n return other.blockRange(this);\n for (let d = this.depth - (this.parent.inlineContent || this.pos == other.pos ? 1 : 0); d >= 0; d--)\n if (other.pos <= this.end(d) && (!pred || pred(this.node(d))))\n return new NodeRange(this, other, d);\n return null;\n }\n /**\n Query whether the given position shares the same parent node.\n */\n sameParent(other) {\n return this.pos - this.parentOffset == other.pos - other.parentOffset;\n }\n /**\n Return the greater of this and the given position.\n */\n max(other) {\n return other.pos > this.pos ? other : this;\n }\n /**\n Return the smaller of this and the given position.\n */\n min(other) {\n return other.pos < this.pos ? other : this;\n }\n /**\n @internal\n */\n toString() {\n let str = \"\";\n for (let i = 1; i <= this.depth; i++)\n str += (str ? \"/\" : \"\") + this.node(i).type.name + \"_\" + this.index(i - 1);\n return str + \":\" + this.parentOffset;\n }\n /**\n @internal\n */\n static resolve(doc, pos) {\n if (!(pos >= 0 && pos <= doc.content.size))\n throw new RangeError(\"Position \" + pos + \" out of range\");\n let path = [];\n let start = 0, parentOffset = pos;\n for (let node = doc;;) {\n let { index, offset } = node.content.findIndex(parentOffset);\n let rem = parentOffset - offset;\n path.push(node, index, start + offset);\n if (!rem)\n break;\n node = node.child(index);\n if (node.isText)\n break;\n parentOffset = rem - 1;\n start += offset + 1;\n }\n return new ResolvedPos(pos, path, parentOffset);\n }\n /**\n @internal\n */\n static resolveCached(doc, pos) {\n let cache = resolveCache.get(doc);\n if (cache) {\n for (let i = 0; i < cache.elts.length; i++) {\n let elt = cache.elts[i];\n if (elt.pos == pos)\n return elt;\n }\n }\n else {\n resolveCache.set(doc, cache = new ResolveCache);\n }\n let result = cache.elts[cache.i] = ResolvedPos.resolve(doc, pos);\n cache.i = (cache.i + 1) % resolveCacheSize;\n return result;\n }\n}\nclass ResolveCache {\n constructor() {\n this.elts = [];\n this.i = 0;\n }\n}\nconst resolveCacheSize = 12, resolveCache = new WeakMap();\n/**\nRepresents a flat range of content, i.e. one that starts and\nends in the same node.\n*/\nclass NodeRange {\n /**\n Construct a node range. `$from` and `$to` should point into the\n same node until at least the given `depth`, since a node range\n denotes an adjacent set of nodes in a single parent node.\n */\n constructor(\n /**\n A resolved position along the start of the content. May have a\n `depth` greater than this object's `depth` property, since\n these are the positions that were used to compute the range,\n not re-resolved positions directly at its boundaries.\n */\n $from, \n /**\n A position along the end of the content. See\n caveat for [`$from`](https://prosemirror.net/docs/ref/#model.NodeRange.$from).\n */\n $to, \n /**\n The depth of the node that this range points into.\n */\n depth) {\n this.$from = $from;\n this.$to = $to;\n this.depth = depth;\n }\n /**\n The position at the start of the range.\n */\n get start() { return this.$from.before(this.depth + 1); }\n /**\n The position at the end of the range.\n */\n get end() { return this.$to.after(this.depth + 1); }\n /**\n The parent node that the range points into.\n */\n get parent() { return this.$from.node(this.depth); }\n /**\n The start index of the range in the parent node.\n */\n get startIndex() { return this.$from.index(this.depth); }\n /**\n The end index of the range in the parent node.\n */\n get endIndex() { return this.$to.indexAfter(this.depth); }\n}\n\nconst emptyAttrs = Object.create(null);\n/**\nThis class represents a node in the tree that makes up a\nProseMirror document. So a document is an instance of `Node`, with\nchildren that are also instances of `Node`.\n\nNodes are persistent data structures. Instead of changing them, you\ncreate new ones with the content you want. Old ones keep pointing\nat the old document shape. This is made cheaper by sharing\nstructure between the old and new data as much as possible, which a\ntree shape like this (without back pointers) makes easy.\n\n**Do not** directly mutate the properties of a `Node` object. See\n[the guide](/docs/guide/#doc) for more information.\n*/\nclass Node {\n /**\n @internal\n */\n constructor(\n /**\n The type of node that this is.\n */\n type, \n /**\n An object mapping attribute names to values. The kind of\n attributes allowed and required are\n [determined](https://prosemirror.net/docs/ref/#model.NodeSpec.attrs) by the node type.\n */\n attrs, \n // A fragment holding the node's children.\n content, \n /**\n The marks (things like whether it is emphasized or part of a\n link) applied to this node.\n */\n marks = Mark.none) {\n this.type = type;\n this.attrs = attrs;\n this.marks = marks;\n this.content = content || Fragment.empty;\n }\n /**\n The size of this node, as defined by the integer-based [indexing\n scheme](/docs/guide/#doc.indexing). For text nodes, this is the\n amount of characters. For other leaf nodes, it is one. For\n non-leaf nodes, it is the size of the content plus two (the\n start and end token).\n */\n get nodeSize() { return this.isLeaf ? 1 : 2 + this.content.size; }\n /**\n The number of children that the node has.\n */\n get childCount() { return this.content.childCount; }\n /**\n Get the child node at the given index. Raises an error when the\n index is out of range.\n */\n child(index) { return this.content.child(index); }\n /**\n Get the child node at the given index, if it exists.\n */\n maybeChild(index) { return this.content.maybeChild(index); }\n /**\n Call `f` for every child node, passing the node, its offset\n into this parent node, and its index.\n */\n forEach(f) { this.content.forEach(f); }\n /**\n Invoke a callback for all descendant nodes recursively between\n the given two positions that are relative to start of this\n node's content. The callback is invoked with the node, its\n position relative to the original node (method receiver),\n its parent node, and its child index. When the callback returns\n false for a given node, that node's children will not be\n recursed over. The last parameter can be used to specify a\n starting position to count from.\n */\n nodesBetween(from, to, f, startPos = 0) {\n this.content.nodesBetween(from, to, f, startPos, this);\n }\n /**\n Call the given callback for every descendant node. Doesn't\n descend into a node when the callback returns `false`.\n */\n descendants(f) {\n this.nodesBetween(0, this.content.size, f);\n }\n /**\n Concatenates all the text nodes found in this fragment and its\n children.\n */\n get textContent() {\n return (this.isLeaf && this.type.spec.leafText)\n ? this.type.spec.leafText(this)\n : this.textBetween(0, this.content.size, \"\");\n }\n /**\n Get all text between positions `from` and `to`. When\n `blockSeparator` is given, it will be inserted to separate text\n from different block nodes. If `leafText` is given, it'll be\n inserted for every non-text leaf node encountered, otherwise\n [`leafText`](https://prosemirror.net/docs/ref/#model.NodeSpec^leafText) will be used.\n */\n textBetween(from, to, blockSeparator, leafText) {\n return this.content.textBetween(from, to, blockSeparator, leafText);\n }\n /**\n Returns this node's first child, or `null` if there are no\n children.\n */\n get firstChild() { return this.content.firstChild; }\n /**\n Returns this node's last child, or `null` if there are no\n children.\n */\n get lastChild() { return this.content.lastChild; }\n /**\n Test whether two nodes represent the same piece of document.\n */\n eq(other) {\n return this == other || (this.sameMarkup(other) && this.content.eq(other.content));\n }\n /**\n Compare the markup (type, attributes, and marks) of this node to\n those of another. Returns `true` if both have the same markup.\n */\n sameMarkup(other) {\n return this.hasMarkup(other.type, other.attrs, other.marks);\n }\n /**\n Check whether this node's markup correspond to the given type,\n attributes, and marks.\n */\n hasMarkup(type, attrs, marks) {\n return this.type == type &&\n compareDeep(this.attrs, attrs || type.defaultAttrs || emptyAttrs) &&\n Mark.sameSet(this.marks, marks || Mark.none);\n }\n /**\n Create a new node with the same markup as this node, containing\n the given content (or empty, if no content is given).\n */\n copy(content = null) {\n if (content == this.content)\n return this;\n return new Node(this.type, this.attrs, content, this.marks);\n }\n /**\n Create a copy of this node, with the given set of marks instead\n of the node's own marks.\n */\n mark(marks) {\n return marks == this.marks ? this : new Node(this.type, this.attrs, this.content, marks);\n }\n /**\n Create a copy of this node with only the content between the\n given positions. If `to` is not given, it defaults to the end of\n the node.\n */\n cut(from, to = this.content.size) {\n if (from == 0 && to == this.content.size)\n return this;\n return this.copy(this.content.cut(from, to));\n }\n /**\n Cut out the part of the document between the given positions, and\n return it as a `Slice` object.\n */\n slice(from, to = this.content.size, includeParents = false) {\n if (from == to)\n return Slice.empty;\n let $from = this.resolve(from), $to = this.resolve(to);\n let depth = includeParents ? 0 : $from.sharedDepth(to);\n let start = $from.start(depth), node = $from.node(depth);\n let content = node.content.cut($from.pos - start, $to.pos - start);\n return new Slice(content, $from.depth - depth, $to.depth - depth);\n }\n /**\n Replace the part of the document between the given positions with\n the given slice. The slice must 'fit', meaning its open sides\n must be able to connect to the surrounding content, and its\n content nodes must be valid children for the node they are placed\n into. If any of this is violated, an error of type\n [`ReplaceError`](https://prosemirror.net/docs/ref/#model.ReplaceError) is thrown.\n */\n replace(from, to, slice) {\n return replace(this.resolve(from), this.resolve(to), slice);\n }\n /**\n Find the node directly after the given position.\n */\n nodeAt(pos) {\n for (let node = this;;) {\n let { index, offset } = node.content.findIndex(pos);\n node = node.maybeChild(index);\n if (!node)\n return null;\n if (offset == pos || node.isText)\n return node;\n pos -= offset + 1;\n }\n }\n /**\n Find the (direct) child node after the given offset, if any,\n and return it along with its index and offset relative to this\n node.\n */\n childAfter(pos) {\n let { index, offset } = this.content.findIndex(pos);\n return { node: this.content.maybeChild(index), index, offset };\n }\n /**\n Find the (direct) child node before the given offset, if any,\n and return it along with its index and offset relative to this\n node.\n */\n childBefore(pos) {\n if (pos == 0)\n return { node: null, index: 0, offset: 0 };\n let { index, offset } = this.content.findIndex(pos);\n if (offset < pos)\n return { node: this.content.child(index), index, offset };\n let node = this.content.child(index - 1);\n return { node, index: index - 1, offset: offset - node.nodeSize };\n }\n /**\n Resolve the given position in the document, returning an\n [object](https://prosemirror.net/docs/ref/#model.ResolvedPos) with information about its context.\n */\n resolve(pos) { return ResolvedPos.resolveCached(this, pos); }\n /**\n @internal\n */\n resolveNoCache(pos) { return ResolvedPos.resolve(this, pos); }\n /**\n Test whether a given mark or mark type occurs in this document\n between the two given positions.\n */\n rangeHasMark(from, to, type) {\n let found = false;\n if (to > from)\n this.nodesBetween(from, to, node => {\n if (type.isInSet(node.marks))\n found = true;\n return !found;\n });\n return found;\n }\n /**\n True when this is a block (non-inline node)\n */\n get isBlock() { return this.type.isBlock; }\n /**\n True when this is a textblock node, a block node with inline\n content.\n */\n get isTextblock() { return this.type.isTextblock; }\n /**\n True when this node allows inline content.\n */\n get inlineContent() { return this.type.inlineContent; }\n /**\n True when this is an inline node (a text node or a node that can\n appear among text).\n */\n get isInline() { return this.type.isInline; }\n /**\n True when this is a text node.\n */\n get isText() { return this.type.isText; }\n /**\n True when this is a leaf node.\n */\n get isLeaf() { return this.type.isLeaf; }\n /**\n True when this is an atom, i.e. when it does not have directly\n editable content. This is usually the same as `isLeaf`, but can\n be configured with the [`atom` property](https://prosemirror.net/docs/ref/#model.NodeSpec.atom)\n on a node's spec (typically used when the node is displayed as\n an uneditable [node view](https://prosemirror.net/docs/ref/#view.NodeView)).\n */\n get isAtom() { return this.type.isAtom; }\n /**\n Return a string representation of this node for debugging\n purposes.\n */\n toString() {\n if (this.type.spec.toDebugString)\n return this.type.spec.toDebugString(this);\n let name = this.type.name;\n if (this.content.size)\n name += \"(\" + this.content.toStringInner() + \")\";\n return wrapMarks(this.marks, name);\n }\n /**\n Get the content match in this node at the given index.\n */\n contentMatchAt(index) {\n let match = this.type.contentMatch.matchFragment(this.content, 0, index);\n if (!match)\n throw new Error(\"Called contentMatchAt on a node with invalid content\");\n return match;\n }\n /**\n Test whether replacing the range between `from` and `to` (by\n child index) with the given replacement fragment (which defaults\n to the empty fragment) would leave the node's content valid. You\n can optionally pass `start` and `end` indices into the\n replacement fragment.\n */\n canReplace(from, to, replacement = Fragment.empty, start = 0, end = replacement.childCount) {\n let one = this.contentMatchAt(from).matchFragment(replacement, start, end);\n let two = one && one.matchFragment(this.content, to);\n if (!two || !two.validEnd)\n return false;\n for (let i = start; i < end; i++)\n if (!this.type.allowsMarks(replacement.child(i).marks))\n return false;\n return true;\n }\n /**\n Test whether replacing the range `from` to `to` (by index) with\n a node of the given type would leave the node's content valid.\n */\n canReplaceWith(from, to, type, marks) {\n if (marks && !this.type.allowsMarks(marks))\n return false;\n let start = this.contentMatchAt(from).matchType(type);\n let end = start && start.matchFragment(this.content, to);\n return end ? end.validEnd : false;\n }\n /**\n Test whether the given node's content could be appended to this\n node. If that node is empty, this will only return true if there\n is at least one node type that can appear in both nodes (to avoid\n merging completely incompatible nodes).\n */\n canAppend(other) {\n if (other.content.size)\n return this.canReplace(this.childCount, this.childCount, other.content);\n else\n return this.type.compatibleContent(other.type);\n }\n /**\n Check whether this node and its descendants conform to the\n schema, and raise an exception when they do not.\n */\n check() {\n this.type.checkContent(this.content);\n this.type.checkAttrs(this.attrs);\n let copy = Mark.none;\n for (let i = 0; i < this.marks.length; i++) {\n let mark = this.marks[i];\n mark.type.checkAttrs(mark.attrs);\n copy = mark.addToSet(copy);\n }\n if (!Mark.sameSet(copy, this.marks))\n throw new RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map(m => m.type.name)}`);\n this.content.forEach(node => node.check());\n }\n /**\n Return a JSON-serializeable representation of this node.\n */\n toJSON() {\n let obj = { type: this.type.name };\n for (let _ in this.attrs) {\n obj.attrs = this.attrs;\n break;\n }\n if (this.content.size)\n obj.content = this.content.toJSON();\n if (this.marks.length)\n obj.marks = this.marks.map(n => n.toJSON());\n return obj;\n }\n /**\n Deserialize a node from its JSON representation.\n */\n static fromJSON(schema, json) {\n if (!json)\n throw new RangeError(\"Invalid input for Node.fromJSON\");\n let marks = undefined;\n if (json.marks) {\n if (!Array.isArray(json.marks))\n throw new RangeError(\"Invalid mark data for Node.fromJSON\");\n marks = json.marks.map(schema.markFromJSON);\n }\n if (json.type == \"text\") {\n if (typeof json.text != \"string\")\n throw new RangeError(\"Invalid text node in JSON\");\n return schema.text(json.text, marks);\n }\n let content = Fragment.fromJSON(schema, json.content);\n let node = schema.nodeType(json.type).create(json.attrs, content, marks);\n node.type.checkAttrs(node.attrs);\n return node;\n }\n}\nNode.prototype.text = undefined;\nclass TextNode extends Node {\n /**\n @internal\n */\n constructor(type, attrs, content, marks) {\n super(type, attrs, null, marks);\n if (!content)\n throw new RangeError(\"Empty text nodes are not allowed\");\n this.text = content;\n }\n toString() {\n if (this.type.spec.toDebugString)\n return this.type.spec.toDebugString(this);\n return wrapMarks(this.marks, JSON.stringify(this.text));\n }\n get textContent() { return this.text; }\n textBetween(from, to) { return this.text.slice(from, to); }\n get nodeSize() { return this.text.length; }\n mark(marks) {\n return marks == this.marks ? this : new TextNode(this.type, this.attrs, this.text, marks);\n }\n withText(text) {\n if (text == this.text)\n return this;\n return new TextNode(this.type, this.attrs, text, this.marks);\n }\n cut(from = 0, to = this.text.length) {\n if (from == 0 && to == this.text.length)\n return this;\n return this.withText(this.text.slice(from, to));\n }\n eq(other) {\n return this.sameMarkup(other) && this.text == other.text;\n }\n toJSON() {\n let base = super.toJSON();\n base.text = this.text;\n return base;\n }\n}\nfunction wrapMarks(marks, str) {\n for (let i = marks.length - 1; i >= 0; i--)\n str = marks[i].type.name + \"(\" + str + \")\";\n return str;\n}\n\n/**\nInstances of this class represent a match state of a node type's\n[content expression](https://prosemirror.net/docs/ref/#model.NodeSpec.content), and can be used to\nfind out whether further content matches here, and whether a given\nposition is a valid end of the node.\n*/\nclass ContentMatch {\n /**\n @internal\n */\n constructor(\n /**\n True when this match state represents a valid end of the node.\n */\n validEnd) {\n this.validEnd = validEnd;\n /**\n @internal\n */\n this.next = [];\n /**\n @internal\n */\n this.wrapCache = [];\n }\n /**\n @internal\n */\n static parse(string, nodeTypes) {\n let stream = new TokenStream(string, nodeTypes);\n if (stream.next == null)\n return ContentMatch.empty;\n let expr = parseExpr(stream);\n if (stream.next)\n stream.err(\"Unexpected trailing text\");\n let match = dfa(nfa(expr));\n checkForDeadEnds(match, stream);\n return match;\n }\n /**\n Match a node type, returning a match after that node if\n successful.\n */\n matchType(type) {\n for (let i = 0; i < this.next.length; i++)\n if (this.next[i].type == type)\n return this.next[i].next;\n return null;\n }\n /**\n Try to match a fragment. Returns the resulting match when\n successful.\n */\n matchFragment(frag, start = 0, end = frag.childCount) {\n let cur = this;\n for (let i = start; cur && i < end; i++)\n cur = cur.matchType(frag.child(i).type);\n return cur;\n }\n /**\n @internal\n */\n get inlineContent() {\n return this.next.length != 0 && this.next[0].type.isInline;\n }\n /**\n Get the first matching node type at this match position that can\n be generated.\n */\n get defaultType() {\n for (let i = 0; i < this.next.length; i++) {\n let { type } = this.next[i];\n if (!(type.isText || type.hasRequiredAttrs()))\n return type;\n }\n return null;\n }\n /**\n @internal\n */\n compatible(other) {\n for (let i = 0; i < this.next.length; i++)\n for (let j = 0; j < other.next.length; j++)\n if (this.next[i].type == other.next[j].type)\n return true;\n return false;\n }\n /**\n Try to match the given fragment, and if that fails, see if it can\n be made to match by inserting nodes in front of it. When\n successful, return a fragment of inserted nodes (which may be\n empty if nothing had to be inserted). When `toEnd` is true, only\n return a fragment if the resulting match goes to the end of the\n content expression.\n */\n fillBefore(after, toEnd = false, startIndex = 0) {\n let seen = [this];\n function search(match, types) {\n let finished = match.matchFragment(after, startIndex);\n if (finished && (!toEnd || finished.validEnd))\n return Fragment.from(types.map(tp => tp.createAndFill()));\n for (let i = 0; i < match.next.length; i++) {\n let { type, next } = match.next[i];\n if (!(type.isText || type.hasRequiredAttrs()) && seen.indexOf(next) == -1) {\n seen.push(next);\n let found = search(next, types.concat(type));\n if (found)\n return found;\n }\n }\n return null;\n }\n return search(this, []);\n }\n /**\n Find a set of wrapping node types that would allow a node of the\n given type to appear at this position. The result may be empty\n (when it fits directly) and will be null when no such wrapping\n exists.\n */\n findWrapping(target) {\n for (let i = 0; i < this.wrapCache.length; i += 2)\n if (this.wrapCache[i] == target)\n return this.wrapCache[i + 1];\n let computed = this.computeWrapping(target);\n this.wrapCache.push(target, computed);\n return computed;\n }\n /**\n @internal\n */\n computeWrapping(target) {\n let seen = Object.create(null), active = [{ match: this, type: null, via: null }];\n while (active.length) {\n let current = active.shift(), match = current.match;\n if (match.matchType(target)) {\n let result = [];\n for (let obj = current; obj.type; obj = obj.via)\n result.push(obj.type);\n return result.reverse();\n }\n for (let i = 0; i < match.next.length; i++) {\n let { type, next } = match.next[i];\n if (!type.isLeaf && !type.hasRequiredAttrs() && !(type.name in seen) && (!current.type || next.validEnd)) {\n active.push({ match: type.contentMatch, type, via: current });\n seen[type.name] = true;\n }\n }\n }\n return null;\n }\n /**\n The number of outgoing edges this node has in the finite\n automaton that describes the content expression.\n */\n get edgeCount() {\n return this.next.length;\n }\n /**\n Get the _n_​th outgoing edge from this node in the finite\n automaton that describes the content expression.\n */\n edge(n) {\n if (n >= this.next.length)\n throw new RangeError(`There's no ${n}th edge in this content match`);\n return this.next[n];\n }\n /**\n @internal\n */\n toString() {\n let seen = [];\n function scan(m) {\n seen.push(m);\n for (let i = 0; i < m.next.length; i++)\n if (seen.indexOf(m.next[i].next) == -1)\n scan(m.next[i].next);\n }\n scan(this);\n return seen.map((m, i) => {\n let out = i + (m.validEnd ? \"*\" : \" \") + \" \";\n for (let i = 0; i < m.next.length; i++)\n out += (i ? \", \" : \"\") + m.next[i].type.name + \"->\" + seen.indexOf(m.next[i].next);\n return out;\n }).join(\"\\n\");\n }\n}\n/**\n@internal\n*/\nContentMatch.empty = new ContentMatch(true);\nclass TokenStream {\n constructor(string, nodeTypes) {\n this.string = string;\n this.nodeTypes = nodeTypes;\n this.inline = null;\n this.pos = 0;\n this.tokens = string.split(/\\s*(?=\\b|\\W|$)/);\n if (this.tokens[this.tokens.length - 1] == \"\")\n this.tokens.pop();\n if (this.tokens[0] == \"\")\n this.tokens.shift();\n }\n get next() { return this.tokens[this.pos]; }\n eat(tok) { return this.next == tok && (this.pos++ || true); }\n err(str) { throw new SyntaxError(str + \" (in content expression '\" + this.string + \"')\"); }\n}\nfunction parseExpr(stream) {\n let exprs = [];\n do {\n exprs.push(parseExprSeq(stream));\n } while (stream.eat(\"|\"));\n return exprs.length == 1 ? exprs[0] : { type: \"choice\", exprs };\n}\nfunction parseExprSeq(stream) {\n let exprs = [];\n do {\n exprs.push(parseExprSubscript(stream));\n } while (stream.next && stream.next != \")\" && stream.next != \"|\");\n return exprs.length == 1 ? exprs[0] : { type: \"seq\", exprs };\n}\nfunction parseExprSubscript(stream) {\n let expr = parseExprAtom(stream);\n for (;;) {\n if (stream.eat(\"+\"))\n expr = { type: \"plus\", expr };\n else if (stream.eat(\"*\"))\n expr = { type: \"star\", expr };\n else if (stream.eat(\"?\"))\n expr = { type: \"opt\", expr };\n else if (stream.eat(\"{\"))\n expr = parseExprRange(stream, expr);\n else\n break;\n }\n return expr;\n}\nfunction parseNum(stream) {\n if (/\\D/.test(stream.next))\n stream.err(\"Expected number, got '\" + stream.next + \"'\");\n let result = Number(stream.next);\n stream.pos++;\n return result;\n}\nfunction parseExprRange(stream, expr) {\n let min = parseNum(stream), max = min;\n if (stream.eat(\",\")) {\n if (stream.next != \"}\")\n max = parseNum(stream);\n else\n max = -1;\n }\n if (!stream.eat(\"}\"))\n stream.err(\"Unclosed braced range\");\n return { type: \"range\", min, max, expr };\n}\nfunction resolveName(stream, name) {\n let types = stream.nodeTypes, type = types[name];\n if (type)\n return [type];\n let result = [];\n for (let typeName in types) {\n let type = types[typeName];\n if (type.groups.indexOf(name) > -1)\n result.push(type);\n }\n if (result.length == 0)\n stream.err(\"No node type or group '\" + name + \"' found\");\n return result;\n}\nfunction parseExprAtom(stream) {\n if (stream.eat(\"(\")) {\n let expr = parseExpr(stream);\n if (!stream.eat(\")\"))\n stream.err(\"Missing closing paren\");\n return expr;\n }\n else if (!/\\W/.test(stream.next)) {\n let exprs = resolveName(stream, stream.next).map(type => {\n if (stream.inline == null)\n stream.inline = type.isInline;\n else if (stream.inline != type.isInline)\n stream.err(\"Mixing inline and block content\");\n return { type: \"name\", value: type };\n });\n stream.pos++;\n return exprs.length == 1 ? exprs[0] : { type: \"choice\", exprs };\n }\n else {\n stream.err(\"Unexpected token '\" + stream.next + \"'\");\n }\n}\n/**\nConstruct an NFA from an expression as returned by the parser. The\nNFA is represented as an array of states, which are themselves\narrays of edges, which are `{term, to}` objects. The first state is\nthe entry state and the last node is the success state.\n\nNote that unlike typical NFAs, the edge ordering in this one is\nsignificant, in that it is used to contruct filler content when\nnecessary.\n*/\nfunction nfa(expr) {\n let nfa = [[]];\n connect(compile(expr, 0), node());\n return nfa;\n function node() { return nfa.push([]) - 1; }\n function edge(from, to, term) {\n let edge = { term, to };\n nfa[from].push(edge);\n return edge;\n }\n function connect(edges, to) {\n edges.forEach(edge => edge.to = to);\n }\n function compile(expr, from) {\n if (expr.type == \"choice\") {\n return expr.exprs.reduce((out, expr) => out.concat(compile(expr, from)), []);\n }\n else if (expr.type == \"seq\") {\n for (let i = 0;; i++) {\n let next = compile(expr.exprs[i], from);\n if (i == expr.exprs.length - 1)\n return next;\n connect(next, from = node());\n }\n }\n else if (expr.type == \"star\") {\n let loop = node();\n edge(from, loop);\n connect(compile(expr.expr, loop), loop);\n return [edge(loop)];\n }\n else if (expr.type == \"plus\") {\n let loop = node();\n connect(compile(expr.expr, from), loop);\n connect(compile(expr.expr, loop), loop);\n return [edge(loop)];\n }\n else if (expr.type == \"opt\") {\n return [edge(from)].concat(compile(expr.expr, from));\n }\n else if (expr.type == \"range\") {\n let cur = from;\n for (let i = 0; i < expr.min; i++) {\n let next = node();\n connect(compile(expr.expr, cur), next);\n cur = next;\n }\n if (expr.max == -1) {\n connect(compile(expr.expr, cur), cur);\n }\n else {\n for (let i = expr.min; i < expr.max; i++) {\n let next = node();\n edge(cur, next);\n connect(compile(expr.expr, cur), next);\n cur = next;\n }\n }\n return [edge(cur)];\n }\n else if (expr.type == \"name\") {\n return [edge(from, undefined, expr.value)];\n }\n else {\n throw new Error(\"Unknown expr type\");\n }\n }\n}\nfunction cmp(a, b) { return b - a; }\n// Get the set of nodes reachable by null edges from `node`. Omit\n// nodes with only a single null-out-edge, since they may lead to\n// needless duplicated nodes.\nfunction nullFrom(nfa, node) {\n let result = [];\n scan(node);\n return result.sort(cmp);\n function scan(node) {\n let edges = nfa[node];\n if (edges.length == 1 && !edges[0].term)\n return scan(edges[0].to);\n result.push(node);\n for (let i = 0; i < edges.length; i++) {\n let { term, to } = edges[i];\n if (!term && result.indexOf(to) == -1)\n scan(to);\n }\n }\n}\n// Compiles an NFA as produced by `nfa` into a DFA, modeled as a set\n// of state objects (`ContentMatch` instances) with transitions\n// between them.\nfunction dfa(nfa) {\n let labeled = Object.create(null);\n return explore(nullFrom(nfa, 0));\n function explore(states) {\n let out = [];\n states.forEach(node => {\n nfa[node].forEach(({ term, to }) => {\n if (!term)\n return;\n let set;\n for (let i = 0; i < out.length; i++)\n if (out[i][0] == term)\n set = out[i][1];\n nullFrom(nfa, to).forEach(node => {\n if (!set)\n out.push([term, set = []]);\n if (set.indexOf(node) == -1)\n set.push(node);\n });\n });\n });\n let state = labeled[states.join(\",\")] = new ContentMatch(states.indexOf(nfa.length - 1) > -1);\n for (let i = 0; i < out.length; i++) {\n let states = out[i][1].sort(cmp);\n state.next.push({ type: out[i][0], next: labeled[states.join(\",\")] || explore(states) });\n }\n return state;\n }\n}\nfunction checkForDeadEnds(match, stream) {\n for (let i = 0, work = [match]; i < work.length; i++) {\n let state = work[i], dead = !state.validEnd, nodes = [];\n for (let j = 0; j < state.next.length; j++) {\n let { type, next } = state.next[j];\n nodes.push(type.name);\n if (dead && !(type.isText || type.hasRequiredAttrs()))\n dead = false;\n if (work.indexOf(next) == -1)\n work.push(next);\n }\n if (dead)\n stream.err(\"Only non-generatable nodes (\" + nodes.join(\", \") + \") in a required position (see https://prosemirror.net/docs/guide/#generatable)\");\n }\n}\n\n// For node types where all attrs have a default value (or which don't\n// have any attributes), build up a single reusable default attribute\n// object, and use it for all nodes that don't specify specific\n// attributes.\nfunction defaultAttrs(attrs) {\n let defaults = Object.create(null);\n for (let attrName in attrs) {\n let attr = attrs[attrName];\n if (!attr.hasDefault)\n return null;\n defaults[attrName] = attr.default;\n }\n return defaults;\n}\nfunction computeAttrs(attrs, value) {\n let built = Object.create(null);\n for (let name in attrs) {\n let given = value && value[name];\n if (given === undefined) {\n let attr = attrs[name];\n if (attr.hasDefault)\n given = attr.default;\n else\n throw new RangeError(\"No value supplied for attribute \" + name);\n }\n built[name] = given;\n }\n return built;\n}\nfunction checkAttrs(attrs, values, type, name) {\n for (let name in values)\n if (!(name in attrs))\n throw new RangeError(`Unsupported attribute ${name} for ${type} of type ${name}`);\n for (let name in attrs) {\n let attr = attrs[name];\n if (attr.validate)\n attr.validate(values[name]);\n }\n}\nfunction initAttrs(typeName, attrs) {\n let result = Object.create(null);\n if (attrs)\n for (let name in attrs)\n result[name] = new Attribute(typeName, name, attrs[name]);\n return result;\n}\n/**\nNode types are objects allocated once per `Schema` and used to\n[tag](https://prosemirror.net/docs/ref/#model.Node.type) `Node` instances. They contain information\nabout the node type, such as its name and what kind of node it\nrepresents.\n*/\nclass NodeType {\n /**\n @internal\n */\n constructor(\n /**\n The name the node type has in this schema.\n */\n name, \n /**\n A link back to the `Schema` the node type belongs to.\n */\n schema, \n /**\n The spec that this type is based on\n */\n spec) {\n this.name = name;\n this.schema = schema;\n this.spec = spec;\n /**\n The set of marks allowed in this node. `null` means all marks\n are allowed.\n */\n this.markSet = null;\n this.groups = spec.group ? spec.group.split(\" \") : [];\n this.attrs = initAttrs(name, spec.attrs);\n this.defaultAttrs = defaultAttrs(this.attrs);\n this.contentMatch = null;\n this.inlineContent = null;\n this.isBlock = !(spec.inline || name == \"text\");\n this.isText = name == \"text\";\n }\n /**\n True if this is an inline type.\n */\n get isInline() { return !this.isBlock; }\n /**\n True if this is a textblock type, a block that contains inline\n content.\n */\n get isTextblock() { return this.isBlock && this.inlineContent; }\n /**\n True for node types that allow no content.\n */\n get isLeaf() { return this.contentMatch == ContentMatch.empty; }\n /**\n True when this node is an atom, i.e. when it does not have\n directly editable content.\n */\n get isAtom() { return this.isLeaf || !!this.spec.atom; }\n /**\n The node type's [whitespace](https://prosemirror.net/docs/ref/#model.NodeSpec.whitespace) option.\n */\n get whitespace() {\n return this.spec.whitespace || (this.spec.code ? \"pre\" : \"normal\");\n }\n /**\n Tells you whether this node type has any required attributes.\n */\n hasRequiredAttrs() {\n for (let n in this.attrs)\n if (this.attrs[n].isRequired)\n return true;\n return false;\n }\n /**\n Indicates whether this node allows some of the same content as\n the given node type.\n */\n compatibleContent(other) {\n return this == other || this.contentMatch.compatible(other.contentMatch);\n }\n /**\n @internal\n */\n computeAttrs(attrs) {\n if (!attrs && this.defaultAttrs)\n return this.defaultAttrs;\n else\n return computeAttrs(this.attrs, attrs);\n }\n /**\n Create a `Node` of this type. The given attributes are\n checked and defaulted (you can pass `null` to use the type's\n defaults entirely, if no required attributes exist). `content`\n may be a `Fragment`, a node, an array of nodes, or\n `null`. Similarly `marks` may be `null` to default to the empty\n set of marks.\n */\n create(attrs = null, content, marks) {\n if (this.isText)\n throw new Error(\"NodeType.create can't construct text nodes\");\n return new Node(this, this.computeAttrs(attrs), Fragment.from(content), Mark.setFrom(marks));\n }\n /**\n Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but check the given content\n against the node type's content restrictions, and throw an error\n if it doesn't match.\n */\n createChecked(attrs = null, content, marks) {\n content = Fragment.from(content);\n this.checkContent(content);\n return new Node(this, this.computeAttrs(attrs), content, Mark.setFrom(marks));\n }\n /**\n Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but see if it is\n necessary to add nodes to the start or end of the given fragment\n to make it fit the node. If no fitting wrapping can be found,\n return null. Note that, due to the fact that required nodes can\n always be created, this will always succeed if you pass null or\n `Fragment.empty` as content.\n */\n createAndFill(attrs = null, content, marks) {\n attrs = this.computeAttrs(attrs);\n content = Fragment.from(content);\n if (content.size) {\n let before = this.contentMatch.fillBefore(content);\n if (!before)\n return null;\n content = before.append(content);\n }\n let matched = this.contentMatch.matchFragment(content);\n let after = matched && matched.fillBefore(Fragment.empty, true);\n if (!after)\n return null;\n return new Node(this, attrs, content.append(after), Mark.setFrom(marks));\n }\n /**\n Returns true if the given fragment is valid content for this node\n type.\n */\n validContent(content) {\n let result = this.contentMatch.matchFragment(content);\n if (!result || !result.validEnd)\n return false;\n for (let i = 0; i < content.childCount; i++)\n if (!this.allowsMarks(content.child(i).marks))\n return false;\n return true;\n }\n /**\n Throws a RangeError if the given fragment is not valid content for this\n node type.\n @internal\n */\n checkContent(content) {\n if (!this.validContent(content))\n throw new RangeError(`Invalid content for node ${this.name}: ${content.toString().slice(0, 50)}`);\n }\n /**\n @internal\n */\n checkAttrs(attrs) {\n checkAttrs(this.attrs, attrs, \"node\", this.name);\n }\n /**\n Check whether the given mark type is allowed in this node.\n */\n allowsMarkType(markType) {\n return this.markSet == null || this.markSet.indexOf(markType) > -1;\n }\n /**\n Test whether the given set of marks are allowed in this node.\n */\n allowsMarks(marks) {\n if (this.markSet == null)\n return true;\n for (let i = 0; i < marks.length; i++)\n if (!this.allowsMarkType(marks[i].type))\n return false;\n return true;\n }\n /**\n Removes the marks that are not allowed in this node from the given set.\n */\n allowedMarks(marks) {\n if (this.markSet == null)\n return marks;\n let copy;\n for (let i = 0; i < marks.length; i++) {\n if (!this.allowsMarkType(marks[i].type)) {\n if (!copy)\n copy = marks.slice(0, i);\n }\n else if (copy) {\n copy.push(marks[i]);\n }\n }\n return !copy ? marks : copy.length ? copy : Mark.none;\n }\n /**\n @internal\n */\n static compile(nodes, schema) {\n let result = Object.create(null);\n nodes.forEach((name, spec) => result[name] = new NodeType(name, schema, spec));\n let topType = schema.spec.topNode || \"doc\";\n if (!result[topType])\n throw new RangeError(\"Schema is missing its top node type ('\" + topType + \"')\");\n if (!result.text)\n throw new RangeError(\"Every schema needs a 'text' type\");\n for (let _ in result.text.attrs)\n throw new RangeError(\"The text node type should not have attributes\");\n return result;\n }\n}\nfunction validateType(typeName, attrName, type) {\n let types = type.split(\"|\");\n return (value) => {\n let name = value === null ? \"null\" : typeof value;\n if (types.indexOf(name) < 0)\n throw new RangeError(`Expected value of type ${types} for attribute ${attrName} on type ${typeName}, got ${name}`);\n };\n}\n// Attribute descriptors\nclass Attribute {\n constructor(typeName, attrName, options) {\n this.hasDefault = Object.prototype.hasOwnProperty.call(options, \"default\");\n this.default = options.default;\n this.validate = typeof options.validate == \"string\" ? validateType(typeName, attrName, options.validate) : options.validate;\n }\n get isRequired() {\n return !this.hasDefault;\n }\n}\n// Marks\n/**\nLike nodes, marks (which are associated with nodes to signify\nthings like emphasis or being part of a link) are\n[tagged](https://prosemirror.net/docs/ref/#model.Mark.type) with type objects, which are\ninstantiated once per `Schema`.\n*/\nclass MarkType {\n /**\n @internal\n */\n constructor(\n /**\n The name of the mark type.\n */\n name, \n /**\n @internal\n */\n rank, \n /**\n The schema that this mark type instance is part of.\n */\n schema, \n /**\n The spec on which the type is based.\n */\n spec) {\n this.name = name;\n this.rank = rank;\n this.schema = schema;\n this.spec = spec;\n this.attrs = initAttrs(name, spec.attrs);\n this.excluded = null;\n let defaults = defaultAttrs(this.attrs);\n this.instance = defaults ? new Mark(this, defaults) : null;\n }\n /**\n Create a mark of this type. `attrs` may be `null` or an object\n containing only some of the mark's attributes. The others, if\n they have defaults, will be added.\n */\n create(attrs = null) {\n if (!attrs && this.instance)\n return this.instance;\n return new Mark(this, computeAttrs(this.attrs, attrs));\n }\n /**\n @internal\n */\n static compile(marks, schema) {\n let result = Object.create(null), rank = 0;\n marks.forEach((name, spec) => result[name] = new MarkType(name, rank++, schema, spec));\n return result;\n }\n /**\n When there is a mark of this type in the given set, a new set\n without it is returned. Otherwise, the input set is returned.\n */\n removeFromSet(set) {\n for (var i = 0; i < set.length; i++)\n if (set[i].type == this) {\n set = set.slice(0, i).concat(set.slice(i + 1));\n i--;\n }\n return set;\n }\n /**\n Tests whether there is a mark of this type in the given set.\n */\n isInSet(set) {\n for (let i = 0; i < set.length; i++)\n if (set[i].type == this)\n return set[i];\n }\n /**\n @internal\n */\n checkAttrs(attrs) {\n checkAttrs(this.attrs, attrs, \"mark\", this.name);\n }\n /**\n Queries whether a given mark type is\n [excluded](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) by this one.\n */\n excludes(other) {\n return this.excluded.indexOf(other) > -1;\n }\n}\n/**\nA document schema. Holds [node](https://prosemirror.net/docs/ref/#model.NodeType) and [mark\ntype](https://prosemirror.net/docs/ref/#model.MarkType) objects for the nodes and marks that may\noccur in conforming documents, and provides functionality for\ncreating and deserializing such documents.\n\nWhen given, the type parameters provide the names of the nodes and\nmarks in this schema.\n*/\nclass Schema {\n /**\n Construct a schema from a schema [specification](https://prosemirror.net/docs/ref/#model.SchemaSpec).\n */\n constructor(spec) {\n /**\n The [linebreak\n replacement](https://prosemirror.net/docs/ref/#model.NodeSpec.linebreakReplacement) node defined\n in this schema, if any.\n */\n this.linebreakReplacement = null;\n /**\n An object for storing whatever values modules may want to\n compute and cache per schema. (If you want to store something\n in it, try to use property names unlikely to clash.)\n */\n this.cached = Object.create(null);\n let instanceSpec = this.spec = {};\n for (let prop in spec)\n instanceSpec[prop] = spec[prop];\n instanceSpec.nodes = OrderedMap.from(spec.nodes),\n instanceSpec.marks = OrderedMap.from(spec.marks || {}),\n this.nodes = NodeType.compile(this.spec.nodes, this);\n this.marks = MarkType.compile(this.spec.marks, this);\n let contentExprCache = Object.create(null);\n for (let prop in this.nodes) {\n if (prop in this.marks)\n throw new RangeError(prop + \" can not be both a node and a mark\");\n let type = this.nodes[prop], contentExpr = type.spec.content || \"\", markExpr = type.spec.marks;\n type.contentMatch = contentExprCache[contentExpr] ||\n (contentExprCache[contentExpr] = ContentMatch.parse(contentExpr, this.nodes));\n type.inlineContent = type.contentMatch.inlineContent;\n if (type.spec.linebreakReplacement) {\n if (this.linebreakReplacement)\n throw new RangeError(\"Multiple linebreak nodes defined\");\n if (!type.isInline || !type.isLeaf)\n throw new RangeError(\"Linebreak replacement nodes must be inline leaf nodes\");\n this.linebreakReplacement = type;\n }\n type.markSet = markExpr == \"_\" ? null :\n markExpr ? gatherMarks(this, markExpr.split(\" \")) :\n markExpr == \"\" || !type.inlineContent ? [] : null;\n }\n for (let prop in this.marks) {\n let type = this.marks[prop], excl = type.spec.excludes;\n type.excluded = excl == null ? [type] : excl == \"\" ? [] : gatherMarks(this, excl.split(\" \"));\n }\n this.nodeFromJSON = this.nodeFromJSON.bind(this);\n this.markFromJSON = this.markFromJSON.bind(this);\n this.topNodeType = this.nodes[this.spec.topNode || \"doc\"];\n this.cached.wrappings = Object.create(null);\n }\n /**\n Create a node in this schema. The `type` may be a string or a\n `NodeType` instance. Attributes will be extended with defaults,\n `content` may be a `Fragment`, `null`, a `Node`, or an array of\n nodes.\n */\n node(type, attrs = null, content, marks) {\n if (typeof type == \"string\")\n type = this.nodeType(type);\n else if (!(type instanceof NodeType))\n throw new RangeError(\"Invalid node type: \" + type);\n else if (type.schema != this)\n throw new RangeError(\"Node type from different schema used (\" + type.name + \")\");\n return type.createChecked(attrs, content, marks);\n }\n /**\n Create a text node in the schema. Empty text nodes are not\n allowed.\n */\n text(text, marks) {\n let type = this.nodes.text;\n return new TextNode(type, type.defaultAttrs, text, Mark.setFrom(marks));\n }\n /**\n Create a mark with the given type and attributes.\n */\n mark(type, attrs) {\n if (typeof type == \"string\")\n type = this.marks[type];\n return type.create(attrs);\n }\n /**\n Deserialize a node from its JSON representation. This method is\n bound.\n */\n nodeFromJSON(json) {\n return Node.fromJSON(this, json);\n }\n /**\n Deserialize a mark from its JSON representation. This method is\n bound.\n */\n markFromJSON(json) {\n return Mark.fromJSON(this, json);\n }\n /**\n @internal\n */\n nodeType(name) {\n let found = this.nodes[name];\n if (!found)\n throw new RangeError(\"Unknown node type: \" + name);\n return found;\n }\n}\nfunction gatherMarks(schema, marks) {\n let found = [];\n for (let i = 0; i < marks.length; i++) {\n let name = marks[i], mark = schema.marks[name], ok = mark;\n if (mark) {\n found.push(mark);\n }\n else {\n for (let prop in schema.marks) {\n let mark = schema.marks[prop];\n if (name == \"_\" || (mark.spec.group && mark.spec.group.split(\" \").indexOf(name) > -1))\n found.push(ok = mark);\n }\n }\n if (!ok)\n throw new SyntaxError(\"Unknown mark type: '\" + marks[i] + \"'\");\n }\n return found;\n}\n\nfunction isTagRule(rule) { return rule.tag != null; }\nfunction isStyleRule(rule) { return rule.style != null; }\n/**\nA DOM parser represents a strategy for parsing DOM content into a\nProseMirror document conforming to a given schema. Its behavior is\ndefined by an array of [rules](https://prosemirror.net/docs/ref/#model.ParseRule).\n*/\nclass DOMParser {\n /**\n Create a parser that targets the given schema, using the given\n parsing rules.\n */\n constructor(\n /**\n The schema into which the parser parses.\n */\n schema, \n /**\n The set of [parse rules](https://prosemirror.net/docs/ref/#model.ParseRule) that the parser\n uses, in order of precedence.\n */\n rules) {\n this.schema = schema;\n this.rules = rules;\n /**\n @internal\n */\n this.tags = [];\n /**\n @internal\n */\n this.styles = [];\n let matchedStyles = this.matchedStyles = [];\n rules.forEach(rule => {\n if (isTagRule(rule)) {\n this.tags.push(rule);\n }\n else if (isStyleRule(rule)) {\n let prop = /[^=]*/.exec(rule.style)[0];\n if (matchedStyles.indexOf(prop) < 0)\n matchedStyles.push(prop);\n this.styles.push(rule);\n }\n });\n // Only normalize list elements when lists in the schema can't directly contain themselves\n this.normalizeLists = !this.tags.some(r => {\n if (!/^(ul|ol)\\b/.test(r.tag) || !r.node)\n return false;\n let node = schema.nodes[r.node];\n return node.contentMatch.matchType(node);\n });\n }\n /**\n Parse a document from the content of a DOM node.\n */\n parse(dom, options = {}) {\n let context = new ParseContext(this, options, false);\n context.addAll(dom, Mark.none, options.from, options.to);\n return context.finish();\n }\n /**\n Parses the content of the given DOM node, like\n [`parse`](https://prosemirror.net/docs/ref/#model.DOMParser.parse), and takes the same set of\n options. But unlike that method, which produces a whole node,\n this one returns a slice that is open at the sides, meaning that\n the schema constraints aren't applied to the start of nodes to\n the left of the input and the end of nodes at the end.\n */\n parseSlice(dom, options = {}) {\n let context = new ParseContext(this, options, true);\n context.addAll(dom, Mark.none, options.from, options.to);\n return Slice.maxOpen(context.finish());\n }\n /**\n @internal\n */\n matchTag(dom, context, after) {\n for (let i = after ? this.tags.indexOf(after) + 1 : 0; i < this.tags.length; i++) {\n let rule = this.tags[i];\n if (matches(dom, rule.tag) &&\n (rule.namespace === undefined || dom.namespaceURI == rule.namespace) &&\n (!rule.context || context.matchesContext(rule.context))) {\n if (rule.getAttrs) {\n let result = rule.getAttrs(dom);\n if (result === false)\n continue;\n rule.attrs = result || undefined;\n }\n return rule;\n }\n }\n }\n /**\n @internal\n */\n matchStyle(prop, value, context, after) {\n for (let i = after ? this.styles.indexOf(after) + 1 : 0; i < this.styles.length; i++) {\n let rule = this.styles[i], style = rule.style;\n if (style.indexOf(prop) != 0 ||\n rule.context && !context.matchesContext(rule.context) ||\n // Test that the style string either precisely matches the prop,\n // or has an '=' sign after the prop, followed by the given\n // value.\n style.length > prop.length &&\n (style.charCodeAt(prop.length) != 61 || style.slice(prop.length + 1) != value))\n continue;\n if (rule.getAttrs) {\n let result = rule.getAttrs(value);\n if (result === false)\n continue;\n rule.attrs = result || undefined;\n }\n return rule;\n }\n }\n /**\n @internal\n */\n static schemaRules(schema) {\n let result = [];\n function insert(rule) {\n let priority = rule.priority == null ? 50 : rule.priority, i = 0;\n for (; i < result.length; i++) {\n let next = result[i], nextPriority = next.priority == null ? 50 : next.priority;\n if (nextPriority < priority)\n break;\n }\n result.splice(i, 0, rule);\n }\n for (let name in schema.marks) {\n let rules = schema.marks[name].spec.parseDOM;\n if (rules)\n rules.forEach(rule => {\n insert(rule = copy(rule));\n if (!(rule.mark || rule.ignore || rule.clearMark))\n rule.mark = name;\n });\n }\n for (let name in schema.nodes) {\n let rules = schema.nodes[name].spec.parseDOM;\n if (rules)\n rules.forEach(rule => {\n insert(rule = copy(rule));\n if (!(rule.node || rule.ignore || rule.mark))\n rule.node = name;\n });\n }\n return result;\n }\n /**\n Construct a DOM parser using the parsing rules listed in a\n schema's [node specs](https://prosemirror.net/docs/ref/#model.NodeSpec.parseDOM), reordered by\n [priority](https://prosemirror.net/docs/ref/#model.ParseRule.priority).\n */\n static fromSchema(schema) {\n return schema.cached.domParser ||\n (schema.cached.domParser = new DOMParser(schema, DOMParser.schemaRules(schema)));\n }\n}\nconst blockTags = {\n address: true, article: true, aside: true, blockquote: true, canvas: true,\n dd: true, div: true, dl: true, fieldset: true, figcaption: true, figure: true,\n footer: true, form: true, h1: true, h2: true, h3: true, h4: true, h5: true,\n h6: true, header: true, hgroup: true, hr: true, li: true, noscript: true, ol: true,\n output: true, p: true, pre: true, section: true, table: true, tfoot: true, ul: true\n};\nconst ignoreTags = {\n head: true, noscript: true, object: true, script: true, style: true, title: true\n};\nconst listTags = { ol: true, ul: true };\n// Using a bitfield for node context options\nconst OPT_PRESERVE_WS = 1, OPT_PRESERVE_WS_FULL = 2, OPT_OPEN_LEFT = 4;\nfunction wsOptionsFor(type, preserveWhitespace, base) {\n if (preserveWhitespace != null)\n return (preserveWhitespace ? OPT_PRESERVE_WS : 0) |\n (preserveWhitespace === \"full\" ? OPT_PRESERVE_WS_FULL : 0);\n return type && type.whitespace == \"pre\" ? OPT_PRESERVE_WS | OPT_PRESERVE_WS_FULL : base & ~OPT_OPEN_LEFT;\n}\nclass NodeContext {\n constructor(type, attrs, marks, solid, match, options) {\n this.type = type;\n this.attrs = attrs;\n this.marks = marks;\n this.solid = solid;\n this.options = options;\n this.content = [];\n // Marks applied to the node's children\n this.activeMarks = Mark.none;\n this.match = match || (options & OPT_OPEN_LEFT ? null : type.contentMatch);\n }\n findWrapping(node) {\n if (!this.match) {\n if (!this.type)\n return [];\n let fill = this.type.contentMatch.fillBefore(Fragment.from(node));\n if (fill) {\n this.match = this.type.contentMatch.matchFragment(fill);\n }\n else {\n let start = this.type.contentMatch, wrap;\n if (wrap = start.findWrapping(node.type)) {\n this.match = start;\n return wrap;\n }\n else {\n return null;\n }\n }\n }\n return this.match.findWrapping(node.type);\n }\n finish(openEnd) {\n if (!(this.options & OPT_PRESERVE_WS)) { // Strip trailing whitespace\n let last = this.content[this.content.length - 1], m;\n if (last && last.isText && (m = /[ \\t\\r\\n\\u000c]+$/.exec(last.text))) {\n let text = last;\n if (last.text.length == m[0].length)\n this.content.pop();\n else\n this.content[this.content.length - 1] = text.withText(text.text.slice(0, text.text.length - m[0].length));\n }\n }\n let content = Fragment.from(this.content);\n if (!openEnd && this.match)\n content = content.append(this.match.fillBefore(Fragment.empty, true));\n return this.type ? this.type.create(this.attrs, content, this.marks) : content;\n }\n inlineContext(node) {\n if (this.type)\n return this.type.inlineContent;\n if (this.content.length)\n return this.content[0].isInline;\n return node.parentNode && !blockTags.hasOwnProperty(node.parentNode.nodeName.toLowerCase());\n }\n}\nclass ParseContext {\n constructor(\n // The parser we are using.\n parser, \n // The options passed to this parse.\n options, isOpen) {\n this.parser = parser;\n this.options = options;\n this.isOpen = isOpen;\n this.open = 0;\n let topNode = options.topNode, topContext;\n let topOptions = wsOptionsFor(null, options.preserveWhitespace, 0) | (isOpen ? OPT_OPEN_LEFT : 0);\n if (topNode)\n topContext = new NodeContext(topNode.type, topNode.attrs, Mark.none, true, options.topMatch || topNode.type.contentMatch, topOptions);\n else if (isOpen)\n topContext = new NodeContext(null, null, Mark.none, true, null, topOptions);\n else\n topContext = new NodeContext(parser.schema.topNodeType, null, Mark.none, true, null, topOptions);\n this.nodes = [topContext];\n this.find = options.findPositions;\n this.needsBlock = false;\n }\n get top() {\n return this.nodes[this.open];\n }\n // Add a DOM node to the content. Text is inserted as text node,\n // otherwise, the node is passed to `addElement` or, if it has a\n // `style` attribute, `addElementWithStyles`.\n addDOM(dom, marks) {\n if (dom.nodeType == 3)\n this.addTextNode(dom, marks);\n else if (dom.nodeType == 1)\n this.addElement(dom, marks);\n }\n addTextNode(dom, marks) {\n let value = dom.nodeValue;\n let top = this.top;\n if (top.options & OPT_PRESERVE_WS_FULL ||\n top.inlineContext(dom) ||\n /[^ \\t\\r\\n\\u000c]/.test(value)) {\n if (!(top.options & OPT_PRESERVE_WS)) {\n value = value.replace(/[ \\t\\r\\n\\u000c]+/g, \" \");\n // If this starts with whitespace, and there is no node before it, or\n // a hard break, or a text node that ends with whitespace, strip the\n // leading space.\n if (/^[ \\t\\r\\n\\u000c]/.test(value) && this.open == this.nodes.length - 1) {\n let nodeBefore = top.content[top.content.length - 1];\n let domNodeBefore = dom.previousSibling;\n if (!nodeBefore ||\n (domNodeBefore && domNodeBefore.nodeName == 'BR') ||\n (nodeBefore.isText && /[ \\t\\r\\n\\u000c]$/.test(nodeBefore.text)))\n value = value.slice(1);\n }\n }\n else if (!(top.options & OPT_PRESERVE_WS_FULL)) {\n value = value.replace(/\\r?\\n|\\r/g, \" \");\n }\n else {\n value = value.replace(/\\r\\n?/g, \"\\n\");\n }\n if (value)\n this.insertNode(this.parser.schema.text(value), marks);\n this.findInText(dom);\n }\n else {\n this.findInside(dom);\n }\n }\n // Try to find a handler for the given tag and use that to parse. If\n // none is found, the element's content nodes are added directly.\n addElement(dom, marks, matchAfter) {\n let name = dom.nodeName.toLowerCase(), ruleID;\n if (listTags.hasOwnProperty(name) && this.parser.normalizeLists)\n normalizeList(dom);\n let rule = (this.options.ruleFromNode && this.options.ruleFromNode(dom)) ||\n (ruleID = this.parser.matchTag(dom, this, matchAfter));\n if (rule ? rule.ignore : ignoreTags.hasOwnProperty(name)) {\n this.findInside(dom);\n this.ignoreFallback(dom, marks);\n }\n else if (!rule || rule.skip || rule.closeParent) {\n if (rule && rule.closeParent)\n this.open = Math.max(0, this.open - 1);\n else if (rule && rule.skip.nodeType)\n dom = rule.skip;\n let sync, top = this.top, oldNeedsBlock = this.needsBlock;\n if (blockTags.hasOwnProperty(name)) {\n if (top.content.length && top.content[0].isInline && this.open) {\n this.open--;\n top = this.top;\n }\n sync = true;\n if (!top.type)\n this.needsBlock = true;\n }\n else if (!dom.firstChild) {\n this.leafFallback(dom, marks);\n return;\n }\n let innerMarks = rule && rule.skip ? marks : this.readStyles(dom, marks);\n if (innerMarks)\n this.addAll(dom, innerMarks);\n if (sync)\n this.sync(top);\n this.needsBlock = oldNeedsBlock;\n }\n else {\n let innerMarks = this.readStyles(dom, marks);\n if (innerMarks)\n this.addElementByRule(dom, rule, innerMarks, rule.consuming === false ? ruleID : undefined);\n }\n }\n // Called for leaf DOM nodes that would otherwise be ignored\n leafFallback(dom, marks) {\n if (dom.nodeName == \"BR\" && this.top.type && this.top.type.inlineContent)\n this.addTextNode(dom.ownerDocument.createTextNode(\"\\n\"), marks);\n }\n // Called for ignored nodes\n ignoreFallback(dom, marks) {\n // Ignored BR nodes should at least create an inline context\n if (dom.nodeName == \"BR\" && (!this.top.type || !this.top.type.inlineContent))\n this.findPlace(this.parser.schema.text(\"-\"), marks);\n }\n // Run any style parser associated with the node's styles. Either\n // return an updated array of marks, or null to indicate some of the\n // styles had a rule with `ignore` set.\n readStyles(dom, marks) {\n let styles = dom.style;\n // Because many properties will only show up in 'normalized' form\n // in `style.item` (i.e. text-decoration becomes\n // text-decoration-line, text-decoration-color, etc), we directly\n // query the styles mentioned in our rules instead of iterating\n // over the items.\n if (styles && styles.length)\n for (let i = 0; i < this.parser.matchedStyles.length; i++) {\n let name = this.parser.matchedStyles[i], value = styles.getPropertyValue(name);\n if (value)\n for (let after = undefined;;) {\n let rule = this.parser.matchStyle(name, value, this, after);\n if (!rule)\n break;\n if (rule.ignore)\n return null;\n if (rule.clearMark)\n marks = marks.filter(m => !rule.clearMark(m));\n else\n marks = marks.concat(this.parser.schema.marks[rule.mark].create(rule.attrs));\n if (rule.consuming === false)\n after = rule;\n else\n break;\n }\n }\n return marks;\n }\n // Look up a handler for the given node. If none are found, return\n // false. Otherwise, apply it, use its return value to drive the way\n // the node's content is wrapped, and return true.\n addElementByRule(dom, rule, marks, continueAfter) {\n let sync, nodeType;\n if (rule.node) {\n nodeType = this.parser.schema.nodes[rule.node];\n if (!nodeType.isLeaf) {\n let inner = this.enter(nodeType, rule.attrs || null, marks, rule.preserveWhitespace);\n if (inner) {\n sync = true;\n marks = inner;\n }\n }\n else if (!this.insertNode(nodeType.create(rule.attrs), marks)) {\n this.leafFallback(dom, marks);\n }\n }\n else {\n let markType = this.parser.schema.marks[rule.mark];\n marks = marks.concat(markType.create(rule.attrs));\n }\n let startIn = this.top;\n if (nodeType && nodeType.isLeaf) {\n this.findInside(dom);\n }\n else if (continueAfter) {\n this.addElement(dom, marks, continueAfter);\n }\n else if (rule.getContent) {\n this.findInside(dom);\n rule.getContent(dom, this.parser.schema).forEach(node => this.insertNode(node, marks));\n }\n else {\n let contentDOM = dom;\n if (typeof rule.contentElement == \"string\")\n contentDOM = dom.querySelector(rule.contentElement);\n else if (typeof rule.contentElement == \"function\")\n contentDOM = rule.contentElement(dom);\n else if (rule.contentElement)\n contentDOM = rule.contentElement;\n this.findAround(dom, contentDOM, true);\n this.addAll(contentDOM, marks);\n }\n if (sync && this.sync(startIn))\n this.open--;\n }\n // Add all child nodes between `startIndex` and `endIndex` (or the\n // whole node, if not given). If `sync` is passed, use it to\n // synchronize after every block element.\n addAll(parent, marks, startIndex, endIndex) {\n let index = startIndex || 0;\n for (let dom = startIndex ? parent.childNodes[startIndex] : parent.firstChild, end = endIndex == null ? null : parent.childNodes[endIndex]; dom != end; dom = dom.nextSibling, ++index) {\n this.findAtPoint(parent, index);\n this.addDOM(dom, marks);\n }\n this.findAtPoint(parent, index);\n }\n // Try to find a way to fit the given node type into the current\n // context. May add intermediate wrappers and/or leave non-solid\n // nodes that we're in.\n findPlace(node, marks) {\n let route, sync;\n for (let depth = this.open; depth >= 0; depth--) {\n let cx = this.nodes[depth];\n let found = cx.findWrapping(node);\n if (found && (!route || route.length > found.length)) {\n route = found;\n sync = cx;\n if (!found.length)\n break;\n }\n if (cx.solid)\n break;\n }\n if (!route)\n return null;\n this.sync(sync);\n for (let i = 0; i < route.length; i++)\n marks = this.enterInner(route[i], null, marks, false);\n return marks;\n }\n // Try to insert the given node, adjusting the context when needed.\n insertNode(node, marks) {\n if (node.isInline && this.needsBlock && !this.top.type) {\n let block = this.textblockFromContext();\n if (block)\n marks = this.enterInner(block, null, marks);\n }\n let innerMarks = this.findPlace(node, marks);\n if (innerMarks) {\n this.closeExtra();\n let top = this.top;\n if (top.match)\n top.match = top.match.matchType(node.type);\n let nodeMarks = Mark.none;\n for (let m of innerMarks.concat(node.marks))\n if (top.type ? top.type.allowsMarkType(m.type) : markMayApply(m.type, node.type))\n nodeMarks = m.addToSet(nodeMarks);\n top.content.push(node.mark(nodeMarks));\n return true;\n }\n return false;\n }\n // Try to start a node of the given type, adjusting the context when\n // necessary.\n enter(type, attrs, marks, preserveWS) {\n let innerMarks = this.findPlace(type.create(attrs), marks);\n if (innerMarks)\n innerMarks = this.enterInner(type, attrs, marks, true, preserveWS);\n return innerMarks;\n }\n // Open a node of the given type\n enterInner(type, attrs, marks, solid = false, preserveWS) {\n this.closeExtra();\n let top = this.top;\n top.match = top.match && top.match.matchType(type);\n let options = wsOptionsFor(type, preserveWS, top.options);\n if ((top.options & OPT_OPEN_LEFT) && top.content.length == 0)\n options |= OPT_OPEN_LEFT;\n let applyMarks = Mark.none;\n marks = marks.filter(m => {\n if (top.type ? top.type.allowsMarkType(m.type) : markMayApply(m.type, type)) {\n applyMarks = m.addToSet(applyMarks);\n return false;\n }\n return true;\n });\n this.nodes.push(new NodeContext(type, attrs, applyMarks, solid, null, options));\n this.open++;\n return marks;\n }\n // Make sure all nodes above this.open are finished and added to\n // their parents\n closeExtra(openEnd = false) {\n let i = this.nodes.length - 1;\n if (i > this.open) {\n for (; i > this.open; i--)\n this.nodes[i - 1].content.push(this.nodes[i].finish(openEnd));\n this.nodes.length = this.open + 1;\n }\n }\n finish() {\n this.open = 0;\n this.closeExtra(this.isOpen);\n return this.nodes[0].finish(this.isOpen || this.options.topOpen);\n }\n sync(to) {\n for (let i = this.open; i >= 0; i--)\n if (this.nodes[i] == to) {\n this.open = i;\n return true;\n }\n return false;\n }\n get currentPos() {\n this.closeExtra();\n let pos = 0;\n for (let i = this.open; i >= 0; i--) {\n let content = this.nodes[i].content;\n for (let j = content.length - 1; j >= 0; j--)\n pos += content[j].nodeSize;\n if (i)\n pos++;\n }\n return pos;\n }\n findAtPoint(parent, offset) {\n if (this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].node == parent && this.find[i].offset == offset)\n this.find[i].pos = this.currentPos;\n }\n }\n findInside(parent) {\n if (this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node))\n this.find[i].pos = this.currentPos;\n }\n }\n findAround(parent, content, before) {\n if (parent != content && this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node)) {\n let pos = content.compareDocumentPosition(this.find[i].node);\n if (pos & (before ? 2 : 4))\n this.find[i].pos = this.currentPos;\n }\n }\n }\n findInText(textNode) {\n if (this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].node == textNode)\n this.find[i].pos = this.currentPos - (textNode.nodeValue.length - this.find[i].offset);\n }\n }\n // Determines whether the given context string matches this context.\n matchesContext(context) {\n if (context.indexOf(\"|\") > -1)\n return context.split(/\\s*\\|\\s*/).some(this.matchesContext, this);\n let parts = context.split(\"/\");\n let option = this.options.context;\n let useRoot = !this.isOpen && (!option || option.parent.type == this.nodes[0].type);\n let minDepth = -(option ? option.depth + 1 : 0) + (useRoot ? 0 : 1);\n let match = (i, depth) => {\n for (; i >= 0; i--) {\n let part = parts[i];\n if (part == \"\") {\n if (i == parts.length - 1 || i == 0)\n continue;\n for (; depth >= minDepth; depth--)\n if (match(i - 1, depth))\n return true;\n return false;\n }\n else {\n let next = depth > 0 || (depth == 0 && useRoot) ? this.nodes[depth].type\n : option && depth >= minDepth ? option.node(depth - minDepth).type\n : null;\n if (!next || (next.name != part && next.groups.indexOf(part) == -1))\n return false;\n depth--;\n }\n }\n return true;\n };\n return match(parts.length - 1, this.open);\n }\n textblockFromContext() {\n let $context = this.options.context;\n if ($context)\n for (let d = $context.depth; d >= 0; d--) {\n let deflt = $context.node(d).contentMatchAt($context.indexAfter(d)).defaultType;\n if (deflt && deflt.isTextblock && deflt.defaultAttrs)\n return deflt;\n }\n for (let name in this.parser.schema.nodes) {\n let type = this.parser.schema.nodes[name];\n if (type.isTextblock && type.defaultAttrs)\n return type;\n }\n }\n}\n// Kludge to work around directly nested list nodes produced by some\n// tools and allowed by browsers to mean that the nested list is\n// actually part of the list item above it.\nfunction normalizeList(dom) {\n for (let child = dom.firstChild, prevItem = null; child; child = child.nextSibling) {\n let name = child.nodeType == 1 ? child.nodeName.toLowerCase() : null;\n if (name && listTags.hasOwnProperty(name) && prevItem) {\n prevItem.appendChild(child);\n child = prevItem;\n }\n else if (name == \"li\") {\n prevItem = child;\n }\n else if (name) {\n prevItem = null;\n }\n }\n}\n// Apply a CSS selector.\nfunction matches(dom, selector) {\n return (dom.matches || dom.msMatchesSelector || dom.webkitMatchesSelector || dom.mozMatchesSelector).call(dom, selector);\n}\nfunction copy(obj) {\n let copy = {};\n for (let prop in obj)\n copy[prop] = obj[prop];\n return copy;\n}\n// Used when finding a mark at the top level of a fragment parse.\n// Checks whether it would be reasonable to apply a given mark type to\n// a given node, by looking at the way the mark occurs in the schema.\nfunction markMayApply(markType, nodeType) {\n let nodes = nodeType.schema.nodes;\n for (let name in nodes) {\n let parent = nodes[name];\n if (!parent.allowsMarkType(markType))\n continue;\n let seen = [], scan = (match) => {\n seen.push(match);\n for (let i = 0; i < match.edgeCount; i++) {\n let { type, next } = match.edge(i);\n if (type == nodeType)\n return true;\n if (seen.indexOf(next) < 0 && scan(next))\n return true;\n }\n };\n if (scan(parent.contentMatch))\n return true;\n }\n}\n\n/**\nA DOM serializer knows how to convert ProseMirror nodes and\nmarks of various types to DOM nodes.\n*/\nclass DOMSerializer {\n /**\n Create a serializer. `nodes` should map node names to functions\n that take a node and return a description of the corresponding\n DOM. `marks` does the same for mark names, but also gets an\n argument that tells it whether the mark's content is block or\n inline content (for typical use, it'll always be inline). A mark\n serializer may be `null` to indicate that marks of that type\n should not be serialized.\n */\n constructor(\n /**\n The node serialization functions.\n */\n nodes, \n /**\n The mark serialization functions.\n */\n marks) {\n this.nodes = nodes;\n this.marks = marks;\n }\n /**\n Serialize the content of this fragment to a DOM fragment. When\n not in the browser, the `document` option, containing a DOM\n document, should be passed so that the serializer can create\n nodes.\n */\n serializeFragment(fragment, options = {}, target) {\n if (!target)\n target = doc(options).createDocumentFragment();\n let top = target, active = [];\n fragment.forEach(node => {\n if (active.length || node.marks.length) {\n let keep = 0, rendered = 0;\n while (keep < active.length && rendered < node.marks.length) {\n let next = node.marks[rendered];\n if (!this.marks[next.type.name]) {\n rendered++;\n continue;\n }\n if (!next.eq(active[keep][0]) || next.type.spec.spanning === false)\n break;\n keep++;\n rendered++;\n }\n while (keep < active.length)\n top = active.pop()[1];\n while (rendered < node.marks.length) {\n let add = node.marks[rendered++];\n let markDOM = this.serializeMark(add, node.isInline, options);\n if (markDOM) {\n active.push([add, top]);\n top.appendChild(markDOM.dom);\n top = markDOM.contentDOM || markDOM.dom;\n }\n }\n }\n top.appendChild(this.serializeNodeInner(node, options));\n });\n return target;\n }\n /**\n @internal\n */\n serializeNodeInner(node, options) {\n let { dom, contentDOM } = renderSpec(doc(options), this.nodes[node.type.name](node), null, node.attrs);\n if (contentDOM) {\n if (node.isLeaf)\n throw new RangeError(\"Content hole not allowed in a leaf node spec\");\n this.serializeFragment(node.content, options, contentDOM);\n }\n return dom;\n }\n /**\n Serialize this node to a DOM node. This can be useful when you\n need to serialize a part of a document, as opposed to the whole\n document. To serialize a whole document, use\n [`serializeFragment`](https://prosemirror.net/docs/ref/#model.DOMSerializer.serializeFragment) on\n its [content](https://prosemirror.net/docs/ref/#model.Node.content).\n */\n serializeNode(node, options = {}) {\n let dom = this.serializeNodeInner(node, options);\n for (let i = node.marks.length - 1; i >= 0; i--) {\n let wrap = this.serializeMark(node.marks[i], node.isInline, options);\n if (wrap) {\n (wrap.contentDOM || wrap.dom).appendChild(dom);\n dom = wrap.dom;\n }\n }\n return dom;\n }\n /**\n @internal\n */\n serializeMark(mark, inline, options = {}) {\n let toDOM = this.marks[mark.type.name];\n return toDOM && renderSpec(doc(options), toDOM(mark, inline), null, mark.attrs);\n }\n static renderSpec(doc, structure, xmlNS = null, blockArraysIn) {\n return renderSpec(doc, structure, xmlNS, blockArraysIn);\n }\n /**\n Build a serializer using the [`toDOM`](https://prosemirror.net/docs/ref/#model.NodeSpec.toDOM)\n properties in a schema's node and mark specs.\n */\n static fromSchema(schema) {\n return schema.cached.domSerializer ||\n (schema.cached.domSerializer = new DOMSerializer(this.nodesFromSchema(schema), this.marksFromSchema(schema)));\n }\n /**\n Gather the serializers in a schema's node specs into an object.\n This can be useful as a base to build a custom serializer from.\n */\n static nodesFromSchema(schema) {\n let result = gatherToDOM(schema.nodes);\n if (!result.text)\n result.text = node => node.text;\n return result;\n }\n /**\n Gather the serializers in a schema's mark specs into an object.\n */\n static marksFromSchema(schema) {\n return gatherToDOM(schema.marks);\n }\n}\nfunction gatherToDOM(obj) {\n let result = {};\n for (let name in obj) {\n let toDOM = obj[name].spec.toDOM;\n if (toDOM)\n result[name] = toDOM;\n }\n return result;\n}\nfunction doc(options) {\n return options.document || window.document;\n}\nconst suspiciousAttributeCache = new WeakMap();\nfunction suspiciousAttributes(attrs) {\n let value = suspiciousAttributeCache.get(attrs);\n if (value === undefined)\n suspiciousAttributeCache.set(attrs, value = suspiciousAttributesInner(attrs));\n return value;\n}\nfunction suspiciousAttributesInner(attrs) {\n let result = null;\n function scan(value) {\n if (value && typeof value == \"object\") {\n if (Array.isArray(value)) {\n if (typeof value[0] == \"string\") {\n if (!result)\n result = [];\n result.push(value);\n }\n else {\n for (let i = 0; i < value.length; i++)\n scan(value[i]);\n }\n }\n else {\n for (let prop in value)\n scan(value[prop]);\n }\n }\n }\n scan(attrs);\n return result;\n}\nfunction renderSpec(doc, structure, xmlNS, blockArraysIn) {\n if (typeof structure == \"string\")\n return { dom: doc.createTextNode(structure) };\n if (structure.nodeType != null)\n return { dom: structure };\n if (structure.dom && structure.dom.nodeType != null)\n return structure;\n let tagName = structure[0], suspicious;\n if (typeof tagName != \"string\")\n throw new RangeError(\"Invalid array passed to renderSpec\");\n if (blockArraysIn && (suspicious = suspiciousAttributes(blockArraysIn)) &&\n suspicious.indexOf(structure) > -1)\n throw new RangeError(\"Using an array from an attribute object as a DOM spec. This may be an attempted cross site scripting attack.\");\n let space = tagName.indexOf(\" \");\n if (space > 0) {\n xmlNS = tagName.slice(0, space);\n tagName = tagName.slice(space + 1);\n }\n let contentDOM;\n let dom = (xmlNS ? doc.createElementNS(xmlNS, tagName) : doc.createElement(tagName));\n let attrs = structure[1], start = 1;\n if (attrs && typeof attrs == \"object\" && attrs.nodeType == null && !Array.isArray(attrs)) {\n start = 2;\n for (let name in attrs)\n if (attrs[name] != null) {\n let space = name.indexOf(\" \");\n if (space > 0)\n dom.setAttributeNS(name.slice(0, space), name.slice(space + 1), attrs[name]);\n else\n dom.setAttribute(name, attrs[name]);\n }\n }\n for (let i = start; i < structure.length; i++) {\n let child = structure[i];\n if (child === 0) {\n if (i < structure.length - 1 || i > start)\n throw new RangeError(\"Content hole must be the only child of its parent node\");\n return { dom, contentDOM: dom };\n }\n else {\n let { dom: inner, contentDOM: innerContent } = renderSpec(doc, child, xmlNS, blockArraysIn);\n dom.appendChild(inner);\n if (innerContent) {\n if (contentDOM)\n throw new RangeError(\"Multiple content holes\");\n contentDOM = innerContent;\n }\n }\n }\n return { dom, contentDOM };\n}\n\nexport { ContentMatch, DOMParser, DOMSerializer, Fragment, Mark, MarkType, Node, NodeRange, NodeType, ReplaceError, ResolvedPos, Schema, Slice };\n","import { ReplaceError, Slice, Fragment, MarkType, Mark } from 'prosemirror-model';\n\n// Recovery values encode a range index and an offset. They are\n// represented as numbers, because tons of them will be created when\n// mapping, for example, a large number of decorations. The number's\n// lower 16 bits provide the index, the remaining bits the offset.\n//\n// Note: We intentionally don't use bit shift operators to en- and\n// decode these, since those clip to 32 bits, which we might in rare\n// cases want to overflow. A 64-bit float can represent 48-bit\n// integers precisely.\nconst lower16 = 0xffff;\nconst factor16 = Math.pow(2, 16);\nfunction makeRecover(index, offset) { return index + offset * factor16; }\nfunction recoverIndex(value) { return value & lower16; }\nfunction recoverOffset(value) { return (value - (value & lower16)) / factor16; }\nconst DEL_BEFORE = 1, DEL_AFTER = 2, DEL_ACROSS = 4, DEL_SIDE = 8;\n/**\nAn object representing a mapped position with extra\ninformation.\n*/\nclass MapResult {\n /**\n @internal\n */\n constructor(\n /**\n The mapped version of the position.\n */\n pos, \n /**\n @internal\n */\n delInfo, \n /**\n @internal\n */\n recover) {\n this.pos = pos;\n this.delInfo = delInfo;\n this.recover = recover;\n }\n /**\n Tells you whether the position was deleted, that is, whether the\n step removed the token on the side queried (via the `assoc`)\n argument from the document.\n */\n get deleted() { return (this.delInfo & DEL_SIDE) > 0; }\n /**\n Tells you whether the token before the mapped position was deleted.\n */\n get deletedBefore() { return (this.delInfo & (DEL_BEFORE | DEL_ACROSS)) > 0; }\n /**\n True when the token after the mapped position was deleted.\n */\n get deletedAfter() { return (this.delInfo & (DEL_AFTER | DEL_ACROSS)) > 0; }\n /**\n Tells whether any of the steps mapped through deletes across the\n position (including both the token before and after the\n position).\n */\n get deletedAcross() { return (this.delInfo & DEL_ACROSS) > 0; }\n}\n/**\nA map describing the deletions and insertions made by a step, which\ncan be used to find the correspondence between positions in the\npre-step version of a document and the same position in the\npost-step version.\n*/\nclass StepMap {\n /**\n Create a position map. The modifications to the document are\n represented as an array of numbers, in which each group of three\n represents a modified chunk as `[start, oldSize, newSize]`.\n */\n constructor(\n /**\n @internal\n */\n ranges, \n /**\n @internal\n */\n inverted = false) {\n this.ranges = ranges;\n this.inverted = inverted;\n if (!ranges.length && StepMap.empty)\n return StepMap.empty;\n }\n /**\n @internal\n */\n recover(value) {\n let diff = 0, index = recoverIndex(value);\n if (!this.inverted)\n for (let i = 0; i < index; i++)\n diff += this.ranges[i * 3 + 2] - this.ranges[i * 3 + 1];\n return this.ranges[index * 3] + diff + recoverOffset(value);\n }\n mapResult(pos, assoc = 1) { return this._map(pos, assoc, false); }\n map(pos, assoc = 1) { return this._map(pos, assoc, true); }\n /**\n @internal\n */\n _map(pos, assoc, simple) {\n let diff = 0, oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n for (let i = 0; i < this.ranges.length; i += 3) {\n let start = this.ranges[i] - (this.inverted ? diff : 0);\n if (start > pos)\n break;\n let oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex], end = start + oldSize;\n if (pos <= end) {\n let side = !oldSize ? assoc : pos == start ? -1 : pos == end ? 1 : assoc;\n let result = start + diff + (side < 0 ? 0 : newSize);\n if (simple)\n return result;\n let recover = pos == (assoc < 0 ? start : end) ? null : makeRecover(i / 3, pos - start);\n let del = pos == start ? DEL_AFTER : pos == end ? DEL_BEFORE : DEL_ACROSS;\n if (assoc < 0 ? pos != start : pos != end)\n del |= DEL_SIDE;\n return new MapResult(result, del, recover);\n }\n diff += newSize - oldSize;\n }\n return simple ? pos + diff : new MapResult(pos + diff, 0, null);\n }\n /**\n @internal\n */\n touches(pos, recover) {\n let diff = 0, index = recoverIndex(recover);\n let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n for (let i = 0; i < this.ranges.length; i += 3) {\n let start = this.ranges[i] - (this.inverted ? diff : 0);\n if (start > pos)\n break;\n let oldSize = this.ranges[i + oldIndex], end = start + oldSize;\n if (pos <= end && i == index * 3)\n return true;\n diff += this.ranges[i + newIndex] - oldSize;\n }\n return false;\n }\n /**\n Calls the given function on each of the changed ranges included in\n this map.\n */\n forEach(f) {\n let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n for (let i = 0, diff = 0; i < this.ranges.length; i += 3) {\n let start = this.ranges[i], oldStart = start - (this.inverted ? diff : 0), newStart = start + (this.inverted ? 0 : diff);\n let oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex];\n f(oldStart, oldStart + oldSize, newStart, newStart + newSize);\n diff += newSize - oldSize;\n }\n }\n /**\n Create an inverted version of this map. The result can be used to\n map positions in the post-step document to the pre-step document.\n */\n invert() {\n return new StepMap(this.ranges, !this.inverted);\n }\n /**\n @internal\n */\n toString() {\n return (this.inverted ? \"-\" : \"\") + JSON.stringify(this.ranges);\n }\n /**\n Create a map that moves all positions by offset `n` (which may be\n negative). This can be useful when applying steps meant for a\n sub-document to a larger document, or vice-versa.\n */\n static offset(n) {\n return n == 0 ? StepMap.empty : new StepMap(n < 0 ? [0, -n, 0] : [0, 0, n]);\n }\n}\n/**\nA StepMap that contains no changed ranges.\n*/\nStepMap.empty = new StepMap([]);\n/**\nA mapping represents a pipeline of zero or more [step\nmaps](https://prosemirror.net/docs/ref/#transform.StepMap). It has special provisions for losslessly\nhandling mapping positions through a series of steps in which some\nsteps are inverted versions of earlier steps. (This comes up when\n‘[rebasing](/docs/guide/#transform.rebasing)’ steps for\ncollaboration or history management.)\n*/\nclass Mapping {\n /**\n Create a new mapping with the given position maps.\n */\n constructor(\n /**\n The step maps in this mapping.\n */\n maps = [], \n /**\n @internal\n */\n mirror, \n /**\n The starting position in the `maps` array, used when `map` or\n `mapResult` is called.\n */\n from = 0, \n /**\n The end position in the `maps` array.\n */\n to = maps.length) {\n this.maps = maps;\n this.mirror = mirror;\n this.from = from;\n this.to = to;\n }\n /**\n Create a mapping that maps only through a part of this one.\n */\n slice(from = 0, to = this.maps.length) {\n return new Mapping(this.maps, this.mirror, from, to);\n }\n /**\n @internal\n */\n copy() {\n return new Mapping(this.maps.slice(), this.mirror && this.mirror.slice(), this.from, this.to);\n }\n /**\n Add a step map to the end of this mapping. If `mirrors` is\n given, it should be the index of the step map that is the mirror\n image of this one.\n */\n appendMap(map, mirrors) {\n this.to = this.maps.push(map);\n if (mirrors != null)\n this.setMirror(this.maps.length - 1, mirrors);\n }\n /**\n Add all the step maps in a given mapping to this one (preserving\n mirroring information).\n */\n appendMapping(mapping) {\n for (let i = 0, startSize = this.maps.length; i < mapping.maps.length; i++) {\n let mirr = mapping.getMirror(i);\n this.appendMap(mapping.maps[i], mirr != null && mirr < i ? startSize + mirr : undefined);\n }\n }\n /**\n Finds the offset of the step map that mirrors the map at the\n given offset, in this mapping (as per the second argument to\n `appendMap`).\n */\n getMirror(n) {\n if (this.mirror)\n for (let i = 0; i < this.mirror.length; i++)\n if (this.mirror[i] == n)\n return this.mirror[i + (i % 2 ? -1 : 1)];\n }\n /**\n @internal\n */\n setMirror(n, m) {\n if (!this.mirror)\n this.mirror = [];\n this.mirror.push(n, m);\n }\n /**\n Append the inverse of the given mapping to this one.\n */\n appendMappingInverted(mapping) {\n for (let i = mapping.maps.length - 1, totalSize = this.maps.length + mapping.maps.length; i >= 0; i--) {\n let mirr = mapping.getMirror(i);\n this.appendMap(mapping.maps[i].invert(), mirr != null && mirr > i ? totalSize - mirr - 1 : undefined);\n }\n }\n /**\n Create an inverted version of this mapping.\n */\n invert() {\n let inverse = new Mapping;\n inverse.appendMappingInverted(this);\n return inverse;\n }\n /**\n Map a position through this mapping.\n */\n map(pos, assoc = 1) {\n if (this.mirror)\n return this._map(pos, assoc, true);\n for (let i = this.from; i < this.to; i++)\n pos = this.maps[i].map(pos, assoc);\n return pos;\n }\n /**\n Map a position through this mapping, returning a mapping\n result.\n */\n mapResult(pos, assoc = 1) { return this._map(pos, assoc, false); }\n /**\n @internal\n */\n _map(pos, assoc, simple) {\n let delInfo = 0;\n for (let i = this.from; i < this.to; i++) {\n let map = this.maps[i], result = map.mapResult(pos, assoc);\n if (result.recover != null) {\n let corr = this.getMirror(i);\n if (corr != null && corr > i && corr < this.to) {\n i = corr;\n pos = this.maps[corr].recover(result.recover);\n continue;\n }\n }\n delInfo |= result.delInfo;\n pos = result.pos;\n }\n return simple ? pos : new MapResult(pos, delInfo, null);\n }\n}\n\nconst stepsByID = Object.create(null);\n/**\nA step object represents an atomic change. It generally applies\nonly to the document it was created for, since the positions\nstored in it will only make sense for that document.\n\nNew steps are defined by creating classes that extend `Step`,\noverriding the `apply`, `invert`, `map`, `getMap` and `fromJSON`\nmethods, and registering your class with a unique\nJSON-serialization identifier using\n[`Step.jsonID`](https://prosemirror.net/docs/ref/#transform.Step^jsonID).\n*/\nclass Step {\n /**\n Get the step map that represents the changes made by this step,\n and which can be used to transform between positions in the old\n and the new document.\n */\n getMap() { return StepMap.empty; }\n /**\n Try to merge this step with another one, to be applied directly\n after it. Returns the merged step when possible, null if the\n steps can't be merged.\n */\n merge(other) { return null; }\n /**\n Deserialize a step from its JSON representation. Will call\n through to the step class' own implementation of this method.\n */\n static fromJSON(schema, json) {\n if (!json || !json.stepType)\n throw new RangeError(\"Invalid input for Step.fromJSON\");\n let type = stepsByID[json.stepType];\n if (!type)\n throw new RangeError(`No step type ${json.stepType} defined`);\n return type.fromJSON(schema, json);\n }\n /**\n To be able to serialize steps to JSON, each step needs a string\n ID to attach to its JSON representation. Use this method to\n register an ID for your step classes. Try to pick something\n that's unlikely to clash with steps from other modules.\n */\n static jsonID(id, stepClass) {\n if (id in stepsByID)\n throw new RangeError(\"Duplicate use of step JSON ID \" + id);\n stepsByID[id] = stepClass;\n stepClass.prototype.jsonID = id;\n return stepClass;\n }\n}\n/**\nThe result of [applying](https://prosemirror.net/docs/ref/#transform.Step.apply) a step. Contains either a\nnew document or a failure value.\n*/\nclass StepResult {\n /**\n @internal\n */\n constructor(\n /**\n The transformed document, if successful.\n */\n doc, \n /**\n The failure message, if unsuccessful.\n */\n failed) {\n this.doc = doc;\n this.failed = failed;\n }\n /**\n Create a successful step result.\n */\n static ok(doc) { return new StepResult(doc, null); }\n /**\n Create a failed step result.\n */\n static fail(message) { return new StepResult(null, message); }\n /**\n Call [`Node.replace`](https://prosemirror.net/docs/ref/#model.Node.replace) with the given\n arguments. Create a successful result if it succeeds, and a\n failed one if it throws a `ReplaceError`.\n */\n static fromReplace(doc, from, to, slice) {\n try {\n return StepResult.ok(doc.replace(from, to, slice));\n }\n catch (e) {\n if (e instanceof ReplaceError)\n return StepResult.fail(e.message);\n throw e;\n }\n }\n}\n\nfunction mapFragment(fragment, f, parent) {\n let mapped = [];\n for (let i = 0; i < fragment.childCount; i++) {\n let child = fragment.child(i);\n if (child.content.size)\n child = child.copy(mapFragment(child.content, f, child));\n if (child.isInline)\n child = f(child, parent, i);\n mapped.push(child);\n }\n return Fragment.fromArray(mapped);\n}\n/**\nAdd a mark to all inline content between two positions.\n*/\nclass AddMarkStep extends Step {\n /**\n Create a mark step.\n */\n constructor(\n /**\n The start of the marked range.\n */\n from, \n /**\n The end of the marked range.\n */\n to, \n /**\n The mark to add.\n */\n mark) {\n super();\n this.from = from;\n this.to = to;\n this.mark = mark;\n }\n apply(doc) {\n let oldSlice = doc.slice(this.from, this.to), $from = doc.resolve(this.from);\n let parent = $from.node($from.sharedDepth(this.to));\n let slice = new Slice(mapFragment(oldSlice.content, (node, parent) => {\n if (!node.isAtom || !parent.type.allowsMarkType(this.mark.type))\n return node;\n return node.mark(this.mark.addToSet(node.marks));\n }, parent), oldSlice.openStart, oldSlice.openEnd);\n return StepResult.fromReplace(doc, this.from, this.to, slice);\n }\n invert() {\n return new RemoveMarkStep(this.from, this.to, this.mark);\n }\n map(mapping) {\n let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n if (from.deleted && to.deleted || from.pos >= to.pos)\n return null;\n return new AddMarkStep(from.pos, to.pos, this.mark);\n }\n merge(other) {\n if (other instanceof AddMarkStep &&\n other.mark.eq(this.mark) &&\n this.from <= other.to && this.to >= other.from)\n return new AddMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark);\n return null;\n }\n toJSON() {\n return { stepType: \"addMark\", mark: this.mark.toJSON(),\n from: this.from, to: this.to };\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\")\n throw new RangeError(\"Invalid input for AddMarkStep.fromJSON\");\n return new AddMarkStep(json.from, json.to, schema.markFromJSON(json.mark));\n }\n}\nStep.jsonID(\"addMark\", AddMarkStep);\n/**\nRemove a mark from all inline content between two positions.\n*/\nclass RemoveMarkStep extends Step {\n /**\n Create a mark-removing step.\n */\n constructor(\n /**\n The start of the unmarked range.\n */\n from, \n /**\n The end of the unmarked range.\n */\n to, \n /**\n The mark to remove.\n */\n mark) {\n super();\n this.from = from;\n this.to = to;\n this.mark = mark;\n }\n apply(doc) {\n let oldSlice = doc.slice(this.from, this.to);\n let slice = new Slice(mapFragment(oldSlice.content, node => {\n return node.mark(this.mark.removeFromSet(node.marks));\n }, doc), oldSlice.openStart, oldSlice.openEnd);\n return StepResult.fromReplace(doc, this.from, this.to, slice);\n }\n invert() {\n return new AddMarkStep(this.from, this.to, this.mark);\n }\n map(mapping) {\n let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n if (from.deleted && to.deleted || from.pos >= to.pos)\n return null;\n return new RemoveMarkStep(from.pos, to.pos, this.mark);\n }\n merge(other) {\n if (other instanceof RemoveMarkStep &&\n other.mark.eq(this.mark) &&\n this.from <= other.to && this.to >= other.from)\n return new RemoveMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark);\n return null;\n }\n toJSON() {\n return { stepType: \"removeMark\", mark: this.mark.toJSON(),\n from: this.from, to: this.to };\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\")\n throw new RangeError(\"Invalid input for RemoveMarkStep.fromJSON\");\n return new RemoveMarkStep(json.from, json.to, schema.markFromJSON(json.mark));\n }\n}\nStep.jsonID(\"removeMark\", RemoveMarkStep);\n/**\nAdd a mark to a specific node.\n*/\nclass AddNodeMarkStep extends Step {\n /**\n Create a node mark step.\n */\n constructor(\n /**\n The position of the target node.\n */\n pos, \n /**\n The mark to add.\n */\n mark) {\n super();\n this.pos = pos;\n this.mark = mark;\n }\n apply(doc) {\n let node = doc.nodeAt(this.pos);\n if (!node)\n return StepResult.fail(\"No node at mark step's position\");\n let updated = node.type.create(node.attrs, null, this.mark.addToSet(node.marks));\n return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n }\n invert(doc) {\n let node = doc.nodeAt(this.pos);\n if (node) {\n let newSet = this.mark.addToSet(node.marks);\n if (newSet.length == node.marks.length) {\n for (let i = 0; i < node.marks.length; i++)\n if (!node.marks[i].isInSet(newSet))\n return new AddNodeMarkStep(this.pos, node.marks[i]);\n return new AddNodeMarkStep(this.pos, this.mark);\n }\n }\n return new RemoveNodeMarkStep(this.pos, this.mark);\n }\n map(mapping) {\n let pos = mapping.mapResult(this.pos, 1);\n return pos.deletedAfter ? null : new AddNodeMarkStep(pos.pos, this.mark);\n }\n toJSON() {\n return { stepType: \"addNodeMark\", pos: this.pos, mark: this.mark.toJSON() };\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.pos != \"number\")\n throw new RangeError(\"Invalid input for AddNodeMarkStep.fromJSON\");\n return new AddNodeMarkStep(json.pos, schema.markFromJSON(json.mark));\n }\n}\nStep.jsonID(\"addNodeMark\", AddNodeMarkStep);\n/**\nRemove a mark from a specific node.\n*/\nclass RemoveNodeMarkStep extends Step {\n /**\n Create a mark-removing step.\n */\n constructor(\n /**\n The position of the target node.\n */\n pos, \n /**\n The mark to remove.\n */\n mark) {\n super();\n this.pos = pos;\n this.mark = mark;\n }\n apply(doc) {\n let node = doc.nodeAt(this.pos);\n if (!node)\n return StepResult.fail(\"No node at mark step's position\");\n let updated = node.type.create(node.attrs, null, this.mark.removeFromSet(node.marks));\n return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n }\n invert(doc) {\n let node = doc.nodeAt(this.pos);\n if (!node || !this.mark.isInSet(node.marks))\n return this;\n return new AddNodeMarkStep(this.pos, this.mark);\n }\n map(mapping) {\n let pos = mapping.mapResult(this.pos, 1);\n return pos.deletedAfter ? null : new RemoveNodeMarkStep(pos.pos, this.mark);\n }\n toJSON() {\n return { stepType: \"removeNodeMark\", pos: this.pos, mark: this.mark.toJSON() };\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.pos != \"number\")\n throw new RangeError(\"Invalid input for RemoveNodeMarkStep.fromJSON\");\n return new RemoveNodeMarkStep(json.pos, schema.markFromJSON(json.mark));\n }\n}\nStep.jsonID(\"removeNodeMark\", RemoveNodeMarkStep);\n\n/**\nReplace a part of the document with a slice of new content.\n*/\nclass ReplaceStep extends Step {\n /**\n The given `slice` should fit the 'gap' between `from` and\n `to`—the depths must line up, and the surrounding nodes must be\n able to be joined with the open sides of the slice. When\n `structure` is true, the step will fail if the content between\n from and to is not just a sequence of closing and then opening\n tokens (this is to guard against rebased replace steps\n overwriting something they weren't supposed to).\n */\n constructor(\n /**\n The start position of the replaced range.\n */\n from, \n /**\n The end position of the replaced range.\n */\n to, \n /**\n The slice to insert.\n */\n slice, \n /**\n @internal\n */\n structure = false) {\n super();\n this.from = from;\n this.to = to;\n this.slice = slice;\n this.structure = structure;\n }\n apply(doc) {\n if (this.structure && contentBetween(doc, this.from, this.to))\n return StepResult.fail(\"Structure replace would overwrite content\");\n return StepResult.fromReplace(doc, this.from, this.to, this.slice);\n }\n getMap() {\n return new StepMap([this.from, this.to - this.from, this.slice.size]);\n }\n invert(doc) {\n return new ReplaceStep(this.from, this.from + this.slice.size, doc.slice(this.from, this.to));\n }\n map(mapping) {\n let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n if (from.deletedAcross && to.deletedAcross)\n return null;\n return new ReplaceStep(from.pos, Math.max(from.pos, to.pos), this.slice);\n }\n merge(other) {\n if (!(other instanceof ReplaceStep) || other.structure || this.structure)\n return null;\n if (this.from + this.slice.size == other.from && !this.slice.openEnd && !other.slice.openStart) {\n let slice = this.slice.size + other.slice.size == 0 ? Slice.empty\n : new Slice(this.slice.content.append(other.slice.content), this.slice.openStart, other.slice.openEnd);\n return new ReplaceStep(this.from, this.to + (other.to - other.from), slice, this.structure);\n }\n else if (other.to == this.from && !this.slice.openStart && !other.slice.openEnd) {\n let slice = this.slice.size + other.slice.size == 0 ? Slice.empty\n : new Slice(other.slice.content.append(this.slice.content), other.slice.openStart, this.slice.openEnd);\n return new ReplaceStep(other.from, this.to, slice, this.structure);\n }\n else {\n return null;\n }\n }\n toJSON() {\n let json = { stepType: \"replace\", from: this.from, to: this.to };\n if (this.slice.size)\n json.slice = this.slice.toJSON();\n if (this.structure)\n json.structure = true;\n return json;\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\")\n throw new RangeError(\"Invalid input for ReplaceStep.fromJSON\");\n return new ReplaceStep(json.from, json.to, Slice.fromJSON(schema, json.slice), !!json.structure);\n }\n}\nStep.jsonID(\"replace\", ReplaceStep);\n/**\nReplace a part of the document with a slice of content, but\npreserve a range of the replaced content by moving it into the\nslice.\n*/\nclass ReplaceAroundStep extends Step {\n /**\n Create a replace-around step with the given range and gap.\n `insert` should be the point in the slice into which the content\n of the gap should be moved. `structure` has the same meaning as\n it has in the [`ReplaceStep`](https://prosemirror.net/docs/ref/#transform.ReplaceStep) class.\n */\n constructor(\n /**\n The start position of the replaced range.\n */\n from, \n /**\n The end position of the replaced range.\n */\n to, \n /**\n The start of preserved range.\n */\n gapFrom, \n /**\n The end of preserved range.\n */\n gapTo, \n /**\n The slice to insert.\n */\n slice, \n /**\n The position in the slice where the preserved range should be\n inserted.\n */\n insert, \n /**\n @internal\n */\n structure = false) {\n super();\n this.from = from;\n this.to = to;\n this.gapFrom = gapFrom;\n this.gapTo = gapTo;\n this.slice = slice;\n this.insert = insert;\n this.structure = structure;\n }\n apply(doc) {\n if (this.structure && (contentBetween(doc, this.from, this.gapFrom) ||\n contentBetween(doc, this.gapTo, this.to)))\n return StepResult.fail(\"Structure gap-replace would overwrite content\");\n let gap = doc.slice(this.gapFrom, this.gapTo);\n if (gap.openStart || gap.openEnd)\n return StepResult.fail(\"Gap is not a flat range\");\n let inserted = this.slice.insertAt(this.insert, gap.content);\n if (!inserted)\n return StepResult.fail(\"Content does not fit in gap\");\n return StepResult.fromReplace(doc, this.from, this.to, inserted);\n }\n getMap() {\n return new StepMap([this.from, this.gapFrom - this.from, this.insert,\n this.gapTo, this.to - this.gapTo, this.slice.size - this.insert]);\n }\n invert(doc) {\n let gap = this.gapTo - this.gapFrom;\n return new ReplaceAroundStep(this.from, this.from + this.slice.size + gap, this.from + this.insert, this.from + this.insert + gap, doc.slice(this.from, this.to).removeBetween(this.gapFrom - this.from, this.gapTo - this.from), this.gapFrom - this.from, this.structure);\n }\n map(mapping) {\n let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n let gapFrom = this.from == this.gapFrom ? from.pos : mapping.map(this.gapFrom, -1);\n let gapTo = this.to == this.gapTo ? to.pos : mapping.map(this.gapTo, 1);\n if ((from.deletedAcross && to.deletedAcross) || gapFrom < from.pos || gapTo > to.pos)\n return null;\n return new ReplaceAroundStep(from.pos, to.pos, gapFrom, gapTo, this.slice, this.insert, this.structure);\n }\n toJSON() {\n let json = { stepType: \"replaceAround\", from: this.from, to: this.to,\n gapFrom: this.gapFrom, gapTo: this.gapTo, insert: this.insert };\n if (this.slice.size)\n json.slice = this.slice.toJSON();\n if (this.structure)\n json.structure = true;\n return json;\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\" ||\n typeof json.gapFrom != \"number\" || typeof json.gapTo != \"number\" || typeof json.insert != \"number\")\n throw new RangeError(\"Invalid input for ReplaceAroundStep.fromJSON\");\n return new ReplaceAroundStep(json.from, json.to, json.gapFrom, json.gapTo, Slice.fromJSON(schema, json.slice), json.insert, !!json.structure);\n }\n}\nStep.jsonID(\"replaceAround\", ReplaceAroundStep);\nfunction contentBetween(doc, from, to) {\n let $from = doc.resolve(from), dist = to - from, depth = $from.depth;\n while (dist > 0 && depth > 0 && $from.indexAfter(depth) == $from.node(depth).childCount) {\n depth--;\n dist--;\n }\n if (dist > 0) {\n let next = $from.node(depth).maybeChild($from.indexAfter(depth));\n while (dist > 0) {\n if (!next || next.isLeaf)\n return true;\n next = next.firstChild;\n dist--;\n }\n }\n return false;\n}\n\nfunction addMark(tr, from, to, mark) {\n let removed = [], added = [];\n let removing, adding;\n tr.doc.nodesBetween(from, to, (node, pos, parent) => {\n if (!node.isInline)\n return;\n let marks = node.marks;\n if (!mark.isInSet(marks) && parent.type.allowsMarkType(mark.type)) {\n let start = Math.max(pos, from), end = Math.min(pos + node.nodeSize, to);\n let newSet = mark.addToSet(marks);\n for (let i = 0; i < marks.length; i++) {\n if (!marks[i].isInSet(newSet)) {\n if (removing && removing.to == start && removing.mark.eq(marks[i]))\n removing.to = end;\n else\n removed.push(removing = new RemoveMarkStep(start, end, marks[i]));\n }\n }\n if (adding && adding.to == start)\n adding.to = end;\n else\n added.push(adding = new AddMarkStep(start, end, mark));\n }\n });\n removed.forEach(s => tr.step(s));\n added.forEach(s => tr.step(s));\n}\nfunction removeMark(tr, from, to, mark) {\n let matched = [], step = 0;\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isInline)\n return;\n step++;\n let toRemove = null;\n if (mark instanceof MarkType) {\n let set = node.marks, found;\n while (found = mark.isInSet(set)) {\n (toRemove || (toRemove = [])).push(found);\n set = found.removeFromSet(set);\n }\n }\n else if (mark) {\n if (mark.isInSet(node.marks))\n toRemove = [mark];\n }\n else {\n toRemove = node.marks;\n }\n if (toRemove && toRemove.length) {\n let end = Math.min(pos + node.nodeSize, to);\n for (let i = 0; i < toRemove.length; i++) {\n let style = toRemove[i], found;\n for (let j = 0; j < matched.length; j++) {\n let m = matched[j];\n if (m.step == step - 1 && style.eq(matched[j].style))\n found = m;\n }\n if (found) {\n found.to = end;\n found.step = step;\n }\n else {\n matched.push({ style, from: Math.max(pos, from), to: end, step });\n }\n }\n }\n });\n matched.forEach(m => tr.step(new RemoveMarkStep(m.from, m.to, m.style)));\n}\nfunction clearIncompatible(tr, pos, parentType, match = parentType.contentMatch, clearNewlines = true) {\n let node = tr.doc.nodeAt(pos);\n let replSteps = [], cur = pos + 1;\n for (let i = 0; i < node.childCount; i++) {\n let child = node.child(i), end = cur + child.nodeSize;\n let allowed = match.matchType(child.type);\n if (!allowed) {\n replSteps.push(new ReplaceStep(cur, end, Slice.empty));\n }\n else {\n match = allowed;\n for (let j = 0; j < child.marks.length; j++)\n if (!parentType.allowsMarkType(child.marks[j].type))\n tr.step(new RemoveMarkStep(cur, end, child.marks[j]));\n if (clearNewlines && child.isText && parentType.whitespace != \"pre\") {\n let m, newline = /\\r?\\n|\\r/g, slice;\n while (m = newline.exec(child.text)) {\n if (!slice)\n slice = new Slice(Fragment.from(parentType.schema.text(\" \", parentType.allowedMarks(child.marks))), 0, 0);\n replSteps.push(new ReplaceStep(cur + m.index, cur + m.index + m[0].length, slice));\n }\n }\n }\n cur = end;\n }\n if (!match.validEnd) {\n let fill = match.fillBefore(Fragment.empty, true);\n tr.replace(cur, cur, new Slice(fill, 0, 0));\n }\n for (let i = replSteps.length - 1; i >= 0; i--)\n tr.step(replSteps[i]);\n}\n\nfunction canCut(node, start, end) {\n return (start == 0 || node.canReplace(start, node.childCount)) &&\n (end == node.childCount || node.canReplace(0, end));\n}\n/**\nTry to find a target depth to which the content in the given range\ncan be lifted. Will not go across\n[isolating](https://prosemirror.net/docs/ref/#model.NodeSpec.isolating) parent nodes.\n*/\nfunction liftTarget(range) {\n let parent = range.parent;\n let content = parent.content.cutByIndex(range.startIndex, range.endIndex);\n for (let depth = range.depth;; --depth) {\n let node = range.$from.node(depth);\n let index = range.$from.index(depth), endIndex = range.$to.indexAfter(depth);\n if (depth < range.depth && node.canReplace(index, endIndex, content))\n return depth;\n if (depth == 0 || node.type.spec.isolating || !canCut(node, index, endIndex))\n break;\n }\n return null;\n}\nfunction lift(tr, range, target) {\n let { $from, $to, depth } = range;\n let gapStart = $from.before(depth + 1), gapEnd = $to.after(depth + 1);\n let start = gapStart, end = gapEnd;\n let before = Fragment.empty, openStart = 0;\n for (let d = depth, splitting = false; d > target; d--)\n if (splitting || $from.index(d) > 0) {\n splitting = true;\n before = Fragment.from($from.node(d).copy(before));\n openStart++;\n }\n else {\n start--;\n }\n let after = Fragment.empty, openEnd = 0;\n for (let d = depth, splitting = false; d > target; d--)\n if (splitting || $to.after(d + 1) < $to.end(d)) {\n splitting = true;\n after = Fragment.from($to.node(d).copy(after));\n openEnd++;\n }\n else {\n end++;\n }\n tr.step(new ReplaceAroundStep(start, end, gapStart, gapEnd, new Slice(before.append(after), openStart, openEnd), before.size - openStart, true));\n}\n/**\nTry to find a valid way to wrap the content in the given range in a\nnode of the given type. May introduce extra nodes around and inside\nthe wrapper node, if necessary. Returns null if no valid wrapping\ncould be found. When `innerRange` is given, that range's content is\nused as the content to fit into the wrapping, instead of the\ncontent of `range`.\n*/\nfunction findWrapping(range, nodeType, attrs = null, innerRange = range) {\n let around = findWrappingOutside(range, nodeType);\n let inner = around && findWrappingInside(innerRange, nodeType);\n if (!inner)\n return null;\n return around.map(withAttrs)\n .concat({ type: nodeType, attrs }).concat(inner.map(withAttrs));\n}\nfunction withAttrs(type) { return { type, attrs: null }; }\nfunction findWrappingOutside(range, type) {\n let { parent, startIndex, endIndex } = range;\n let around = parent.contentMatchAt(startIndex).findWrapping(type);\n if (!around)\n return null;\n let outer = around.length ? around[0] : type;\n return parent.canReplaceWith(startIndex, endIndex, outer) ? around : null;\n}\nfunction findWrappingInside(range, type) {\n let { parent, startIndex, endIndex } = range;\n let inner = parent.child(startIndex);\n let inside = type.contentMatch.findWrapping(inner.type);\n if (!inside)\n return null;\n let lastType = inside.length ? inside[inside.length - 1] : type;\n let innerMatch = lastType.contentMatch;\n for (let i = startIndex; innerMatch && i < endIndex; i++)\n innerMatch = innerMatch.matchType(parent.child(i).type);\n if (!innerMatch || !innerMatch.validEnd)\n return null;\n return inside;\n}\nfunction wrap(tr, range, wrappers) {\n let content = Fragment.empty;\n for (let i = wrappers.length - 1; i >= 0; i--) {\n if (content.size) {\n let match = wrappers[i].type.contentMatch.matchFragment(content);\n if (!match || !match.validEnd)\n throw new RangeError(\"Wrapper type given to Transform.wrap does not form valid content of its parent wrapper\");\n }\n content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content));\n }\n let start = range.start, end = range.end;\n tr.step(new ReplaceAroundStep(start, end, start, end, new Slice(content, 0, 0), wrappers.length, true));\n}\nfunction setBlockType(tr, from, to, type, attrs) {\n if (!type.isTextblock)\n throw new RangeError(\"Type given to setBlockType should be a textblock\");\n let mapFrom = tr.steps.length;\n tr.doc.nodesBetween(from, to, (node, pos) => {\n let attrsHere = typeof attrs == \"function\" ? attrs(node) : attrs;\n if (node.isTextblock && !node.hasMarkup(type, attrsHere) &&\n canChangeType(tr.doc, tr.mapping.slice(mapFrom).map(pos), type)) {\n let convertNewlines = null;\n if (type.schema.linebreakReplacement) {\n let pre = type.whitespace == \"pre\", supportLinebreak = !!type.contentMatch.matchType(type.schema.linebreakReplacement);\n if (pre && !supportLinebreak)\n convertNewlines = false;\n else if (!pre && supportLinebreak)\n convertNewlines = true;\n }\n // Ensure all markup that isn't allowed in the new node type is cleared\n if (convertNewlines === false)\n replaceLinebreaks(tr, node, pos, mapFrom);\n clearIncompatible(tr, tr.mapping.slice(mapFrom).map(pos, 1), type, undefined, convertNewlines === null);\n let mapping = tr.mapping.slice(mapFrom);\n let startM = mapping.map(pos, 1), endM = mapping.map(pos + node.nodeSize, 1);\n tr.step(new ReplaceAroundStep(startM, endM, startM + 1, endM - 1, new Slice(Fragment.from(type.create(attrsHere, null, node.marks)), 0, 0), 1, true));\n if (convertNewlines === true)\n replaceNewlines(tr, node, pos, mapFrom);\n return false;\n }\n });\n}\nfunction replaceNewlines(tr, node, pos, mapFrom) {\n node.forEach((child, offset) => {\n if (child.isText) {\n let m, newline = /\\r?\\n|\\r/g;\n while (m = newline.exec(child.text)) {\n let start = tr.mapping.slice(mapFrom).map(pos + 1 + offset + m.index);\n tr.replaceWith(start, start + 1, node.type.schema.linebreakReplacement.create());\n }\n }\n });\n}\nfunction replaceLinebreaks(tr, node, pos, mapFrom) {\n node.forEach((child, offset) => {\n if (child.type == child.type.schema.linebreakReplacement) {\n let start = tr.mapping.slice(mapFrom).map(pos + 1 + offset);\n tr.replaceWith(start, start + 1, node.type.schema.text(\"\\n\"));\n }\n });\n}\nfunction canChangeType(doc, pos, type) {\n let $pos = doc.resolve(pos), index = $pos.index();\n return $pos.parent.canReplaceWith(index, index + 1, type);\n}\n/**\nChange the type, attributes, and/or marks of the node at `pos`.\nWhen `type` isn't given, the existing node type is preserved,\n*/\nfunction setNodeMarkup(tr, pos, type, attrs, marks) {\n let node = tr.doc.nodeAt(pos);\n if (!node)\n throw new RangeError(\"No node at given position\");\n if (!type)\n type = node.type;\n let newNode = type.create(attrs, null, marks || node.marks);\n if (node.isLeaf)\n return tr.replaceWith(pos, pos + node.nodeSize, newNode);\n if (!type.validContent(node.content))\n throw new RangeError(\"Invalid content for node type \" + type.name);\n tr.step(new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1, pos + node.nodeSize - 1, new Slice(Fragment.from(newNode), 0, 0), 1, true));\n}\n/**\nCheck whether splitting at the given position is allowed.\n*/\nfunction canSplit(doc, pos, depth = 1, typesAfter) {\n let $pos = doc.resolve(pos), base = $pos.depth - depth;\n let innerType = (typesAfter && typesAfter[typesAfter.length - 1]) || $pos.parent;\n if (base < 0 || $pos.parent.type.spec.isolating ||\n !$pos.parent.canReplace($pos.index(), $pos.parent.childCount) ||\n !innerType.type.validContent($pos.parent.content.cutByIndex($pos.index(), $pos.parent.childCount)))\n return false;\n for (let d = $pos.depth - 1, i = depth - 2; d > base; d--, i--) {\n let node = $pos.node(d), index = $pos.index(d);\n if (node.type.spec.isolating)\n return false;\n let rest = node.content.cutByIndex(index, node.childCount);\n let overrideChild = typesAfter && typesAfter[i + 1];\n if (overrideChild)\n rest = rest.replaceChild(0, overrideChild.type.create(overrideChild.attrs));\n let after = (typesAfter && typesAfter[i]) || node;\n if (!node.canReplace(index + 1, node.childCount) || !after.type.validContent(rest))\n return false;\n }\n let index = $pos.indexAfter(base);\n let baseType = typesAfter && typesAfter[0];\n return $pos.node(base).canReplaceWith(index, index, baseType ? baseType.type : $pos.node(base + 1).type);\n}\nfunction split(tr, pos, depth = 1, typesAfter) {\n let $pos = tr.doc.resolve(pos), before = Fragment.empty, after = Fragment.empty;\n for (let d = $pos.depth, e = $pos.depth - depth, i = depth - 1; d > e; d--, i--) {\n before = Fragment.from($pos.node(d).copy(before));\n let typeAfter = typesAfter && typesAfter[i];\n after = Fragment.from(typeAfter ? typeAfter.type.create(typeAfter.attrs, after) : $pos.node(d).copy(after));\n }\n tr.step(new ReplaceStep(pos, pos, new Slice(before.append(after), depth, depth), true));\n}\n/**\nTest whether the blocks before and after a given position can be\njoined.\n*/\nfunction canJoin(doc, pos) {\n let $pos = doc.resolve(pos), index = $pos.index();\n return joinable($pos.nodeBefore, $pos.nodeAfter) &&\n $pos.parent.canReplace(index, index + 1);\n}\nfunction joinable(a, b) {\n return !!(a && b && !a.isLeaf && a.canAppend(b));\n}\n/**\nFind an ancestor of the given position that can be joined to the\nblock before (or after if `dir` is positive). Returns the joinable\npoint, if any.\n*/\nfunction joinPoint(doc, pos, dir = -1) {\n let $pos = doc.resolve(pos);\n for (let d = $pos.depth;; d--) {\n let before, after, index = $pos.index(d);\n if (d == $pos.depth) {\n before = $pos.nodeBefore;\n after = $pos.nodeAfter;\n }\n else if (dir > 0) {\n before = $pos.node(d + 1);\n index++;\n after = $pos.node(d).maybeChild(index);\n }\n else {\n before = $pos.node(d).maybeChild(index - 1);\n after = $pos.node(d + 1);\n }\n if (before && !before.isTextblock && joinable(before, after) &&\n $pos.node(d).canReplace(index, index + 1))\n return pos;\n if (d == 0)\n break;\n pos = dir < 0 ? $pos.before(d) : $pos.after(d);\n }\n}\nfunction join(tr, pos, depth) {\n let step = new ReplaceStep(pos - depth, pos + depth, Slice.empty, true);\n tr.step(step);\n}\n/**\nTry to find a point where a node of the given type can be inserted\nnear `pos`, by searching up the node hierarchy when `pos` itself\nisn't a valid place but is at the start or end of a node. Return\nnull if no position was found.\n*/\nfunction insertPoint(doc, pos, nodeType) {\n let $pos = doc.resolve(pos);\n if ($pos.parent.canReplaceWith($pos.index(), $pos.index(), nodeType))\n return pos;\n if ($pos.parentOffset == 0)\n for (let d = $pos.depth - 1; d >= 0; d--) {\n let index = $pos.index(d);\n if ($pos.node(d).canReplaceWith(index, index, nodeType))\n return $pos.before(d + 1);\n if (index > 0)\n return null;\n }\n if ($pos.parentOffset == $pos.parent.content.size)\n for (let d = $pos.depth - 1; d >= 0; d--) {\n let index = $pos.indexAfter(d);\n if ($pos.node(d).canReplaceWith(index, index, nodeType))\n return $pos.after(d + 1);\n if (index < $pos.node(d).childCount)\n return null;\n }\n return null;\n}\n/**\nFinds a position at or around the given position where the given\nslice can be inserted. Will look at parent nodes' nearest boundary\nand try there, even if the original position wasn't directly at the\nstart or end of that node. Returns null when no position was found.\n*/\nfunction dropPoint(doc, pos, slice) {\n let $pos = doc.resolve(pos);\n if (!slice.content.size)\n return pos;\n let content = slice.content;\n for (let i = 0; i < slice.openStart; i++)\n content = content.firstChild.content;\n for (let pass = 1; pass <= (slice.openStart == 0 && slice.size ? 2 : 1); pass++) {\n for (let d = $pos.depth; d >= 0; d--) {\n let bias = d == $pos.depth ? 0 : $pos.pos <= ($pos.start(d + 1) + $pos.end(d + 1)) / 2 ? -1 : 1;\n let insertPos = $pos.index(d) + (bias > 0 ? 1 : 0);\n let parent = $pos.node(d), fits = false;\n if (pass == 1) {\n fits = parent.canReplace(insertPos, insertPos, content);\n }\n else {\n let wrapping = parent.contentMatchAt(insertPos).findWrapping(content.firstChild.type);\n fits = wrapping && parent.canReplaceWith(insertPos, insertPos, wrapping[0]);\n }\n if (fits)\n return bias == 0 ? $pos.pos : bias < 0 ? $pos.before(d + 1) : $pos.after(d + 1);\n }\n }\n return null;\n}\n\n/**\n‘Fit’ a slice into a given position in the document, producing a\n[step](https://prosemirror.net/docs/ref/#transform.Step) that inserts it. Will return null if\nthere's no meaningful way to insert the slice here, or inserting it\nwould be a no-op (an empty slice over an empty range).\n*/\nfunction replaceStep(doc, from, to = from, slice = Slice.empty) {\n if (from == to && !slice.size)\n return null;\n let $from = doc.resolve(from), $to = doc.resolve(to);\n // Optimization -- avoid work if it's obvious that it's not needed.\n if (fitsTrivially($from, $to, slice))\n return new ReplaceStep(from, to, slice);\n return new Fitter($from, $to, slice).fit();\n}\nfunction fitsTrivially($from, $to, slice) {\n return !slice.openStart && !slice.openEnd && $from.start() == $to.start() &&\n $from.parent.canReplace($from.index(), $to.index(), slice.content);\n}\n// Algorithm for 'placing' the elements of a slice into a gap:\n//\n// We consider the content of each node that is open to the left to be\n// independently placeable. I.e. in <p(\"foo\"), p(\"bar\")>, when the\n// paragraph on the left is open, \"foo\" can be placed (somewhere on\n// the left side of the replacement gap) independently from p(\"bar\").\n//\n// This class tracks the state of the placement progress in the\n// following properties:\n//\n// - `frontier` holds a stack of `{type, match}` objects that\n// represent the open side of the replacement. It starts at\n// `$from`, then moves forward as content is placed, and is finally\n// reconciled with `$to`.\n//\n// - `unplaced` is a slice that represents the content that hasn't\n// been placed yet.\n//\n// - `placed` is a fragment of placed content. Its open-start value\n// is implicit in `$from`, and its open-end value in `frontier`.\nclass Fitter {\n constructor($from, $to, unplaced) {\n this.$from = $from;\n this.$to = $to;\n this.unplaced = unplaced;\n this.frontier = [];\n this.placed = Fragment.empty;\n for (let i = 0; i <= $from.depth; i++) {\n let node = $from.node(i);\n this.frontier.push({\n type: node.type,\n match: node.contentMatchAt($from.indexAfter(i))\n });\n }\n for (let i = $from.depth; i > 0; i--)\n this.placed = Fragment.from($from.node(i).copy(this.placed));\n }\n get depth() { return this.frontier.length - 1; }\n fit() {\n // As long as there's unplaced content, try to place some of it.\n // If that fails, either increase the open score of the unplaced\n // slice, or drop nodes from it, and then try again.\n while (this.unplaced.size) {\n let fit = this.findFittable();\n if (fit)\n this.placeNodes(fit);\n else\n this.openMore() || this.dropNode();\n }\n // When there's inline content directly after the frontier _and_\n // directly after `this.$to`, we must generate a `ReplaceAround`\n // step that pulls that content into the node after the frontier.\n // That means the fitting must be done to the end of the textblock\n // node after `this.$to`, not `this.$to` itself.\n let moveInline = this.mustMoveInline(), placedSize = this.placed.size - this.depth - this.$from.depth;\n let $from = this.$from, $to = this.close(moveInline < 0 ? this.$to : $from.doc.resolve(moveInline));\n if (!$to)\n return null;\n // If closing to `$to` succeeded, create a step\n let content = this.placed, openStart = $from.depth, openEnd = $to.depth;\n while (openStart && openEnd && content.childCount == 1) { // Normalize by dropping open parent nodes\n content = content.firstChild.content;\n openStart--;\n openEnd--;\n }\n let slice = new Slice(content, openStart, openEnd);\n if (moveInline > -1)\n return new ReplaceAroundStep($from.pos, moveInline, this.$to.pos, this.$to.end(), slice, placedSize);\n if (slice.size || $from.pos != this.$to.pos) // Don't generate no-op steps\n return new ReplaceStep($from.pos, $to.pos, slice);\n return null;\n }\n // Find a position on the start spine of `this.unplaced` that has\n // content that can be moved somewhere on the frontier. Returns two\n // depths, one for the slice and one for the frontier.\n findFittable() {\n let startDepth = this.unplaced.openStart;\n for (let cur = this.unplaced.content, d = 0, openEnd = this.unplaced.openEnd; d < startDepth; d++) {\n let node = cur.firstChild;\n if (cur.childCount > 1)\n openEnd = 0;\n if (node.type.spec.isolating && openEnd <= d) {\n startDepth = d;\n break;\n }\n cur = node.content;\n }\n // Only try wrapping nodes (pass 2) after finding a place without\n // wrapping failed.\n for (let pass = 1; pass <= 2; pass++) {\n for (let sliceDepth = pass == 1 ? startDepth : this.unplaced.openStart; sliceDepth >= 0; sliceDepth--) {\n let fragment, parent = null;\n if (sliceDepth) {\n parent = contentAt(this.unplaced.content, sliceDepth - 1).firstChild;\n fragment = parent.content;\n }\n else {\n fragment = this.unplaced.content;\n }\n let first = fragment.firstChild;\n for (let frontierDepth = this.depth; frontierDepth >= 0; frontierDepth--) {\n let { type, match } = this.frontier[frontierDepth], wrap, inject = null;\n // In pass 1, if the next node matches, or there is no next\n // node but the parents look compatible, we've found a\n // place.\n if (pass == 1 && (first ? match.matchType(first.type) || (inject = match.fillBefore(Fragment.from(first), false))\n : parent && type.compatibleContent(parent.type)))\n return { sliceDepth, frontierDepth, parent, inject };\n // In pass 2, look for a set of wrapping nodes that make\n // `first` fit here.\n else if (pass == 2 && first && (wrap = match.findWrapping(first.type)))\n return { sliceDepth, frontierDepth, parent, wrap };\n // Don't continue looking further up if the parent node\n // would fit here.\n if (parent && match.matchType(parent.type))\n break;\n }\n }\n }\n }\n openMore() {\n let { content, openStart, openEnd } = this.unplaced;\n let inner = contentAt(content, openStart);\n if (!inner.childCount || inner.firstChild.isLeaf)\n return false;\n this.unplaced = new Slice(content, openStart + 1, Math.max(openEnd, inner.size + openStart >= content.size - openEnd ? openStart + 1 : 0));\n return true;\n }\n dropNode() {\n let { content, openStart, openEnd } = this.unplaced;\n let inner = contentAt(content, openStart);\n if (inner.childCount <= 1 && openStart > 0) {\n let openAtEnd = content.size - openStart <= openStart + inner.size;\n this.unplaced = new Slice(dropFromFragment(content, openStart - 1, 1), openStart - 1, openAtEnd ? openStart - 1 : openEnd);\n }\n else {\n this.unplaced = new Slice(dropFromFragment(content, openStart, 1), openStart, openEnd);\n }\n }\n // Move content from the unplaced slice at `sliceDepth` to the\n // frontier node at `frontierDepth`. Close that frontier node when\n // applicable.\n placeNodes({ sliceDepth, frontierDepth, parent, inject, wrap }) {\n while (this.depth > frontierDepth)\n this.closeFrontierNode();\n if (wrap)\n for (let i = 0; i < wrap.length; i++)\n this.openFrontierNode(wrap[i]);\n let slice = this.unplaced, fragment = parent ? parent.content : slice.content;\n let openStart = slice.openStart - sliceDepth;\n let taken = 0, add = [];\n let { match, type } = this.frontier[frontierDepth];\n if (inject) {\n for (let i = 0; i < inject.childCount; i++)\n add.push(inject.child(i));\n match = match.matchFragment(inject);\n }\n // Computes the amount of (end) open nodes at the end of the\n // fragment. When 0, the parent is open, but no more. When\n // negative, nothing is open.\n let openEndCount = (fragment.size + sliceDepth) - (slice.content.size - slice.openEnd);\n // Scan over the fragment, fitting as many child nodes as\n // possible.\n while (taken < fragment.childCount) {\n let next = fragment.child(taken), matches = match.matchType(next.type);\n if (!matches)\n break;\n taken++;\n if (taken > 1 || openStart == 0 || next.content.size) { // Drop empty open nodes\n match = matches;\n add.push(closeNodeStart(next.mark(type.allowedMarks(next.marks)), taken == 1 ? openStart : 0, taken == fragment.childCount ? openEndCount : -1));\n }\n }\n let toEnd = taken == fragment.childCount;\n if (!toEnd)\n openEndCount = -1;\n this.placed = addToFragment(this.placed, frontierDepth, Fragment.from(add));\n this.frontier[frontierDepth].match = match;\n // If the parent types match, and the entire node was moved, and\n // it's not open, close this frontier node right away.\n if (toEnd && openEndCount < 0 && parent && parent.type == this.frontier[this.depth].type && this.frontier.length > 1)\n this.closeFrontierNode();\n // Add new frontier nodes for any open nodes at the end.\n for (let i = 0, cur = fragment; i < openEndCount; i++) {\n let node = cur.lastChild;\n this.frontier.push({ type: node.type, match: node.contentMatchAt(node.childCount) });\n cur = node.content;\n }\n // Update `this.unplaced`. Drop the entire node from which we\n // placed it we got to its end, otherwise just drop the placed\n // nodes.\n this.unplaced = !toEnd ? new Slice(dropFromFragment(slice.content, sliceDepth, taken), slice.openStart, slice.openEnd)\n : sliceDepth == 0 ? Slice.empty\n : new Slice(dropFromFragment(slice.content, sliceDepth - 1, 1), sliceDepth - 1, openEndCount < 0 ? slice.openEnd : sliceDepth - 1);\n }\n mustMoveInline() {\n if (!this.$to.parent.isTextblock)\n return -1;\n let top = this.frontier[this.depth], level;\n if (!top.type.isTextblock || !contentAfterFits(this.$to, this.$to.depth, top.type, top.match, false) ||\n (this.$to.depth == this.depth && (level = this.findCloseLevel(this.$to)) && level.depth == this.depth))\n return -1;\n let { depth } = this.$to, after = this.$to.after(depth);\n while (depth > 1 && after == this.$to.end(--depth))\n ++after;\n return after;\n }\n findCloseLevel($to) {\n scan: for (let i = Math.min(this.depth, $to.depth); i >= 0; i--) {\n let { match, type } = this.frontier[i];\n let dropInner = i < $to.depth && $to.end(i + 1) == $to.pos + ($to.depth - (i + 1));\n let fit = contentAfterFits($to, i, type, match, dropInner);\n if (!fit)\n continue;\n for (let d = i - 1; d >= 0; d--) {\n let { match, type } = this.frontier[d];\n let matches = contentAfterFits($to, d, type, match, true);\n if (!matches || matches.childCount)\n continue scan;\n }\n return { depth: i, fit, move: dropInner ? $to.doc.resolve($to.after(i + 1)) : $to };\n }\n }\n close($to) {\n let close = this.findCloseLevel($to);\n if (!close)\n return null;\n while (this.depth > close.depth)\n this.closeFrontierNode();\n if (close.fit.childCount)\n this.placed = addToFragment(this.placed, close.depth, close.fit);\n $to = close.move;\n for (let d = close.depth + 1; d <= $to.depth; d++) {\n let node = $to.node(d), add = node.type.contentMatch.fillBefore(node.content, true, $to.index(d));\n this.openFrontierNode(node.type, node.attrs, add);\n }\n return $to;\n }\n openFrontierNode(type, attrs = null, content) {\n let top = this.frontier[this.depth];\n top.match = top.match.matchType(type);\n this.placed = addToFragment(this.placed, this.depth, Fragment.from(type.create(attrs, content)));\n this.frontier.push({ type, match: type.contentMatch });\n }\n closeFrontierNode() {\n let open = this.frontier.pop();\n let add = open.match.fillBefore(Fragment.empty, true);\n if (add.childCount)\n this.placed = addToFragment(this.placed, this.frontier.length, add);\n }\n}\nfunction dropFromFragment(fragment, depth, count) {\n if (depth == 0)\n return fragment.cutByIndex(count, fragment.childCount);\n return fragment.replaceChild(0, fragment.firstChild.copy(dropFromFragment(fragment.firstChild.content, depth - 1, count)));\n}\nfunction addToFragment(fragment, depth, content) {\n if (depth == 0)\n return fragment.append(content);\n return fragment.replaceChild(fragment.childCount - 1, fragment.lastChild.copy(addToFragment(fragment.lastChild.content, depth - 1, content)));\n}\nfunction contentAt(fragment, depth) {\n for (let i = 0; i < depth; i++)\n fragment = fragment.firstChild.content;\n return fragment;\n}\nfunction closeNodeStart(node, openStart, openEnd) {\n if (openStart <= 0)\n return node;\n let frag = node.content;\n if (openStart > 1)\n frag = frag.replaceChild(0, closeNodeStart(frag.firstChild, openStart - 1, frag.childCount == 1 ? openEnd - 1 : 0));\n if (openStart > 0) {\n frag = node.type.contentMatch.fillBefore(frag).append(frag);\n if (openEnd <= 0)\n frag = frag.append(node.type.contentMatch.matchFragment(frag).fillBefore(Fragment.empty, true));\n }\n return node.copy(frag);\n}\nfunction contentAfterFits($to, depth, type, match, open) {\n let node = $to.node(depth), index = open ? $to.indexAfter(depth) : $to.index(depth);\n if (index == node.childCount && !type.compatibleContent(node.type))\n return null;\n let fit = match.fillBefore(node.content, true, index);\n return fit && !invalidMarks(type, node.content, index) ? fit : null;\n}\nfunction invalidMarks(type, fragment, start) {\n for (let i = start; i < fragment.childCount; i++)\n if (!type.allowsMarks(fragment.child(i).marks))\n return true;\n return false;\n}\nfunction definesContent(type) {\n return type.spec.defining || type.spec.definingForContent;\n}\nfunction replaceRange(tr, from, to, slice) {\n if (!slice.size)\n return tr.deleteRange(from, to);\n let $from = tr.doc.resolve(from), $to = tr.doc.resolve(to);\n if (fitsTrivially($from, $to, slice))\n return tr.step(new ReplaceStep(from, to, slice));\n let targetDepths = coveredDepths($from, tr.doc.resolve(to));\n // Can't replace the whole document, so remove 0 if it's present\n if (targetDepths[targetDepths.length - 1] == 0)\n targetDepths.pop();\n // Negative numbers represent not expansion over the whole node at\n // that depth, but replacing from $from.before(-D) to $to.pos.\n let preferredTarget = -($from.depth + 1);\n targetDepths.unshift(preferredTarget);\n // This loop picks a preferred target depth, if one of the covering\n // depths is not outside of a defining node, and adds negative\n // depths for any depth that has $from at its start and does not\n // cross a defining node.\n for (let d = $from.depth, pos = $from.pos - 1; d > 0; d--, pos--) {\n let spec = $from.node(d).type.spec;\n if (spec.defining || spec.definingAsContext || spec.isolating)\n break;\n if (targetDepths.indexOf(d) > -1)\n preferredTarget = d;\n else if ($from.before(d) == pos)\n targetDepths.splice(1, 0, -d);\n }\n // Try to fit each possible depth of the slice into each possible\n // target depth, starting with the preferred depths.\n let preferredTargetIndex = targetDepths.indexOf(preferredTarget);\n let leftNodes = [], preferredDepth = slice.openStart;\n for (let content = slice.content, i = 0;; i++) {\n let node = content.firstChild;\n leftNodes.push(node);\n if (i == slice.openStart)\n break;\n content = node.content;\n }\n // Back up preferredDepth to cover defining textblocks directly\n // above it, possibly skipping a non-defining textblock.\n for (let d = preferredDepth - 1; d >= 0; d--) {\n let leftNode = leftNodes[d], def = definesContent(leftNode.type);\n if (def && !leftNode.sameMarkup($from.node(Math.abs(preferredTarget) - 1)))\n preferredDepth = d;\n else if (def || !leftNode.type.isTextblock)\n break;\n }\n for (let j = slice.openStart; j >= 0; j--) {\n let openDepth = (j + preferredDepth + 1) % (slice.openStart + 1);\n let insert = leftNodes[openDepth];\n if (!insert)\n continue;\n for (let i = 0; i < targetDepths.length; i++) {\n // Loop over possible expansion levels, starting with the\n // preferred one\n let targetDepth = targetDepths[(i + preferredTargetIndex) % targetDepths.length], expand = true;\n if (targetDepth < 0) {\n expand = false;\n targetDepth = -targetDepth;\n }\n let parent = $from.node(targetDepth - 1), index = $from.index(targetDepth - 1);\n if (parent.canReplaceWith(index, index, insert.type, insert.marks))\n return tr.replace($from.before(targetDepth), expand ? $to.after(targetDepth) : to, new Slice(closeFragment(slice.content, 0, slice.openStart, openDepth), openDepth, slice.openEnd));\n }\n }\n let startSteps = tr.steps.length;\n for (let i = targetDepths.length - 1; i >= 0; i--) {\n tr.replace(from, to, slice);\n if (tr.steps.length > startSteps)\n break;\n let depth = targetDepths[i];\n if (depth < 0)\n continue;\n from = $from.before(depth);\n to = $to.after(depth);\n }\n}\nfunction closeFragment(fragment, depth, oldOpen, newOpen, parent) {\n if (depth < oldOpen) {\n let first = fragment.firstChild;\n fragment = fragment.replaceChild(0, first.copy(closeFragment(first.content, depth + 1, oldOpen, newOpen, first)));\n }\n if (depth > newOpen) {\n let match = parent.contentMatchAt(0);\n let start = match.fillBefore(fragment).append(fragment);\n fragment = start.append(match.matchFragment(start).fillBefore(Fragment.empty, true));\n }\n return fragment;\n}\nfunction replaceRangeWith(tr, from, to, node) {\n if (!node.isInline && from == to && tr.doc.resolve(from).parent.content.size) {\n let point = insertPoint(tr.doc, from, node.type);\n if (point != null)\n from = to = point;\n }\n tr.replaceRange(from, to, new Slice(Fragment.from(node), 0, 0));\n}\nfunction deleteRange(tr, from, to) {\n let $from = tr.doc.resolve(from), $to = tr.doc.resolve(to);\n let covered = coveredDepths($from, $to);\n for (let i = 0; i < covered.length; i++) {\n let depth = covered[i], last = i == covered.length - 1;\n if ((last && depth == 0) || $from.node(depth).type.contentMatch.validEnd)\n return tr.delete($from.start(depth), $to.end(depth));\n if (depth > 0 && (last || $from.node(depth - 1).canReplace($from.index(depth - 1), $to.indexAfter(depth - 1))))\n return tr.delete($from.before(depth), $to.after(depth));\n }\n for (let d = 1; d <= $from.depth && d <= $to.depth; d++) {\n if (from - $from.start(d) == $from.depth - d && to > $from.end(d) && $to.end(d) - to != $to.depth - d)\n return tr.delete($from.before(d), to);\n }\n tr.delete(from, to);\n}\n// Returns an array of all depths for which $from - $to spans the\n// whole content of the nodes at that depth.\nfunction coveredDepths($from, $to) {\n let result = [], minDepth = Math.min($from.depth, $to.depth);\n for (let d = minDepth; d >= 0; d--) {\n let start = $from.start(d);\n if (start < $from.pos - ($from.depth - d) ||\n $to.end(d) > $to.pos + ($to.depth - d) ||\n $from.node(d).type.spec.isolating ||\n $to.node(d).type.spec.isolating)\n break;\n if (start == $to.start(d) ||\n (d == $from.depth && d == $to.depth && $from.parent.inlineContent && $to.parent.inlineContent &&\n d && $to.start(d - 1) == start - 1))\n result.push(d);\n }\n return result;\n}\n\n/**\nUpdate an attribute in a specific node.\n*/\nclass AttrStep extends Step {\n /**\n Construct an attribute step.\n */\n constructor(\n /**\n The position of the target node.\n */\n pos, \n /**\n The attribute to set.\n */\n attr, \n // The attribute's new value.\n value) {\n super();\n this.pos = pos;\n this.attr = attr;\n this.value = value;\n }\n apply(doc) {\n let node = doc.nodeAt(this.pos);\n if (!node)\n return StepResult.fail(\"No node at attribute step's position\");\n let attrs = Object.create(null);\n for (let name in node.attrs)\n attrs[name] = node.attrs[name];\n attrs[this.attr] = this.value;\n let updated = node.type.create(attrs, null, node.marks);\n return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n }\n getMap() {\n return StepMap.empty;\n }\n invert(doc) {\n return new AttrStep(this.pos, this.attr, doc.nodeAt(this.pos).attrs[this.attr]);\n }\n map(mapping) {\n let pos = mapping.mapResult(this.pos, 1);\n return pos.deletedAfter ? null : new AttrStep(pos.pos, this.attr, this.value);\n }\n toJSON() {\n return { stepType: \"attr\", pos: this.pos, attr: this.attr, value: this.value };\n }\n static fromJSON(schema, json) {\n if (typeof json.pos != \"number\" || typeof json.attr != \"string\")\n throw new RangeError(\"Invalid input for AttrStep.fromJSON\");\n return new AttrStep(json.pos, json.attr, json.value);\n }\n}\nStep.jsonID(\"attr\", AttrStep);\n/**\nUpdate an attribute in the doc node.\n*/\nclass DocAttrStep extends Step {\n /**\n Construct an attribute step.\n */\n constructor(\n /**\n The attribute to set.\n */\n attr, \n // The attribute's new value.\n value) {\n super();\n this.attr = attr;\n this.value = value;\n }\n apply(doc) {\n let attrs = Object.create(null);\n for (let name in doc.attrs)\n attrs[name] = doc.attrs[name];\n attrs[this.attr] = this.value;\n let updated = doc.type.create(attrs, doc.content, doc.marks);\n return StepResult.ok(updated);\n }\n getMap() {\n return StepMap.empty;\n }\n invert(doc) {\n return new DocAttrStep(this.attr, doc.attrs[this.attr]);\n }\n map(mapping) {\n return this;\n }\n toJSON() {\n return { stepType: \"docAttr\", attr: this.attr, value: this.value };\n }\n static fromJSON(schema, json) {\n if (typeof json.attr != \"string\")\n throw new RangeError(\"Invalid input for DocAttrStep.fromJSON\");\n return new DocAttrStep(json.attr, json.value);\n }\n}\nStep.jsonID(\"docAttr\", DocAttrStep);\n\n/**\n@internal\n*/\nlet TransformError = class extends Error {\n};\nTransformError = function TransformError(message) {\n let err = Error.call(this, message);\n err.__proto__ = TransformError.prototype;\n return err;\n};\nTransformError.prototype = Object.create(Error.prototype);\nTransformError.prototype.constructor = TransformError;\nTransformError.prototype.name = \"TransformError\";\n/**\nAbstraction to build up and track an array of\n[steps](https://prosemirror.net/docs/ref/#transform.Step) representing a document transformation.\n\nMost transforming methods return the `Transform` object itself, so\nthat they can be chained.\n*/\nclass Transform {\n /**\n Create a transform that starts with the given document.\n */\n constructor(\n /**\n The current document (the result of applying the steps in the\n transform).\n */\n doc) {\n this.doc = doc;\n /**\n The steps in this transform.\n */\n this.steps = [];\n /**\n The documents before each of the steps.\n */\n this.docs = [];\n /**\n A mapping with the maps for each of the steps in this transform.\n */\n this.mapping = new Mapping;\n }\n /**\n The starting document.\n */\n get before() { return this.docs.length ? this.docs[0] : this.doc; }\n /**\n Apply a new step in this transform, saving the result. Throws an\n error when the step fails.\n */\n step(step) {\n let result = this.maybeStep(step);\n if (result.failed)\n throw new TransformError(result.failed);\n return this;\n }\n /**\n Try to apply a step in this transformation, ignoring it if it\n fails. Returns the step result.\n */\n maybeStep(step) {\n let result = step.apply(this.doc);\n if (!result.failed)\n this.addStep(step, result.doc);\n return result;\n }\n /**\n True when the document has been changed (when there are any\n steps).\n */\n get docChanged() {\n return this.steps.length > 0;\n }\n /**\n @internal\n */\n addStep(step, doc) {\n this.docs.push(this.doc);\n this.steps.push(step);\n this.mapping.appendMap(step.getMap());\n this.doc = doc;\n }\n /**\n Replace the part of the document between `from` and `to` with the\n given `slice`.\n */\n replace(from, to = from, slice = Slice.empty) {\n let step = replaceStep(this.doc, from, to, slice);\n if (step)\n this.step(step);\n return this;\n }\n /**\n Replace the given range with the given content, which may be a\n fragment, node, or array of nodes.\n */\n replaceWith(from, to, content) {\n return this.replace(from, to, new Slice(Fragment.from(content), 0, 0));\n }\n /**\n Delete the content between the given positions.\n */\n delete(from, to) {\n return this.replace(from, to, Slice.empty);\n }\n /**\n Insert the given content at the given position.\n */\n insert(pos, content) {\n return this.replaceWith(pos, pos, content);\n }\n /**\n Replace a range of the document with a given slice, using\n `from`, `to`, and the slice's\n [`openStart`](https://prosemirror.net/docs/ref/#model.Slice.openStart) property as hints, rather\n than fixed start and end points. This method may grow the\n replaced area or close open nodes in the slice in order to get a\n fit that is more in line with WYSIWYG expectations, by dropping\n fully covered parent nodes of the replaced region when they are\n marked [non-defining as\n context](https://prosemirror.net/docs/ref/#model.NodeSpec.definingAsContext), or including an\n open parent node from the slice that _is_ marked as [defining\n its content](https://prosemirror.net/docs/ref/#model.NodeSpec.definingForContent).\n \n This is the method, for example, to handle paste. The similar\n [`replace`](https://prosemirror.net/docs/ref/#transform.Transform.replace) method is a more\n primitive tool which will _not_ move the start and end of its given\n range, and is useful in situations where you need more precise\n control over what happens.\n */\n replaceRange(from, to, slice) {\n replaceRange(this, from, to, slice);\n return this;\n }\n /**\n Replace the given range with a node, but use `from` and `to` as\n hints, rather than precise positions. When from and to are the same\n and are at the start or end of a parent node in which the given\n node doesn't fit, this method may _move_ them out towards a parent\n that does allow the given node to be placed. When the given range\n completely covers a parent node, this method may completely replace\n that parent node.\n */\n replaceRangeWith(from, to, node) {\n replaceRangeWith(this, from, to, node);\n return this;\n }\n /**\n Delete the given range, expanding it to cover fully covered\n parent nodes until a valid replace is found.\n */\n deleteRange(from, to) {\n deleteRange(this, from, to);\n return this;\n }\n /**\n Split the content in the given range off from its parent, if there\n is sibling content before or after it, and move it up the tree to\n the depth specified by `target`. You'll probably want to use\n [`liftTarget`](https://prosemirror.net/docs/ref/#transform.liftTarget) to compute `target`, to make\n sure the lift is valid.\n */\n lift(range, target) {\n lift(this, range, target);\n return this;\n }\n /**\n Join the blocks around the given position. If depth is 2, their\n last and first siblings are also joined, and so on.\n */\n join(pos, depth = 1) {\n join(this, pos, depth);\n return this;\n }\n /**\n Wrap the given [range](https://prosemirror.net/docs/ref/#model.NodeRange) in the given set of wrappers.\n The wrappers are assumed to be valid in this position, and should\n probably be computed with [`findWrapping`](https://prosemirror.net/docs/ref/#transform.findWrapping).\n */\n wrap(range, wrappers) {\n wrap(this, range, wrappers);\n return this;\n }\n /**\n Set the type of all textblocks (partly) between `from` and `to` to\n the given node type with the given attributes.\n */\n setBlockType(from, to = from, type, attrs = null) {\n setBlockType(this, from, to, type, attrs);\n return this;\n }\n /**\n Change the type, attributes, and/or marks of the node at `pos`.\n When `type` isn't given, the existing node type is preserved,\n */\n setNodeMarkup(pos, type, attrs = null, marks) {\n setNodeMarkup(this, pos, type, attrs, marks);\n return this;\n }\n /**\n Set a single attribute on a given node to a new value.\n The `pos` addresses the document content. Use `setDocAttribute`\n to set attributes on the document itself.\n */\n setNodeAttribute(pos, attr, value) {\n this.step(new AttrStep(pos, attr, value));\n return this;\n }\n /**\n Set a single attribute on the document to a new value.\n */\n setDocAttribute(attr, value) {\n this.step(new DocAttrStep(attr, value));\n return this;\n }\n /**\n Add a mark to the node at position `pos`.\n */\n addNodeMark(pos, mark) {\n this.step(new AddNodeMarkStep(pos, mark));\n return this;\n }\n /**\n Remove a mark (or a mark of the given type) from the node at\n position `pos`.\n */\n removeNodeMark(pos, mark) {\n if (!(mark instanceof Mark)) {\n let node = this.doc.nodeAt(pos);\n if (!node)\n throw new RangeError(\"No node at position \" + pos);\n mark = mark.isInSet(node.marks);\n if (!mark)\n return this;\n }\n this.step(new RemoveNodeMarkStep(pos, mark));\n return this;\n }\n /**\n Split the node at the given position, and optionally, if `depth` is\n greater than one, any number of nodes above that. By default, the\n parts split off will inherit the node type of the original node.\n This can be changed by passing an array of types and attributes to\n use after the split.\n */\n split(pos, depth = 1, typesAfter) {\n split(this, pos, depth, typesAfter);\n return this;\n }\n /**\n Add the given mark to the inline content between `from` and `to`.\n */\n addMark(from, to, mark) {\n addMark(this, from, to, mark);\n return this;\n }\n /**\n Remove marks from inline nodes between `from` and `to`. When\n `mark` is a single mark, remove precisely that mark. When it is\n a mark type, remove all marks of that type. When it is null,\n remove all marks of any type.\n */\n removeMark(from, to, mark) {\n removeMark(this, from, to, mark);\n return this;\n }\n /**\n Removes all marks and nodes from the content of the node at\n `pos` that don't match the given new parent node type. Accepts\n an optional starting [content match](https://prosemirror.net/docs/ref/#model.ContentMatch) as\n third argument.\n */\n clearIncompatible(pos, parentType, match) {\n clearIncompatible(this, pos, parentType, match);\n return this;\n }\n}\n\nexport { AddMarkStep, AddNodeMarkStep, AttrStep, DocAttrStep, MapResult, Mapping, RemoveMarkStep, RemoveNodeMarkStep, ReplaceAroundStep, ReplaceStep, Step, StepMap, StepResult, Transform, TransformError, canJoin, canSplit, dropPoint, findWrapping, insertPoint, joinPoint, liftTarget, replaceStep };\n","import { Slice, Fragment, Mark, Node } from 'prosemirror-model';\nimport { ReplaceStep, ReplaceAroundStep, Transform } from 'prosemirror-transform';\n\nconst classesById = Object.create(null);\n/**\nSuperclass for editor selections. Every selection type should\nextend this. Should not be instantiated directly.\n*/\nclass Selection {\n /**\n Initialize a selection with the head and anchor and ranges. If no\n ranges are given, constructs a single range across `$anchor` and\n `$head`.\n */\n constructor(\n /**\n The resolved anchor of the selection (the side that stays in\n place when the selection is modified).\n */\n $anchor, \n /**\n The resolved head of the selection (the side that moves when\n the selection is modified).\n */\n $head, ranges) {\n this.$anchor = $anchor;\n this.$head = $head;\n this.ranges = ranges || [new SelectionRange($anchor.min($head), $anchor.max($head))];\n }\n /**\n The selection's anchor, as an unresolved position.\n */\n get anchor() { return this.$anchor.pos; }\n /**\n The selection's head.\n */\n get head() { return this.$head.pos; }\n /**\n The lower bound of the selection's main range.\n */\n get from() { return this.$from.pos; }\n /**\n The upper bound of the selection's main range.\n */\n get to() { return this.$to.pos; }\n /**\n The resolved lower bound of the selection's main range.\n */\n get $from() {\n return this.ranges[0].$from;\n }\n /**\n The resolved upper bound of the selection's main range.\n */\n get $to() {\n return this.ranges[0].$to;\n }\n /**\n Indicates whether the selection contains any content.\n */\n get empty() {\n let ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++)\n if (ranges[i].$from.pos != ranges[i].$to.pos)\n return false;\n return true;\n }\n /**\n Get the content of this selection as a slice.\n */\n content() {\n return this.$from.doc.slice(this.from, this.to, true);\n }\n /**\n Replace the selection with a slice or, if no slice is given,\n delete the selection. Will append to the given transaction.\n */\n replace(tr, content = Slice.empty) {\n // Put the new selection at the position after the inserted\n // content. When that ended in an inline node, search backwards,\n // to get the position after that node. If not, search forward.\n let lastNode = content.content.lastChild, lastParent = null;\n for (let i = 0; i < content.openEnd; i++) {\n lastParent = lastNode;\n lastNode = lastNode.lastChild;\n }\n let mapFrom = tr.steps.length, ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n tr.replaceRange(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content);\n if (i == 0)\n selectionToInsertionEnd(tr, mapFrom, (lastNode ? lastNode.isInline : lastParent && lastParent.isTextblock) ? -1 : 1);\n }\n }\n /**\n Replace the selection with the given node, appending the changes\n to the given transaction.\n */\n replaceWith(tr, node) {\n let mapFrom = tr.steps.length, ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n let from = mapping.map($from.pos), to = mapping.map($to.pos);\n if (i) {\n tr.deleteRange(from, to);\n }\n else {\n tr.replaceRangeWith(from, to, node);\n selectionToInsertionEnd(tr, mapFrom, node.isInline ? -1 : 1);\n }\n }\n }\n /**\n Find a valid cursor or leaf node selection starting at the given\n position and searching back if `dir` is negative, and forward if\n positive. When `textOnly` is true, only consider cursor\n selections. Will return null when no valid selection position is\n found.\n */\n static findFrom($pos, dir, textOnly = false) {\n let inner = $pos.parent.inlineContent ? new TextSelection($pos)\n : findSelectionIn($pos.node(0), $pos.parent, $pos.pos, $pos.index(), dir, textOnly);\n if (inner)\n return inner;\n for (let depth = $pos.depth - 1; depth >= 0; depth--) {\n let found = dir < 0\n ? findSelectionIn($pos.node(0), $pos.node(depth), $pos.before(depth + 1), $pos.index(depth), dir, textOnly)\n : findSelectionIn($pos.node(0), $pos.node(depth), $pos.after(depth + 1), $pos.index(depth) + 1, dir, textOnly);\n if (found)\n return found;\n }\n return null;\n }\n /**\n Find a valid cursor or leaf node selection near the given\n position. Searches forward first by default, but if `bias` is\n negative, it will search backwards first.\n */\n static near($pos, bias = 1) {\n return this.findFrom($pos, bias) || this.findFrom($pos, -bias) || new AllSelection($pos.node(0));\n }\n /**\n Find the cursor or leaf node selection closest to the start of\n the given document. Will return an\n [`AllSelection`](https://prosemirror.net/docs/ref/#state.AllSelection) if no valid position\n exists.\n */\n static atStart(doc) {\n return findSelectionIn(doc, doc, 0, 0, 1) || new AllSelection(doc);\n }\n /**\n Find the cursor or leaf node selection closest to the end of the\n given document.\n */\n static atEnd(doc) {\n return findSelectionIn(doc, doc, doc.content.size, doc.childCount, -1) || new AllSelection(doc);\n }\n /**\n Deserialize the JSON representation of a selection. Must be\n implemented for custom classes (as a static class method).\n */\n static fromJSON(doc, json) {\n if (!json || !json.type)\n throw new RangeError(\"Invalid input for Selection.fromJSON\");\n let cls = classesById[json.type];\n if (!cls)\n throw new RangeError(`No selection type ${json.type} defined`);\n return cls.fromJSON(doc, json);\n }\n /**\n To be able to deserialize selections from JSON, custom selection\n classes must register themselves with an ID string, so that they\n can be disambiguated. Try to pick something that's unlikely to\n clash with classes from other modules.\n */\n static jsonID(id, selectionClass) {\n if (id in classesById)\n throw new RangeError(\"Duplicate use of selection JSON ID \" + id);\n classesById[id] = selectionClass;\n selectionClass.prototype.jsonID = id;\n return selectionClass;\n }\n /**\n Get a [bookmark](https://prosemirror.net/docs/ref/#state.SelectionBookmark) for this selection,\n which is a value that can be mapped without having access to a\n current document, and later resolved to a real selection for a\n given document again. (This is used mostly by the history to\n track and restore old selections.) The default implementation of\n this method just converts the selection to a text selection and\n returns the bookmark for that.\n */\n getBookmark() {\n return TextSelection.between(this.$anchor, this.$head).getBookmark();\n }\n}\nSelection.prototype.visible = true;\n/**\nRepresents a selected range in a document.\n*/\nclass SelectionRange {\n /**\n Create a range.\n */\n constructor(\n /**\n The lower bound of the range.\n */\n $from, \n /**\n The upper bound of the range.\n */\n $to) {\n this.$from = $from;\n this.$to = $to;\n }\n}\nlet warnedAboutTextSelection = false;\nfunction checkTextSelection($pos) {\n if (!warnedAboutTextSelection && !$pos.parent.inlineContent) {\n warnedAboutTextSelection = true;\n console[\"warn\"](\"TextSelection endpoint not pointing into a node with inline content (\" + $pos.parent.type.name + \")\");\n }\n}\n/**\nA text selection represents a classical editor selection, with a\nhead (the moving side) and anchor (immobile side), both of which\npoint into textblock nodes. It can be empty (a regular cursor\nposition).\n*/\nclass TextSelection extends Selection {\n /**\n Construct a text selection between the given points.\n */\n constructor($anchor, $head = $anchor) {\n checkTextSelection($anchor);\n checkTextSelection($head);\n super($anchor, $head);\n }\n /**\n Returns a resolved position if this is a cursor selection (an\n empty text selection), and null otherwise.\n */\n get $cursor() { return this.$anchor.pos == this.$head.pos ? this.$head : null; }\n map(doc, mapping) {\n let $head = doc.resolve(mapping.map(this.head));\n if (!$head.parent.inlineContent)\n return Selection.near($head);\n let $anchor = doc.resolve(mapping.map(this.anchor));\n return new TextSelection($anchor.parent.inlineContent ? $anchor : $head, $head);\n }\n replace(tr, content = Slice.empty) {\n super.replace(tr, content);\n if (content == Slice.empty) {\n let marks = this.$from.marksAcross(this.$to);\n if (marks)\n tr.ensureMarks(marks);\n }\n }\n eq(other) {\n return other instanceof TextSelection && other.anchor == this.anchor && other.head == this.head;\n }\n getBookmark() {\n return new TextBookmark(this.anchor, this.head);\n }\n toJSON() {\n return { type: \"text\", anchor: this.anchor, head: this.head };\n }\n /**\n @internal\n */\n static fromJSON(doc, json) {\n if (typeof json.anchor != \"number\" || typeof json.head != \"number\")\n throw new RangeError(\"Invalid input for TextSelection.fromJSON\");\n return new TextSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n }\n /**\n Create a text selection from non-resolved positions.\n */\n static create(doc, anchor, head = anchor) {\n let $anchor = doc.resolve(anchor);\n return new this($anchor, head == anchor ? $anchor : doc.resolve(head));\n }\n /**\n Return a text selection that spans the given positions or, if\n they aren't text positions, find a text selection near them.\n `bias` determines whether the method searches forward (default)\n or backwards (negative number) first. Will fall back to calling\n [`Selection.near`](https://prosemirror.net/docs/ref/#state.Selection^near) when the document\n doesn't contain a valid text position.\n */\n static between($anchor, $head, bias) {\n let dPos = $anchor.pos - $head.pos;\n if (!bias || dPos)\n bias = dPos >= 0 ? 1 : -1;\n if (!$head.parent.inlineContent) {\n let found = Selection.findFrom($head, bias, true) || Selection.findFrom($head, -bias, true);\n if (found)\n $head = found.$head;\n else\n return Selection.near($head, bias);\n }\n if (!$anchor.parent.inlineContent) {\n if (dPos == 0) {\n $anchor = $head;\n }\n else {\n $anchor = (Selection.findFrom($anchor, -bias, true) || Selection.findFrom($anchor, bias, true)).$anchor;\n if (($anchor.pos < $head.pos) != (dPos < 0))\n $anchor = $head;\n }\n }\n return new TextSelection($anchor, $head);\n }\n}\nSelection.jsonID(\"text\", TextSelection);\nclass TextBookmark {\n constructor(anchor, head) {\n this.anchor = anchor;\n this.head = head;\n }\n map(mapping) {\n return new TextBookmark(mapping.map(this.anchor), mapping.map(this.head));\n }\n resolve(doc) {\n return TextSelection.between(doc.resolve(this.anchor), doc.resolve(this.head));\n }\n}\n/**\nA node selection is a selection that points at a single node. All\nnodes marked [selectable](https://prosemirror.net/docs/ref/#model.NodeSpec.selectable) can be the\ntarget of a node selection. In such a selection, `from` and `to`\npoint directly before and after the selected node, `anchor` equals\n`from`, and `head` equals `to`..\n*/\nclass NodeSelection extends Selection {\n /**\n Create a node selection. Does not verify the validity of its\n argument.\n */\n constructor($pos) {\n let node = $pos.nodeAfter;\n let $end = $pos.node(0).resolve($pos.pos + node.nodeSize);\n super($pos, $end);\n this.node = node;\n }\n map(doc, mapping) {\n let { deleted, pos } = mapping.mapResult(this.anchor);\n let $pos = doc.resolve(pos);\n if (deleted)\n return Selection.near($pos);\n return new NodeSelection($pos);\n }\n content() {\n return new Slice(Fragment.from(this.node), 0, 0);\n }\n eq(other) {\n return other instanceof NodeSelection && other.anchor == this.anchor;\n }\n toJSON() {\n return { type: \"node\", anchor: this.anchor };\n }\n getBookmark() { return new NodeBookmark(this.anchor); }\n /**\n @internal\n */\n static fromJSON(doc, json) {\n if (typeof json.anchor != \"number\")\n throw new RangeError(\"Invalid input for NodeSelection.fromJSON\");\n return new NodeSelection(doc.resolve(json.anchor));\n }\n /**\n Create a node selection from non-resolved positions.\n */\n static create(doc, from) {\n return new NodeSelection(doc.resolve(from));\n }\n /**\n Determines whether the given node may be selected as a node\n selection.\n */\n static isSelectable(node) {\n return !node.isText && node.type.spec.selectable !== false;\n }\n}\nNodeSelection.prototype.visible = false;\nSelection.jsonID(\"node\", NodeSelection);\nclass NodeBookmark {\n constructor(anchor) {\n this.anchor = anchor;\n }\n map(mapping) {\n let { deleted, pos } = mapping.mapResult(this.anchor);\n return deleted ? new TextBookmark(pos, pos) : new NodeBookmark(pos);\n }\n resolve(doc) {\n let $pos = doc.resolve(this.anchor), node = $pos.nodeAfter;\n if (node && NodeSelection.isSelectable(node))\n return new NodeSelection($pos);\n return Selection.near($pos);\n }\n}\n/**\nA selection type that represents selecting the whole document\n(which can not necessarily be expressed with a text selection, when\nthere are for example leaf block nodes at the start or end of the\ndocument).\n*/\nclass AllSelection extends Selection {\n /**\n Create an all-selection over the given document.\n */\n constructor(doc) {\n super(doc.resolve(0), doc.resolve(doc.content.size));\n }\n replace(tr, content = Slice.empty) {\n if (content == Slice.empty) {\n tr.delete(0, tr.doc.content.size);\n let sel = Selection.atStart(tr.doc);\n if (!sel.eq(tr.selection))\n tr.setSelection(sel);\n }\n else {\n super.replace(tr, content);\n }\n }\n toJSON() { return { type: \"all\" }; }\n /**\n @internal\n */\n static fromJSON(doc) { return new AllSelection(doc); }\n map(doc) { return new AllSelection(doc); }\n eq(other) { return other instanceof AllSelection; }\n getBookmark() { return AllBookmark; }\n}\nSelection.jsonID(\"all\", AllSelection);\nconst AllBookmark = {\n map() { return this; },\n resolve(doc) { return new AllSelection(doc); }\n};\n// FIXME we'll need some awareness of text direction when scanning for selections\n// Try to find a selection inside the given node. `pos` points at the\n// position where the search starts. When `text` is true, only return\n// text selections.\nfunction findSelectionIn(doc, node, pos, index, dir, text = false) {\n if (node.inlineContent)\n return TextSelection.create(doc, pos);\n for (let i = index - (dir > 0 ? 0 : 1); dir > 0 ? i < node.childCount : i >= 0; i += dir) {\n let child = node.child(i);\n if (!child.isAtom) {\n let inner = findSelectionIn(doc, child, pos + dir, dir < 0 ? child.childCount : 0, dir, text);\n if (inner)\n return inner;\n }\n else if (!text && NodeSelection.isSelectable(child)) {\n return NodeSelection.create(doc, pos - (dir < 0 ? child.nodeSize : 0));\n }\n pos += child.nodeSize * dir;\n }\n return null;\n}\nfunction selectionToInsertionEnd(tr, startLen, bias) {\n let last = tr.steps.length - 1;\n if (last < startLen)\n return;\n let step = tr.steps[last];\n if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep))\n return;\n let map = tr.mapping.maps[last], end;\n map.forEach((_from, _to, _newFrom, newTo) => { if (end == null)\n end = newTo; });\n tr.setSelection(Selection.near(tr.doc.resolve(end), bias));\n}\n\nconst UPDATED_SEL = 1, UPDATED_MARKS = 2, UPDATED_SCROLL = 4;\n/**\nAn editor state transaction, which can be applied to a state to\ncreate an updated state. Use\n[`EditorState.tr`](https://prosemirror.net/docs/ref/#state.EditorState.tr) to create an instance.\n\nTransactions track changes to the document (they are a subclass of\n[`Transform`](https://prosemirror.net/docs/ref/#transform.Transform)), but also other state changes,\nlike selection updates and adjustments of the set of [stored\nmarks](https://prosemirror.net/docs/ref/#state.EditorState.storedMarks). In addition, you can store\nmetadata properties in a transaction, which are extra pieces of\ninformation that client code or plugins can use to describe what a\ntransaction represents, so that they can update their [own\nstate](https://prosemirror.net/docs/ref/#state.StateField) accordingly.\n\nThe [editor view](https://prosemirror.net/docs/ref/#view.EditorView) uses a few metadata\nproperties: it will attach a property `\"pointer\"` with the value\n`true` to selection transactions directly caused by mouse or touch\ninput, a `\"composition\"` property holding an ID identifying the\ncomposition that caused it to transactions caused by composed DOM\ninput, and a `\"uiEvent\"` property of that may be `\"paste\"`,\n`\"cut\"`, or `\"drop\"`.\n*/\nclass Transaction extends Transform {\n /**\n @internal\n */\n constructor(state) {\n super(state.doc);\n // The step count for which the current selection is valid.\n this.curSelectionFor = 0;\n // Bitfield to track which aspects of the state were updated by\n // this transaction.\n this.updated = 0;\n // Object used to store metadata properties for the transaction.\n this.meta = Object.create(null);\n this.time = Date.now();\n this.curSelection = state.selection;\n this.storedMarks = state.storedMarks;\n }\n /**\n The transaction's current selection. This defaults to the editor\n selection [mapped](https://prosemirror.net/docs/ref/#state.Selection.map) through the steps in the\n transaction, but can be overwritten with\n [`setSelection`](https://prosemirror.net/docs/ref/#state.Transaction.setSelection).\n */\n get selection() {\n if (this.curSelectionFor < this.steps.length) {\n this.curSelection = this.curSelection.map(this.doc, this.mapping.slice(this.curSelectionFor));\n this.curSelectionFor = this.steps.length;\n }\n return this.curSelection;\n }\n /**\n Update the transaction's current selection. Will determine the\n selection that the editor gets when the transaction is applied.\n */\n setSelection(selection) {\n if (selection.$from.doc != this.doc)\n throw new RangeError(\"Selection passed to setSelection must point at the current document\");\n this.curSelection = selection;\n this.curSelectionFor = this.steps.length;\n this.updated = (this.updated | UPDATED_SEL) & ~UPDATED_MARKS;\n this.storedMarks = null;\n return this;\n }\n /**\n Whether the selection was explicitly updated by this transaction.\n */\n get selectionSet() {\n return (this.updated & UPDATED_SEL) > 0;\n }\n /**\n Set the current stored marks.\n */\n setStoredMarks(marks) {\n this.storedMarks = marks;\n this.updated |= UPDATED_MARKS;\n return this;\n }\n /**\n Make sure the current stored marks or, if that is null, the marks\n at the selection, match the given set of marks. Does nothing if\n this is already the case.\n */\n ensureMarks(marks) {\n if (!Mark.sameSet(this.storedMarks || this.selection.$from.marks(), marks))\n this.setStoredMarks(marks);\n return this;\n }\n /**\n Add a mark to the set of stored marks.\n */\n addStoredMark(mark) {\n return this.ensureMarks(mark.addToSet(this.storedMarks || this.selection.$head.marks()));\n }\n /**\n Remove a mark or mark type from the set of stored marks.\n */\n removeStoredMark(mark) {\n return this.ensureMarks(mark.removeFromSet(this.storedMarks || this.selection.$head.marks()));\n }\n /**\n Whether the stored marks were explicitly set for this transaction.\n */\n get storedMarksSet() {\n return (this.updated & UPDATED_MARKS) > 0;\n }\n /**\n @internal\n */\n addStep(step, doc) {\n super.addStep(step, doc);\n this.updated = this.updated & ~UPDATED_MARKS;\n this.storedMarks = null;\n }\n /**\n Update the timestamp for the transaction.\n */\n setTime(time) {\n this.time = time;\n return this;\n }\n /**\n Replace the current selection with the given slice.\n */\n replaceSelection(slice) {\n this.selection.replace(this, slice);\n return this;\n }\n /**\n Replace the selection with the given node. When `inheritMarks` is\n true and the content is inline, it inherits the marks from the\n place where it is inserted.\n */\n replaceSelectionWith(node, inheritMarks = true) {\n let selection = this.selection;\n if (inheritMarks)\n node = node.mark(this.storedMarks || (selection.empty ? selection.$from.marks() : (selection.$from.marksAcross(selection.$to) || Mark.none)));\n selection.replaceWith(this, node);\n return this;\n }\n /**\n Delete the selection.\n */\n deleteSelection() {\n this.selection.replace(this);\n return this;\n }\n /**\n Replace the given range, or the selection if no range is given,\n with a text node containing the given string.\n */\n insertText(text, from, to) {\n let schema = this.doc.type.schema;\n if (from == null) {\n if (!text)\n return this.deleteSelection();\n return this.replaceSelectionWith(schema.text(text), true);\n }\n else {\n if (to == null)\n to = from;\n to = to == null ? from : to;\n if (!text)\n return this.deleteRange(from, to);\n let marks = this.storedMarks;\n if (!marks) {\n let $from = this.doc.resolve(from);\n marks = to == from ? $from.marks() : $from.marksAcross(this.doc.resolve(to));\n }\n this.replaceRangeWith(from, to, schema.text(text, marks));\n if (!this.selection.empty)\n this.setSelection(Selection.near(this.selection.$to));\n return this;\n }\n }\n /**\n Store a metadata property in this transaction, keyed either by\n name or by plugin.\n */\n setMeta(key, value) {\n this.meta[typeof key == \"string\" ? key : key.key] = value;\n return this;\n }\n /**\n Retrieve a metadata property for a given name or plugin.\n */\n getMeta(key) {\n return this.meta[typeof key == \"string\" ? key : key.key];\n }\n /**\n Returns true if this transaction doesn't contain any metadata,\n and can thus safely be extended.\n */\n get isGeneric() {\n for (let _ in this.meta)\n return false;\n return true;\n }\n /**\n Indicate that the editor should scroll the selection into view\n when updated to the state produced by this transaction.\n */\n scrollIntoView() {\n this.updated |= UPDATED_SCROLL;\n return this;\n }\n /**\n True when this transaction has had `scrollIntoView` called on it.\n */\n get scrolledIntoView() {\n return (this.updated & UPDATED_SCROLL) > 0;\n }\n}\n\nfunction bind(f, self) {\n return !self || !f ? f : f.bind(self);\n}\nclass FieldDesc {\n constructor(name, desc, self) {\n this.name = name;\n this.init = bind(desc.init, self);\n this.apply = bind(desc.apply, self);\n }\n}\nconst baseFields = [\n new FieldDesc(\"doc\", {\n init(config) { return config.doc || config.schema.topNodeType.createAndFill(); },\n apply(tr) { return tr.doc; }\n }),\n new FieldDesc(\"selection\", {\n init(config, instance) { return config.selection || Selection.atStart(instance.doc); },\n apply(tr) { return tr.selection; }\n }),\n new FieldDesc(\"storedMarks\", {\n init(config) { return config.storedMarks || null; },\n apply(tr, _marks, _old, state) { return state.selection.$cursor ? tr.storedMarks : null; }\n }),\n new FieldDesc(\"scrollToSelection\", {\n init() { return 0; },\n apply(tr, prev) { return tr.scrolledIntoView ? prev + 1 : prev; }\n })\n];\n// Object wrapping the part of a state object that stays the same\n// across transactions. Stored in the state's `config` property.\nclass Configuration {\n constructor(schema, plugins) {\n this.schema = schema;\n this.plugins = [];\n this.pluginsByKey = Object.create(null);\n this.fields = baseFields.slice();\n if (plugins)\n plugins.forEach(plugin => {\n if (this.pluginsByKey[plugin.key])\n throw new RangeError(\"Adding different instances of a keyed plugin (\" + plugin.key + \")\");\n this.plugins.push(plugin);\n this.pluginsByKey[plugin.key] = plugin;\n if (plugin.spec.state)\n this.fields.push(new FieldDesc(plugin.key, plugin.spec.state, plugin));\n });\n }\n}\n/**\nThe state of a ProseMirror editor is represented by an object of\nthis type. A state is a persistent data structure—it isn't\nupdated, but rather a new state value is computed from an old one\nusing the [`apply`](https://prosemirror.net/docs/ref/#state.EditorState.apply) method.\n\nA state holds a number of built-in fields, and plugins can\n[define](https://prosemirror.net/docs/ref/#state.PluginSpec.state) additional fields.\n*/\nclass EditorState {\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n config) {\n this.config = config;\n }\n /**\n The schema of the state's document.\n */\n get schema() {\n return this.config.schema;\n }\n /**\n The plugins that are active in this state.\n */\n get plugins() {\n return this.config.plugins;\n }\n /**\n Apply the given transaction to produce a new state.\n */\n apply(tr) {\n return this.applyTransaction(tr).state;\n }\n /**\n @internal\n */\n filterTransaction(tr, ignore = -1) {\n for (let i = 0; i < this.config.plugins.length; i++)\n if (i != ignore) {\n let plugin = this.config.plugins[i];\n if (plugin.spec.filterTransaction && !plugin.spec.filterTransaction.call(plugin, tr, this))\n return false;\n }\n return true;\n }\n /**\n Verbose variant of [`apply`](https://prosemirror.net/docs/ref/#state.EditorState.apply) that\n returns the precise transactions that were applied (which might\n be influenced by the [transaction\n hooks](https://prosemirror.net/docs/ref/#state.PluginSpec.filterTransaction) of\n plugins) along with the new state.\n */\n applyTransaction(rootTr) {\n if (!this.filterTransaction(rootTr))\n return { state: this, transactions: [] };\n let trs = [rootTr], newState = this.applyInner(rootTr), seen = null;\n // This loop repeatedly gives plugins a chance to respond to\n // transactions as new transactions are added, making sure to only\n // pass the transactions the plugin did not see before.\n for (;;) {\n let haveNew = false;\n for (let i = 0; i < this.config.plugins.length; i++) {\n let plugin = this.config.plugins[i];\n if (plugin.spec.appendTransaction) {\n let n = seen ? seen[i].n : 0, oldState = seen ? seen[i].state : this;\n let tr = n < trs.length &&\n plugin.spec.appendTransaction.call(plugin, n ? trs.slice(n) : trs, oldState, newState);\n if (tr && newState.filterTransaction(tr, i)) {\n tr.setMeta(\"appendedTransaction\", rootTr);\n if (!seen) {\n seen = [];\n for (let j = 0; j < this.config.plugins.length; j++)\n seen.push(j < i ? { state: newState, n: trs.length } : { state: this, n: 0 });\n }\n trs.push(tr);\n newState = newState.applyInner(tr);\n haveNew = true;\n }\n if (seen)\n seen[i] = { state: newState, n: trs.length };\n }\n }\n if (!haveNew)\n return { state: newState, transactions: trs };\n }\n }\n /**\n @internal\n */\n applyInner(tr) {\n if (!tr.before.eq(this.doc))\n throw new RangeError(\"Applying a mismatched transaction\");\n let newInstance = new EditorState(this.config), fields = this.config.fields;\n for (let i = 0; i < fields.length; i++) {\n let field = fields[i];\n newInstance[field.name] = field.apply(tr, this[field.name], this, newInstance);\n }\n return newInstance;\n }\n /**\n Start a [transaction](https://prosemirror.net/docs/ref/#state.Transaction) from this state.\n */\n get tr() { return new Transaction(this); }\n /**\n Create a new state.\n */\n static create(config) {\n let $config = new Configuration(config.doc ? config.doc.type.schema : config.schema, config.plugins);\n let instance = new EditorState($config);\n for (let i = 0; i < $config.fields.length; i++)\n instance[$config.fields[i].name] = $config.fields[i].init(config, instance);\n return instance;\n }\n /**\n Create a new state based on this one, but with an adjusted set\n of active plugins. State fields that exist in both sets of\n plugins are kept unchanged. Those that no longer exist are\n dropped, and those that are new are initialized using their\n [`init`](https://prosemirror.net/docs/ref/#state.StateField.init) method, passing in the new\n configuration object..\n */\n reconfigure(config) {\n let $config = new Configuration(this.schema, config.plugins);\n let fields = $config.fields, instance = new EditorState($config);\n for (let i = 0; i < fields.length; i++) {\n let name = fields[i].name;\n instance[name] = this.hasOwnProperty(name) ? this[name] : fields[i].init(config, instance);\n }\n return instance;\n }\n /**\n Serialize this state to JSON. If you want to serialize the state\n of plugins, pass an object mapping property names to use in the\n resulting JSON object to plugin objects. The argument may also be\n a string or number, in which case it is ignored, to support the\n way `JSON.stringify` calls `toString` methods.\n */\n toJSON(pluginFields) {\n let result = { doc: this.doc.toJSON(), selection: this.selection.toJSON() };\n if (this.storedMarks)\n result.storedMarks = this.storedMarks.map(m => m.toJSON());\n if (pluginFields && typeof pluginFields == 'object')\n for (let prop in pluginFields) {\n if (prop == \"doc\" || prop == \"selection\")\n throw new RangeError(\"The JSON fields `doc` and `selection` are reserved\");\n let plugin = pluginFields[prop], state = plugin.spec.state;\n if (state && state.toJSON)\n result[prop] = state.toJSON.call(plugin, this[plugin.key]);\n }\n return result;\n }\n /**\n Deserialize a JSON representation of a state. `config` should\n have at least a `schema` field, and should contain array of\n plugins to initialize the state with. `pluginFields` can be used\n to deserialize the state of plugins, by associating plugin\n instances with the property names they use in the JSON object.\n */\n static fromJSON(config, json, pluginFields) {\n if (!json)\n throw new RangeError(\"Invalid input for EditorState.fromJSON\");\n if (!config.schema)\n throw new RangeError(\"Required config field 'schema' missing\");\n let $config = new Configuration(config.schema, config.plugins);\n let instance = new EditorState($config);\n $config.fields.forEach(field => {\n if (field.name == \"doc\") {\n instance.doc = Node.fromJSON(config.schema, json.doc);\n }\n else if (field.name == \"selection\") {\n instance.selection = Selection.fromJSON(instance.doc, json.selection);\n }\n else if (field.name == \"storedMarks\") {\n if (json.storedMarks)\n instance.storedMarks = json.storedMarks.map(config.schema.markFromJSON);\n }\n else {\n if (pluginFields)\n for (let prop in pluginFields) {\n let plugin = pluginFields[prop], state = plugin.spec.state;\n if (plugin.key == field.name && state && state.fromJSON &&\n Object.prototype.hasOwnProperty.call(json, prop)) {\n instance[field.name] = state.fromJSON.call(plugin, config, json[prop], instance);\n return;\n }\n }\n instance[field.name] = field.init(config, instance);\n }\n });\n return instance;\n }\n}\n\nfunction bindProps(obj, self, target) {\n for (let prop in obj) {\n let val = obj[prop];\n if (val instanceof Function)\n val = val.bind(self);\n else if (prop == \"handleDOMEvents\")\n val = bindProps(val, self, {});\n target[prop] = val;\n }\n return target;\n}\n/**\nPlugins bundle functionality that can be added to an editor.\nThey are part of the [editor state](https://prosemirror.net/docs/ref/#state.EditorState) and\nmay influence that state and the view that contains it.\n*/\nclass Plugin {\n /**\n Create a plugin.\n */\n constructor(\n /**\n The plugin's [spec object](https://prosemirror.net/docs/ref/#state.PluginSpec).\n */\n spec) {\n this.spec = spec;\n /**\n The [props](https://prosemirror.net/docs/ref/#view.EditorProps) exported by this plugin.\n */\n this.props = {};\n if (spec.props)\n bindProps(spec.props, this, this.props);\n this.key = spec.key ? spec.key.key : createKey(\"plugin\");\n }\n /**\n Extract the plugin's state field from an editor state.\n */\n getState(state) { return state[this.key]; }\n}\nconst keys = Object.create(null);\nfunction createKey(name) {\n if (name in keys)\n return name + \"$\" + ++keys[name];\n keys[name] = 0;\n return name + \"$\";\n}\n/**\nA key is used to [tag](https://prosemirror.net/docs/ref/#state.PluginSpec.key) plugins in a way\nthat makes it possible to find them, given an editor state.\nAssigning a key does mean only one plugin of that type can be\nactive in a state.\n*/\nclass PluginKey {\n /**\n Create a plugin key.\n */\n constructor(name = \"key\") { this.key = createKey(name); }\n /**\n Get the active plugin with this key, if any, from an editor\n state.\n */\n get(state) { return state.config.pluginsByKey[this.key]; }\n /**\n Get the plugin's state from an editor state.\n */\n getState(state) { return state[this.key]; }\n}\n\nexport { AllSelection, EditorState, NodeSelection, Plugin, PluginKey, Selection, SelectionRange, TextSelection, Transaction };\n","import RopeSequence from 'rope-sequence';\nimport { Mapping } from 'prosemirror-transform';\nimport { PluginKey, Plugin } from 'prosemirror-state';\n\n// ProseMirror's history isn't simply a way to roll back to a previous\n// state, because ProseMirror supports applying changes without adding\n// them to the history (for example during collaboration).\n//\n// To this end, each 'Branch' (one for the undo history and one for\n// the redo history) keeps an array of 'Items', which can optionally\n// hold a step (an actual undoable change), and always hold a position\n// map (which is needed to move changes below them to apply to the\n// current document).\n//\n// An item that has both a step and a selection bookmark is the start\n// of an 'event' — a group of changes that will be undone or redone at\n// once. (It stores only the bookmark, since that way we don't have to\n// provide a document until the selection is actually applied, which\n// is useful when compressing.)\n// Used to schedule history compression\nconst max_empty_items = 500;\nclass Branch {\n constructor(items, eventCount) {\n this.items = items;\n this.eventCount = eventCount;\n }\n // Pop the latest event off the branch's history and apply it\n // to a document transform.\n popEvent(state, preserveItems) {\n if (this.eventCount == 0)\n return null;\n let end = this.items.length;\n for (;; end--) {\n let next = this.items.get(end - 1);\n if (next.selection) {\n --end;\n break;\n }\n }\n let remap, mapFrom;\n if (preserveItems) {\n remap = this.remapping(end, this.items.length);\n mapFrom = remap.maps.length;\n }\n let transform = state.tr;\n let selection, remaining;\n let addAfter = [], addBefore = [];\n this.items.forEach((item, i) => {\n if (!item.step) {\n if (!remap) {\n remap = this.remapping(end, i + 1);\n mapFrom = remap.maps.length;\n }\n mapFrom--;\n addBefore.push(item);\n return;\n }\n if (remap) {\n addBefore.push(new Item(item.map));\n let step = item.step.map(remap.slice(mapFrom)), map;\n if (step && transform.maybeStep(step).doc) {\n map = transform.mapping.maps[transform.mapping.maps.length - 1];\n addAfter.push(new Item(map, undefined, undefined, addAfter.length + addBefore.length));\n }\n mapFrom--;\n if (map)\n remap.appendMap(map, mapFrom);\n }\n else {\n transform.maybeStep(item.step);\n }\n if (item.selection) {\n selection = remap ? item.selection.map(remap.slice(mapFrom)) : item.selection;\n remaining = new Branch(this.items.slice(0, end).append(addBefore.reverse().concat(addAfter)), this.eventCount - 1);\n return false;\n }\n }, this.items.length, 0);\n return { remaining: remaining, transform, selection: selection };\n }\n // Create a new branch with the given transform added.\n addTransform(transform, selection, histOptions, preserveItems) {\n let newItems = [], eventCount = this.eventCount;\n let oldItems = this.items, lastItem = !preserveItems && oldItems.length ? oldItems.get(oldItems.length - 1) : null;\n for (let i = 0; i < transform.steps.length; i++) {\n let step = transform.steps[i].invert(transform.docs[i]);\n let item = new Item(transform.mapping.maps[i], step, selection), merged;\n if (merged = lastItem && lastItem.merge(item)) {\n item = merged;\n if (i)\n newItems.pop();\n else\n oldItems = oldItems.slice(0, oldItems.length - 1);\n }\n newItems.push(item);\n if (selection) {\n eventCount++;\n selection = undefined;\n }\n if (!preserveItems)\n lastItem = item;\n }\n let overflow = eventCount - histOptions.depth;\n if (overflow > DEPTH_OVERFLOW) {\n oldItems = cutOffEvents(oldItems, overflow);\n eventCount -= overflow;\n }\n return new Branch(oldItems.append(newItems), eventCount);\n }\n remapping(from, to) {\n let maps = new Mapping;\n this.items.forEach((item, i) => {\n let mirrorPos = item.mirrorOffset != null && i - item.mirrorOffset >= from\n ? maps.maps.length - item.mirrorOffset : undefined;\n maps.appendMap(item.map, mirrorPos);\n }, from, to);\n return maps;\n }\n addMaps(array) {\n if (this.eventCount == 0)\n return this;\n return new Branch(this.items.append(array.map(map => new Item(map))), this.eventCount);\n }\n // When the collab module receives remote changes, the history has\n // to know about those, so that it can adjust the steps that were\n // rebased on top of the remote changes, and include the position\n // maps for the remote changes in its array of items.\n rebased(rebasedTransform, rebasedCount) {\n if (!this.eventCount)\n return this;\n let rebasedItems = [], start = Math.max(0, this.items.length - rebasedCount);\n let mapping = rebasedTransform.mapping;\n let newUntil = rebasedTransform.steps.length;\n let eventCount = this.eventCount;\n this.items.forEach(item => { if (item.selection)\n eventCount--; }, start);\n let iRebased = rebasedCount;\n this.items.forEach(item => {\n let pos = mapping.getMirror(--iRebased);\n if (pos == null)\n return;\n newUntil = Math.min(newUntil, pos);\n let map = mapping.maps[pos];\n if (item.step) {\n let step = rebasedTransform.steps[pos].invert(rebasedTransform.docs[pos]);\n let selection = item.selection && item.selection.map(mapping.slice(iRebased + 1, pos));\n if (selection)\n eventCount++;\n rebasedItems.push(new Item(map, step, selection));\n }\n else {\n rebasedItems.push(new Item(map));\n }\n }, start);\n let newMaps = [];\n for (let i = rebasedCount; i < newUntil; i++)\n newMaps.push(new Item(mapping.maps[i]));\n let items = this.items.slice(0, start).append(newMaps).append(rebasedItems);\n let branch = new Branch(items, eventCount);\n if (branch.emptyItemCount() > max_empty_items)\n branch = branch.compress(this.items.length - rebasedItems.length);\n return branch;\n }\n emptyItemCount() {\n let count = 0;\n this.items.forEach(item => { if (!item.step)\n count++; });\n return count;\n }\n // Compressing a branch means rewriting it to push the air (map-only\n // items) out. During collaboration, these naturally accumulate\n // because each remote change adds one. The `upto` argument is used\n // to ensure that only the items below a given level are compressed,\n // because `rebased` relies on a clean, untouched set of items in\n // order to associate old items with rebased steps.\n compress(upto = this.items.length) {\n let remap = this.remapping(0, upto), mapFrom = remap.maps.length;\n let items = [], events = 0;\n this.items.forEach((item, i) => {\n if (i >= upto) {\n items.push(item);\n if (item.selection)\n events++;\n }\n else if (item.step) {\n let step = item.step.map(remap.slice(mapFrom)), map = step && step.getMap();\n mapFrom--;\n if (map)\n remap.appendMap(map, mapFrom);\n if (step) {\n let selection = item.selection && item.selection.map(remap.slice(mapFrom));\n if (selection)\n events++;\n let newItem = new Item(map.invert(), step, selection), merged, last = items.length - 1;\n if (merged = items.length && items[last].merge(newItem))\n items[last] = merged;\n else\n items.push(newItem);\n }\n }\n else if (item.map) {\n mapFrom--;\n }\n }, this.items.length, 0);\n return new Branch(RopeSequence.from(items.reverse()), events);\n }\n}\nBranch.empty = new Branch(RopeSequence.empty, 0);\nfunction cutOffEvents(items, n) {\n let cutPoint;\n items.forEach((item, i) => {\n if (item.selection && (n-- == 0)) {\n cutPoint = i;\n return false;\n }\n });\n return items.slice(cutPoint);\n}\nclass Item {\n constructor(\n // The (forward) step map for this item.\n map, \n // The inverted step\n step, \n // If this is non-null, this item is the start of a group, and\n // this selection is the starting selection for the group (the one\n // that was active before the first step was applied)\n selection, \n // If this item is the inverse of a previous mapping on the stack,\n // this points at the inverse's offset\n mirrorOffset) {\n this.map = map;\n this.step = step;\n this.selection = selection;\n this.mirrorOffset = mirrorOffset;\n }\n merge(other) {\n if (this.step && other.step && !other.selection) {\n let step = other.step.merge(this.step);\n if (step)\n return new Item(step.getMap().invert(), step, this.selection);\n }\n }\n}\n// The value of the state field that tracks undo/redo history for that\n// state. Will be stored in the plugin state when the history plugin\n// is active.\nclass HistoryState {\n constructor(done, undone, prevRanges, prevTime, prevComposition) {\n this.done = done;\n this.undone = undone;\n this.prevRanges = prevRanges;\n this.prevTime = prevTime;\n this.prevComposition = prevComposition;\n }\n}\nconst DEPTH_OVERFLOW = 20;\n// Record a transformation in undo history.\nfunction applyTransaction(history, state, tr, options) {\n let historyTr = tr.getMeta(historyKey), rebased;\n if (historyTr)\n return historyTr.historyState;\n if (tr.getMeta(closeHistoryKey))\n history = new HistoryState(history.done, history.undone, null, 0, -1);\n let appended = tr.getMeta(\"appendedTransaction\");\n if (tr.steps.length == 0) {\n return history;\n }\n else if (appended && appended.getMeta(historyKey)) {\n if (appended.getMeta(historyKey).redo)\n return new HistoryState(history.done.addTransform(tr, undefined, options, mustPreserveItems(state)), history.undone, rangesFor(tr.mapping.maps), history.prevTime, history.prevComposition);\n else\n return new HistoryState(history.done, history.undone.addTransform(tr, undefined, options, mustPreserveItems(state)), null, history.prevTime, history.prevComposition);\n }\n else if (tr.getMeta(\"addToHistory\") !== false && !(appended && appended.getMeta(\"addToHistory\") === false)) {\n // Group transforms that occur in quick succession into one event.\n let composition = tr.getMeta(\"composition\");\n let newGroup = history.prevTime == 0 ||\n (!appended && history.prevComposition != composition &&\n (history.prevTime < (tr.time || 0) - options.newGroupDelay || !isAdjacentTo(tr, history.prevRanges)));\n let prevRanges = appended ? mapRanges(history.prevRanges, tr.mapping) : rangesFor(tr.mapping.maps);\n return new HistoryState(history.done.addTransform(tr, newGroup ? state.selection.getBookmark() : undefined, options, mustPreserveItems(state)), Branch.empty, prevRanges, tr.time, composition == null ? history.prevComposition : composition);\n }\n else if (rebased = tr.getMeta(\"rebased\")) {\n // Used by the collab module to tell the history that some of its\n // content has been rebased.\n return new HistoryState(history.done.rebased(tr, rebased), history.undone.rebased(tr, rebased), mapRanges(history.prevRanges, tr.mapping), history.prevTime, history.prevComposition);\n }\n else {\n return new HistoryState(history.done.addMaps(tr.mapping.maps), history.undone.addMaps(tr.mapping.maps), mapRanges(history.prevRanges, tr.mapping), history.prevTime, history.prevComposition);\n }\n}\nfunction isAdjacentTo(transform, prevRanges) {\n if (!prevRanges)\n return false;\n if (!transform.docChanged)\n return true;\n let adjacent = false;\n transform.mapping.maps[0].forEach((start, end) => {\n for (let i = 0; i < prevRanges.length; i += 2)\n if (start <= prevRanges[i + 1] && end >= prevRanges[i])\n adjacent = true;\n });\n return adjacent;\n}\nfunction rangesFor(maps) {\n let result = [];\n for (let i = maps.length - 1; i >= 0 && result.length == 0; i--)\n maps[i].forEach((_from, _to, from, to) => result.push(from, to));\n return result;\n}\nfunction mapRanges(ranges, mapping) {\n if (!ranges)\n return null;\n let result = [];\n for (let i = 0; i < ranges.length; i += 2) {\n let from = mapping.map(ranges[i], 1), to = mapping.map(ranges[i + 1], -1);\n if (from <= to)\n result.push(from, to);\n }\n return result;\n}\n// Apply the latest event from one branch to the document and shift the event\n// onto the other branch.\nfunction histTransaction(history, state, redo) {\n let preserveItems = mustPreserveItems(state);\n let histOptions = historyKey.get(state).spec.config;\n let pop = (redo ? history.undone : history.done).popEvent(state, preserveItems);\n if (!pop)\n return null;\n let selection = pop.selection.resolve(pop.transform.doc);\n let added = (redo ? history.done : history.undone).addTransform(pop.transform, state.selection.getBookmark(), histOptions, preserveItems);\n let newHist = new HistoryState(redo ? added : pop.remaining, redo ? pop.remaining : added, null, 0, -1);\n return pop.transform.setSelection(selection).setMeta(historyKey, { redo, historyState: newHist });\n}\nlet cachedPreserveItems = false, cachedPreserveItemsPlugins = null;\n// Check whether any plugin in the given state has a\n// `historyPreserveItems` property in its spec, in which case we must\n// preserve steps exactly as they came in, so that they can be\n// rebased.\nfunction mustPreserveItems(state) {\n let plugins = state.plugins;\n if (cachedPreserveItemsPlugins != plugins) {\n cachedPreserveItems = false;\n cachedPreserveItemsPlugins = plugins;\n for (let i = 0; i < plugins.length; i++)\n if (plugins[i].spec.historyPreserveItems) {\n cachedPreserveItems = true;\n break;\n }\n }\n return cachedPreserveItems;\n}\n/**\nSet a flag on the given transaction that will prevent further steps\nfrom being appended to an existing history event (so that they\nrequire a separate undo command to undo).\n*/\nfunction closeHistory(tr) {\n return tr.setMeta(closeHistoryKey, true);\n}\nconst historyKey = new PluginKey(\"history\");\nconst closeHistoryKey = new PluginKey(\"closeHistory\");\n/**\nReturns a plugin that enables the undo history for an editor. The\nplugin will track undo and redo stacks, which can be used with the\n[`undo`](https://prosemirror.net/docs/ref/#history.undo) and [`redo`](https://prosemirror.net/docs/ref/#history.redo) commands.\n\nYou can set an `\"addToHistory\"` [metadata\nproperty](https://prosemirror.net/docs/ref/#state.Transaction.setMeta) of `false` on a transaction\nto prevent it from being rolled back by undo.\n*/\nfunction history(config = {}) {\n config = { depth: config.depth || 100,\n newGroupDelay: config.newGroupDelay || 500 };\n return new Plugin({\n key: historyKey,\n state: {\n init() {\n return new HistoryState(Branch.empty, Branch.empty, null, 0, -1);\n },\n apply(tr, hist, state) {\n return applyTransaction(hist, state, tr, config);\n }\n },\n config,\n props: {\n handleDOMEvents: {\n beforeinput(view, e) {\n let inputType = e.inputType;\n let command = inputType == \"historyUndo\" ? undo : inputType == \"historyRedo\" ? redo : null;\n if (!command)\n return false;\n e.preventDefault();\n return command(view.state, view.dispatch);\n }\n }\n }\n });\n}\nfunction buildCommand(redo, scroll) {\n return (state, dispatch) => {\n let hist = historyKey.getState(state);\n if (!hist || (redo ? hist.undone : hist.done).eventCount == 0)\n return false;\n if (dispatch) {\n let tr = histTransaction(hist, state, redo);\n if (tr)\n dispatch(scroll ? tr.scrollIntoView() : tr);\n }\n return true;\n };\n}\n/**\nA command function that undoes the last change, if any.\n*/\nconst undo = buildCommand(false, true);\n/**\nA command function that redoes the last undone change, if any.\n*/\nconst redo = buildCommand(true, true);\n/**\nA command function that undoes the last change. Don't scroll the\nselection into view.\n*/\nconst undoNoScroll = buildCommand(false, false);\n/**\nA command function that redoes the last undone change. Don't\nscroll the selection into view.\n*/\nconst redoNoScroll = buildCommand(true, false);\n/**\nThe amount of undoable events available in a given state.\n*/\nfunction undoDepth(state) {\n let hist = historyKey.getState(state);\n return hist ? hist.done.eventCount : 0;\n}\n/**\nThe amount of redoable events available in a given editor state.\n*/\nfunction redoDepth(state) {\n let hist = historyKey.getState(state);\n return hist ? hist.undone.eventCount : 0;\n}\n\nexport { closeHistory, history, redo, redoDepth, redoNoScroll, undo, undoDepth, undoNoScroll };\n","import { Plugin } from 'prosemirror-state';\nimport { dropPoint } from 'prosemirror-transform';\n\n/**\nCreate a plugin that, when added to a ProseMirror instance,\ncauses a decoration to show up at the drop position when something\nis dragged over the editor.\n\nNodes may add a `disableDropCursor` property to their spec to\ncontrol the showing of a drop cursor inside them. This may be a\nboolean or a function, which will be called with a view and a\nposition, and should return a boolean.\n*/\nfunction dropCursor(options = {}) {\n return new Plugin({\n view(editorView) { return new DropCursorView(editorView, options); }\n });\n}\nclass DropCursorView {\n constructor(editorView, options) {\n var _a;\n this.editorView = editorView;\n this.cursorPos = null;\n this.element = null;\n this.timeout = -1;\n this.width = (_a = options.width) !== null && _a !== void 0 ? _a : 1;\n this.color = options.color === false ? undefined : (options.color || \"black\");\n this.class = options.class;\n this.handlers = [\"dragover\", \"dragend\", \"drop\", \"dragleave\"].map(name => {\n let handler = (e) => { this[name](e); };\n editorView.dom.addEventListener(name, handler);\n return { name, handler };\n });\n }\n destroy() {\n this.handlers.forEach(({ name, handler }) => this.editorView.dom.removeEventListener(name, handler));\n }\n update(editorView, prevState) {\n if (this.cursorPos != null && prevState.doc != editorView.state.doc) {\n if (this.cursorPos > editorView.state.doc.content.size)\n this.setCursor(null);\n else\n this.updateOverlay();\n }\n }\n setCursor(pos) {\n if (pos == this.cursorPos)\n return;\n this.cursorPos = pos;\n if (pos == null) {\n this.element.parentNode.removeChild(this.element);\n this.element = null;\n }\n else {\n this.updateOverlay();\n }\n }\n updateOverlay() {\n let $pos = this.editorView.state.doc.resolve(this.cursorPos);\n let isBlock = !$pos.parent.inlineContent, rect;\n if (isBlock) {\n let before = $pos.nodeBefore, after = $pos.nodeAfter;\n if (before || after) {\n let node = this.editorView.nodeDOM(this.cursorPos - (before ? before.nodeSize : 0));\n if (node) {\n let nodeRect = node.getBoundingClientRect();\n let top = before ? nodeRect.bottom : nodeRect.top;\n if (before && after)\n top = (top + this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top) / 2;\n rect = { left: nodeRect.left, right: nodeRect.right, top: top - this.width / 2, bottom: top + this.width / 2 };\n }\n }\n }\n if (!rect) {\n let coords = this.editorView.coordsAtPos(this.cursorPos);\n rect = { left: coords.left - this.width / 2, right: coords.left + this.width / 2, top: coords.top, bottom: coords.bottom };\n }\n let parent = this.editorView.dom.offsetParent;\n if (!this.element) {\n this.element = parent.appendChild(document.createElement(\"div\"));\n if (this.class)\n this.element.className = this.class;\n this.element.style.cssText = \"position: absolute; z-index: 50; pointer-events: none;\";\n if (this.color) {\n this.element.style.backgroundColor = this.color;\n }\n }\n this.element.classList.toggle(\"prosemirror-dropcursor-block\", isBlock);\n this.element.classList.toggle(\"prosemirror-dropcursor-inline\", !isBlock);\n let parentLeft, parentTop;\n if (!parent || parent == document.body && getComputedStyle(parent).position == \"static\") {\n parentLeft = -pageXOffset;\n parentTop = -pageYOffset;\n }\n else {\n let rect = parent.getBoundingClientRect();\n parentLeft = rect.left - parent.scrollLeft;\n parentTop = rect.top - parent.scrollTop;\n }\n this.element.style.left = (rect.left - parentLeft) + \"px\";\n this.element.style.top = (rect.top - parentTop) + \"px\";\n this.element.style.width = (rect.right - rect.left) + \"px\";\n this.element.style.height = (rect.bottom - rect.top) + \"px\";\n }\n scheduleRemoval(timeout) {\n clearTimeout(this.timeout);\n this.timeout = setTimeout(() => this.setCursor(null), timeout);\n }\n dragover(event) {\n if (!this.editorView.editable)\n return;\n let pos = this.editorView.posAtCoords({ left: event.clientX, top: event.clientY });\n let node = pos && pos.inside >= 0 && this.editorView.state.doc.nodeAt(pos.inside);\n let disableDropCursor = node && node.type.spec.disableDropCursor;\n let disabled = typeof disableDropCursor == \"function\" ? disableDropCursor(this.editorView, pos, event) : disableDropCursor;\n if (pos && !disabled) {\n let target = pos.pos;\n if (this.editorView.dragging && this.editorView.dragging.slice) {\n let point = dropPoint(this.editorView.state.doc, target, this.editorView.dragging.slice);\n if (point != null)\n target = point;\n }\n this.setCursor(target);\n this.scheduleRemoval(5000);\n }\n }\n dragend() {\n this.scheduleRemoval(20);\n }\n drop() {\n this.scheduleRemoval(20);\n }\n dragleave(event) {\n if (event.target == this.editorView.dom || !this.editorView.dom.contains(event.relatedTarget))\n this.setCursor(null);\n }\n}\n\nexport { dropCursor };\n","export var base = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 10: \"Enter\",\n 12: \"NumLock\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 44: \"PrintScreen\",\n 45: \"Insert\",\n 46: \"Delete\",\n 59: \";\",\n 61: \"=\",\n 91: \"Meta\",\n 92: \"Meta\",\n 106: \"*\",\n 107: \"+\",\n 108: \",\",\n 109: \"-\",\n 110: \".\",\n 111: \"/\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 160: \"Shift\",\n 161: \"Shift\",\n 162: \"Control\",\n 163: \"Control\",\n 164: \"Alt\",\n 165: \"Alt\",\n 173: \"-\",\n 186: \";\",\n 187: \"=\",\n 188: \",\",\n 189: \"-\",\n 190: \".\",\n 191: \"/\",\n 192: \"`\",\n 219: \"[\",\n 220: \"\\\\\",\n 221: \"]\",\n 222: \"'\",\n 229: \"q\"\n}\n\nexport var shift = {\n 48: \")\",\n 49: \"!\",\n 50: \"@\",\n 51: \"#\",\n 52: \"$\",\n 53: \"%\",\n 54: \"^\",\n 55: \"&\",\n 56: \"*\",\n 57: \"(\",\n 59: \":\",\n 61: \"+\",\n 173: \"_\",\n 186: \":\",\n 187: \"+\",\n 188: \"<\",\n 189: \"_\",\n 190: \">\",\n 191: \"?\",\n 192: \"~\",\n 219: \"{\",\n 220: \"|\",\n 221: \"}\",\n 222: \"\\\"\",\n 229: \"Q\"\n}\n\nvar chrome = typeof navigator != \"undefined\" && /Chrome\\/(\\d+)/.exec(navigator.userAgent)\nvar safari = typeof navigator != \"undefined\" && /Apple Computer/.test(navigator.vendor)\nvar gecko = typeof navigator != \"undefined\" && /Gecko\\/\\d+/.test(navigator.userAgent)\nvar mac = typeof navigator != \"undefined\" && /Mac/.test(navigator.platform)\nvar ie = typeof navigator != \"undefined\" && /MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent)\nvar brokenModifierNames = chrome && (mac || +chrome[1] < 57) || gecko && mac\n\n// Fill in the digit keys\nfor (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i)\n\n// The function keys\nfor (var i = 1; i <= 24; i++) base[i + 111] = \"F\" + i\n\n// And the alphabetic keys\nfor (var i = 65; i <= 90; i++) {\n base[i] = String.fromCharCode(i + 32)\n shift[i] = String.fromCharCode(i)\n}\n\n// For each code that doesn't have a shift-equivalent, copy the base name\nfor (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code]\n\nexport function keyName(event) {\n // Don't trust event.key in Chrome when there are modifiers until\n // they fix https://bugs.chromium.org/p/chromium/issues/detail?id=633838\n var ignoreKey = brokenModifierNames && (event.ctrlKey || event.altKey || event.metaKey) ||\n (safari || ie) && event.shiftKey && event.key && event.key.length == 1\n var name = (!ignoreKey && event.key) ||\n (event.shiftKey ? shift : base)[event.keyCode] ||\n event.key || \"Unidentified\"\n // Edge sometimes produces wrong names (Issue #3)\n if (name == \"Esc\") name = \"Escape\"\n if (name == \"Del\") name = \"Delete\"\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/\n if (name == \"Left\") name = \"ArrowLeft\"\n if (name == \"Up\") name = \"ArrowUp\"\n if (name == \"Right\") name = \"ArrowRight\"\n if (name == \"Down\") name = \"ArrowDown\"\n return name\n}\n","import { keyName, base } from 'w3c-keyname';\nimport { Plugin } from 'prosemirror-state';\n\nconst mac = typeof navigator != \"undefined\" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform) : false;\nfunction normalizeKeyName(name) {\n let parts = name.split(/-(?!$)/), result = parts[parts.length - 1];\n if (result == \"Space\")\n result = \" \";\n let alt, ctrl, shift, meta;\n for (let i = 0; i < parts.length - 1; i++) {\n let mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod))\n meta = true;\n else if (/^a(lt)?$/i.test(mod))\n alt = true;\n else if (/^(c|ctrl|control)$/i.test(mod))\n ctrl = true;\n else if (/^s(hift)?$/i.test(mod))\n shift = true;\n else if (/^mod$/i.test(mod)) {\n if (mac)\n meta = true;\n else\n ctrl = true;\n }\n else\n throw new Error(\"Unrecognized modifier name: \" + mod);\n }\n if (alt)\n result = \"Alt-\" + result;\n if (ctrl)\n result = \"Ctrl-\" + result;\n if (meta)\n result = \"Meta-\" + result;\n if (shift)\n result = \"Shift-\" + result;\n return result;\n}\nfunction normalize(map) {\n let copy = Object.create(null);\n for (let prop in map)\n copy[normalizeKeyName(prop)] = map[prop];\n return copy;\n}\nfunction modifiers(name, event, shift = true) {\n if (event.altKey)\n name = \"Alt-\" + name;\n if (event.ctrlKey)\n name = \"Ctrl-\" + name;\n if (event.metaKey)\n name = \"Meta-\" + name;\n if (shift && event.shiftKey)\n name = \"Shift-\" + name;\n return name;\n}\n/**\nCreate a keymap plugin for the given set of bindings.\n\nBindings should map key names to [command](https://prosemirror.net/docs/ref/#commands)-style\nfunctions, which will be called with `(EditorState, dispatch,\nEditorView)` arguments, and should return true when they've handled\nthe key. Note that the view argument isn't part of the command\nprotocol, but can be used as an escape hatch if a binding needs to\ndirectly interact with the UI.\n\nKey names may be strings like `\"Shift-Ctrl-Enter\"`—a key\nidentifier prefixed with zero or more modifiers. Key identifiers\nare based on the strings that can appear in\n[`KeyEvent.key`](https:developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key).\nUse lowercase letters to refer to letter keys (or uppercase letters\nif you want shift to be held). You may use `\"Space\"` as an alias\nfor the `\" \"` name.\n\nModifiers can be given in any order. `Shift-` (or `s-`), `Alt-` (or\n`a-`), `Ctrl-` (or `c-` or `Control-`) and `Cmd-` (or `m-` or\n`Meta-`) are recognized. For characters that are created by holding\nshift, the `Shift-` prefix is implied, and should not be added\nexplicitly.\n\nYou can use `Mod-` as a shorthand for `Cmd-` on Mac and `Ctrl-` on\nother platforms.\n\nYou can add multiple keymap plugins to an editor. The order in\nwhich they appear determines their precedence (the ones early in\nthe array get to dispatch first).\n*/\nfunction keymap(bindings) {\n return new Plugin({ props: { handleKeyDown: keydownHandler(bindings) } });\n}\n/**\nGiven a set of bindings (using the same format as\n[`keymap`](https://prosemirror.net/docs/ref/#keymap.keymap)), return a [keydown\nhandler](https://prosemirror.net/docs/ref/#view.EditorProps.handleKeyDown) that handles them.\n*/\nfunction keydownHandler(bindings) {\n let map = normalize(bindings);\n return function (view, event) {\n let name = keyName(event), baseName, direct = map[modifiers(name, event)];\n if (direct && direct(view.state, view.dispatch, view))\n return true;\n // A character key\n if (name.length == 1 && name != \" \") {\n if (event.shiftKey) {\n // In case the name was already modified by shift, try looking\n // it up without its shift modifier\n let noShift = map[modifiers(name, event, false)];\n if (noShift && noShift(view.state, view.dispatch, view))\n return true;\n }\n if ((event.shiftKey || event.altKey || event.metaKey || name.charCodeAt(0) > 127) &&\n (baseName = base[event.keyCode]) && baseName != name) {\n // Try falling back to the keyCode when there's a modifier\n // active or the character produced isn't ASCII, and our table\n // produces a different name from the the keyCode. See #668,\n // #1060\n let fromCode = map[modifiers(baseName, event)];\n if (fromCode && fromCode(view.state, view.dispatch, view))\n return true;\n }\n }\n return false;\n };\n}\n\nexport { keydownHandler, keymap };\n","import { TextSelection, NodeSelection, AllSelection, Selection } from 'prosemirror-state';\nimport { DOMSerializer, Fragment, Mark, Slice, DOMParser } from 'prosemirror-model';\nimport { dropPoint } from 'prosemirror-transform';\n\nconst domIndex = function (node) {\n for (var index = 0;; index++) {\n node = node.previousSibling;\n if (!node)\n return index;\n }\n};\nconst parentNode = function (node) {\n let parent = node.assignedSlot || node.parentNode;\n return parent && parent.nodeType == 11 ? parent.host : parent;\n};\nlet reusedRange = null;\n// Note that this will always return the same range, because DOM range\n// objects are every expensive, and keep slowing down subsequent DOM\n// updates, for some reason.\nconst textRange = function (node, from, to) {\n let range = reusedRange || (reusedRange = document.createRange());\n range.setEnd(node, to == null ? node.nodeValue.length : to);\n range.setStart(node, from || 0);\n return range;\n};\nconst clearReusedRange = function () {\n reusedRange = null;\n};\n// Scans forward and backward through DOM positions equivalent to the\n// given one to see if the two are in the same place (i.e. after a\n// text node vs at the end of that text node)\nconst isEquivalentPosition = function (node, off, targetNode, targetOff) {\n return targetNode && (scanFor(node, off, targetNode, targetOff, -1) ||\n scanFor(node, off, targetNode, targetOff, 1));\n};\nconst atomElements = /^(img|br|input|textarea|hr)$/i;\nfunction scanFor(node, off, targetNode, targetOff, dir) {\n for (;;) {\n if (node == targetNode && off == targetOff)\n return true;\n if (off == (dir < 0 ? 0 : nodeSize(node))) {\n let parent = node.parentNode;\n if (!parent || parent.nodeType != 1 || hasBlockDesc(node) || atomElements.test(node.nodeName) ||\n node.contentEditable == \"false\")\n return false;\n off = domIndex(node) + (dir < 0 ? 0 : 1);\n node = parent;\n }\n else if (node.nodeType == 1) {\n node = node.childNodes[off + (dir < 0 ? -1 : 0)];\n if (node.contentEditable == \"false\")\n return false;\n off = dir < 0 ? nodeSize(node) : 0;\n }\n else {\n return false;\n }\n }\n}\nfunction nodeSize(node) {\n return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction textNodeBefore$1(node, offset) {\n for (;;) {\n if (node.nodeType == 3 && offset)\n return node;\n if (node.nodeType == 1 && offset > 0) {\n if (node.contentEditable == \"false\")\n return null;\n node = node.childNodes[offset - 1];\n offset = nodeSize(node);\n }\n else if (node.parentNode && !hasBlockDesc(node)) {\n offset = domIndex(node);\n node = node.parentNode;\n }\n else {\n return null;\n }\n }\n}\nfunction textNodeAfter$1(node, offset) {\n for (;;) {\n if (node.nodeType == 3 && offset < node.nodeValue.length)\n return node;\n if (node.nodeType == 1 && offset < node.childNodes.length) {\n if (node.contentEditable == \"false\")\n return null;\n node = node.childNodes[offset];\n offset = 0;\n }\n else if (node.parentNode && !hasBlockDesc(node)) {\n offset = domIndex(node) + 1;\n node = node.parentNode;\n }\n else {\n return null;\n }\n }\n}\nfunction isOnEdge(node, offset, parent) {\n for (let atStart = offset == 0, atEnd = offset == nodeSize(node); atStart || atEnd;) {\n if (node == parent)\n return true;\n let index = domIndex(node);\n node = node.parentNode;\n if (!node)\n return false;\n atStart = atStart && index == 0;\n atEnd = atEnd && index == nodeSize(node);\n }\n}\nfunction hasBlockDesc(dom) {\n let desc;\n for (let cur = dom; cur; cur = cur.parentNode)\n if (desc = cur.pmViewDesc)\n break;\n return desc && desc.node && desc.node.isBlock && (desc.dom == dom || desc.contentDOM == dom);\n}\n// Work around Chrome issue https://bugs.chromium.org/p/chromium/issues/detail?id=447523\n// (isCollapsed inappropriately returns true in shadow dom)\nconst selectionCollapsed = function (domSel) {\n return domSel.focusNode && isEquivalentPosition(domSel.focusNode, domSel.focusOffset, domSel.anchorNode, domSel.anchorOffset);\n};\nfunction keyEvent(keyCode, key) {\n let event = document.createEvent(\"Event\");\n event.initEvent(\"keydown\", true, true);\n event.keyCode = keyCode;\n event.key = event.code = key;\n return event;\n}\nfunction deepActiveElement(doc) {\n let elt = doc.activeElement;\n while (elt && elt.shadowRoot)\n elt = elt.shadowRoot.activeElement;\n return elt;\n}\nfunction caretFromPoint(doc, x, y) {\n if (doc.caretPositionFromPoint) {\n try { // Firefox throws for this call in hard-to-predict circumstances (#994)\n let pos = doc.caretPositionFromPoint(x, y);\n // Clip the offset, because Chrome will return a text offset\n // into <input> nodes, which can't be treated as a regular DOM\n // offset\n if (pos)\n return { node: pos.offsetNode, offset: Math.min(nodeSize(pos.offsetNode), pos.offset) };\n }\n catch (_) { }\n }\n if (doc.caretRangeFromPoint) {\n let range = doc.caretRangeFromPoint(x, y);\n if (range)\n return { node: range.startContainer, offset: Math.min(nodeSize(range.startContainer), range.startOffset) };\n }\n}\n\nconst nav = typeof navigator != \"undefined\" ? navigator : null;\nconst doc = typeof document != \"undefined\" ? document : null;\nconst agent = (nav && nav.userAgent) || \"\";\nconst ie_edge = /Edge\\/(\\d+)/.exec(agent);\nconst ie_upto10 = /MSIE \\d/.exec(agent);\nconst ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(agent);\nconst ie = !!(ie_upto10 || ie_11up || ie_edge);\nconst ie_version = ie_upto10 ? document.documentMode : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0;\nconst gecko = !ie && /gecko\\/(\\d+)/i.test(agent);\ngecko && +(/Firefox\\/(\\d+)/.exec(agent) || [0, 0])[1];\nconst _chrome = !ie && /Chrome\\/(\\d+)/.exec(agent);\nconst chrome = !!_chrome;\nconst chrome_version = _chrome ? +_chrome[1] : 0;\nconst safari = !ie && !!nav && /Apple Computer/.test(nav.vendor);\n// Is true for both iOS and iPadOS for convenience\nconst ios = safari && (/Mobile\\/\\w+/.test(agent) || !!nav && nav.maxTouchPoints > 2);\nconst mac = ios || (nav ? /Mac/.test(nav.platform) : false);\nconst windows = nav ? /Win/.test(nav.platform) : false;\nconst android = /Android \\d/.test(agent);\nconst webkit = !!doc && \"webkitFontSmoothing\" in doc.documentElement.style;\nconst webkit_version = webkit ? +(/\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0;\n\nfunction windowRect(doc) {\n let vp = doc.defaultView && doc.defaultView.visualViewport;\n if (vp)\n return {\n left: 0, right: vp.width,\n top: 0, bottom: vp.height\n };\n return { left: 0, right: doc.documentElement.clientWidth,\n top: 0, bottom: doc.documentElement.clientHeight };\n}\nfunction getSide(value, side) {\n return typeof value == \"number\" ? value : value[side];\n}\nfunction clientRect(node) {\n let rect = node.getBoundingClientRect();\n // Adjust for elements with style \"transform: scale()\"\n let scaleX = (rect.width / node.offsetWidth) || 1;\n let scaleY = (rect.height / node.offsetHeight) || 1;\n // Make sure scrollbar width isn't included in the rectangle\n return { left: rect.left, right: rect.left + node.clientWidth * scaleX,\n top: rect.top, bottom: rect.top + node.clientHeight * scaleY };\n}\nfunction scrollRectIntoView(view, rect, startDOM) {\n let scrollThreshold = view.someProp(\"scrollThreshold\") || 0, scrollMargin = view.someProp(\"scrollMargin\") || 5;\n let doc = view.dom.ownerDocument;\n for (let parent = startDOM || view.dom;; parent = parentNode(parent)) {\n if (!parent)\n break;\n if (parent.nodeType != 1)\n continue;\n let elt = parent;\n let atTop = elt == doc.body;\n let bounding = atTop ? windowRect(doc) : clientRect(elt);\n let moveX = 0, moveY = 0;\n if (rect.top < bounding.top + getSide(scrollThreshold, \"top\"))\n moveY = -(bounding.top - rect.top + getSide(scrollMargin, \"top\"));\n else if (rect.bottom > bounding.bottom - getSide(scrollThreshold, \"bottom\"))\n moveY = rect.bottom - rect.top > bounding.bottom - bounding.top\n ? rect.top + getSide(scrollMargin, \"top\") - bounding.top\n : rect.bottom - bounding.bottom + getSide(scrollMargin, \"bottom\");\n if (rect.left < bounding.left + getSide(scrollThreshold, \"left\"))\n moveX = -(bounding.left - rect.left + getSide(scrollMargin, \"left\"));\n else if (rect.right > bounding.right - getSide(scrollThreshold, \"right\"))\n moveX = rect.right - bounding.right + getSide(scrollMargin, \"right\");\n if (moveX || moveY) {\n if (atTop) {\n doc.defaultView.scrollBy(moveX, moveY);\n }\n else {\n let startX = elt.scrollLeft, startY = elt.scrollTop;\n if (moveY)\n elt.scrollTop += moveY;\n if (moveX)\n elt.scrollLeft += moveX;\n let dX = elt.scrollLeft - startX, dY = elt.scrollTop - startY;\n rect = { left: rect.left - dX, top: rect.top - dY, right: rect.right - dX, bottom: rect.bottom - dY };\n }\n }\n if (atTop || /^(fixed|sticky)$/.test(getComputedStyle(parent).position))\n break;\n }\n}\n// Store the scroll position of the editor's parent nodes, along with\n// the top position of an element near the top of the editor, which\n// will be used to make sure the visible viewport remains stable even\n// when the size of the content above changes.\nfunction storeScrollPos(view) {\n let rect = view.dom.getBoundingClientRect(), startY = Math.max(0, rect.top);\n let refDOM, refTop;\n for (let x = (rect.left + rect.right) / 2, y = startY + 1; y < Math.min(innerHeight, rect.bottom); y += 5) {\n let dom = view.root.elementFromPoint(x, y);\n if (!dom || dom == view.dom || !view.dom.contains(dom))\n continue;\n let localRect = dom.getBoundingClientRect();\n if (localRect.top >= startY - 20) {\n refDOM = dom;\n refTop = localRect.top;\n break;\n }\n }\n return { refDOM: refDOM, refTop: refTop, stack: scrollStack(view.dom) };\n}\nfunction scrollStack(dom) {\n let stack = [], doc = dom.ownerDocument;\n for (let cur = dom; cur; cur = parentNode(cur)) {\n stack.push({ dom: cur, top: cur.scrollTop, left: cur.scrollLeft });\n if (dom == doc)\n break;\n }\n return stack;\n}\n// Reset the scroll position of the editor's parent nodes to that what\n// it was before, when storeScrollPos was called.\nfunction resetScrollPos({ refDOM, refTop, stack }) {\n let newRefTop = refDOM ? refDOM.getBoundingClientRect().top : 0;\n restoreScrollStack(stack, newRefTop == 0 ? 0 : newRefTop - refTop);\n}\nfunction restoreScrollStack(stack, dTop) {\n for (let i = 0; i < stack.length; i++) {\n let { dom, top, left } = stack[i];\n if (dom.scrollTop != top + dTop)\n dom.scrollTop = top + dTop;\n if (dom.scrollLeft != left)\n dom.scrollLeft = left;\n }\n}\nlet preventScrollSupported = null;\n// Feature-detects support for .focus({preventScroll: true}), and uses\n// a fallback kludge when not supported.\nfunction focusPreventScroll(dom) {\n if (dom.setActive)\n return dom.setActive(); // in IE\n if (preventScrollSupported)\n return dom.focus(preventScrollSupported);\n let stored = scrollStack(dom);\n dom.focus(preventScrollSupported == null ? {\n get preventScroll() {\n preventScrollSupported = { preventScroll: true };\n return true;\n }\n } : undefined);\n if (!preventScrollSupported) {\n preventScrollSupported = false;\n restoreScrollStack(stored, 0);\n }\n}\nfunction findOffsetInNode(node, coords) {\n let closest, dxClosest = 2e8, coordsClosest, offset = 0;\n let rowBot = coords.top, rowTop = coords.top;\n let firstBelow, coordsBelow;\n for (let child = node.firstChild, childIndex = 0; child; child = child.nextSibling, childIndex++) {\n let rects;\n if (child.nodeType == 1)\n rects = child.getClientRects();\n else if (child.nodeType == 3)\n rects = textRange(child).getClientRects();\n else\n continue;\n for (let i = 0; i < rects.length; i++) {\n let rect = rects[i];\n if (rect.top <= rowBot && rect.bottom >= rowTop) {\n rowBot = Math.max(rect.bottom, rowBot);\n rowTop = Math.min(rect.top, rowTop);\n let dx = rect.left > coords.left ? rect.left - coords.left\n : rect.right < coords.left ? coords.left - rect.right : 0;\n if (dx < dxClosest) {\n closest = child;\n dxClosest = dx;\n coordsClosest = dx && closest.nodeType == 3 ? {\n left: rect.right < coords.left ? rect.right : rect.left,\n top: coords.top\n } : coords;\n if (child.nodeType == 1 && dx)\n offset = childIndex + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0);\n continue;\n }\n }\n else if (rect.top > coords.top && !firstBelow && rect.left <= coords.left && rect.right >= coords.left) {\n firstBelow = child;\n coordsBelow = { left: Math.max(rect.left, Math.min(rect.right, coords.left)), top: rect.top };\n }\n if (!closest && (coords.left >= rect.right && coords.top >= rect.top ||\n coords.left >= rect.left && coords.top >= rect.bottom))\n offset = childIndex + 1;\n }\n }\n if (!closest && firstBelow) {\n closest = firstBelow;\n coordsClosest = coordsBelow;\n dxClosest = 0;\n }\n if (closest && closest.nodeType == 3)\n return findOffsetInText(closest, coordsClosest);\n if (!closest || (dxClosest && closest.nodeType == 1))\n return { node, offset };\n return findOffsetInNode(closest, coordsClosest);\n}\nfunction findOffsetInText(node, coords) {\n let len = node.nodeValue.length;\n let range = document.createRange();\n for (let i = 0; i < len; i++) {\n range.setEnd(node, i + 1);\n range.setStart(node, i);\n let rect = singleRect(range, 1);\n if (rect.top == rect.bottom)\n continue;\n if (inRect(coords, rect))\n return { node, offset: i + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0) };\n }\n return { node, offset: 0 };\n}\nfunction inRect(coords, rect) {\n return coords.left >= rect.left - 1 && coords.left <= rect.right + 1 &&\n coords.top >= rect.top - 1 && coords.top <= rect.bottom + 1;\n}\nfunction targetKludge(dom, coords) {\n let parent = dom.parentNode;\n if (parent && /^li$/i.test(parent.nodeName) && coords.left < dom.getBoundingClientRect().left)\n return parent;\n return dom;\n}\nfunction posFromElement(view, elt, coords) {\n let { node, offset } = findOffsetInNode(elt, coords), bias = -1;\n if (node.nodeType == 1 && !node.firstChild) {\n let rect = node.getBoundingClientRect();\n bias = rect.left != rect.right && coords.left > (rect.left + rect.right) / 2 ? 1 : -1;\n }\n return view.docView.posFromDOM(node, offset, bias);\n}\nfunction posFromCaret(view, node, offset, coords) {\n // Browser (in caretPosition/RangeFromPoint) will agressively\n // normalize towards nearby inline nodes. Since we are interested in\n // positions between block nodes too, we first walk up the hierarchy\n // of nodes to see if there are block nodes that the coordinates\n // fall outside of. If so, we take the position before/after that\n // block. If not, we call `posFromDOM` on the raw node/offset.\n let outsideBlock = -1;\n for (let cur = node, sawBlock = false;;) {\n if (cur == view.dom)\n break;\n let desc = view.docView.nearestDesc(cur, true);\n if (!desc)\n return null;\n if (desc.dom.nodeType == 1 && (desc.node.isBlock && desc.parent || !desc.contentDOM)) {\n let rect = desc.dom.getBoundingClientRect();\n if (desc.node.isBlock && desc.parent) {\n // Only apply the horizontal test to the innermost block. Vertical for any parent.\n if (!sawBlock && rect.left > coords.left || rect.top > coords.top)\n outsideBlock = desc.posBefore;\n else if (!sawBlock && rect.right < coords.left || rect.bottom < coords.top)\n outsideBlock = desc.posAfter;\n sawBlock = true;\n }\n if (!desc.contentDOM && outsideBlock < 0 && !desc.node.isText) {\n // If we are inside a leaf, return the side of the leaf closer to the coords\n let before = desc.node.isBlock ? coords.top < (rect.top + rect.bottom) / 2\n : coords.left < (rect.left + rect.right) / 2;\n return before ? desc.posBefore : desc.posAfter;\n }\n }\n cur = desc.dom.parentNode;\n }\n return outsideBlock > -1 ? outsideBlock : view.docView.posFromDOM(node, offset, -1);\n}\nfunction elementFromPoint(element, coords, box) {\n let len = element.childNodes.length;\n if (len && box.top < box.bottom) {\n for (let startI = Math.max(0, Math.min(len - 1, Math.floor(len * (coords.top - box.top) / (box.bottom - box.top)) - 2)), i = startI;;) {\n let child = element.childNodes[i];\n if (child.nodeType == 1) {\n let rects = child.getClientRects();\n for (let j = 0; j < rects.length; j++) {\n let rect = rects[j];\n if (inRect(coords, rect))\n return elementFromPoint(child, coords, rect);\n }\n }\n if ((i = (i + 1) % len) == startI)\n break;\n }\n }\n return element;\n}\n// Given an x,y position on the editor, get the position in the document.\nfunction posAtCoords(view, coords) {\n let doc = view.dom.ownerDocument, node, offset = 0;\n let caret = caretFromPoint(doc, coords.left, coords.top);\n if (caret)\n ({ node, offset } = caret);\n let elt = (view.root.elementFromPoint ? view.root : doc)\n .elementFromPoint(coords.left, coords.top);\n let pos;\n if (!elt || !view.dom.contains(elt.nodeType != 1 ? elt.parentNode : elt)) {\n let box = view.dom.getBoundingClientRect();\n if (!inRect(coords, box))\n return null;\n elt = elementFromPoint(view.dom, coords, box);\n if (!elt)\n return null;\n }\n // Safari's caretRangeFromPoint returns nonsense when on a draggable element\n if (safari) {\n for (let p = elt; node && p; p = parentNode(p))\n if (p.draggable)\n node = undefined;\n }\n elt = targetKludge(elt, coords);\n if (node) {\n if (gecko && node.nodeType == 1) {\n // Firefox will sometimes return offsets into <input> nodes, which\n // have no actual children, from caretPositionFromPoint (#953)\n offset = Math.min(offset, node.childNodes.length);\n // It'll also move the returned position before image nodes,\n // even if those are behind it.\n if (offset < node.childNodes.length) {\n let next = node.childNodes[offset], box;\n if (next.nodeName == \"IMG\" && (box = next.getBoundingClientRect()).right <= coords.left &&\n box.bottom > coords.top)\n offset++;\n }\n }\n let prev;\n // When clicking above the right side of an uneditable node, Chrome will report a cursor position after that node.\n if (webkit && offset && node.nodeType == 1 && (prev = node.childNodes[offset - 1]).nodeType == 1 &&\n prev.contentEditable == \"false\" && prev.getBoundingClientRect().top >= coords.top)\n offset--;\n // Suspiciously specific kludge to work around caret*FromPoint\n // never returning a position at the end of the document\n if (node == view.dom && offset == node.childNodes.length - 1 && node.lastChild.nodeType == 1 &&\n coords.top > node.lastChild.getBoundingClientRect().bottom)\n pos = view.state.doc.content.size;\n // Ignore positions directly after a BR, since caret*FromPoint\n // 'round up' positions that would be more accurately placed\n // before the BR node.\n else if (offset == 0 || node.nodeType != 1 || node.childNodes[offset - 1].nodeName != \"BR\")\n pos = posFromCaret(view, node, offset, coords);\n }\n if (pos == null)\n pos = posFromElement(view, elt, coords);\n let desc = view.docView.nearestDesc(elt, true);\n return { pos, inside: desc ? desc.posAtStart - desc.border : -1 };\n}\nfunction nonZero(rect) {\n return rect.top < rect.bottom || rect.left < rect.right;\n}\nfunction singleRect(target, bias) {\n let rects = target.getClientRects();\n if (rects.length) {\n let first = rects[bias < 0 ? 0 : rects.length - 1];\n if (nonZero(first))\n return first;\n }\n return Array.prototype.find.call(rects, nonZero) || target.getBoundingClientRect();\n}\nconst BIDI = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n// Given a position in the document model, get a bounding box of the\n// character at that position, relative to the window.\nfunction coordsAtPos(view, pos, side) {\n let { node, offset, atom } = view.docView.domFromPos(pos, side < 0 ? -1 : 1);\n let supportEmptyRange = webkit || gecko;\n if (node.nodeType == 3) {\n // These browsers support querying empty text ranges. Prefer that in\n // bidi context or when at the end of a node.\n if (supportEmptyRange && (BIDI.test(node.nodeValue) || (side < 0 ? !offset : offset == node.nodeValue.length))) {\n let rect = singleRect(textRange(node, offset, offset), side);\n // Firefox returns bad results (the position before the space)\n // when querying a position directly after line-broken\n // whitespace. Detect this situation and and kludge around it\n if (gecko && offset && /\\s/.test(node.nodeValue[offset - 1]) && offset < node.nodeValue.length) {\n let rectBefore = singleRect(textRange(node, offset - 1, offset - 1), -1);\n if (rectBefore.top == rect.top) {\n let rectAfter = singleRect(textRange(node, offset, offset + 1), -1);\n if (rectAfter.top != rect.top)\n return flattenV(rectAfter, rectAfter.left < rectBefore.left);\n }\n }\n return rect;\n }\n else {\n let from = offset, to = offset, takeSide = side < 0 ? 1 : -1;\n if (side < 0 && !offset) {\n to++;\n takeSide = -1;\n }\n else if (side >= 0 && offset == node.nodeValue.length) {\n from--;\n takeSide = 1;\n }\n else if (side < 0) {\n from--;\n }\n else {\n to++;\n }\n return flattenV(singleRect(textRange(node, from, to), takeSide), takeSide < 0);\n }\n }\n let $dom = view.state.doc.resolve(pos - (atom || 0));\n // Return a horizontal line in block context\n if (!$dom.parent.inlineContent) {\n if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {\n let before = node.childNodes[offset - 1];\n if (before.nodeType == 1)\n return flattenH(before.getBoundingClientRect(), false);\n }\n if (atom == null && offset < nodeSize(node)) {\n let after = node.childNodes[offset];\n if (after.nodeType == 1)\n return flattenH(after.getBoundingClientRect(), true);\n }\n return flattenH(node.getBoundingClientRect(), side >= 0);\n }\n // Inline, not in text node (this is not Bidi-safe)\n if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {\n let before = node.childNodes[offset - 1];\n let target = before.nodeType == 3 ? textRange(before, nodeSize(before) - (supportEmptyRange ? 0 : 1))\n // BR nodes tend to only return the rectangle before them.\n // Only use them if they are the last element in their parent\n : before.nodeType == 1 && (before.nodeName != \"BR\" || !before.nextSibling) ? before : null;\n if (target)\n return flattenV(singleRect(target, 1), false);\n }\n if (atom == null && offset < nodeSize(node)) {\n let after = node.childNodes[offset];\n while (after.pmViewDesc && after.pmViewDesc.ignoreForCoords)\n after = after.nextSibling;\n let target = !after ? null : after.nodeType == 3 ? textRange(after, 0, (supportEmptyRange ? 0 : 1))\n : after.nodeType == 1 ? after : null;\n if (target)\n return flattenV(singleRect(target, -1), true);\n }\n // All else failed, just try to get a rectangle for the target node\n return flattenV(singleRect(node.nodeType == 3 ? textRange(node) : node, -side), side >= 0);\n}\nfunction flattenV(rect, left) {\n if (rect.width == 0)\n return rect;\n let x = left ? rect.left : rect.right;\n return { top: rect.top, bottom: rect.bottom, left: x, right: x };\n}\nfunction flattenH(rect, top) {\n if (rect.height == 0)\n return rect;\n let y = top ? rect.top : rect.bottom;\n return { top: y, bottom: y, left: rect.left, right: rect.right };\n}\nfunction withFlushedState(view, state, f) {\n let viewState = view.state, active = view.root.activeElement;\n if (viewState != state)\n view.updateState(state);\n if (active != view.dom)\n view.focus();\n try {\n return f();\n }\n finally {\n if (viewState != state)\n view.updateState(viewState);\n if (active != view.dom && active)\n active.focus();\n }\n}\n// Whether vertical position motion in a given direction\n// from a position would leave a text block.\nfunction endOfTextblockVertical(view, state, dir) {\n let sel = state.selection;\n let $pos = dir == \"up\" ? sel.$from : sel.$to;\n return withFlushedState(view, state, () => {\n let { node: dom } = view.docView.domFromPos($pos.pos, dir == \"up\" ? -1 : 1);\n for (;;) {\n let nearest = view.docView.nearestDesc(dom, true);\n if (!nearest)\n break;\n if (nearest.node.isBlock) {\n dom = nearest.contentDOM || nearest.dom;\n break;\n }\n dom = nearest.dom.parentNode;\n }\n let coords = coordsAtPos(view, $pos.pos, 1);\n for (let child = dom.firstChild; child; child = child.nextSibling) {\n let boxes;\n if (child.nodeType == 1)\n boxes = child.getClientRects();\n else if (child.nodeType == 3)\n boxes = textRange(child, 0, child.nodeValue.length).getClientRects();\n else\n continue;\n for (let i = 0; i < boxes.length; i++) {\n let box = boxes[i];\n if (box.bottom > box.top + 1 &&\n (dir == \"up\" ? coords.top - box.top > (box.bottom - coords.top) * 2\n : box.bottom - coords.bottom > (coords.bottom - box.top) * 2))\n return false;\n }\n }\n return true;\n });\n}\nconst maybeRTL = /[\\u0590-\\u08ac]/;\nfunction endOfTextblockHorizontal(view, state, dir) {\n let { $head } = state.selection;\n if (!$head.parent.isTextblock)\n return false;\n let offset = $head.parentOffset, atStart = !offset, atEnd = offset == $head.parent.content.size;\n let sel = view.domSelection();\n if (!sel)\n return $head.pos == $head.start() || $head.pos == $head.end();\n // If the textblock is all LTR, or the browser doesn't support\n // Selection.modify (Edge), fall back to a primitive approach\n if (!maybeRTL.test($head.parent.textContent) || !sel.modify)\n return dir == \"left\" || dir == \"backward\" ? atStart : atEnd;\n return withFlushedState(view, state, () => {\n // This is a huge hack, but appears to be the best we can\n // currently do: use `Selection.modify` to move the selection by\n // one character, and see if that moves the cursor out of the\n // textblock (or doesn't move it at all, when at the start/end of\n // the document).\n let { focusNode: oldNode, focusOffset: oldOff, anchorNode, anchorOffset } = view.domSelectionRange();\n let oldBidiLevel = sel.caretBidiLevel // Only for Firefox\n ;\n sel.modify(\"move\", dir, \"character\");\n let parentDOM = $head.depth ? view.docView.domAfterPos($head.before()) : view.dom;\n let { focusNode: newNode, focusOffset: newOff } = view.domSelectionRange();\n let result = newNode && !parentDOM.contains(newNode.nodeType == 1 ? newNode : newNode.parentNode) ||\n (oldNode == newNode && oldOff == newOff);\n // Restore the previous selection\n try {\n sel.collapse(anchorNode, anchorOffset);\n if (oldNode && (oldNode != anchorNode || oldOff != anchorOffset) && sel.extend)\n sel.extend(oldNode, oldOff);\n }\n catch (_) { }\n if (oldBidiLevel != null)\n sel.caretBidiLevel = oldBidiLevel;\n return result;\n });\n}\nlet cachedState = null;\nlet cachedDir = null;\nlet cachedResult = false;\nfunction endOfTextblock(view, state, dir) {\n if (cachedState == state && cachedDir == dir)\n return cachedResult;\n cachedState = state;\n cachedDir = dir;\n return cachedResult = dir == \"up\" || dir == \"down\"\n ? endOfTextblockVertical(view, state, dir)\n : endOfTextblockHorizontal(view, state, dir);\n}\n\n// View descriptions are data structures that describe the DOM that is\n// used to represent the editor's content. They are used for:\n//\n// - Incremental redrawing when the document changes\n//\n// - Figuring out what part of the document a given DOM position\n// corresponds to\n//\n// - Wiring in custom implementations of the editing interface for a\n// given node\n//\n// They form a doubly-linked mutable tree, starting at `view.docView`.\nconst NOT_DIRTY = 0, CHILD_DIRTY = 1, CONTENT_DIRTY = 2, NODE_DIRTY = 3;\n// Superclass for the various kinds of descriptions. Defines their\n// basic structure and shared methods.\nclass ViewDesc {\n constructor(parent, children, dom, \n // This is the node that holds the child views. It may be null for\n // descs that don't have children.\n contentDOM) {\n this.parent = parent;\n this.children = children;\n this.dom = dom;\n this.contentDOM = contentDOM;\n this.dirty = NOT_DIRTY;\n // An expando property on the DOM node provides a link back to its\n // description.\n dom.pmViewDesc = this;\n }\n // Used to check whether a given description corresponds to a\n // widget/mark/node.\n matchesWidget(widget) { return false; }\n matchesMark(mark) { return false; }\n matchesNode(node, outerDeco, innerDeco) { return false; }\n matchesHack(nodeName) { return false; }\n // When parsing in-editor content (in domchange.js), we allow\n // descriptions to determine the parse rules that should be used to\n // parse them.\n parseRule() { return null; }\n // Used by the editor's event handler to ignore events that come\n // from certain descs.\n stopEvent(event) { return false; }\n // The size of the content represented by this desc.\n get size() {\n let size = 0;\n for (let i = 0; i < this.children.length; i++)\n size += this.children[i].size;\n return size;\n }\n // For block nodes, this represents the space taken up by their\n // start/end tokens.\n get border() { return 0; }\n destroy() {\n this.parent = undefined;\n if (this.dom.pmViewDesc == this)\n this.dom.pmViewDesc = undefined;\n for (let i = 0; i < this.children.length; i++)\n this.children[i].destroy();\n }\n posBeforeChild(child) {\n for (let i = 0, pos = this.posAtStart;; i++) {\n let cur = this.children[i];\n if (cur == child)\n return pos;\n pos += cur.size;\n }\n }\n get posBefore() {\n return this.parent.posBeforeChild(this);\n }\n get posAtStart() {\n return this.parent ? this.parent.posBeforeChild(this) + this.border : 0;\n }\n get posAfter() {\n return this.posBefore + this.size;\n }\n get posAtEnd() {\n return this.posAtStart + this.size - 2 * this.border;\n }\n localPosFromDOM(dom, offset, bias) {\n // If the DOM position is in the content, use the child desc after\n // it to figure out a position.\n if (this.contentDOM && this.contentDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode)) {\n if (bias < 0) {\n let domBefore, desc;\n if (dom == this.contentDOM) {\n domBefore = dom.childNodes[offset - 1];\n }\n else {\n while (dom.parentNode != this.contentDOM)\n dom = dom.parentNode;\n domBefore = dom.previousSibling;\n }\n while (domBefore && !((desc = domBefore.pmViewDesc) && desc.parent == this))\n domBefore = domBefore.previousSibling;\n return domBefore ? this.posBeforeChild(desc) + desc.size : this.posAtStart;\n }\n else {\n let domAfter, desc;\n if (dom == this.contentDOM) {\n domAfter = dom.childNodes[offset];\n }\n else {\n while (dom.parentNode != this.contentDOM)\n dom = dom.parentNode;\n domAfter = dom.nextSibling;\n }\n while (domAfter && !((desc = domAfter.pmViewDesc) && desc.parent == this))\n domAfter = domAfter.nextSibling;\n return domAfter ? this.posBeforeChild(desc) : this.posAtEnd;\n }\n }\n // Otherwise, use various heuristics, falling back on the bias\n // parameter, to determine whether to return the position at the\n // start or at the end of this view desc.\n let atEnd;\n if (dom == this.dom && this.contentDOM) {\n atEnd = offset > domIndex(this.contentDOM);\n }\n else if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) {\n atEnd = dom.compareDocumentPosition(this.contentDOM) & 2;\n }\n else if (this.dom.firstChild) {\n if (offset == 0)\n for (let search = dom;; search = search.parentNode) {\n if (search == this.dom) {\n atEnd = false;\n break;\n }\n if (search.previousSibling)\n break;\n }\n if (atEnd == null && offset == dom.childNodes.length)\n for (let search = dom;; search = search.parentNode) {\n if (search == this.dom) {\n atEnd = true;\n break;\n }\n if (search.nextSibling)\n break;\n }\n }\n return (atEnd == null ? bias > 0 : atEnd) ? this.posAtEnd : this.posAtStart;\n }\n nearestDesc(dom, onlyNodes = false) {\n for (let first = true, cur = dom; cur; cur = cur.parentNode) {\n let desc = this.getDesc(cur), nodeDOM;\n if (desc && (!onlyNodes || desc.node)) {\n // If dom is outside of this desc's nodeDOM, don't count it.\n if (first && (nodeDOM = desc.nodeDOM) &&\n !(nodeDOM.nodeType == 1 ? nodeDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode) : nodeDOM == dom))\n first = false;\n else\n return desc;\n }\n }\n }\n getDesc(dom) {\n let desc = dom.pmViewDesc;\n for (let cur = desc; cur; cur = cur.parent)\n if (cur == this)\n return desc;\n }\n posFromDOM(dom, offset, bias) {\n for (let scan = dom; scan; scan = scan.parentNode) {\n let desc = this.getDesc(scan);\n if (desc)\n return desc.localPosFromDOM(dom, offset, bias);\n }\n return -1;\n }\n // Find the desc for the node after the given pos, if any. (When a\n // parent node overrode rendering, there might not be one.)\n descAt(pos) {\n for (let i = 0, offset = 0; i < this.children.length; i++) {\n let child = this.children[i], end = offset + child.size;\n if (offset == pos && end != offset) {\n while (!child.border && child.children.length)\n child = child.children[0];\n return child;\n }\n if (pos < end)\n return child.descAt(pos - offset - child.border);\n offset = end;\n }\n }\n domFromPos(pos, side) {\n if (!this.contentDOM)\n return { node: this.dom, offset: 0, atom: pos + 1 };\n // First find the position in the child array\n let i = 0, offset = 0;\n for (let curPos = 0; i < this.children.length; i++) {\n let child = this.children[i], end = curPos + child.size;\n if (end > pos || child instanceof TrailingHackViewDesc) {\n offset = pos - curPos;\n break;\n }\n curPos = end;\n }\n // If this points into the middle of a child, call through\n if (offset)\n return this.children[i].domFromPos(offset - this.children[i].border, side);\n // Go back if there were any zero-length widgets with side >= 0 before this point\n for (let prev; i && !(prev = this.children[i - 1]).size && prev instanceof WidgetViewDesc && prev.side >= 0; i--) { }\n // Scan towards the first useable node\n if (side <= 0) {\n let prev, enter = true;\n for (;; i--, enter = false) {\n prev = i ? this.children[i - 1] : null;\n if (!prev || prev.dom.parentNode == this.contentDOM)\n break;\n }\n if (prev && side && enter && !prev.border && !prev.domAtom)\n return prev.domFromPos(prev.size, side);\n return { node: this.contentDOM, offset: prev ? domIndex(prev.dom) + 1 : 0 };\n }\n else {\n let next, enter = true;\n for (;; i++, enter = false) {\n next = i < this.children.length ? this.children[i] : null;\n if (!next || next.dom.parentNode == this.contentDOM)\n break;\n }\n if (next && enter && !next.border && !next.domAtom)\n return next.domFromPos(0, side);\n return { node: this.contentDOM, offset: next ? domIndex(next.dom) : this.contentDOM.childNodes.length };\n }\n }\n // Used to find a DOM range in a single parent for a given changed\n // range.\n parseRange(from, to, base = 0) {\n if (this.children.length == 0)\n return { node: this.contentDOM, from, to, fromOffset: 0, toOffset: this.contentDOM.childNodes.length };\n let fromOffset = -1, toOffset = -1;\n for (let offset = base, i = 0;; i++) {\n let child = this.children[i], end = offset + child.size;\n if (fromOffset == -1 && from <= end) {\n let childBase = offset + child.border;\n // FIXME maybe descend mark views to parse a narrower range?\n if (from >= childBase && to <= end - child.border && child.node &&\n child.contentDOM && this.contentDOM.contains(child.contentDOM))\n return child.parseRange(from, to, childBase);\n from = offset;\n for (let j = i; j > 0; j--) {\n let prev = this.children[j - 1];\n if (prev.size && prev.dom.parentNode == this.contentDOM && !prev.emptyChildAt(1)) {\n fromOffset = domIndex(prev.dom) + 1;\n break;\n }\n from -= prev.size;\n }\n if (fromOffset == -1)\n fromOffset = 0;\n }\n if (fromOffset > -1 && (end > to || i == this.children.length - 1)) {\n to = end;\n for (let j = i + 1; j < this.children.length; j++) {\n let next = this.children[j];\n if (next.size && next.dom.parentNode == this.contentDOM && !next.emptyChildAt(-1)) {\n toOffset = domIndex(next.dom);\n break;\n }\n to += next.size;\n }\n if (toOffset == -1)\n toOffset = this.contentDOM.childNodes.length;\n break;\n }\n offset = end;\n }\n return { node: this.contentDOM, from, to, fromOffset, toOffset };\n }\n emptyChildAt(side) {\n if (this.border || !this.contentDOM || !this.children.length)\n return false;\n let child = this.children[side < 0 ? 0 : this.children.length - 1];\n return child.size == 0 || child.emptyChildAt(side);\n }\n domAfterPos(pos) {\n let { node, offset } = this.domFromPos(pos, 0);\n if (node.nodeType != 1 || offset == node.childNodes.length)\n throw new RangeError(\"No node after pos \" + pos);\n return node.childNodes[offset];\n }\n // View descs are responsible for setting any selection that falls\n // entirely inside of them, so that custom implementations can do\n // custom things with the selection. Note that this falls apart when\n // a selection starts in such a node and ends in another, in which\n // case we just use whatever domFromPos produces as a best effort.\n setSelection(anchor, head, root, force = false) {\n // If the selection falls entirely in a child, give it to that child\n let from = Math.min(anchor, head), to = Math.max(anchor, head);\n for (let i = 0, offset = 0; i < this.children.length; i++) {\n let child = this.children[i], end = offset + child.size;\n if (from > offset && to < end)\n return child.setSelection(anchor - offset - child.border, head - offset - child.border, root, force);\n offset = end;\n }\n let anchorDOM = this.domFromPos(anchor, anchor ? -1 : 1);\n let headDOM = head == anchor ? anchorDOM : this.domFromPos(head, head ? -1 : 1);\n let domSel = root.getSelection();\n let brKludge = false;\n // On Firefox, using Selection.collapse to put the cursor after a\n // BR node for some reason doesn't always work (#1073). On Safari,\n // the cursor sometimes inexplicable visually lags behind its\n // reported position in such situations (#1092).\n if ((gecko || safari) && anchor == head) {\n let { node, offset } = anchorDOM;\n if (node.nodeType == 3) {\n brKludge = !!(offset && node.nodeValue[offset - 1] == \"\\n\");\n // Issue #1128\n if (brKludge && offset == node.nodeValue.length) {\n for (let scan = node, after; scan; scan = scan.parentNode) {\n if (after = scan.nextSibling) {\n if (after.nodeName == \"BR\")\n anchorDOM = headDOM = { node: after.parentNode, offset: domIndex(after) + 1 };\n break;\n }\n let desc = scan.pmViewDesc;\n if (desc && desc.node && desc.node.isBlock)\n break;\n }\n }\n }\n else {\n let prev = node.childNodes[offset - 1];\n brKludge = prev && (prev.nodeName == \"BR\" || prev.contentEditable == \"false\");\n }\n }\n // Firefox can act strangely when the selection is in front of an\n // uneditable node. See #1163 and https://bugzilla.mozilla.org/show_bug.cgi?id=1709536\n if (gecko && domSel.focusNode && domSel.focusNode != headDOM.node && domSel.focusNode.nodeType == 1) {\n let after = domSel.focusNode.childNodes[domSel.focusOffset];\n if (after && after.contentEditable == \"false\")\n force = true;\n }\n if (!(force || brKludge && safari) &&\n isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset) &&\n isEquivalentPosition(headDOM.node, headDOM.offset, domSel.focusNode, domSel.focusOffset))\n return;\n // Selection.extend can be used to create an 'inverted' selection\n // (one where the focus is before the anchor), but not all\n // browsers support it yet.\n let domSelExtended = false;\n if ((domSel.extend || anchor == head) && !brKludge) {\n domSel.collapse(anchorDOM.node, anchorDOM.offset);\n try {\n if (anchor != head)\n domSel.extend(headDOM.node, headDOM.offset);\n domSelExtended = true;\n }\n catch (_) {\n // In some cases with Chrome the selection is empty after calling\n // collapse, even when it should be valid. This appears to be a bug, but\n // it is difficult to isolate. If this happens fallback to the old path\n // without using extend.\n // Similarly, this could crash on Safari if the editor is hidden, and\n // there was no selection.\n }\n }\n if (!domSelExtended) {\n if (anchor > head) {\n let tmp = anchorDOM;\n anchorDOM = headDOM;\n headDOM = tmp;\n }\n let range = document.createRange();\n range.setEnd(headDOM.node, headDOM.offset);\n range.setStart(anchorDOM.node, anchorDOM.offset);\n domSel.removeAllRanges();\n domSel.addRange(range);\n }\n }\n ignoreMutation(mutation) {\n return !this.contentDOM && mutation.type != \"selection\";\n }\n get contentLost() {\n return this.contentDOM && this.contentDOM != this.dom && !this.dom.contains(this.contentDOM);\n }\n // Remove a subtree of the element tree that has been touched\n // by a DOM change, so that the next update will redraw it.\n markDirty(from, to) {\n for (let offset = 0, i = 0; i < this.children.length; i++) {\n let child = this.children[i], end = offset + child.size;\n if (offset == end ? from <= end && to >= offset : from < end && to > offset) {\n let startInside = offset + child.border, endInside = end - child.border;\n if (from >= startInside && to <= endInside) {\n this.dirty = from == offset || to == end ? CONTENT_DIRTY : CHILD_DIRTY;\n if (from == startInside && to == endInside &&\n (child.contentLost || child.dom.parentNode != this.contentDOM))\n child.dirty = NODE_DIRTY;\n else\n child.markDirty(from - startInside, to - startInside);\n return;\n }\n else {\n child.dirty = child.dom == child.contentDOM && child.dom.parentNode == this.contentDOM && !child.children.length\n ? CONTENT_DIRTY : NODE_DIRTY;\n }\n }\n offset = end;\n }\n this.dirty = CONTENT_DIRTY;\n }\n markParentsDirty() {\n let level = 1;\n for (let node = this.parent; node; node = node.parent, level++) {\n let dirty = level == 1 ? CONTENT_DIRTY : CHILD_DIRTY;\n if (node.dirty < dirty)\n node.dirty = dirty;\n }\n }\n get domAtom() { return false; }\n get ignoreForCoords() { return false; }\n isText(text) { return false; }\n}\n// A widget desc represents a widget decoration, which is a DOM node\n// drawn between the document nodes.\nclass WidgetViewDesc extends ViewDesc {\n constructor(parent, widget, view, pos) {\n let self, dom = widget.type.toDOM;\n if (typeof dom == \"function\")\n dom = dom(view, () => {\n if (!self)\n return pos;\n if (self.parent)\n return self.parent.posBeforeChild(self);\n });\n if (!widget.type.spec.raw) {\n if (dom.nodeType != 1) {\n let wrap = document.createElement(\"span\");\n wrap.appendChild(dom);\n dom = wrap;\n }\n dom.contentEditable = \"false\";\n dom.classList.add(\"ProseMirror-widget\");\n }\n super(parent, [], dom, null);\n this.widget = widget;\n this.widget = widget;\n self = this;\n }\n matchesWidget(widget) {\n return this.dirty == NOT_DIRTY && widget.type.eq(this.widget.type);\n }\n parseRule() { return { ignore: true }; }\n stopEvent(event) {\n let stop = this.widget.spec.stopEvent;\n return stop ? stop(event) : false;\n }\n ignoreMutation(mutation) {\n return mutation.type != \"selection\" || this.widget.spec.ignoreSelection;\n }\n destroy() {\n this.widget.type.destroy(this.dom);\n super.destroy();\n }\n get domAtom() { return true; }\n get side() { return this.widget.type.side; }\n}\nclass CompositionViewDesc extends ViewDesc {\n constructor(parent, dom, textDOM, text) {\n super(parent, [], dom, null);\n this.textDOM = textDOM;\n this.text = text;\n }\n get size() { return this.text.length; }\n localPosFromDOM(dom, offset) {\n if (dom != this.textDOM)\n return this.posAtStart + (offset ? this.size : 0);\n return this.posAtStart + offset;\n }\n domFromPos(pos) {\n return { node: this.textDOM, offset: pos };\n }\n ignoreMutation(mut) {\n return mut.type === 'characterData' && mut.target.nodeValue == mut.oldValue;\n }\n}\n// A mark desc represents a mark. May have multiple children,\n// depending on how the mark is split. Note that marks are drawn using\n// a fixed nesting order, for simplicity and predictability, so in\n// some cases they will be split more often than would appear\n// necessary.\nclass MarkViewDesc extends ViewDesc {\n constructor(parent, mark, dom, contentDOM) {\n super(parent, [], dom, contentDOM);\n this.mark = mark;\n }\n static create(parent, mark, inline, view) {\n let custom = view.nodeViews[mark.type.name];\n let spec = custom && custom(mark, view, inline);\n if (!spec || !spec.dom)\n spec = DOMSerializer.renderSpec(document, mark.type.spec.toDOM(mark, inline), null, mark.attrs);\n return new MarkViewDesc(parent, mark, spec.dom, spec.contentDOM || spec.dom);\n }\n parseRule() {\n if ((this.dirty & NODE_DIRTY) || this.mark.type.spec.reparseInView)\n return null;\n return { mark: this.mark.type.name, attrs: this.mark.attrs, contentElement: this.contentDOM };\n }\n matchesMark(mark) { return this.dirty != NODE_DIRTY && this.mark.eq(mark); }\n markDirty(from, to) {\n super.markDirty(from, to);\n // Move dirty info to nearest node view\n if (this.dirty != NOT_DIRTY) {\n let parent = this.parent;\n while (!parent.node)\n parent = parent.parent;\n if (parent.dirty < this.dirty)\n parent.dirty = this.dirty;\n this.dirty = NOT_DIRTY;\n }\n }\n slice(from, to, view) {\n let copy = MarkViewDesc.create(this.parent, this.mark, true, view);\n let nodes = this.children, size = this.size;\n if (to < size)\n nodes = replaceNodes(nodes, to, size, view);\n if (from > 0)\n nodes = replaceNodes(nodes, 0, from, view);\n for (let i = 0; i < nodes.length; i++)\n nodes[i].parent = copy;\n copy.children = nodes;\n return copy;\n }\n}\n// Node view descs are the main, most common type of view desc, and\n// correspond to an actual node in the document. Unlike mark descs,\n// they populate their child array themselves.\nclass NodeViewDesc extends ViewDesc {\n constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos) {\n super(parent, [], dom, contentDOM);\n this.node = node;\n this.outerDeco = outerDeco;\n this.innerDeco = innerDeco;\n this.nodeDOM = nodeDOM;\n }\n // By default, a node is rendered using the `toDOM` method from the\n // node type spec. But client code can use the `nodeViews` spec to\n // supply a custom node view, which can influence various aspects of\n // the way the node works.\n //\n // (Using subclassing for this was intentionally decided against,\n // since it'd require exposing a whole slew of finicky\n // implementation details to the user code that they probably will\n // never need.)\n static create(parent, node, outerDeco, innerDeco, view, pos) {\n let custom = view.nodeViews[node.type.name], descObj;\n let spec = custom && custom(node, view, () => {\n // (This is a function that allows the custom view to find its\n // own position)\n if (!descObj)\n return pos;\n if (descObj.parent)\n return descObj.parent.posBeforeChild(descObj);\n }, outerDeco, innerDeco);\n let dom = spec && spec.dom, contentDOM = spec && spec.contentDOM;\n if (node.isText) {\n if (!dom)\n dom = document.createTextNode(node.text);\n else if (dom.nodeType != 3)\n throw new RangeError(\"Text must be rendered as a DOM text node\");\n }\n else if (!dom) {\n let spec = DOMSerializer.renderSpec(document, node.type.spec.toDOM(node), null, node.attrs);\n ({ dom, contentDOM } = spec);\n }\n if (!contentDOM && !node.isText && dom.nodeName != \"BR\") { // Chrome gets confused by <br contenteditable=false>\n if (!dom.hasAttribute(\"contenteditable\"))\n dom.contentEditable = \"false\";\n if (node.type.spec.draggable)\n dom.draggable = true;\n }\n let nodeDOM = dom;\n dom = applyOuterDeco(dom, outerDeco, node);\n if (spec)\n return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, spec, view, pos + 1);\n else if (node.isText)\n return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM, view);\n else\n return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, view, pos + 1);\n }\n parseRule() {\n // Experimental kludge to allow opt-in re-parsing of nodes\n if (this.node.type.spec.reparseInView)\n return null;\n // FIXME the assumption that this can always return the current\n // attrs means that if the user somehow manages to change the\n // attrs in the dom, that won't be picked up. Not entirely sure\n // whether this is a problem\n let rule = { node: this.node.type.name, attrs: this.node.attrs };\n if (this.node.type.whitespace == \"pre\")\n rule.preserveWhitespace = \"full\";\n if (!this.contentDOM) {\n rule.getContent = () => this.node.content;\n }\n else if (!this.contentLost) {\n rule.contentElement = this.contentDOM;\n }\n else {\n // Chrome likes to randomly recreate parent nodes when\n // backspacing things. When that happens, this tries to find the\n // new parent.\n for (let i = this.children.length - 1; i >= 0; i--) {\n let child = this.children[i];\n if (this.dom.contains(child.dom.parentNode)) {\n rule.contentElement = child.dom.parentNode;\n break;\n }\n }\n if (!rule.contentElement)\n rule.getContent = () => Fragment.empty;\n }\n return rule;\n }\n matchesNode(node, outerDeco, innerDeco) {\n return this.dirty == NOT_DIRTY && node.eq(this.node) &&\n sameOuterDeco(outerDeco, this.outerDeco) && innerDeco.eq(this.innerDeco);\n }\n get size() { return this.node.nodeSize; }\n get border() { return this.node.isLeaf ? 0 : 1; }\n // Syncs `this.children` to match `this.node.content` and the local\n // decorations, possibly introducing nesting for marks. Then, in a\n // separate step, syncs the DOM inside `this.contentDOM` to\n // `this.children`.\n updateChildren(view, pos) {\n let inline = this.node.inlineContent, off = pos;\n let composition = view.composing ? this.localCompositionInfo(view, pos) : null;\n let localComposition = composition && composition.pos > -1 ? composition : null;\n let compositionInChild = composition && composition.pos < 0;\n let updater = new ViewTreeUpdater(this, localComposition && localComposition.node, view);\n iterDeco(this.node, this.innerDeco, (widget, i, insideNode) => {\n if (widget.spec.marks)\n updater.syncToMarks(widget.spec.marks, inline, view);\n else if (widget.type.side >= 0 && !insideNode)\n updater.syncToMarks(i == this.node.childCount ? Mark.none : this.node.child(i).marks, inline, view);\n // If the next node is a desc matching this widget, reuse it,\n // otherwise insert the widget as a new view desc.\n updater.placeWidget(widget, view, off);\n }, (child, outerDeco, innerDeco, i) => {\n // Make sure the wrapping mark descs match the node's marks.\n updater.syncToMarks(child.marks, inline, view);\n // Try several strategies for drawing this node\n let compIndex;\n if (updater.findNodeMatch(child, outerDeco, innerDeco, i)) ;\n else if (compositionInChild && view.state.selection.from > off &&\n view.state.selection.to < off + child.nodeSize &&\n (compIndex = updater.findIndexWithChild(composition.node)) > -1 &&\n updater.updateNodeAt(child, outerDeco, innerDeco, compIndex, view)) ;\n else if (updater.updateNextNode(child, outerDeco, innerDeco, view, i, off)) ;\n else {\n // Add it as a new view\n updater.addNode(child, outerDeco, innerDeco, view, off);\n }\n off += child.nodeSize;\n });\n // Drop all remaining descs after the current position.\n updater.syncToMarks([], inline, view);\n if (this.node.isTextblock)\n updater.addTextblockHacks();\n updater.destroyRest();\n // Sync the DOM if anything changed\n if (updater.changed || this.dirty == CONTENT_DIRTY) {\n // May have to protect focused DOM from being changed if a composition is active\n if (localComposition)\n this.protectLocalComposition(view, localComposition);\n renderDescs(this.contentDOM, this.children, view);\n if (ios)\n iosHacks(this.dom);\n }\n }\n localCompositionInfo(view, pos) {\n // Only do something if both the selection and a focused text node\n // are inside of this node\n let { from, to } = view.state.selection;\n if (!(view.state.selection instanceof TextSelection) || from < pos || to > pos + this.node.content.size)\n return null;\n let textNode = view.input.compositionNode;\n if (!textNode || !this.dom.contains(textNode.parentNode))\n return null;\n if (this.node.inlineContent) {\n // Find the text in the focused node in the node, stop if it's not\n // there (may have been modified through other means, in which\n // case it should overwritten)\n let text = textNode.nodeValue;\n let textPos = findTextInFragment(this.node.content, text, from - pos, to - pos);\n return textPos < 0 ? null : { node: textNode, pos: textPos, text };\n }\n else {\n return { node: textNode, pos: -1, text: \"\" };\n }\n }\n protectLocalComposition(view, { node, pos, text }) {\n // The node is already part of a local view desc, leave it there\n if (this.getDesc(node))\n return;\n // Create a composition view for the orphaned nodes\n let topNode = node;\n for (;; topNode = topNode.parentNode) {\n if (topNode.parentNode == this.contentDOM)\n break;\n while (topNode.previousSibling)\n topNode.parentNode.removeChild(topNode.previousSibling);\n while (topNode.nextSibling)\n topNode.parentNode.removeChild(topNode.nextSibling);\n if (topNode.pmViewDesc)\n topNode.pmViewDesc = undefined;\n }\n let desc = new CompositionViewDesc(this, topNode, node, text);\n view.input.compositionNodes.push(desc);\n // Patch up this.children to contain the composition view\n this.children = replaceNodes(this.children, pos, pos + text.length, view, desc);\n }\n // If this desc must be updated to match the given node decoration,\n // do so and return true.\n update(node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY ||\n !node.sameMarkup(this.node))\n return false;\n this.updateInner(node, outerDeco, innerDeco, view);\n return true;\n }\n updateInner(node, outerDeco, innerDeco, view) {\n this.updateOuterDeco(outerDeco);\n this.node = node;\n this.innerDeco = innerDeco;\n if (this.contentDOM)\n this.updateChildren(view, this.posAtStart);\n this.dirty = NOT_DIRTY;\n }\n updateOuterDeco(outerDeco) {\n if (sameOuterDeco(outerDeco, this.outerDeco))\n return;\n let needsWrap = this.nodeDOM.nodeType != 1;\n let oldDOM = this.dom;\n this.dom = patchOuterDeco(this.dom, this.nodeDOM, computeOuterDeco(this.outerDeco, this.node, needsWrap), computeOuterDeco(outerDeco, this.node, needsWrap));\n if (this.dom != oldDOM) {\n oldDOM.pmViewDesc = undefined;\n this.dom.pmViewDesc = this;\n }\n this.outerDeco = outerDeco;\n }\n // Mark this node as being the selected node.\n selectNode() {\n if (this.nodeDOM.nodeType == 1)\n this.nodeDOM.classList.add(\"ProseMirror-selectednode\");\n if (this.contentDOM || !this.node.type.spec.draggable)\n this.dom.draggable = true;\n }\n // Remove selected node marking from this node.\n deselectNode() {\n if (this.nodeDOM.nodeType == 1) {\n this.nodeDOM.classList.remove(\"ProseMirror-selectednode\");\n if (this.contentDOM || !this.node.type.spec.draggable)\n this.dom.removeAttribute(\"draggable\");\n }\n }\n get domAtom() { return this.node.isAtom; }\n}\n// Create a view desc for the top-level document node, to be exported\n// and used by the view class.\nfunction docViewDesc(doc, outerDeco, innerDeco, dom, view) {\n applyOuterDeco(dom, outerDeco, doc);\n let docView = new NodeViewDesc(undefined, doc, outerDeco, innerDeco, dom, dom, dom, view, 0);\n if (docView.contentDOM)\n docView.updateChildren(view, 0);\n return docView;\n}\nclass TextViewDesc extends NodeViewDesc {\n constructor(parent, node, outerDeco, innerDeco, dom, nodeDOM, view) {\n super(parent, node, outerDeco, innerDeco, dom, null, nodeDOM, view, 0);\n }\n parseRule() {\n let skip = this.nodeDOM.parentNode;\n while (skip && skip != this.dom && !skip.pmIsDeco)\n skip = skip.parentNode;\n return { skip: (skip || true) };\n }\n update(node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY || (this.dirty != NOT_DIRTY && !this.inParent()) ||\n !node.sameMarkup(this.node))\n return false;\n this.updateOuterDeco(outerDeco);\n if ((this.dirty != NOT_DIRTY || node.text != this.node.text) && node.text != this.nodeDOM.nodeValue) {\n this.nodeDOM.nodeValue = node.text;\n if (view.trackWrites == this.nodeDOM)\n view.trackWrites = null;\n }\n this.node = node;\n this.dirty = NOT_DIRTY;\n return true;\n }\n inParent() {\n let parentDOM = this.parent.contentDOM;\n for (let n = this.nodeDOM; n; n = n.parentNode)\n if (n == parentDOM)\n return true;\n return false;\n }\n domFromPos(pos) {\n return { node: this.nodeDOM, offset: pos };\n }\n localPosFromDOM(dom, offset, bias) {\n if (dom == this.nodeDOM)\n return this.posAtStart + Math.min(offset, this.node.text.length);\n return super.localPosFromDOM(dom, offset, bias);\n }\n ignoreMutation(mutation) {\n return mutation.type != \"characterData\" && mutation.type != \"selection\";\n }\n slice(from, to, view) {\n let node = this.node.cut(from, to), dom = document.createTextNode(node.text);\n return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom, view);\n }\n markDirty(from, to) {\n super.markDirty(from, to);\n if (this.dom != this.nodeDOM && (from == 0 || to == this.nodeDOM.nodeValue.length))\n this.dirty = NODE_DIRTY;\n }\n get domAtom() { return false; }\n isText(text) { return this.node.text == text; }\n}\n// A dummy desc used to tag trailing BR or IMG nodes created to work\n// around contentEditable terribleness.\nclass TrailingHackViewDesc extends ViewDesc {\n parseRule() { return { ignore: true }; }\n matchesHack(nodeName) { return this.dirty == NOT_DIRTY && this.dom.nodeName == nodeName; }\n get domAtom() { return true; }\n get ignoreForCoords() { return this.dom.nodeName == \"IMG\"; }\n}\n// A separate subclass is used for customized node views, so that the\n// extra checks only have to be made for nodes that are actually\n// customized.\nclass CustomNodeViewDesc extends NodeViewDesc {\n constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec, view, pos) {\n super(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos);\n this.spec = spec;\n }\n // A custom `update` method gets to decide whether the update goes\n // through. If it does, and there's a `contentDOM` node, our logic\n // updates the children.\n update(node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY)\n return false;\n if (this.spec.update) {\n let result = this.spec.update(node, outerDeco, innerDeco);\n if (result)\n this.updateInner(node, outerDeco, innerDeco, view);\n return result;\n }\n else if (!this.contentDOM && !node.isLeaf) {\n return false;\n }\n else {\n return super.update(node, outerDeco, innerDeco, view);\n }\n }\n selectNode() {\n this.spec.selectNode ? this.spec.selectNode() : super.selectNode();\n }\n deselectNode() {\n this.spec.deselectNode ? this.spec.deselectNode() : super.deselectNode();\n }\n setSelection(anchor, head, root, force) {\n this.spec.setSelection ? this.spec.setSelection(anchor, head, root)\n : super.setSelection(anchor, head, root, force);\n }\n destroy() {\n if (this.spec.destroy)\n this.spec.destroy();\n super.destroy();\n }\n stopEvent(event) {\n return this.spec.stopEvent ? this.spec.stopEvent(event) : false;\n }\n ignoreMutation(mutation) {\n return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : super.ignoreMutation(mutation);\n }\n}\n// Sync the content of the given DOM node with the nodes associated\n// with the given array of view descs, recursing into mark descs\n// because this should sync the subtree for a whole node at a time.\nfunction renderDescs(parentDOM, descs, view) {\n let dom = parentDOM.firstChild, written = false;\n for (let i = 0; i < descs.length; i++) {\n let desc = descs[i], childDOM = desc.dom;\n if (childDOM.parentNode == parentDOM) {\n while (childDOM != dom) {\n dom = rm(dom);\n written = true;\n }\n dom = dom.nextSibling;\n }\n else {\n written = true;\n parentDOM.insertBefore(childDOM, dom);\n }\n if (desc instanceof MarkViewDesc) {\n let pos = dom ? dom.previousSibling : parentDOM.lastChild;\n renderDescs(desc.contentDOM, desc.children, view);\n dom = pos ? pos.nextSibling : parentDOM.firstChild;\n }\n }\n while (dom) {\n dom = rm(dom);\n written = true;\n }\n if (written && view.trackWrites == parentDOM)\n view.trackWrites = null;\n}\nconst OuterDecoLevel = function (nodeName) {\n if (nodeName)\n this.nodeName = nodeName;\n};\nOuterDecoLevel.prototype = Object.create(null);\nconst noDeco = [new OuterDecoLevel];\nfunction computeOuterDeco(outerDeco, node, needsWrap) {\n if (outerDeco.length == 0)\n return noDeco;\n let top = needsWrap ? noDeco[0] : new OuterDecoLevel, result = [top];\n for (let i = 0; i < outerDeco.length; i++) {\n let attrs = outerDeco[i].type.attrs;\n if (!attrs)\n continue;\n if (attrs.nodeName)\n result.push(top = new OuterDecoLevel(attrs.nodeName));\n for (let name in attrs) {\n let val = attrs[name];\n if (val == null)\n continue;\n if (needsWrap && result.length == 1)\n result.push(top = new OuterDecoLevel(node.isInline ? \"span\" : \"div\"));\n if (name == \"class\")\n top.class = (top.class ? top.class + \" \" : \"\") + val;\n else if (name == \"style\")\n top.style = (top.style ? top.style + \";\" : \"\") + val;\n else if (name != \"nodeName\")\n top[name] = val;\n }\n }\n return result;\n}\nfunction patchOuterDeco(outerDOM, nodeDOM, prevComputed, curComputed) {\n // Shortcut for trivial case\n if (prevComputed == noDeco && curComputed == noDeco)\n return nodeDOM;\n let curDOM = nodeDOM;\n for (let i = 0; i < curComputed.length; i++) {\n let deco = curComputed[i], prev = prevComputed[i];\n if (i) {\n let parent;\n if (prev && prev.nodeName == deco.nodeName && curDOM != outerDOM &&\n (parent = curDOM.parentNode) && parent.nodeName.toLowerCase() == deco.nodeName) {\n curDOM = parent;\n }\n else {\n parent = document.createElement(deco.nodeName);\n parent.pmIsDeco = true;\n parent.appendChild(curDOM);\n prev = noDeco[0];\n curDOM = parent;\n }\n }\n patchAttributes(curDOM, prev || noDeco[0], deco);\n }\n return curDOM;\n}\nfunction patchAttributes(dom, prev, cur) {\n for (let name in prev)\n if (name != \"class\" && name != \"style\" && name != \"nodeName\" && !(name in cur))\n dom.removeAttribute(name);\n for (let name in cur)\n if (name != \"class\" && name != \"style\" && name != \"nodeName\" && cur[name] != prev[name])\n dom.setAttribute(name, cur[name]);\n if (prev.class != cur.class) {\n let prevList = prev.class ? prev.class.split(\" \").filter(Boolean) : [];\n let curList = cur.class ? cur.class.split(\" \").filter(Boolean) : [];\n for (let i = 0; i < prevList.length; i++)\n if (curList.indexOf(prevList[i]) == -1)\n dom.classList.remove(prevList[i]);\n for (let i = 0; i < curList.length; i++)\n if (prevList.indexOf(curList[i]) == -1)\n dom.classList.add(curList[i]);\n if (dom.classList.length == 0)\n dom.removeAttribute(\"class\");\n }\n if (prev.style != cur.style) {\n if (prev.style) {\n let prop = /\\s*([\\w\\-\\xa1-\\uffff]+)\\s*:(?:\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|\\(.*?\\)|[^;])*/g, m;\n while (m = prop.exec(prev.style))\n dom.style.removeProperty(m[1]);\n }\n if (cur.style)\n dom.style.cssText += cur.style;\n }\n}\nfunction applyOuterDeco(dom, deco, node) {\n return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, dom.nodeType != 1));\n}\nfunction sameOuterDeco(a, b) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!a[i].type.eq(b[i].type))\n return false;\n return true;\n}\n// Remove a DOM node and return its next sibling.\nfunction rm(dom) {\n let next = dom.nextSibling;\n dom.parentNode.removeChild(dom);\n return next;\n}\n// Helper class for incrementally updating a tree of mark descs and\n// the widget and node descs inside of them.\nclass ViewTreeUpdater {\n constructor(top, lock, view) {\n this.lock = lock;\n this.view = view;\n // Index into `this.top`'s child array, represents the current\n // update position.\n this.index = 0;\n // When entering a mark, the current top and index are pushed\n // onto this.\n this.stack = [];\n // Tracks whether anything was changed\n this.changed = false;\n this.top = top;\n this.preMatch = preMatch(top.node.content, top);\n }\n // Destroy and remove the children between the given indices in\n // `this.top`.\n destroyBetween(start, end) {\n if (start == end)\n return;\n for (let i = start; i < end; i++)\n this.top.children[i].destroy();\n this.top.children.splice(start, end - start);\n this.changed = true;\n }\n // Destroy all remaining children in `this.top`.\n destroyRest() {\n this.destroyBetween(this.index, this.top.children.length);\n }\n // Sync the current stack of mark descs with the given array of\n // marks, reusing existing mark descs when possible.\n syncToMarks(marks, inline, view) {\n let keep = 0, depth = this.stack.length >> 1;\n let maxKeep = Math.min(depth, marks.length);\n while (keep < maxKeep &&\n (keep == depth - 1 ? this.top : this.stack[(keep + 1) << 1])\n .matchesMark(marks[keep]) && marks[keep].type.spec.spanning !== false)\n keep++;\n while (keep < depth) {\n this.destroyRest();\n this.top.dirty = NOT_DIRTY;\n this.index = this.stack.pop();\n this.top = this.stack.pop();\n depth--;\n }\n while (depth < marks.length) {\n this.stack.push(this.top, this.index + 1);\n let found = -1;\n for (let i = this.index; i < Math.min(this.index + 3, this.top.children.length); i++) {\n let next = this.top.children[i];\n if (next.matchesMark(marks[depth]) && !this.isLocked(next.dom)) {\n found = i;\n break;\n }\n }\n if (found > -1) {\n if (found > this.index) {\n this.changed = true;\n this.destroyBetween(this.index, found);\n }\n this.top = this.top.children[this.index];\n }\n else {\n let markDesc = MarkViewDesc.create(this.top, marks[depth], inline, view);\n this.top.children.splice(this.index, 0, markDesc);\n this.top = markDesc;\n this.changed = true;\n }\n this.index = 0;\n depth++;\n }\n }\n // Try to find a node desc matching the given data. Skip over it and\n // return true when successful.\n findNodeMatch(node, outerDeco, innerDeco, index) {\n let found = -1, targetDesc;\n if (index >= this.preMatch.index &&\n (targetDesc = this.preMatch.matches[index - this.preMatch.index]).parent == this.top &&\n targetDesc.matchesNode(node, outerDeco, innerDeco)) {\n found = this.top.children.indexOf(targetDesc, this.index);\n }\n else {\n for (let i = this.index, e = Math.min(this.top.children.length, i + 5); i < e; i++) {\n let child = this.top.children[i];\n if (child.matchesNode(node, outerDeco, innerDeco) && !this.preMatch.matched.has(child)) {\n found = i;\n break;\n }\n }\n }\n if (found < 0)\n return false;\n this.destroyBetween(this.index, found);\n this.index++;\n return true;\n }\n updateNodeAt(node, outerDeco, innerDeco, index, view) {\n let child = this.top.children[index];\n if (child.dirty == NODE_DIRTY && child.dom == child.contentDOM)\n child.dirty = CONTENT_DIRTY;\n if (!child.update(node, outerDeco, innerDeco, view))\n return false;\n this.destroyBetween(this.index, index);\n this.index++;\n return true;\n }\n findIndexWithChild(domNode) {\n for (;;) {\n let parent = domNode.parentNode;\n if (!parent)\n return -1;\n if (parent == this.top.contentDOM) {\n let desc = domNode.pmViewDesc;\n if (desc)\n for (let i = this.index; i < this.top.children.length; i++) {\n if (this.top.children[i] == desc)\n return i;\n }\n return -1;\n }\n domNode = parent;\n }\n }\n // Try to update the next node, if any, to the given data. Checks\n // pre-matches to avoid overwriting nodes that could still be used.\n updateNextNode(node, outerDeco, innerDeco, view, index, pos) {\n for (let i = this.index; i < this.top.children.length; i++) {\n let next = this.top.children[i];\n if (next instanceof NodeViewDesc) {\n let preMatch = this.preMatch.matched.get(next);\n if (preMatch != null && preMatch != index)\n return false;\n let nextDOM = next.dom, updated;\n // Can't update if nextDOM is or contains this.lock, except if\n // it's a text node whose content already matches the new text\n // and whose decorations match the new ones.\n let locked = this.isLocked(nextDOM) &&\n !(node.isText && next.node && next.node.isText && next.nodeDOM.nodeValue == node.text &&\n next.dirty != NODE_DIRTY && sameOuterDeco(outerDeco, next.outerDeco));\n if (!locked && next.update(node, outerDeco, innerDeco, view)) {\n this.destroyBetween(this.index, i);\n if (next.dom != nextDOM)\n this.changed = true;\n this.index++;\n return true;\n }\n else if (!locked && (updated = this.recreateWrapper(next, node, outerDeco, innerDeco, view, pos))) {\n this.top.children[this.index] = updated;\n if (updated.contentDOM) {\n updated.dirty = CONTENT_DIRTY;\n updated.updateChildren(view, pos + 1);\n updated.dirty = NOT_DIRTY;\n }\n this.changed = true;\n this.index++;\n return true;\n }\n break;\n }\n }\n return false;\n }\n // When a node with content is replaced by a different node with\n // identical content, move over its children.\n recreateWrapper(next, node, outerDeco, innerDeco, view, pos) {\n if (next.dirty || node.isAtom || !next.children.length ||\n !next.node.content.eq(node.content))\n return null;\n let wrapper = NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos);\n if (wrapper.contentDOM) {\n wrapper.children = next.children;\n next.children = [];\n for (let ch of wrapper.children)\n ch.parent = wrapper;\n }\n next.destroy();\n return wrapper;\n }\n // Insert the node as a newly created node desc.\n addNode(node, outerDeco, innerDeco, view, pos) {\n let desc = NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos);\n if (desc.contentDOM)\n desc.updateChildren(view, pos + 1);\n this.top.children.splice(this.index++, 0, desc);\n this.changed = true;\n }\n placeWidget(widget, view, pos) {\n let next = this.index < this.top.children.length ? this.top.children[this.index] : null;\n if (next && next.matchesWidget(widget) &&\n (widget == next.widget || !next.widget.type.toDOM.parentNode)) {\n this.index++;\n }\n else {\n let desc = new WidgetViewDesc(this.top, widget, view, pos);\n this.top.children.splice(this.index++, 0, desc);\n this.changed = true;\n }\n }\n // Make sure a textblock looks and behaves correctly in\n // contentEditable.\n addTextblockHacks() {\n let lastChild = this.top.children[this.index - 1], parent = this.top;\n while (lastChild instanceof MarkViewDesc) {\n parent = lastChild;\n lastChild = parent.children[parent.children.length - 1];\n }\n if (!lastChild || // Empty textblock\n !(lastChild instanceof TextViewDesc) ||\n /\\n$/.test(lastChild.node.text) ||\n (this.view.requiresGeckoHackNode && /\\s$/.test(lastChild.node.text))) {\n // Avoid bugs in Safari's cursor drawing (#1165) and Chrome's mouse selection (#1152)\n if ((safari || chrome) && lastChild && lastChild.dom.contentEditable == \"false\")\n this.addHackNode(\"IMG\", parent);\n this.addHackNode(\"BR\", this.top);\n }\n }\n addHackNode(nodeName, parent) {\n if (parent == this.top && this.index < parent.children.length && parent.children[this.index].matchesHack(nodeName)) {\n this.index++;\n }\n else {\n let dom = document.createElement(nodeName);\n if (nodeName == \"IMG\") {\n dom.className = \"ProseMirror-separator\";\n dom.alt = \"\";\n }\n if (nodeName == \"BR\")\n dom.className = \"ProseMirror-trailingBreak\";\n let hack = new TrailingHackViewDesc(this.top, [], dom, null);\n if (parent != this.top)\n parent.children.push(hack);\n else\n parent.children.splice(this.index++, 0, hack);\n this.changed = true;\n }\n }\n isLocked(node) {\n return this.lock && (node == this.lock || node.nodeType == 1 && node.contains(this.lock.parentNode));\n }\n}\n// Iterate from the end of the fragment and array of descs to find\n// directly matching ones, in order to avoid overeagerly reusing those\n// for other nodes. Returns the fragment index of the first node that\n// is part of the sequence of matched nodes at the end of the\n// fragment.\nfunction preMatch(frag, parentDesc) {\n let curDesc = parentDesc, descI = curDesc.children.length;\n let fI = frag.childCount, matched = new Map, matches = [];\n outer: while (fI > 0) {\n let desc;\n for (;;) {\n if (descI) {\n let next = curDesc.children[descI - 1];\n if (next instanceof MarkViewDesc) {\n curDesc = next;\n descI = next.children.length;\n }\n else {\n desc = next;\n descI--;\n break;\n }\n }\n else if (curDesc == parentDesc) {\n break outer;\n }\n else {\n // FIXME\n descI = curDesc.parent.children.indexOf(curDesc);\n curDesc = curDesc.parent;\n }\n }\n let node = desc.node;\n if (!node)\n continue;\n if (node != frag.child(fI - 1))\n break;\n --fI;\n matched.set(desc, fI);\n matches.push(desc);\n }\n return { index: fI, matched, matches: matches.reverse() };\n}\nfunction compareSide(a, b) {\n return a.type.side - b.type.side;\n}\n// This function abstracts iterating over the nodes and decorations in\n// a fragment. Calls `onNode` for each node, with its local and child\n// decorations. Splits text nodes when there is a decoration starting\n// or ending inside of them. Calls `onWidget` for each widget.\nfunction iterDeco(parent, deco, onWidget, onNode) {\n let locals = deco.locals(parent), offset = 0;\n // Simple, cheap variant for when there are no local decorations\n if (locals.length == 0) {\n for (let i = 0; i < parent.childCount; i++) {\n let child = parent.child(i);\n onNode(child, locals, deco.forChild(offset, child), i);\n offset += child.nodeSize;\n }\n return;\n }\n let decoIndex = 0, active = [], restNode = null;\n for (let parentIndex = 0;;) {\n let widget, widgets;\n while (decoIndex < locals.length && locals[decoIndex].to == offset) {\n let next = locals[decoIndex++];\n if (next.widget) {\n if (!widget)\n widget = next;\n else\n (widgets || (widgets = [widget])).push(next);\n }\n }\n if (widget) {\n if (widgets) {\n widgets.sort(compareSide);\n for (let i = 0; i < widgets.length; i++)\n onWidget(widgets[i], parentIndex, !!restNode);\n }\n else {\n onWidget(widget, parentIndex, !!restNode);\n }\n }\n let child, index;\n if (restNode) {\n index = -1;\n child = restNode;\n restNode = null;\n }\n else if (parentIndex < parent.childCount) {\n index = parentIndex;\n child = parent.child(parentIndex++);\n }\n else {\n break;\n }\n for (let i = 0; i < active.length; i++)\n if (active[i].to <= offset)\n active.splice(i--, 1);\n while (decoIndex < locals.length && locals[decoIndex].from <= offset && locals[decoIndex].to > offset)\n active.push(locals[decoIndex++]);\n let end = offset + child.nodeSize;\n if (child.isText) {\n let cutAt = end;\n if (decoIndex < locals.length && locals[decoIndex].from < cutAt)\n cutAt = locals[decoIndex].from;\n for (let i = 0; i < active.length; i++)\n if (active[i].to < cutAt)\n cutAt = active[i].to;\n if (cutAt < end) {\n restNode = child.cut(cutAt - offset);\n child = child.cut(0, cutAt - offset);\n end = cutAt;\n index = -1;\n }\n }\n else {\n while (decoIndex < locals.length && locals[decoIndex].to < end)\n decoIndex++;\n }\n let outerDeco = child.isInline && !child.isLeaf ? active.filter(d => !d.inline) : active.slice();\n onNode(child, outerDeco, deco.forChild(offset, child), index);\n offset = end;\n }\n}\n// List markers in Mobile Safari will mysteriously disappear\n// sometimes. This works around that.\nfunction iosHacks(dom) {\n if (dom.nodeName == \"UL\" || dom.nodeName == \"OL\") {\n let oldCSS = dom.style.cssText;\n dom.style.cssText = oldCSS + \"; list-style: square !important\";\n window.getComputedStyle(dom).listStyle;\n dom.style.cssText = oldCSS;\n }\n}\n// Find a piece of text in an inline fragment, overlapping from-to\nfunction findTextInFragment(frag, text, from, to) {\n for (let i = 0, pos = 0; i < frag.childCount && pos <= to;) {\n let child = frag.child(i++), childStart = pos;\n pos += child.nodeSize;\n if (!child.isText)\n continue;\n let str = child.text;\n while (i < frag.childCount) {\n let next = frag.child(i++);\n pos += next.nodeSize;\n if (!next.isText)\n break;\n str += next.text;\n }\n if (pos >= from) {\n if (pos >= to && str.slice(to - text.length - childStart, to - childStart) == text)\n return to - text.length;\n let found = childStart < to ? str.lastIndexOf(text, to - childStart - 1) : -1;\n if (found >= 0 && found + text.length + childStart >= from)\n return childStart + found;\n if (from == to && str.length >= (to + text.length) - childStart &&\n str.slice(to - childStart, to - childStart + text.length) == text)\n return to;\n }\n }\n return -1;\n}\n// Replace range from-to in an array of view descs with replacement\n// (may be null to just delete). This goes very much against the grain\n// of the rest of this code, which tends to create nodes with the\n// right shape in one go, rather than messing with them after\n// creation, but is necessary in the composition hack.\nfunction replaceNodes(nodes, from, to, view, replacement) {\n let result = [];\n for (let i = 0, off = 0; i < nodes.length; i++) {\n let child = nodes[i], start = off, end = off += child.size;\n if (start >= to || end <= from) {\n result.push(child);\n }\n else {\n if (start < from)\n result.push(child.slice(0, from - start, view));\n if (replacement) {\n result.push(replacement);\n replacement = undefined;\n }\n if (end > to)\n result.push(child.slice(to - start, child.size, view));\n }\n }\n return result;\n}\n\nfunction selectionFromDOM(view, origin = null) {\n let domSel = view.domSelectionRange(), doc = view.state.doc;\n if (!domSel.focusNode)\n return null;\n let nearestDesc = view.docView.nearestDesc(domSel.focusNode), inWidget = nearestDesc && nearestDesc.size == 0;\n let head = view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset, 1);\n if (head < 0)\n return null;\n let $head = doc.resolve(head), $anchor, selection;\n if (selectionCollapsed(domSel)) {\n $anchor = $head;\n while (nearestDesc && !nearestDesc.node)\n nearestDesc = nearestDesc.parent;\n let nearestDescNode = nearestDesc.node;\n if (nearestDesc && nearestDescNode.isAtom && NodeSelection.isSelectable(nearestDescNode) && nearestDesc.parent\n && !(nearestDescNode.isInline && isOnEdge(domSel.focusNode, domSel.focusOffset, nearestDesc.dom))) {\n let pos = nearestDesc.posBefore;\n selection = new NodeSelection(head == pos ? $head : doc.resolve(pos));\n }\n }\n else {\n let anchor = view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset, 1);\n if (anchor < 0)\n return null;\n $anchor = doc.resolve(anchor);\n }\n if (!selection) {\n let bias = origin == \"pointer\" || (view.state.selection.head < $head.pos && !inWidget) ? 1 : -1;\n selection = selectionBetween(view, $anchor, $head, bias);\n }\n return selection;\n}\nfunction editorOwnsSelection(view) {\n return view.editable ? view.hasFocus() :\n hasSelection(view) && document.activeElement && document.activeElement.contains(view.dom);\n}\nfunction selectionToDOM(view, force = false) {\n let sel = view.state.selection;\n syncNodeSelection(view, sel);\n if (!editorOwnsSelection(view))\n return;\n // The delayed drag selection causes issues with Cell Selections\n // in Safari. And the drag selection delay is to workarond issues\n // which only present in Chrome.\n if (!force && view.input.mouseDown && view.input.mouseDown.allowDefault && chrome) {\n let domSel = view.domSelectionRange(), curSel = view.domObserver.currentSelection;\n if (domSel.anchorNode && curSel.anchorNode &&\n isEquivalentPosition(domSel.anchorNode, domSel.anchorOffset, curSel.anchorNode, curSel.anchorOffset)) {\n view.input.mouseDown.delayedSelectionSync = true;\n view.domObserver.setCurSelection();\n return;\n }\n }\n view.domObserver.disconnectSelection();\n if (view.cursorWrapper) {\n selectCursorWrapper(view);\n }\n else {\n let { anchor, head } = sel, resetEditableFrom, resetEditableTo;\n if (brokenSelectBetweenUneditable && !(sel instanceof TextSelection)) {\n if (!sel.$from.parent.inlineContent)\n resetEditableFrom = temporarilyEditableNear(view, sel.from);\n if (!sel.empty && !sel.$from.parent.inlineContent)\n resetEditableTo = temporarilyEditableNear(view, sel.to);\n }\n view.docView.setSelection(anchor, head, view.root, force);\n if (brokenSelectBetweenUneditable) {\n if (resetEditableFrom)\n resetEditable(resetEditableFrom);\n if (resetEditableTo)\n resetEditable(resetEditableTo);\n }\n if (sel.visible) {\n view.dom.classList.remove(\"ProseMirror-hideselection\");\n }\n else {\n view.dom.classList.add(\"ProseMirror-hideselection\");\n if (\"onselectionchange\" in document)\n removeClassOnSelectionChange(view);\n }\n }\n view.domObserver.setCurSelection();\n view.domObserver.connectSelection();\n}\n// Kludge to work around Webkit not allowing a selection to start/end\n// between non-editable block nodes. We briefly make something\n// editable, set the selection, then set it uneditable again.\nconst brokenSelectBetweenUneditable = safari || chrome && chrome_version < 63;\nfunction temporarilyEditableNear(view, pos) {\n let { node, offset } = view.docView.domFromPos(pos, 0);\n let after = offset < node.childNodes.length ? node.childNodes[offset] : null;\n let before = offset ? node.childNodes[offset - 1] : null;\n if (safari && after && after.contentEditable == \"false\")\n return setEditable(after);\n if ((!after || after.contentEditable == \"false\") &&\n (!before || before.contentEditable == \"false\")) {\n if (after)\n return setEditable(after);\n else if (before)\n return setEditable(before);\n }\n}\nfunction setEditable(element) {\n element.contentEditable = \"true\";\n if (safari && element.draggable) {\n element.draggable = false;\n element.wasDraggable = true;\n }\n return element;\n}\nfunction resetEditable(element) {\n element.contentEditable = \"false\";\n if (element.wasDraggable) {\n element.draggable = true;\n element.wasDraggable = null;\n }\n}\nfunction removeClassOnSelectionChange(view) {\n let doc = view.dom.ownerDocument;\n doc.removeEventListener(\"selectionchange\", view.input.hideSelectionGuard);\n let domSel = view.domSelectionRange();\n let node = domSel.anchorNode, offset = domSel.anchorOffset;\n doc.addEventListener(\"selectionchange\", view.input.hideSelectionGuard = () => {\n if (domSel.anchorNode != node || domSel.anchorOffset != offset) {\n doc.removeEventListener(\"selectionchange\", view.input.hideSelectionGuard);\n setTimeout(() => {\n if (!editorOwnsSelection(view) || view.state.selection.visible)\n view.dom.classList.remove(\"ProseMirror-hideselection\");\n }, 20);\n }\n });\n}\nfunction selectCursorWrapper(view) {\n let domSel = view.domSelection(), range = document.createRange();\n if (!domSel)\n return;\n let node = view.cursorWrapper.dom, img = node.nodeName == \"IMG\";\n if (img)\n range.setStart(node.parentNode, domIndex(node) + 1);\n else\n range.setStart(node, 0);\n range.collapse(true);\n domSel.removeAllRanges();\n domSel.addRange(range);\n // Kludge to kill 'control selection' in IE11 when selecting an\n // invisible cursor wrapper, since that would result in those weird\n // resize handles and a selection that considers the absolutely\n // positioned wrapper, rather than the root editable node, the\n // focused element.\n if (!img && !view.state.selection.visible && ie && ie_version <= 11) {\n node.disabled = true;\n node.disabled = false;\n }\n}\nfunction syncNodeSelection(view, sel) {\n if (sel instanceof NodeSelection) {\n let desc = view.docView.descAt(sel.from);\n if (desc != view.lastSelectedViewDesc) {\n clearNodeSelection(view);\n if (desc)\n desc.selectNode();\n view.lastSelectedViewDesc = desc;\n }\n }\n else {\n clearNodeSelection(view);\n }\n}\n// Clear all DOM statefulness of the last node selection.\nfunction clearNodeSelection(view) {\n if (view.lastSelectedViewDesc) {\n if (view.lastSelectedViewDesc.parent)\n view.lastSelectedViewDesc.deselectNode();\n view.lastSelectedViewDesc = undefined;\n }\n}\nfunction selectionBetween(view, $anchor, $head, bias) {\n return view.someProp(\"createSelectionBetween\", f => f(view, $anchor, $head))\n || TextSelection.between($anchor, $head, bias);\n}\nfunction hasFocusAndSelection(view) {\n if (view.editable && !view.hasFocus())\n return false;\n return hasSelection(view);\n}\nfunction hasSelection(view) {\n let sel = view.domSelectionRange();\n if (!sel.anchorNode)\n return false;\n try {\n // Firefox will raise 'permission denied' errors when accessing\n // properties of `sel.anchorNode` when it's in a generated CSS\n // element.\n return view.dom.contains(sel.anchorNode.nodeType == 3 ? sel.anchorNode.parentNode : sel.anchorNode) &&\n (view.editable || view.dom.contains(sel.focusNode.nodeType == 3 ? sel.focusNode.parentNode : sel.focusNode));\n }\n catch (_) {\n return false;\n }\n}\nfunction anchorInRightPlace(view) {\n let anchorDOM = view.docView.domFromPos(view.state.selection.anchor, 0);\n let domSel = view.domSelectionRange();\n return isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset);\n}\n\nfunction moveSelectionBlock(state, dir) {\n let { $anchor, $head } = state.selection;\n let $side = dir > 0 ? $anchor.max($head) : $anchor.min($head);\n let $start = !$side.parent.inlineContent ? $side : $side.depth ? state.doc.resolve(dir > 0 ? $side.after() : $side.before()) : null;\n return $start && Selection.findFrom($start, dir);\n}\nfunction apply(view, sel) {\n view.dispatch(view.state.tr.setSelection(sel).scrollIntoView());\n return true;\n}\nfunction selectHorizontally(view, dir, mods) {\n let sel = view.state.selection;\n if (sel instanceof TextSelection) {\n if (mods.indexOf(\"s\") > -1) {\n let { $head } = sel, node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter;\n if (!node || node.isText || !node.isLeaf)\n return false;\n let $newHead = view.state.doc.resolve($head.pos + node.nodeSize * (dir < 0 ? -1 : 1));\n return apply(view, new TextSelection(sel.$anchor, $newHead));\n }\n else if (!sel.empty) {\n return false;\n }\n else if (view.endOfTextblock(dir > 0 ? \"forward\" : \"backward\")) {\n let next = moveSelectionBlock(view.state, dir);\n if (next && (next instanceof NodeSelection))\n return apply(view, next);\n return false;\n }\n else if (!(mac && mods.indexOf(\"m\") > -1)) {\n let $head = sel.$head, node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter, desc;\n if (!node || node.isText)\n return false;\n let nodePos = dir < 0 ? $head.pos - node.nodeSize : $head.pos;\n if (!(node.isAtom || (desc = view.docView.descAt(nodePos)) && !desc.contentDOM))\n return false;\n if (NodeSelection.isSelectable(node)) {\n return apply(view, new NodeSelection(dir < 0 ? view.state.doc.resolve($head.pos - node.nodeSize) : $head));\n }\n else if (webkit) {\n // Chrome and Safari will introduce extra pointless cursor\n // positions around inline uneditable nodes, so we have to\n // take over and move the cursor past them (#937)\n return apply(view, new TextSelection(view.state.doc.resolve(dir < 0 ? nodePos : nodePos + node.nodeSize)));\n }\n else {\n return false;\n }\n }\n }\n else if (sel instanceof NodeSelection && sel.node.isInline) {\n return apply(view, new TextSelection(dir > 0 ? sel.$to : sel.$from));\n }\n else {\n let next = moveSelectionBlock(view.state, dir);\n if (next)\n return apply(view, next);\n return false;\n }\n}\nfunction nodeLen(node) {\n return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction isIgnorable(dom, dir) {\n let desc = dom.pmViewDesc;\n return desc && desc.size == 0 && (dir < 0 || dom.nextSibling || dom.nodeName != \"BR\");\n}\nfunction skipIgnoredNodes(view, dir) {\n return dir < 0 ? skipIgnoredNodesBefore(view) : skipIgnoredNodesAfter(view);\n}\n// Make sure the cursor isn't directly after one or more ignored\n// nodes, which will confuse the browser's cursor motion logic.\nfunction skipIgnoredNodesBefore(view) {\n let sel = view.domSelectionRange();\n let node = sel.focusNode, offset = sel.focusOffset;\n if (!node)\n return;\n let moveNode, moveOffset, force = false;\n // Gecko will do odd things when the selection is directly in front\n // of a non-editable node, so in that case, move it into the next\n // node if possible. Issue prosemirror/prosemirror#832.\n if (gecko && node.nodeType == 1 && offset < nodeLen(node) && isIgnorable(node.childNodes[offset], -1))\n force = true;\n for (;;) {\n if (offset > 0) {\n if (node.nodeType != 1) {\n break;\n }\n else {\n let before = node.childNodes[offset - 1];\n if (isIgnorable(before, -1)) {\n moveNode = node;\n moveOffset = --offset;\n }\n else if (before.nodeType == 3) {\n node = before;\n offset = node.nodeValue.length;\n }\n else\n break;\n }\n }\n else if (isBlockNode(node)) {\n break;\n }\n else {\n let prev = node.previousSibling;\n while (prev && isIgnorable(prev, -1)) {\n moveNode = node.parentNode;\n moveOffset = domIndex(prev);\n prev = prev.previousSibling;\n }\n if (!prev) {\n node = node.parentNode;\n if (node == view.dom)\n break;\n offset = 0;\n }\n else {\n node = prev;\n offset = nodeLen(node);\n }\n }\n }\n if (force)\n setSelFocus(view, node, offset);\n else if (moveNode)\n setSelFocus(view, moveNode, moveOffset);\n}\n// Make sure the cursor isn't directly before one or more ignored\n// nodes.\nfunction skipIgnoredNodesAfter(view) {\n let sel = view.domSelectionRange();\n let node = sel.focusNode, offset = sel.focusOffset;\n if (!node)\n return;\n let len = nodeLen(node);\n let moveNode, moveOffset;\n for (;;) {\n if (offset < len) {\n if (node.nodeType != 1)\n break;\n let after = node.childNodes[offset];\n if (isIgnorable(after, 1)) {\n moveNode = node;\n moveOffset = ++offset;\n }\n else\n break;\n }\n else if (isBlockNode(node)) {\n break;\n }\n else {\n let next = node.nextSibling;\n while (next && isIgnorable(next, 1)) {\n moveNode = next.parentNode;\n moveOffset = domIndex(next) + 1;\n next = next.nextSibling;\n }\n if (!next) {\n node = node.parentNode;\n if (node == view.dom)\n break;\n offset = len = 0;\n }\n else {\n node = next;\n offset = 0;\n len = nodeLen(node);\n }\n }\n }\n if (moveNode)\n setSelFocus(view, moveNode, moveOffset);\n}\nfunction isBlockNode(dom) {\n let desc = dom.pmViewDesc;\n return desc && desc.node && desc.node.isBlock;\n}\nfunction textNodeAfter(node, offset) {\n while (node && offset == node.childNodes.length && !hasBlockDesc(node)) {\n offset = domIndex(node) + 1;\n node = node.parentNode;\n }\n while (node && offset < node.childNodes.length) {\n let next = node.childNodes[offset];\n if (next.nodeType == 3)\n return next;\n if (next.nodeType == 1 && next.contentEditable == \"false\")\n break;\n node = next;\n offset = 0;\n }\n}\nfunction textNodeBefore(node, offset) {\n while (node && !offset && !hasBlockDesc(node)) {\n offset = domIndex(node);\n node = node.parentNode;\n }\n while (node && offset) {\n let next = node.childNodes[offset - 1];\n if (next.nodeType == 3)\n return next;\n if (next.nodeType == 1 && next.contentEditable == \"false\")\n break;\n node = next;\n offset = node.childNodes.length;\n }\n}\nfunction setSelFocus(view, node, offset) {\n if (node.nodeType != 3) {\n let before, after;\n if (after = textNodeAfter(node, offset)) {\n node = after;\n offset = 0;\n }\n else if (before = textNodeBefore(node, offset)) {\n node = before;\n offset = before.nodeValue.length;\n }\n }\n let sel = view.domSelection();\n if (!sel)\n return;\n if (selectionCollapsed(sel)) {\n let range = document.createRange();\n range.setEnd(node, offset);\n range.setStart(node, offset);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n else if (sel.extend) {\n sel.extend(node, offset);\n }\n view.domObserver.setCurSelection();\n let { state } = view;\n // If no state update ends up happening, reset the selection.\n setTimeout(() => {\n if (view.state == state)\n selectionToDOM(view);\n }, 50);\n}\nfunction findDirection(view, pos) {\n let $pos = view.state.doc.resolve(pos);\n if (!(chrome || windows) && $pos.parent.inlineContent) {\n let coords = view.coordsAtPos(pos);\n if (pos > $pos.start()) {\n let before = view.coordsAtPos(pos - 1);\n let mid = (before.top + before.bottom) / 2;\n if (mid > coords.top && mid < coords.bottom && Math.abs(before.left - coords.left) > 1)\n return before.left < coords.left ? \"ltr\" : \"rtl\";\n }\n if (pos < $pos.end()) {\n let after = view.coordsAtPos(pos + 1);\n let mid = (after.top + after.bottom) / 2;\n if (mid > coords.top && mid < coords.bottom && Math.abs(after.left - coords.left) > 1)\n return after.left > coords.left ? \"ltr\" : \"rtl\";\n }\n }\n let computed = getComputedStyle(view.dom).direction;\n return computed == \"rtl\" ? \"rtl\" : \"ltr\";\n}\n// Check whether vertical selection motion would involve node\n// selections. If so, apply it (if not, the result is left to the\n// browser)\nfunction selectVertically(view, dir, mods) {\n let sel = view.state.selection;\n if (sel instanceof TextSelection && !sel.empty || mods.indexOf(\"s\") > -1)\n return false;\n if (mac && mods.indexOf(\"m\") > -1)\n return false;\n let { $from, $to } = sel;\n if (!$from.parent.inlineContent || view.endOfTextblock(dir < 0 ? \"up\" : \"down\")) {\n let next = moveSelectionBlock(view.state, dir);\n if (next && (next instanceof NodeSelection))\n return apply(view, next);\n }\n if (!$from.parent.inlineContent) {\n let side = dir < 0 ? $from : $to;\n let beyond = sel instanceof AllSelection ? Selection.near(side, dir) : Selection.findFrom(side, dir);\n return beyond ? apply(view, beyond) : false;\n }\n return false;\n}\nfunction stopNativeHorizontalDelete(view, dir) {\n if (!(view.state.selection instanceof TextSelection))\n return true;\n let { $head, $anchor, empty } = view.state.selection;\n if (!$head.sameParent($anchor))\n return true;\n if (!empty)\n return false;\n if (view.endOfTextblock(dir > 0 ? \"forward\" : \"backward\"))\n return true;\n let nextNode = !$head.textOffset && (dir < 0 ? $head.nodeBefore : $head.nodeAfter);\n if (nextNode && !nextNode.isText) {\n let tr = view.state.tr;\n if (dir < 0)\n tr.delete($head.pos - nextNode.nodeSize, $head.pos);\n else\n tr.delete($head.pos, $head.pos + nextNode.nodeSize);\n view.dispatch(tr);\n return true;\n }\n return false;\n}\nfunction switchEditable(view, node, state) {\n view.domObserver.stop();\n node.contentEditable = state;\n view.domObserver.start();\n}\n// Issue #867 / #1090 / https://bugs.chromium.org/p/chromium/issues/detail?id=903821\n// In which Safari (and at some point in the past, Chrome) does really\n// wrong things when the down arrow is pressed when the cursor is\n// directly at the start of a textblock and has an uneditable node\n// after it\nfunction safariDownArrowBug(view) {\n if (!safari || view.state.selection.$head.parentOffset > 0)\n return false;\n let { focusNode, focusOffset } = view.domSelectionRange();\n if (focusNode && focusNode.nodeType == 1 && focusOffset == 0 &&\n focusNode.firstChild && focusNode.firstChild.contentEditable == \"false\") {\n let child = focusNode.firstChild;\n switchEditable(view, child, \"true\");\n setTimeout(() => switchEditable(view, child, \"false\"), 20);\n }\n return false;\n}\n// A backdrop key mapping used to make sure we always suppress keys\n// that have a dangerous default effect, even if the commands they are\n// bound to return false, and to make sure that cursor-motion keys\n// find a cursor (as opposed to a node selection) when pressed. For\n// cursor-motion keys, the code in the handlers also takes care of\n// block selections.\nfunction getMods(event) {\n let result = \"\";\n if (event.ctrlKey)\n result += \"c\";\n if (event.metaKey)\n result += \"m\";\n if (event.altKey)\n result += \"a\";\n if (event.shiftKey)\n result += \"s\";\n return result;\n}\nfunction captureKeyDown(view, event) {\n let code = event.keyCode, mods = getMods(event);\n if (code == 8 || (mac && code == 72 && mods == \"c\")) { // Backspace, Ctrl-h on Mac\n return stopNativeHorizontalDelete(view, -1) || skipIgnoredNodes(view, -1);\n }\n else if ((code == 46 && !event.shiftKey) || (mac && code == 68 && mods == \"c\")) { // Delete, Ctrl-d on Mac\n return stopNativeHorizontalDelete(view, 1) || skipIgnoredNodes(view, 1);\n }\n else if (code == 13 || code == 27) { // Enter, Esc\n return true;\n }\n else if (code == 37 || (mac && code == 66 && mods == \"c\")) { // Left arrow, Ctrl-b on Mac\n let dir = code == 37 ? (findDirection(view, view.state.selection.from) == \"ltr\" ? -1 : 1) : -1;\n return selectHorizontally(view, dir, mods) || skipIgnoredNodes(view, dir);\n }\n else if (code == 39 || (mac && code == 70 && mods == \"c\")) { // Right arrow, Ctrl-f on Mac\n let dir = code == 39 ? (findDirection(view, view.state.selection.from) == \"ltr\" ? 1 : -1) : 1;\n return selectHorizontally(view, dir, mods) || skipIgnoredNodes(view, dir);\n }\n else if (code == 38 || (mac && code == 80 && mods == \"c\")) { // Up arrow, Ctrl-p on Mac\n return selectVertically(view, -1, mods) || skipIgnoredNodes(view, -1);\n }\n else if (code == 40 || (mac && code == 78 && mods == \"c\")) { // Down arrow, Ctrl-n on Mac\n return safariDownArrowBug(view) || selectVertically(view, 1, mods) || skipIgnoredNodes(view, 1);\n }\n else if (mods == (mac ? \"m\" : \"c\") &&\n (code == 66 || code == 73 || code == 89 || code == 90)) { // Mod-[biyz]\n return true;\n }\n return false;\n}\n\nfunction serializeForClipboard(view, slice) {\n view.someProp(\"transformCopied\", f => { slice = f(slice, view); });\n let context = [], { content, openStart, openEnd } = slice;\n while (openStart > 1 && openEnd > 1 && content.childCount == 1 && content.firstChild.childCount == 1) {\n openStart--;\n openEnd--;\n let node = content.firstChild;\n context.push(node.type.name, node.attrs != node.type.defaultAttrs ? node.attrs : null);\n content = node.content;\n }\n let serializer = view.someProp(\"clipboardSerializer\") || DOMSerializer.fromSchema(view.state.schema);\n let doc = detachedDoc(), wrap = doc.createElement(\"div\");\n wrap.appendChild(serializer.serializeFragment(content, { document: doc }));\n let firstChild = wrap.firstChild, needsWrap, wrappers = 0;\n while (firstChild && firstChild.nodeType == 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {\n for (let i = needsWrap.length - 1; i >= 0; i--) {\n let wrapper = doc.createElement(needsWrap[i]);\n while (wrap.firstChild)\n wrapper.appendChild(wrap.firstChild);\n wrap.appendChild(wrapper);\n wrappers++;\n }\n firstChild = wrap.firstChild;\n }\n if (firstChild && firstChild.nodeType == 1)\n firstChild.setAttribute(\"data-pm-slice\", `${openStart} ${openEnd}${wrappers ? ` -${wrappers}` : \"\"} ${JSON.stringify(context)}`);\n let text = view.someProp(\"clipboardTextSerializer\", f => f(slice, view)) ||\n slice.content.textBetween(0, slice.content.size, \"\\n\\n\");\n return { dom: wrap, text, slice };\n}\n// Read a slice of content from the clipboard (or drop data).\nfunction parseFromClipboard(view, text, html, plainText, $context) {\n let inCode = $context.parent.type.spec.code;\n let dom, slice;\n if (!html && !text)\n return null;\n let asText = text && (plainText || inCode || !html);\n if (asText) {\n view.someProp(\"transformPastedText\", f => { text = f(text, inCode || plainText, view); });\n if (inCode)\n return text ? new Slice(Fragment.from(view.state.schema.text(text.replace(/\\r\\n?/g, \"\\n\"))), 0, 0) : Slice.empty;\n let parsed = view.someProp(\"clipboardTextParser\", f => f(text, $context, plainText, view));\n if (parsed) {\n slice = parsed;\n }\n else {\n let marks = $context.marks();\n let { schema } = view.state, serializer = DOMSerializer.fromSchema(schema);\n dom = document.createElement(\"div\");\n text.split(/(?:\\r\\n?|\\n)+/).forEach(block => {\n let p = dom.appendChild(document.createElement(\"p\"));\n if (block)\n p.appendChild(serializer.serializeNode(schema.text(block, marks)));\n });\n }\n }\n else {\n view.someProp(\"transformPastedHTML\", f => { html = f(html, view); });\n dom = readHTML(html);\n if (webkit)\n restoreReplacedSpaces(dom);\n }\n let contextNode = dom && dom.querySelector(\"[data-pm-slice]\");\n let sliceData = contextNode && /^(\\d+) (\\d+)(?: -(\\d+))? (.*)/.exec(contextNode.getAttribute(\"data-pm-slice\") || \"\");\n if (sliceData && sliceData[3])\n for (let i = +sliceData[3]; i > 0; i--) {\n let child = dom.firstChild;\n while (child && child.nodeType != 1)\n child = child.nextSibling;\n if (!child)\n break;\n dom = child;\n }\n if (!slice) {\n let parser = view.someProp(\"clipboardParser\") || view.someProp(\"domParser\") || DOMParser.fromSchema(view.state.schema);\n slice = parser.parseSlice(dom, {\n preserveWhitespace: !!(asText || sliceData),\n context: $context,\n ruleFromNode(dom) {\n if (dom.nodeName == \"BR\" && !dom.nextSibling &&\n dom.parentNode && !inlineParents.test(dom.parentNode.nodeName))\n return { ignore: true };\n return null;\n }\n });\n }\n if (sliceData) {\n slice = addContext(closeSlice(slice, +sliceData[1], +sliceData[2]), sliceData[4]);\n }\n else { // HTML wasn't created by ProseMirror. Make sure top-level siblings are coherent\n slice = Slice.maxOpen(normalizeSiblings(slice.content, $context), true);\n if (slice.openStart || slice.openEnd) {\n let openStart = 0, openEnd = 0;\n for (let node = slice.content.firstChild; openStart < slice.openStart && !node.type.spec.isolating; openStart++, node = node.firstChild) { }\n for (let node = slice.content.lastChild; openEnd < slice.openEnd && !node.type.spec.isolating; openEnd++, node = node.lastChild) { }\n slice = closeSlice(slice, openStart, openEnd);\n }\n }\n view.someProp(\"transformPasted\", f => { slice = f(slice, view); });\n return slice;\n}\nconst inlineParents = /^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var)$/i;\n// Takes a slice parsed with parseSlice, which means there hasn't been\n// any content-expression checking done on the top nodes, tries to\n// find a parent node in the current context that might fit the nodes,\n// and if successful, rebuilds the slice so that it fits into that parent.\n//\n// This addresses the problem that Transform.replace expects a\n// coherent slice, and will fail to place a set of siblings that don't\n// fit anywhere in the schema.\nfunction normalizeSiblings(fragment, $context) {\n if (fragment.childCount < 2)\n return fragment;\n for (let d = $context.depth; d >= 0; d--) {\n let parent = $context.node(d);\n let match = parent.contentMatchAt($context.index(d));\n let lastWrap, result = [];\n fragment.forEach(node => {\n if (!result)\n return;\n let wrap = match.findWrapping(node.type), inLast;\n if (!wrap)\n return result = null;\n if (inLast = result.length && lastWrap.length && addToSibling(wrap, lastWrap, node, result[result.length - 1], 0)) {\n result[result.length - 1] = inLast;\n }\n else {\n if (result.length)\n result[result.length - 1] = closeRight(result[result.length - 1], lastWrap.length);\n let wrapped = withWrappers(node, wrap);\n result.push(wrapped);\n match = match.matchType(wrapped.type);\n lastWrap = wrap;\n }\n });\n if (result)\n return Fragment.from(result);\n }\n return fragment;\n}\nfunction withWrappers(node, wrap, from = 0) {\n for (let i = wrap.length - 1; i >= from; i--)\n node = wrap[i].create(null, Fragment.from(node));\n return node;\n}\n// Used to group adjacent nodes wrapped in similar parents by\n// normalizeSiblings into the same parent node\nfunction addToSibling(wrap, lastWrap, node, sibling, depth) {\n if (depth < wrap.length && depth < lastWrap.length && wrap[depth] == lastWrap[depth]) {\n let inner = addToSibling(wrap, lastWrap, node, sibling.lastChild, depth + 1);\n if (inner)\n return sibling.copy(sibling.content.replaceChild(sibling.childCount - 1, inner));\n let match = sibling.contentMatchAt(sibling.childCount);\n if (match.matchType(depth == wrap.length - 1 ? node.type : wrap[depth + 1]))\n return sibling.copy(sibling.content.append(Fragment.from(withWrappers(node, wrap, depth + 1))));\n }\n}\nfunction closeRight(node, depth) {\n if (depth == 0)\n return node;\n let fragment = node.content.replaceChild(node.childCount - 1, closeRight(node.lastChild, depth - 1));\n let fill = node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true);\n return node.copy(fragment.append(fill));\n}\nfunction closeRange(fragment, side, from, to, depth, openEnd) {\n let node = side < 0 ? fragment.firstChild : fragment.lastChild, inner = node.content;\n if (fragment.childCount > 1)\n openEnd = 0;\n if (depth < to - 1)\n inner = closeRange(inner, side, from, to, depth + 1, openEnd);\n if (depth >= from)\n inner = side < 0 ? node.contentMatchAt(0).fillBefore(inner, openEnd <= depth).append(inner)\n : inner.append(node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true));\n return fragment.replaceChild(side < 0 ? 0 : fragment.childCount - 1, node.copy(inner));\n}\nfunction closeSlice(slice, openStart, openEnd) {\n if (openStart < slice.openStart)\n slice = new Slice(closeRange(slice.content, -1, openStart, slice.openStart, 0, slice.openEnd), openStart, slice.openEnd);\n if (openEnd < slice.openEnd)\n slice = new Slice(closeRange(slice.content, 1, openEnd, slice.openEnd, 0, 0), slice.openStart, openEnd);\n return slice;\n}\n// Trick from jQuery -- some elements must be wrapped in other\n// elements for innerHTML to work. I.e. if you do `div.innerHTML =\n// \"<td>..</td>\"` the table cells are ignored.\nconst wrapMap = {\n thead: [\"table\"],\n tbody: [\"table\"],\n tfoot: [\"table\"],\n caption: [\"table\"],\n colgroup: [\"table\"],\n col: [\"table\", \"colgroup\"],\n tr: [\"table\", \"tbody\"],\n td: [\"table\", \"tbody\", \"tr\"],\n th: [\"table\", \"tbody\", \"tr\"]\n};\nlet _detachedDoc = null;\nfunction detachedDoc() {\n return _detachedDoc || (_detachedDoc = document.implementation.createHTMLDocument(\"title\"));\n}\nfunction readHTML(html) {\n let metas = /^(\\s*<meta [^>]*>)*/.exec(html);\n if (metas)\n html = html.slice(metas[0].length);\n let elt = detachedDoc().createElement(\"div\");\n let firstTag = /<([a-z][^>\\s]+)/i.exec(html), wrap;\n if (wrap = firstTag && wrapMap[firstTag[1].toLowerCase()])\n html = wrap.map(n => \"<\" + n + \">\").join(\"\") + html + wrap.map(n => \"</\" + n + \">\").reverse().join(\"\");\n elt.innerHTML = html;\n if (wrap)\n for (let i = 0; i < wrap.length; i++)\n elt = elt.querySelector(wrap[i]) || elt;\n return elt;\n}\n// Webkit browsers do some hard-to-predict replacement of regular\n// spaces with non-breaking spaces when putting content on the\n// clipboard. This tries to convert such non-breaking spaces (which\n// will be wrapped in a plain span on Chrome, a span with class\n// Apple-converted-space on Safari) back to regular spaces.\nfunction restoreReplacedSpaces(dom) {\n let nodes = dom.querySelectorAll(chrome ? \"span:not([class]):not([style])\" : \"span.Apple-converted-space\");\n for (let i = 0; i < nodes.length; i++) {\n let node = nodes[i];\n if (node.childNodes.length == 1 && node.textContent == \"\\u00a0\" && node.parentNode)\n node.parentNode.replaceChild(dom.ownerDocument.createTextNode(\" \"), node);\n }\n}\nfunction addContext(slice, context) {\n if (!slice.size)\n return slice;\n let schema = slice.content.firstChild.type.schema, array;\n try {\n array = JSON.parse(context);\n }\n catch (e) {\n return slice;\n }\n let { content, openStart, openEnd } = slice;\n for (let i = array.length - 2; i >= 0; i -= 2) {\n let type = schema.nodes[array[i]];\n if (!type || type.hasRequiredAttrs())\n break;\n content = Fragment.from(type.create(array[i + 1], content));\n openStart++;\n openEnd++;\n }\n return new Slice(content, openStart, openEnd);\n}\n\n// A collection of DOM events that occur within the editor, and callback functions\n// to invoke when the event fires.\nconst handlers = {};\nconst editHandlers = {};\nconst passiveHandlers = { touchstart: true, touchmove: true };\nclass InputState {\n constructor() {\n this.shiftKey = false;\n this.mouseDown = null;\n this.lastKeyCode = null;\n this.lastKeyCodeTime = 0;\n this.lastClick = { time: 0, x: 0, y: 0, type: \"\" };\n this.lastSelectionOrigin = null;\n this.lastSelectionTime = 0;\n this.lastIOSEnter = 0;\n this.lastIOSEnterFallbackTimeout = -1;\n this.lastFocus = 0;\n this.lastTouch = 0;\n this.lastAndroidDelete = 0;\n this.composing = false;\n this.compositionNode = null;\n this.composingTimeout = -1;\n this.compositionNodes = [];\n this.compositionEndedAt = -2e8;\n this.compositionID = 1;\n // Set to a composition ID when there are pending changes at compositionend\n this.compositionPendingChanges = 0;\n this.domChangeCount = 0;\n this.eventHandlers = Object.create(null);\n this.hideSelectionGuard = null;\n }\n}\nfunction initInput(view) {\n for (let event in handlers) {\n let handler = handlers[event];\n view.dom.addEventListener(event, view.input.eventHandlers[event] = (event) => {\n if (eventBelongsToView(view, event) && !runCustomHandler(view, event) &&\n (view.editable || !(event.type in editHandlers)))\n handler(view, event);\n }, passiveHandlers[event] ? { passive: true } : undefined);\n }\n // On Safari, for reasons beyond my understanding, adding an input\n // event handler makes an issue where the composition vanishes when\n // you press enter go away.\n if (safari)\n view.dom.addEventListener(\"input\", () => null);\n ensureListeners(view);\n}\nfunction setSelectionOrigin(view, origin) {\n view.input.lastSelectionOrigin = origin;\n view.input.lastSelectionTime = Date.now();\n}\nfunction destroyInput(view) {\n view.domObserver.stop();\n for (let type in view.input.eventHandlers)\n view.dom.removeEventListener(type, view.input.eventHandlers[type]);\n clearTimeout(view.input.composingTimeout);\n clearTimeout(view.input.lastIOSEnterFallbackTimeout);\n}\nfunction ensureListeners(view) {\n view.someProp(\"handleDOMEvents\", currentHandlers => {\n for (let type in currentHandlers)\n if (!view.input.eventHandlers[type])\n view.dom.addEventListener(type, view.input.eventHandlers[type] = event => runCustomHandler(view, event));\n });\n}\nfunction runCustomHandler(view, event) {\n return view.someProp(\"handleDOMEvents\", handlers => {\n let handler = handlers[event.type];\n return handler ? handler(view, event) || event.defaultPrevented : false;\n });\n}\nfunction eventBelongsToView(view, event) {\n if (!event.bubbles)\n return true;\n if (event.defaultPrevented)\n return false;\n for (let node = event.target; node != view.dom; node = node.parentNode)\n if (!node || node.nodeType == 11 ||\n (node.pmViewDesc && node.pmViewDesc.stopEvent(event)))\n return false;\n return true;\n}\nfunction dispatchEvent(view, event) {\n if (!runCustomHandler(view, event) && handlers[event.type] &&\n (view.editable || !(event.type in editHandlers)))\n handlers[event.type](view, event);\n}\neditHandlers.keydown = (view, _event) => {\n let event = _event;\n view.input.shiftKey = event.keyCode == 16 || event.shiftKey;\n if (inOrNearComposition(view, event))\n return;\n view.input.lastKeyCode = event.keyCode;\n view.input.lastKeyCodeTime = Date.now();\n // Suppress enter key events on Chrome Android, because those tend\n // to be part of a confused sequence of composition events fired,\n // and handling them eagerly tends to corrupt the input.\n if (android && chrome && event.keyCode == 13)\n return;\n if (event.keyCode != 229)\n view.domObserver.forceFlush();\n // On iOS, if we preventDefault enter key presses, the virtual\n // keyboard gets confused. So the hack here is to set a flag that\n // makes the DOM change code recognize that what just happens should\n // be replaced by whatever the Enter key handlers do.\n if (ios && event.keyCode == 13 && !event.ctrlKey && !event.altKey && !event.metaKey) {\n let now = Date.now();\n view.input.lastIOSEnter = now;\n view.input.lastIOSEnterFallbackTimeout = setTimeout(() => {\n if (view.input.lastIOSEnter == now) {\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\")));\n view.input.lastIOSEnter = 0;\n }\n }, 200);\n }\n else if (view.someProp(\"handleKeyDown\", f => f(view, event)) || captureKeyDown(view, event)) {\n event.preventDefault();\n }\n else {\n setSelectionOrigin(view, \"key\");\n }\n};\neditHandlers.keyup = (view, event) => {\n if (event.keyCode == 16)\n view.input.shiftKey = false;\n};\neditHandlers.keypress = (view, _event) => {\n let event = _event;\n if (inOrNearComposition(view, event) || !event.charCode ||\n event.ctrlKey && !event.altKey || mac && event.metaKey)\n return;\n if (view.someProp(\"handleKeyPress\", f => f(view, event))) {\n event.preventDefault();\n return;\n }\n let sel = view.state.selection;\n if (!(sel instanceof TextSelection) || !sel.$from.sameParent(sel.$to)) {\n let text = String.fromCharCode(event.charCode);\n if (!/[\\r\\n]/.test(text) && !view.someProp(\"handleTextInput\", f => f(view, sel.$from.pos, sel.$to.pos, text)))\n view.dispatch(view.state.tr.insertText(text).scrollIntoView());\n event.preventDefault();\n }\n};\nfunction eventCoords(event) { return { left: event.clientX, top: event.clientY }; }\nfunction isNear(event, click) {\n let dx = click.x - event.clientX, dy = click.y - event.clientY;\n return dx * dx + dy * dy < 100;\n}\nfunction runHandlerOnContext(view, propName, pos, inside, event) {\n if (inside == -1)\n return false;\n let $pos = view.state.doc.resolve(inside);\n for (let i = $pos.depth + 1; i > 0; i--) {\n if (view.someProp(propName, f => i > $pos.depth ? f(view, pos, $pos.nodeAfter, $pos.before(i), event, true)\n : f(view, pos, $pos.node(i), $pos.before(i), event, false)))\n return true;\n }\n return false;\n}\nfunction updateSelection(view, selection, origin) {\n if (!view.focused)\n view.focus();\n if (view.state.selection.eq(selection))\n return;\n let tr = view.state.tr.setSelection(selection);\n if (origin == \"pointer\")\n tr.setMeta(\"pointer\", true);\n view.dispatch(tr);\n}\nfunction selectClickedLeaf(view, inside) {\n if (inside == -1)\n return false;\n let $pos = view.state.doc.resolve(inside), node = $pos.nodeAfter;\n if (node && node.isAtom && NodeSelection.isSelectable(node)) {\n updateSelection(view, new NodeSelection($pos), \"pointer\");\n return true;\n }\n return false;\n}\nfunction selectClickedNode(view, inside) {\n if (inside == -1)\n return false;\n let sel = view.state.selection, selectedNode, selectAt;\n if (sel instanceof NodeSelection)\n selectedNode = sel.node;\n let $pos = view.state.doc.resolve(inside);\n for (let i = $pos.depth + 1; i > 0; i--) {\n let node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);\n if (NodeSelection.isSelectable(node)) {\n if (selectedNode && sel.$from.depth > 0 &&\n i >= sel.$from.depth && $pos.before(sel.$from.depth + 1) == sel.$from.pos)\n selectAt = $pos.before(sel.$from.depth);\n else\n selectAt = $pos.before(i);\n break;\n }\n }\n if (selectAt != null) {\n updateSelection(view, NodeSelection.create(view.state.doc, selectAt), \"pointer\");\n return true;\n }\n else {\n return false;\n }\n}\nfunction handleSingleClick(view, pos, inside, event, selectNode) {\n return runHandlerOnContext(view, \"handleClickOn\", pos, inside, event) ||\n view.someProp(\"handleClick\", f => f(view, pos, event)) ||\n (selectNode ? selectClickedNode(view, inside) : selectClickedLeaf(view, inside));\n}\nfunction handleDoubleClick(view, pos, inside, event) {\n return runHandlerOnContext(view, \"handleDoubleClickOn\", pos, inside, event) ||\n view.someProp(\"handleDoubleClick\", f => f(view, pos, event));\n}\nfunction handleTripleClick(view, pos, inside, event) {\n return runHandlerOnContext(view, \"handleTripleClickOn\", pos, inside, event) ||\n view.someProp(\"handleTripleClick\", f => f(view, pos, event)) ||\n defaultTripleClick(view, inside, event);\n}\nfunction defaultTripleClick(view, inside, event) {\n if (event.button != 0)\n return false;\n let doc = view.state.doc;\n if (inside == -1) {\n if (doc.inlineContent) {\n updateSelection(view, TextSelection.create(doc, 0, doc.content.size), \"pointer\");\n return true;\n }\n return false;\n }\n let $pos = doc.resolve(inside);\n for (let i = $pos.depth + 1; i > 0; i--) {\n let node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);\n let nodePos = $pos.before(i);\n if (node.inlineContent)\n updateSelection(view, TextSelection.create(doc, nodePos + 1, nodePos + 1 + node.content.size), \"pointer\");\n else if (NodeSelection.isSelectable(node))\n updateSelection(view, NodeSelection.create(doc, nodePos), \"pointer\");\n else\n continue;\n return true;\n }\n}\nfunction forceDOMFlush(view) {\n return endComposition(view);\n}\nconst selectNodeModifier = mac ? \"metaKey\" : \"ctrlKey\";\nhandlers.mousedown = (view, _event) => {\n let event = _event;\n view.input.shiftKey = event.shiftKey;\n let flushed = forceDOMFlush(view);\n let now = Date.now(), type = \"singleClick\";\n if (now - view.input.lastClick.time < 500 && isNear(event, view.input.lastClick) && !event[selectNodeModifier]) {\n if (view.input.lastClick.type == \"singleClick\")\n type = \"doubleClick\";\n else if (view.input.lastClick.type == \"doubleClick\")\n type = \"tripleClick\";\n }\n view.input.lastClick = { time: now, x: event.clientX, y: event.clientY, type };\n let pos = view.posAtCoords(eventCoords(event));\n if (!pos)\n return;\n if (type == \"singleClick\") {\n if (view.input.mouseDown)\n view.input.mouseDown.done();\n view.input.mouseDown = new MouseDown(view, pos, event, !!flushed);\n }\n else if ((type == \"doubleClick\" ? handleDoubleClick : handleTripleClick)(view, pos.pos, pos.inside, event)) {\n event.preventDefault();\n }\n else {\n setSelectionOrigin(view, \"pointer\");\n }\n};\nclass MouseDown {\n constructor(view, pos, event, flushed) {\n this.view = view;\n this.pos = pos;\n this.event = event;\n this.flushed = flushed;\n this.delayedSelectionSync = false;\n this.mightDrag = null;\n this.startDoc = view.state.doc;\n this.selectNode = !!event[selectNodeModifier];\n this.allowDefault = event.shiftKey;\n let targetNode, targetPos;\n if (pos.inside > -1) {\n targetNode = view.state.doc.nodeAt(pos.inside);\n targetPos = pos.inside;\n }\n else {\n let $pos = view.state.doc.resolve(pos.pos);\n targetNode = $pos.parent;\n targetPos = $pos.depth ? $pos.before() : 0;\n }\n const target = flushed ? null : event.target;\n const targetDesc = target ? view.docView.nearestDesc(target, true) : null;\n this.target = targetDesc && targetDesc.dom.nodeType == 1 ? targetDesc.dom : null;\n let { selection } = view.state;\n if (event.button == 0 &&\n targetNode.type.spec.draggable && targetNode.type.spec.selectable !== false ||\n selection instanceof NodeSelection && selection.from <= targetPos && selection.to > targetPos)\n this.mightDrag = {\n node: targetNode,\n pos: targetPos,\n addAttr: !!(this.target && !this.target.draggable),\n setUneditable: !!(this.target && gecko && !this.target.hasAttribute(\"contentEditable\"))\n };\n if (this.target && this.mightDrag && (this.mightDrag.addAttr || this.mightDrag.setUneditable)) {\n this.view.domObserver.stop();\n if (this.mightDrag.addAttr)\n this.target.draggable = true;\n if (this.mightDrag.setUneditable)\n setTimeout(() => {\n if (this.view.input.mouseDown == this)\n this.target.setAttribute(\"contentEditable\", \"false\");\n }, 20);\n this.view.domObserver.start();\n }\n view.root.addEventListener(\"mouseup\", this.up = this.up.bind(this));\n view.root.addEventListener(\"mousemove\", this.move = this.move.bind(this));\n setSelectionOrigin(view, \"pointer\");\n }\n done() {\n this.view.root.removeEventListener(\"mouseup\", this.up);\n this.view.root.removeEventListener(\"mousemove\", this.move);\n if (this.mightDrag && this.target) {\n this.view.domObserver.stop();\n if (this.mightDrag.addAttr)\n this.target.removeAttribute(\"draggable\");\n if (this.mightDrag.setUneditable)\n this.target.removeAttribute(\"contentEditable\");\n this.view.domObserver.start();\n }\n if (this.delayedSelectionSync)\n setTimeout(() => selectionToDOM(this.view));\n this.view.input.mouseDown = null;\n }\n up(event) {\n this.done();\n if (!this.view.dom.contains(event.target))\n return;\n let pos = this.pos;\n if (this.view.state.doc != this.startDoc)\n pos = this.view.posAtCoords(eventCoords(event));\n this.updateAllowDefault(event);\n if (this.allowDefault || !pos) {\n setSelectionOrigin(this.view, \"pointer\");\n }\n else if (handleSingleClick(this.view, pos.pos, pos.inside, event, this.selectNode)) {\n event.preventDefault();\n }\n else if (event.button == 0 &&\n (this.flushed ||\n // Safari ignores clicks on draggable elements\n (safari && this.mightDrag && !this.mightDrag.node.isAtom) ||\n // Chrome will sometimes treat a node selection as a\n // cursor, but still report that the node is selected\n // when asked through getSelection. You'll then get a\n // situation where clicking at the point where that\n // (hidden) cursor is doesn't change the selection, and\n // thus doesn't get a reaction from ProseMirror. This\n // works around that.\n (chrome && !this.view.state.selection.visible &&\n Math.min(Math.abs(pos.pos - this.view.state.selection.from), Math.abs(pos.pos - this.view.state.selection.to)) <= 2))) {\n updateSelection(this.view, Selection.near(this.view.state.doc.resolve(pos.pos)), \"pointer\");\n event.preventDefault();\n }\n else {\n setSelectionOrigin(this.view, \"pointer\");\n }\n }\n move(event) {\n this.updateAllowDefault(event);\n setSelectionOrigin(this.view, \"pointer\");\n if (event.buttons == 0)\n this.done();\n }\n updateAllowDefault(event) {\n if (!this.allowDefault && (Math.abs(this.event.x - event.clientX) > 4 ||\n Math.abs(this.event.y - event.clientY) > 4))\n this.allowDefault = true;\n }\n}\nhandlers.touchstart = view => {\n view.input.lastTouch = Date.now();\n forceDOMFlush(view);\n setSelectionOrigin(view, \"pointer\");\n};\nhandlers.touchmove = view => {\n view.input.lastTouch = Date.now();\n setSelectionOrigin(view, \"pointer\");\n};\nhandlers.contextmenu = view => forceDOMFlush(view);\nfunction inOrNearComposition(view, event) {\n if (view.composing)\n return true;\n // See https://www.stum.de/2016/06/24/handling-ime-events-in-javascript/.\n // On Japanese input method editors (IMEs), the Enter key is used to confirm character\n // selection. On Safari, when Enter is pressed, compositionend and keydown events are\n // emitted. The keydown event triggers newline insertion, which we don't want.\n // This method returns true if the keydown event should be ignored.\n // We only ignore it once, as pressing Enter a second time *should* insert a newline.\n // Furthermore, the keydown event timestamp must be close to the compositionEndedAt timestamp.\n // This guards against the case where compositionend is triggered without the keyboard\n // (e.g. character confirmation may be done with the mouse), and keydown is triggered\n // afterwards- we wouldn't want to ignore the keydown event in this case.\n if (safari && Math.abs(event.timeStamp - view.input.compositionEndedAt) < 500) {\n view.input.compositionEndedAt = -2e8;\n return true;\n }\n return false;\n}\n// Drop active composition after 5 seconds of inactivity on Android\nconst timeoutComposition = android ? 5000 : -1;\neditHandlers.compositionstart = editHandlers.compositionupdate = view => {\n if (!view.composing) {\n view.domObserver.flush();\n let { state } = view, $pos = state.selection.$to;\n if (state.selection instanceof TextSelection &&\n (state.storedMarks ||\n (!$pos.textOffset && $pos.parentOffset && $pos.nodeBefore.marks.some(m => m.type.spec.inclusive === false)))) {\n // Need to wrap the cursor in mark nodes different from the ones in the DOM context\n view.markCursor = view.state.storedMarks || $pos.marks();\n endComposition(view, true);\n view.markCursor = null;\n }\n else {\n endComposition(view, !state.selection.empty);\n // In firefox, if the cursor is after but outside a marked node,\n // the inserted text won't inherit the marks. So this moves it\n // inside if necessary.\n if (gecko && state.selection.empty && $pos.parentOffset && !$pos.textOffset && $pos.nodeBefore.marks.length) {\n let sel = view.domSelectionRange();\n for (let node = sel.focusNode, offset = sel.focusOffset; node && node.nodeType == 1 && offset != 0;) {\n let before = offset < 0 ? node.lastChild : node.childNodes[offset - 1];\n if (!before)\n break;\n if (before.nodeType == 3) {\n let sel = view.domSelection();\n if (sel)\n sel.collapse(before, before.nodeValue.length);\n break;\n }\n else {\n node = before;\n offset = -1;\n }\n }\n }\n }\n view.input.composing = true;\n }\n scheduleComposeEnd(view, timeoutComposition);\n};\neditHandlers.compositionend = (view, event) => {\n if (view.composing) {\n view.input.composing = false;\n view.input.compositionEndedAt = event.timeStamp;\n view.input.compositionPendingChanges = view.domObserver.pendingRecords().length ? view.input.compositionID : 0;\n view.input.compositionNode = null;\n if (view.input.compositionPendingChanges)\n Promise.resolve().then(() => view.domObserver.flush());\n view.input.compositionID++;\n scheduleComposeEnd(view, 20);\n }\n};\nfunction scheduleComposeEnd(view, delay) {\n clearTimeout(view.input.composingTimeout);\n if (delay > -1)\n view.input.composingTimeout = setTimeout(() => endComposition(view), delay);\n}\nfunction clearComposition(view) {\n if (view.composing) {\n view.input.composing = false;\n view.input.compositionEndedAt = timestampFromCustomEvent();\n }\n while (view.input.compositionNodes.length > 0)\n view.input.compositionNodes.pop().markParentsDirty();\n}\nfunction findCompositionNode(view) {\n let sel = view.domSelectionRange();\n if (!sel.focusNode)\n return null;\n let textBefore = textNodeBefore$1(sel.focusNode, sel.focusOffset);\n let textAfter = textNodeAfter$1(sel.focusNode, sel.focusOffset);\n if (textBefore && textAfter && textBefore != textAfter) {\n let descAfter = textAfter.pmViewDesc, lastChanged = view.domObserver.lastChangedTextNode;\n if (textBefore == lastChanged || textAfter == lastChanged)\n return lastChanged;\n if (!descAfter || !descAfter.isText(textAfter.nodeValue)) {\n return textAfter;\n }\n else if (view.input.compositionNode == textAfter) {\n let descBefore = textBefore.pmViewDesc;\n if (!(!descBefore || !descBefore.isText(textBefore.nodeValue)))\n return textAfter;\n }\n }\n return textBefore || textAfter;\n}\nfunction timestampFromCustomEvent() {\n let event = document.createEvent(\"Event\");\n event.initEvent(\"event\", true, true);\n return event.timeStamp;\n}\n/**\n@internal\n*/\nfunction endComposition(view, restarting = false) {\n if (android && view.domObserver.flushingSoon >= 0)\n return;\n view.domObserver.forceFlush();\n clearComposition(view);\n if (restarting || view.docView && view.docView.dirty) {\n let sel = selectionFromDOM(view);\n if (sel && !sel.eq(view.state.selection))\n view.dispatch(view.state.tr.setSelection(sel));\n else if ((view.markCursor || restarting) && !view.state.selection.empty)\n view.dispatch(view.state.tr.deleteSelection());\n else\n view.updateState(view.state);\n return true;\n }\n return false;\n}\nfunction captureCopy(view, dom) {\n // The extra wrapper is somehow necessary on IE/Edge to prevent the\n // content from being mangled when it is put onto the clipboard\n if (!view.dom.parentNode)\n return;\n let wrap = view.dom.parentNode.appendChild(document.createElement(\"div\"));\n wrap.appendChild(dom);\n wrap.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n let sel = getSelection(), range = document.createRange();\n range.selectNodeContents(dom);\n // Done because IE will fire a selectionchange moving the selection\n // to its start when removeAllRanges is called and the editor still\n // has focus (which will mess up the editor's selection state).\n view.dom.blur();\n sel.removeAllRanges();\n sel.addRange(range);\n setTimeout(() => {\n if (wrap.parentNode)\n wrap.parentNode.removeChild(wrap);\n view.focus();\n }, 50);\n}\n// This is very crude, but unfortunately both these browsers _pretend_\n// that they have a clipboard API—all the objects and methods are\n// there, they just don't work, and they are hard to test.\nconst brokenClipboardAPI = (ie && ie_version < 15) ||\n (ios && webkit_version < 604);\nhandlers.copy = editHandlers.cut = (view, _event) => {\n let event = _event;\n let sel = view.state.selection, cut = event.type == \"cut\";\n if (sel.empty)\n return;\n // IE and Edge's clipboard interface is completely broken\n let data = brokenClipboardAPI ? null : event.clipboardData;\n let slice = sel.content(), { dom, text } = serializeForClipboard(view, slice);\n if (data) {\n event.preventDefault();\n data.clearData();\n data.setData(\"text/html\", dom.innerHTML);\n data.setData(\"text/plain\", text);\n }\n else {\n captureCopy(view, dom);\n }\n if (cut)\n view.dispatch(view.state.tr.deleteSelection().scrollIntoView().setMeta(\"uiEvent\", \"cut\"));\n};\nfunction sliceSingleNode(slice) {\n return slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1 ? slice.content.firstChild : null;\n}\nfunction capturePaste(view, event) {\n if (!view.dom.parentNode)\n return;\n let plainText = view.input.shiftKey || view.state.selection.$from.parent.type.spec.code;\n let target = view.dom.parentNode.appendChild(document.createElement(plainText ? \"textarea\" : \"div\"));\n if (!plainText)\n target.contentEditable = \"true\";\n target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n target.focus();\n let plain = view.input.shiftKey && view.input.lastKeyCode != 45;\n setTimeout(() => {\n view.focus();\n if (target.parentNode)\n target.parentNode.removeChild(target);\n if (plainText)\n doPaste(view, target.value, null, plain, event);\n else\n doPaste(view, target.textContent, target.innerHTML, plain, event);\n }, 50);\n}\nfunction doPaste(view, text, html, preferPlain, event) {\n let slice = parseFromClipboard(view, text, html, preferPlain, view.state.selection.$from);\n if (view.someProp(\"handlePaste\", f => f(view, event, slice || Slice.empty)))\n return true;\n if (!slice)\n return false;\n let singleNode = sliceSingleNode(slice);\n let tr = singleNode\n ? view.state.tr.replaceSelectionWith(singleNode, preferPlain)\n : view.state.tr.replaceSelection(slice);\n view.dispatch(tr.scrollIntoView().setMeta(\"paste\", true).setMeta(\"uiEvent\", \"paste\"));\n return true;\n}\nfunction getText(clipboardData) {\n let text = clipboardData.getData(\"text/plain\") || clipboardData.getData(\"Text\");\n if (text)\n return text;\n let uris = clipboardData.getData(\"text/uri-list\");\n return uris ? uris.replace(/\\r?\\n/g, \" \") : \"\";\n}\neditHandlers.paste = (view, _event) => {\n let event = _event;\n // Handling paste from JavaScript during composition is very poorly\n // handled by browsers, so as a dodgy but preferable kludge, we just\n // let the browser do its native thing there, except on Android,\n // where the editor is almost always composing.\n if (view.composing && !android)\n return;\n let data = brokenClipboardAPI ? null : event.clipboardData;\n let plain = view.input.shiftKey && view.input.lastKeyCode != 45;\n if (data && doPaste(view, getText(data), data.getData(\"text/html\"), plain, event))\n event.preventDefault();\n else\n capturePaste(view, event);\n};\nclass Dragging {\n constructor(slice, move, node) {\n this.slice = slice;\n this.move = move;\n this.node = node;\n }\n}\nconst dragCopyModifier = mac ? \"altKey\" : \"ctrlKey\";\nhandlers.dragstart = (view, _event) => {\n let event = _event;\n let mouseDown = view.input.mouseDown;\n if (mouseDown)\n mouseDown.done();\n if (!event.dataTransfer)\n return;\n let sel = view.state.selection;\n let pos = sel.empty ? null : view.posAtCoords(eventCoords(event));\n let node;\n if (pos && pos.pos >= sel.from && pos.pos <= (sel instanceof NodeSelection ? sel.to - 1 : sel.to)) ;\n else if (mouseDown && mouseDown.mightDrag) {\n node = NodeSelection.create(view.state.doc, mouseDown.mightDrag.pos);\n }\n else if (event.target && event.target.nodeType == 1) {\n let desc = view.docView.nearestDesc(event.target, true);\n if (desc && desc.node.type.spec.draggable && desc != view.docView)\n node = NodeSelection.create(view.state.doc, desc.posBefore);\n }\n let draggedSlice = (node || view.state.selection).content();\n let { dom, text, slice } = serializeForClipboard(view, draggedSlice);\n // Pre-120 Chrome versions clear files when calling `clearData` (#1472)\n if (!event.dataTransfer.files.length || !chrome || chrome_version > 120)\n event.dataTransfer.clearData();\n event.dataTransfer.setData(brokenClipboardAPI ? \"Text\" : \"text/html\", dom.innerHTML);\n // See https://github.com/ProseMirror/prosemirror/issues/1156\n event.dataTransfer.effectAllowed = \"copyMove\";\n if (!brokenClipboardAPI)\n event.dataTransfer.setData(\"text/plain\", text);\n view.dragging = new Dragging(slice, !event[dragCopyModifier], node);\n};\nhandlers.dragend = view => {\n let dragging = view.dragging;\n window.setTimeout(() => {\n if (view.dragging == dragging)\n view.dragging = null;\n }, 50);\n};\neditHandlers.dragover = editHandlers.dragenter = (_, e) => e.preventDefault();\neditHandlers.drop = (view, _event) => {\n let event = _event;\n let dragging = view.dragging;\n view.dragging = null;\n if (!event.dataTransfer)\n return;\n let eventPos = view.posAtCoords(eventCoords(event));\n if (!eventPos)\n return;\n let $mouse = view.state.doc.resolve(eventPos.pos);\n let slice = dragging && dragging.slice;\n if (slice) {\n view.someProp(\"transformPasted\", f => { slice = f(slice, view); });\n }\n else {\n slice = parseFromClipboard(view, getText(event.dataTransfer), brokenClipboardAPI ? null : event.dataTransfer.getData(\"text/html\"), false, $mouse);\n }\n let move = !!(dragging && !event[dragCopyModifier]);\n if (view.someProp(\"handleDrop\", f => f(view, event, slice || Slice.empty, move))) {\n event.preventDefault();\n return;\n }\n if (!slice)\n return;\n event.preventDefault();\n let insertPos = slice ? dropPoint(view.state.doc, $mouse.pos, slice) : $mouse.pos;\n if (insertPos == null)\n insertPos = $mouse.pos;\n let tr = view.state.tr;\n if (move) {\n let { node } = dragging;\n if (node)\n node.replace(tr);\n else\n tr.deleteSelection();\n }\n let pos = tr.mapping.map(insertPos);\n let isNode = slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1;\n let beforeInsert = tr.doc;\n if (isNode)\n tr.replaceRangeWith(pos, pos, slice.content.firstChild);\n else\n tr.replaceRange(pos, pos, slice);\n if (tr.doc.eq(beforeInsert))\n return;\n let $pos = tr.doc.resolve(pos);\n if (isNode && NodeSelection.isSelectable(slice.content.firstChild) &&\n $pos.nodeAfter && $pos.nodeAfter.sameMarkup(slice.content.firstChild)) {\n tr.setSelection(new NodeSelection($pos));\n }\n else {\n let end = tr.mapping.map(insertPos);\n tr.mapping.maps[tr.mapping.maps.length - 1].forEach((_from, _to, _newFrom, newTo) => end = newTo);\n tr.setSelection(selectionBetween(view, $pos, tr.doc.resolve(end)));\n }\n view.focus();\n view.dispatch(tr.setMeta(\"uiEvent\", \"drop\"));\n};\nhandlers.focus = view => {\n view.input.lastFocus = Date.now();\n if (!view.focused) {\n view.domObserver.stop();\n view.dom.classList.add(\"ProseMirror-focused\");\n view.domObserver.start();\n view.focused = true;\n setTimeout(() => {\n if (view.docView && view.hasFocus() && !view.domObserver.currentSelection.eq(view.domSelectionRange()))\n selectionToDOM(view);\n }, 20);\n }\n};\nhandlers.blur = (view, _event) => {\n let event = _event;\n if (view.focused) {\n view.domObserver.stop();\n view.dom.classList.remove(\"ProseMirror-focused\");\n view.domObserver.start();\n if (event.relatedTarget && view.dom.contains(event.relatedTarget))\n view.domObserver.currentSelection.clear();\n view.focused = false;\n }\n};\nhandlers.beforeinput = (view, _event) => {\n let event = _event;\n // We should probably do more with beforeinput events, but support\n // is so spotty that I'm still waiting to see where they are going.\n // Very specific hack to deal with backspace sometimes failing on\n // Chrome Android when after an uneditable node.\n if (chrome && android && event.inputType == \"deleteContentBackward\") {\n view.domObserver.flushSoon();\n let { domChangeCount } = view.input;\n setTimeout(() => {\n if (view.input.domChangeCount != domChangeCount)\n return; // Event already had some effect\n // This bug tends to close the virtual keyboard, so we refocus\n view.dom.blur();\n view.focus();\n if (view.someProp(\"handleKeyDown\", f => f(view, keyEvent(8, \"Backspace\"))))\n return;\n let { $cursor } = view.state.selection;\n // Crude approximation of backspace behavior when no command handled it\n if ($cursor && $cursor.pos > 0)\n view.dispatch(view.state.tr.delete($cursor.pos - 1, $cursor.pos).scrollIntoView());\n }, 50);\n }\n};\n// Make sure all handlers get registered\nfor (let prop in editHandlers)\n handlers[prop] = editHandlers[prop];\n\nfunction compareObjs(a, b) {\n if (a == b)\n return true;\n for (let p in a)\n if (a[p] !== b[p])\n return false;\n for (let p in b)\n if (!(p in a))\n return false;\n return true;\n}\nclass WidgetType {\n constructor(toDOM, spec) {\n this.toDOM = toDOM;\n this.spec = spec || noSpec;\n this.side = this.spec.side || 0;\n }\n map(mapping, span, offset, oldOffset) {\n let { pos, deleted } = mapping.mapResult(span.from + oldOffset, this.side < 0 ? -1 : 1);\n return deleted ? null : new Decoration(pos - offset, pos - offset, this);\n }\n valid() { return true; }\n eq(other) {\n return this == other ||\n (other instanceof WidgetType &&\n (this.spec.key && this.spec.key == other.spec.key ||\n this.toDOM == other.toDOM && compareObjs(this.spec, other.spec)));\n }\n destroy(node) {\n if (this.spec.destroy)\n this.spec.destroy(node);\n }\n}\nclass InlineType {\n constructor(attrs, spec) {\n this.attrs = attrs;\n this.spec = spec || noSpec;\n }\n map(mapping, span, offset, oldOffset) {\n let from = mapping.map(span.from + oldOffset, this.spec.inclusiveStart ? -1 : 1) - offset;\n let to = mapping.map(span.to + oldOffset, this.spec.inclusiveEnd ? 1 : -1) - offset;\n return from >= to ? null : new Decoration(from, to, this);\n }\n valid(_, span) { return span.from < span.to; }\n eq(other) {\n return this == other ||\n (other instanceof InlineType && compareObjs(this.attrs, other.attrs) &&\n compareObjs(this.spec, other.spec));\n }\n static is(span) { return span.type instanceof InlineType; }\n destroy() { }\n}\nclass NodeType {\n constructor(attrs, spec) {\n this.attrs = attrs;\n this.spec = spec || noSpec;\n }\n map(mapping, span, offset, oldOffset) {\n let from = mapping.mapResult(span.from + oldOffset, 1);\n if (from.deleted)\n return null;\n let to = mapping.mapResult(span.to + oldOffset, -1);\n if (to.deleted || to.pos <= from.pos)\n return null;\n return new Decoration(from.pos - offset, to.pos - offset, this);\n }\n valid(node, span) {\n let { index, offset } = node.content.findIndex(span.from), child;\n return offset == span.from && !(child = node.child(index)).isText && offset + child.nodeSize == span.to;\n }\n eq(other) {\n return this == other ||\n (other instanceof NodeType && compareObjs(this.attrs, other.attrs) &&\n compareObjs(this.spec, other.spec));\n }\n destroy() { }\n}\n/**\nDecoration objects can be provided to the view through the\n[`decorations` prop](https://prosemirror.net/docs/ref/#view.EditorProps.decorations). They come in\nseveral variants—see the static members of this class for details.\n*/\nclass Decoration {\n /**\n @internal\n */\n constructor(\n /**\n The start position of the decoration.\n */\n from, \n /**\n The end position. Will be the same as `from` for [widget\n decorations](https://prosemirror.net/docs/ref/#view.Decoration^widget).\n */\n to, \n /**\n @internal\n */\n type) {\n this.from = from;\n this.to = to;\n this.type = type;\n }\n /**\n @internal\n */\n copy(from, to) {\n return new Decoration(from, to, this.type);\n }\n /**\n @internal\n */\n eq(other, offset = 0) {\n return this.type.eq(other.type) && this.from + offset == other.from && this.to + offset == other.to;\n }\n /**\n @internal\n */\n map(mapping, offset, oldOffset) {\n return this.type.map(mapping, this, offset, oldOffset);\n }\n /**\n Creates a widget decoration, which is a DOM node that's shown in\n the document at the given position. It is recommended that you\n delay rendering the widget by passing a function that will be\n called when the widget is actually drawn in a view, but you can\n also directly pass a DOM node. `getPos` can be used to find the\n widget's current document position.\n */\n static widget(pos, toDOM, spec) {\n return new Decoration(pos, pos, new WidgetType(toDOM, spec));\n }\n /**\n Creates an inline decoration, which adds the given attributes to\n each inline node between `from` and `to`.\n */\n static inline(from, to, attrs, spec) {\n return new Decoration(from, to, new InlineType(attrs, spec));\n }\n /**\n Creates a node decoration. `from` and `to` should point precisely\n before and after a node in the document. That node, and only that\n node, will receive the given attributes.\n */\n static node(from, to, attrs, spec) {\n return new Decoration(from, to, new NodeType(attrs, spec));\n }\n /**\n The spec provided when creating this decoration. Can be useful\n if you've stored extra information in that object.\n */\n get spec() { return this.type.spec; }\n /**\n @internal\n */\n get inline() { return this.type instanceof InlineType; }\n /**\n @internal\n */\n get widget() { return this.type instanceof WidgetType; }\n}\nconst none = [], noSpec = {};\n/**\nA collection of [decorations](https://prosemirror.net/docs/ref/#view.Decoration), organized in such\na way that the drawing algorithm can efficiently use and compare\nthem. This is a persistent data structure—it is not modified,\nupdates create a new value.\n*/\nclass DecorationSet {\n /**\n @internal\n */\n constructor(local, children) {\n this.local = local.length ? local : none;\n this.children = children.length ? children : none;\n }\n /**\n Create a set of decorations, using the structure of the given\n document. This will consume (modify) the `decorations` array, so\n you must make a copy if you want need to preserve that.\n */\n static create(doc, decorations) {\n return decorations.length ? buildTree(decorations, doc, 0, noSpec) : empty;\n }\n /**\n Find all decorations in this set which touch the given range\n (including decorations that start or end directly at the\n boundaries) and match the given predicate on their spec. When\n `start` and `end` are omitted, all decorations in the set are\n considered. When `predicate` isn't given, all decorations are\n assumed to match.\n */\n find(start, end, predicate) {\n let result = [];\n this.findInner(start == null ? 0 : start, end == null ? 1e9 : end, result, 0, predicate);\n return result;\n }\n findInner(start, end, result, offset, predicate) {\n for (let i = 0; i < this.local.length; i++) {\n let span = this.local[i];\n if (span.from <= end && span.to >= start && (!predicate || predicate(span.spec)))\n result.push(span.copy(span.from + offset, span.to + offset));\n }\n for (let i = 0; i < this.children.length; i += 3) {\n if (this.children[i] < end && this.children[i + 1] > start) {\n let childOff = this.children[i] + 1;\n this.children[i + 2].findInner(start - childOff, end - childOff, result, offset + childOff, predicate);\n }\n }\n }\n /**\n Map the set of decorations in response to a change in the\n document.\n */\n map(mapping, doc, options) {\n if (this == empty || mapping.maps.length == 0)\n return this;\n return this.mapInner(mapping, doc, 0, 0, options || noSpec);\n }\n /**\n @internal\n */\n mapInner(mapping, node, offset, oldOffset, options) {\n let newLocal;\n for (let i = 0; i < this.local.length; i++) {\n let mapped = this.local[i].map(mapping, offset, oldOffset);\n if (mapped && mapped.type.valid(node, mapped))\n (newLocal || (newLocal = [])).push(mapped);\n else if (options.onRemove)\n options.onRemove(this.local[i].spec);\n }\n if (this.children.length)\n return mapChildren(this.children, newLocal || [], mapping, node, offset, oldOffset, options);\n else\n return newLocal ? new DecorationSet(newLocal.sort(byPos), none) : empty;\n }\n /**\n Add the given array of decorations to the ones in the set,\n producing a new set. Consumes the `decorations` array. Needs\n access to the current document to create the appropriate tree\n structure.\n */\n add(doc, decorations) {\n if (!decorations.length)\n return this;\n if (this == empty)\n return DecorationSet.create(doc, decorations);\n return this.addInner(doc, decorations, 0);\n }\n addInner(doc, decorations, offset) {\n let children, childIndex = 0;\n doc.forEach((childNode, childOffset) => {\n let baseOffset = childOffset + offset, found;\n if (!(found = takeSpansForNode(decorations, childNode, baseOffset)))\n return;\n if (!children)\n children = this.children.slice();\n while (childIndex < children.length && children[childIndex] < childOffset)\n childIndex += 3;\n if (children[childIndex] == childOffset)\n children[childIndex + 2] = children[childIndex + 2].addInner(childNode, found, baseOffset + 1);\n else\n children.splice(childIndex, 0, childOffset, childOffset + childNode.nodeSize, buildTree(found, childNode, baseOffset + 1, noSpec));\n childIndex += 3;\n });\n let local = moveSpans(childIndex ? withoutNulls(decorations) : decorations, -offset);\n for (let i = 0; i < local.length; i++)\n if (!local[i].type.valid(doc, local[i]))\n local.splice(i--, 1);\n return new DecorationSet(local.length ? this.local.concat(local).sort(byPos) : this.local, children || this.children);\n }\n /**\n Create a new set that contains the decorations in this set, minus\n the ones in the given array.\n */\n remove(decorations) {\n if (decorations.length == 0 || this == empty)\n return this;\n return this.removeInner(decorations, 0);\n }\n removeInner(decorations, offset) {\n let children = this.children, local = this.local;\n for (let i = 0; i < children.length; i += 3) {\n let found;\n let from = children[i] + offset, to = children[i + 1] + offset;\n for (let j = 0, span; j < decorations.length; j++)\n if (span = decorations[j]) {\n if (span.from > from && span.to < to) {\n decorations[j] = null;\n (found || (found = [])).push(span);\n }\n }\n if (!found)\n continue;\n if (children == this.children)\n children = this.children.slice();\n let removed = children[i + 2].removeInner(found, from + 1);\n if (removed != empty) {\n children[i + 2] = removed;\n }\n else {\n children.splice(i, 3);\n i -= 3;\n }\n }\n if (local.length)\n for (let i = 0, span; i < decorations.length; i++)\n if (span = decorations[i]) {\n for (let j = 0; j < local.length; j++)\n if (local[j].eq(span, offset)) {\n if (local == this.local)\n local = this.local.slice();\n local.splice(j--, 1);\n }\n }\n if (children == this.children && local == this.local)\n return this;\n return local.length || children.length ? new DecorationSet(local, children) : empty;\n }\n forChild(offset, node) {\n if (this == empty)\n return this;\n if (node.isLeaf)\n return DecorationSet.empty;\n let child, local;\n for (let i = 0; i < this.children.length; i += 3)\n if (this.children[i] >= offset) {\n if (this.children[i] == offset)\n child = this.children[i + 2];\n break;\n }\n let start = offset + 1, end = start + node.content.size;\n for (let i = 0; i < this.local.length; i++) {\n let dec = this.local[i];\n if (dec.from < end && dec.to > start && (dec.type instanceof InlineType)) {\n let from = Math.max(start, dec.from) - start, to = Math.min(end, dec.to) - start;\n if (from < to)\n (local || (local = [])).push(dec.copy(from, to));\n }\n }\n if (local) {\n let localSet = new DecorationSet(local.sort(byPos), none);\n return child ? new DecorationGroup([localSet, child]) : localSet;\n }\n return child || empty;\n }\n /**\n @internal\n */\n eq(other) {\n if (this == other)\n return true;\n if (!(other instanceof DecorationSet) ||\n this.local.length != other.local.length ||\n this.children.length != other.children.length)\n return false;\n for (let i = 0; i < this.local.length; i++)\n if (!this.local[i].eq(other.local[i]))\n return false;\n for (let i = 0; i < this.children.length; i += 3)\n if (this.children[i] != other.children[i] ||\n this.children[i + 1] != other.children[i + 1] ||\n !this.children[i + 2].eq(other.children[i + 2]))\n return false;\n return true;\n }\n /**\n @internal\n */\n locals(node) {\n return removeOverlap(this.localsInner(node));\n }\n /**\n @internal\n */\n localsInner(node) {\n if (this == empty)\n return none;\n if (node.inlineContent || !this.local.some(InlineType.is))\n return this.local;\n let result = [];\n for (let i = 0; i < this.local.length; i++) {\n if (!(this.local[i].type instanceof InlineType))\n result.push(this.local[i]);\n }\n return result;\n }\n forEachSet(f) { f(this); }\n}\n/**\nThe empty set of decorations.\n*/\nDecorationSet.empty = new DecorationSet([], []);\n/**\n@internal\n*/\nDecorationSet.removeOverlap = removeOverlap;\nconst empty = DecorationSet.empty;\n// An abstraction that allows the code dealing with decorations to\n// treat multiple DecorationSet objects as if it were a single object\n// with (a subset of) the same interface.\nclass DecorationGroup {\n constructor(members) {\n this.members = members;\n }\n map(mapping, doc) {\n const mappedDecos = this.members.map(member => member.map(mapping, doc, noSpec));\n return DecorationGroup.from(mappedDecos);\n }\n forChild(offset, child) {\n if (child.isLeaf)\n return DecorationSet.empty;\n let found = [];\n for (let i = 0; i < this.members.length; i++) {\n let result = this.members[i].forChild(offset, child);\n if (result == empty)\n continue;\n if (result instanceof DecorationGroup)\n found = found.concat(result.members);\n else\n found.push(result);\n }\n return DecorationGroup.from(found);\n }\n eq(other) {\n if (!(other instanceof DecorationGroup) ||\n other.members.length != this.members.length)\n return false;\n for (let i = 0; i < this.members.length; i++)\n if (!this.members[i].eq(other.members[i]))\n return false;\n return true;\n }\n locals(node) {\n let result, sorted = true;\n for (let i = 0; i < this.members.length; i++) {\n let locals = this.members[i].localsInner(node);\n if (!locals.length)\n continue;\n if (!result) {\n result = locals;\n }\n else {\n if (sorted) {\n result = result.slice();\n sorted = false;\n }\n for (let j = 0; j < locals.length; j++)\n result.push(locals[j]);\n }\n }\n return result ? removeOverlap(sorted ? result : result.sort(byPos)) : none;\n }\n // Create a group for the given array of decoration sets, or return\n // a single set when possible.\n static from(members) {\n switch (members.length) {\n case 0: return empty;\n case 1: return members[0];\n default: return new DecorationGroup(members.every(m => m instanceof DecorationSet) ? members :\n members.reduce((r, m) => r.concat(m instanceof DecorationSet ? m : m.members), []));\n }\n }\n forEachSet(f) {\n for (let i = 0; i < this.members.length; i++)\n this.members[i].forEachSet(f);\n }\n}\nfunction mapChildren(oldChildren, newLocal, mapping, node, offset, oldOffset, options) {\n let children = oldChildren.slice();\n // Mark the children that are directly touched by changes, and\n // move those that are after the changes.\n for (let i = 0, baseOffset = oldOffset; i < mapping.maps.length; i++) {\n let moved = 0;\n mapping.maps[i].forEach((oldStart, oldEnd, newStart, newEnd) => {\n let dSize = (newEnd - newStart) - (oldEnd - oldStart);\n for (let i = 0; i < children.length; i += 3) {\n let end = children[i + 1];\n if (end < 0 || oldStart > end + baseOffset - moved)\n continue;\n let start = children[i] + baseOffset - moved;\n if (oldEnd >= start) {\n children[i + 1] = oldStart <= start ? -2 : -1;\n }\n else if (oldStart >= baseOffset && dSize) {\n children[i] += dSize;\n children[i + 1] += dSize;\n }\n }\n moved += dSize;\n });\n baseOffset = mapping.maps[i].map(baseOffset, -1);\n }\n // Find the child nodes that still correspond to a single node,\n // recursively call mapInner on them and update their positions.\n let mustRebuild = false;\n for (let i = 0; i < children.length; i += 3)\n if (children[i + 1] < 0) { // Touched nodes\n if (children[i + 1] == -2) {\n mustRebuild = true;\n children[i + 1] = -1;\n continue;\n }\n let from = mapping.map(oldChildren[i] + oldOffset), fromLocal = from - offset;\n if (fromLocal < 0 || fromLocal >= node.content.size) {\n mustRebuild = true;\n continue;\n }\n // Must read oldChildren because children was tagged with -1\n let to = mapping.map(oldChildren[i + 1] + oldOffset, -1), toLocal = to - offset;\n let { index, offset: childOffset } = node.content.findIndex(fromLocal);\n let childNode = node.maybeChild(index);\n if (childNode && childOffset == fromLocal && childOffset + childNode.nodeSize == toLocal) {\n let mapped = children[i + 2]\n .mapInner(mapping, childNode, from + 1, oldChildren[i] + oldOffset + 1, options);\n if (mapped != empty) {\n children[i] = fromLocal;\n children[i + 1] = toLocal;\n children[i + 2] = mapped;\n }\n else {\n children[i + 1] = -2;\n mustRebuild = true;\n }\n }\n else {\n mustRebuild = true;\n }\n }\n // Remaining children must be collected and rebuilt into the appropriate structure\n if (mustRebuild) {\n let decorations = mapAndGatherRemainingDecorations(children, oldChildren, newLocal, mapping, offset, oldOffset, options);\n let built = buildTree(decorations, node, 0, options);\n newLocal = built.local;\n for (let i = 0; i < children.length; i += 3)\n if (children[i + 1] < 0) {\n children.splice(i, 3);\n i -= 3;\n }\n for (let i = 0, j = 0; i < built.children.length; i += 3) {\n let from = built.children[i];\n while (j < children.length && children[j] < from)\n j += 3;\n children.splice(j, 0, built.children[i], built.children[i + 1], built.children[i + 2]);\n }\n }\n return new DecorationSet(newLocal.sort(byPos), children);\n}\nfunction moveSpans(spans, offset) {\n if (!offset || !spans.length)\n return spans;\n let result = [];\n for (let i = 0; i < spans.length; i++) {\n let span = spans[i];\n result.push(new Decoration(span.from + offset, span.to + offset, span.type));\n }\n return result;\n}\nfunction mapAndGatherRemainingDecorations(children, oldChildren, decorations, mapping, offset, oldOffset, options) {\n // Gather all decorations from the remaining marked children\n function gather(set, oldOffset) {\n for (let i = 0; i < set.local.length; i++) {\n let mapped = set.local[i].map(mapping, offset, oldOffset);\n if (mapped)\n decorations.push(mapped);\n else if (options.onRemove)\n options.onRemove(set.local[i].spec);\n }\n for (let i = 0; i < set.children.length; i += 3)\n gather(set.children[i + 2], set.children[i] + oldOffset + 1);\n }\n for (let i = 0; i < children.length; i += 3)\n if (children[i + 1] == -1)\n gather(children[i + 2], oldChildren[i] + oldOffset + 1);\n return decorations;\n}\nfunction takeSpansForNode(spans, node, offset) {\n if (node.isLeaf)\n return null;\n let end = offset + node.nodeSize, found = null;\n for (let i = 0, span; i < spans.length; i++) {\n if ((span = spans[i]) && span.from > offset && span.to < end) {\n (found || (found = [])).push(span);\n spans[i] = null;\n }\n }\n return found;\n}\nfunction withoutNulls(array) {\n let result = [];\n for (let i = 0; i < array.length; i++)\n if (array[i] != null)\n result.push(array[i]);\n return result;\n}\n// Build up a tree that corresponds to a set of decorations. `offset`\n// is a base offset that should be subtracted from the `from` and `to`\n// positions in the spans (so that we don't have to allocate new spans\n// for recursive calls).\nfunction buildTree(spans, node, offset, options) {\n let children = [], hasNulls = false;\n node.forEach((childNode, localStart) => {\n let found = takeSpansForNode(spans, childNode, localStart + offset);\n if (found) {\n hasNulls = true;\n let subtree = buildTree(found, childNode, offset + localStart + 1, options);\n if (subtree != empty)\n children.push(localStart, localStart + childNode.nodeSize, subtree);\n }\n });\n let locals = moveSpans(hasNulls ? withoutNulls(spans) : spans, -offset).sort(byPos);\n for (let i = 0; i < locals.length; i++)\n if (!locals[i].type.valid(node, locals[i])) {\n if (options.onRemove)\n options.onRemove(locals[i].spec);\n locals.splice(i--, 1);\n }\n return locals.length || children.length ? new DecorationSet(locals, children) : empty;\n}\n// Used to sort decorations so that ones with a low start position\n// come first, and within a set with the same start position, those\n// with an smaller end position come first.\nfunction byPos(a, b) {\n return a.from - b.from || a.to - b.to;\n}\n// Scan a sorted array of decorations for partially overlapping spans,\n// and split those so that only fully overlapping spans are left (to\n// make subsequent rendering easier). Will return the input array if\n// no partially overlapping spans are found (the common case).\nfunction removeOverlap(spans) {\n let working = spans;\n for (let i = 0; i < working.length - 1; i++) {\n let span = working[i];\n if (span.from != span.to)\n for (let j = i + 1; j < working.length; j++) {\n let next = working[j];\n if (next.from == span.from) {\n if (next.to != span.to) {\n if (working == spans)\n working = spans.slice();\n // Followed by a partially overlapping larger span. Split that\n // span.\n working[j] = next.copy(next.from, span.to);\n insertAhead(working, j + 1, next.copy(span.to, next.to));\n }\n continue;\n }\n else {\n if (next.from < span.to) {\n if (working == spans)\n working = spans.slice();\n // The end of this one overlaps with a subsequent span. Split\n // this one.\n working[i] = span.copy(span.from, next.from);\n insertAhead(working, j, span.copy(next.from, span.to));\n }\n break;\n }\n }\n }\n return working;\n}\nfunction insertAhead(array, i, deco) {\n while (i < array.length && byPos(deco, array[i]) > 0)\n i++;\n array.splice(i, 0, deco);\n}\n// Get the decorations associated with the current props of a view.\nfunction viewDecorations(view) {\n let found = [];\n view.someProp(\"decorations\", f => {\n let result = f(view.state);\n if (result && result != empty)\n found.push(result);\n });\n if (view.cursorWrapper)\n found.push(DecorationSet.create(view.state.doc, [view.cursorWrapper.deco]));\n return DecorationGroup.from(found);\n}\n\nconst observeOptions = {\n childList: true,\n characterData: true,\n characterDataOldValue: true,\n attributes: true,\n attributeOldValue: true,\n subtree: true\n};\n// IE11 has very broken mutation observers, so we also listen to DOMCharacterDataModified\nconst useCharData = ie && ie_version <= 11;\nclass SelectionState {\n constructor() {\n this.anchorNode = null;\n this.anchorOffset = 0;\n this.focusNode = null;\n this.focusOffset = 0;\n }\n set(sel) {\n this.anchorNode = sel.anchorNode;\n this.anchorOffset = sel.anchorOffset;\n this.focusNode = sel.focusNode;\n this.focusOffset = sel.focusOffset;\n }\n clear() {\n this.anchorNode = this.focusNode = null;\n }\n eq(sel) {\n return sel.anchorNode == this.anchorNode && sel.anchorOffset == this.anchorOffset &&\n sel.focusNode == this.focusNode && sel.focusOffset == this.focusOffset;\n }\n}\nclass DOMObserver {\n constructor(view, handleDOMChange) {\n this.view = view;\n this.handleDOMChange = handleDOMChange;\n this.queue = [];\n this.flushingSoon = -1;\n this.observer = null;\n this.currentSelection = new SelectionState;\n this.onCharData = null;\n this.suppressingSelectionUpdates = false;\n this.lastChangedTextNode = null;\n this.observer = window.MutationObserver &&\n new window.MutationObserver(mutations => {\n for (let i = 0; i < mutations.length; i++)\n this.queue.push(mutations[i]);\n // IE11 will sometimes (on backspacing out a single character\n // text node after a BR node) call the observer callback\n // before actually updating the DOM, which will cause\n // ProseMirror to miss the change (see #930)\n if (ie && ie_version <= 11 && mutations.some(m => m.type == \"childList\" && m.removedNodes.length ||\n m.type == \"characterData\" && m.oldValue.length > m.target.nodeValue.length))\n this.flushSoon();\n else\n this.flush();\n });\n if (useCharData) {\n this.onCharData = e => {\n this.queue.push({ target: e.target, type: \"characterData\", oldValue: e.prevValue });\n this.flushSoon();\n };\n }\n this.onSelectionChange = this.onSelectionChange.bind(this);\n }\n flushSoon() {\n if (this.flushingSoon < 0)\n this.flushingSoon = window.setTimeout(() => { this.flushingSoon = -1; this.flush(); }, 20);\n }\n forceFlush() {\n if (this.flushingSoon > -1) {\n window.clearTimeout(this.flushingSoon);\n this.flushingSoon = -1;\n this.flush();\n }\n }\n start() {\n if (this.observer) {\n this.observer.takeRecords();\n this.observer.observe(this.view.dom, observeOptions);\n }\n if (this.onCharData)\n this.view.dom.addEventListener(\"DOMCharacterDataModified\", this.onCharData);\n this.connectSelection();\n }\n stop() {\n if (this.observer) {\n let take = this.observer.takeRecords();\n if (take.length) {\n for (let i = 0; i < take.length; i++)\n this.queue.push(take[i]);\n window.setTimeout(() => this.flush(), 20);\n }\n this.observer.disconnect();\n }\n if (this.onCharData)\n this.view.dom.removeEventListener(\"DOMCharacterDataModified\", this.onCharData);\n this.disconnectSelection();\n }\n connectSelection() {\n this.view.dom.ownerDocument.addEventListener(\"selectionchange\", this.onSelectionChange);\n }\n disconnectSelection() {\n this.view.dom.ownerDocument.removeEventListener(\"selectionchange\", this.onSelectionChange);\n }\n suppressSelectionUpdates() {\n this.suppressingSelectionUpdates = true;\n setTimeout(() => this.suppressingSelectionUpdates = false, 50);\n }\n onSelectionChange() {\n if (!hasFocusAndSelection(this.view))\n return;\n if (this.suppressingSelectionUpdates)\n return selectionToDOM(this.view);\n // Deletions on IE11 fire their events in the wrong order, giving\n // us a selection change event before the DOM changes are\n // reported.\n if (ie && ie_version <= 11 && !this.view.state.selection.empty) {\n let sel = this.view.domSelectionRange();\n // Selection.isCollapsed isn't reliable on IE\n if (sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset))\n return this.flushSoon();\n }\n this.flush();\n }\n setCurSelection() {\n this.currentSelection.set(this.view.domSelectionRange());\n }\n ignoreSelectionChange(sel) {\n if (!sel.focusNode)\n return true;\n let ancestors = new Set, container;\n for (let scan = sel.focusNode; scan; scan = parentNode(scan))\n ancestors.add(scan);\n for (let scan = sel.anchorNode; scan; scan = parentNode(scan))\n if (ancestors.has(scan)) {\n container = scan;\n break;\n }\n let desc = container && this.view.docView.nearestDesc(container);\n if (desc && desc.ignoreMutation({\n type: \"selection\",\n target: container.nodeType == 3 ? container.parentNode : container\n })) {\n this.setCurSelection();\n return true;\n }\n }\n pendingRecords() {\n if (this.observer)\n for (let mut of this.observer.takeRecords())\n this.queue.push(mut);\n return this.queue;\n }\n flush() {\n let { view } = this;\n if (!view.docView || this.flushingSoon > -1)\n return;\n let mutations = this.pendingRecords();\n if (mutations.length)\n this.queue = [];\n let sel = view.domSelectionRange();\n let newSel = !this.suppressingSelectionUpdates && !this.currentSelection.eq(sel) && hasFocusAndSelection(view) && !this.ignoreSelectionChange(sel);\n let from = -1, to = -1, typeOver = false, added = [];\n if (view.editable) {\n for (let i = 0; i < mutations.length; i++) {\n let result = this.registerMutation(mutations[i], added);\n if (result) {\n from = from < 0 ? result.from : Math.min(result.from, from);\n to = to < 0 ? result.to : Math.max(result.to, to);\n if (result.typeOver)\n typeOver = true;\n }\n }\n }\n if (gecko && added.length) {\n let brs = added.filter(n => n.nodeName == \"BR\");\n if (brs.length == 2) {\n let [a, b] = brs;\n if (a.parentNode && a.parentNode.parentNode == b.parentNode)\n b.remove();\n else\n a.remove();\n }\n else {\n let { focusNode } = this.currentSelection;\n for (let br of brs) {\n let parent = br.parentNode;\n if (parent && parent.nodeName == \"LI\" && (!focusNode || blockParent(view, focusNode) != parent))\n br.remove();\n }\n }\n }\n let readSel = null;\n // If it looks like the browser has reset the selection to the\n // start of the document after focus, restore the selection from\n // the state\n if (from < 0 && newSel && view.input.lastFocus > Date.now() - 200 &&\n Math.max(view.input.lastTouch, view.input.lastClick.time) < Date.now() - 300 &&\n selectionCollapsed(sel) && (readSel = selectionFromDOM(view)) &&\n readSel.eq(Selection.near(view.state.doc.resolve(0), 1))) {\n view.input.lastFocus = 0;\n selectionToDOM(view);\n this.currentSelection.set(sel);\n view.scrollToSelection();\n }\n else if (from > -1 || newSel) {\n if (from > -1) {\n view.docView.markDirty(from, to);\n checkCSS(view);\n }\n this.handleDOMChange(from, to, typeOver, added);\n if (view.docView && view.docView.dirty)\n view.updateState(view.state);\n else if (!this.currentSelection.eq(sel))\n selectionToDOM(view);\n this.currentSelection.set(sel);\n }\n }\n registerMutation(mut, added) {\n // Ignore mutations inside nodes that were already noted as inserted\n if (added.indexOf(mut.target) > -1)\n return null;\n let desc = this.view.docView.nearestDesc(mut.target);\n if (mut.type == \"attributes\" &&\n (desc == this.view.docView || mut.attributeName == \"contenteditable\" ||\n // Firefox sometimes fires spurious events for null/empty styles\n (mut.attributeName == \"style\" && !mut.oldValue && !mut.target.getAttribute(\"style\"))))\n return null;\n if (!desc || desc.ignoreMutation(mut))\n return null;\n if (mut.type == \"childList\") {\n for (let i = 0; i < mut.addedNodes.length; i++) {\n let node = mut.addedNodes[i];\n added.push(node);\n if (node.nodeType == 3)\n this.lastChangedTextNode = node;\n }\n if (desc.contentDOM && desc.contentDOM != desc.dom && !desc.contentDOM.contains(mut.target))\n return { from: desc.posBefore, to: desc.posAfter };\n let prev = mut.previousSibling, next = mut.nextSibling;\n if (ie && ie_version <= 11 && mut.addedNodes.length) {\n // IE11 gives us incorrect next/prev siblings for some\n // insertions, so if there are added nodes, recompute those\n for (let i = 0; i < mut.addedNodes.length; i++) {\n let { previousSibling, nextSibling } = mut.addedNodes[i];\n if (!previousSibling || Array.prototype.indexOf.call(mut.addedNodes, previousSibling) < 0)\n prev = previousSibling;\n if (!nextSibling || Array.prototype.indexOf.call(mut.addedNodes, nextSibling) < 0)\n next = nextSibling;\n }\n }\n let fromOffset = prev && prev.parentNode == mut.target\n ? domIndex(prev) + 1 : 0;\n let from = desc.localPosFromDOM(mut.target, fromOffset, -1);\n let toOffset = next && next.parentNode == mut.target\n ? domIndex(next) : mut.target.childNodes.length;\n let to = desc.localPosFromDOM(mut.target, toOffset, 1);\n return { from, to };\n }\n else if (mut.type == \"attributes\") {\n return { from: desc.posAtStart - desc.border, to: desc.posAtEnd + desc.border };\n }\n else { // \"characterData\"\n this.lastChangedTextNode = mut.target;\n return {\n from: desc.posAtStart,\n to: desc.posAtEnd,\n // An event was generated for a text change that didn't change\n // any text. Mark the dom change to fall back to assuming the\n // selection was typed over with an identical value if it can't\n // find another change.\n typeOver: mut.target.nodeValue == mut.oldValue\n };\n }\n }\n}\nlet cssChecked = new WeakMap();\nlet cssCheckWarned = false;\nfunction checkCSS(view) {\n if (cssChecked.has(view))\n return;\n cssChecked.set(view, null);\n if (['normal', 'nowrap', 'pre-line'].indexOf(getComputedStyle(view.dom).whiteSpace) !== -1) {\n view.requiresGeckoHackNode = gecko;\n if (cssCheckWarned)\n return;\n console[\"warn\"](\"ProseMirror expects the CSS white-space property to be set, preferably to 'pre-wrap'. It is recommended to load style/prosemirror.css from the prosemirror-view package.\");\n cssCheckWarned = true;\n }\n}\nfunction rangeToSelectionRange(view, range) {\n let anchorNode = range.startContainer, anchorOffset = range.startOffset;\n let focusNode = range.endContainer, focusOffset = range.endOffset;\n let currentAnchor = view.domAtPos(view.state.selection.anchor);\n // Since such a range doesn't distinguish between anchor and head,\n // use a heuristic that flips it around if its end matches the\n // current anchor.\n if (isEquivalentPosition(currentAnchor.node, currentAnchor.offset, focusNode, focusOffset))\n [anchorNode, anchorOffset, focusNode, focusOffset] = [focusNode, focusOffset, anchorNode, anchorOffset];\n return { anchorNode, anchorOffset, focusNode, focusOffset };\n}\n// Used to work around a Safari Selection/shadow DOM bug\n// Based on https://github.com/codemirror/dev/issues/414 fix\nfunction safariShadowSelectionRange(view, selection) {\n if (selection.getComposedRanges) {\n let range = selection.getComposedRanges(view.root)[0];\n if (range)\n return rangeToSelectionRange(view, range);\n }\n let found;\n function read(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n found = event.getTargetRanges()[0];\n }\n // Because Safari (at least in 2018-2022) doesn't provide regular\n // access to the selection inside a shadowRoot, we have to perform a\n // ridiculous hack to get at it—using `execCommand` to trigger a\n // `beforeInput` event so that we can read the target range from the\n // event.\n view.dom.addEventListener(\"beforeinput\", read, true);\n document.execCommand(\"indent\");\n view.dom.removeEventListener(\"beforeinput\", read, true);\n return found ? rangeToSelectionRange(view, found) : null;\n}\nfunction blockParent(view, node) {\n for (let p = node.parentNode; p && p != view.dom; p = p.parentNode) {\n let desc = view.docView.nearestDesc(p, true);\n if (desc && desc.node.isBlock)\n return p;\n }\n return null;\n}\n\n// Note that all referencing and parsing is done with the\n// start-of-operation selection and document, since that's the one\n// that the DOM represents. If any changes came in in the meantime,\n// the modification is mapped over those before it is applied, in\n// readDOMChange.\nfunction parseBetween(view, from_, to_) {\n let { node: parent, fromOffset, toOffset, from, to } = view.docView.parseRange(from_, to_);\n let domSel = view.domSelectionRange();\n let find;\n let anchor = domSel.anchorNode;\n if (anchor && view.dom.contains(anchor.nodeType == 1 ? anchor : anchor.parentNode)) {\n find = [{ node: anchor, offset: domSel.anchorOffset }];\n if (!selectionCollapsed(domSel))\n find.push({ node: domSel.focusNode, offset: domSel.focusOffset });\n }\n // Work around issue in Chrome where backspacing sometimes replaces\n // the deleted content with a random BR node (issues #799, #831)\n if (chrome && view.input.lastKeyCode === 8) {\n for (let off = toOffset; off > fromOffset; off--) {\n let node = parent.childNodes[off - 1], desc = node.pmViewDesc;\n if (node.nodeName == \"BR\" && !desc) {\n toOffset = off;\n break;\n }\n if (!desc || desc.size)\n break;\n }\n }\n let startDoc = view.state.doc;\n let parser = view.someProp(\"domParser\") || DOMParser.fromSchema(view.state.schema);\n let $from = startDoc.resolve(from);\n let sel = null, doc = parser.parse(parent, {\n topNode: $from.parent,\n topMatch: $from.parent.contentMatchAt($from.index()),\n topOpen: true,\n from: fromOffset,\n to: toOffset,\n preserveWhitespace: $from.parent.type.whitespace == \"pre\" ? \"full\" : true,\n findPositions: find,\n ruleFromNode,\n context: $from\n });\n if (find && find[0].pos != null) {\n let anchor = find[0].pos, head = find[1] && find[1].pos;\n if (head == null)\n head = anchor;\n sel = { anchor: anchor + from, head: head + from };\n }\n return { doc, sel, from, to };\n}\nfunction ruleFromNode(dom) {\n let desc = dom.pmViewDesc;\n if (desc) {\n return desc.parseRule();\n }\n else if (dom.nodeName == \"BR\" && dom.parentNode) {\n // Safari replaces the list item or table cell with a BR\n // directly in the list node (?!) if you delete the last\n // character in a list item or table cell (#708, #862)\n if (safari && /^(ul|ol)$/i.test(dom.parentNode.nodeName)) {\n let skip = document.createElement(\"div\");\n skip.appendChild(document.createElement(\"li\"));\n return { skip };\n }\n else if (dom.parentNode.lastChild == dom || safari && /^(tr|table)$/i.test(dom.parentNode.nodeName)) {\n return { ignore: true };\n }\n }\n else if (dom.nodeName == \"IMG\" && dom.getAttribute(\"mark-placeholder\")) {\n return { ignore: true };\n }\n return null;\n}\nconst isInline = /^(a|abbr|acronym|b|bd[io]|big|br|button|cite|code|data(list)?|del|dfn|em|i|ins|kbd|label|map|mark|meter|output|q|ruby|s|samp|small|span|strong|su[bp]|time|u|tt|var)$/i;\nfunction readDOMChange(view, from, to, typeOver, addedNodes) {\n let compositionID = view.input.compositionPendingChanges || (view.composing ? view.input.compositionID : 0);\n view.input.compositionPendingChanges = 0;\n if (from < 0) {\n let origin = view.input.lastSelectionTime > Date.now() - 50 ? view.input.lastSelectionOrigin : null;\n let newSel = selectionFromDOM(view, origin);\n if (newSel && !view.state.selection.eq(newSel)) {\n if (chrome && android &&\n view.input.lastKeyCode === 13 && Date.now() - 100 < view.input.lastKeyCodeTime &&\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\"))))\n return;\n let tr = view.state.tr.setSelection(newSel);\n if (origin == \"pointer\")\n tr.setMeta(\"pointer\", true);\n else if (origin == \"key\")\n tr.scrollIntoView();\n if (compositionID)\n tr.setMeta(\"composition\", compositionID);\n view.dispatch(tr);\n }\n return;\n }\n let $before = view.state.doc.resolve(from);\n let shared = $before.sharedDepth(to);\n from = $before.before(shared + 1);\n to = view.state.doc.resolve(to).after(shared + 1);\n let sel = view.state.selection;\n let parse = parseBetween(view, from, to);\n let doc = view.state.doc, compare = doc.slice(parse.from, parse.to);\n let preferredPos, preferredSide;\n // Prefer anchoring to end when Backspace is pressed\n if (view.input.lastKeyCode === 8 && Date.now() - 100 < view.input.lastKeyCodeTime) {\n preferredPos = view.state.selection.to;\n preferredSide = \"end\";\n }\n else {\n preferredPos = view.state.selection.from;\n preferredSide = \"start\";\n }\n view.input.lastKeyCode = null;\n let change = findDiff(compare.content, parse.doc.content, parse.from, preferredPos, preferredSide);\n if (change)\n view.input.domChangeCount++;\n if ((ios && view.input.lastIOSEnter > Date.now() - 225 || android) &&\n addedNodes.some(n => n.nodeType == 1 && !isInline.test(n.nodeName)) &&\n (!change || change.endA >= change.endB) &&\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\")))) {\n view.input.lastIOSEnter = 0;\n return;\n }\n if (!change) {\n if (typeOver && sel instanceof TextSelection && !sel.empty && sel.$head.sameParent(sel.$anchor) &&\n !view.composing && !(parse.sel && parse.sel.anchor != parse.sel.head)) {\n change = { start: sel.from, endA: sel.to, endB: sel.to };\n }\n else {\n if (parse.sel) {\n let sel = resolveSelection(view, view.state.doc, parse.sel);\n if (sel && !sel.eq(view.state.selection)) {\n let tr = view.state.tr.setSelection(sel);\n if (compositionID)\n tr.setMeta(\"composition\", compositionID);\n view.dispatch(tr);\n }\n }\n return;\n }\n }\n // Handle the case where overwriting a selection by typing matches\n // the start or end of the selected content, creating a change\n // that's smaller than what was actually overwritten.\n if (view.state.selection.from < view.state.selection.to &&\n change.start == change.endB &&\n view.state.selection instanceof TextSelection) {\n if (change.start > view.state.selection.from && change.start <= view.state.selection.from + 2 &&\n view.state.selection.from >= parse.from) {\n change.start = view.state.selection.from;\n }\n else if (change.endA < view.state.selection.to && change.endA >= view.state.selection.to - 2 &&\n view.state.selection.to <= parse.to) {\n change.endB += (view.state.selection.to - change.endA);\n change.endA = view.state.selection.to;\n }\n }\n // IE11 will insert a non-breaking space _ahead_ of the space after\n // the cursor space when adding a space before another space. When\n // that happened, adjust the change to cover the space instead.\n if (ie && ie_version <= 11 && change.endB == change.start + 1 &&\n change.endA == change.start && change.start > parse.from &&\n parse.doc.textBetween(change.start - parse.from - 1, change.start - parse.from + 1) == \" \\u00a0\") {\n change.start--;\n change.endA--;\n change.endB--;\n }\n let $from = parse.doc.resolveNoCache(change.start - parse.from);\n let $to = parse.doc.resolveNoCache(change.endB - parse.from);\n let $fromA = doc.resolve(change.start);\n let inlineChange = $from.sameParent($to) && $from.parent.inlineContent && $fromA.end() >= change.endA;\n let nextSel;\n // If this looks like the effect of pressing Enter (or was recorded\n // as being an iOS enter press), just dispatch an Enter key instead.\n if (((ios && view.input.lastIOSEnter > Date.now() - 225 &&\n (!inlineChange || addedNodes.some(n => n.nodeName == \"DIV\" || n.nodeName == \"P\"))) ||\n (!inlineChange && $from.pos < parse.doc.content.size && !$from.sameParent($to) &&\n (nextSel = Selection.findFrom(parse.doc.resolve($from.pos + 1), 1, true)) &&\n nextSel.head == $to.pos)) &&\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\")))) {\n view.input.lastIOSEnter = 0;\n return;\n }\n // Same for backspace\n if (view.state.selection.anchor > change.start &&\n looksLikeBackspace(doc, change.start, change.endA, $from, $to) &&\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(8, \"Backspace\")))) {\n if (android && chrome)\n view.domObserver.suppressSelectionUpdates(); // #820\n return;\n }\n // Chrome Android will occasionally, during composition, delete the\n // entire composition and then immediately insert it again. This is\n // used to detect that situation.\n if (chrome && android && change.endB == change.start)\n view.input.lastAndroidDelete = Date.now();\n // This tries to detect Android virtual keyboard\n // enter-and-pick-suggestion action. That sometimes (see issue\n // #1059) first fires a DOM mutation, before moving the selection to\n // the newly created block. And then, because ProseMirror cleans up\n // the DOM selection, it gives up moving the selection entirely,\n // leaving the cursor in the wrong place. When that happens, we drop\n // the new paragraph from the initial change, and fire a simulated\n // enter key afterwards.\n if (android && !inlineChange && $from.start() != $to.start() && $to.parentOffset == 0 && $from.depth == $to.depth &&\n parse.sel && parse.sel.anchor == parse.sel.head && parse.sel.head == change.endA) {\n change.endB -= 2;\n $to = parse.doc.resolveNoCache(change.endB - parse.from);\n setTimeout(() => {\n view.someProp(\"handleKeyDown\", function (f) { return f(view, keyEvent(13, \"Enter\")); });\n }, 20);\n }\n let chFrom = change.start, chTo = change.endA;\n let tr, storedMarks, markChange;\n if (inlineChange) {\n if ($from.pos == $to.pos) { // Deletion\n // IE11 sometimes weirdly moves the DOM selection around after\n // backspacing out the first element in a textblock\n if (ie && ie_version <= 11 && $from.parentOffset == 0) {\n view.domObserver.suppressSelectionUpdates();\n setTimeout(() => selectionToDOM(view), 20);\n }\n tr = view.state.tr.delete(chFrom, chTo);\n storedMarks = doc.resolve(change.start).marksAcross(doc.resolve(change.endA));\n }\n else if ( // Adding or removing a mark\n change.endA == change.endB &&\n (markChange = isMarkChange($from.parent.content.cut($from.parentOffset, $to.parentOffset), $fromA.parent.content.cut($fromA.parentOffset, change.endA - $fromA.start())))) {\n tr = view.state.tr;\n if (markChange.type == \"add\")\n tr.addMark(chFrom, chTo, markChange.mark);\n else\n tr.removeMark(chFrom, chTo, markChange.mark);\n }\n else if ($from.parent.child($from.index()).isText && $from.index() == $to.index() - ($to.textOffset ? 0 : 1)) {\n // Both positions in the same text node -- simply insert text\n let text = $from.parent.textBetween($from.parentOffset, $to.parentOffset);\n if (view.someProp(\"handleTextInput\", f => f(view, chFrom, chTo, text)))\n return;\n tr = view.state.tr.insertText(text, chFrom, chTo);\n }\n }\n if (!tr)\n tr = view.state.tr.replace(chFrom, chTo, parse.doc.slice(change.start - parse.from, change.endB - parse.from));\n if (parse.sel) {\n let sel = resolveSelection(view, tr.doc, parse.sel);\n // Chrome Android will sometimes, during composition, report the\n // selection in the wrong place. If it looks like that is\n // happening, don't update the selection.\n // Edge just doesn't move the cursor forward when you start typing\n // in an empty block or between br nodes.\n if (sel && !(chrome && android && view.composing && sel.empty &&\n (change.start != change.endB || view.input.lastAndroidDelete < Date.now() - 100) &&\n (sel.head == chFrom || sel.head == tr.mapping.map(chTo) - 1) ||\n ie && sel.empty && sel.head == chFrom))\n tr.setSelection(sel);\n }\n if (storedMarks)\n tr.ensureMarks(storedMarks);\n if (compositionID)\n tr.setMeta(\"composition\", compositionID);\n view.dispatch(tr.scrollIntoView());\n}\nfunction resolveSelection(view, doc, parsedSel) {\n if (Math.max(parsedSel.anchor, parsedSel.head) > doc.content.size)\n return null;\n return selectionBetween(view, doc.resolve(parsedSel.anchor), doc.resolve(parsedSel.head));\n}\n// Given two same-length, non-empty fragments of inline content,\n// determine whether the first could be created from the second by\n// removing or adding a single mark type.\nfunction isMarkChange(cur, prev) {\n let curMarks = cur.firstChild.marks, prevMarks = prev.firstChild.marks;\n let added = curMarks, removed = prevMarks, type, mark, update;\n for (let i = 0; i < prevMarks.length; i++)\n added = prevMarks[i].removeFromSet(added);\n for (let i = 0; i < curMarks.length; i++)\n removed = curMarks[i].removeFromSet(removed);\n if (added.length == 1 && removed.length == 0) {\n mark = added[0];\n type = \"add\";\n update = (node) => node.mark(mark.addToSet(node.marks));\n }\n else if (added.length == 0 && removed.length == 1) {\n mark = removed[0];\n type = \"remove\";\n update = (node) => node.mark(mark.removeFromSet(node.marks));\n }\n else {\n return null;\n }\n let updated = [];\n for (let i = 0; i < prev.childCount; i++)\n updated.push(update(prev.child(i)));\n if (Fragment.from(updated).eq(cur))\n return { mark, type };\n}\nfunction looksLikeBackspace(old, start, end, $newStart, $newEnd) {\n if ( // The content must have shrunk\n end - start <= $newEnd.pos - $newStart.pos ||\n // newEnd must point directly at or after the end of the block that newStart points into\n skipClosingAndOpening($newStart, true, false) < $newEnd.pos)\n return false;\n let $start = old.resolve(start);\n // Handle the case where, rather than joining blocks, the change just removed an entire block\n if (!$newStart.parent.isTextblock) {\n let after = $start.nodeAfter;\n return after != null && end == start + after.nodeSize;\n }\n // Start must be at the end of a block\n if ($start.parentOffset < $start.parent.content.size || !$start.parent.isTextblock)\n return false;\n let $next = old.resolve(skipClosingAndOpening($start, true, true));\n // The next textblock must start before end and end near it\n if (!$next.parent.isTextblock || $next.pos > end ||\n skipClosingAndOpening($next, true, false) < end)\n return false;\n // The fragments after the join point must match\n return $newStart.parent.content.cut($newStart.parentOffset).eq($next.parent.content);\n}\nfunction skipClosingAndOpening($pos, fromEnd, mayOpen) {\n let depth = $pos.depth, end = fromEnd ? $pos.end() : $pos.pos;\n while (depth > 0 && (fromEnd || $pos.indexAfter(depth) == $pos.node(depth).childCount)) {\n depth--;\n end++;\n fromEnd = false;\n }\n if (mayOpen) {\n let next = $pos.node(depth).maybeChild($pos.indexAfter(depth));\n while (next && !next.isLeaf) {\n next = next.firstChild;\n end++;\n }\n }\n return end;\n}\nfunction findDiff(a, b, pos, preferredPos, preferredSide) {\n let start = a.findDiffStart(b, pos);\n if (start == null)\n return null;\n let { a: endA, b: endB } = a.findDiffEnd(b, pos + a.size, pos + b.size);\n if (preferredSide == \"end\") {\n let adjust = Math.max(0, start - Math.min(endA, endB));\n preferredPos -= endA + adjust - start;\n }\n if (endA < start && a.size < b.size) {\n let move = preferredPos <= start && preferredPos >= endA ? start - preferredPos : 0;\n start -= move;\n if (start && start < b.size && isSurrogatePair(b.textBetween(start - 1, start + 1)))\n start += move ? 1 : -1;\n endB = start + (endB - endA);\n endA = start;\n }\n else if (endB < start) {\n let move = preferredPos <= start && preferredPos >= endB ? start - preferredPos : 0;\n start -= move;\n if (start && start < a.size && isSurrogatePair(a.textBetween(start - 1, start + 1)))\n start += move ? 1 : -1;\n endA = start + (endA - endB);\n endB = start;\n }\n return { start, endA, endB };\n}\nfunction isSurrogatePair(str) {\n if (str.length != 2)\n return false;\n let a = str.charCodeAt(0), b = str.charCodeAt(1);\n return a >= 0xDC00 && a <= 0xDFFF && b >= 0xD800 && b <= 0xDBFF;\n}\n\n/**\n@internal\n*/\nconst __serializeForClipboard = serializeForClipboard;\n/**\n@internal\n*/\nconst __parseFromClipboard = parseFromClipboard;\n/**\n@internal\n*/\nconst __endComposition = endComposition;\n/**\nAn editor view manages the DOM structure that represents an\neditable document. Its state and behavior are determined by its\n[props](https://prosemirror.net/docs/ref/#view.DirectEditorProps).\n*/\nclass EditorView {\n /**\n Create a view. `place` may be a DOM node that the editor should\n be appended to, a function that will place it into the document,\n or an object whose `mount` property holds the node to use as the\n document container. If it is `null`, the editor will not be\n added to the document.\n */\n constructor(place, props) {\n this._root = null;\n /**\n @internal\n */\n this.focused = false;\n /**\n Kludge used to work around a Chrome bug @internal\n */\n this.trackWrites = null;\n this.mounted = false;\n /**\n @internal\n */\n this.markCursor = null;\n /**\n @internal\n */\n this.cursorWrapper = null;\n /**\n @internal\n */\n this.lastSelectedViewDesc = undefined;\n /**\n @internal\n */\n this.input = new InputState;\n this.prevDirectPlugins = [];\n this.pluginViews = [];\n /**\n Holds `true` when a hack node is needed in Firefox to prevent the\n [space is eaten issue](https://github.com/ProseMirror/prosemirror/issues/651)\n @internal\n */\n this.requiresGeckoHackNode = false;\n /**\n When editor content is being dragged, this object contains\n information about the dragged slice and whether it is being\n copied or moved. At any other time, it is null.\n */\n this.dragging = null;\n this._props = props;\n this.state = props.state;\n this.directPlugins = props.plugins || [];\n this.directPlugins.forEach(checkStateComponent);\n this.dispatch = this.dispatch.bind(this);\n this.dom = (place && place.mount) || document.createElement(\"div\");\n if (place) {\n if (place.appendChild)\n place.appendChild(this.dom);\n else if (typeof place == \"function\")\n place(this.dom);\n else if (place.mount)\n this.mounted = true;\n }\n this.editable = getEditable(this);\n updateCursorWrapper(this);\n this.nodeViews = buildNodeViews(this);\n this.docView = docViewDesc(this.state.doc, computeDocDeco(this), viewDecorations(this), this.dom, this);\n this.domObserver = new DOMObserver(this, (from, to, typeOver, added) => readDOMChange(this, from, to, typeOver, added));\n this.domObserver.start();\n initInput(this);\n this.updatePluginViews();\n }\n /**\n Holds `true` when a\n [composition](https://w3c.github.io/uievents/#events-compositionevents)\n is active.\n */\n get composing() { return this.input.composing; }\n /**\n The view's current [props](https://prosemirror.net/docs/ref/#view.EditorProps).\n */\n get props() {\n if (this._props.state != this.state) {\n let prev = this._props;\n this._props = {};\n for (let name in prev)\n this._props[name] = prev[name];\n this._props.state = this.state;\n }\n return this._props;\n }\n /**\n Update the view's props. Will immediately cause an update to\n the DOM.\n */\n update(props) {\n if (props.handleDOMEvents != this._props.handleDOMEvents)\n ensureListeners(this);\n let prevProps = this._props;\n this._props = props;\n if (props.plugins) {\n props.plugins.forEach(checkStateComponent);\n this.directPlugins = props.plugins;\n }\n this.updateStateInner(props.state, prevProps);\n }\n /**\n Update the view by updating existing props object with the object\n given as argument. Equivalent to `view.update(Object.assign({},\n view.props, props))`.\n */\n setProps(props) {\n let updated = {};\n for (let name in this._props)\n updated[name] = this._props[name];\n updated.state = this.state;\n for (let name in props)\n updated[name] = props[name];\n this.update(updated);\n }\n /**\n Update the editor's `state` prop, without touching any of the\n other props.\n */\n updateState(state) {\n this.updateStateInner(state, this._props);\n }\n updateStateInner(state, prevProps) {\n var _a;\n let prev = this.state, redraw = false, updateSel = false;\n // When stored marks are added, stop composition, so that they can\n // be displayed.\n if (state.storedMarks && this.composing) {\n clearComposition(this);\n updateSel = true;\n }\n this.state = state;\n let pluginsChanged = prev.plugins != state.plugins || this._props.plugins != prevProps.plugins;\n if (pluginsChanged || this._props.plugins != prevProps.plugins || this._props.nodeViews != prevProps.nodeViews) {\n let nodeViews = buildNodeViews(this);\n if (changedNodeViews(nodeViews, this.nodeViews)) {\n this.nodeViews = nodeViews;\n redraw = true;\n }\n }\n if (pluginsChanged || prevProps.handleDOMEvents != this._props.handleDOMEvents) {\n ensureListeners(this);\n }\n this.editable = getEditable(this);\n updateCursorWrapper(this);\n let innerDeco = viewDecorations(this), outerDeco = computeDocDeco(this);\n let scroll = prev.plugins != state.plugins && !prev.doc.eq(state.doc) ? \"reset\"\n : state.scrollToSelection > prev.scrollToSelection ? \"to selection\" : \"preserve\";\n let updateDoc = redraw || !this.docView.matchesNode(state.doc, outerDeco, innerDeco);\n if (updateDoc || !state.selection.eq(prev.selection))\n updateSel = true;\n let oldScrollPos = scroll == \"preserve\" && updateSel && this.dom.style.overflowAnchor == null && storeScrollPos(this);\n if (updateSel) {\n this.domObserver.stop();\n // Work around an issue in Chrome, IE, and Edge where changing\n // the DOM around an active selection puts it into a broken\n // state where the thing the user sees differs from the\n // selection reported by the Selection object (#710, #973,\n // #1011, #1013, #1035).\n let forceSelUpdate = updateDoc && (ie || chrome) && !this.composing &&\n !prev.selection.empty && !state.selection.empty && selectionContextChanged(prev.selection, state.selection);\n if (updateDoc) {\n // If the node that the selection points into is written to,\n // Chrome sometimes starts misreporting the selection, so this\n // tracks that and forces a selection reset when our update\n // did write to the node.\n let chromeKludge = chrome ? (this.trackWrites = this.domSelectionRange().focusNode) : null;\n if (this.composing)\n this.input.compositionNode = findCompositionNode(this);\n if (redraw || !this.docView.update(state.doc, outerDeco, innerDeco, this)) {\n this.docView.updateOuterDeco(outerDeco);\n this.docView.destroy();\n this.docView = docViewDesc(state.doc, outerDeco, innerDeco, this.dom, this);\n }\n if (chromeKludge && !this.trackWrites)\n forceSelUpdate = true;\n }\n // Work around for an issue where an update arriving right between\n // a DOM selection change and the \"selectionchange\" event for it\n // can cause a spurious DOM selection update, disrupting mouse\n // drag selection.\n if (forceSelUpdate ||\n !(this.input.mouseDown && this.domObserver.currentSelection.eq(this.domSelectionRange()) &&\n anchorInRightPlace(this))) {\n selectionToDOM(this, forceSelUpdate);\n }\n else {\n syncNodeSelection(this, state.selection);\n this.domObserver.setCurSelection();\n }\n this.domObserver.start();\n }\n this.updatePluginViews(prev);\n if (((_a = this.dragging) === null || _a === void 0 ? void 0 : _a.node) && !prev.doc.eq(state.doc))\n this.updateDraggedNode(this.dragging, prev);\n if (scroll == \"reset\") {\n this.dom.scrollTop = 0;\n }\n else if (scroll == \"to selection\") {\n this.scrollToSelection();\n }\n else if (oldScrollPos) {\n resetScrollPos(oldScrollPos);\n }\n }\n /**\n @internal\n */\n scrollToSelection() {\n let startDOM = this.domSelectionRange().focusNode;\n if (this.someProp(\"handleScrollToSelection\", f => f(this))) ;\n else if (this.state.selection instanceof NodeSelection) {\n let target = this.docView.domAfterPos(this.state.selection.from);\n if (target.nodeType == 1)\n scrollRectIntoView(this, target.getBoundingClientRect(), startDOM);\n }\n else {\n scrollRectIntoView(this, this.coordsAtPos(this.state.selection.head, 1), startDOM);\n }\n }\n destroyPluginViews() {\n let view;\n while (view = this.pluginViews.pop())\n if (view.destroy)\n view.destroy();\n }\n updatePluginViews(prevState) {\n if (!prevState || prevState.plugins != this.state.plugins || this.directPlugins != this.prevDirectPlugins) {\n this.prevDirectPlugins = this.directPlugins;\n this.destroyPluginViews();\n for (let i = 0; i < this.directPlugins.length; i++) {\n let plugin = this.directPlugins[i];\n if (plugin.spec.view)\n this.pluginViews.push(plugin.spec.view(this));\n }\n for (let i = 0; i < this.state.plugins.length; i++) {\n let plugin = this.state.plugins[i];\n if (plugin.spec.view)\n this.pluginViews.push(plugin.spec.view(this));\n }\n }\n else {\n for (let i = 0; i < this.pluginViews.length; i++) {\n let pluginView = this.pluginViews[i];\n if (pluginView.update)\n pluginView.update(this, prevState);\n }\n }\n }\n updateDraggedNode(dragging, prev) {\n let sel = dragging.node, found = -1;\n if (this.state.doc.nodeAt(sel.from) == sel.node) {\n found = sel.from;\n }\n else {\n let movedPos = sel.from + (this.state.doc.content.size - prev.doc.content.size);\n let moved = movedPos > 0 && this.state.doc.nodeAt(movedPos);\n if (moved == sel.node)\n found = movedPos;\n }\n this.dragging = new Dragging(dragging.slice, dragging.move, found < 0 ? undefined : NodeSelection.create(this.state.doc, found));\n }\n someProp(propName, f) {\n let prop = this._props && this._props[propName], value;\n if (prop != null && (value = f ? f(prop) : prop))\n return value;\n for (let i = 0; i < this.directPlugins.length; i++) {\n let prop = this.directPlugins[i].props[propName];\n if (prop != null && (value = f ? f(prop) : prop))\n return value;\n }\n let plugins = this.state.plugins;\n if (plugins)\n for (let i = 0; i < plugins.length; i++) {\n let prop = plugins[i].props[propName];\n if (prop != null && (value = f ? f(prop) : prop))\n return value;\n }\n }\n /**\n Query whether the view has focus.\n */\n hasFocus() {\n // Work around IE not handling focus correctly if resize handles are shown.\n // If the cursor is inside an element with resize handles, activeElement\n // will be that element instead of this.dom.\n if (ie) {\n // If activeElement is within this.dom, and there are no other elements\n // setting `contenteditable` to false in between, treat it as focused.\n let node = this.root.activeElement;\n if (node == this.dom)\n return true;\n if (!node || !this.dom.contains(node))\n return false;\n while (node && this.dom != node && this.dom.contains(node)) {\n if (node.contentEditable == 'false')\n return false;\n node = node.parentElement;\n }\n return true;\n }\n return this.root.activeElement == this.dom;\n }\n /**\n Focus the editor.\n */\n focus() {\n this.domObserver.stop();\n if (this.editable)\n focusPreventScroll(this.dom);\n selectionToDOM(this);\n this.domObserver.start();\n }\n /**\n Get the document root in which the editor exists. This will\n usually be the top-level `document`, but might be a [shadow\n DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Shadow_DOM)\n root if the editor is inside one.\n */\n get root() {\n let cached = this._root;\n if (cached == null)\n for (let search = this.dom.parentNode; search; search = search.parentNode) {\n if (search.nodeType == 9 || (search.nodeType == 11 && search.host)) {\n if (!search.getSelection)\n Object.getPrototypeOf(search).getSelection = () => search.ownerDocument.getSelection();\n return this._root = search;\n }\n }\n return cached || document;\n }\n /**\n When an existing editor view is moved to a new document or\n shadow tree, call this to make it recompute its root.\n */\n updateRoot() {\n this._root = null;\n }\n /**\n Given a pair of viewport coordinates, return the document\n position that corresponds to them. May return null if the given\n coordinates aren't inside of the editor. When an object is\n returned, its `pos` property is the position nearest to the\n coordinates, and its `inside` property holds the position of the\n inner node that the position falls inside of, or -1 if it is at\n the top level, not in any node.\n */\n posAtCoords(coords) {\n return posAtCoords(this, coords);\n }\n /**\n Returns the viewport rectangle at a given document position.\n `left` and `right` will be the same number, as this returns a\n flat cursor-ish rectangle. If the position is between two things\n that aren't directly adjacent, `side` determines which element\n is used. When < 0, the element before the position is used,\n otherwise the element after.\n */\n coordsAtPos(pos, side = 1) {\n return coordsAtPos(this, pos, side);\n }\n /**\n Find the DOM position that corresponds to the given document\n position. When `side` is negative, find the position as close as\n possible to the content before the position. When positive,\n prefer positions close to the content after the position. When\n zero, prefer as shallow a position as possible.\n \n Note that you should **not** mutate the editor's internal DOM,\n only inspect it (and even that is usually not necessary).\n */\n domAtPos(pos, side = 0) {\n return this.docView.domFromPos(pos, side);\n }\n /**\n Find the DOM node that represents the document node after the\n given position. May return `null` when the position doesn't point\n in front of a node or if the node is inside an opaque node view.\n \n This is intended to be able to call things like\n `getBoundingClientRect` on that DOM node. Do **not** mutate the\n editor DOM directly, or add styling this way, since that will be\n immediately overriden by the editor as it redraws the node.\n */\n nodeDOM(pos) {\n let desc = this.docView.descAt(pos);\n return desc ? desc.nodeDOM : null;\n }\n /**\n Find the document position that corresponds to a given DOM\n position. (Whenever possible, it is preferable to inspect the\n document structure directly, rather than poking around in the\n DOM, but sometimes—for example when interpreting an event\n target—you don't have a choice.)\n \n The `bias` parameter can be used to influence which side of a DOM\n node to use when the position is inside a leaf node.\n */\n posAtDOM(node, offset, bias = -1) {\n let pos = this.docView.posFromDOM(node, offset, bias);\n if (pos == null)\n throw new RangeError(\"DOM position not inside the editor\");\n return pos;\n }\n /**\n Find out whether the selection is at the end of a textblock when\n moving in a given direction. When, for example, given `\"left\"`,\n it will return true if moving left from the current cursor\n position would leave that position's parent textblock. Will apply\n to the view's current state by default, but it is possible to\n pass a different state.\n */\n endOfTextblock(dir, state) {\n return endOfTextblock(this, state || this.state, dir);\n }\n /**\n Run the editor's paste logic with the given HTML string. The\n `event`, if given, will be passed to the\n [`handlePaste`](https://prosemirror.net/docs/ref/#view.EditorProps.handlePaste) hook.\n */\n pasteHTML(html, event) {\n return doPaste(this, \"\", html, false, event || new ClipboardEvent(\"paste\"));\n }\n /**\n Run the editor's paste logic with the given plain-text input.\n */\n pasteText(text, event) {\n return doPaste(this, text, null, true, event || new ClipboardEvent(\"paste\"));\n }\n /**\n Removes the editor from the DOM and destroys all [node\n views](https://prosemirror.net/docs/ref/#view.NodeView).\n */\n destroy() {\n if (!this.docView)\n return;\n destroyInput(this);\n this.destroyPluginViews();\n if (this.mounted) {\n this.docView.update(this.state.doc, [], viewDecorations(this), this);\n this.dom.textContent = \"\";\n }\n else if (this.dom.parentNode) {\n this.dom.parentNode.removeChild(this.dom);\n }\n this.docView.destroy();\n this.docView = null;\n clearReusedRange();\n }\n /**\n This is true when the view has been\n [destroyed](https://prosemirror.net/docs/ref/#view.EditorView.destroy) (and thus should not be\n used anymore).\n */\n get isDestroyed() {\n return this.docView == null;\n }\n /**\n Used for testing.\n */\n dispatchEvent(event) {\n return dispatchEvent(this, event);\n }\n /**\n Dispatch a transaction. Will call\n [`dispatchTransaction`](https://prosemirror.net/docs/ref/#view.DirectEditorProps.dispatchTransaction)\n when given, and otherwise defaults to applying the transaction to\n the current state and calling\n [`updateState`](https://prosemirror.net/docs/ref/#view.EditorView.updateState) with the result.\n This method is bound to the view instance, so that it can be\n easily passed around.\n */\n dispatch(tr) {\n let dispatchTransaction = this._props.dispatchTransaction;\n if (dispatchTransaction)\n dispatchTransaction.call(this, tr);\n else\n this.updateState(this.state.apply(tr));\n }\n /**\n @internal\n */\n domSelectionRange() {\n let sel = this.domSelection();\n if (!sel)\n return { focusNode: null, focusOffset: 0, anchorNode: null, anchorOffset: 0 };\n return safari && this.root.nodeType === 11 &&\n deepActiveElement(this.dom.ownerDocument) == this.dom && safariShadowSelectionRange(this, sel) || sel;\n }\n /**\n @internal\n */\n domSelection() {\n return this.root.getSelection();\n }\n}\nfunction computeDocDeco(view) {\n let attrs = Object.create(null);\n attrs.class = \"ProseMirror\";\n attrs.contenteditable = String(view.editable);\n view.someProp(\"attributes\", value => {\n if (typeof value == \"function\")\n value = value(view.state);\n if (value)\n for (let attr in value) {\n if (attr == \"class\")\n attrs.class += \" \" + value[attr];\n else if (attr == \"style\")\n attrs.style = (attrs.style ? attrs.style + \";\" : \"\") + value[attr];\n else if (!attrs[attr] && attr != \"contenteditable\" && attr != \"nodeName\")\n attrs[attr] = String(value[attr]);\n }\n });\n if (!attrs.translate)\n attrs.translate = \"no\";\n return [Decoration.node(0, view.state.doc.content.size, attrs)];\n}\nfunction updateCursorWrapper(view) {\n if (view.markCursor) {\n let dom = document.createElement(\"img\");\n dom.className = \"ProseMirror-separator\";\n dom.setAttribute(\"mark-placeholder\", \"true\");\n dom.setAttribute(\"alt\", \"\");\n view.cursorWrapper = { dom, deco: Decoration.widget(view.state.selection.from, dom, { raw: true, marks: view.markCursor }) };\n }\n else {\n view.cursorWrapper = null;\n }\n}\nfunction getEditable(view) {\n return !view.someProp(\"editable\", value => value(view.state) === false);\n}\nfunction selectionContextChanged(sel1, sel2) {\n let depth = Math.min(sel1.$anchor.sharedDepth(sel1.head), sel2.$anchor.sharedDepth(sel2.head));\n return sel1.$anchor.start(depth) != sel2.$anchor.start(depth);\n}\nfunction buildNodeViews(view) {\n let result = Object.create(null);\n function add(obj) {\n for (let prop in obj)\n if (!Object.prototype.hasOwnProperty.call(result, prop))\n result[prop] = obj[prop];\n }\n view.someProp(\"nodeViews\", add);\n view.someProp(\"markViews\", add);\n return result;\n}\nfunction changedNodeViews(a, b) {\n let nA = 0, nB = 0;\n for (let prop in a) {\n if (a[prop] != b[prop])\n return true;\n nA++;\n }\n for (let _ in b)\n nB++;\n return nA != nB;\n}\nfunction checkStateComponent(plugin) {\n if (plugin.spec.state || plugin.spec.filterTransaction || plugin.spec.appendTransaction)\n throw new RangeError(\"Plugins passed directly to the view must not have a state component\");\n}\n\nexport { Decoration, DecorationSet, EditorView, __endComposition, __parseFromClipboard, __serializeForClipboard };\n","import { keydownHandler } from 'prosemirror-keymap';\nimport { Selection, NodeSelection, TextSelection, Plugin } from 'prosemirror-state';\nimport { Slice, Fragment } from 'prosemirror-model';\nimport { DecorationSet, Decoration } from 'prosemirror-view';\n\n/**\nGap cursor selections are represented using this class. Its\n`$anchor` and `$head` properties both point at the cursor position.\n*/\nclass GapCursor extends Selection {\n /**\n Create a gap cursor.\n */\n constructor($pos) {\n super($pos, $pos);\n }\n map(doc, mapping) {\n let $pos = doc.resolve(mapping.map(this.head));\n return GapCursor.valid($pos) ? new GapCursor($pos) : Selection.near($pos);\n }\n content() { return Slice.empty; }\n eq(other) {\n return other instanceof GapCursor && other.head == this.head;\n }\n toJSON() {\n return { type: \"gapcursor\", pos: this.head };\n }\n /**\n @internal\n */\n static fromJSON(doc, json) {\n if (typeof json.pos != \"number\")\n throw new RangeError(\"Invalid input for GapCursor.fromJSON\");\n return new GapCursor(doc.resolve(json.pos));\n }\n /**\n @internal\n */\n getBookmark() { return new GapBookmark(this.anchor); }\n /**\n @internal\n */\n static valid($pos) {\n let parent = $pos.parent;\n if (parent.isTextblock || !closedBefore($pos) || !closedAfter($pos))\n return false;\n let override = parent.type.spec.allowGapCursor;\n if (override != null)\n return override;\n let deflt = parent.contentMatchAt($pos.index()).defaultType;\n return deflt && deflt.isTextblock;\n }\n /**\n @internal\n */\n static findGapCursorFrom($pos, dir, mustMove = false) {\n search: for (;;) {\n if (!mustMove && GapCursor.valid($pos))\n return $pos;\n let pos = $pos.pos, next = null;\n // Scan up from this position\n for (let d = $pos.depth;; d--) {\n let parent = $pos.node(d);\n if (dir > 0 ? $pos.indexAfter(d) < parent.childCount : $pos.index(d) > 0) {\n next = parent.child(dir > 0 ? $pos.indexAfter(d) : $pos.index(d) - 1);\n break;\n }\n else if (d == 0) {\n return null;\n }\n pos += dir;\n let $cur = $pos.doc.resolve(pos);\n if (GapCursor.valid($cur))\n return $cur;\n }\n // And then down into the next node\n for (;;) {\n let inside = dir > 0 ? next.firstChild : next.lastChild;\n if (!inside) {\n if (next.isAtom && !next.isText && !NodeSelection.isSelectable(next)) {\n $pos = $pos.doc.resolve(pos + next.nodeSize * dir);\n mustMove = false;\n continue search;\n }\n break;\n }\n next = inside;\n pos += dir;\n let $cur = $pos.doc.resolve(pos);\n if (GapCursor.valid($cur))\n return $cur;\n }\n return null;\n }\n }\n}\nGapCursor.prototype.visible = false;\nGapCursor.findFrom = GapCursor.findGapCursorFrom;\nSelection.jsonID(\"gapcursor\", GapCursor);\nclass GapBookmark {\n constructor(pos) {\n this.pos = pos;\n }\n map(mapping) {\n return new GapBookmark(mapping.map(this.pos));\n }\n resolve(doc) {\n let $pos = doc.resolve(this.pos);\n return GapCursor.valid($pos) ? new GapCursor($pos) : Selection.near($pos);\n }\n}\nfunction closedBefore($pos) {\n for (let d = $pos.depth; d >= 0; d--) {\n let index = $pos.index(d), parent = $pos.node(d);\n // At the start of this parent, look at next one\n if (index == 0) {\n if (parent.type.spec.isolating)\n return true;\n continue;\n }\n // See if the node before (or its first ancestor) is closed\n for (let before = parent.child(index - 1);; before = before.lastChild) {\n if ((before.childCount == 0 && !before.inlineContent) || before.isAtom || before.type.spec.isolating)\n return true;\n if (before.inlineContent)\n return false;\n }\n }\n // Hit start of document\n return true;\n}\nfunction closedAfter($pos) {\n for (let d = $pos.depth; d >= 0; d--) {\n let index = $pos.indexAfter(d), parent = $pos.node(d);\n if (index == parent.childCount) {\n if (parent.type.spec.isolating)\n return true;\n continue;\n }\n for (let after = parent.child(index);; after = after.firstChild) {\n if ((after.childCount == 0 && !after.inlineContent) || after.isAtom || after.type.spec.isolating)\n return true;\n if (after.inlineContent)\n return false;\n }\n }\n return true;\n}\n\n/**\nCreate a gap cursor plugin. When enabled, this will capture clicks\nnear and arrow-key-motion past places that don't have a normally\nselectable position nearby, and create a gap cursor selection for\nthem. The cursor is drawn as an element with class\n`ProseMirror-gapcursor`. You can either include\n`style/gapcursor.css` from the package's directory or add your own\nstyles to make it visible.\n*/\nfunction gapCursor() {\n return new Plugin({\n props: {\n decorations: drawGapCursor,\n createSelectionBetween(_view, $anchor, $head) {\n return $anchor.pos == $head.pos && GapCursor.valid($head) ? new GapCursor($head) : null;\n },\n handleClick,\n handleKeyDown,\n handleDOMEvents: { beforeinput: beforeinput }\n }\n });\n}\nconst handleKeyDown = keydownHandler({\n \"ArrowLeft\": arrow(\"horiz\", -1),\n \"ArrowRight\": arrow(\"horiz\", 1),\n \"ArrowUp\": arrow(\"vert\", -1),\n \"ArrowDown\": arrow(\"vert\", 1)\n});\nfunction arrow(axis, dir) {\n const dirStr = axis == \"vert\" ? (dir > 0 ? \"down\" : \"up\") : (dir > 0 ? \"right\" : \"left\");\n return function (state, dispatch, view) {\n let sel = state.selection;\n let $start = dir > 0 ? sel.$to : sel.$from, mustMove = sel.empty;\n if (sel instanceof TextSelection) {\n if (!view.endOfTextblock(dirStr) || $start.depth == 0)\n return false;\n mustMove = false;\n $start = state.doc.resolve(dir > 0 ? $start.after() : $start.before());\n }\n let $found = GapCursor.findGapCursorFrom($start, dir, mustMove);\n if (!$found)\n return false;\n if (dispatch)\n dispatch(state.tr.setSelection(new GapCursor($found)));\n return true;\n };\n}\nfunction handleClick(view, pos, event) {\n if (!view || !view.editable)\n return false;\n let $pos = view.state.doc.resolve(pos);\n if (!GapCursor.valid($pos))\n return false;\n let clickPos = view.posAtCoords({ left: event.clientX, top: event.clientY });\n if (clickPos && clickPos.inside > -1 && NodeSelection.isSelectable(view.state.doc.nodeAt(clickPos.inside)))\n return false;\n view.dispatch(view.state.tr.setSelection(new GapCursor($pos)));\n return true;\n}\n// This is a hack that, when a composition starts while a gap cursor\n// is active, quickly creates an inline context for the composition to\n// happen in, to avoid it being aborted by the DOM selection being\n// moved into a valid position.\nfunction beforeinput(view, event) {\n if (event.inputType != \"insertCompositionText\" || !(view.state.selection instanceof GapCursor))\n return false;\n let { $from } = view.state.selection;\n let insert = $from.parent.contentMatchAt($from.index()).findWrapping(view.state.schema.nodes.text);\n if (!insert)\n return false;\n let frag = Fragment.empty;\n for (let i = insert.length - 1; i >= 0; i--)\n frag = Fragment.from(insert[i].createAndFill(null, frag));\n let tr = view.state.tr.replace($from.pos, $from.pos, new Slice(frag, 0, 0));\n tr.setSelection(TextSelection.near(tr.doc.resolve($from.pos + 1)));\n view.dispatch(tr);\n return false;\n}\nfunction drawGapCursor(state) {\n if (!(state.selection instanceof GapCursor))\n return null;\n let node = document.createElement(\"div\");\n node.className = \"ProseMirror-gapcursor\";\n return DecorationSet.create(state.doc, [Decoration.widget(state.selection.head, node, { key: \"gapcursor\" })]);\n}\n\nexport { GapCursor, gapCursor };\n","export default function crelt() {\n var elt = arguments[0]\n if (typeof elt == \"string\") elt = document.createElement(elt)\n var i = 1, next = arguments[1]\n if (next && typeof next == \"object\" && next.nodeType == null && !Array.isArray(next)) {\n for (var name in next) if (Object.prototype.hasOwnProperty.call(next, name)) {\n var value = next[name]\n if (typeof value == \"string\") elt.setAttribute(name, value)\n else if (value != null) elt[name] = value\n }\n i++\n }\n for (; i < arguments.length; i++) add(elt, arguments[i])\n return elt\n}\n\nfunction add(elt, child) {\n if (typeof child == \"string\") {\n elt.appendChild(document.createTextNode(child))\n } else if (child == null) {\n } else if (child.nodeType != null) {\n elt.appendChild(child)\n } else if (Array.isArray(child)) {\n for (var i = 0; i < child.length; i++) add(elt, child[i])\n } else {\n throw new RangeError(\"Unsupported child node: \" + child)\n }\n}\n","import { liftTarget, replaceStep, ReplaceStep, canJoin, joinPoint, canSplit, ReplaceAroundStep, findWrapping } from 'prosemirror-transform';\nimport { Slice, Fragment } from 'prosemirror-model';\nimport { NodeSelection, Selection, TextSelection, AllSelection, SelectionRange } from 'prosemirror-state';\n\n/**\nDelete the selection, if there is one.\n*/\nconst deleteSelection = (state, dispatch) => {\n if (state.selection.empty)\n return false;\n if (dispatch)\n dispatch(state.tr.deleteSelection().scrollIntoView());\n return true;\n};\nfunction atBlockStart(state, view) {\n let { $cursor } = state.selection;\n if (!$cursor || (view ? !view.endOfTextblock(\"backward\", state)\n : $cursor.parentOffset > 0))\n return null;\n return $cursor;\n}\n/**\nIf the selection is empty and at the start of a textblock, try to\nreduce the distance between that block and the one before it—if\nthere's a block directly before it that can be joined, join them.\nIf not, try to move the selected block closer to the next one in\nthe document structure by lifting it out of its parent or moving it\ninto a parent of the previous block. Will use the view for accurate\n(bidi-aware) start-of-textblock detection if given.\n*/\nconst joinBackward = (state, dispatch, view) => {\n let $cursor = atBlockStart(state, view);\n if (!$cursor)\n return false;\n let $cut = findCutBefore($cursor);\n // If there is no node before this, try to lift\n if (!$cut) {\n let range = $cursor.blockRange(), target = range && liftTarget(range);\n if (target == null)\n return false;\n if (dispatch)\n dispatch(state.tr.lift(range, target).scrollIntoView());\n return true;\n }\n let before = $cut.nodeBefore;\n // Apply the joining algorithm\n if (deleteBarrier(state, $cut, dispatch, -1))\n return true;\n // If the node below has no content and the node above is\n // selectable, delete the node below and select the one above.\n if ($cursor.parent.content.size == 0 &&\n (textblockAt(before, \"end\") || NodeSelection.isSelectable(before))) {\n for (let depth = $cursor.depth;; depth--) {\n let delStep = replaceStep(state.doc, $cursor.before(depth), $cursor.after(depth), Slice.empty);\n if (delStep && delStep.slice.size < delStep.to - delStep.from) {\n if (dispatch) {\n let tr = state.tr.step(delStep);\n tr.setSelection(textblockAt(before, \"end\")\n ? Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos, -1)), -1)\n : NodeSelection.create(tr.doc, $cut.pos - before.nodeSize));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n if (depth == 1 || $cursor.node(depth - 1).childCount > 1)\n break;\n }\n }\n // If the node before is an atom, delete it\n if (before.isAtom && $cut.depth == $cursor.depth - 1) {\n if (dispatch)\n dispatch(state.tr.delete($cut.pos - before.nodeSize, $cut.pos).scrollIntoView());\n return true;\n }\n return false;\n};\n/**\nA more limited form of [`joinBackward`]($commands.joinBackward)\nthat only tries to join the current textblock to the one before\nit, if the cursor is at the start of a textblock.\n*/\nconst joinTextblockBackward = (state, dispatch, view) => {\n let $cursor = atBlockStart(state, view);\n if (!$cursor)\n return false;\n let $cut = findCutBefore($cursor);\n return $cut ? joinTextblocksAround(state, $cut, dispatch) : false;\n};\n/**\nA more limited form of [`joinForward`]($commands.joinForward)\nthat only tries to join the current textblock to the one after\nit, if the cursor is at the end of a textblock.\n*/\nconst joinTextblockForward = (state, dispatch, view) => {\n let $cursor = atBlockEnd(state, view);\n if (!$cursor)\n return false;\n let $cut = findCutAfter($cursor);\n return $cut ? joinTextblocksAround(state, $cut, dispatch) : false;\n};\nfunction joinTextblocksAround(state, $cut, dispatch) {\n let before = $cut.nodeBefore, beforeText = before, beforePos = $cut.pos - 1;\n for (; !beforeText.isTextblock; beforePos--) {\n if (beforeText.type.spec.isolating)\n return false;\n let child = beforeText.lastChild;\n if (!child)\n return false;\n beforeText = child;\n }\n let after = $cut.nodeAfter, afterText = after, afterPos = $cut.pos + 1;\n for (; !afterText.isTextblock; afterPos++) {\n if (afterText.type.spec.isolating)\n return false;\n let child = afterText.firstChild;\n if (!child)\n return false;\n afterText = child;\n }\n let step = replaceStep(state.doc, beforePos, afterPos, Slice.empty);\n if (!step || step.from != beforePos ||\n step instanceof ReplaceStep && step.slice.size >= afterPos - beforePos)\n return false;\n if (dispatch) {\n let tr = state.tr.step(step);\n tr.setSelection(TextSelection.create(tr.doc, beforePos));\n dispatch(tr.scrollIntoView());\n }\n return true;\n}\nfunction textblockAt(node, side, only = false) {\n for (let scan = node; scan; scan = (side == \"start\" ? scan.firstChild : scan.lastChild)) {\n if (scan.isTextblock)\n return true;\n if (only && scan.childCount != 1)\n return false;\n }\n return false;\n}\n/**\nWhen the selection is empty and at the start of a textblock, select\nthe node before that textblock, if possible. This is intended to be\nbound to keys like backspace, after\n[`joinBackward`](https://prosemirror.net/docs/ref/#commands.joinBackward) or other deleting\ncommands, as a fall-back behavior when the schema doesn't allow\ndeletion at the selected point.\n*/\nconst selectNodeBackward = (state, dispatch, view) => {\n let { $head, empty } = state.selection, $cut = $head;\n if (!empty)\n return false;\n if ($head.parent.isTextblock) {\n if (view ? !view.endOfTextblock(\"backward\", state) : $head.parentOffset > 0)\n return false;\n $cut = findCutBefore($head);\n }\n let node = $cut && $cut.nodeBefore;\n if (!node || !NodeSelection.isSelectable(node))\n return false;\n if (dispatch)\n dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos - node.nodeSize)).scrollIntoView());\n return true;\n};\nfunction findCutBefore($pos) {\n if (!$pos.parent.type.spec.isolating)\n for (let i = $pos.depth - 1; i >= 0; i--) {\n if ($pos.index(i) > 0)\n return $pos.doc.resolve($pos.before(i + 1));\n if ($pos.node(i).type.spec.isolating)\n break;\n }\n return null;\n}\nfunction atBlockEnd(state, view) {\n let { $cursor } = state.selection;\n if (!$cursor || (view ? !view.endOfTextblock(\"forward\", state)\n : $cursor.parentOffset < $cursor.parent.content.size))\n return null;\n return $cursor;\n}\n/**\nIf the selection is empty and the cursor is at the end of a\ntextblock, try to reduce or remove the boundary between that block\nand the one after it, either by joining them or by moving the other\nblock closer to this one in the tree structure. Will use the view\nfor accurate start-of-textblock detection if given.\n*/\nconst joinForward = (state, dispatch, view) => {\n let $cursor = atBlockEnd(state, view);\n if (!$cursor)\n return false;\n let $cut = findCutAfter($cursor);\n // If there is no node after this, there's nothing to do\n if (!$cut)\n return false;\n let after = $cut.nodeAfter;\n // Try the joining algorithm\n if (deleteBarrier(state, $cut, dispatch, 1))\n return true;\n // If the node above has no content and the node below is\n // selectable, delete the node above and select the one below.\n if ($cursor.parent.content.size == 0 &&\n (textblockAt(after, \"start\") || NodeSelection.isSelectable(after))) {\n let delStep = replaceStep(state.doc, $cursor.before(), $cursor.after(), Slice.empty);\n if (delStep && delStep.slice.size < delStep.to - delStep.from) {\n if (dispatch) {\n let tr = state.tr.step(delStep);\n tr.setSelection(textblockAt(after, \"start\") ? Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos)), 1)\n : NodeSelection.create(tr.doc, tr.mapping.map($cut.pos)));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n }\n // If the next node is an atom, delete it\n if (after.isAtom && $cut.depth == $cursor.depth - 1) {\n if (dispatch)\n dispatch(state.tr.delete($cut.pos, $cut.pos + after.nodeSize).scrollIntoView());\n return true;\n }\n return false;\n};\n/**\nWhen the selection is empty and at the end of a textblock, select\nthe node coming after that textblock, if possible. This is intended\nto be bound to keys like delete, after\n[`joinForward`](https://prosemirror.net/docs/ref/#commands.joinForward) and similar deleting\ncommands, to provide a fall-back behavior when the schema doesn't\nallow deletion at the selected point.\n*/\nconst selectNodeForward = (state, dispatch, view) => {\n let { $head, empty } = state.selection, $cut = $head;\n if (!empty)\n return false;\n if ($head.parent.isTextblock) {\n if (view ? !view.endOfTextblock(\"forward\", state) : $head.parentOffset < $head.parent.content.size)\n return false;\n $cut = findCutAfter($head);\n }\n let node = $cut && $cut.nodeAfter;\n if (!node || !NodeSelection.isSelectable(node))\n return false;\n if (dispatch)\n dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos)).scrollIntoView());\n return true;\n};\nfunction findCutAfter($pos) {\n if (!$pos.parent.type.spec.isolating)\n for (let i = $pos.depth - 1; i >= 0; i--) {\n let parent = $pos.node(i);\n if ($pos.index(i) + 1 < parent.childCount)\n return $pos.doc.resolve($pos.after(i + 1));\n if (parent.type.spec.isolating)\n break;\n }\n return null;\n}\n/**\nJoin the selected block or, if there is a text selection, the\nclosest ancestor block of the selection that can be joined, with\nthe sibling above it.\n*/\nconst joinUp = (state, dispatch) => {\n let sel = state.selection, nodeSel = sel instanceof NodeSelection, point;\n if (nodeSel) {\n if (sel.node.isTextblock || !canJoin(state.doc, sel.from))\n return false;\n point = sel.from;\n }\n else {\n point = joinPoint(state.doc, sel.from, -1);\n if (point == null)\n return false;\n }\n if (dispatch) {\n let tr = state.tr.join(point);\n if (nodeSel)\n tr.setSelection(NodeSelection.create(tr.doc, point - state.doc.resolve(point).nodeBefore.nodeSize));\n dispatch(tr.scrollIntoView());\n }\n return true;\n};\n/**\nJoin the selected block, or the closest ancestor of the selection\nthat can be joined, with the sibling after it.\n*/\nconst joinDown = (state, dispatch) => {\n let sel = state.selection, point;\n if (sel instanceof NodeSelection) {\n if (sel.node.isTextblock || !canJoin(state.doc, sel.to))\n return false;\n point = sel.to;\n }\n else {\n point = joinPoint(state.doc, sel.to, 1);\n if (point == null)\n return false;\n }\n if (dispatch)\n dispatch(state.tr.join(point).scrollIntoView());\n return true;\n};\n/**\nLift the selected block, or the closest ancestor block of the\nselection that can be lifted, out of its parent node.\n*/\nconst lift = (state, dispatch) => {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to), target = range && liftTarget(range);\n if (target == null)\n return false;\n if (dispatch)\n dispatch(state.tr.lift(range, target).scrollIntoView());\n return true;\n};\n/**\nIf the selection is in a node whose type has a truthy\n[`code`](https://prosemirror.net/docs/ref/#model.NodeSpec.code) property in its spec, replace the\nselection with a newline character.\n*/\nconst newlineInCode = (state, dispatch) => {\n let { $head, $anchor } = state.selection;\n if (!$head.parent.type.spec.code || !$head.sameParent($anchor))\n return false;\n if (dispatch)\n dispatch(state.tr.insertText(\"\\n\").scrollIntoView());\n return true;\n};\nfunction defaultBlockAt(match) {\n for (let i = 0; i < match.edgeCount; i++) {\n let { type } = match.edge(i);\n if (type.isTextblock && !type.hasRequiredAttrs())\n return type;\n }\n return null;\n}\n/**\nWhen the selection is in a node with a truthy\n[`code`](https://prosemirror.net/docs/ref/#model.NodeSpec.code) property in its spec, create a\ndefault block after the code block, and move the cursor there.\n*/\nconst exitCode = (state, dispatch) => {\n let { $head, $anchor } = state.selection;\n if (!$head.parent.type.spec.code || !$head.sameParent($anchor))\n return false;\n let above = $head.node(-1), after = $head.indexAfter(-1), type = defaultBlockAt(above.contentMatchAt(after));\n if (!type || !above.canReplaceWith(after, after, type))\n return false;\n if (dispatch) {\n let pos = $head.after(), tr = state.tr.replaceWith(pos, pos, type.createAndFill());\n tr.setSelection(Selection.near(tr.doc.resolve(pos), 1));\n dispatch(tr.scrollIntoView());\n }\n return true;\n};\n/**\nIf a block node is selected, create an empty paragraph before (if\nit is its parent's first child) or after it.\n*/\nconst createParagraphNear = (state, dispatch) => {\n let sel = state.selection, { $from, $to } = sel;\n if (sel instanceof AllSelection || $from.parent.inlineContent || $to.parent.inlineContent)\n return false;\n let type = defaultBlockAt($to.parent.contentMatchAt($to.indexAfter()));\n if (!type || !type.isTextblock)\n return false;\n if (dispatch) {\n let side = (!$from.parentOffset && $to.index() < $to.parent.childCount ? $from : $to).pos;\n let tr = state.tr.insert(side, type.createAndFill());\n tr.setSelection(TextSelection.create(tr.doc, side + 1));\n dispatch(tr.scrollIntoView());\n }\n return true;\n};\n/**\nIf the cursor is in an empty textblock that can be lifted, lift the\nblock.\n*/\nconst liftEmptyBlock = (state, dispatch) => {\n let { $cursor } = state.selection;\n if (!$cursor || $cursor.parent.content.size)\n return false;\n if ($cursor.depth > 1 && $cursor.after() != $cursor.end(-1)) {\n let before = $cursor.before();\n if (canSplit(state.doc, before)) {\n if (dispatch)\n dispatch(state.tr.split(before).scrollIntoView());\n return true;\n }\n }\n let range = $cursor.blockRange(), target = range && liftTarget(range);\n if (target == null)\n return false;\n if (dispatch)\n dispatch(state.tr.lift(range, target).scrollIntoView());\n return true;\n};\n/**\nCreate a variant of [`splitBlock`](https://prosemirror.net/docs/ref/#commands.splitBlock) that uses\na custom function to determine the type of the newly split off block.\n*/\nfunction splitBlockAs(splitNode) {\n return (state, dispatch) => {\n let { $from, $to } = state.selection;\n if (state.selection instanceof NodeSelection && state.selection.node.isBlock) {\n if (!$from.parentOffset || !canSplit(state.doc, $from.pos))\n return false;\n if (dispatch)\n dispatch(state.tr.split($from.pos).scrollIntoView());\n return true;\n }\n if (!$from.parent.isBlock)\n return false;\n if (dispatch) {\n let atEnd = $to.parentOffset == $to.parent.content.size;\n let tr = state.tr;\n if (state.selection instanceof TextSelection || state.selection instanceof AllSelection)\n tr.deleteSelection();\n let deflt = $from.depth == 0 ? null : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1)));\n let splitType = splitNode && splitNode($to.parent, atEnd, $from);\n let types = splitType ? [splitType] : atEnd && deflt ? [{ type: deflt }] : undefined;\n let can = canSplit(tr.doc, tr.mapping.map($from.pos), 1, types);\n if (!types && !can && canSplit(tr.doc, tr.mapping.map($from.pos), 1, deflt ? [{ type: deflt }] : undefined)) {\n if (deflt)\n types = [{ type: deflt }];\n can = true;\n }\n if (can) {\n tr.split(tr.mapping.map($from.pos), 1, types);\n if (!atEnd && !$from.parentOffset && $from.parent.type != deflt) {\n let first = tr.mapping.map($from.before()), $first = tr.doc.resolve(first);\n if (deflt && $from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt))\n tr.setNodeMarkup(tr.mapping.map($from.before()), deflt);\n }\n }\n dispatch(tr.scrollIntoView());\n }\n return true;\n };\n}\n/**\nSplit the parent block of the selection. If the selection is a text\nselection, also delete its content.\n*/\nconst splitBlock = splitBlockAs();\n/**\nActs like [`splitBlock`](https://prosemirror.net/docs/ref/#commands.splitBlock), but without\nresetting the set of active marks at the cursor.\n*/\nconst splitBlockKeepMarks = (state, dispatch) => {\n return splitBlock(state, dispatch && (tr => {\n let marks = state.storedMarks || (state.selection.$to.parentOffset && state.selection.$from.marks());\n if (marks)\n tr.ensureMarks(marks);\n dispatch(tr);\n }));\n};\n/**\nMove the selection to the node wrapping the current selection, if\nany. (Will not select the document node.)\n*/\nconst selectParentNode = (state, dispatch) => {\n let { $from, to } = state.selection, pos;\n let same = $from.sharedDepth(to);\n if (same == 0)\n return false;\n pos = $from.before(same);\n if (dispatch)\n dispatch(state.tr.setSelection(NodeSelection.create(state.doc, pos)));\n return true;\n};\n/**\nSelect the whole document.\n*/\nconst selectAll = (state, dispatch) => {\n if (dispatch)\n dispatch(state.tr.setSelection(new AllSelection(state.doc)));\n return true;\n};\nfunction joinMaybeClear(state, $pos, dispatch) {\n let before = $pos.nodeBefore, after = $pos.nodeAfter, index = $pos.index();\n if (!before || !after || !before.type.compatibleContent(after.type))\n return false;\n if (!before.content.size && $pos.parent.canReplace(index - 1, index)) {\n if (dispatch)\n dispatch(state.tr.delete($pos.pos - before.nodeSize, $pos.pos).scrollIntoView());\n return true;\n }\n if (!$pos.parent.canReplace(index, index + 1) || !(after.isTextblock || canJoin(state.doc, $pos.pos)))\n return false;\n if (dispatch)\n dispatch(state.tr\n .clearIncompatible($pos.pos, before.type, before.contentMatchAt(before.childCount))\n .join($pos.pos)\n .scrollIntoView());\n return true;\n}\nfunction deleteBarrier(state, $cut, dispatch, dir) {\n let before = $cut.nodeBefore, after = $cut.nodeAfter, conn, match;\n let isolated = before.type.spec.isolating || after.type.spec.isolating;\n if (!isolated && joinMaybeClear(state, $cut, dispatch))\n return true;\n let canDelAfter = !isolated && $cut.parent.canReplace($cut.index(), $cut.index() + 1);\n if (canDelAfter &&\n (conn = (match = before.contentMatchAt(before.childCount)).findWrapping(after.type)) &&\n match.matchType(conn[0] || after.type).validEnd) {\n if (dispatch) {\n let end = $cut.pos + after.nodeSize, wrap = Fragment.empty;\n for (let i = conn.length - 1; i >= 0; i--)\n wrap = Fragment.from(conn[i].create(null, wrap));\n wrap = Fragment.from(before.copy(wrap));\n let tr = state.tr.step(new ReplaceAroundStep($cut.pos - 1, end, $cut.pos, end, new Slice(wrap, 1, 0), conn.length, true));\n let joinAt = end + 2 * conn.length;\n if (canJoin(tr.doc, joinAt))\n tr.join(joinAt);\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n let selAfter = after.type.spec.isolating || (dir > 0 && isolated) ? null : Selection.findFrom($cut, 1);\n let range = selAfter && selAfter.$from.blockRange(selAfter.$to), target = range && liftTarget(range);\n if (target != null && target >= $cut.depth) {\n if (dispatch)\n dispatch(state.tr.lift(range, target).scrollIntoView());\n return true;\n }\n if (canDelAfter && textblockAt(after, \"start\", true) && textblockAt(before, \"end\")) {\n let at = before, wrap = [];\n for (;;) {\n wrap.push(at);\n if (at.isTextblock)\n break;\n at = at.lastChild;\n }\n let afterText = after, afterDepth = 1;\n for (; !afterText.isTextblock; afterText = afterText.firstChild)\n afterDepth++;\n if (at.canReplace(at.childCount, at.childCount, afterText.content)) {\n if (dispatch) {\n let end = Fragment.empty;\n for (let i = wrap.length - 1; i >= 0; i--)\n end = Fragment.from(wrap[i].copy(end));\n let tr = state.tr.step(new ReplaceAroundStep($cut.pos - wrap.length, $cut.pos + after.nodeSize, $cut.pos + afterDepth, $cut.pos + after.nodeSize - afterDepth, new Slice(end, wrap.length, 0), 0, true));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n }\n return false;\n}\nfunction selectTextblockSide(side) {\n return function (state, dispatch) {\n let sel = state.selection, $pos = side < 0 ? sel.$from : sel.$to;\n let depth = $pos.depth;\n while ($pos.node(depth).isInline) {\n if (!depth)\n return false;\n depth--;\n }\n if (!$pos.node(depth).isTextblock)\n return false;\n if (dispatch)\n dispatch(state.tr.setSelection(TextSelection.create(state.doc, side < 0 ? $pos.start(depth) : $pos.end(depth))));\n return true;\n };\n}\n/**\nMoves the cursor to the start of current text block.\n*/\nconst selectTextblockStart = selectTextblockSide(-1);\n/**\nMoves the cursor to the end of current text block.\n*/\nconst selectTextblockEnd = selectTextblockSide(1);\n// Parameterized commands\n/**\nWrap the selection in a node of the given type with the given\nattributes.\n*/\nfunction wrapIn(nodeType, attrs = null) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to), wrapping = range && findWrapping(range, nodeType, attrs);\n if (!wrapping)\n return false;\n if (dispatch)\n dispatch(state.tr.wrap(range, wrapping).scrollIntoView());\n return true;\n };\n}\n/**\nReturns a command that tries to set the selected textblocks to the\ngiven node type with the given attributes.\n*/\nfunction setBlockType(nodeType, attrs = null) {\n return function (state, dispatch) {\n let applicable = false;\n for (let i = 0; i < state.selection.ranges.length && !applicable; i++) {\n let { $from: { pos: from }, $to: { pos: to } } = state.selection.ranges[i];\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (applicable)\n return false;\n if (!node.isTextblock || node.hasMarkup(nodeType, attrs))\n return;\n if (node.type == nodeType) {\n applicable = true;\n }\n else {\n let $pos = state.doc.resolve(pos), index = $pos.index();\n applicable = $pos.parent.canReplaceWith(index, index + 1, nodeType);\n }\n });\n }\n if (!applicable)\n return false;\n if (dispatch) {\n let tr = state.tr;\n for (let i = 0; i < state.selection.ranges.length; i++) {\n let { $from: { pos: from }, $to: { pos: to } } = state.selection.ranges[i];\n tr.setBlockType(from, to, nodeType, attrs);\n }\n dispatch(tr.scrollIntoView());\n }\n return true;\n };\n}\nfunction markApplies(doc, ranges, type, enterAtoms) {\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n let can = $from.depth == 0 ? doc.inlineContent && doc.type.allowsMarkType(type) : false;\n doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\n if (can || !enterAtoms && node.isAtom && node.isInline && pos >= $from.pos && pos + node.nodeSize <= $to.pos)\n return false;\n can = node.inlineContent && node.type.allowsMarkType(type);\n });\n if (can)\n return true;\n }\n return false;\n}\nfunction removeInlineAtoms(ranges) {\n let result = [];\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n $from.doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\n if (node.isAtom && node.content.size && node.isInline && pos >= $from.pos && pos + node.nodeSize <= $to.pos) {\n if (pos + 1 > $from.pos)\n result.push(new SelectionRange($from, $from.doc.resolve(pos + 1)));\n $from = $from.doc.resolve(pos + 1 + node.content.size);\n return false;\n }\n });\n if ($from.pos < $to.pos)\n result.push(new SelectionRange($from, $to));\n }\n return result;\n}\n/**\nCreate a command function that toggles the given mark with the\ngiven attributes. Will return `false` when the current selection\ndoesn't support that mark. This will remove the mark if any marks\nof that type exist in the selection, or add it otherwise. If the\nselection is empty, this applies to the [stored\nmarks](https://prosemirror.net/docs/ref/#state.EditorState.storedMarks) instead of a range of the\ndocument.\n*/\nfunction toggleMark(markType, attrs = null, options) {\n let removeWhenPresent = (options && options.removeWhenPresent) !== false;\n let enterAtoms = (options && options.enterInlineAtoms) !== false;\n return function (state, dispatch) {\n let { empty, $cursor, ranges } = state.selection;\n if ((empty && !$cursor) || !markApplies(state.doc, ranges, markType, enterAtoms))\n return false;\n if (dispatch) {\n if ($cursor) {\n if (markType.isInSet(state.storedMarks || $cursor.marks()))\n dispatch(state.tr.removeStoredMark(markType));\n else\n dispatch(state.tr.addStoredMark(markType.create(attrs)));\n }\n else {\n let add, tr = state.tr;\n if (!enterAtoms)\n ranges = removeInlineAtoms(ranges);\n if (removeWhenPresent) {\n add = !ranges.some(r => state.doc.rangeHasMark(r.$from.pos, r.$to.pos, markType));\n }\n else {\n add = !ranges.every(r => {\n let missing = false;\n tr.doc.nodesBetween(r.$from.pos, r.$to.pos, (node, pos, parent) => {\n if (missing)\n return false;\n missing = !markType.isInSet(node.marks) && !!parent && parent.type.allowsMarkType(markType) &&\n !(node.isText && /^\\s*$/.test(node.textBetween(Math.max(0, r.$from.pos - pos), Math.min(node.nodeSize, r.$to.pos - pos))));\n });\n return !missing;\n });\n }\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n if (!add) {\n tr.removeMark($from.pos, $to.pos, markType);\n }\n else {\n let from = $from.pos, to = $to.pos, start = $from.nodeAfter, end = $to.nodeBefore;\n let spaceStart = start && start.isText ? /^\\s*/.exec(start.text)[0].length : 0;\n let spaceEnd = end && end.isText ? /\\s*$/.exec(end.text)[0].length : 0;\n if (from + spaceStart < to) {\n from += spaceStart;\n to -= spaceEnd;\n }\n tr.addMark(from, to, markType.create(attrs));\n }\n }\n dispatch(tr.scrollIntoView());\n }\n }\n return true;\n };\n}\nfunction wrapDispatchForJoin(dispatch, isJoinable) {\n return (tr) => {\n if (!tr.isGeneric)\n return dispatch(tr);\n let ranges = [];\n for (let i = 0; i < tr.mapping.maps.length; i++) {\n let map = tr.mapping.maps[i];\n for (let j = 0; j < ranges.length; j++)\n ranges[j] = map.map(ranges[j]);\n map.forEach((_s, _e, from, to) => ranges.push(from, to));\n }\n // Figure out which joinable points exist inside those ranges,\n // by checking all node boundaries in their parent nodes.\n let joinable = [];\n for (let i = 0; i < ranges.length; i += 2) {\n let from = ranges[i], to = ranges[i + 1];\n let $from = tr.doc.resolve(from), depth = $from.sharedDepth(to), parent = $from.node(depth);\n for (let index = $from.indexAfter(depth), pos = $from.after(depth + 1); pos <= to; ++index) {\n let after = parent.maybeChild(index);\n if (!after)\n break;\n if (index && joinable.indexOf(pos) == -1) {\n let before = parent.child(index - 1);\n if (before.type == after.type && isJoinable(before, after))\n joinable.push(pos);\n }\n pos += after.nodeSize;\n }\n }\n // Join the joinable points\n joinable.sort((a, b) => a - b);\n for (let i = joinable.length - 1; i >= 0; i--) {\n if (canJoin(tr.doc, joinable[i]))\n tr.join(joinable[i]);\n }\n dispatch(tr);\n };\n}\n/**\nWrap a command so that, when it produces a transform that causes\ntwo joinable nodes to end up next to each other, those are joined.\nNodes are considered joinable when they are of the same type and\nwhen the `isJoinable` predicate returns true for them or, if an\narray of strings was passed, if their node type name is in that\narray.\n*/\nfunction autoJoin(command, isJoinable) {\n let canJoin = Array.isArray(isJoinable) ? (node) => isJoinable.indexOf(node.type.name) > -1\n : isJoinable;\n return (state, dispatch, view) => command(state, dispatch && wrapDispatchForJoin(dispatch, canJoin), view);\n}\n/**\nCombine a number of command functions into a single function (which\ncalls them one by one until one returns true).\n*/\nfunction chainCommands(...commands) {\n return function (state, dispatch, view) {\n for (let i = 0; i < commands.length; i++)\n if (commands[i](state, dispatch, view))\n return true;\n return false;\n };\n}\nlet backspace = chainCommands(deleteSelection, joinBackward, selectNodeBackward);\nlet del = chainCommands(deleteSelection, joinForward, selectNodeForward);\n/**\nA basic keymap containing bindings not specific to any schema.\nBinds the following keys (when multiple commands are listed, they\nare chained with [`chainCommands`](https://prosemirror.net/docs/ref/#commands.chainCommands)):\n\n* **Enter** to `newlineInCode`, `createParagraphNear`, `liftEmptyBlock`, `splitBlock`\n* **Mod-Enter** to `exitCode`\n* **Backspace** and **Mod-Backspace** to `deleteSelection`, `joinBackward`, `selectNodeBackward`\n* **Delete** and **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`\n* **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`\n* **Mod-a** to `selectAll`\n*/\nconst pcBaseKeymap = {\n \"Enter\": chainCommands(newlineInCode, createParagraphNear, liftEmptyBlock, splitBlock),\n \"Mod-Enter\": exitCode,\n \"Backspace\": backspace,\n \"Mod-Backspace\": backspace,\n \"Shift-Backspace\": backspace,\n \"Delete\": del,\n \"Mod-Delete\": del,\n \"Mod-a\": selectAll\n};\n/**\nA copy of `pcBaseKeymap` that also binds **Ctrl-h** like Backspace,\n**Ctrl-d** like Delete, **Alt-Backspace** like Ctrl-Backspace, and\n**Ctrl-Alt-Backspace**, **Alt-Delete**, and **Alt-d** like\nCtrl-Delete.\n*/\nconst macBaseKeymap = {\n \"Ctrl-h\": pcBaseKeymap[\"Backspace\"],\n \"Alt-Backspace\": pcBaseKeymap[\"Mod-Backspace\"],\n \"Ctrl-d\": pcBaseKeymap[\"Delete\"],\n \"Ctrl-Alt-Backspace\": pcBaseKeymap[\"Mod-Delete\"],\n \"Alt-Delete\": pcBaseKeymap[\"Mod-Delete\"],\n \"Alt-d\": pcBaseKeymap[\"Mod-Delete\"],\n \"Ctrl-a\": selectTextblockStart,\n \"Ctrl-e\": selectTextblockEnd\n};\nfor (let key in pcBaseKeymap)\n macBaseKeymap[key] = pcBaseKeymap[key];\nconst mac = typeof navigator != \"undefined\" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform)\n // @ts-ignore\n : typeof os != \"undefined\" && os.platform ? os.platform() == \"darwin\" : false;\n/**\nDepending on the detected platform, this will hold\n[`pcBasekeymap`](https://prosemirror.net/docs/ref/#commands.pcBaseKeymap) or\n[`macBaseKeymap`](https://prosemirror.net/docs/ref/#commands.macBaseKeymap).\n*/\nconst baseKeymap = mac ? macBaseKeymap : pcBaseKeymap;\n\nexport { autoJoin, baseKeymap, chainCommands, createParagraphNear, deleteSelection, exitCode, joinBackward, joinDown, joinForward, joinTextblockBackward, joinTextblockForward, joinUp, lift, liftEmptyBlock, macBaseKeymap, newlineInCode, pcBaseKeymap, selectAll, selectNodeBackward, selectNodeForward, selectParentNode, selectTextblockEnd, selectTextblockStart, setBlockType, splitBlock, splitBlockAs, splitBlockKeepMarks, toggleMark, wrapIn };\n","import crel from 'crelt';\nimport { joinUp, lift, selectParentNode, setBlockType, wrapIn } from 'prosemirror-commands';\nimport { undo, redo } from 'prosemirror-history';\nimport { Plugin } from 'prosemirror-state';\n\nconst SVG = \"http://www.w3.org/2000/svg\";\nconst XLINK = \"http://www.w3.org/1999/xlink\";\nconst prefix$2 = \"ProseMirror-icon\";\nfunction hashPath(path) {\n let hash = 0;\n for (let i = 0; i < path.length; i++)\n hash = (((hash << 5) - hash) + path.charCodeAt(i)) | 0;\n return hash;\n}\nfunction getIcon(root, icon) {\n let doc = (root.nodeType == 9 ? root : root.ownerDocument) || document;\n let node = doc.createElement(\"div\");\n node.className = prefix$2;\n if (icon.path) {\n let { path, width, height } = icon;\n let name = \"pm-icon-\" + hashPath(path).toString(16);\n if (!doc.getElementById(name))\n buildSVG(root, name, icon);\n let svg = node.appendChild(doc.createElementNS(SVG, \"svg\"));\n svg.style.width = (width / height) + \"em\";\n let use = svg.appendChild(doc.createElementNS(SVG, \"use\"));\n use.setAttributeNS(XLINK, \"href\", /([^#]*)/.exec(doc.location.toString())[1] + \"#\" + name);\n }\n else if (icon.dom) {\n node.appendChild(icon.dom.cloneNode(true));\n }\n else {\n let { text, css } = icon;\n node.appendChild(doc.createElement(\"span\")).textContent = text || '';\n if (css)\n node.firstChild.style.cssText = css;\n }\n return node;\n}\nfunction buildSVG(root, name, data) {\n let [doc, top] = root.nodeType == 9 ? [root, root.body] : [root.ownerDocument || document, root];\n let collection = doc.getElementById(prefix$2 + \"-collection\");\n if (!collection) {\n collection = doc.createElementNS(SVG, \"svg\");\n collection.id = prefix$2 + \"-collection\";\n collection.style.display = \"none\";\n top.insertBefore(collection, top.firstChild);\n }\n let sym = doc.createElementNS(SVG, \"symbol\");\n sym.id = name;\n sym.setAttribute(\"viewBox\", \"0 0 \" + data.width + \" \" + data.height);\n let path = sym.appendChild(doc.createElementNS(SVG, \"path\"));\n path.setAttribute(\"d\", data.path);\n collection.appendChild(sym);\n}\n\nconst prefix$1 = \"ProseMirror-menu\";\n/**\nAn icon or label that, when clicked, executes a command.\n*/\nclass MenuItem {\n /**\n Create a menu item.\n */\n constructor(\n /**\n The spec used to create this item.\n */\n spec) {\n this.spec = spec;\n }\n /**\n Renders the icon according to its [display\n spec](https://prosemirror.net/docs/ref/#menu.MenuItemSpec.display), and adds an event handler which\n executes the command when the representation is clicked.\n */\n render(view) {\n let spec = this.spec;\n let dom = spec.render ? spec.render(view)\n : spec.icon ? getIcon(view.root, spec.icon)\n : spec.label ? crel(\"div\", null, translate(view, spec.label))\n : null;\n if (!dom)\n throw new RangeError(\"MenuItem without icon or label property\");\n if (spec.title) {\n const title = (typeof spec.title === \"function\" ? spec.title(view.state) : spec.title);\n dom.setAttribute(\"title\", translate(view, title));\n }\n if (spec.class)\n dom.classList.add(spec.class);\n if (spec.css)\n dom.style.cssText += spec.css;\n dom.addEventListener(\"mousedown\", e => {\n e.preventDefault();\n if (!dom.classList.contains(prefix$1 + \"-disabled\"))\n spec.run(view.state, view.dispatch, view, e);\n });\n function update(state) {\n if (spec.select) {\n let selected = spec.select(state);\n dom.style.display = selected ? \"\" : \"none\";\n if (!selected)\n return false;\n }\n let enabled = true;\n if (spec.enable) {\n enabled = spec.enable(state) || false;\n setClass(dom, prefix$1 + \"-disabled\", !enabled);\n }\n if (spec.active) {\n let active = enabled && spec.active(state) || false;\n setClass(dom, prefix$1 + \"-active\", active);\n }\n return true;\n }\n return { dom, update };\n }\n}\nfunction translate(view, text) {\n return view._props.translate ? view._props.translate(text) : text;\n}\nlet lastMenuEvent = { time: 0, node: null };\nfunction markMenuEvent(e) {\n lastMenuEvent.time = Date.now();\n lastMenuEvent.node = e.target;\n}\nfunction isMenuEvent(wrapper) {\n return Date.now() - 100 < lastMenuEvent.time &&\n lastMenuEvent.node && wrapper.contains(lastMenuEvent.node);\n}\n/**\nA drop-down menu, displayed as a label with a downwards-pointing\ntriangle to the right of it.\n*/\nclass Dropdown {\n /**\n Create a dropdown wrapping the elements.\n */\n constructor(content, \n /**\n @internal\n */\n options = {}) {\n this.options = options;\n this.options = options || {};\n this.content = Array.isArray(content) ? content : [content];\n }\n /**\n Render the dropdown menu and sub-items.\n */\n render(view) {\n let content = renderDropdownItems(this.content, view);\n let win = view.dom.ownerDocument.defaultView || window;\n let label = crel(\"div\", { class: prefix$1 + \"-dropdown \" + (this.options.class || \"\"),\n style: this.options.css }, translate(view, this.options.label || \"\"));\n if (this.options.title)\n label.setAttribute(\"title\", translate(view, this.options.title));\n let wrap = crel(\"div\", { class: prefix$1 + \"-dropdown-wrap\" }, label);\n let open = null;\n let listeningOnClose = null;\n let close = () => {\n if (open && open.close()) {\n open = null;\n win.removeEventListener(\"mousedown\", listeningOnClose);\n }\n };\n label.addEventListener(\"mousedown\", e => {\n e.preventDefault();\n markMenuEvent(e);\n if (open) {\n close();\n }\n else {\n open = this.expand(wrap, content.dom);\n win.addEventListener(\"mousedown\", listeningOnClose = () => {\n if (!isMenuEvent(wrap))\n close();\n });\n }\n });\n function update(state) {\n let inner = content.update(state);\n wrap.style.display = inner ? \"\" : \"none\";\n return inner;\n }\n return { dom: wrap, update };\n }\n /**\n @internal\n */\n expand(dom, items) {\n let menuDOM = crel(\"div\", { class: prefix$1 + \"-dropdown-menu \" + (this.options.class || \"\") }, items);\n let done = false;\n function close() {\n if (done)\n return false;\n done = true;\n dom.removeChild(menuDOM);\n return true;\n }\n dom.appendChild(menuDOM);\n return { close, node: menuDOM };\n }\n}\nfunction renderDropdownItems(items, view) {\n let rendered = [], updates = [];\n for (let i = 0; i < items.length; i++) {\n let { dom, update } = items[i].render(view);\n rendered.push(crel(\"div\", { class: prefix$1 + \"-dropdown-item\" }, dom));\n updates.push(update);\n }\n return { dom: rendered, update: combineUpdates(updates, rendered) };\n}\nfunction combineUpdates(updates, nodes) {\n return (state) => {\n let something = false;\n for (let i = 0; i < updates.length; i++) {\n let up = updates[i](state);\n nodes[i].style.display = up ? \"\" : \"none\";\n if (up)\n something = true;\n }\n return something;\n };\n}\n/**\nRepresents a submenu wrapping a group of elements that start\nhidden and expand to the right when hovered over or tapped.\n*/\nclass DropdownSubmenu {\n /**\n Creates a submenu for the given group of menu elements. The\n following options are recognized:\n */\n constructor(content, \n /**\n @internal\n */\n options = {}) {\n this.options = options;\n this.content = Array.isArray(content) ? content : [content];\n }\n /**\n Renders the submenu.\n */\n render(view) {\n let items = renderDropdownItems(this.content, view);\n let win = view.dom.ownerDocument.defaultView || window;\n let label = crel(\"div\", { class: prefix$1 + \"-submenu-label\" }, translate(view, this.options.label || \"\"));\n let wrap = crel(\"div\", { class: prefix$1 + \"-submenu-wrap\" }, label, crel(\"div\", { class: prefix$1 + \"-submenu\" }, items.dom));\n let listeningOnClose = null;\n label.addEventListener(\"mousedown\", e => {\n e.preventDefault();\n markMenuEvent(e);\n setClass(wrap, prefix$1 + \"-submenu-wrap-active\", false);\n if (!listeningOnClose)\n win.addEventListener(\"mousedown\", listeningOnClose = () => {\n if (!isMenuEvent(wrap)) {\n wrap.classList.remove(prefix$1 + \"-submenu-wrap-active\");\n win.removeEventListener(\"mousedown\", listeningOnClose);\n listeningOnClose = null;\n }\n });\n });\n function update(state) {\n let inner = items.update(state);\n wrap.style.display = inner ? \"\" : \"none\";\n return inner;\n }\n return { dom: wrap, update };\n }\n}\n/**\nRender the given, possibly nested, array of menu elements into a\ndocument fragment, placing separators between them (and ensuring no\nsuperfluous separators appear when some of the groups turn out to\nbe empty).\n*/\nfunction renderGrouped(view, content) {\n let result = document.createDocumentFragment();\n let updates = [], separators = [];\n for (let i = 0; i < content.length; i++) {\n let items = content[i], localUpdates = [], localNodes = [];\n for (let j = 0; j < items.length; j++) {\n let { dom, update } = items[j].render(view);\n let span = crel(\"span\", { class: prefix$1 + \"item\" }, dom);\n result.appendChild(span);\n localNodes.push(span);\n localUpdates.push(update);\n }\n if (localUpdates.length) {\n updates.push(combineUpdates(localUpdates, localNodes));\n if (i < content.length - 1)\n separators.push(result.appendChild(separator()));\n }\n }\n function update(state) {\n let something = false, needSep = false;\n for (let i = 0; i < updates.length; i++) {\n let hasContent = updates[i](state);\n if (i)\n separators[i - 1].style.display = needSep && hasContent ? \"\" : \"none\";\n needSep = hasContent;\n if (hasContent)\n something = true;\n }\n return something;\n }\n return { dom: result, update };\n}\nfunction separator() {\n return crel(\"span\", { class: prefix$1 + \"separator\" });\n}\n/**\nA set of basic editor-related icons. Contains the properties\n`join`, `lift`, `selectParentNode`, `undo`, `redo`, `strong`, `em`,\n`code`, `link`, `bulletList`, `orderedList`, and `blockquote`, each\nholding an object that can be used as the `icon` option to\n`MenuItem`.\n*/\nconst icons = {\n join: {\n width: 800, height: 900,\n path: \"M0 75h800v125h-800z M0 825h800v-125h-800z M250 400h100v-100h100v100h100v100h-100v100h-100v-100h-100z\"\n },\n lift: {\n width: 1024, height: 1024,\n path: \"M219 310v329q0 7-5 12t-12 5q-8 0-13-5l-164-164q-5-5-5-13t5-13l164-164q5-5 13-5 7 0 12 5t5 12zM1024 749v109q0 7-5 12t-12 5h-987q-7 0-12-5t-5-12v-109q0-7 5-12t12-5h987q7 0 12 5t5 12zM1024 530v109q0 7-5 12t-12 5h-621q-7 0-12-5t-5-12v-109q0-7 5-12t12-5h621q7 0 12 5t5 12zM1024 310v109q0 7-5 12t-12 5h-621q-7 0-12-5t-5-12v-109q0-7 5-12t12-5h621q7 0 12 5t5 12zM1024 91v109q0 7-5 12t-12 5h-987q-7 0-12-5t-5-12v-109q0-7 5-12t12-5h987q7 0 12 5t5 12z\"\n },\n selectParentNode: { text: \"\\u2b1a\", css: \"font-weight: bold\" },\n undo: {\n width: 1024, height: 1024,\n path: \"M761 1024c113-206 132-520-313-509v253l-384-384 384-384v248c534-13 594 472 313 775z\"\n },\n redo: {\n width: 1024, height: 1024,\n path: \"M576 248v-248l384 384-384 384v-253c-446-10-427 303-313 509-280-303-221-789 313-775z\"\n },\n strong: {\n width: 805, height: 1024,\n path: \"M317 869q42 18 80 18 214 0 214-191 0-65-23-102-15-25-35-42t-38-26-46-14-48-6-54-1q-41 0-57 5 0 30-0 90t-0 90q0 4-0 38t-0 55 2 47 6 38zM309 442q24 4 62 4 46 0 81-7t62-25 42-51 14-81q0-40-16-70t-45-46-61-24-70-8q-28 0-74 7 0 28 2 86t2 86q0 15-0 45t-0 45q0 26 0 39zM0 950l1-53q8-2 48-9t60-15q4-6 7-15t4-19 3-18 1-21 0-19v-37q0-561-12-585-2-4-12-8t-25-6-28-4-27-2-17-1l-2-47q56-1 194-6t213-5q13 0 39 0t38 0q40 0 78 7t73 24 61 40 42 59 16 78q0 29-9 54t-22 41-36 32-41 25-48 22q88 20 146 76t58 141q0 57-20 102t-53 74-78 48-93 27-100 8q-25 0-75-1t-75-1q-60 0-175 6t-132 6z\"\n },\n em: {\n width: 585, height: 1024,\n path: \"M0 949l9-48q3-1 46-12t63-21q16-20 23-57 0-4 35-165t65-310 29-169v-14q-13-7-31-10t-39-4-33-3l10-58q18 1 68 3t85 4 68 1q27 0 56-1t69-4 56-3q-2 22-10 50-17 5-58 16t-62 19q-4 10-8 24t-5 22-4 26-3 24q-15 84-50 239t-44 203q-1 5-7 33t-11 51-9 47-3 32l0 10q9 2 105 17-1 25-9 56-6 0-18 0t-18 0q-16 0-49-5t-49-5q-78-1-117-1-29 0-81 5t-69 6z\"\n },\n code: {\n width: 896, height: 1024,\n path: \"M608 192l-96 96 224 224-224 224 96 96 288-320-288-320zM288 192l-288 320 288 320 96-96-224-224 224-224-96-96z\"\n },\n link: {\n width: 951, height: 1024,\n path: \"M832 694q0-22-16-38l-118-118q-16-16-38-16-24 0-41 18 1 1 10 10t12 12 8 10 7 14 2 15q0 22-16 38t-38 16q-8 0-15-2t-14-7-10-8-12-12-10-10q-18 17-18 41 0 22 16 38l117 118q15 15 38 15 22 0 38-14l84-83q16-16 16-38zM430 292q0-22-16-38l-117-118q-16-16-38-16-22 0-38 15l-84 83q-16 16-16 38 0 22 16 38l118 118q15 15 38 15 24 0 41-17-1-1-10-10t-12-12-8-10-7-14-2-15q0-22 16-38t38-16q8 0 15 2t14 7 10 8 12 12 10 10q18-17 18-41zM941 694q0 68-48 116l-84 83q-47 47-116 47-69 0-116-48l-117-118q-47-47-47-116 0-70 50-119l-50-50q-49 50-118 50-68 0-116-48l-118-118q-48-48-48-116t48-116l84-83q47-47 116-47 69 0 116 48l117 118q47 47 47 116 0 70-50 119l50 50q49-50 118-50 68 0 116 48l118 118q48 48 48 116z\"\n },\n bulletList: {\n width: 768, height: 896,\n path: \"M0 512h128v-128h-128v128zM0 256h128v-128h-128v128zM0 768h128v-128h-128v128zM256 512h512v-128h-512v128zM256 256h512v-128h-512v128zM256 768h512v-128h-512v128z\"\n },\n orderedList: {\n width: 768, height: 896,\n path: \"M320 512h448v-128h-448v128zM320 768h448v-128h-448v128zM320 128v128h448v-128h-448zM79 384h78v-256h-36l-85 23v50l43-2v185zM189 590c0-36-12-78-96-78-33 0-64 6-83 16l1 66c21-10 42-15 67-15s32 11 32 28c0 26-30 58-110 112v50h192v-67l-91 2c49-30 87-66 87-113l1-1z\"\n },\n blockquote: {\n width: 640, height: 896,\n path: \"M0 448v256h256v-256h-128c0 0 0-128 128-128v-128c0 0-256 0-256 256zM640 320v-128c0 0-256 0-256 256v256h256v-256h-128c0 0 0-128 128-128z\"\n }\n};\n/**\nMenu item for the `joinUp` command.\n*/\nconst joinUpItem = new MenuItem({\n title: \"Join with above block\",\n run: joinUp,\n select: state => joinUp(state),\n icon: icons.join\n});\n/**\nMenu item for the `lift` command.\n*/\nconst liftItem = new MenuItem({\n title: \"Lift out of enclosing block\",\n run: lift,\n select: state => lift(state),\n icon: icons.lift\n});\n/**\nMenu item for the `selectParentNode` command.\n*/\nconst selectParentNodeItem = new MenuItem({\n title: \"Select parent node\",\n run: selectParentNode,\n select: state => selectParentNode(state),\n icon: icons.selectParentNode\n});\n/**\nMenu item for the `undo` command.\n*/\nlet undoItem = new MenuItem({\n title: \"Undo last change\",\n run: undo,\n enable: state => undo(state),\n icon: icons.undo\n});\n/**\nMenu item for the `redo` command.\n*/\nlet redoItem = new MenuItem({\n title: \"Redo last undone change\",\n run: redo,\n enable: state => redo(state),\n icon: icons.redo\n});\n/**\nBuild a menu item for wrapping the selection in a given node type.\nAdds `run` and `select` properties to the ones present in\n`options`. `options.attrs` may be an object that provides\nattributes for the wrapping node.\n*/\nfunction wrapItem(nodeType, options) {\n let passedOptions = {\n run(state, dispatch) {\n return wrapIn(nodeType, options.attrs)(state, dispatch);\n },\n select(state) {\n return wrapIn(nodeType, options.attrs)(state);\n }\n };\n for (let prop in options)\n passedOptions[prop] = options[prop];\n return new MenuItem(passedOptions);\n}\n/**\nBuild a menu item for changing the type of the textblock around the\nselection to the given type. Provides `run`, `active`, and `select`\nproperties. Others must be given in `options`. `options.attrs` may\nbe an object to provide the attributes for the textblock node.\n*/\nfunction blockTypeItem(nodeType, options) {\n let command = setBlockType(nodeType, options.attrs);\n let passedOptions = {\n run: command,\n enable(state) { return command(state); },\n active(state) {\n let { $from, to, node } = state.selection;\n if (node)\n return node.hasMarkup(nodeType, options.attrs);\n return to <= $from.end() && $from.parent.hasMarkup(nodeType, options.attrs);\n }\n };\n for (let prop in options)\n passedOptions[prop] = options[prop];\n return new MenuItem(passedOptions);\n}\n// Work around classList.toggle being broken in IE11\nfunction setClass(dom, cls, on) {\n if (on)\n dom.classList.add(cls);\n else\n dom.classList.remove(cls);\n}\n\nconst prefix = \"ProseMirror-menubar\";\nfunction isIOS() {\n if (typeof navigator == \"undefined\")\n return false;\n let agent = navigator.userAgent;\n return !/Edge\\/\\d/.test(agent) && /AppleWebKit/.test(agent) && /Mobile\\/\\w+/.test(agent);\n}\n/**\nA plugin that will place a menu bar above the editor. Note that\nthis involves wrapping the editor in an additional `<div>`.\n*/\nfunction menuBar(options) {\n return new Plugin({\n view(editorView) { return new MenuBarView(editorView, options); }\n });\n}\nclass MenuBarView {\n constructor(editorView, options) {\n this.editorView = editorView;\n this.options = options;\n this.spacer = null;\n this.maxHeight = 0;\n this.widthForMaxHeight = 0;\n this.floating = false;\n this.scrollHandler = null;\n this.wrapper = crel(\"div\", { class: prefix + \"-wrapper\" });\n this.menu = this.wrapper.appendChild(crel(\"div\", { class: prefix }));\n this.menu.className = prefix;\n if (editorView.dom.parentNode)\n editorView.dom.parentNode.replaceChild(this.wrapper, editorView.dom);\n this.wrapper.appendChild(editorView.dom);\n let { dom, update } = renderGrouped(this.editorView, this.options.content);\n this.contentUpdate = update;\n this.menu.appendChild(dom);\n this.update();\n if (options.floating && !isIOS()) {\n this.updateFloat();\n let potentialScrollers = getAllWrapping(this.wrapper);\n this.scrollHandler = (e) => {\n let root = this.editorView.root;\n if (!(root.body || root).contains(this.wrapper))\n potentialScrollers.forEach(el => el.removeEventListener(\"scroll\", this.scrollHandler));\n else\n this.updateFloat(e.target.getBoundingClientRect ? e.target : undefined);\n };\n potentialScrollers.forEach(el => el.addEventListener('scroll', this.scrollHandler));\n }\n }\n update() {\n this.contentUpdate(this.editorView.state);\n if (this.floating) {\n this.updateScrollCursor();\n }\n else {\n if (this.menu.offsetWidth != this.widthForMaxHeight) {\n this.widthForMaxHeight = this.menu.offsetWidth;\n this.maxHeight = 0;\n }\n if (this.menu.offsetHeight > this.maxHeight) {\n this.maxHeight = this.menu.offsetHeight;\n this.menu.style.minHeight = this.maxHeight + \"px\";\n }\n }\n }\n updateScrollCursor() {\n let selection = this.editorView.root.getSelection();\n if (!selection.focusNode)\n return;\n let rects = selection.getRangeAt(0).getClientRects();\n let selRect = rects[selectionIsInverted(selection) ? 0 : rects.length - 1];\n if (!selRect)\n return;\n let menuRect = this.menu.getBoundingClientRect();\n if (selRect.top < menuRect.bottom && selRect.bottom > menuRect.top) {\n let scrollable = findWrappingScrollable(this.wrapper);\n if (scrollable)\n scrollable.scrollTop -= (menuRect.bottom - selRect.top);\n }\n }\n updateFloat(scrollAncestor) {\n let parent = this.wrapper, editorRect = parent.getBoundingClientRect(), top = scrollAncestor ? Math.max(0, scrollAncestor.getBoundingClientRect().top) : 0;\n if (this.floating) {\n if (editorRect.top >= top || editorRect.bottom < this.menu.offsetHeight + 10) {\n this.floating = false;\n this.menu.style.position = this.menu.style.left = this.menu.style.top = this.menu.style.width = \"\";\n this.menu.style.display = \"\";\n this.spacer.parentNode.removeChild(this.spacer);\n this.spacer = null;\n }\n else {\n let border = (parent.offsetWidth - parent.clientWidth) / 2;\n this.menu.style.left = (editorRect.left + border) + \"px\";\n this.menu.style.display = editorRect.top > (this.editorView.dom.ownerDocument.defaultView || window).innerHeight\n ? \"none\" : \"\";\n if (scrollAncestor)\n this.menu.style.top = top + \"px\";\n }\n }\n else {\n if (editorRect.top < top && editorRect.bottom >= this.menu.offsetHeight + 10) {\n this.floating = true;\n let menuRect = this.menu.getBoundingClientRect();\n this.menu.style.left = menuRect.left + \"px\";\n this.menu.style.width = menuRect.width + \"px\";\n if (scrollAncestor)\n this.menu.style.top = top + \"px\";\n this.menu.style.position = \"fixed\";\n this.spacer = crel(\"div\", { class: prefix + \"-spacer\", style: `height: ${menuRect.height}px` });\n parent.insertBefore(this.spacer, this.menu);\n }\n }\n }\n destroy() {\n if (this.wrapper.parentNode)\n this.wrapper.parentNode.replaceChild(this.editorView.dom, this.wrapper);\n }\n}\n// Not precise, but close enough\nfunction selectionIsInverted(selection) {\n if (selection.anchorNode == selection.focusNode)\n return selection.anchorOffset > selection.focusOffset;\n return selection.anchorNode.compareDocumentPosition(selection.focusNode) == Node.DOCUMENT_POSITION_FOLLOWING;\n}\nfunction findWrappingScrollable(node) {\n for (let cur = node.parentNode; cur; cur = cur.parentNode)\n if (cur.scrollHeight > cur.clientHeight)\n return cur;\n}\nfunction getAllWrapping(node) {\n let res = [node.ownerDocument.defaultView || window];\n for (let cur = node.parentNode; cur; cur = cur.parentNode)\n res.push(cur);\n return res;\n}\n\nexport { Dropdown, DropdownSubmenu, MenuItem, blockTypeItem, icons, joinUpItem, liftItem, menuBar, redoItem, renderGrouped, selectParentNodeItem, undoItem, wrapItem };\n","import { Plugin } from 'prosemirror-state';\nimport { findWrapping, canJoin } from 'prosemirror-transform';\n\n/**\nInput rules are regular expressions describing a piece of text\nthat, when typed, causes something to happen. This might be\nchanging two dashes into an emdash, wrapping a paragraph starting\nwith `\"> \"` into a blockquote, or something entirely different.\n*/\nclass InputRule {\n // :: (RegExp, union<string, (state: EditorState, match: [string], start: number, end: number) → ?Transaction>)\n /**\n Create an input rule. The rule applies when the user typed\n something and the text directly in front of the cursor matches\n `match`, which should end with `$`.\n \n The `handler` can be a string, in which case the matched text, or\n the first matched group in the regexp, is replaced by that\n string.\n \n Or a it can be a function, which will be called with the match\n array produced by\n [`RegExp.exec`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec),\n as well as the start and end of the matched range, and which can\n return a [transaction](https://prosemirror.net/docs/ref/#state.Transaction) that describes the\n rule's effect, or null to indicate the input was not handled.\n */\n constructor(\n /**\n @internal\n */\n match, handler, options = {}) {\n this.match = match;\n this.match = match;\n this.handler = typeof handler == \"string\" ? stringHandler(handler) : handler;\n this.undoable = options.undoable !== false;\n this.inCode = options.inCode || false;\n }\n}\nfunction stringHandler(string) {\n return function (state, match, start, end) {\n let insert = string;\n if (match[1]) {\n let offset = match[0].lastIndexOf(match[1]);\n insert += match[0].slice(offset + match[1].length);\n start += offset;\n let cutOff = start - end;\n if (cutOff > 0) {\n insert = match[0].slice(offset - cutOff, offset) + insert;\n start = end;\n }\n }\n return state.tr.insertText(insert, start, end);\n };\n}\nconst MAX_MATCH = 500;\n/**\nCreate an input rules plugin. When enabled, it will cause text\ninput that matches any of the given rules to trigger the rule's\naction.\n*/\nfunction inputRules({ rules }) {\n let plugin = new Plugin({\n state: {\n init() { return null; },\n apply(tr, prev) {\n let stored = tr.getMeta(this);\n if (stored)\n return stored;\n return tr.selectionSet || tr.docChanged ? null : prev;\n }\n },\n props: {\n handleTextInput(view, from, to, text) {\n return run(view, from, to, text, rules, plugin);\n },\n handleDOMEvents: {\n compositionend: (view) => {\n setTimeout(() => {\n let { $cursor } = view.state.selection;\n if ($cursor)\n run(view, $cursor.pos, $cursor.pos, \"\", rules, plugin);\n });\n }\n }\n },\n isInputRules: true\n });\n return plugin;\n}\nfunction run(view, from, to, text, rules, plugin) {\n if (view.composing)\n return false;\n let state = view.state, $from = state.doc.resolve(from);\n let textBefore = $from.parent.textBetween(Math.max(0, $from.parentOffset - MAX_MATCH), $from.parentOffset, null, \"\\ufffc\") + text;\n for (let i = 0; i < rules.length; i++) {\n let rule = rules[i];\n if ($from.parent.type.spec.code) {\n if (!rule.inCode)\n continue;\n }\n else if (rule.inCode === \"only\") {\n continue;\n }\n let match = rule.match.exec(textBefore);\n let tr = match && rule.handler(state, match, from - (match[0].length - text.length), to);\n if (!tr)\n continue;\n if (rule.undoable)\n tr.setMeta(plugin, { transform: tr, from, to, text });\n view.dispatch(tr);\n return true;\n }\n return false;\n}\n/**\nThis is a command that will undo an input rule, if applying such a\nrule was the last thing that the user did.\n*/\nconst undoInputRule = (state, dispatch) => {\n let plugins = state.plugins;\n for (let i = 0; i < plugins.length; i++) {\n let plugin = plugins[i], undoable;\n if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {\n if (dispatch) {\n let tr = state.tr, toUndo = undoable.transform;\n for (let j = toUndo.steps.length - 1; j >= 0; j--)\n tr.step(toUndo.steps[j].invert(toUndo.docs[j]));\n if (undoable.text) {\n let marks = tr.doc.resolve(undoable.from).marks();\n tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks));\n }\n else {\n tr.delete(undoable.from, undoable.to);\n }\n dispatch(tr);\n }\n return true;\n }\n }\n return false;\n};\n\n/**\nConverts double dashes to an emdash.\n*/\nconst emDash = new InputRule(/--$/, \"—\");\n/**\nConverts three dots to an ellipsis character.\n*/\nconst ellipsis = new InputRule(/\\.\\.\\.$/, \"…\");\n/**\n“Smart†opening double quotes.\n*/\nconst openDoubleQuote = new InputRule(/(?:^|[\\s\\{\\[\\(\\<'\"\\u2018\\u201C])(\")$/, \"“\");\n/**\n“Smart†closing double quotes.\n*/\nconst closeDoubleQuote = new InputRule(/\"$/, \"â€\");\n/**\n“Smart†opening single quotes.\n*/\nconst openSingleQuote = new InputRule(/(?:^|[\\s\\{\\[\\(\\<'\"\\u2018\\u201C])(')$/, \"‘\");\n/**\n“Smart†closing single quotes.\n*/\nconst closeSingleQuote = new InputRule(/'$/, \"’\");\n/**\nSmart-quote related input rules.\n*/\nconst smartQuotes = [openDoubleQuote, closeDoubleQuote, openSingleQuote, closeSingleQuote];\n\n/**\nBuild an input rule for automatically wrapping a textblock when a\ngiven string is typed. The `regexp` argument is\ndirectly passed through to the `InputRule` constructor. You'll\nprobably want the regexp to start with `^`, so that the pattern can\nonly occur at the start of a textblock.\n\n`nodeType` is the type of node to wrap in. If it needs attributes,\nyou can either pass them directly, or pass a function that will\ncompute them from the regular expression match.\n\nBy default, if there's a node with the same type above the newly\nwrapped node, the rule will try to [join](https://prosemirror.net/docs/ref/#transform.Transform.join) those\ntwo nodes. You can pass a join predicate, which takes a regular\nexpression match and the node before the wrapped node, and can\nreturn a boolean to indicate whether a join should happen.\n*/\nfunction wrappingInputRule(regexp, nodeType, getAttrs = null, joinPredicate) {\n return new InputRule(regexp, (state, match, start, end) => {\n let attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n let tr = state.tr.delete(start, end);\n let $start = tr.doc.resolve(start), range = $start.blockRange(), wrapping = range && findWrapping(range, nodeType, attrs);\n if (!wrapping)\n return null;\n tr.wrap(range, wrapping);\n let before = tr.doc.resolve(start - 1).nodeBefore;\n if (before && before.type == nodeType && canJoin(tr.doc, start - 1) &&\n (!joinPredicate || joinPredicate(match, before)))\n tr.join(start - 1);\n return tr;\n });\n}\n/**\nBuild an input rule that changes the type of a textblock when the\nmatched text is typed into it. You'll usually want to start your\nregexp with `^` to that it is only matched at the start of a\ntextblock. The optional `getAttrs` parameter can be used to compute\nthe new node's attributes, and works the same as in the\n`wrappingInputRule` function.\n*/\nfunction textblockTypeInputRule(regexp, nodeType, getAttrs = null) {\n return new InputRule(regexp, (state, match, start, end) => {\n let $start = state.doc.resolve(start);\n let attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), nodeType))\n return null;\n return state.tr\n .delete(start, end)\n .setBlockType(start, start, nodeType, attrs);\n });\n}\n\nexport { InputRule, closeDoubleQuote, closeSingleQuote, ellipsis, emDash, inputRules, openDoubleQuote, openSingleQuote, smartQuotes, textblockTypeInputRule, undoInputRule, wrappingInputRule };\n","// src/selection.ts\nimport { Selection as Selection3 } from \"prosemirror-state\";\n\n// src/helpers.ts\nimport { NodeSelection as NodeSelection2 } from \"prosemirror-state\";\nimport { Fragment as Fragment2, Node as PMNode2 } from \"prosemirror-model\";\n\n// src/transforms.ts\nimport { NodeSelection, Selection } from \"prosemirror-state\";\nimport {\n Fragment,\n Node as PMNode\n} from \"prosemirror-model\";\nvar removeParentNodeOfType = (nodeType) => (tr) => {\n const parent = findParentNodeOfType(nodeType)(tr.selection);\n if (parent) {\n return removeNodeAtPos(parent.pos)(tr);\n }\n return tr;\n};\nvar replaceParentNodeOfType = (nodeType, content) => (tr) => {\n if (!Array.isArray(nodeType)) {\n nodeType = [nodeType];\n }\n for (let i = 0, count = nodeType.length; i < count; i++) {\n const parent = findParentNodeOfType(nodeType[i])(tr.selection);\n if (parent) {\n const newTr = replaceNodeAtPos(parent.pos, content)(tr);\n if (newTr !== tr) {\n return newTr;\n }\n }\n }\n return tr;\n};\nvar removeSelectedNode = (tr) => {\n if (isNodeSelection(tr.selection)) {\n const from = tr.selection.$from.pos;\n const to = tr.selection.$to.pos;\n return cloneTr(tr.delete(from, to));\n }\n return tr;\n};\nvar replaceSelectedNode = (content) => (tr) => {\n if (isNodeSelection(tr.selection)) {\n const { $from, $to } = tr.selection;\n if (content instanceof Fragment && $from.parent.canReplace(\n $from.index(),\n $from.indexAfter(),\n content\n ) || content instanceof PMNode && $from.parent.canReplaceWith(\n $from.index(),\n $from.indexAfter(),\n content.type\n )) {\n return cloneTr(\n tr.replaceWith($from.pos, $to.pos, content).setSelection(new NodeSelection(tr.doc.resolve($from.pos)))\n );\n }\n }\n return tr;\n};\nvar setTextSelection = (position, dir = 1) => (tr) => {\n const nextSelection = Selection.findFrom(\n tr.doc.resolve(position),\n dir,\n true\n );\n if (nextSelection) {\n return tr.setSelection(nextSelection);\n }\n return tr;\n};\nvar isSelectableNode = (node) => Boolean(node instanceof PMNode && node.type && node.type.spec.selectable);\nvar shouldSelectNode = (node) => isSelectableNode(node) && node.type.isLeaf;\nvar setSelection = (node, pos, tr) => {\n if (shouldSelectNode(node)) {\n return tr.setSelection(new NodeSelection(tr.doc.resolve(pos)));\n }\n return setTextSelection(pos)(tr);\n};\nvar safeInsert = (content, position, tryToReplace) => (tr) => {\n const hasPosition = typeof position === \"number\";\n const { $from } = tr.selection;\n const $insertPos = hasPosition ? tr.doc.resolve(position) : isNodeSelection(tr.selection) ? tr.doc.resolve($from.pos + 1) : $from;\n const { parent } = $insertPos;\n if (isNodeSelection(tr.selection) && tryToReplace) {\n const oldTr = tr;\n tr = replaceSelectedNode(content)(tr);\n if (oldTr !== tr) {\n return tr;\n }\n }\n if (isEmptyParagraph(parent)) {\n const oldTr = tr;\n tr = replaceParentNodeOfType(parent.type, content)(tr);\n if (oldTr !== tr) {\n const pos = isSelectableNode(content) ? (\n // for selectable node, selection position would be the position of the replaced parent\n $insertPos.before($insertPos.depth)\n ) : $insertPos.pos;\n return setSelection(content, pos, tr);\n }\n }\n if (canInsert($insertPos, content)) {\n tr.insert($insertPos.pos, content);\n const pos = hasPosition ? $insertPos.pos : isSelectableNode(content) ? (\n // for atom nodes selection position after insertion is the previous pos\n tr.selection.$anchor.pos - 1\n ) : tr.selection.$anchor.pos;\n return cloneTr(setSelection(content, pos, tr));\n }\n for (let i = $insertPos.depth; i > 0; i--) {\n const pos = $insertPos.after(i);\n const $pos = tr.doc.resolve(pos);\n if (canInsert($pos, content)) {\n tr.insert(pos, content);\n return cloneTr(setSelection(content, pos, tr));\n }\n }\n return tr;\n};\nvar setParentNodeMarkup = (nodeType, type, attrs, marks) => (tr) => {\n const parent = findParentNodeOfType(nodeType)(tr.selection);\n if (parent) {\n return cloneTr(\n tr.setNodeMarkup(\n parent.pos,\n type,\n Object.assign({}, parent.node.attrs, attrs),\n marks\n )\n );\n }\n return tr;\n};\nvar selectParentNodeOfType = (nodeType) => (tr) => {\n if (!isNodeSelection(tr.selection)) {\n const parent = findParentNodeOfType(nodeType)(tr.selection);\n if (parent) {\n return cloneTr(\n tr.setSelection(NodeSelection.create(tr.doc, parent.pos))\n );\n }\n }\n return tr;\n};\nvar removeNodeBefore = (tr) => {\n const position = findPositionOfNodeBefore(tr.selection);\n if (typeof position === \"number\") {\n return removeNodeAtPos(position)(tr);\n }\n return tr;\n};\n\n// src/helpers.ts\nvar isNodeSelection = (selection) => {\n return selection instanceof NodeSelection2;\n};\nvar equalNodeType = (nodeType, node) => {\n return Array.isArray(nodeType) && nodeType.indexOf(node.type) > -1 || node.type === nodeType;\n};\nvar cloneTr = (tr) => {\n return Object.assign(Object.create(tr), tr).setTime(Date.now());\n};\nvar replaceNodeAtPos = (position, content) => (tr) => {\n const node = tr.doc.nodeAt(position);\n const $pos = tr.doc.resolve(position);\n if (!node) {\n return tr;\n }\n if (canReplace($pos, content)) {\n tr = tr.replaceWith(position, position + node.nodeSize, content);\n const start = tr.selection.$from.pos - 1;\n tr = setTextSelection(Math.max(start, 0), -1)(tr);\n tr = setTextSelection(tr.selection.$from.start())(tr);\n return cloneTr(tr);\n }\n return tr;\n};\nvar canReplace = ($pos, content) => {\n const node = $pos.node($pos.depth);\n return node && node.type.validContent(\n content instanceof Fragment2 ? content : Fragment2.from(content)\n );\n};\nvar removeNodeAtPos = (position) => (tr) => {\n const node = tr.doc.nodeAt(position);\n if (!node) {\n return tr;\n }\n return cloneTr(tr.delete(position, position + node.nodeSize));\n};\nvar canInsert = ($pos, content) => {\n const index = $pos.index();\n if (content instanceof Fragment2) {\n return $pos.parent.canReplace(index, index, content);\n } else if (content instanceof PMNode2) {\n return $pos.parent.canReplaceWith(index, index, content.type);\n }\n return false;\n};\nvar isEmptyParagraph = (node) => {\n return !node || node.type.name === \"paragraph\" && node.nodeSize === 2;\n};\n\n// src/selection.ts\nvar findParentNode = (predicate) => ({ $from, $to }, validateSameParent = false) => {\n if (validateSameParent && !$from.sameParent($to)) {\n let depth = Math.min($from.depth, $to.depth);\n while (depth >= 0) {\n const fromNode = $from.node(depth);\n const toNode = $to.node(depth);\n if (toNode === fromNode) {\n if (predicate(fromNode)) {\n return {\n // Return the resolved pos\n pos: depth > 0 ? $from.before(depth) : 0,\n start: $from.start(depth),\n depth,\n node: fromNode\n };\n }\n }\n depth = depth - 1;\n }\n return;\n }\n return findParentNodeClosestToPos($from, predicate);\n};\nvar findParentNodeClosestToPos = ($pos, predicate) => {\n for (let i = $pos.depth; i > 0; i--) {\n const node = $pos.node(i);\n if (predicate(node)) {\n return {\n pos: i > 0 ? $pos.before(i) : 0,\n start: $pos.start(i),\n depth: i,\n node\n };\n }\n }\n};\nvar findParentDomRef = (predicate, domAtPos) => (selection) => {\n const parent = findParentNode(predicate)(selection);\n if (parent) {\n return findDomRefAtPos(parent.pos, domAtPos);\n }\n};\nvar hasParentNode = (predicate) => (selection) => {\n return !!findParentNode(predicate)(selection);\n};\nvar findParentNodeOfType = (nodeType) => (selection) => {\n return findParentNode((node) => equalNodeType(nodeType, node))(selection);\n};\nvar findParentNodeOfTypeClosestToPos = ($pos, nodeType) => {\n return findParentNodeClosestToPos(\n $pos,\n (node) => equalNodeType(nodeType, node)\n );\n};\nvar hasParentNodeOfType = (nodeType) => (selection) => {\n return hasParentNode((node) => equalNodeType(nodeType, node))(selection);\n};\nvar findParentDomRefOfType = (nodeType, domAtPos) => (selection) => {\n return findParentDomRef(\n (node) => equalNodeType(nodeType, node),\n domAtPos\n )(selection);\n};\nvar findSelectedNodeOfType = (nodeType) => (selection) => {\n if (isNodeSelection(selection)) {\n const { node, $from } = selection;\n if (equalNodeType(nodeType, node)) {\n return {\n node,\n start: $from.start(),\n pos: $from.pos,\n depth: $from.depth\n };\n }\n }\n};\nvar findPositionOfNodeBefore = (selection) => {\n const { nodeBefore } = selection.$from;\n const maybeSelection = Selection3.findFrom(selection.$from, -1);\n if (maybeSelection && nodeBefore) {\n const parent = findParentNodeOfType(nodeBefore.type)(maybeSelection);\n if (parent) {\n return parent.pos;\n }\n return maybeSelection.$from.pos;\n }\n};\nvar findDomRefAtPos = (position, domAtPos) => {\n const dom = domAtPos(position);\n const node = dom.node.childNodes[dom.offset];\n if (dom.node.nodeType === Node.TEXT_NODE && dom.node.parentNode) {\n return dom.node.parentNode;\n }\n if (!node || node.nodeType === Node.TEXT_NODE) {\n return dom.node;\n }\n return node;\n};\n\n// src/node.ts\nvar flatten = (node, descend = true) => {\n if (!node) {\n throw new Error('Invalid \"node\" parameter');\n }\n const result = [];\n node.descendants((child, pos) => {\n result.push({ node: child, pos });\n if (!descend) {\n return false;\n }\n });\n return result;\n};\nvar findChildren = (node, predicate, descend = true) => {\n if (!node) {\n throw new Error('Invalid \"node\" parameter');\n } else if (!predicate) {\n throw new Error('Invalid \"predicate\" parameter');\n }\n return flatten(node, descend).filter((child) => predicate(child.node));\n};\nvar findTextNodes = (node, descend = true) => {\n return findChildren(node, (child) => child.isText, descend);\n};\nvar findInlineNodes = (node, descend = true) => {\n return findChildren(node, (child) => child.isInline, descend);\n};\nvar findBlockNodes = (node, descend = true) => {\n return findChildren(node, (child) => child.isBlock, descend);\n};\nvar findChildrenByAttr = (node, predicate, descend = true) => {\n return findChildren(node, (child) => !!predicate(child.attrs), descend);\n};\nvar findChildrenByType = (node, nodeType, descend = true) => {\n return findChildren(node, (child) => child.type === nodeType, descend);\n};\nvar findChildrenByMark = (node, markType, descend = true) => {\n return findChildren(\n node,\n (child) => Boolean(markType.isInSet(child.marks)),\n descend\n );\n};\nvar contains = (node, nodeType) => {\n return !!findChildrenByType(node, nodeType).length;\n};\nexport {\n canInsert,\n contains,\n findBlockNodes,\n findChildren,\n findChildrenByAttr,\n findChildrenByMark,\n findChildrenByType,\n findDomRefAtPos,\n findInlineNodes,\n findParentDomRef,\n findParentDomRefOfType,\n findParentNode,\n findParentNodeClosestToPos,\n findParentNodeOfType,\n findParentNodeOfTypeClosestToPos,\n findPositionOfNodeBefore,\n findSelectedNodeOfType,\n findTextNodes,\n flatten,\n hasParentNode,\n hasParentNodeOfType,\n isNodeSelection,\n removeNodeBefore,\n removeParentNodeOfType,\n removeSelectedNode,\n replaceParentNodeOfType,\n replaceSelectedNode,\n safeInsert,\n selectParentNodeOfType,\n setParentNodeMarkup,\n setTextSelection\n};\n//# sourceMappingURL=index.js.map\n","import { findWrapping, ReplaceAroundStep, canSplit, liftTarget, canJoin } from 'prosemirror-transform';\nimport { NodeRange, Fragment, Slice } from 'prosemirror-model';\nimport { Selection } from 'prosemirror-state';\n\nconst olDOM = [\"ol\", 0], ulDOM = [\"ul\", 0], liDOM = [\"li\", 0];\n/**\nAn ordered list [node spec](https://prosemirror.net/docs/ref/#model.NodeSpec). Has a single\nattribute, `order`, which determines the number at which the list\nstarts counting, and defaults to 1. Represented as an `<ol>`\nelement.\n*/\nconst orderedList = {\n attrs: { order: { default: 1, validate: \"number\" } },\n parseDOM: [{ tag: \"ol\", getAttrs(dom) {\n return { order: dom.hasAttribute(\"start\") ? +dom.getAttribute(\"start\") : 1 };\n } }],\n toDOM(node) {\n return node.attrs.order == 1 ? olDOM : [\"ol\", { start: node.attrs.order }, 0];\n }\n};\n/**\nA bullet list node spec, represented in the DOM as `<ul>`.\n*/\nconst bulletList = {\n parseDOM: [{ tag: \"ul\" }],\n toDOM() { return ulDOM; }\n};\n/**\nA list item (`<li>`) spec.\n*/\nconst listItem = {\n parseDOM: [{ tag: \"li\" }],\n toDOM() { return liDOM; },\n defining: true\n};\nfunction add(obj, props) {\n let copy = {};\n for (let prop in obj)\n copy[prop] = obj[prop];\n for (let prop in props)\n copy[prop] = props[prop];\n return copy;\n}\n/**\nConvenience function for adding list-related node types to a map\nspecifying the nodes for a schema. Adds\n[`orderedList`](https://prosemirror.net/docs/ref/#schema-list.orderedList) as `\"ordered_list\"`,\n[`bulletList`](https://prosemirror.net/docs/ref/#schema-list.bulletList) as `\"bullet_list\"`, and\n[`listItem`](https://prosemirror.net/docs/ref/#schema-list.listItem) as `\"list_item\"`.\n\n`itemContent` determines the content expression for the list items.\nIf you want the commands defined in this module to apply to your\nlist structure, it should have a shape like `\"paragraph block*\"` or\n`\"paragraph (ordered_list | bullet_list)*\"`. `listGroup` can be\ngiven to assign a group name to the list node types, for example\n`\"block\"`.\n*/\nfunction addListNodes(nodes, itemContent, listGroup) {\n return nodes.append({\n ordered_list: add(orderedList, { content: \"list_item+\", group: listGroup }),\n bullet_list: add(bulletList, { content: \"list_item+\", group: listGroup }),\n list_item: add(listItem, { content: itemContent })\n });\n}\n/**\nReturns a command function that wraps the selection in a list with\nthe given type an attributes. If `dispatch` is null, only return a\nvalue to indicate whether this is possible, but don't actually\nperform the change.\n*/\nfunction wrapInList(listType, attrs = null) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to), doJoin = false, outerRange = range;\n if (!range)\n return false;\n // This is at the top of an existing list item\n if (range.depth >= 2 && $from.node(range.depth - 1).type.compatibleContent(listType) && range.startIndex == 0) {\n // Don't do anything if this is the top of the list\n if ($from.index(range.depth - 1) == 0)\n return false;\n let $insert = state.doc.resolve(range.start - 2);\n outerRange = new NodeRange($insert, $insert, range.depth);\n if (range.endIndex < range.parent.childCount)\n range = new NodeRange($from, state.doc.resolve($to.end(range.depth)), range.depth);\n doJoin = true;\n }\n let wrap = findWrapping(outerRange, listType, attrs, range);\n if (!wrap)\n return false;\n if (dispatch)\n dispatch(doWrapInList(state.tr, range, wrap, doJoin, listType).scrollIntoView());\n return true;\n };\n}\nfunction doWrapInList(tr, range, wrappers, joinBefore, listType) {\n let content = Fragment.empty;\n for (let i = wrappers.length - 1; i >= 0; i--)\n content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content));\n tr.step(new ReplaceAroundStep(range.start - (joinBefore ? 2 : 0), range.end, range.start, range.end, new Slice(content, 0, 0), wrappers.length, true));\n let found = 0;\n for (let i = 0; i < wrappers.length; i++)\n if (wrappers[i].type == listType)\n found = i + 1;\n let splitDepth = wrappers.length - found;\n let splitPos = range.start + wrappers.length - (joinBefore ? 2 : 0), parent = range.parent;\n for (let i = range.startIndex, e = range.endIndex, first = true; i < e; i++, first = false) {\n if (!first && canSplit(tr.doc, splitPos, splitDepth)) {\n tr.split(splitPos, splitDepth);\n splitPos += 2 * splitDepth;\n }\n splitPos += parent.child(i).nodeSize;\n }\n return tr;\n}\n/**\nBuild a command that splits a non-empty textblock at the top level\nof a list item by also splitting that list item.\n*/\nfunction splitListItem(itemType, itemAttrs) {\n return function (state, dispatch) {\n let { $from, $to, node } = state.selection;\n if ((node && node.isBlock) || $from.depth < 2 || !$from.sameParent($to))\n return false;\n let grandParent = $from.node(-1);\n if (grandParent.type != itemType)\n return false;\n if ($from.parent.content.size == 0 && $from.node(-1).childCount == $from.indexAfter(-1)) {\n // In an empty block. If this is a nested list, the wrapping\n // list item should be split. Otherwise, bail out and let next\n // command handle lifting.\n if ($from.depth == 3 || $from.node(-3).type != itemType ||\n $from.index(-2) != $from.node(-2).childCount - 1)\n return false;\n if (dispatch) {\n let wrap = Fragment.empty;\n let depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3;\n // Build a fragment containing empty versions of the structure\n // from the outer list item to the parent node of the cursor\n for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d--)\n wrap = Fragment.from($from.node(d).copy(wrap));\n let depthAfter = $from.indexAfter(-1) < $from.node(-2).childCount ? 1\n : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3;\n // Add a second list item with an empty default start node\n wrap = wrap.append(Fragment.from(itemType.createAndFill()));\n let start = $from.before($from.depth - (depthBefore - 1));\n let tr = state.tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0));\n let sel = -1;\n tr.doc.nodesBetween(start, tr.doc.content.size, (node, pos) => {\n if (sel > -1)\n return false;\n if (node.isTextblock && node.content.size == 0)\n sel = pos + 1;\n });\n if (sel > -1)\n tr.setSelection(Selection.near(tr.doc.resolve(sel)));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n let nextType = $to.pos == $from.end() ? grandParent.contentMatchAt(0).defaultType : null;\n let tr = state.tr.delete($from.pos, $to.pos);\n let types = nextType ? [itemAttrs ? { type: itemType, attrs: itemAttrs } : null, { type: nextType }] : undefined;\n if (!canSplit(tr.doc, $from.pos, 2, types))\n return false;\n if (dispatch)\n dispatch(tr.split($from.pos, 2, types).scrollIntoView());\n return true;\n };\n}\n/**\nActs like [`splitListItem`](https://prosemirror.net/docs/ref/#schema-list.splitListItem), but\nwithout resetting the set of active marks at the cursor.\n*/\nfunction splitListItemKeepMarks(itemType, itemAttrs) {\n let split = splitListItem(itemType, itemAttrs);\n return (state, dispatch) => {\n return split(state, dispatch && (tr => {\n let marks = state.storedMarks || (state.selection.$to.parentOffset && state.selection.$from.marks());\n if (marks)\n tr.ensureMarks(marks);\n dispatch(tr);\n }));\n };\n}\n/**\nCreate a command to lift the list item around the selection up into\na wrapping list.\n*/\nfunction liftListItem(itemType) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to, node => node.childCount > 0 && node.firstChild.type == itemType);\n if (!range)\n return false;\n if (!dispatch)\n return true;\n if ($from.node(range.depth - 1).type == itemType) // Inside a parent list\n return liftToOuterList(state, dispatch, itemType, range);\n else // Outer list node\n return liftOutOfList(state, dispatch, range);\n };\n}\nfunction liftToOuterList(state, dispatch, itemType, range) {\n let tr = state.tr, end = range.end, endOfList = range.$to.end(range.depth);\n if (end < endOfList) {\n // There are siblings after the lifted items, which must become\n // children of the last item\n tr.step(new ReplaceAroundStep(end - 1, endOfList, end, endOfList, new Slice(Fragment.from(itemType.create(null, range.parent.copy())), 1, 0), 1, true));\n range = new NodeRange(tr.doc.resolve(range.$from.pos), tr.doc.resolve(endOfList), range.depth);\n }\n const target = liftTarget(range);\n if (target == null)\n return false;\n tr.lift(range, target);\n let after = tr.mapping.map(end, -1) - 1;\n if (canJoin(tr.doc, after))\n tr.join(after);\n dispatch(tr.scrollIntoView());\n return true;\n}\nfunction liftOutOfList(state, dispatch, range) {\n let tr = state.tr, list = range.parent;\n // Merge the list items into a single big item\n for (let pos = range.end, i = range.endIndex - 1, e = range.startIndex; i > e; i--) {\n pos -= list.child(i).nodeSize;\n tr.delete(pos - 1, pos + 1);\n }\n let $start = tr.doc.resolve(range.start), item = $start.nodeAfter;\n if (tr.mapping.map(range.end) != range.start + $start.nodeAfter.nodeSize)\n return false;\n let atStart = range.startIndex == 0, atEnd = range.endIndex == list.childCount;\n let parent = $start.node(-1), indexBefore = $start.index(-1);\n if (!parent.canReplace(indexBefore + (atStart ? 0 : 1), indexBefore + 1, item.content.append(atEnd ? Fragment.empty : Fragment.from(list))))\n return false;\n let start = $start.pos, end = start + item.nodeSize;\n // Strip off the surrounding list. At the sides where we're not at\n // the end of the list, the existing list is closed. At sides where\n // this is the end, it is overwritten to its end.\n tr.step(new ReplaceAroundStep(start - (atStart ? 1 : 0), end + (atEnd ? 1 : 0), start + 1, end - 1, new Slice((atStart ? Fragment.empty : Fragment.from(list.copy(Fragment.empty)))\n .append(atEnd ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))), atStart ? 0 : 1, atEnd ? 0 : 1), atStart ? 0 : 1));\n dispatch(tr.scrollIntoView());\n return true;\n}\n/**\nCreate a command to sink the list item around the selection down\ninto an inner list.\n*/\nfunction sinkListItem(itemType) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to, node => node.childCount > 0 && node.firstChild.type == itemType);\n if (!range)\n return false;\n let startIndex = range.startIndex;\n if (startIndex == 0)\n return false;\n let parent = range.parent, nodeBefore = parent.child(startIndex - 1);\n if (nodeBefore.type != itemType)\n return false;\n if (dispatch) {\n let nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type == parent.type;\n let inner = Fragment.from(nestedBefore ? itemType.create() : null);\n let slice = new Slice(Fragment.from(itemType.create(null, Fragment.from(parent.type.create(null, inner)))), nestedBefore ? 3 : 1, 0);\n let before = range.start, after = range.end;\n dispatch(state.tr.step(new ReplaceAroundStep(before - (nestedBefore ? 3 : 1), after, before, after, slice, 1, true))\n .scrollIntoView());\n }\n return true;\n };\n}\n\nexport { addListNodes, bulletList, liftListItem, listItem, orderedList, sinkListItem, splitListItem, splitListItemKeepMarks, wrapInList };\n","/* eslint-disable no-bitwise */\n\nconst decodeCache = {}\n\nfunction getDecodeCache (exclude) {\n let cache = decodeCache[exclude]\n if (cache) { return cache }\n\n cache = decodeCache[exclude] = []\n\n for (let i = 0; i < 128; i++) {\n const ch = String.fromCharCode(i)\n cache.push(ch)\n }\n\n for (let i = 0; i < exclude.length; i++) {\n const ch = exclude.charCodeAt(i)\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2)\n }\n\n return cache\n}\n\n// Decode percent-encoded string.\n//\nfunction decode (string, exclude) {\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars\n }\n\n const cache = getDecodeCache(exclude)\n\n return string.replace(/(%[a-f0-9]{2})+/gi, function (seq) {\n let result = ''\n\n for (let i = 0, l = seq.length; i < l; i += 3) {\n const b1 = parseInt(seq.slice(i + 1, i + 3), 16)\n\n if (b1 < 0x80) {\n result += cache[b1]\n continue\n }\n\n if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n // 110xxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n\n if ((b2 & 0xC0) === 0x80) {\n const chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F)\n\n if (chr < 0x80) {\n result += '\\ufffd\\ufffd'\n } else {\n result += String.fromCharCode(chr)\n }\n\n i += 3\n continue\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n const chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F)\n\n if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n result += '\\ufffd\\ufffd\\ufffd'\n } else {\n result += String.fromCharCode(chr)\n }\n\n i += 6\n continue\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n const b4 = parseInt(seq.slice(i + 10, i + 12), 16)\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n let chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F)\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += '\\ufffd\\ufffd\\ufffd\\ufffd'\n } else {\n chr -= 0x10000\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF))\n }\n\n i += 9\n continue\n }\n }\n\n result += '\\ufffd'\n }\n\n return result\n })\n}\n\ndecode.defaultChars = ';/?:@&=+$,#'\ndecode.componentChars = ''\n\nexport default decode\n","const encodeCache = {}\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache (exclude) {\n let cache = encodeCache[exclude]\n if (cache) { return cache }\n\n cache = encodeCache[exclude] = []\n\n for (let i = 0; i < 128; i++) {\n const ch = String.fromCharCode(i)\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch)\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2))\n }\n }\n\n for (let i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i]\n }\n\n return cache\n}\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode (string, exclude, keepEscaped) {\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude\n exclude = encode.defaultChars\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true\n }\n\n const cache = getEncodeCache(exclude)\n let result = ''\n\n for (let i = 0, l = string.length; i < l; i++) {\n const code = string.charCodeAt(i)\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3)\n i += 2\n continue\n }\n }\n\n if (code < 128) {\n result += cache[code]\n continue\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n const nextCode = string.charCodeAt(i + 1)\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1])\n i++\n continue\n }\n }\n result += '%EF%BF%BD'\n continue\n }\n\n result += encodeURIComponent(string[i])\n }\n\n return result\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\"\nencode.componentChars = \"-_.!~*'()\"\n\nexport default encode\n","export default function format (url) {\n let result = ''\n\n result += url.protocol || ''\n result += url.slashes ? '//' : ''\n result += url.auth ? url.auth + '@' : ''\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']'\n } else {\n result += url.hostname || ''\n }\n\n result += url.port ? ':' + url.port : ''\n result += url.pathname || ''\n result += url.search || ''\n result += url.hash || ''\n\n return result\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\nfunction Url () {\n this.protocol = null\n this.slashes = null\n this.auth = null\n this.port = null\n this.hostname = null\n this.hash = null\n this.search = null\n this.pathname = null\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nconst protocolPattern = /^([a-z0-9.+-]+:)/i\nconst portPattern = /:[0-9]*$/\n\n// Special case for a simple path URL\n/* eslint-disable-next-line no-useless-escape */\nconst simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/\n\n// RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\nconst delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t']\n\n// RFC 2396: characters not allowed for various reasons.\nconst unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims)\n\n// Allowed by RFCs, but cause of XSS attacks. Always escape these.\nconst autoEscape = ['\\''].concat(unwise)\n// Characters that are never ever allowed in a hostname.\n// Note that any invalid chars are also handled, but these\n// are the ones that are *expected* to be seen, so we fast-path\n// them.\nconst nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape)\nconst hostEndingChars = ['/', '?', '#']\nconst hostnameMaxLen = 255\nconst hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/\nconst hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/\n// protocols that can allow \"unsafe\" and \"unwise\" chars.\n// protocols that never have a hostname.\nconst hostlessProtocol = {\n javascript: true,\n 'javascript:': true\n}\n// protocols that always contain a // bit.\nconst slashedProtocol = {\n http: true,\n https: true,\n ftp: true,\n gopher: true,\n file: true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n}\n\nfunction urlParse (url, slashesDenoteHost) {\n if (url && url instanceof Url) return url\n\n const u = new Url()\n u.parse(url, slashesDenoteHost)\n return u\n}\n\nUrl.prototype.parse = function (url, slashesDenoteHost) {\n let lowerProto, hec, slashes\n let rest = url\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim()\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n const simplePath = simplePathPattern.exec(rest)\n if (simplePath) {\n this.pathname = simplePath[1]\n if (simplePath[2]) {\n this.search = simplePath[2]\n }\n return this\n }\n }\n\n let proto = protocolPattern.exec(rest)\n if (proto) {\n proto = proto[0]\n lowerProto = proto.toLowerCase()\n this.protocol = proto\n rest = rest.substr(proto.length)\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n /* eslint-disable-next-line no-useless-escape */\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//'\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2)\n this.slashes = true\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n let hostEnd = -1\n for (let i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i])\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec\n }\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n let auth, atSign\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@')\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd)\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign)\n rest = rest.slice(atSign + 1)\n this.auth = auth\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1\n for (let i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i])\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec\n }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) {\n hostEnd = rest.length\n }\n\n if (rest[hostEnd - 1] === ':') { hostEnd-- }\n const host = rest.slice(0, hostEnd)\n rest = rest.slice(hostEnd)\n\n // pull out port.\n this.parseHost(host)\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || ''\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n const ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']'\n\n // validate a little.\n if (!ipv6Hostname) {\n const hostparts = this.hostname.split(/\\./)\n for (let i = 0, l = hostparts.length; i < l; i++) {\n const part = hostparts[i]\n if (!part) { continue }\n if (!part.match(hostnamePartPattern)) {\n let newpart = ''\n for (let j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x'\n } else {\n newpart += part[j]\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n const validParts = hostparts.slice(0, i)\n const notHost = hostparts.slice(i + 1)\n const bit = part.match(hostnamePartStart)\n if (bit) {\n validParts.push(bit[1])\n notHost.unshift(bit[2])\n }\n if (notHost.length) {\n rest = notHost.join('.') + rest\n }\n this.hostname = validParts.join('.')\n break\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = ''\n }\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2)\n }\n }\n\n // chop off from the tail first.\n const hash = rest.indexOf('#')\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash)\n rest = rest.slice(0, hash)\n }\n const qm = rest.indexOf('?')\n if (qm !== -1) {\n this.search = rest.substr(qm)\n rest = rest.slice(0, qm)\n }\n if (rest) { this.pathname = rest }\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = ''\n }\n\n return this\n}\n\nUrl.prototype.parseHost = function (host) {\n let port = portPattern.exec(host)\n if (port) {\n port = port[0]\n if (port !== ':') {\n this.port = port.substr(1)\n }\n host = host.substr(0, host.length - port.length)\n }\n if (host) { this.hostname = host }\n}\n\nexport default urlParse\n","export default /[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/","export default /[\\0-\\x1F\\x7F-\\x9F]/","export default /[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/","export default /[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDEAD\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDEB9\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2\\uDF00-\\uDF09]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDF43-\\uDF4F\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD80B[\\uDFF1\\uDFF2]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/","export default /[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u0888\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20C0\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFF\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u31EF\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBC2\\uFD40-\\uFD4F\\uFDCF\\uFDFC-\\uFDFF\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD833[\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEDC-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF76\\uDF7B-\\uDFD9\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC5\\uDECE-\\uDEDB\\uDEE0-\\uDEE8\\uDEF0-\\uDEF8\\uDF00-\\uDF92\\uDF94-\\uDFCA]/","export default /[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/","// Generated using scripts/write-decode-map.ts\nexport default new Uint16Array(\n// prettier-ignore\n\"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n .split(\"\")\n .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-html.js.map","// Generated using scripts/write-decode-map.ts\nexport default new Uint16Array(\n// prettier-ignore\n\"\\u0200aglq\\t\\x15\\x18\\x1b\\u026d\\x0f\\0\\0\\x12p;\\u4026os;\\u4027t;\\u403et;\\u403cuot;\\u4022\"\n .split(\"\")\n .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-xml.js.map","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nconst decodeMap = new Map([\n [0, 65533],\n // C1 Unicode control character reference replacements\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n let output = \"\";\n if (codePoint > 0xffff) {\n codePoint -= 0x10000;\n output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);\n codePoint = 0xdc00 | (codePoint & 0x3ff);\n }\n output += String.fromCharCode(codePoint);\n return output;\n};\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint) {\n var _a;\n if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n return 0xfffd;\n }\n return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport default function decodeCodePoint(codePoint) {\n return fromCodePoint(replaceCodePoint(codePoint));\n}\n//# sourceMappingURL=decode_codepoint.js.map","import htmlDecodeTree from \"./generated/decode-data-html.js\";\nimport xmlDecodeTree from \"./generated/decode-data-xml.js\";\nimport decodeCodePoint, { replaceCodePoint, fromCodePoint, } from \"./decode_codepoint.js\";\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree, xmlDecodeTree, decodeCodePoint };\nexport { replaceCodePoint, fromCodePoint } from \"./decode_codepoint.js\";\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b100000;\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\nfunction isNumber(code) {\n return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nexport var DecodingMode;\n(function (DecodingMode) {\n /** Entities in text nodes that can end with any character. */\n DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n /** Only allow entities terminated with a semicolon. */\n DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n /** Entities in attributes have limitations on ending characters. */\n DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n constructor(\n /** The tree used to decode entities. */\n decodeTree, \n /**\n * The function that is called when a codepoint is decoded.\n *\n * For multi-byte named entities, this will be called multiple times,\n * with the second codepoint, and the same `consumed` value.\n *\n * @param codepoint The decoded codepoint.\n * @param consumed The number of bytes consumed by the decoder.\n */\n emitCodePoint, \n /** An object that is used to produce errors. */\n errors) {\n this.decodeTree = decodeTree;\n this.emitCodePoint = emitCodePoint;\n this.errors = errors;\n /** The current state of the decoder. */\n this.state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n this.consumed = 1;\n /**\n * The result of the entity.\n *\n * Either the result index of a numeric entity, or the codepoint of a\n * numeric entity.\n */\n this.result = 0;\n /** The current index in the decode tree. */\n this.treeIndex = 0;\n /** The number of characters that were consumed in excess. */\n this.excess = 1;\n /** The mode in which the decoder is operating. */\n this.decodeMode = DecodingMode.Strict;\n }\n /** Resets the instance to make it reusable. */\n startEntity(decodeMode) {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n }\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n *\n * @param string The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n write(str, offset) {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (str.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(str, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(str, offset);\n }\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(str, offset);\n }\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(str, offset);\n }\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(str, offset);\n }\n case EntityDecoderState.NamedEntity: {\n return this.stateNamedEntity(str, offset);\n }\n }\n }\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericStart(str, offset) {\n if (offset >= str.length) {\n return -1;\n }\n if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(str, offset + 1);\n }\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(str, offset);\n }\n addToNumericResult(str, start, end, base) {\n if (start !== end) {\n const digitCount = end - start;\n this.result =\n this.result * Math.pow(base, digitCount) +\n parseInt(str.substr(start, digitCount), base);\n this.consumed += digitCount;\n }\n }\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericHex(str, offset) {\n const startIdx = offset;\n while (offset < str.length) {\n const char = str.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(str, startIdx, offset, 16);\n return this.emitNumericEntity(char, 3);\n }\n }\n this.addToNumericResult(str, startIdx, offset, 16);\n return -1;\n }\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericDecimal(str, offset) {\n const startIdx = offset;\n while (offset < str.length) {\n const char = str.charCodeAt(offset);\n if (isNumber(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(str, startIdx, offset, 10);\n return this.emitNumericEntity(char, 2);\n }\n }\n this.addToNumericResult(str, startIdx, offset, 10);\n return -1;\n }\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n *\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n emitNumericEntity(lastCp, expectedLength) {\n var _a;\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n }\n else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n this.errors.validateNumericCharacterReference(this.result);\n }\n return this.consumed;\n }\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNamedEntity(str, offset) {\n const { decodeTree } = this;\n let current = decodeTree[this.treeIndex];\n // The mask is the number of bytes of the value, including the current byte.\n let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n for (; offset < str.length; offset++, this.excess++) {\n const char = str.charCodeAt(offset);\n this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n if (this.treeIndex < 0) {\n return this.result === 0 ||\n // If we are parsing an attribute\n (this.decodeMode === DecodingMode.Attribute &&\n // We shouldn't have consumed any characters after the entity,\n (valueLength === 0 ||\n // And there should be no invalid characters.\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n // If the branch is a value, store it and continue\n if (valueLength !== 0) {\n // If the entity is terminated by a semicolon, we are done.\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n }\n // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n if (this.decodeMode !== DecodingMode.Strict) {\n this.result = this.treeIndex;\n this.consumed += this.excess;\n this.excess = 0;\n }\n }\n }\n return -1;\n }\n /**\n * Emit a named entity that was not terminated with a semicolon.\n *\n * @returns The number of characters consumed.\n */\n emitNotTerminatedNamedEntity() {\n var _a;\n const { result, decodeTree } = this;\n const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n this.emitNamedEntityData(result, valueLength, this.consumed);\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n return this.consumed;\n }\n /**\n * Emit a named entity.\n *\n * @param result The index of the entity in the decode tree.\n * @param valueLength The number of bytes in the entity.\n * @param consumed The number of characters consumed.\n *\n * @returns The number of characters consumed.\n */\n emitNamedEntityData(result, valueLength, consumed) {\n const { decodeTree } = this;\n this.emitCodePoint(valueLength === 1\n ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n : decodeTree[result + 1], consumed);\n if (valueLength === 3) {\n // For multi-byte values, we need to emit the second byte.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n return consumed;\n }\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n *\n * @returns The number of characters consumed.\n */\n end() {\n var _a;\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n case EntityDecoderState.EntityStart: {\n // Return 0 if we have no entity.\n return 0;\n }\n }\n }\n}\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n let ret = \"\";\n const decoder = new EntityDecoder(decodeTree, (str) => (ret += fromCodePoint(str)));\n return function decodeWithTrie(str, decodeMode) {\n let lastIndex = 0;\n let offset = 0;\n while ((offset = str.indexOf(\"&\", offset)) >= 0) {\n ret += str.slice(lastIndex, offset);\n decoder.startEntity(decodeMode);\n const len = decoder.write(str, \n // Skip the \"&\"\n offset + 1);\n if (len < 0) {\n lastIndex = offset + decoder.end();\n break;\n }\n lastIndex = offset + len;\n // If `len` is 0, skip the current `&` and continue.\n offset = len === 0 ? lastIndex + 1 : lastIndex;\n }\n const result = ret + str.slice(lastIndex);\n // Make sure we don't keep a reference to the final string.\n ret = \"\";\n return result;\n };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIdx, char) {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;\n }\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n const value = char - jumpOffset;\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIdx + value] - 1;\n }\n // Case 3: Multiple branches encoded in dictionary\n // Binary search for the character.\n let lo = nodeIdx;\n let hi = lo + branchCount - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const midVal = decodeTree[mid];\n if (midVal < char) {\n lo = mid + 1;\n }\n else if (midVal > char) {\n hi = mid - 1;\n }\n else {\n return decodeTree[mid + branchCount];\n }\n }\n return -1;\n}\nconst htmlDecoder = getDecoder(htmlDecodeTree);\nconst xmlDecoder = getDecoder(xmlDecodeTree);\n/**\n * Decodes an HTML string.\n *\n * @param str The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(str, mode = DecodingMode.Legacy) {\n return htmlDecoder(str, mode);\n}\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(str) {\n return htmlDecoder(str, DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(str) {\n return htmlDecoder(str, DecodingMode.Strict);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(str) {\n return xmlDecoder(str, DecodingMode.Strict);\n}\n//# sourceMappingURL=decode.js.map","// Utilities\n//\n\nimport * as mdurl from 'mdurl'\nimport * as ucmicro from 'uc.micro'\nimport { decodeHTML } from 'entities'\n\nfunction _class (obj) { return Object.prototype.toString.call(obj) }\n\nfunction isString (obj) { return _class(obj) === '[object String]' }\n\nconst _hasOwnProperty = Object.prototype.hasOwnProperty\n\nfunction has (object, key) {\n return _hasOwnProperty.call(object, key)\n}\n\n// Merge objects\n//\nfunction assign (obj /* from1, from2, from3, ... */) {\n const sources = Array.prototype.slice.call(arguments, 1)\n\n sources.forEach(function (source) {\n if (!source) { return }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be object')\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key]\n })\n })\n\n return obj\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt (src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1))\n}\n\nfunction isValidEntityCode (c) {\n /* eslint no-bitwise:0 */\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) { return false }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) { return false }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false }\n // control codes\n if (c >= 0x00 && c <= 0x08) { return false }\n if (c === 0x0B) { return false }\n if (c >= 0x0E && c <= 0x1F) { return false }\n if (c >= 0x7F && c <= 0x9F) { return false }\n // out of range\n if (c > 0x10FFFF) { return false }\n return true\n}\n\nfunction fromCodePoint (c) {\n /* eslint no-bitwise:0 */\n if (c > 0xffff) {\n c -= 0x10000\n const surrogate1 = 0xd800 + (c >> 10)\n const surrogate2 = 0xdc00 + (c & 0x3ff)\n\n return String.fromCharCode(surrogate1, surrogate2)\n }\n return String.fromCharCode(c)\n}\n\nconst UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g\nconst ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi\nconst UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi')\n\nconst DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i\n\nfunction replaceEntityPattern (match, name) {\n if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n const code = name[1].toLowerCase() === 'x'\n ? parseInt(name.slice(2), 16)\n : parseInt(name.slice(1), 10)\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code)\n }\n\n return match\n }\n\n const decoded = decodeHTML(match)\n if (decoded !== match) {\n return decoded\n }\n\n return match\n}\n\n/* function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n} */\n\nfunction unescapeMd (str) {\n if (str.indexOf('\\\\') < 0) { return str }\n return str.replace(UNESCAPE_MD_RE, '$1')\n}\n\nfunction unescapeAll (str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) { return escaped }\n return replaceEntityPattern(match, entity)\n })\n}\n\nconst HTML_ESCAPE_TEST_RE = /[&<>\"]/\nconst HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g\nconst HTML_REPLACEMENTS = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"'\n}\n\nfunction replaceUnsafeChar (ch) {\n return HTML_REPLACEMENTS[ch]\n}\n\nfunction escapeHtml (str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar)\n }\n return str\n}\n\nconst REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g\n\nfunction escapeRE (str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&')\n}\n\nfunction isSpace (code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true\n }\n return false\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace (code) {\n if (code >= 0x2000 && code <= 0x200A) { return true }\n switch (code) {\n case 0x09: // \\t\n case 0x0A: // \\n\n case 0x0B: // \\v\n case 0x0C: // \\f\n case 0x0D: // \\r\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true\n }\n return false\n}\n\n/* eslint-disable max-len */\n\n// Currently without astral characters support.\nfunction isPunctChar (ch) {\n return ucmicro.P.test(ch) || ucmicro.S.test(ch)\n}\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct (ch) {\n switch (ch) {\n case 0x21/* ! */:\n case 0x22/* \" */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x27/* ' */:\n case 0x28/* ( */:\n case 0x29/* ) */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2C/* , */:\n case 0x2D/* - */:\n case 0x2E/* . */:\n case 0x2F/* / */:\n case 0x3A/* : */:\n case 0x3B/* ; */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x3F/* ? */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7C/* | */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true\n default:\n return false\n }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference (str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' ')\n\n // In node v10 'ẞ'.toLowerCase() === 'á¹¾', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n if ('ẞ'.toLowerCase() === 'á¹¾') {\n str = str.replace(/ẞ/g, 'ß')\n }\n\n // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // Ä°, Ï´, ẞ, Ω, K, â„« - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (Θ), U+03f4 (Ï´) and lowercase U+03b8 (θ), U+03d1 (Ï‘)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change Ï‘ (it's already lowercase),\n // and .toUpperCase() doesn't change Ï´ (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase()\n}\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nconst lib = { mdurl, ucmicro }\n\nexport {\n lib,\n assign,\n isString,\n has,\n unescapeMd,\n unescapeAll,\n isValidEntityCode,\n fromCodePoint,\n escapeHtml,\n arrayReplaceAt,\n isSpace,\n isWhiteSpace,\n isMdAsciiPunct,\n isPunctChar,\n escapeRE,\n normalizeReference\n}\n","// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n\nexport default function parseLinkLabel (state, start, disableNested) {\n let level, found, marker, prevPos\n\n const max = state.posMax\n const oldPos = state.pos\n\n state.pos = start + 1\n level = 1\n\n while (state.pos < max) {\n marker = state.src.charCodeAt(state.pos)\n if (marker === 0x5D /* ] */) {\n level--\n if (level === 0) {\n found = true\n break\n }\n }\n\n prevPos = state.pos\n state.md.inline.skipToken(state)\n if (marker === 0x5B /* [ */) {\n if (prevPos === state.pos - 1) {\n // increase level if we find text `[`, which is not a part of any token\n level++\n } else if (disableNested) {\n state.pos = oldPos\n return -1\n }\n }\n }\n\n let labelEnd = -1\n\n if (found) {\n labelEnd = state.pos\n }\n\n // restore old state\n state.pos = oldPos\n\n return labelEnd\n}\n","// Parse link destination\n//\n\nimport { unescapeAll } from '../common/utils.mjs'\n\nexport default function parseLinkDestination (str, start, max) {\n let code\n let pos = start\n\n const result = {\n ok: false,\n pos: 0,\n str: ''\n }\n\n if (str.charCodeAt(pos) === 0x3C /* < */) {\n pos++\n while (pos < max) {\n code = str.charCodeAt(pos)\n if (code === 0x0A /* \\n */) { return result }\n if (code === 0x3C /* < */) { return result }\n if (code === 0x3E /* > */) {\n result.pos = pos + 1\n result.str = unescapeAll(str.slice(start + 1, pos))\n result.ok = true\n return result\n }\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos += 2\n continue\n }\n\n pos++\n }\n\n // no closing '>'\n return result\n }\n\n // this should be ... } else { ... branch\n\n let level = 0\n while (pos < max) {\n code = str.charCodeAt(pos)\n\n if (code === 0x20) { break }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7F) { break }\n\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) { break }\n pos += 2\n continue\n }\n\n if (code === 0x28 /* ( */) {\n level++\n if (level > 32) { return result }\n }\n\n if (code === 0x29 /* ) */) {\n if (level === 0) { break }\n level--\n }\n\n pos++\n }\n\n if (start === pos) { return result }\n if (level !== 0) { return result }\n\n result.str = unescapeAll(str.slice(start, pos))\n result.pos = pos\n result.ok = true\n return result\n}\n","// Parse link title\n//\n\nimport { unescapeAll } from '../common/utils.mjs'\n\n// Parse link title within `str` in [start, max] range,\n// or continue previous parsing if `prev_state` is defined (equal to result of last execution).\n//\nexport default function parseLinkTitle (str, start, max, prev_state) {\n let code\n let pos = start\n\n const state = {\n // if `true`, this is a valid link title\n ok: false,\n // if `true`, this link can be continued on the next line\n can_continue: false,\n // if `ok`, it's the position of the first character after the closing marker\n pos: 0,\n // if `ok`, it's the unescaped title\n str: '',\n // expected closing marker character code\n marker: 0\n }\n\n if (prev_state) {\n // this is a continuation of a previous parseLinkTitle call on the next line,\n // used in reference links only\n state.str = prev_state.str\n state.marker = prev_state.marker\n } else {\n if (pos >= max) { return state }\n\n let marker = str.charCodeAt(pos)\n if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return state }\n\n start++\n pos++\n\n // if opening marker is \"(\", switch it to closing marker \")\"\n if (marker === 0x28) { marker = 0x29 }\n\n state.marker = marker\n }\n\n while (pos < max) {\n code = str.charCodeAt(pos)\n if (code === state.marker) {\n state.pos = pos + 1\n state.str += unescapeAll(str.slice(start, pos))\n state.ok = true\n return state\n } else if (code === 0x28 /* ( */ && state.marker === 0x29 /* ) */) {\n return state\n } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos++\n }\n\n pos++\n }\n\n // no closing marker found, but this link title may continue on the next line (for references)\n state.can_continue = true\n state.str += unescapeAll(str.slice(start, pos))\n return state\n}\n","/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n\nimport { assign, unescapeAll, escapeHtml } from './common/utils.mjs'\n\nconst default_rules = {}\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n const token = tokens[idx]\n\n return '<code' + slf.renderAttrs(token) + '>' +\n escapeHtml(token.content) +\n '</code>'\n}\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n const token = tokens[idx]\n\n return '<pre' + slf.renderAttrs(token) + '><code>' +\n escapeHtml(tokens[idx].content) +\n '</code></pre>\\n'\n}\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n const token = tokens[idx]\n const info = token.info ? unescapeAll(token.info).trim() : ''\n let langName = ''\n let langAttrs = ''\n\n if (info) {\n const arr = info.split(/(\\s+)/g)\n langName = arr[0]\n langAttrs = arr.slice(2).join('')\n }\n\n let highlighted\n if (options.highlight) {\n highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content)\n } else {\n highlighted = escapeHtml(token.content)\n }\n\n if (highlighted.indexOf('<pre') === 0) {\n return highlighted + '\\n'\n }\n\n // If language exists, inject class gently, without modifying original token.\n // May be, one day we will add .deepClone() for token and simplify this part, but\n // now we prefer to keep things local.\n if (info) {\n const i = token.attrIndex('class')\n const tmpAttrs = token.attrs ? token.attrs.slice() : []\n\n if (i < 0) {\n tmpAttrs.push(['class', options.langPrefix + langName])\n } else {\n tmpAttrs[i] = tmpAttrs[i].slice()\n tmpAttrs[i][1] += ' ' + options.langPrefix + langName\n }\n\n // Fake token just to render attributes\n const tmpToken = {\n attrs: tmpAttrs\n }\n\n return `<pre><code${slf.renderAttrs(tmpToken)}>${highlighted}</code></pre>\\n`\n }\n\n return `<pre><code${slf.renderAttrs(token)}>${highlighted}</code></pre>\\n`\n}\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n const token = tokens[idx]\n\n // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n // should be placed on proper position for tests.\n //\n // Replace content with actual value\n\n token.attrs[token.attrIndex('alt')][1] =\n slf.renderInlineAsText(token.children, options, env)\n\n return slf.renderToken(tokens, idx, options)\n}\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n return options.xhtmlOut ? '<br />\\n' : '<br>\\n'\n}\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n'\n}\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n return escapeHtml(tokens[idx].content)\n}\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n return tokens[idx].content\n}\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n return tokens[idx].content\n}\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer () {\n /**\n * Renderer#rules -> Object\n *\n * Contains render rules for tokens. Can be updated and extended.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.renderer.rules.strong_open = function () { return '<b>'; };\n * md.renderer.rules.strong_close = function () { return '</b>'; };\n *\n * var result = md.renderInline(...);\n * ```\n *\n * Each rule is called as independent static function with fixed signature:\n *\n * ```javascript\n * function my_token_render(tokens, idx, options, env, renderer) {\n * // ...\n * return renderedHTML;\n * }\n * ```\n *\n * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.mjs)\n * for more details and examples.\n **/\n this.rules = assign({}, default_rules)\n}\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs (token) {\n let i, l, result\n\n if (!token.attrs) { return '' }\n\n result = ''\n\n for (i = 0, l = token.attrs.length; i < l; i++) {\n result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"'\n }\n\n return result\n}\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken (tokens, idx, options) {\n const token = tokens[idx]\n let result = ''\n\n // Tight list paragraphs\n if (token.hidden) {\n return ''\n }\n\n // Insert a newline between hidden paragraph and subsequent opening\n // block-level tag.\n //\n // For example, here we should insert a newline before blockquote:\n // - a\n // >\n //\n if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n result += '\\n'\n }\n\n // Add token name, e.g. `<img`\n result += (token.nesting === -1 ? '</' : '<') + token.tag\n\n // Encode attributes, e.g. `<img src=\"foo\"`\n result += this.renderAttrs(token)\n\n // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n if (token.nesting === 0 && options.xhtmlOut) {\n result += ' /'\n }\n\n // Check if we need to add a newline after this tag\n let needLf = false\n if (token.block) {\n needLf = true\n\n if (token.nesting === 1) {\n if (idx + 1 < tokens.length) {\n const nextToken = tokens[idx + 1]\n\n if (nextToken.type === 'inline' || nextToken.hidden) {\n // Block-level tag containing an inline tag.\n //\n needLf = false\n } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n //\n needLf = false\n }\n }\n }\n }\n\n result += needLf ? '>\\n' : '>'\n\n return result\n}\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n let result = ''\n const rules = this.rules\n\n for (let i = 0, len = tokens.length; i < len; i++) {\n const type = tokens[i].type\n\n if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this)\n } else {\n result += this.renderToken(tokens, i, options)\n }\n }\n\n return result\n}\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n let result = ''\n\n for (let i = 0, len = tokens.length; i < len; i++) {\n switch (tokens[i].type) {\n case 'text':\n result += tokens[i].content\n break\n case 'image':\n result += this.renderInlineAsText(tokens[i].children, options, env)\n break\n case 'html_inline':\n case 'html_block':\n result += tokens[i].content\n break\n case 'softbreak':\n case 'hardbreak':\n result += '\\n'\n break\n default:\n // all other tokens are skipped\n }\n }\n\n return result\n}\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n let result = ''\n const rules = this.rules\n\n for (let i = 0, len = tokens.length; i < len; i++) {\n const type = tokens[i].type\n\n if (type === 'inline') {\n result += this.renderInline(tokens[i].children, options, env)\n } else if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this)\n } else {\n result += this.renderToken(tokens, i, options, env)\n }\n }\n\n return result\n}\n\nexport default Renderer\n","/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n\n/**\n * new Ruler()\n **/\nfunction Ruler () {\n // List of added rules. Each element is:\n //\n // {\n // name: XXX,\n // enabled: Boolean,\n // fn: Function(),\n // alt: [ name2, name3 ]\n // }\n //\n this.__rules__ = []\n\n // Cached rule chains.\n //\n // First level - chain name, '' for default.\n // Second level - diginal anchor for fast filtering by charcodes.\n //\n this.__cache__ = null\n}\n\n// Helper methods, should not be used directly\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n for (let i = 0; i < this.__rules__.length; i++) {\n if (this.__rules__[i].name === name) {\n return i\n }\n }\n return -1\n}\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n const self = this\n const chains = ['']\n\n // collect unique names\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return }\n\n rule.alt.forEach(function (altName) {\n if (chains.indexOf(altName) < 0) {\n chains.push(altName)\n }\n })\n })\n\n self.__cache__ = {}\n\n chains.forEach(function (chain) {\n self.__cache__[chain] = []\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return }\n\n if (chain && rule.alt.indexOf(chain) < 0) { return }\n\n self.__cache__[chain].push(rule.fn)\n })\n })\n}\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n const index = this.__find__(name)\n const opt = options || {}\n\n if (index === -1) { throw new Error('Parser rule not found: ' + name) }\n\n this.__rules__[index].fn = fn\n this.__rules__[index].alt = opt.alt || []\n this.__cache__ = null\n}\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n const index = this.__find__(beforeName)\n const opt = options || {}\n\n if (index === -1) { throw new Error('Parser rule not found: ' + beforeName) }\n\n this.__rules__.splice(index, 0, {\n name: ruleName,\n enabled: true,\n fn,\n alt: opt.alt || []\n })\n\n this.__cache__ = null\n}\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n const index = this.__find__(afterName)\n const opt = options || {}\n\n if (index === -1) { throw new Error('Parser rule not found: ' + afterName) }\n\n this.__rules__.splice(index + 1, 0, {\n name: ruleName,\n enabled: true,\n fn,\n alt: opt.alt || []\n })\n\n this.__cache__ = null\n}\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n const opt = options || {}\n\n this.__rules__.push({\n name: ruleName,\n enabled: true,\n fn,\n alt: opt.alt || []\n })\n\n this.__cache__ = null\n}\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [list] }\n\n const result = []\n\n // Search by name and enable\n list.forEach(function (name) {\n const idx = this.__find__(name)\n\n if (idx < 0) {\n if (ignoreInvalid) { return }\n throw new Error('Rules manager: invalid rule name ' + name)\n }\n this.__rules__[idx].enabled = true\n result.push(name)\n }, this)\n\n this.__cache__ = null\n return result\n}\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [list] }\n\n this.__rules__.forEach(function (rule) { rule.enabled = false })\n\n this.enable(list, ignoreInvalid)\n}\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [list] }\n\n const result = []\n\n // Search by name and disable\n list.forEach(function (name) {\n const idx = this.__find__(name)\n\n if (idx < 0) {\n if (ignoreInvalid) { return }\n throw new Error('Rules manager: invalid rule name ' + name)\n }\n this.__rules__[idx].enabled = false\n result.push(name)\n }, this)\n\n this.__cache__ = null\n return result\n}\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n if (this.__cache__ === null) {\n this.__compile__()\n }\n\n // Chain can be empty, if rules disabled. But we still have to return Array.\n return this.__cache__[chainName] || []\n}\n\nexport default Ruler\n","// Token class\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token (type, tag, nesting) {\n /**\n * Token#type -> String\n *\n * Type of the token (string, e.g. \"paragraph_open\")\n **/\n this.type = type\n\n /**\n * Token#tag -> String\n *\n * html tag name, e.g. \"p\"\n **/\n this.tag = tag\n\n /**\n * Token#attrs -> Array\n *\n * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n **/\n this.attrs = null\n\n /**\n * Token#map -> Array\n *\n * Source map info. Format: `[ line_begin, line_end ]`\n **/\n this.map = null\n\n /**\n * Token#nesting -> Number\n *\n * Level change (number in {-1, 0, 1} set), where:\n *\n * - `1` means the tag is opening\n * - `0` means the tag is self-closing\n * - `-1` means the tag is closing\n **/\n this.nesting = nesting\n\n /**\n * Token#level -> Number\n *\n * nesting level, the same as `state.level`\n **/\n this.level = 0\n\n /**\n * Token#children -> Array\n *\n * An array of child nodes (inline and img tokens)\n **/\n this.children = null\n\n /**\n * Token#content -> String\n *\n * In a case of self-closing tag (code, html, fence, etc.),\n * it has contents of this tag.\n **/\n this.content = ''\n\n /**\n * Token#markup -> String\n *\n * '*' or '_' for emphasis, fence string for fence, etc.\n **/\n this.markup = ''\n\n /**\n * Token#info -> String\n *\n * Additional information:\n *\n * - Info string for \"fence\" tokens\n * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n **/\n this.info = ''\n\n /**\n * Token#meta -> Object\n *\n * A place for plugins to store an arbitrary data\n **/\n this.meta = null\n\n /**\n * Token#block -> Boolean\n *\n * True for block-level tokens, false for inline tokens.\n * Used in renderer to calculate line breaks\n **/\n this.block = false\n\n /**\n * Token#hidden -> Boolean\n *\n * If it's true, ignore this element when rendering. Used for tight lists\n * to hide paragraphs.\n **/\n this.hidden = false\n}\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex (name) {\n if (!this.attrs) { return -1 }\n\n const attrs = this.attrs\n\n for (let i = 0, len = attrs.length; i < len; i++) {\n if (attrs[i][0] === name) { return i }\n }\n return -1\n}\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush (attrData) {\n if (this.attrs) {\n this.attrs.push(attrData)\n } else {\n this.attrs = [attrData]\n }\n}\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet (name, value) {\n const idx = this.attrIndex(name)\n const attrData = [name, value]\n\n if (idx < 0) {\n this.attrPush(attrData)\n } else {\n this.attrs[idx] = attrData\n }\n}\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet (name) {\n const idx = this.attrIndex(name)\n let value = null\n if (idx >= 0) {\n value = this.attrs[idx][1]\n }\n return value\n}\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin (name, value) {\n const idx = this.attrIndex(name)\n\n if (idx < 0) {\n this.attrPush([name, value])\n } else {\n this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value\n }\n}\n\nexport default Token\n","// Core state object\n//\n\nimport Token from '../token.mjs'\n\nfunction StateCore (src, md, env) {\n this.src = src\n this.env = env\n this.tokens = []\n this.inlineMode = false\n this.md = md // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token\n\nexport default StateCore\n","// Normalize input string\n\n// https://spec.commonmark.org/0.29/#line-ending\nconst NEWLINES_RE = /\\r\\n?|\\n/g\nconst NULL_RE = /\\0/g\n\nexport default function normalize (state) {\n let str\n\n // Normalize newlines\n str = state.src.replace(NEWLINES_RE, '\\n')\n\n // Replace NULL characters\n str = str.replace(NULL_RE, '\\uFFFD')\n\n state.src = str\n}\n","export default function block (state) {\n let token\n\n if (state.inlineMode) {\n token = new state.Token('inline', '', 0)\n token.content = state.src\n token.map = [0, 1]\n token.children = []\n state.tokens.push(token)\n } else {\n state.md.block.parse(state.src, state.md, state.env, state.tokens)\n }\n}\n","export default function inline (state) {\n const tokens = state.tokens\n\n // Parse inlines\n for (let i = 0, l = tokens.length; i < l; i++) {\n const tok = tokens[i]\n if (tok.type === 'inline') {\n state.md.inline.parse(tok.content, state.md, state.env, tok.children)\n }\n }\n}\n","// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n\nimport { arrayReplaceAt } from '../common/utils.mjs'\n\nfunction isLinkOpen (str) {\n return /^<a[>\\s]/i.test(str)\n}\nfunction isLinkClose (str) {\n return /^<\\/a\\s*>/i.test(str)\n}\n\nexport default function linkify (state) {\n const blockTokens = state.tokens\n\n if (!state.md.options.linkify) { return }\n\n for (let j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline' ||\n !state.md.linkify.pretest(blockTokens[j].content)) {\n continue\n }\n\n let tokens = blockTokens[j].children\n\n let htmlLinkLevel = 0\n\n // We scan from the end, to keep position when new tags added.\n // Use reversed logic in links start/end match\n for (let i = tokens.length - 1; i >= 0; i--) {\n const currentToken = tokens[i]\n\n // Skip content of markdown links\n if (currentToken.type === 'link_close') {\n i--\n while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n i--\n }\n continue\n }\n\n // Skip content of html tag links\n if (currentToken.type === 'html_inline') {\n if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n htmlLinkLevel--\n }\n if (isLinkClose(currentToken.content)) {\n htmlLinkLevel++\n }\n }\n if (htmlLinkLevel > 0) { continue }\n\n if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n const text = currentToken.content\n let links = state.md.linkify.match(text)\n\n // Now split string to nodes\n const nodes = []\n let level = currentToken.level\n let lastPos = 0\n\n // forbid escape sequence at the start of the string,\n // this avoids http\\://example.com/ from being linkified as\n // http:<a href=\"//example.com/\">//example.com/</a>\n if (links.length > 0 &&\n links[0].index === 0 &&\n i > 0 &&\n tokens[i - 1].type === 'text_special') {\n links = links.slice(1)\n }\n\n for (let ln = 0; ln < links.length; ln++) {\n const url = links[ln].url\n const fullUrl = state.md.normalizeLink(url)\n if (!state.md.validateLink(fullUrl)) { continue }\n\n let urlText = links[ln].text\n\n // Linkifier might send raw hostnames like \"example.com\", where url\n // starts with domain name. So we prepend http:// in those cases,\n // and remove it afterwards.\n //\n if (!links[ln].schema) {\n urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '')\n } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '')\n } else {\n urlText = state.md.normalizeLinkText(urlText)\n }\n\n const pos = links[ln].index\n\n if (pos > lastPos) {\n const token = new state.Token('text', '', 0)\n token.content = text.slice(lastPos, pos)\n token.level = level\n nodes.push(token)\n }\n\n const token_o = new state.Token('link_open', 'a', 1)\n token_o.attrs = [['href', fullUrl]]\n token_o.level = level++\n token_o.markup = 'linkify'\n token_o.info = 'auto'\n nodes.push(token_o)\n\n const token_t = new state.Token('text', '', 0)\n token_t.content = urlText\n token_t.level = level\n nodes.push(token_t)\n\n const token_c = new state.Token('link_close', 'a', -1)\n token_c.level = --level\n token_c.markup = 'linkify'\n token_c.info = 'auto'\n nodes.push(token_c)\n\n lastPos = links[ln].lastIndex\n }\n if (lastPos < text.length) {\n const token = new state.Token('text', '', 0)\n token.content = text.slice(lastPos)\n token.level = level\n nodes.push(token)\n }\n\n // replace current node\n blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes)\n }\n }\n }\n}\n","// Simple typographic replacements\n//\n// (c) (C) → ©\n// (tm) (TM) → â„¢\n// (r) (R) → ®\n// +- → ±\n// ... → … (also ?.... → ?.., !.... → !..)\n// ???????? → ???, !!!!! → !!!, `,,` → `,`\n// -- → –, --- → —\n//\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾\n// - multiplications 2 x 4 -> 2 × 4\n\nconst RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nconst SCOPED_ABBR_TEST_RE = /\\((c|tm|r)\\)/i\n\nconst SCOPED_ABBR_RE = /\\((c|tm|r)\\)/ig\nconst SCOPED_ABBR = {\n c: '©',\n r: '®',\n tm: 'â„¢'\n}\n\nfunction replaceFn (match, name) {\n return SCOPED_ABBR[name.toLowerCase()]\n}\n\nfunction replace_scoped (inlineTokens) {\n let inside_autolink = 0\n\n for (let i = inlineTokens.length - 1; i >= 0; i--) {\n const token = inlineTokens[i]\n\n if (token.type === 'text' && !inside_autolink) {\n token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn)\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++\n }\n }\n}\n\nfunction replace_rare (inlineTokens) {\n let inside_autolink = 0\n\n for (let i = inlineTokens.length - 1; i >= 0; i--) {\n const token = inlineTokens[i]\n\n if (token.type === 'text' && !inside_autolink) {\n if (RARE_RE.test(token.content)) {\n token.content = token.content\n .replace(/\\+-/g, '±')\n // .., ..., ....... -> …\n // but ?..... & !..... -> ?.. & !..\n .replace(/\\.{2,}/g, '…').replace(/([?!])…/g, '$1..')\n .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n // em-dash\n .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n // en-dash\n .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013')\n }\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++\n }\n }\n}\n\nexport default function replace (state) {\n let blkIdx\n\n if (!state.md.options.typographer) { return }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n if (state.tokens[blkIdx].type !== 'inline') { continue }\n\n if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n replace_scoped(state.tokens[blkIdx].children)\n }\n\n if (RARE_RE.test(state.tokens[blkIdx].content)) {\n replace_rare(state.tokens[blkIdx].children)\n }\n }\n}\n","// Convert straight quotation marks to typographic ones\n//\n\nimport { isWhiteSpace, isPunctChar, isMdAsciiPunct } from '../common/utils.mjs'\n\nconst QUOTE_TEST_RE = /['\"]/\nconst QUOTE_RE = /['\"]/g\nconst APOSTROPHE = '\\u2019' /* ’ */\n\nfunction replaceAt (str, index, ch) {\n return str.slice(0, index) + ch + str.slice(index + 1)\n}\n\nfunction process_inlines (tokens, state) {\n let j\n\n const stack = []\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i]\n\n const thisLevel = tokens[i].level\n\n for (j = stack.length - 1; j >= 0; j--) {\n if (stack[j].level <= thisLevel) { break }\n }\n stack.length = j + 1\n\n if (token.type !== 'text') { continue }\n\n let text = token.content\n let pos = 0\n let max = text.length\n\n /* eslint no-labels:0,block-scoped-var:0 */\n OUTER:\n while (pos < max) {\n QUOTE_RE.lastIndex = pos\n const t = QUOTE_RE.exec(text)\n if (!t) { break }\n\n let canOpen = true\n let canClose = true\n pos = t.index + 1\n const isSingle = (t[0] === \"'\")\n\n // Find previous character,\n // default to space if it's the beginning of the line\n //\n let lastChar = 0x20\n\n if (t.index - 1 >= 0) {\n lastChar = text.charCodeAt(t.index - 1)\n } else {\n for (j = i - 1; j >= 0; j--) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break // lastChar defaults to 0x20\n if (!tokens[j].content) continue // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1)\n break\n }\n }\n\n // Find next character,\n // default to space if it's the end of the line\n //\n let nextChar = 0x20\n\n if (pos < max) {\n nextChar = text.charCodeAt(pos)\n } else {\n for (j = i + 1; j < tokens.length; j++) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break // nextChar defaults to 0x20\n if (!tokens[j].content) continue // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n nextChar = tokens[j].content.charCodeAt(0)\n break\n }\n }\n\n const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar))\n const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar))\n\n const isLastWhiteSpace = isWhiteSpace(lastChar)\n const isNextWhiteSpace = isWhiteSpace(nextChar)\n\n if (isNextWhiteSpace) {\n canOpen = false\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n canOpen = false\n }\n }\n\n if (isLastWhiteSpace) {\n canClose = false\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n canClose = false\n }\n }\n\n if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n // special case: 1\"\" - count first quote as an inch\n canClose = canOpen = false\n }\n }\n\n if (canOpen && canClose) {\n // Replace quotes in the middle of punctuation sequence, but not\n // in the middle of the words, i.e.:\n //\n // 1. foo \" bar \" baz - not replaced\n // 2. foo-\"-bar-\"-baz - replaced\n // 3. foo\"bar\"baz - not replaced\n //\n canOpen = isLastPunctChar\n canClose = isNextPunctChar\n }\n\n if (!canOpen && !canClose) {\n // middle of word\n if (isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE)\n }\n continue\n }\n\n if (canClose) {\n // this could be a closing quote, rewind the stack to get a match\n for (j = stack.length - 1; j >= 0; j--) {\n let item = stack[j]\n if (stack[j].level < thisLevel) { break }\n if (item.single === isSingle && stack[j].level === thisLevel) {\n item = stack[j]\n\n let openQuote\n let closeQuote\n if (isSingle) {\n openQuote = state.md.options.quotes[2]\n closeQuote = state.md.options.quotes[3]\n } else {\n openQuote = state.md.options.quotes[0]\n closeQuote = state.md.options.quotes[1]\n }\n\n // replace token.content *before* tokens[item.token].content,\n // because, if they are pointing at the same token, replaceAt\n // could mess up indices when quote length != 1\n token.content = replaceAt(token.content, t.index, closeQuote)\n tokens[item.token].content = replaceAt(\n tokens[item.token].content, item.pos, openQuote)\n\n pos += closeQuote.length - 1\n if (item.token === i) { pos += openQuote.length - 1 }\n\n text = token.content\n max = text.length\n\n stack.length = j\n continue OUTER\n }\n }\n }\n\n if (canOpen) {\n stack.push({\n token: i,\n pos: t.index,\n single: isSingle,\n level: thisLevel\n })\n } else if (canClose && isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE)\n }\n }\n }\n}\n\nexport default function smartquotes (state) {\n /* eslint max-depth:0 */\n if (!state.md.options.typographer) { return }\n\n for (let blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n if (state.tokens[blkIdx].type !== 'inline' ||\n !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n continue\n }\n\n process_inlines(state.tokens[blkIdx].children, state)\n }\n}\n","// Join raw text tokens with the rest of the text\n//\n// This is set as a separate rule to provide an opportunity for plugins\n// to run text replacements after text join, but before escape join.\n//\n// For example, `\\:)` shouldn't be replaced with an emoji.\n//\n\nexport default function text_join (state) {\n let curr, last\n const blockTokens = state.tokens\n const l = blockTokens.length\n\n for (let j = 0; j < l; j++) {\n if (blockTokens[j].type !== 'inline') continue\n\n const tokens = blockTokens[j].children\n const max = tokens.length\n\n for (curr = 0; curr < max; curr++) {\n if (tokens[curr].type === 'text_special') {\n tokens[curr].type = 'text'\n }\n }\n\n for (curr = last = 0; curr < max; curr++) {\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content\n } else {\n if (curr !== last) { tokens[last] = tokens[curr] }\n\n last++\n }\n }\n\n if (curr !== last) {\n tokens.length = last\n }\n }\n}\n","/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateCore from './rules_core/state_core.mjs'\n\nimport r_normalize from './rules_core/normalize.mjs'\nimport r_block from './rules_core/block.mjs'\nimport r_inline from './rules_core/inline.mjs'\nimport r_linkify from './rules_core/linkify.mjs'\nimport r_replacements from './rules_core/replacements.mjs'\nimport r_smartquotes from './rules_core/smartquotes.mjs'\nimport r_text_join from './rules_core/text_join.mjs'\n\nconst _rules = [\n ['normalize', r_normalize],\n ['block', r_block],\n ['inline', r_inline],\n ['linkify', r_linkify],\n ['replacements', r_replacements],\n ['smartquotes', r_smartquotes],\n // `text_join` finds `text_special` tokens (for escape sequences)\n // and joins them with the rest of the text\n ['text_join', r_text_join]\n]\n\n/**\n * new Core()\n **/\nfunction Core () {\n /**\n * Core#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of core rules.\n **/\n this.ruler = new Ruler()\n\n for (let i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1])\n }\n}\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n const rules = this.ruler.getRules('')\n\n for (let i = 0, l = rules.length; i < l; i++) {\n rules[i](state)\n }\n}\n\nCore.prototype.State = StateCore\n\nexport default Core\n","// Parser state class\n\nimport Token from '../token.mjs'\nimport { isSpace } from '../common/utils.mjs'\n\nfunction StateBlock (src, md, env, tokens) {\n this.src = src\n\n // link to parser instance\n this.md = md\n\n this.env = env\n\n //\n // Internal state vartiables\n //\n\n this.tokens = tokens\n\n this.bMarks = [] // line begin offsets for fast jumps\n this.eMarks = [] // line end offsets for fast jumps\n this.tShift = [] // offsets of the first non-space characters (tabs not expanded)\n this.sCount = [] // indents for each line (tabs expanded)\n\n // An amount of virtual spaces (tabs expanded) between beginning\n // of each line (bMarks) and real beginning of that line.\n //\n // It exists only as a hack because blockquotes override bMarks\n // losing information in the process.\n //\n // It's used only when expanding tabs, you can think about it as\n // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n // means first tab should be expanded to 4-21%4 === 3 spaces.\n //\n this.bsCount = []\n\n // block parser variables\n\n // required block content indent (for example, if we are\n // inside a list, it would be positioned after list marker)\n this.blkIndent = 0\n this.line = 0 // line index in src\n this.lineMax = 0 // lines count\n this.tight = false // loose/tight mode for lists\n this.ddIndent = -1 // indent of the current dd block (-1 if there isn't any)\n this.listIndent = -1 // indent of the current list block (-1 if there isn't any)\n\n // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n // used in lists to determine if they interrupt a paragraph\n this.parentType = 'root'\n\n this.level = 0\n\n // Create caches\n // Generate markers.\n const s = this.src\n\n for (let start = 0, pos = 0, indent = 0, offset = 0, len = s.length, indent_found = false; pos < len; pos++) {\n const ch = s.charCodeAt(pos)\n\n if (!indent_found) {\n if (isSpace(ch)) {\n indent++\n\n if (ch === 0x09) {\n offset += 4 - offset % 4\n } else {\n offset++\n }\n continue\n } else {\n indent_found = true\n }\n }\n\n if (ch === 0x0A || pos === len - 1) {\n if (ch !== 0x0A) { pos++ }\n this.bMarks.push(start)\n this.eMarks.push(pos)\n this.tShift.push(indent)\n this.sCount.push(offset)\n this.bsCount.push(0)\n\n indent_found = false\n indent = 0\n offset = 0\n start = pos + 1\n }\n }\n\n // Push fake entry to simplify cache bounds checks\n this.bMarks.push(s.length)\n this.eMarks.push(s.length)\n this.tShift.push(0)\n this.sCount.push(0)\n this.bsCount.push(0)\n\n this.lineMax = this.bMarks.length - 1 // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n const token = new Token(type, tag, nesting)\n token.block = true\n\n if (nesting < 0) this.level-- // closing tag\n token.level = this.level\n if (nesting > 0) this.level++ // opening tag\n\n this.tokens.push(token)\n return token\n}\n\nStateBlock.prototype.isEmpty = function isEmpty (line) {\n return this.bMarks[line] + this.tShift[line] >= this.eMarks[line]\n}\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines (from) {\n for (let max = this.lineMax; from < max; from++) {\n if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n break\n }\n }\n return from\n}\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces (pos) {\n for (let max = this.src.length; pos < max; pos++) {\n const ch = this.src.charCodeAt(pos)\n if (!isSpace(ch)) { break }\n }\n return pos\n}\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack (pos, min) {\n if (pos <= min) { return pos }\n\n while (pos > min) {\n if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1 }\n }\n return pos\n}\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars (pos, code) {\n for (let max = this.src.length; pos < max; pos++) {\n if (this.src.charCodeAt(pos) !== code) { break }\n }\n return pos\n}\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack (pos, code, min) {\n if (pos <= min) { return pos }\n\n while (pos > min) {\n if (code !== this.src.charCodeAt(--pos)) { return pos + 1 }\n }\n return pos\n}\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines (begin, end, indent, keepLastLF) {\n if (begin >= end) {\n return ''\n }\n\n const queue = new Array(end - begin)\n\n for (let i = 0, line = begin; line < end; line++, i++) {\n let lineIndent = 0\n const lineStart = this.bMarks[line]\n let first = lineStart\n let last\n\n if (line + 1 < end || keepLastLF) {\n // No need for bounds check because we have fake entry on tail.\n last = this.eMarks[line] + 1\n } else {\n last = this.eMarks[line]\n }\n\n while (first < last && lineIndent < indent) {\n const ch = this.src.charCodeAt(first)\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4\n } else {\n lineIndent++\n }\n } else if (first - lineStart < this.tShift[line]) {\n // patched tShift masked characters to look like spaces (blockquotes, list markers)\n lineIndent++\n } else {\n break\n }\n\n first++\n }\n\n if (lineIndent > indent) {\n // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n // with indent=2 becomes ' \\tfoobar'\n queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last)\n } else {\n queue[i] = this.src.slice(first, last)\n }\n }\n\n return queue.join('')\n}\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token\n\nexport default StateBlock\n","// GFM table, https://github.github.com/gfm/#tables-extension-\n\nimport { isSpace } from '../common/utils.mjs'\n\n// Limit the amount of empty autocompleted cells in a table,\n// see https://github.com/markdown-it/markdown-it/issues/1000,\n//\n// Both pulldown-cmark and commonmark-hs limit the number of cells this way to ~200k.\n// We set it to 65k, which can expand user input by a factor of x370\n// (256x256 square is 1.8kB expanded into 650kB).\nconst MAX_AUTOCOMPLETED_CELLS = 0x10000\n\nfunction getLine (state, line) {\n const pos = state.bMarks[line] + state.tShift[line]\n const max = state.eMarks[line]\n\n return state.src.slice(pos, max)\n}\n\nfunction escapedSplit (str) {\n const result = []\n const max = str.length\n\n let pos = 0\n let ch = str.charCodeAt(pos)\n let isEscaped = false\n let lastPos = 0\n let current = ''\n\n while (pos < max) {\n if (ch === 0x7c/* | */) {\n if (!isEscaped) {\n // pipe separating cells, '|'\n result.push(current + str.substring(lastPos, pos))\n current = ''\n lastPos = pos + 1\n } else {\n // escaped pipe, '\\|'\n current += str.substring(lastPos, pos - 1)\n lastPos = pos\n }\n }\n\n isEscaped = (ch === 0x5c/* \\ */)\n pos++\n\n ch = str.charCodeAt(pos)\n }\n\n result.push(current + str.substring(lastPos))\n\n return result\n}\n\nexport default function table (state, startLine, endLine, silent) {\n // should have at least two lines\n if (startLine + 2 > endLine) { return false }\n\n let nextLine = startLine + 1\n\n if (state.sCount[nextLine] < state.blkIndent) { return false }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[nextLine] - state.blkIndent >= 4) { return false }\n\n // first character of the second line should be '|', '-', ':',\n // and no other characters are allowed but spaces;\n // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n let pos = state.bMarks[nextLine] + state.tShift[nextLine]\n if (pos >= state.eMarks[nextLine]) { return false }\n\n const firstCh = state.src.charCodeAt(pos++)\n if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false }\n\n if (pos >= state.eMarks[nextLine]) { return false }\n\n const secondCh = state.src.charCodeAt(pos++)\n if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n return false\n }\n\n // if first character is '-', then second character must not be a space\n // (due to parsing ambiguity with list)\n if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false }\n\n while (pos < state.eMarks[nextLine]) {\n const ch = state.src.charCodeAt(pos)\n\n if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false }\n\n pos++\n }\n\n let lineText = getLine(state, startLine + 1)\n let columns = lineText.split('|')\n const aligns = []\n for (let i = 0; i < columns.length; i++) {\n const t = columns[i].trim()\n if (!t) {\n // allow empty columns before and after table, but not in between columns;\n // e.g. allow ` |---| `, disallow ` ---||--- `\n if (i === 0 || i === columns.length - 1) {\n continue\n } else {\n return false\n }\n }\n\n if (!/^:?-+:?$/.test(t)) { return false }\n if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right')\n } else if (t.charCodeAt(0) === 0x3A/* : */) {\n aligns.push('left')\n } else {\n aligns.push('')\n }\n }\n\n lineText = getLine(state, startLine).trim()\n if (lineText.indexOf('|') === -1) { return false }\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n columns = escapedSplit(lineText)\n if (columns.length && columns[0] === '') columns.shift()\n if (columns.length && columns[columns.length - 1] === '') columns.pop()\n\n // header row will define an amount of columns in the entire table,\n // and align row should be exactly the same (the rest of the rows can differ)\n const columnCount = columns.length\n if (columnCount === 0 || columnCount !== aligns.length) { return false }\n\n if (silent) { return true }\n\n const oldParentType = state.parentType\n state.parentType = 'table'\n\n // use 'blockquote' lists for termination because it's\n // the most similar to tables\n const terminatorRules = state.md.block.ruler.getRules('blockquote')\n\n const token_to = state.push('table_open', 'table', 1)\n const tableLines = [startLine, 0]\n token_to.map = tableLines\n\n const token_tho = state.push('thead_open', 'thead', 1)\n token_tho.map = [startLine, startLine + 1]\n\n const token_htro = state.push('tr_open', 'tr', 1)\n token_htro.map = [startLine, startLine + 1]\n\n for (let i = 0; i < columns.length; i++) {\n const token_ho = state.push('th_open', 'th', 1)\n if (aligns[i]) {\n token_ho.attrs = [['style', 'text-align:' + aligns[i]]]\n }\n\n const token_il = state.push('inline', '', 0)\n token_il.content = columns[i].trim()\n token_il.children = []\n\n state.push('th_close', 'th', -1)\n }\n\n state.push('tr_close', 'tr', -1)\n state.push('thead_close', 'thead', -1)\n\n let tbodyLines\n let autocompletedCells = 0\n\n for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break }\n\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n\n if (terminate) { break }\n lineText = getLine(state, nextLine).trim()\n if (!lineText) { break }\n if (state.sCount[nextLine] - state.blkIndent >= 4) { break }\n columns = escapedSplit(lineText)\n if (columns.length && columns[0] === '') columns.shift()\n if (columns.length && columns[columns.length - 1] === '') columns.pop()\n\n // note: autocomplete count can be negative if user specifies more columns than header,\n // but that does not affect intended use (which is limiting expansion)\n autocompletedCells += columnCount - columns.length\n if (autocompletedCells > MAX_AUTOCOMPLETED_CELLS) { break }\n\n if (nextLine === startLine + 2) {\n const token_tbo = state.push('tbody_open', 'tbody', 1)\n token_tbo.map = tbodyLines = [startLine + 2, 0]\n }\n\n const token_tro = state.push('tr_open', 'tr', 1)\n token_tro.map = [nextLine, nextLine + 1]\n\n for (let i = 0; i < columnCount; i++) {\n const token_tdo = state.push('td_open', 'td', 1)\n if (aligns[i]) {\n token_tdo.attrs = [['style', 'text-align:' + aligns[i]]]\n }\n\n const token_il = state.push('inline', '', 0)\n token_il.content = columns[i] ? columns[i].trim() : ''\n token_il.children = []\n\n state.push('td_close', 'td', -1)\n }\n state.push('tr_close', 'tr', -1)\n }\n\n if (tbodyLines) {\n state.push('tbody_close', 'tbody', -1)\n tbodyLines[1] = nextLine\n }\n\n state.push('table_close', 'table', -1)\n tableLines[1] = nextLine\n\n state.parentType = oldParentType\n state.line = nextLine\n return true\n}\n","// Code block (4 spaces padded)\n\nexport default function code (state, startLine, endLine/*, silent */) {\n if (state.sCount[startLine] - state.blkIndent < 4) { return false }\n\n let nextLine = startLine + 1\n let last = nextLine\n\n while (nextLine < endLine) {\n if (state.isEmpty(nextLine)) {\n nextLine++\n continue\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n nextLine++\n last = nextLine\n continue\n }\n break\n }\n\n state.line = last\n\n const token = state.push('code_block', 'code', 0)\n token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n'\n token.map = [startLine, state.line]\n\n return true\n}\n","// fences (``` lang, ~~~ lang)\n\nexport default function fence (state, startLine, endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n if (pos + 3 > max) { return false }\n\n const marker = state.src.charCodeAt(pos)\n\n if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n return false\n }\n\n // scan marker length\n let mem = pos\n pos = state.skipChars(pos, marker)\n\n let len = pos - mem\n\n if (len < 3) { return false }\n\n const markup = state.src.slice(mem, pos)\n const params = state.src.slice(pos, max)\n\n if (marker === 0x60 /* ` */) {\n if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n return false\n }\n }\n\n // Since start is found, we can report success here in validation mode\n if (silent) { return true }\n\n // search end of block\n let nextLine = startLine\n let haveEndMarker = false\n\n for (;;) {\n nextLine++\n if (nextLine >= endLine) {\n // unclosed block should be autoclosed by end of document.\n // also block seems to be autoclosed by end of parent\n break\n }\n\n pos = mem = state.bMarks[nextLine] + state.tShift[nextLine]\n max = state.eMarks[nextLine]\n\n if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n // non-empty line with negative indent should stop the list:\n // - ```\n // test\n break\n }\n\n if (state.src.charCodeAt(pos) !== marker) { continue }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n // closing fence should be indented less than 4 spaces\n continue\n }\n\n pos = state.skipChars(pos, marker)\n\n // closing code fence must be at least as long as the opening one\n if (pos - mem < len) { continue }\n\n // make sure tail has spaces only\n pos = state.skipSpaces(pos)\n\n if (pos < max) { continue }\n\n haveEndMarker = true\n // found!\n break\n }\n\n // If a fence has heading spaces, they should be removed from its inner block\n len = state.sCount[startLine]\n\n state.line = nextLine + (haveEndMarker ? 1 : 0)\n\n const token = state.push('fence', 'code', 0)\n token.info = params\n token.content = state.getLines(startLine + 1, nextLine, len, true)\n token.markup = markup\n token.map = [startLine, state.line]\n\n return true\n}\n","// Block quotes\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function blockquote (state, startLine, endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n\n const oldLineMax = state.lineMax\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n // check the block quote marker\n if (state.src.charCodeAt(pos) !== 0x3E/* > */) { return false }\n\n // we know that it's going to be a valid blockquote,\n // so no point trying to find the end of it in silent mode\n if (silent) { return true }\n\n const oldBMarks = []\n const oldBSCount = []\n const oldSCount = []\n const oldTShift = []\n\n const terminatorRules = state.md.block.ruler.getRules('blockquote')\n\n const oldParentType = state.parentType\n state.parentType = 'blockquote'\n let lastLineEmpty = false\n let nextLine\n\n // Search the end of the block\n //\n // Block ends with either:\n // 1. an empty line outside:\n // ```\n // > test\n //\n // ```\n // 2. an empty line inside:\n // ```\n // >\n // test\n // ```\n // 3. another tag:\n // ```\n // > test\n // - - -\n // ```\n for (nextLine = startLine; nextLine < endLine; nextLine++) {\n // check if it's outdented, i.e. it's inside list item and indented\n // less than said list item:\n //\n // ```\n // 1. anything\n // > current blockquote\n // 2. checking this line\n // ```\n const isOutdented = state.sCount[nextLine] < state.blkIndent\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine]\n max = state.eMarks[nextLine]\n\n if (pos >= max) {\n // Case 1: line is not inside the blockquote, and this line is empty.\n break\n }\n\n if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n // This line is inside the blockquote.\n\n // set offset past spaces and \">\"\n let initial = state.sCount[nextLine] + 1\n let spaceAfterMarker\n let adjustTab\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++\n initial++\n adjustTab = false\n spaceAfterMarker = true\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true\n\n if ((state.bsCount[nextLine] + initial) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++\n initial++\n adjustTab = false\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true\n }\n } else {\n spaceAfterMarker = false\n }\n\n let offset = initial\n oldBMarks.push(state.bMarks[nextLine])\n state.bMarks[nextLine] = pos\n\n while (pos < max) {\n const ch = state.src.charCodeAt(pos)\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4\n } else {\n offset++\n }\n } else {\n break\n }\n\n pos++\n }\n\n lastLineEmpty = pos >= max\n\n oldBSCount.push(state.bsCount[nextLine])\n state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0)\n\n oldSCount.push(state.sCount[nextLine])\n state.sCount[nextLine] = offset - initial\n\n oldTShift.push(state.tShift[nextLine])\n state.tShift[nextLine] = pos - state.bMarks[nextLine]\n continue\n }\n\n // Case 2: line is not inside the blockquote, and the last line was empty.\n if (lastLineEmpty) { break }\n\n // Case 3: another tag found.\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n\n if (terminate) {\n // Quirk to enforce \"hard termination mode\" for paragraphs;\n // normally if you call `tokenize(state, startLine, nextLine)`,\n // paragraphs will look below nextLine for paragraph continuation,\n // but if blockquote is terminated by another tag, they shouldn't\n state.lineMax = nextLine\n\n if (state.blkIndent !== 0) {\n // state.blkIndent was non-zero, we now set it to zero,\n // so we need to re-calculate all offsets to appear as\n // if indent wasn't changed\n oldBMarks.push(state.bMarks[nextLine])\n oldBSCount.push(state.bsCount[nextLine])\n oldTShift.push(state.tShift[nextLine])\n oldSCount.push(state.sCount[nextLine])\n state.sCount[nextLine] -= state.blkIndent\n }\n\n break\n }\n\n oldBMarks.push(state.bMarks[nextLine])\n oldBSCount.push(state.bsCount[nextLine])\n oldTShift.push(state.tShift[nextLine])\n oldSCount.push(state.sCount[nextLine])\n\n // A negative indentation means that this is a paragraph continuation\n //\n state.sCount[nextLine] = -1\n }\n\n const oldIndent = state.blkIndent\n state.blkIndent = 0\n\n const token_o = state.push('blockquote_open', 'blockquote', 1)\n token_o.markup = '>'\n const lines = [startLine, 0]\n token_o.map = lines\n\n state.md.block.tokenize(state, startLine, nextLine)\n\n const token_c = state.push('blockquote_close', 'blockquote', -1)\n token_c.markup = '>'\n\n state.lineMax = oldLineMax\n state.parentType = oldParentType\n lines[1] = state.line\n\n // Restore original tShift; this might not be necessary since the parser\n // has already been here, but just to make sure we can do that.\n for (let i = 0; i < oldTShift.length; i++) {\n state.bMarks[i + startLine] = oldBMarks[i]\n state.tShift[i + startLine] = oldTShift[i]\n state.sCount[i + startLine] = oldSCount[i]\n state.bsCount[i + startLine] = oldBSCount[i]\n }\n state.blkIndent = oldIndent\n\n return true\n}\n","// Horizontal rule\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function hr (state, startLine, endLine, silent) {\n const max = state.eMarks[startLine]\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n const marker = state.src.charCodeAt(pos++)\n\n // Check hr marker\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x5F/* _ */) {\n return false\n }\n\n // markers can be mixed with spaces, but there should be at least 3 of them\n\n let cnt = 1\n while (pos < max) {\n const ch = state.src.charCodeAt(pos++)\n if (ch !== marker && !isSpace(ch)) { return false }\n if (ch === marker) { cnt++ }\n }\n\n if (cnt < 3) { return false }\n\n if (silent) { return true }\n\n state.line = startLine + 1\n\n const token = state.push('hr', 'hr', 0)\n token.map = [startLine, state.line]\n token.markup = Array(cnt + 1).join(String.fromCharCode(marker))\n\n return true\n}\n","// Lists\n\nimport { isSpace } from '../common/utils.mjs'\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker (state, startLine) {\n const max = state.eMarks[startLine]\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n\n const marker = state.src.charCodeAt(pos++)\n // Check bullet\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x2B/* + */) {\n return -1\n }\n\n if (pos < max) {\n const ch = state.src.charCodeAt(pos)\n\n if (!isSpace(ch)) {\n // \" -test \" - is not a list item\n return -1\n }\n }\n\n return pos\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker (state, startLine) {\n const start = state.bMarks[startLine] + state.tShift[startLine]\n const max = state.eMarks[startLine]\n let pos = start\n\n // List marker should have at least 2 chars (digit + dot)\n if (pos + 1 >= max) { return -1 }\n\n let ch = state.src.charCodeAt(pos++)\n\n if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1 }\n\n for (;;) {\n // EOL -> fail\n if (pos >= max) { return -1 }\n\n ch = state.src.charCodeAt(pos++)\n\n if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n // List marker should have no more than 9 digits\n // (prevents integer overflow in browsers)\n if (pos - start >= 10) { return -1 }\n\n continue\n }\n\n // found valid marker\n if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n break\n }\n\n return -1\n }\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos)\n\n if (!isSpace(ch)) {\n // \" 1.test \" - is not a list item\n return -1\n }\n }\n return pos\n}\n\nfunction markTightParagraphs (state, idx) {\n const level = state.level + 2\n\n for (let i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n state.tokens[i + 2].hidden = true\n state.tokens[i].hidden = true\n i += 2\n }\n }\n}\n\nexport default function list (state, startLine, endLine, silent) {\n let max, pos, start, token\n let nextLine = startLine\n let tight = true\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[nextLine] - state.blkIndent >= 4) { return false }\n\n // Special case:\n // - item 1\n // - item 2\n // - item 3\n // - item 4\n // - this one is a paragraph continuation\n if (state.listIndent >= 0 &&\n state.sCount[nextLine] - state.listIndent >= 4 &&\n state.sCount[nextLine] < state.blkIndent) {\n return false\n }\n\n let isTerminatingParagraph = false\n\n // limit conditions when list can interrupt\n // a paragraph (validation mode only)\n if (silent && state.parentType === 'paragraph') {\n // Next list item should still terminate previous list item;\n //\n // This code can fail if plugins use blkIndent as well as lists,\n // but I hope the spec gets fixed long before that happens.\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n isTerminatingParagraph = true\n }\n }\n\n // Detect list type and position after marker\n let isOrdered\n let markerValue\n let posAfterMarker\n if ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) {\n isOrdered = true\n start = state.bMarks[nextLine] + state.tShift[nextLine]\n markerValue = Number(state.src.slice(start, posAfterMarker - 1))\n\n // If we're starting a new ordered list right after\n // a paragraph, it should start with 1.\n if (isTerminatingParagraph && markerValue !== 1) return false\n } else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) {\n isOrdered = false\n } else {\n return false\n }\n\n // If we're starting a new unordered list right after\n // a paragraph, first line should not be empty.\n if (isTerminatingParagraph) {\n if (state.skipSpaces(posAfterMarker) >= state.eMarks[nextLine]) return false\n }\n\n // For validation mode we can terminate immediately\n if (silent) { return true }\n\n // We should terminate list on style change. Remember first one to compare.\n const markerCharCode = state.src.charCodeAt(posAfterMarker - 1)\n\n // Start list\n const listTokIdx = state.tokens.length\n\n if (isOrdered) {\n token = state.push('ordered_list_open', 'ol', 1)\n if (markerValue !== 1) {\n token.attrs = [['start', markerValue]]\n }\n } else {\n token = state.push('bullet_list_open', 'ul', 1)\n }\n\n const listLines = [nextLine, 0]\n token.map = listLines\n token.markup = String.fromCharCode(markerCharCode)\n\n //\n // Iterate list items\n //\n\n let prevEmptyEnd = false\n const terminatorRules = state.md.block.ruler.getRules('list')\n\n const oldParentType = state.parentType\n state.parentType = 'list'\n\n while (nextLine < endLine) {\n pos = posAfterMarker\n max = state.eMarks[nextLine]\n\n const initial = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine])\n let offset = initial\n\n while (pos < max) {\n const ch = state.src.charCodeAt(pos)\n\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine]) % 4\n } else if (ch === 0x20) {\n offset++\n } else {\n break\n }\n\n pos++\n }\n\n const contentStart = pos\n let indentAfterMarker\n\n if (contentStart >= max) {\n // trimming space in \"- \\n 3\" case, indent is 1 here\n indentAfterMarker = 1\n } else {\n indentAfterMarker = offset - initial\n }\n\n // If we have more than 4 spaces, the indent is 1\n // (the rest is just indented code block)\n if (indentAfterMarker > 4) { indentAfterMarker = 1 }\n\n // \" - test\"\n // ^^^^^ - calculating total length of this thing\n const indent = initial + indentAfterMarker\n\n // Run subparser & write tokens\n token = state.push('list_item_open', 'li', 1)\n token.markup = String.fromCharCode(markerCharCode)\n const itemLines = [nextLine, 0]\n token.map = itemLines\n if (isOrdered) {\n token.info = state.src.slice(start, posAfterMarker - 1)\n }\n\n // change current state, then restore it after parser subcall\n const oldTight = state.tight\n const oldTShift = state.tShift[nextLine]\n const oldSCount = state.sCount[nextLine]\n\n // - example list\n // ^ listIndent position will be here\n // ^ blkIndent position will be here\n //\n const oldListIndent = state.listIndent\n state.listIndent = state.blkIndent\n state.blkIndent = indent\n\n state.tight = true\n state.tShift[nextLine] = contentStart - state.bMarks[nextLine]\n state.sCount[nextLine] = offset\n\n if (contentStart >= max && state.isEmpty(nextLine + 1)) {\n // workaround for this case\n // (list item is empty, list terminates before \"foo\"):\n // ~~~~~~~~\n // -\n //\n // foo\n // ~~~~~~~~\n state.line = Math.min(state.line + 2, endLine)\n } else {\n state.md.block.tokenize(state, nextLine, endLine, true)\n }\n\n // If any of list item is tight, mark list as tight\n if (!state.tight || prevEmptyEnd) {\n tight = false\n }\n // Item become loose if finish with empty line,\n // but we should filter last element, because it means list finish\n prevEmptyEnd = (state.line - nextLine) > 1 && state.isEmpty(state.line - 1)\n\n state.blkIndent = state.listIndent\n state.listIndent = oldListIndent\n state.tShift[nextLine] = oldTShift\n state.sCount[nextLine] = oldSCount\n state.tight = oldTight\n\n token = state.push('list_item_close', 'li', -1)\n token.markup = String.fromCharCode(markerCharCode)\n\n nextLine = state.line\n itemLines[1] = nextLine\n\n if (nextLine >= endLine) { break }\n\n //\n // Try to check if list is terminated or continued.\n //\n if (state.sCount[nextLine] < state.blkIndent) { break }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[nextLine] - state.blkIndent >= 4) { break }\n\n // fail if terminating block found\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n if (terminate) { break }\n\n // fail if list has another type\n if (isOrdered) {\n posAfterMarker = skipOrderedListMarker(state, nextLine)\n if (posAfterMarker < 0) { break }\n start = state.bMarks[nextLine] + state.tShift[nextLine]\n } else {\n posAfterMarker = skipBulletListMarker(state, nextLine)\n if (posAfterMarker < 0) { break }\n }\n\n if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break }\n }\n\n // Finalize list\n if (isOrdered) {\n token = state.push('ordered_list_close', 'ol', -1)\n } else {\n token = state.push('bullet_list_close', 'ul', -1)\n }\n token.markup = String.fromCharCode(markerCharCode)\n\n listLines[1] = nextLine\n state.line = nextLine\n\n state.parentType = oldParentType\n\n // mark paragraphs tight if needed\n if (tight) {\n markTightParagraphs(state, listTokIdx)\n }\n\n return true\n}\n","import { isSpace, normalizeReference } from '../common/utils.mjs'\n\nexport default function reference (state, startLine, _endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n let nextLine = startLine + 1\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false }\n\n function getNextLine (nextLine) {\n const endLine = state.lineMax\n\n if (nextLine >= endLine || state.isEmpty(nextLine)) {\n // empty line or end of input\n return null\n }\n\n let isContinuation = false\n\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { isContinuation = true }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { isContinuation = true }\n\n if (!isContinuation) {\n const terminatorRules = state.md.block.ruler.getRules('reference')\n const oldParentType = state.parentType\n state.parentType = 'reference'\n\n // Some tags can terminate paragraph without empty line.\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n\n state.parentType = oldParentType\n if (terminate) {\n // terminated by another block\n return null\n }\n }\n\n const pos = state.bMarks[nextLine] + state.tShift[nextLine]\n const max = state.eMarks[nextLine]\n\n // max + 1 explicitly includes the newline\n return state.src.slice(pos, max + 1)\n }\n\n let str = state.src.slice(pos, max + 1)\n\n max = str.length\n let labelEnd = -1\n\n for (pos = 1; pos < max; pos++) {\n const ch = str.charCodeAt(pos)\n if (ch === 0x5B /* [ */) {\n return false\n } else if (ch === 0x5D /* ] */) {\n labelEnd = pos\n break\n } else if (ch === 0x0A /* \\n */) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n } else if (ch === 0x5C /* \\ */) {\n pos++\n if (pos < max && str.charCodeAt(pos) === 0x0A) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n }\n }\n }\n\n if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false }\n\n // [label]: destination 'title'\n // ^^^ skip optional whitespace here\n for (pos = labelEnd + 2; pos < max; pos++) {\n const ch = str.charCodeAt(pos)\n if (ch === 0x0A) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n } else if (isSpace(ch)) {\n /* eslint no-empty:0 */\n } else {\n break\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^^^^^ parse this\n const destRes = state.md.helpers.parseLinkDestination(str, pos, max)\n if (!destRes.ok) { return false }\n\n const href = state.md.normalizeLink(destRes.str)\n if (!state.md.validateLink(href)) { return false }\n\n pos = destRes.pos\n\n // save cursor state, we could require to rollback later\n const destEndPos = pos\n const destEndLineNo = nextLine\n\n // [label]: destination 'title'\n // ^^^ skipping those spaces\n const start = pos\n for (; pos < max; pos++) {\n const ch = str.charCodeAt(pos)\n if (ch === 0x0A) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n } else if (isSpace(ch)) {\n /* eslint no-empty:0 */\n } else {\n break\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^ parse this\n let titleRes = state.md.helpers.parseLinkTitle(str, pos, max)\n while (titleRes.can_continue) {\n const lineContent = getNextLine(nextLine)\n if (lineContent === null) break\n str += lineContent\n pos = max\n max = str.length\n nextLine++\n titleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes)\n }\n let title\n\n if (pos < max && start !== pos && titleRes.ok) {\n title = titleRes.str\n pos = titleRes.pos\n } else {\n title = ''\n pos = destEndPos\n nextLine = destEndLineNo\n }\n\n // skip trailing spaces until the rest of the line\n while (pos < max) {\n const ch = str.charCodeAt(pos)\n if (!isSpace(ch)) { break }\n pos++\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n if (title) {\n // garbage at the end of the line after title,\n // but it could still be a valid reference if we roll back\n title = ''\n pos = destEndPos\n nextLine = destEndLineNo\n while (pos < max) {\n const ch = str.charCodeAt(pos)\n if (!isSpace(ch)) { break }\n pos++\n }\n }\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n // garbage at the end of the line\n return false\n }\n\n const label = normalizeReference(str.slice(1, labelEnd))\n if (!label) {\n // CommonMark 0.20 disallows empty labels\n return false\n }\n\n // Reference can not terminate anything. This check is for safety only.\n /* istanbul ignore if */\n if (silent) { return true }\n\n if (typeof state.env.references === 'undefined') {\n state.env.references = {}\n }\n if (typeof state.env.references[label] === 'undefined') {\n state.env.references[label] = { title, href }\n }\n\n state.line = nextLine\n return true\n}\n","// List of valid html blocks names, according to commonmark spec\n// https://spec.commonmark.org/0.30/#html-blocks\n\nexport default [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'search',\n 'section',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n]\n","// Regexps to match html elements\n\nconst attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*'\n\nconst unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+'\nconst single_quoted = \"'[^']*'\"\nconst double_quoted = '\"[^\"]*\"'\n\nconst attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')'\n\nconst attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)'\n\nconst open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>'\n\nconst close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>'\nconst comment = '<!---?>|<!--(?:[^-]|-[^-]|--[^>])*-->'\nconst processing = '<[?][\\\\s\\\\S]*?[?]>'\nconst declaration = '<![A-Za-z][^>]*>'\nconst cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>'\n\nconst HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n '|' + processing + '|' + declaration + '|' + cdata + ')')\nconst HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')')\n\nexport { HTML_TAG_RE, HTML_OPEN_CLOSE_TAG_RE }\n","// HTML block\n\nimport block_names from '../common/html_blocks.mjs'\nimport { HTML_OPEN_CLOSE_TAG_RE } from '../common/html_re.mjs'\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nconst HTML_SEQUENCES = [\n [/^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true],\n [/^<!--/, /-->/, true],\n [/^<\\?/, /\\?>/, true],\n [/^<![A-Z]/, />/, true],\n [/^<!\\[CDATA\\[/, /\\]\\]>/, true],\n [new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true],\n [new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'), /^$/, false]\n]\n\nexport default function html_block (state, startLine, endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n if (!state.md.options.html) { return false }\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false }\n\n let lineText = state.src.slice(pos, max)\n\n let i = 0\n for (; i < HTML_SEQUENCES.length; i++) {\n if (HTML_SEQUENCES[i][0].test(lineText)) { break }\n }\n if (i === HTML_SEQUENCES.length) { return false }\n\n if (silent) {\n // true if this sequence can be a terminator, false otherwise\n return HTML_SEQUENCES[i][2]\n }\n\n let nextLine = startLine + 1\n\n // If we are here - we detected HTML block.\n // Let's roll down till block end.\n if (!HTML_SEQUENCES[i][1].test(lineText)) {\n for (; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break }\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine]\n max = state.eMarks[nextLine]\n lineText = state.src.slice(pos, max)\n\n if (HTML_SEQUENCES[i][1].test(lineText)) {\n if (lineText.length !== 0) { nextLine++ }\n break\n }\n }\n }\n\n state.line = nextLine\n\n const token = state.push('html_block', '', 0)\n token.map = [startLine, nextLine]\n token.content = state.getLines(startLine, nextLine, state.blkIndent, true)\n\n return true\n}\n","// heading (#, ##, ...)\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function heading (state, startLine, endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n let ch = state.src.charCodeAt(pos)\n\n if (ch !== 0x23/* # */ || pos >= max) { return false }\n\n // count heading level\n let level = 1\n ch = state.src.charCodeAt(++pos)\n while (ch === 0x23/* # */ && pos < max && level <= 6) {\n level++\n ch = state.src.charCodeAt(++pos)\n }\n\n if (level > 6 || (pos < max && !isSpace(ch))) { return false }\n\n if (silent) { return true }\n\n // Let's cut tails like ' ### ' from the end of string\n\n max = state.skipSpacesBack(max, pos)\n const tmp = state.skipCharsBack(max, 0x23, pos) // #\n if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n max = tmp\n }\n\n state.line = startLine + 1\n\n const token_o = state.push('heading_open', 'h' + String(level), 1)\n token_o.markup = '########'.slice(0, level)\n token_o.map = [startLine, state.line]\n\n const token_i = state.push('inline', '', 0)\n token_i.content = state.src.slice(pos, max).trim()\n token_i.map = [startLine, state.line]\n token_i.children = []\n\n const token_c = state.push('heading_close', 'h' + String(level), -1)\n token_c.markup = '########'.slice(0, level)\n\n return true\n}\n","// lheading (---, ===)\n\nexport default function lheading (state, startLine, endLine/*, silent */) {\n const terminatorRules = state.md.block.ruler.getRules('paragraph')\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n const oldParentType = state.parentType\n state.parentType = 'paragraph' // use paragraph to match terminatorRules\n\n // jump line-by-line until empty one or EOF\n let level = 0\n let marker\n let nextLine = startLine + 1\n\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { continue }\n\n //\n // Check for underline in setext header\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n let pos = state.bMarks[nextLine] + state.tShift[nextLine]\n const max = state.eMarks[nextLine]\n\n if (pos < max) {\n marker = state.src.charCodeAt(pos)\n\n if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n pos = state.skipChars(pos, marker)\n pos = state.skipSpaces(pos)\n\n if (pos >= max) {\n level = (marker === 0x3D/* = */ ? 1 : 2)\n break\n }\n }\n }\n }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue }\n\n // Some tags can terminate paragraph without empty line.\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n if (terminate) { break }\n }\n\n if (!level) {\n // Didn't find valid underline\n return false\n }\n\n const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim()\n\n state.line = nextLine + 1\n\n const token_o = state.push('heading_open', 'h' + String(level), 1)\n token_o.markup = String.fromCharCode(marker)\n token_o.map = [startLine, state.line]\n\n const token_i = state.push('inline', '', 0)\n token_i.content = content\n token_i.map = [startLine, state.line - 1]\n token_i.children = []\n\n const token_c = state.push('heading_close', 'h' + String(level), -1)\n token_c.markup = String.fromCharCode(marker)\n\n state.parentType = oldParentType\n\n return true\n}\n","// Paragraph\n\nexport default function paragraph (state, startLine, endLine) {\n const terminatorRules = state.md.block.ruler.getRules('paragraph')\n const oldParentType = state.parentType\n let nextLine = startLine + 1\n state.parentType = 'paragraph'\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { continue }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue }\n\n // Some tags can terminate paragraph without empty line.\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n if (terminate) { break }\n }\n\n const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim()\n\n state.line = nextLine\n\n const token_o = state.push('paragraph_open', 'p', 1)\n token_o.map = [startLine, state.line]\n\n const token_i = state.push('inline', '', 0)\n token_i.content = content\n token_i.map = [startLine, state.line]\n token_i.children = []\n\n state.push('paragraph_close', 'p', -1)\n\n state.parentType = oldParentType\n\n return true\n}\n","/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateBlock from './rules_block/state_block.mjs'\n\nimport r_table from './rules_block/table.mjs'\nimport r_code from './rules_block/code.mjs'\nimport r_fence from './rules_block/fence.mjs'\nimport r_blockquote from './rules_block/blockquote.mjs'\nimport r_hr from './rules_block/hr.mjs'\nimport r_list from './rules_block/list.mjs'\nimport r_reference from './rules_block/reference.mjs'\nimport r_html_block from './rules_block/html_block.mjs'\nimport r_heading from './rules_block/heading.mjs'\nimport r_lheading from './rules_block/lheading.mjs'\nimport r_paragraph from './rules_block/paragraph.mjs'\n\nconst _rules = [\n // First 2 params - rule name & source. Secondary array - list of rules,\n // which can be terminated by this one.\n ['table', r_table, ['paragraph', 'reference']],\n ['code', r_code],\n ['fence', r_fence, ['paragraph', 'reference', 'blockquote', 'list']],\n ['blockquote', r_blockquote, ['paragraph', 'reference', 'blockquote', 'list']],\n ['hr', r_hr, ['paragraph', 'reference', 'blockquote', 'list']],\n ['list', r_list, ['paragraph', 'reference', 'blockquote']],\n ['reference', r_reference],\n ['html_block', r_html_block, ['paragraph', 'reference', 'blockquote']],\n ['heading', r_heading, ['paragraph', 'reference', 'blockquote']],\n ['lheading', r_lheading],\n ['paragraph', r_paragraph]\n]\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock () {\n /**\n * ParserBlock#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of block rules.\n **/\n this.ruler = new Ruler()\n\n for (let i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() })\n }\n}\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n const rules = this.ruler.getRules('')\n const len = rules.length\n const maxNesting = state.md.options.maxNesting\n let line = startLine\n let hasEmptyLines = false\n\n while (line < endLine) {\n state.line = line = state.skipEmptyLines(line)\n if (line >= endLine) { break }\n\n // Termination condition for nested calls.\n // Nested calls currently used for blockquotes & lists\n if (state.sCount[line] < state.blkIndent) { break }\n\n // If nesting level exceeded - skip tail to the end. That's not ordinary\n // situation and we should not care about content.\n if (state.level >= maxNesting) {\n state.line = endLine\n break\n }\n\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.line`\n // - update `state.tokens`\n // - return true\n const prevLine = state.line\n let ok = false\n\n for (let i = 0; i < len; i++) {\n ok = rules[i](state, line, endLine, false)\n if (ok) {\n if (prevLine >= state.line) {\n throw new Error(\"block rule didn't increment state.line\")\n }\n break\n }\n }\n\n // this can only happen if user disables paragraph rule\n if (!ok) throw new Error('none of the block rules matched')\n\n // set state.tight if we had an empty line before current tag\n // i.e. latest empty line should not count\n state.tight = !hasEmptyLines\n\n // paragraph might \"eat\" one newline after it in nested lists\n if (state.isEmpty(state.line - 1)) {\n hasEmptyLines = true\n }\n\n line = state.line\n\n if (line < endLine && state.isEmpty(line)) {\n hasEmptyLines = true\n line++\n state.line = line\n }\n }\n}\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n if (!src) { return }\n\n const state = new this.State(src, md, env, outTokens)\n\n this.tokenize(state, state.line, state.lineMax)\n}\n\nParserBlock.prototype.State = StateBlock\n\nexport default ParserBlock\n","// Inline parser state\n\nimport Token from '../token.mjs'\nimport { isWhiteSpace, isPunctChar, isMdAsciiPunct } from '../common/utils.mjs'\n\nfunction StateInline (src, md, env, outTokens) {\n this.src = src\n this.env = env\n this.md = md\n this.tokens = outTokens\n this.tokens_meta = Array(outTokens.length)\n\n this.pos = 0\n this.posMax = this.src.length\n this.level = 0\n this.pending = ''\n this.pendingLevel = 0\n\n // Stores { start: end } pairs. Useful for backtrack\n // optimization of pairs parse (emphasis, strikes).\n this.cache = {}\n\n // List of emphasis-like delimiters for current tag\n this.delimiters = []\n\n // Stack of delimiter lists for upper level tags\n this._prev_delimiters = []\n\n // backtick length => last seen position\n this.backticks = {}\n this.backticksScanned = false\n\n // Counter used to disable inline linkify-it execution\n // inside <a> and markdown links\n this.linkLevel = 0\n}\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n const token = new Token('text', '', 0)\n token.content = this.pending\n token.level = this.pendingLevel\n this.tokens.push(token)\n this.pending = ''\n return token\n}\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n if (this.pending) {\n this.pushPending()\n }\n\n const token = new Token(type, tag, nesting)\n let token_meta = null\n\n if (nesting < 0) {\n // closing tag\n this.level--\n this.delimiters = this._prev_delimiters.pop()\n }\n\n token.level = this.level\n\n if (nesting > 0) {\n // opening tag\n this.level++\n this._prev_delimiters.push(this.delimiters)\n this.delimiters = []\n token_meta = { delimiters: this.delimiters }\n }\n\n this.pendingLevel = this.level\n this.tokens.push(token)\n this.tokens_meta.push(token_meta)\n return token\n}\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n// - start - position to scan from (it should point at a valid marker);\n// - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n const max = this.posMax\n const marker = this.src.charCodeAt(start)\n\n // treat beginning of the line as a whitespace\n const lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20\n\n let pos = start\n while (pos < max && this.src.charCodeAt(pos) === marker) { pos++ }\n\n const count = pos - start\n\n // treat end of the line as a whitespace\n const nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20\n\n const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar))\n const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar))\n\n const isLastWhiteSpace = isWhiteSpace(lastChar)\n const isNextWhiteSpace = isWhiteSpace(nextChar)\n\n const left_flanking =\n !isNextWhiteSpace && (!isNextPunctChar || isLastWhiteSpace || isLastPunctChar)\n const right_flanking =\n !isLastWhiteSpace && (!isLastPunctChar || isNextWhiteSpace || isNextPunctChar)\n\n const can_open = left_flanking && (canSplitWord || !right_flanking || isLastPunctChar)\n const can_close = right_flanking && (canSplitWord || !left_flanking || isNextPunctChar)\n\n return { can_open, can_close, length: count }\n}\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token\n\nexport default StateInline\n","// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar (ch) {\n switch (ch) {\n case 0x0A/* \\n */:\n case 0x21/* ! */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2D/* - */:\n case 0x3A/* : */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true\n default:\n return false\n }\n}\n\nexport default function text (state, silent) {\n let pos = state.pos\n\n while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n pos++\n }\n\n if (pos === state.pos) { return false }\n\n if (!silent) { state.pending += state.src.slice(state.pos, pos) }\n\n state.pos = pos\n\n return true\n}\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParserInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos,\n idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n // first char is terminator -> empty text\n if (idx === 0) { return false; }\n\n // no terminator -> text till end of string\n if (idx < 0) {\n if (!silent) { state.pending += state.src.slice(pos); }\n state.pos = state.src.length;\n return true;\n }\n\n if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n state.pos += idx;\n\n return true;\n}; */\n","// Process links like https://example.org/\n\n// RFC3986: scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\nconst SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i\n\nexport default function linkify (state, silent) {\n if (!state.md.options.linkify) return false\n if (state.linkLevel > 0) return false\n\n const pos = state.pos\n const max = state.posMax\n\n if (pos + 3 > max) return false\n if (state.src.charCodeAt(pos) !== 0x3A/* : */) return false\n if (state.src.charCodeAt(pos + 1) !== 0x2F/* / */) return false\n if (state.src.charCodeAt(pos + 2) !== 0x2F/* / */) return false\n\n const match = state.pending.match(SCHEME_RE)\n if (!match) return false\n\n const proto = match[1]\n\n const link = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length))\n if (!link) return false\n\n let url = link.url\n\n // invalid link, but still detected by linkify somehow;\n // need to check to prevent infinite loop below\n if (url.length <= proto.length) return false\n\n // disallow '*' at the end of the link (conflicts with emphasis)\n url = url.replace(/\\*+$/, '')\n\n const fullUrl = state.md.normalizeLink(url)\n if (!state.md.validateLink(fullUrl)) return false\n\n if (!silent) {\n state.pending = state.pending.slice(0, -proto.length)\n\n const token_o = state.push('link_open', 'a', 1)\n token_o.attrs = [['href', fullUrl]]\n token_o.markup = 'linkify'\n token_o.info = 'auto'\n\n const token_t = state.push('text', '', 0)\n token_t.content = state.md.normalizeLinkText(url)\n\n const token_c = state.push('link_close', 'a', -1)\n token_c.markup = 'linkify'\n token_c.info = 'auto'\n }\n\n state.pos += url.length - proto.length\n return true\n}\n","// Proceess '\\n'\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function newline (state, silent) {\n let pos = state.pos\n\n if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false }\n\n const pmax = state.pending.length - 1\n const max = state.posMax\n\n // ' \\n' -> hardbreak\n // Lookup in pending chars is bad practice! Don't copy to other rules!\n // Pending string is stored in concat mode, indexed lookups will cause\n // convertion to flat mode.\n if (!silent) {\n if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n // Find whitespaces tail of pending chars.\n let ws = pmax - 1\n while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--\n\n state.pending = state.pending.slice(0, ws)\n state.push('hardbreak', 'br', 0)\n } else {\n state.pending = state.pending.slice(0, -1)\n state.push('softbreak', 'br', 0)\n }\n } else {\n state.push('softbreak', 'br', 0)\n }\n }\n\n pos++\n\n // skip heading spaces for next line\n while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++ }\n\n state.pos = pos\n return true\n}\n","// Process escaped chars and hardbreaks\n\nimport { isSpace } from '../common/utils.mjs'\n\nconst ESCAPED = []\n\nfor (let i = 0; i < 256; i++) { ESCAPED.push(0) }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1 })\n\nexport default function escape (state, silent) {\n let pos = state.pos\n const max = state.posMax\n\n if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) return false\n pos++\n\n // '\\' at the end of the inline block\n if (pos >= max) return false\n\n let ch1 = state.src.charCodeAt(pos)\n\n if (ch1 === 0x0A) {\n if (!silent) {\n state.push('hardbreak', 'br', 0)\n }\n\n pos++\n // skip leading whitespaces from next line\n while (pos < max) {\n ch1 = state.src.charCodeAt(pos)\n if (!isSpace(ch1)) break\n pos++\n }\n\n state.pos = pos\n return true\n }\n\n let escapedStr = state.src[pos]\n\n if (ch1 >= 0xD800 && ch1 <= 0xDBFF && pos + 1 < max) {\n const ch2 = state.src.charCodeAt(pos + 1)\n\n if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) {\n escapedStr += state.src[pos + 1]\n pos++\n }\n }\n\n const origStr = '\\\\' + escapedStr\n\n if (!silent) {\n const token = state.push('text_special', '', 0)\n\n if (ch1 < 256 && ESCAPED[ch1] !== 0) {\n token.content = escapedStr\n } else {\n token.content = origStr\n }\n\n token.markup = origStr\n token.info = 'escape'\n }\n\n state.pos = pos + 1\n return true\n}\n","// Parse backticks\n\nexport default function backtick (state, silent) {\n let pos = state.pos\n const ch = state.src.charCodeAt(pos)\n\n if (ch !== 0x60/* ` */) { return false }\n\n const start = pos\n pos++\n const max = state.posMax\n\n // scan marker length\n while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++ }\n\n const marker = state.src.slice(start, pos)\n const openerLength = marker.length\n\n if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n if (!silent) state.pending += marker\n state.pos += openerLength\n return true\n }\n\n let matchEnd = pos\n let matchStart\n\n // Nothing found in the cache, scan until the end of the line (or until marker is found)\n while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n matchEnd = matchStart + 1\n\n // scan marker length\n while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++ }\n\n const closerLength = matchEnd - matchStart\n\n if (closerLength === openerLength) {\n // Found matching closer length.\n if (!silent) {\n const token = state.push('code_inline', 'code', 0)\n token.markup = marker\n token.content = state.src.slice(pos, matchStart)\n .replace(/\\n/g, ' ')\n .replace(/^ (.+) $/, '$1')\n }\n state.pos = matchEnd\n return true\n }\n\n // Some different length found, put it in cache as upper limit of where closer can be found\n state.backticks[closerLength] = matchStart\n }\n\n // Scanned through the end, didn't find anything\n state.backticksScanned = true\n\n if (!silent) state.pending += marker\n state.pos += openerLength\n return true\n}\n","// ~~strike through~~\n//\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction strikethrough_tokenize (state, silent) {\n const start = state.pos\n const marker = state.src.charCodeAt(start)\n\n if (silent) { return false }\n\n if (marker !== 0x7E/* ~ */) { return false }\n\n const scanned = state.scanDelims(state.pos, true)\n let len = scanned.length\n const ch = String.fromCharCode(marker)\n\n if (len < 2) { return false }\n\n let token\n\n if (len % 2) {\n token = state.push('text', '', 0)\n token.content = ch\n len--\n }\n\n for (let i = 0; i < len; i += 2) {\n token = state.push('text', '', 0)\n token.content = ch + ch\n\n state.delimiters.push({\n marker,\n length: 0, // disable \"rule of 3\" length checks meant for emphasis\n token: state.tokens.length - 1,\n end: -1,\n open: scanned.can_open,\n close: scanned.can_close\n })\n }\n\n state.pos += scanned.length\n\n return true\n}\n\nfunction postProcess (state, delimiters) {\n let token\n const loneMarkers = []\n const max = delimiters.length\n\n for (let i = 0; i < max; i++) {\n const startDelim = delimiters[i]\n\n if (startDelim.marker !== 0x7E/* ~ */) {\n continue\n }\n\n if (startDelim.end === -1) {\n continue\n }\n\n const endDelim = delimiters[startDelim.end]\n\n token = state.tokens[startDelim.token]\n token.type = 's_open'\n token.tag = 's'\n token.nesting = 1\n token.markup = '~~'\n token.content = ''\n\n token = state.tokens[endDelim.token]\n token.type = 's_close'\n token.tag = 's'\n token.nesting = -1\n token.markup = '~~'\n token.content = ''\n\n if (state.tokens[endDelim.token - 1].type === 'text' &&\n state.tokens[endDelim.token - 1].content === '~') {\n loneMarkers.push(endDelim.token - 1)\n }\n }\n\n // If a marker sequence has an odd number of characters, it's splitted\n // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n // start of the sequence.\n //\n // So, we have to move all those markers after subsequent s_close tags.\n //\n while (loneMarkers.length) {\n const i = loneMarkers.pop()\n let j = i + 1\n\n while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n j++\n }\n\n j--\n\n if (i !== j) {\n token = state.tokens[j]\n state.tokens[j] = state.tokens[i]\n state.tokens[i] = token\n }\n }\n}\n\n// Walk through delimiter list and replace text tokens with tags\n//\nfunction strikethrough_postProcess (state) {\n const tokens_meta = state.tokens_meta\n const max = state.tokens_meta.length\n\n postProcess(state, state.delimiters)\n\n for (let curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters)\n }\n }\n}\n\nexport default {\n tokenize: strikethrough_tokenize,\n postProcess: strikethrough_postProcess\n}\n","// Process *this* and _that_\n//\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction emphasis_tokenize (state, silent) {\n const start = state.pos\n const marker = state.src.charCodeAt(start)\n\n if (silent) { return false }\n\n if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false }\n\n const scanned = state.scanDelims(state.pos, marker === 0x2A)\n\n for (let i = 0; i < scanned.length; i++) {\n const token = state.push('text', '', 0)\n token.content = String.fromCharCode(marker)\n\n state.delimiters.push({\n // Char code of the starting marker (number).\n //\n marker,\n\n // Total length of these series of delimiters.\n //\n length: scanned.length,\n\n // A position of the token this delimiter corresponds to.\n //\n token: state.tokens.length - 1,\n\n // If this delimiter is matched as a valid opener, `end` will be\n // equal to its position, otherwise it's `-1`.\n //\n end: -1,\n\n // Boolean flags that determine if this delimiter could open or close\n // an emphasis.\n //\n open: scanned.can_open,\n close: scanned.can_close\n })\n }\n\n state.pos += scanned.length\n\n return true\n}\n\nfunction postProcess (state, delimiters) {\n const max = delimiters.length\n\n for (let i = max - 1; i >= 0; i--) {\n const startDelim = delimiters[i]\n\n if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n continue\n }\n\n // Process only opening markers\n if (startDelim.end === -1) {\n continue\n }\n\n const endDelim = delimiters[startDelim.end]\n\n // If the previous delimiter has the same marker and is adjacent to this one,\n // merge those into one strong delimiter.\n //\n // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n //\n const isStrong = i > 0 &&\n delimiters[i - 1].end === startDelim.end + 1 &&\n // check that first two markers match and adjacent\n delimiters[i - 1].marker === startDelim.marker &&\n delimiters[i - 1].token === startDelim.token - 1 &&\n // check that last two markers are adjacent (we can safely assume they match)\n delimiters[startDelim.end + 1].token === endDelim.token + 1\n\n const ch = String.fromCharCode(startDelim.marker)\n\n const token_o = state.tokens[startDelim.token]\n token_o.type = isStrong ? 'strong_open' : 'em_open'\n token_o.tag = isStrong ? 'strong' : 'em'\n token_o.nesting = 1\n token_o.markup = isStrong ? ch + ch : ch\n token_o.content = ''\n\n const token_c = state.tokens[endDelim.token]\n token_c.type = isStrong ? 'strong_close' : 'em_close'\n token_c.tag = isStrong ? 'strong' : 'em'\n token_c.nesting = -1\n token_c.markup = isStrong ? ch + ch : ch\n token_c.content = ''\n\n if (isStrong) {\n state.tokens[delimiters[i - 1].token].content = ''\n state.tokens[delimiters[startDelim.end + 1].token].content = ''\n i--\n }\n }\n}\n\n// Walk through delimiter list and replace text tokens with tags\n//\nfunction emphasis_post_process (state) {\n const tokens_meta = state.tokens_meta\n const max = state.tokens_meta.length\n\n postProcess(state, state.delimiters)\n\n for (let curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters)\n }\n }\n}\n\nexport default {\n tokenize: emphasis_tokenize,\n postProcess: emphasis_post_process\n}\n","// Process [link](<to> \"stuff\")\n\nimport { normalizeReference, isSpace } from '../common/utils.mjs'\n\nexport default function link (state, silent) {\n let code, label, res, ref\n let href = ''\n let title = ''\n let start = state.pos\n let parseReference = true\n\n if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false }\n\n const oldPos = state.pos\n const max = state.posMax\n const labelStart = state.pos + 1\n const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true)\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false }\n\n let pos = labelEnd + 1\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // might have found a valid shortcut link, disable reference parsing\n parseReference = false\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n if (pos >= max) { return false }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax)\n if (res.ok) {\n href = state.md.normalizeLink(res.str)\n if (state.md.validateLink(href)) {\n pos = res.pos\n } else {\n href = ''\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax)\n if (pos < max && start !== pos && res.ok) {\n title = res.str\n pos = res.pos\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n }\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n // parsing a valid shortcut link failed, fallback to reference\n parseReference = true\n }\n pos++\n }\n\n if (parseReference) {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1\n pos = state.md.helpers.parseLinkLabel(state, pos)\n if (pos >= 0) {\n label = state.src.slice(start, pos++)\n } else {\n pos = labelEnd + 1\n }\n } else {\n pos = labelEnd + 1\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd) }\n\n ref = state.env.references[normalizeReference(label)]\n if (!ref) {\n state.pos = oldPos\n return false\n }\n href = ref.href\n title = ref.title\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n state.pos = labelStart\n state.posMax = labelEnd\n\n const token_o = state.push('link_open', 'a', 1)\n const attrs = [['href', href]]\n token_o.attrs = attrs\n if (title) {\n attrs.push(['title', title])\n }\n\n state.linkLevel++\n state.md.inline.tokenize(state)\n state.linkLevel--\n\n state.push('link_close', 'a', -1)\n }\n\n state.pos = pos\n state.posMax = max\n return true\n}\n","// Process \n\nimport { normalizeReference, isSpace } from '../common/utils.mjs'\n\nexport default function image (state, silent) {\n let code, content, label, pos, ref, res, title, start\n let href = ''\n const oldPos = state.pos\n const max = state.posMax\n\n if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false }\n if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false }\n\n const labelStart = state.pos + 2\n const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false)\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false }\n\n pos = labelEnd + 1\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n if (pos >= max) { return false }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax)\n if (res.ok) {\n href = state.md.normalizeLink(res.str)\n if (state.md.validateLink(href)) {\n pos = res.pos\n } else {\n href = ''\n }\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax)\n if (pos < max && start !== pos && res.ok) {\n title = res.str\n pos = res.pos\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n } else {\n title = ''\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n state.pos = oldPos\n return false\n }\n pos++\n } else {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1\n pos = state.md.helpers.parseLinkLabel(state, pos)\n if (pos >= 0) {\n label = state.src.slice(start, pos++)\n } else {\n pos = labelEnd + 1\n }\n } else {\n pos = labelEnd + 1\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd) }\n\n ref = state.env.references[normalizeReference(label)]\n if (!ref) {\n state.pos = oldPos\n return false\n }\n href = ref.href\n title = ref.title\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n content = state.src.slice(labelStart, labelEnd)\n\n const tokens = []\n state.md.inline.parse(\n content,\n state.md,\n state.env,\n tokens\n )\n\n const token = state.push('image', 'img', 0)\n const attrs = [['src', href], ['alt', '']]\n token.attrs = attrs\n token.children = tokens\n token.content = content\n\n if (title) {\n attrs.push(['title', title])\n }\n }\n\n state.pos = pos\n state.posMax = max\n return true\n}\n","// Process autolinks '<protocol:...>'\n\n/* eslint max-len:0 */\nconst EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/\n/* eslint-disable-next-line no-control-regex */\nconst AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\\x00-\\x20]*)$/\n\nexport default function autolink (state, silent) {\n let pos = state.pos\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false }\n\n const start = state.pos\n const max = state.posMax\n\n for (;;) {\n if (++pos >= max) return false\n\n const ch = state.src.charCodeAt(pos)\n\n if (ch === 0x3C /* < */) return false\n if (ch === 0x3E /* > */) break\n }\n\n const url = state.src.slice(start + 1, pos)\n\n if (AUTOLINK_RE.test(url)) {\n const fullUrl = state.md.normalizeLink(url)\n if (!state.md.validateLink(fullUrl)) { return false }\n\n if (!silent) {\n const token_o = state.push('link_open', 'a', 1)\n token_o.attrs = [['href', fullUrl]]\n token_o.markup = 'autolink'\n token_o.info = 'auto'\n\n const token_t = state.push('text', '', 0)\n token_t.content = state.md.normalizeLinkText(url)\n\n const token_c = state.push('link_close', 'a', -1)\n token_c.markup = 'autolink'\n token_c.info = 'auto'\n }\n\n state.pos += url.length + 2\n return true\n }\n\n if (EMAIL_RE.test(url)) {\n const fullUrl = state.md.normalizeLink('mailto:' + url)\n if (!state.md.validateLink(fullUrl)) { return false }\n\n if (!silent) {\n const token_o = state.push('link_open', 'a', 1)\n token_o.attrs = [['href', fullUrl]]\n token_o.markup = 'autolink'\n token_o.info = 'auto'\n\n const token_t = state.push('text', '', 0)\n token_t.content = state.md.normalizeLinkText(url)\n\n const token_c = state.push('link_close', 'a', -1)\n token_c.markup = 'autolink'\n token_c.info = 'auto'\n }\n\n state.pos += url.length + 2\n return true\n }\n\n return false\n}\n","// Process html tags\n\nimport { HTML_TAG_RE } from '../common/html_re.mjs'\n\nfunction isLinkOpen (str) {\n return /^<a[>\\s]/i.test(str)\n}\nfunction isLinkClose (str) {\n return /^<\\/a\\s*>/i.test(str)\n}\n\nfunction isLetter (ch) {\n /* eslint no-bitwise:0 */\n const lc = ch | 0x20 // to lower case\n return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */)\n}\n\nexport default function html_inline (state, silent) {\n if (!state.md.options.html) { return false }\n\n // Check start\n const max = state.posMax\n const pos = state.pos\n if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n pos + 2 >= max) {\n return false\n }\n\n // Quick fail on second char\n const ch = state.src.charCodeAt(pos + 1)\n if (ch !== 0x21/* ! */ &&\n ch !== 0x3F/* ? */ &&\n ch !== 0x2F/* / */ &&\n !isLetter(ch)) {\n return false\n }\n\n const match = state.src.slice(pos).match(HTML_TAG_RE)\n if (!match) { return false }\n\n if (!silent) {\n const token = state.push('html_inline', '', 0)\n token.content = match[0]\n\n if (isLinkOpen(token.content)) state.linkLevel++\n if (isLinkClose(token.content)) state.linkLevel--\n }\n state.pos += match[0].length\n return true\n}\n","// Process html entity - {, ¯, ", ...\n\nimport { decodeHTML } from 'entities'\nimport { isValidEntityCode, fromCodePoint } from '../common/utils.mjs'\n\nconst DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i\nconst NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i\n\nexport default function entity (state, silent) {\n const pos = state.pos\n const max = state.posMax\n\n if (state.src.charCodeAt(pos) !== 0x26/* & */) return false\n\n if (pos + 1 >= max) return false\n\n const ch = state.src.charCodeAt(pos + 1)\n\n if (ch === 0x23 /* # */) {\n const match = state.src.slice(pos).match(DIGITAL_RE)\n if (match) {\n if (!silent) {\n const code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10)\n\n const token = state.push('text_special', '', 0)\n token.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD)\n token.markup = match[0]\n token.info = 'entity'\n }\n state.pos += match[0].length\n return true\n }\n } else {\n const match = state.src.slice(pos).match(NAMED_RE)\n if (match) {\n const decoded = decodeHTML(match[0])\n if (decoded !== match[0]) {\n if (!silent) {\n const token = state.push('text_special', '', 0)\n token.content = decoded\n token.markup = match[0]\n token.info = 'entity'\n }\n state.pos += match[0].length\n return true\n }\n }\n }\n\n return false\n}\n","// For each opening emphasis-like marker find a matching closing one\n//\n\nfunction processDelimiters (delimiters) {\n const openersBottom = {}\n const max = delimiters.length\n\n if (!max) return\n\n // headerIdx is the first delimiter of the current (where closer is) delimiter run\n let headerIdx = 0\n let lastTokenIdx = -2 // needs any value lower than -1\n const jumps = []\n\n for (let closerIdx = 0; closerIdx < max; closerIdx++) {\n const closer = delimiters[closerIdx]\n\n jumps.push(0)\n\n // markers belong to same delimiter run if:\n // - they have adjacent tokens\n // - AND markers are the same\n //\n if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n headerIdx = closerIdx\n }\n\n lastTokenIdx = closer.token\n\n // Length is only used for emphasis-specific \"rule of 3\",\n // if it's not defined (in strikethrough or 3rd party plugins),\n // we can default it to 0 to disable those checks.\n //\n closer.length = closer.length || 0\n\n if (!closer.close) continue\n\n // Previously calculated lower bounds (previous fails)\n // for each marker, each delimiter length modulo 3,\n // and for whether this closer can be an opener;\n // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n /* eslint-disable-next-line no-prototype-builtins */\n if (!openersBottom.hasOwnProperty(closer.marker)) {\n openersBottom[closer.marker] = [-1, -1, -1, -1, -1, -1]\n }\n\n const minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)]\n\n let openerIdx = headerIdx - jumps[headerIdx] - 1\n\n let newMinOpenerIdx = openerIdx\n\n for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n const opener = delimiters[openerIdx]\n\n if (opener.marker !== closer.marker) continue\n\n if (opener.open && opener.end < 0) {\n let isOddMatch = false\n\n // from spec:\n //\n // If one of the delimiters can both open and close emphasis, then the\n // sum of the lengths of the delimiter runs containing the opening and\n // closing delimiters must not be a multiple of 3 unless both lengths\n // are multiples of 3.\n //\n if (opener.close || closer.open) {\n if ((opener.length + closer.length) % 3 === 0) {\n if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n isOddMatch = true\n }\n }\n }\n\n if (!isOddMatch) {\n // If previous delimiter cannot be an opener, we can safely skip\n // the entire sequence in future checks. This is required to make\n // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n //\n const lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open\n ? jumps[openerIdx - 1] + 1\n : 0\n\n jumps[closerIdx] = closerIdx - openerIdx + lastJump\n jumps[openerIdx] = lastJump\n\n closer.open = false\n opener.end = closerIdx\n opener.close = false\n newMinOpenerIdx = -1\n // treat next token as start of run,\n // it optimizes skips in **<...>**a**<...>** pathological case\n lastTokenIdx = -2\n break\n }\n }\n }\n\n if (newMinOpenerIdx !== -1) {\n // If match for this delimiter run failed, we want to set lower bound for\n // future lookups. This is required to make sure algorithm has linear\n // complexity.\n //\n // See details here:\n // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n //\n openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx\n }\n }\n}\n\nexport default function link_pairs (state) {\n const tokens_meta = state.tokens_meta\n const max = state.tokens_meta.length\n\n processDelimiters(state.delimiters)\n\n for (let curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n processDelimiters(tokens_meta[curr].delimiters)\n }\n }\n}\n","// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n\nexport default function fragments_join (state) {\n let curr, last\n let level = 0\n const tokens = state.tokens\n const max = state.tokens.length\n\n for (curr = last = 0; curr < max; curr++) {\n // re-calculate levels after emphasis/strikethrough turns some text nodes\n // into opening/closing tags\n if (tokens[curr].nesting < 0) level-- // closing tag\n tokens[curr].level = level\n if (tokens[curr].nesting > 0) level++ // opening tag\n\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content\n } else {\n if (curr !== last) { tokens[last] = tokens[curr] }\n\n last++\n }\n }\n\n if (curr !== last) {\n tokens.length = last\n }\n}\n","/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateInline from './rules_inline/state_inline.mjs'\n\nimport r_text from './rules_inline/text.mjs'\nimport r_linkify from './rules_inline/linkify.mjs'\nimport r_newline from './rules_inline/newline.mjs'\nimport r_escape from './rules_inline/escape.mjs'\nimport r_backticks from './rules_inline/backticks.mjs'\nimport r_strikethrough from './rules_inline/strikethrough.mjs'\nimport r_emphasis from './rules_inline/emphasis.mjs'\nimport r_link from './rules_inline/link.mjs'\nimport r_image from './rules_inline/image.mjs'\nimport r_autolink from './rules_inline/autolink.mjs'\nimport r_html_inline from './rules_inline/html_inline.mjs'\nimport r_entity from './rules_inline/entity.mjs'\n\nimport r_balance_pairs from './rules_inline/balance_pairs.mjs'\nimport r_fragments_join from './rules_inline/fragments_join.mjs'\n\n// Parser rules\n\nconst _rules = [\n ['text', r_text],\n ['linkify', r_linkify],\n ['newline', r_newline],\n ['escape', r_escape],\n ['backticks', r_backticks],\n ['strikethrough', r_strikethrough.tokenize],\n ['emphasis', r_emphasis.tokenize],\n ['link', r_link],\n ['image', r_image],\n ['autolink', r_autolink],\n ['html_inline', r_html_inline],\n ['entity', r_entity]\n]\n\n// `rule2` ruleset was created specifically for emphasis/strikethrough\n// post-processing and may be changed in the future.\n//\n// Don't use this for anything except pairs (plugins working with `balance_pairs`).\n//\nconst _rules2 = [\n ['balance_pairs', r_balance_pairs],\n ['strikethrough', r_strikethrough.postProcess],\n ['emphasis', r_emphasis.postProcess],\n // rules for pairs separate '**' into its own text tokens, which may be left unused,\n // rule below merges unused segments back with the rest of the text\n ['fragments_join', r_fragments_join]\n]\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline () {\n /**\n * ParserInline#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of inline rules.\n **/\n this.ruler = new Ruler()\n\n for (let i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1])\n }\n\n /**\n * ParserInline#ruler2 -> Ruler\n *\n * [[Ruler]] instance. Second ruler used for post-processing\n * (e.g. in emphasis-like rules).\n **/\n this.ruler2 = new Ruler()\n\n for (let i = 0; i < _rules2.length; i++) {\n this.ruler2.push(_rules2[i][0], _rules2[i][1])\n }\n}\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n const pos = state.pos\n const rules = this.ruler.getRules('')\n const len = rules.length\n const maxNesting = state.md.options.maxNesting\n const cache = state.cache\n\n if (typeof cache[pos] !== 'undefined') {\n state.pos = cache[pos]\n return\n }\n\n let ok = false\n\n if (state.level < maxNesting) {\n for (let i = 0; i < len; i++) {\n // Increment state.level and decrement it later to limit recursion.\n // It's harmless to do here, because no tokens are created. But ideally,\n // we'd need a separate private state variable for this purpose.\n //\n state.level++\n ok = rules[i](state, true)\n state.level--\n\n if (ok) {\n if (pos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\") }\n break\n }\n }\n } else {\n // Too much nesting, just skip until the end of the paragraph.\n //\n // NOTE: this will cause links to behave incorrectly in the following case,\n // when an amount of `[` is exactly equal to `maxNesting + 1`:\n //\n // [[[[[[[[[[[[[[[[[[[[[foo]()\n //\n // TODO: remove this workaround when CM standard will allow nested links\n // (we can replace it by preventing links from being parsed in\n // validation mode)\n //\n state.pos = state.posMax\n }\n\n if (!ok) { state.pos++ }\n cache[pos] = state.pos\n}\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n const rules = this.ruler.getRules('')\n const len = rules.length\n const end = state.posMax\n const maxNesting = state.md.options.maxNesting\n\n while (state.pos < end) {\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.pos`\n // - update `state.tokens`\n // - return true\n const prevPos = state.pos\n let ok = false\n\n if (state.level < maxNesting) {\n for (let i = 0; i < len; i++) {\n ok = rules[i](state, false)\n if (ok) {\n if (prevPos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\") }\n break\n }\n }\n }\n\n if (ok) {\n if (state.pos >= end) { break }\n continue\n }\n\n state.pending += state.src[state.pos++]\n }\n\n if (state.pending) {\n state.pushPending()\n }\n}\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n const state = new this.State(str, md, env, outTokens)\n\n this.tokenize(state)\n\n const rules = this.ruler2.getRules('')\n const len = rules.length\n\n for (let i = 0; i < len; i++) {\n rules[i](state)\n }\n}\n\nParserInline.prototype.State = StateInline\n\nexport default ParserInline\n","import { Any, Cc, Z, P } from 'uc.micro'\n\nexport default function (opts) {\n const re = {}\n opts = opts || {}\n\n re.src_Any = Any.source\n re.src_Cc = Cc.source\n re.src_Z = Z.source\n re.src_P = P.source\n\n // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n re.src_ZPCc = [re.src_Z, re.src_P, re.src_Cc].join('|')\n\n // \\p{\\Z\\Cc} (white spaces + control)\n re.src_ZCc = [re.src_Z, re.src_Cc].join('|')\n\n // Experimental. List of chars, completely prohibited in links\n // because can separate it from other part of text\n const text_separators = '[><\\uff5c]'\n\n // All possible word characters (everything without punctuation, spaces & controls)\n // Defined via punctuation & spaces to save space\n // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')'\n // The same as abothe but without [0-9]\n // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n re.src_ip4 =\n\n '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'\n\n // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?'\n\n re.src_port =\n\n '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?'\n\n re.src_host_terminator =\n\n '(?=$|' + text_separators + '|' + re.src_ZPCc + ')' +\n '(?!' + (opts['---'] ? '-(?!--)|' : '-|') + '_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))'\n\n re.src_path =\n\n '(?:' +\n '[/?#]' +\n '(?:' +\n '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' +\n '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n\n // allow `I'm_king` if no pair found\n \"\\\\'(?=\" + re.src_pseudo_letter + '|[-])|' +\n\n // google has many dots in \"google search\" links (#66, #81).\n // github has ... in commit range links,\n // Restrict to\n // - english\n // - percent-encoded\n // - parts of file path\n // - params separator\n // until more examples found.\n '\\\\.{2,}[a-zA-Z0-9%/&]|' +\n\n '\\\\.(?!' + re.src_ZCc + '|[.]|$)|' +\n (opts['---']\n ? '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n : '\\\\-+|'\n ) +\n // allow `,,,` in paths\n ',(?!' + re.src_ZCc + '|$)|' +\n\n // allow `;` if not followed by space-like char\n ';(?!' + re.src_ZCc + '|$)|' +\n\n // allow `!!!` in paths, but not at the end\n '\\\\!+(?!' + re.src_ZCc + '|[!]|$)|' +\n\n '\\\\?(?!' + re.src_ZCc + '|[?]|$)' +\n ')+' +\n '|\\\\/' +\n ')?'\n\n // Allow anything in markdown spec, forbid quote (\") at the first position\n // because emails enclosed in quotes are far more common\n re.src_email_name =\n\n '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*'\n\n re.src_xn =\n\n 'xn--[a-z0-9\\\\-]{1,59}'\n\n // More to read about domain names\n // http://serverfault.com/questions/638260/\n\n re.src_domain_root =\n\n // Allow letters & digits (http://test1)\n '(?:' +\n re.src_xn +\n '|' +\n re.src_pseudo_letter + '{1,63}' +\n ')'\n\n re.src_domain =\n\n '(?:' +\n re.src_xn +\n '|' +\n '(?:' + re.src_pseudo_letter + ')' +\n '|' +\n '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n ')'\n\n re.src_host =\n\n '(?:' +\n // Don't need IP check, because digits are already allowed in normal domain names\n // src_ip4 +\n // '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/* _root */ + ')' +\n ')'\n\n re.tpl_host_fuzzy =\n\n '(?:' +\n re.src_ip4 +\n '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n ')'\n\n re.tpl_host_no_ip_fuzzy =\n\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))'\n\n re.src_host_strict =\n\n re.src_host + re.src_host_terminator\n\n re.tpl_host_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_host_terminator\n\n re.src_host_port_strict =\n\n re.src_host + re.src_port + re.src_host_terminator\n\n re.tpl_host_port_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_port + re.src_host_terminator\n\n re.tpl_host_port_no_ip_fuzzy_strict =\n\n re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator\n\n //\n // Main rules\n //\n\n // Rude test fuzzy links by host, for quick deny\n re.tpl_host_fuzzy_test =\n\n 'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))'\n\n re.tpl_email_fuzzy =\n\n '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')'\n\n re.tpl_link_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')'\n\n re.tpl_link_no_ip_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')'\n\n return re\n}\n","import reFactory from './lib/re.mjs'\n\n//\n// Helpers\n//\n\n// Merge objects\n//\nfunction assign (obj /* from1, from2, from3, ... */) {\n const sources = Array.prototype.slice.call(arguments, 1)\n\n sources.forEach(function (source) {\n if (!source) { return }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key]\n })\n })\n\n return obj\n}\n\nfunction _class (obj) { return Object.prototype.toString.call(obj) }\nfunction isString (obj) { return _class(obj) === '[object String]' }\nfunction isObject (obj) { return _class(obj) === '[object Object]' }\nfunction isRegExp (obj) { return _class(obj) === '[object RegExp]' }\nfunction isFunction (obj) { return _class(obj) === '[object Function]' }\n\nfunction escapeRE (str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&') }\n\n//\n\nconst defaultOptions = {\n fuzzyLink: true,\n fuzzyEmail: true,\n fuzzyIP: false\n}\n\nfunction isOptionsObj (obj) {\n return Object.keys(obj || {}).reduce(function (acc, k) {\n /* eslint-disable-next-line no-prototype-builtins */\n return acc || defaultOptions.hasOwnProperty(k)\n }, false)\n}\n\nconst defaultSchemas = {\n 'http:': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos)\n\n if (!self.re.http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.http = new RegExp(\n '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n )\n }\n if (self.re.http.test(tail)) {\n return tail.match(self.re.http)[0].length\n }\n return 0\n }\n },\n 'https:': 'http:',\n 'ftp:': 'http:',\n '//': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos)\n\n if (!self.re.no_http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.no_http = new RegExp(\n '^' +\n self.re.src_auth +\n // Don't allow single-level domains, because of false positives like '//test'\n // with code comments\n '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n self.re.src_port +\n self.re.src_host_terminator +\n self.re.src_path,\n\n 'i'\n )\n }\n\n if (self.re.no_http.test(tail)) {\n // should not be `://` & `///`, that protects from errors in protocol name\n if (pos >= 3 && text[pos - 3] === ':') { return 0 }\n if (pos >= 3 && text[pos - 3] === '/') { return 0 }\n return tail.match(self.re.no_http)[0].length\n }\n return 0\n }\n },\n 'mailto:': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos)\n\n if (!self.re.mailto) {\n self.re.mailto = new RegExp(\n '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n )\n }\n if (self.re.mailto.test(tail)) {\n return tail.match(self.re.mailto)[0].length\n }\n return 0\n }\n }\n}\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\n/* eslint-disable-next-line max-len */\nconst tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]'\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nconst tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|')\n\nfunction resetScanCache (self) {\n self.__index__ = -1\n self.__text_cache__ = ''\n}\n\nfunction createValidator (re) {\n return function (text, pos) {\n const tail = text.slice(pos)\n\n if (re.test(tail)) {\n return tail.match(re)[0].length\n }\n return 0\n }\n}\n\nfunction createNormalizer () {\n return function (match, self) {\n self.normalize(match)\n }\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile (self) {\n // Load & clone RE patterns.\n const re = self.re = reFactory(self.__opts__)\n\n // Define dynamic patterns\n const tlds = self.__tlds__.slice()\n\n self.onCompile()\n\n if (!self.__tlds_replaced__) {\n tlds.push(tlds_2ch_src_re)\n }\n tlds.push(re.src_xn)\n\n re.src_tlds = tlds.join('|')\n\n function untpl (tpl) { return tpl.replace('%TLDS%', re.src_tlds) }\n\n re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i')\n re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i')\n re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i')\n re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i')\n\n //\n // Compile each schema\n //\n\n const aliases = []\n\n self.__compiled__ = {} // Reset compiled data\n\n function schemaError (name, val) {\n throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val)\n }\n\n Object.keys(self.__schemas__).forEach(function (name) {\n const val = self.__schemas__[name]\n\n // skip disabled methods\n if (val === null) { return }\n\n const compiled = { validate: null, link: null }\n\n self.__compiled__[name] = compiled\n\n if (isObject(val)) {\n if (isRegExp(val.validate)) {\n compiled.validate = createValidator(val.validate)\n } else if (isFunction(val.validate)) {\n compiled.validate = val.validate\n } else {\n schemaError(name, val)\n }\n\n if (isFunction(val.normalize)) {\n compiled.normalize = val.normalize\n } else if (!val.normalize) {\n compiled.normalize = createNormalizer()\n } else {\n schemaError(name, val)\n }\n\n return\n }\n\n if (isString(val)) {\n aliases.push(name)\n return\n }\n\n schemaError(name, val)\n })\n\n //\n // Compile postponed aliases\n //\n\n aliases.forEach(function (alias) {\n if (!self.__compiled__[self.__schemas__[alias]]) {\n // Silently fail on missed schemas to avoid errons on disable.\n // schemaError(alias, self.__schemas__[alias]);\n return\n }\n\n self.__compiled__[alias].validate =\n self.__compiled__[self.__schemas__[alias]].validate\n self.__compiled__[alias].normalize =\n self.__compiled__[self.__schemas__[alias]].normalize\n })\n\n //\n // Fake record for guessed links\n //\n self.__compiled__[''] = { validate: null, normalize: createNormalizer() }\n\n //\n // Build schema condition\n //\n const slist = Object.keys(self.__compiled__)\n .filter(function (name) {\n // Filter disabled & fake schemas\n return name.length > 0 && self.__compiled__[name]\n })\n .map(escapeRE)\n .join('|')\n // (?!_) cause 1.5x slowdown\n self.re.schema_test = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i')\n self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig')\n self.re.schema_at_start = RegExp('^' + self.re.schema_search.source, 'i')\n\n self.re.pretest = RegExp(\n '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n 'i'\n )\n\n //\n // Cleanup\n //\n\n resetScanCache(self)\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match (self, shift) {\n const start = self.__index__\n const end = self.__last_index__\n const text = self.__text_cache__.slice(start, end)\n\n /**\n * Match#schema -> String\n *\n * Prefix (protocol) for matched string.\n **/\n this.schema = self.__schema__.toLowerCase()\n /**\n * Match#index -> Number\n *\n * First position of matched string.\n **/\n this.index = start + shift\n /**\n * Match#lastIndex -> Number\n *\n * Next position after matched string.\n **/\n this.lastIndex = end + shift\n /**\n * Match#raw -> String\n *\n * Matched string.\n **/\n this.raw = text\n /**\n * Match#text -> String\n *\n * Notmalized text of matched string.\n **/\n this.text = text\n /**\n * Match#url -> String\n *\n * Normalized url of matched string.\n **/\n this.url = text\n}\n\nfunction createMatch (self, shift) {\n const match = new Match(self, shift)\n\n self.__compiled__[match.schema].normalize(match, self)\n\n return match\n}\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n * for example). `linkify-it` makes shure that prefix is not preceeded with\n * alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n * - _String_ - just alias to existing rule\n * - _Object_\n * - _validate_ - validator function (should return matched length on success),\n * or `RegExp`.\n * - _normalize_ - optional function to normalize text & url of matched result\n * (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n * like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt (schemas, options) {\n if (!(this instanceof LinkifyIt)) {\n return new LinkifyIt(schemas, options)\n }\n\n if (!options) {\n if (isOptionsObj(schemas)) {\n options = schemas\n schemas = {}\n }\n }\n\n this.__opts__ = assign({}, defaultOptions, options)\n\n // Cache last tested result. Used to skip repeating steps on next `match` call.\n this.__index__ = -1\n this.__last_index__ = -1 // Next scan position\n this.__schema__ = ''\n this.__text_cache__ = ''\n\n this.__schemas__ = assign({}, defaultSchemas, schemas)\n this.__compiled__ = {}\n\n this.__tlds__ = tlds_default\n this.__tlds_replaced__ = false\n\n this.re = {}\n\n compile(this)\n}\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add (schema, definition) {\n this.__schemas__[schema] = definition\n compile(this)\n return this\n}\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set (options) {\n this.__opts__ = assign(this.__opts__, options)\n return this\n}\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test (text) {\n // Reset scan cache\n this.__text_cache__ = text\n this.__index__ = -1\n\n if (!text.length) { return false }\n\n let m, ml, me, len, shift, next, re, tld_pos, at_pos\n\n // try to scan for link with schema - that's the most simple rule\n if (this.re.schema_test.test(text)) {\n re = this.re.schema_search\n re.lastIndex = 0\n while ((m = re.exec(text)) !== null) {\n len = this.testSchemaAt(text, m[2], re.lastIndex)\n if (len) {\n this.__schema__ = m[2]\n this.__index__ = m.index + m[1].length\n this.__last_index__ = m.index + m[0].length + len\n break\n }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n // guess schemaless links\n tld_pos = text.search(this.re.host_fuzzy_test)\n if (tld_pos >= 0) {\n // if tld is located after found link - no need to check fuzzy pattern\n if (this.__index__ < 0 || tld_pos < this.__index__) {\n if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n shift = ml.index + ml[1].length\n\n if (this.__index__ < 0 || shift < this.__index__) {\n this.__schema__ = ''\n this.__index__ = shift\n this.__last_index__ = ml.index + ml[0].length\n }\n }\n }\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n // guess schemaless emails\n at_pos = text.indexOf('@')\n if (at_pos >= 0) {\n // We can't skip this check, because this cases are possible:\n // 192.168.1.1@gmail.com, my.in@example.com\n if ((me = text.match(this.re.email_fuzzy)) !== null) {\n shift = me.index + me[1].length\n next = me.index + me[0].length\n\n if (this.__index__ < 0 || shift < this.__index__ ||\n (shift === this.__index__ && next > this.__last_index__)) {\n this.__schema__ = 'mailto:'\n this.__index__ = shift\n this.__last_index__ = next\n }\n }\n }\n }\n\n return this.__index__ >= 0\n}\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest (text) {\n return this.re.pretest.test(text)\n}\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt (text, schema, pos) {\n // If not supported schema check requested - terminate\n if (!this.__compiled__[schema.toLowerCase()]) {\n return 0\n }\n return this.__compiled__[schema.toLowerCase()].validate(text, pos, this)\n}\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n * protocol-neutral links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match (text) {\n const result = []\n let shift = 0\n\n // Try to take previous element from cache, if .test() called before\n if (this.__index__ >= 0 && this.__text_cache__ === text) {\n result.push(createMatch(this, shift))\n shift = this.__last_index__\n }\n\n // Cut head if cache was used\n let tail = shift ? text.slice(shift) : text\n\n // Scan string until end reached\n while (this.test(tail)) {\n result.push(createMatch(this, shift))\n\n tail = tail.slice(this.__last_index__)\n shift += this.__last_index__\n }\n\n if (result.length) {\n return result\n }\n\n return null\n}\n\n/**\n * LinkifyIt#matchAtStart(text) -> Match|null\n *\n * Returns fully-formed (not fuzzy) link if it starts at the beginning\n * of the string, and null otherwise.\n **/\nLinkifyIt.prototype.matchAtStart = function matchAtStart (text) {\n // Reset scan cache\n this.__text_cache__ = text\n this.__index__ = -1\n\n if (!text.length) return null\n\n const m = this.re.schema_at_start.exec(text)\n if (!m) return null\n\n const len = this.testSchemaAt(text, m[2], m[0].length)\n if (!len) return null\n\n this.__schema__ = m[2]\n this.__index__ = m.index + m[1].length\n this.__last_index__ = m.index + m[0].length + len\n\n return createMatch(this, 0)\n}\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n * are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds (list, keepOld) {\n list = Array.isArray(list) ? list : [list]\n\n if (!keepOld) {\n this.__tlds__ = list.slice()\n this.__tlds_replaced__ = true\n compile(this)\n return this\n }\n\n this.__tlds__ = this.__tlds__.concat(list)\n .sort()\n .filter(function (el, idx, arr) {\n return el !== arr[idx - 1]\n })\n .reverse()\n\n compile(this)\n return this\n}\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize (match) {\n // Do minimal possible changes by default. Need to collect feedback prior\n // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n if (!match.schema) { match.url = 'http://' + match.url }\n\n if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n match.url = 'mailto:' + match.url\n }\n}\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile () {\n}\n\nexport default LinkifyIt\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.3.1',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode };\nexport default punycode;\n","// markdown-it default options\n\nexport default {\n options: {\n // Enable HTML tags in source\n html: false,\n\n // Use '/' to close single tags (<br />)\n xhtmlOut: false,\n\n // Convert '\\n' in paragraphs into <br>\n breaks: false,\n\n // CSS language prefix for fenced blocks\n langPrefix: 'language-',\n\n // autoconvert URL-like texts to links\n linkify: false,\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “â€â€˜â€™ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n // Internal protection, recursion limit\n maxNesting: 100\n },\n\n components: {\n core: {},\n block: {},\n inline: {}\n }\n}\n","// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\nexport default {\n options: {\n // Enable HTML tags in source\n html: false,\n\n // Use '/' to close single tags (<br />)\n xhtmlOut: false,\n\n // Convert '\\n' in paragraphs into <br>\n breaks: false,\n\n // CSS language prefix for fenced blocks\n langPrefix: 'language-',\n\n // autoconvert URL-like texts to links\n linkify: false,\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “â€â€˜â€™ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n // Internal protection, recursion limit\n maxNesting: 20\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline',\n 'text_join'\n ]\n },\n\n block: {\n rules: [\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'fragments_join'\n ]\n }\n }\n}\n","// Commonmark default options\n\nexport default {\n options: {\n // Enable HTML tags in source\n html: true,\n\n // Use '/' to close single tags (<br />)\n xhtmlOut: true,\n\n // Convert '\\n' in paragraphs into <br>\n breaks: false,\n\n // CSS language prefix for fenced blocks\n langPrefix: 'language-',\n\n // autoconvert URL-like texts to links\n linkify: false,\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “â€â€˜â€™ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n // Internal protection, recursion limit\n maxNesting: 20\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline',\n 'text_join'\n ]\n },\n\n block: {\n rules: [\n 'blockquote',\n 'code',\n 'fence',\n 'heading',\n 'hr',\n 'html_block',\n 'lheading',\n 'list',\n 'reference',\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'autolink',\n 'backticks',\n 'emphasis',\n 'entity',\n 'escape',\n 'html_inline',\n 'image',\n 'link',\n 'newline',\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'emphasis',\n 'fragments_join'\n ]\n }\n }\n}\n","// Main parser class\n\nimport * as utils from './common/utils.mjs'\nimport * as helpers from './helpers/index.mjs'\nimport Renderer from './renderer.mjs'\nimport ParserCore from './parser_core.mjs'\nimport ParserBlock from './parser_block.mjs'\nimport ParserInline from './parser_inline.mjs'\nimport LinkifyIt from 'linkify-it'\nimport * as mdurl from 'mdurl'\nimport punycode from 'punycode.js'\n\nimport cfg_default from './presets/default.mjs'\nimport cfg_zero from './presets/zero.mjs'\nimport cfg_commonmark from './presets/commonmark.mjs'\n\nconst config = {\n default: cfg_default,\n zero: cfg_zero,\n commonmark: cfg_commonmark\n}\n\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nconst BAD_PROTO_RE = /^(vbscript|javascript|file|data):/\nconst GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/\n\nfunction validateLink (url) {\n // url should be normalized at this point, and existing entities are decoded\n const str = url.trim().toLowerCase()\n\n return BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) : true\n}\n\nconst RECODE_HOSTNAME_FOR = ['http:', 'https:', 'mailto:']\n\nfunction normalizeLink (url) {\n const parsed = mdurl.parse(url, true)\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toASCII(parsed.hostname)\n } catch (er) { /**/ }\n }\n }\n\n return mdurl.encode(mdurl.format(parsed))\n}\n\nfunction normalizeLinkText (url) {\n const parsed = mdurl.parse(url, true)\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toUnicode(parsed.hostname)\n } catch (er) { /**/ }\n }\n }\n\n // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%')\n}\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n * md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.mjs) -\n * configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.mjs) -\n * similar to GFM, used when no preset name given. Enables all available rules,\n * but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.mjs) -\n * all rules disabled. Useful to quickly setup your config via `.enable()`.\n * For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n * That's not safe! You may need external sanitizer to protect output from XSS.\n * It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n * (`<br />`). This is needed only for full CommonMark compatibility. In real\n * world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n * Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__ - `false`. Set `true` to enable [some language-neutral\n * replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.mjs) +\n * quotes beautification (smartquotes).\n * - __quotes__ - `“â€â€˜â€™`, String or Array. Double + single quotes replacement\n * pairs, when typographer enabled and smartquotes on. For example, you can\n * use `'«»„“'` for Russian, `'„“‚‘'` for German, and\n * `['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n * Highlighter `function (str, lang)` should return escaped HTML. It can also\n * return empty string if the source was not changed and should be escaped\n * externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n * html: true,\n * linkify: true,\n * typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;\n * } catch (__) {}\n * }\n *\n * return ''; // use external default escaping\n * }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>` or `<code>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return '<pre><code class=\"hljs\">' +\n * hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n * '</code></pre>';\n * } catch (__) {}\n * }\n *\n * return '<pre><code class=\"hljs\">' + md.utils.escapeHtml(str) + '</code></pre>';\n * }\n * });\n * ```\n *\n **/\nfunction MarkdownIt (presetName, options) {\n if (!(this instanceof MarkdownIt)) {\n return new MarkdownIt(presetName, options)\n }\n\n if (!options) {\n if (!utils.isString(presetName)) {\n options = presetName || {}\n presetName = 'default'\n }\n }\n\n /**\n * MarkdownIt#inline -> ParserInline\n *\n * Instance of [[ParserInline]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.inline = new ParserInline()\n\n /**\n * MarkdownIt#block -> ParserBlock\n *\n * Instance of [[ParserBlock]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.block = new ParserBlock()\n\n /**\n * MarkdownIt#core -> Core\n *\n * Instance of [[Core]] chain executor. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.core = new ParserCore()\n\n /**\n * MarkdownIt#renderer -> Renderer\n *\n * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n * rules for new token types, generated by plugins.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * function myToken(tokens, idx, options, env, self) {\n * //...\n * return result;\n * };\n *\n * md.renderer.rules['my_token'] = myToken\n * ```\n *\n * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.mjs).\n **/\n this.renderer = new Renderer()\n\n /**\n * MarkdownIt#linkify -> LinkifyIt\n *\n * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.mjs)\n * rule.\n **/\n this.linkify = new LinkifyIt()\n\n /**\n * MarkdownIt#validateLink(url) -> Boolean\n *\n * Link validation function. CommonMark allows too much in links. By default\n * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n * except some embedded image types.\n *\n * You can change this behaviour:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * // enable everything\n * md.validateLink = function () { return true; }\n * ```\n **/\n this.validateLink = validateLink\n\n /**\n * MarkdownIt#normalizeLink(url) -> String\n *\n * Function used to encode link url to a machine-readable format,\n * which includes url-encoding, punycode, etc.\n **/\n this.normalizeLink = normalizeLink\n\n /**\n * MarkdownIt#normalizeLinkText(url) -> String\n *\n * Function used to decode link url to a human-readable format`\n **/\n this.normalizeLinkText = normalizeLinkText\n\n // Expose utils & helpers for easy acces from plugins\n\n /**\n * MarkdownIt#utils -> utils\n *\n * Assorted utility functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.mjs).\n **/\n this.utils = utils\n\n /**\n * MarkdownIt#helpers -> helpers\n *\n * Link components parser functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n **/\n this.helpers = utils.assign({}, helpers)\n\n this.options = {}\n this.configure(presetName)\n\n if (options) { this.set(options) }\n}\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .set({ html: true, breaks: true })\n * .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n utils.assign(this.options, options)\n return this\n}\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n const self = this\n\n if (utils.isString(presets)) {\n const presetName = presets\n presets = config[presetName]\n if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name') }\n }\n\n if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty') }\n\n if (presets.options) { self.set(presets.options) }\n\n if (presets.components) {\n Object.keys(presets.components).forEach(function (name) {\n if (presets.components[name].rules) {\n self[name].ruler.enableOnly(presets.components[name].rules)\n }\n if (presets.components[name].rules2) {\n self[name].ruler2.enableOnly(presets.components[name].rules2)\n }\n })\n }\n return this\n}\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .enable(['sub', 'sup'])\n * .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n let result = []\n\n if (!Array.isArray(list)) { list = [list] }\n\n ['core', 'block', 'inline'].forEach(function (chain) {\n result = result.concat(this[chain].ruler.enable(list, true))\n }, this)\n\n result = result.concat(this.inline.ruler2.enable(list, true))\n\n const missed = list.filter(function (name) { return result.indexOf(name) < 0 })\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed)\n }\n\n return this\n}\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n let result = []\n\n if (!Array.isArray(list)) { list = [list] }\n\n ['core', 'block', 'inline'].forEach(function (chain) {\n result = result.concat(this[chain].ruler.disable(list, true))\n }, this)\n\n result = result.concat(this.inline.ruler2.disable(list, true))\n\n const missed = list.filter(function (name) { return result.indexOf(name) < 0 })\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed)\n }\n return this\n}\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n * .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n * });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n const args = [this].concat(Array.prototype.slice.call(arguments, 1))\n plugin.apply(plugin, args)\n return this\n}\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n if (typeof src !== 'string') {\n throw new Error('Input data should be a String')\n }\n\n const state = new this.core.State(src, this, env)\n\n this.core.process(state)\n\n return state.tokens\n}\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n env = env || {}\n\n return this.renderer.render(this.parse(src, env), this.options, env)\n}\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n const state = new this.core.State(src, this, env)\n\n state.inlineMode = true\n this.core.process(state)\n\n return state.tokens\n}\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n env = env || {}\n\n return this.renderer.render(this.parseInline(src, env), this.options, env)\n}\n\nexport default MarkdownIt\n","import { Schema, Mark } from 'prosemirror-model';\nimport MarkdownIt from 'markdown-it';\n\n/**\nDocument schema for the data model used by CommonMark.\n*/\nconst schema = new Schema({\n nodes: {\n doc: {\n content: \"block+\"\n },\n paragraph: {\n content: \"inline*\",\n group: \"block\",\n parseDOM: [{ tag: \"p\" }],\n toDOM() { return [\"p\", 0]; }\n },\n blockquote: {\n content: \"block+\",\n group: \"block\",\n parseDOM: [{ tag: \"blockquote\" }],\n toDOM() { return [\"blockquote\", 0]; }\n },\n horizontal_rule: {\n group: \"block\",\n parseDOM: [{ tag: \"hr\" }],\n toDOM() { return [\"div\", [\"hr\"]]; }\n },\n heading: {\n attrs: { level: { default: 1 } },\n content: \"(text | image)*\",\n group: \"block\",\n defining: true,\n parseDOM: [{ tag: \"h1\", attrs: { level: 1 } },\n { tag: \"h2\", attrs: { level: 2 } },\n { tag: \"h3\", attrs: { level: 3 } },\n { tag: \"h4\", attrs: { level: 4 } },\n { tag: \"h5\", attrs: { level: 5 } },\n { tag: \"h6\", attrs: { level: 6 } }],\n toDOM(node) { return [\"h\" + node.attrs.level, 0]; }\n },\n code_block: {\n content: \"text*\",\n group: \"block\",\n code: true,\n defining: true,\n marks: \"\",\n attrs: { params: { default: \"\" } },\n parseDOM: [{ tag: \"pre\", preserveWhitespace: \"full\", getAttrs: node => ({ params: node.getAttribute(\"data-params\") || \"\" }) }],\n toDOM(node) { return [\"pre\", node.attrs.params ? { \"data-params\": node.attrs.params } : {}, [\"code\", 0]]; }\n },\n ordered_list: {\n content: \"list_item+\",\n group: \"block\",\n attrs: { order: { default: 1 }, tight: { default: false } },\n parseDOM: [{ tag: \"ol\", getAttrs(dom) {\n return { order: dom.hasAttribute(\"start\") ? +dom.getAttribute(\"start\") : 1,\n tight: dom.hasAttribute(\"data-tight\") };\n } }],\n toDOM(node) {\n return [\"ol\", { start: node.attrs.order == 1 ? null : node.attrs.order,\n \"data-tight\": node.attrs.tight ? \"true\" : null }, 0];\n }\n },\n bullet_list: {\n content: \"list_item+\",\n group: \"block\",\n attrs: { tight: { default: false } },\n parseDOM: [{ tag: \"ul\", getAttrs: dom => ({ tight: dom.hasAttribute(\"data-tight\") }) }],\n toDOM(node) { return [\"ul\", { \"data-tight\": node.attrs.tight ? \"true\" : null }, 0]; }\n },\n list_item: {\n content: \"block+\",\n defining: true,\n parseDOM: [{ tag: \"li\" }],\n toDOM() { return [\"li\", 0]; }\n },\n text: {\n group: \"inline\"\n },\n image: {\n inline: true,\n attrs: {\n src: {},\n alt: { default: null },\n title: { default: null }\n },\n group: \"inline\",\n draggable: true,\n parseDOM: [{ tag: \"img[src]\", getAttrs(dom) {\n return {\n src: dom.getAttribute(\"src\"),\n title: dom.getAttribute(\"title\"),\n alt: dom.getAttribute(\"alt\")\n };\n } }],\n toDOM(node) { return [\"img\", node.attrs]; }\n },\n hard_break: {\n inline: true,\n group: \"inline\",\n selectable: false,\n parseDOM: [{ tag: \"br\" }],\n toDOM() { return [\"br\"]; }\n }\n },\n marks: {\n em: {\n parseDOM: [\n { tag: \"i\" }, { tag: \"em\" },\n { style: \"font-style=italic\" },\n { style: \"font-style=normal\", clearMark: m => m.type.name == \"em\" }\n ],\n toDOM() { return [\"em\"]; }\n },\n strong: {\n parseDOM: [\n { tag: \"strong\" },\n { tag: \"b\", getAttrs: node => node.style.fontWeight != \"normal\" && null },\n { style: \"font-weight=400\", clearMark: m => m.type.name == \"strong\" },\n { style: \"font-weight\", getAttrs: value => /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null }\n ],\n toDOM() { return [\"strong\"]; }\n },\n link: {\n attrs: {\n href: {},\n title: { default: null }\n },\n inclusive: false,\n parseDOM: [{ tag: \"a[href]\", getAttrs(dom) {\n return { href: dom.getAttribute(\"href\"), title: dom.getAttribute(\"title\") };\n } }],\n toDOM(node) { return [\"a\", node.attrs]; }\n },\n code: {\n parseDOM: [{ tag: \"code\" }],\n toDOM() { return [\"code\"]; }\n }\n }\n});\n\n// @ts-ignore\nfunction maybeMerge(a, b) {\n if (a.isText && b.isText && Mark.sameSet(a.marks, b.marks))\n return a.withText(a.text + b.text);\n}\n// Object used to track the context of a running parse.\nclass MarkdownParseState {\n constructor(schema, tokenHandlers) {\n this.schema = schema;\n this.tokenHandlers = tokenHandlers;\n this.stack = [{ type: schema.topNodeType, attrs: null, content: [], marks: Mark.none }];\n }\n top() {\n return this.stack[this.stack.length - 1];\n }\n push(elt) {\n if (this.stack.length)\n this.top().content.push(elt);\n }\n // Adds the given text to the current position in the document,\n // using the current marks as styling.\n addText(text) {\n if (!text)\n return;\n let top = this.top(), nodes = top.content, last = nodes[nodes.length - 1];\n let node = this.schema.text(text, top.marks), merged;\n if (last && (merged = maybeMerge(last, node)))\n nodes[nodes.length - 1] = merged;\n else\n nodes.push(node);\n }\n // Adds the given mark to the set of active marks.\n openMark(mark) {\n let top = this.top();\n top.marks = mark.addToSet(top.marks);\n }\n // Removes the given mark from the set of active marks.\n closeMark(mark) {\n let top = this.top();\n top.marks = mark.removeFromSet(top.marks);\n }\n parseTokens(toks) {\n for (let i = 0; i < toks.length; i++) {\n let tok = toks[i];\n let handler = this.tokenHandlers[tok.type];\n if (!handler)\n throw new Error(\"Token type `\" + tok.type + \"` not supported by Markdown parser\");\n handler(this, tok, toks, i);\n }\n }\n // Add a node at the current position.\n addNode(type, attrs, content) {\n let top = this.top();\n let node = type.createAndFill(attrs, content, top ? top.marks : []);\n if (!node)\n return null;\n this.push(node);\n return node;\n }\n // Wrap subsequent content in a node of the given type.\n openNode(type, attrs) {\n this.stack.push({ type: type, attrs: attrs, content: [], marks: Mark.none });\n }\n // Close and return the node that is currently on top of the stack.\n closeNode() {\n let info = this.stack.pop();\n return this.addNode(info.type, info.attrs, info.content);\n }\n}\nfunction attrs(spec, token, tokens, i) {\n if (spec.getAttrs)\n return spec.getAttrs(token, tokens, i);\n // For backwards compatibility when `attrs` is a Function\n else if (spec.attrs instanceof Function)\n return spec.attrs(token);\n else\n return spec.attrs;\n}\n// Code content is represented as a single token with a `content`\n// property in Markdown-it.\nfunction noCloseToken(spec, type) {\n return spec.noCloseToken || type == \"code_inline\" || type == \"code_block\" || type == \"fence\";\n}\nfunction withoutTrailingNewline(str) {\n return str[str.length - 1] == \"\\n\" ? str.slice(0, str.length - 1) : str;\n}\nfunction noOp() { }\nfunction tokenHandlers(schema, tokens) {\n let handlers = Object.create(null);\n for (let type in tokens) {\n let spec = tokens[type];\n if (spec.block) {\n let nodeType = schema.nodeType(spec.block);\n if (noCloseToken(spec, type)) {\n handlers[type] = (state, tok, tokens, i) => {\n state.openNode(nodeType, attrs(spec, tok, tokens, i));\n state.addText(withoutTrailingNewline(tok.content));\n state.closeNode();\n };\n }\n else {\n handlers[type + \"_open\"] = (state, tok, tokens, i) => state.openNode(nodeType, attrs(spec, tok, tokens, i));\n handlers[type + \"_close\"] = state => state.closeNode();\n }\n }\n else if (spec.node) {\n let nodeType = schema.nodeType(spec.node);\n handlers[type] = (state, tok, tokens, i) => state.addNode(nodeType, attrs(spec, tok, tokens, i));\n }\n else if (spec.mark) {\n let markType = schema.marks[spec.mark];\n if (noCloseToken(spec, type)) {\n handlers[type] = (state, tok, tokens, i) => {\n state.openMark(markType.create(attrs(spec, tok, tokens, i)));\n state.addText(withoutTrailingNewline(tok.content));\n state.closeMark(markType);\n };\n }\n else {\n handlers[type + \"_open\"] = (state, tok, tokens, i) => state.openMark(markType.create(attrs(spec, tok, tokens, i)));\n handlers[type + \"_close\"] = state => state.closeMark(markType);\n }\n }\n else if (spec.ignore) {\n if (noCloseToken(spec, type)) {\n handlers[type] = noOp;\n }\n else {\n handlers[type + \"_open\"] = noOp;\n handlers[type + \"_close\"] = noOp;\n }\n }\n else {\n throw new RangeError(\"Unrecognized parsing spec \" + JSON.stringify(spec));\n }\n }\n handlers.text = (state, tok) => state.addText(tok.content);\n handlers.inline = (state, tok) => state.parseTokens(tok.children);\n handlers.softbreak = handlers.softbreak || (state => state.addText(\" \"));\n return handlers;\n}\n/**\nA configuration of a Markdown parser. Such a parser uses\n[markdown-it](https://github.com/markdown-it/markdown-it) to\ntokenize a file, and then runs the custom rules it is given over\nthe tokens to create a ProseMirror document tree.\n*/\nclass MarkdownParser {\n /**\n Create a parser with the given configuration. You can configure\n the markdown-it parser to parse the dialect you want, and provide\n a description of the ProseMirror entities those tokens map to in\n the `tokens` object, which maps token names to descriptions of\n what to do with them. Such a description is an object, and may\n have the following properties:\n */\n constructor(\n /**\n The parser's document schema.\n */\n schema, \n /**\n This parser's markdown-it tokenizer.\n */\n tokenizer, \n /**\n The value of the `tokens` object used to construct this\n parser. Can be useful to copy and modify to base other parsers\n on.\n */\n tokens) {\n this.schema = schema;\n this.tokenizer = tokenizer;\n this.tokens = tokens;\n this.tokenHandlers = tokenHandlers(schema, tokens);\n }\n /**\n Parse a string as [CommonMark](http://commonmark.org/) markup,\n and create a ProseMirror document as prescribed by this parser's\n rules.\n \n The second argument, when given, is passed through to the\n [Markdown\n parser](https://markdown-it.github.io/markdown-it/#MarkdownIt.parse).\n */\n parse(text, markdownEnv = {}) {\n let state = new MarkdownParseState(this.schema, this.tokenHandlers), doc;\n state.parseTokens(this.tokenizer.parse(text, markdownEnv));\n do {\n doc = state.closeNode();\n } while (state.stack.length);\n return doc || this.schema.topNodeType.createAndFill();\n }\n}\nfunction listIsTight(tokens, i) {\n while (++i < tokens.length)\n if (tokens[i].type != \"list_item_open\")\n return tokens[i].hidden;\n return false;\n}\n/**\nA parser parsing unextended [CommonMark](http://commonmark.org/),\nwithout inline HTML, and producing a document in the basic schema.\n*/\nconst defaultMarkdownParser = new MarkdownParser(schema, MarkdownIt(\"commonmark\", { html: false }), {\n blockquote: { block: \"blockquote\" },\n paragraph: { block: \"paragraph\" },\n list_item: { block: \"list_item\" },\n bullet_list: { block: \"bullet_list\", getAttrs: (_, tokens, i) => ({ tight: listIsTight(tokens, i) }) },\n ordered_list: { block: \"ordered_list\", getAttrs: (tok, tokens, i) => ({\n order: +tok.attrGet(\"start\") || 1,\n tight: listIsTight(tokens, i)\n }) },\n heading: { block: \"heading\", getAttrs: tok => ({ level: +tok.tag.slice(1) }) },\n code_block: { block: \"code_block\", noCloseToken: true },\n fence: { block: \"code_block\", getAttrs: tok => ({ params: tok.info || \"\" }), noCloseToken: true },\n hr: { node: \"horizontal_rule\" },\n image: { node: \"image\", getAttrs: tok => ({\n src: tok.attrGet(\"src\"),\n title: tok.attrGet(\"title\") || null,\n alt: tok.children[0] && tok.children[0].content || null\n }) },\n hardbreak: { node: \"hard_break\" },\n em: { mark: \"em\" },\n strong: { mark: \"strong\" },\n link: { mark: \"link\", getAttrs: tok => ({\n href: tok.attrGet(\"href\"),\n title: tok.attrGet(\"title\") || null\n }) },\n code_inline: { mark: \"code\", noCloseToken: true }\n});\n\nconst blankMark = { open: \"\", close: \"\", mixable: true };\n/**\nA specification for serializing a ProseMirror document as\nMarkdown/CommonMark text.\n*/\nclass MarkdownSerializer {\n /**\n Construct a serializer with the given configuration. The `nodes`\n object should map node names in a given schema to function that\n take a serializer state and such a node, and serialize the node.\n */\n constructor(\n /**\n The node serializer functions for this serializer.\n */\n nodes, \n /**\n The mark serializer info.\n */\n marks, options = {}) {\n this.nodes = nodes;\n this.marks = marks;\n this.options = options;\n }\n /**\n Serialize the content of the given node to\n [CommonMark](http://commonmark.org/).\n */\n serialize(content, options = {}) {\n options = Object.assign({}, this.options, options);\n let state = new MarkdownSerializerState(this.nodes, this.marks, options);\n state.renderContent(content);\n return state.out;\n }\n}\n/**\nA serializer for the [basic schema](https://prosemirror.net/docs/ref/#schema).\n*/\nconst defaultMarkdownSerializer = new MarkdownSerializer({\n blockquote(state, node) {\n state.wrapBlock(\"> \", null, node, () => state.renderContent(node));\n },\n code_block(state, node) {\n // Make sure the front matter fences are longer than any dash sequence within it\n const backticks = node.textContent.match(/`{3,}/gm);\n const fence = backticks ? (backticks.sort().slice(-1)[0] + \"`\") : \"```\";\n state.write(fence + (node.attrs.params || \"\") + \"\\n\");\n state.text(node.textContent, false);\n // Add a newline to the current content before adding closing marker\n state.write(\"\\n\");\n state.write(fence);\n state.closeBlock(node);\n },\n heading(state, node) {\n state.write(state.repeat(\"#\", node.attrs.level) + \" \");\n state.renderInline(node, false);\n state.closeBlock(node);\n },\n horizontal_rule(state, node) {\n state.write(node.attrs.markup || \"---\");\n state.closeBlock(node);\n },\n bullet_list(state, node) {\n state.renderList(node, \" \", () => (node.attrs.bullet || \"*\") + \" \");\n },\n ordered_list(state, node) {\n let start = node.attrs.order || 1;\n let maxW = String(start + node.childCount - 1).length;\n let space = state.repeat(\" \", maxW + 2);\n state.renderList(node, space, i => {\n let nStr = String(start + i);\n return state.repeat(\" \", maxW - nStr.length) + nStr + \". \";\n });\n },\n list_item(state, node) {\n state.renderContent(node);\n },\n paragraph(state, node) {\n state.renderInline(node);\n state.closeBlock(node);\n },\n image(state, node) {\n state.write(\"]/g, \"\\\\$&\") +\n (node.attrs.title ? ' \"' + node.attrs.title.replace(/\"/g, '\\\\\"') + '\"' : \"\") + \")\");\n },\n hard_break(state, node, parent, index) {\n for (let i = index + 1; i < parent.childCount; i++)\n if (parent.child(i).type != node.type) {\n state.write(\"\\\\\\n\");\n return;\n }\n },\n text(state, node) {\n state.text(node.text, !state.inAutolink);\n }\n}, {\n em: { open: \"*\", close: \"*\", mixable: true, expelEnclosingWhitespace: true },\n strong: { open: \"**\", close: \"**\", mixable: true, expelEnclosingWhitespace: true },\n link: {\n open(state, mark, parent, index) {\n state.inAutolink = isPlainURL(mark, parent, index);\n return state.inAutolink ? \"<\" : \"[\";\n },\n close(state, mark, parent, index) {\n let { inAutolink } = state;\n state.inAutolink = undefined;\n return inAutolink ? \">\"\n : \"](\" + mark.attrs.href.replace(/[\\(\\)\"]/g, \"\\\\$&\") + (mark.attrs.title ? ` \"${mark.attrs.title.replace(/\"/g, '\\\\\"')}\"` : \"\") + \")\";\n },\n mixable: true\n },\n code: { open(_state, _mark, parent, index) { return backticksFor(parent.child(index), -1); },\n close(_state, _mark, parent, index) { return backticksFor(parent.child(index - 1), 1); },\n escape: false }\n});\nfunction backticksFor(node, side) {\n let ticks = /`+/g, m, len = 0;\n if (node.isText)\n while (m = ticks.exec(node.text))\n len = Math.max(len, m[0].length);\n let result = len > 0 && side > 0 ? \" `\" : \"`\";\n for (let i = 0; i < len; i++)\n result += \"`\";\n if (len > 0 && side < 0)\n result += \" \";\n return result;\n}\nfunction isPlainURL(link, parent, index) {\n if (link.attrs.title || !/^\\w+:/.test(link.attrs.href))\n return false;\n let content = parent.child(index);\n if (!content.isText || content.text != link.attrs.href || content.marks[content.marks.length - 1] != link)\n return false;\n return index == parent.childCount - 1 || !link.isInSet(parent.child(index + 1).marks);\n}\n/**\nThis is an object used to track state and expose\nmethods related to markdown serialization. Instances are passed to\nnode and mark serialization methods (see `toMarkdown`).\n*/\nclass MarkdownSerializerState {\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n nodes, \n /**\n @internal\n */\n marks, \n /**\n The options passed to the serializer.\n */\n options) {\n this.nodes = nodes;\n this.marks = marks;\n this.options = options;\n /**\n @internal\n */\n this.delim = \"\";\n /**\n @internal\n */\n this.out = \"\";\n /**\n @internal\n */\n this.closed = null;\n /**\n @internal\n */\n this.inAutolink = undefined;\n /**\n @internal\n */\n this.atBlockStart = false;\n /**\n @internal\n */\n this.inTightList = false;\n if (typeof this.options.tightLists == \"undefined\")\n this.options.tightLists = false;\n if (typeof this.options.hardBreakNodeName == \"undefined\")\n this.options.hardBreakNodeName = \"hard_break\";\n }\n /**\n @internal\n */\n flushClose(size = 2) {\n if (this.closed) {\n if (!this.atBlank())\n this.out += \"\\n\";\n if (size > 1) {\n let delimMin = this.delim;\n let trim = /\\s+$/.exec(delimMin);\n if (trim)\n delimMin = delimMin.slice(0, delimMin.length - trim[0].length);\n for (let i = 1; i < size; i++)\n this.out += delimMin + \"\\n\";\n }\n this.closed = null;\n }\n }\n /**\n @internal\n */\n getMark(name) {\n let info = this.marks[name];\n if (!info) {\n if (this.options.strict !== false)\n throw new Error(`Mark type \\`${name}\\` not supported by Markdown renderer`);\n info = blankMark;\n }\n return info;\n }\n /**\n Render a block, prefixing each line with `delim`, and the first\n line in `firstDelim`. `node` should be the node that is closed at\n the end of the block, and `f` is a function that renders the\n content of the block.\n */\n wrapBlock(delim, firstDelim, node, f) {\n let old = this.delim;\n this.write(firstDelim != null ? firstDelim : delim);\n this.delim += delim;\n f();\n this.delim = old;\n this.closeBlock(node);\n }\n /**\n @internal\n */\n atBlank() {\n return /(^|\\n)$/.test(this.out);\n }\n /**\n Ensure the current content ends with a newline.\n */\n ensureNewLine() {\n if (!this.atBlank())\n this.out += \"\\n\";\n }\n /**\n Prepare the state for writing output (closing closed paragraphs,\n adding delimiters, and so on), and then optionally add content\n (unescaped) to the output.\n */\n write(content) {\n this.flushClose();\n if (this.delim && this.atBlank())\n this.out += this.delim;\n if (content)\n this.out += content;\n }\n /**\n Close the block for the given node.\n */\n closeBlock(node) {\n this.closed = node;\n }\n /**\n Add the given text to the document. When escape is not `false`,\n it will be escaped.\n */\n text(text, escape = true) {\n let lines = text.split(\"\\n\");\n for (let i = 0; i < lines.length; i++) {\n this.write();\n // Escape exclamation marks in front of links\n if (!escape && lines[i][0] == \"[\" && /(^|[^\\\\])\\!$/.test(this.out))\n this.out = this.out.slice(0, this.out.length - 1) + \"\\\\!\";\n this.out += escape ? this.esc(lines[i], this.atBlockStart) : lines[i];\n if (i != lines.length - 1)\n this.out += \"\\n\";\n }\n }\n /**\n Render the given node as a block.\n */\n render(node, parent, index) {\n if (this.nodes[node.type.name]) {\n this.nodes[node.type.name](this, node, parent, index);\n }\n else {\n if (this.options.strict !== false) {\n throw new Error(\"Token type `\" + node.type.name + \"` not supported by Markdown renderer\");\n }\n else if (!node.type.isLeaf) {\n if (node.type.inlineContent)\n this.renderInline(node);\n else\n this.renderContent(node);\n if (node.isBlock)\n this.closeBlock(node);\n }\n }\n }\n /**\n Render the contents of `parent` as block nodes.\n */\n renderContent(parent) {\n parent.forEach((node, _, i) => this.render(node, parent, i));\n }\n /**\n Render the contents of `parent` as inline content.\n */\n renderInline(parent, fromBlockStart = true) {\n this.atBlockStart = fromBlockStart;\n let active = [], trailing = \"\";\n let progress = (node, offset, index) => {\n let marks = node ? node.marks : [];\n // Remove marks from `hard_break` that are the last node inside\n // that mark to prevent parser edge cases with new lines just\n // before closing marks.\n if (node && node.type.name === this.options.hardBreakNodeName)\n marks = marks.filter(m => {\n if (index + 1 == parent.childCount)\n return false;\n let next = parent.child(index + 1);\n return m.isInSet(next.marks) && (!next.isText || /\\S/.test(next.text));\n });\n let leading = trailing;\n trailing = \"\";\n // If whitespace has to be expelled from the node, adjust\n // leading and trailing accordingly.\n if (node && node.isText && marks.some(mark => {\n let info = this.getMark(mark.type.name);\n return info && info.expelEnclosingWhitespace && !mark.isInSet(active);\n })) {\n let [_, lead, rest] = /^(\\s*)(.*)$/m.exec(node.text);\n if (lead) {\n leading += lead;\n node = rest ? node.withText(rest) : null;\n if (!node)\n marks = active;\n }\n }\n if (node && node.isText && marks.some(mark => {\n let info = this.getMark(mark.type.name);\n return info && info.expelEnclosingWhitespace &&\n (index == parent.childCount - 1 || !mark.isInSet(parent.child(index + 1).marks));\n })) {\n let [_, rest, trail] = /^(.*?)(\\s*)$/m.exec(node.text);\n if (trail) {\n trailing = trail;\n node = rest ? node.withText(rest) : null;\n if (!node)\n marks = active;\n }\n }\n let inner = marks.length ? marks[marks.length - 1] : null;\n let noEsc = inner && this.getMark(inner.type.name).escape === false;\n let len = marks.length - (noEsc ? 1 : 0);\n // Try to reorder 'mixable' marks, such as em and strong, which\n // in Markdown may be opened and closed in different order, so\n // that order of the marks for the token matches the order in\n // active.\n outer: for (let i = 0; i < len; i++) {\n let mark = marks[i];\n if (!this.getMark(mark.type.name).mixable)\n break;\n for (let j = 0; j < active.length; j++) {\n let other = active[j];\n if (!this.getMark(other.type.name).mixable)\n break;\n if (mark.eq(other)) {\n if (i > j)\n marks = marks.slice(0, j).concat(mark).concat(marks.slice(j, i)).concat(marks.slice(i + 1, len));\n else if (j > i)\n marks = marks.slice(0, i).concat(marks.slice(i + 1, j)).concat(mark).concat(marks.slice(j, len));\n continue outer;\n }\n }\n }\n // Find the prefix of the mark set that didn't change\n let keep = 0;\n while (keep < Math.min(active.length, len) && marks[keep].eq(active[keep]))\n ++keep;\n // Close the marks that need to be closed\n while (keep < active.length)\n this.text(this.markString(active.pop(), false, parent, index), false);\n // Output any previously expelled trailing whitespace outside the marks\n if (leading)\n this.text(leading);\n // Open the marks that need to be opened\n if (node) {\n while (active.length < len) {\n let add = marks[active.length];\n active.push(add);\n this.text(this.markString(add, true, parent, index), false);\n this.atBlockStart = false;\n }\n // Render the node. Special case code marks, since their content\n // may not be escaped.\n if (noEsc && node.isText)\n this.text(this.markString(inner, true, parent, index) + node.text +\n this.markString(inner, false, parent, index + 1), false);\n else\n this.render(node, parent, index);\n this.atBlockStart = false;\n }\n // After the first non-empty text node is rendered, the end of output\n // is no longer at block start.\n //\n // FIXME: If a non-text node writes something to the output for this\n // block, the end of output is also no longer at block start. But how\n // can we detect that?\n if ((node === null || node === void 0 ? void 0 : node.isText) && node.nodeSize > 0) {\n this.atBlockStart = false;\n }\n };\n parent.forEach(progress);\n progress(null, 0, parent.childCount);\n this.atBlockStart = false;\n }\n /**\n Render a node's content as a list. `delim` should be the extra\n indentation added to all lines except the first in an item,\n `firstDelim` is a function going from an item index to a\n delimiter for the first line of the item.\n */\n renderList(node, delim, firstDelim) {\n if (this.closed && this.closed.type == node.type)\n this.flushClose(3);\n else if (this.inTightList)\n this.flushClose(1);\n let isTight = typeof node.attrs.tight != \"undefined\" ? node.attrs.tight : this.options.tightLists;\n let prevTight = this.inTightList;\n this.inTightList = isTight;\n node.forEach((child, _, i) => {\n if (i && isTight)\n this.flushClose(1);\n this.wrapBlock(delim, firstDelim(i), node, () => this.render(child, node, i));\n });\n this.inTightList = prevTight;\n }\n /**\n Escape the given string so that it can safely appear in Markdown\n content. If `startOfLine` is true, also escape characters that\n have special meaning only at the start of the line.\n */\n esc(str, startOfLine = false) {\n str = str.replace(/[`*\\\\~\\[\\]_]/g, (m, i) => m == \"_\" && i > 0 && i + 1 < str.length && str[i - 1].match(/\\w/) && str[i + 1].match(/\\w/) ? m : \"\\\\\" + m);\n if (startOfLine)\n str = str.replace(/^(\\+[ ]|[\\-*>])/, \"\\\\$&\").replace(/^(\\s*)(#{1,6})(\\s|$)/, '$1\\\\$2$3').replace(/^(\\s*\\d+)\\.\\s/, \"$1\\\\. \");\n if (this.options.escapeExtraCharacters)\n str = str.replace(this.options.escapeExtraCharacters, \"\\\\$&\");\n return str;\n }\n /**\n @internal\n */\n quote(str) {\n let wrap = str.indexOf('\"') == -1 ? '\"\"' : str.indexOf(\"'\") == -1 ? \"''\" : \"()\";\n return wrap[0] + str + wrap[1];\n }\n /**\n Repeat the given string `n` times.\n */\n repeat(str, n) {\n let out = \"\";\n for (let i = 0; i < n; i++)\n out += str;\n return out;\n }\n /**\n Get the markdown string for a given opening or closing mark.\n */\n markString(mark, open, parent, index) {\n let info = this.getMark(mark.type.name);\n let value = open ? info.open : info.close;\n return typeof value == \"string\" ? value : value(this, mark, parent, index);\n }\n /**\n Get leading and trailing whitespace from a string. Values of\n leading or trailing property of the return object will be undefined\n if there is no match.\n */\n getEnclosingWhitespace(text) {\n return {\n leading: (text.match(/^(\\s+)/) || [undefined])[0],\n trailing: (text.match(/(\\s+)$/) || [undefined])[0]\n };\n }\n}\n\nexport { MarkdownParser, MarkdownSerializer, MarkdownSerializerState, defaultMarkdownParser, defaultMarkdownSerializer, schema };\n","// Process ^superscript^\n\n// same as UNESCAPE_MD_RE plus a space\nconst UNESCAPE_RE = /\\\\([ \\\\!\"#$%&'()*+,./:;<=>?@[\\]^_`{|}~-])/g\n\nfunction superscript (state, silent) {\n const max = state.posMax\n const start = state.pos\n\n if (state.src.charCodeAt(start) !== 0x5E/* ^ */) { return false }\n if (silent) { return false } // don't run any pairs in validation mode\n if (start + 2 >= max) { return false }\n\n state.pos = start + 1\n let found = false\n\n while (state.pos < max) {\n if (state.src.charCodeAt(state.pos) === 0x5E/* ^ */) {\n found = true\n break\n }\n\n state.md.inline.skipToken(state)\n }\n\n if (!found || start + 1 === state.pos) {\n state.pos = start\n return false\n }\n\n const content = state.src.slice(start + 1, state.pos)\n\n // don't allow unescaped spaces/newlines inside\n if (content.match(/(^|[^\\\\])(\\\\\\\\)*\\s/)) {\n state.pos = start\n return false\n }\n\n // found!\n state.posMax = state.pos\n state.pos = start + 1\n\n // Earlier we checked !silent, but this implementation does not need it\n const token_so = state.push('sup_open', 'sup', 1)\n token_so.markup = '^'\n\n const token_t = state.push('text', '', 0)\n token_t.content = content.replace(UNESCAPE_RE, '$1')\n\n const token_sc = state.push('sup_close', 'sup', -1)\n token_sc.markup = '^'\n\n state.pos = state.posMax + 1\n state.posMax = max\n return true\n}\n\nexport default function sup_plugin (md) {\n md.inline.ruler.after('emphasis', 'sup', superscript)\n};\n","import { undo, redo, history } from 'prosemirror-history';\nimport { Plugin, TextSelection, Selection, NodeSelection } from 'prosemirror-state';\nexport { EditorState, Selection } from 'prosemirror-state';\nimport { dropCursor } from 'prosemirror-dropcursor';\nimport { gapCursor } from 'prosemirror-gapcursor';\nimport { MenuItem, menuBar } from 'prosemirror-menu';\nimport { DecorationSet, Decoration } from 'prosemirror-view';\nexport { EditorView } from 'prosemirror-view';\nimport { InputRule, inputRules, wrappingInputRule, textblockTypeInputRule, undoInputRule } from 'prosemirror-inputrules';\nimport { Slice, Fragment, Schema } from 'prosemirror-model';\nimport { hasParentNodeOfType, safeInsert } from 'prosemirror-utils';\nimport * as baseListCommand from 'prosemirror-schema-list';\nimport { wrapInList, orderedList, bulletList, listItem } from 'prosemirror-schema-list';\nimport LinkifyIt from 'linkify-it';\nimport { chainCommands, deleteSelection, joinBackward, selectNodeBackward, toggleMark, exitCode, baseKeymap, joinUp, joinDown, selectParentNode, newlineInCode, createParagraphNear as createParagraphNear$1, liftEmptyBlock, splitBlock, setBlockType } from 'prosemirror-commands';\nimport { keymap } from 'prosemirror-keymap';\nimport MarkdownIt from 'markdown-it';\nimport { MarkdownParser, MarkdownSerializer, schema } from 'prosemirror-markdown';\nimport MarkdownItSup from 'markdown-it-sup';\n\nvar Placeholder = (placeholderText = '') => {\n return new Plugin({\n props: {\n decorations: state => {\n const decorations = [];\n const decorate = (node, pos) => {\n if (state.doc.content.size === 2) {\n decorations.push(Decoration.node(pos, pos + node.nodeSize, {\n class: 'empty-node',\n 'data-placeholder': placeholderText\n }));\n }\n };\n state.doc.descendants(decorate);\n return DecorationSet.create(state.doc, decorations);\n }\n }\n });\n};\n\n/**\n * Determine if a mark (with specific attribute values) exists anywhere in the selection.\n */\nconst markActive = (state, mark) => {\n const {\n from,\n to,\n empty\n } = state.selection;\n // When the selection is empty, only the active marks apply.\n if (empty) {\n return !!mark.isInSet(state.tr.storedMarks || state.selection.$from.marks());\n }\n // For a non-collapsed selection, the marks on the nodes matter.\n let found = false;\n state.doc.nodesBetween(from, to, node => {\n found = found || mark.isInSet(node.marks);\n });\n return found;\n};\nconst hasCode = (state, pos) => {\n const {\n code\n } = state.schema.marks;\n const node = pos >= 0 && state.doc.nodeAt(pos);\n if (node) {\n return !!node.marks.filter(mark => mark.type === code).length;\n }\n return false;\n};\nconst hasUnsupportedMarkForBlockInputRule = (state, start, end) => {\n const {\n doc,\n schema: {\n marks\n }\n } = state;\n let unsupportedMarksPresent = false;\n const isUnsupportedMark = node => node.type === marks.code || node.type === marks.link;\n doc.nodesBetween(start, end, node => {\n unsupportedMarksPresent = unsupportedMarksPresent || node.marks.filter(isUnsupportedMark).length > 0;\n });\n return unsupportedMarksPresent;\n};\nconst hasUnsupportedMarkForInputRule = (state, start, end) => {\n const {\n doc,\n schema: {\n marks\n }\n } = state;\n let unsupportedMarksPresent = false;\n const isCodemark = mark => mark.type === marks.code;\n doc.nodesBetween(start, end, node => {\n unsupportedMarksPresent = unsupportedMarksPresent || node.marks.filter(isCodemark).length > 0;\n });\n return unsupportedMarksPresent;\n};\nfunction defaultInputRuleHandler(inputRule, isBlockNodeRule = false) {\n const originalHandler = inputRule.handler;\n inputRule.handler = (state, match, start, end) => {\n // Skip any input rule inside code\n // https://product-fabric.atlassian.net/wiki/spaces/E/pages/37945345/Editor+content+feature+rules#Editorcontent/featurerules-Rawtextblocks\n const unsupportedMarks = isBlockNodeRule ? hasUnsupportedMarkForBlockInputRule(state, start, end) : hasUnsupportedMarkForInputRule(state, start, end);\n if (state.selection.$from.parent.type.spec.code || unsupportedMarks) {\n return;\n }\n return originalHandler(state, match, start, end);\n };\n return inputRule;\n}\nconst createInputRule$1 = (match, handler, isBlockNodeRule = false) => defaultInputRuleHandler(new InputRule(match, handler), isBlockNodeRule);\n\n// ProseMirror uses the Unicode Character 'OBJECT REPLACEMENT CHARACTER' (U+FFFC) as text representation for\n// leaf nodes, i.e. nodes that don't have any content or text property (e.g. hardBreak, emoji, mention, rule)\n// It was introduced because of https://github.com/ProseMirror/prosemirror/issues/262\n// This can be used in an input rule regex to be able to include or exclude such nodes.\nconst leafNodeReplacementCharacter = '\\ufffc';\n\n/**\n * Returns false if node contains only empty inline nodes and hardBreaks.\n */\nfunction hasVisibleContent(node) {\n const isInlineNodeHasVisibleContent = inlineNode => {\n return inlineNode.isText ? !!inlineNode.textContent.trim() : inlineNode.type.name !== 'hardBreak';\n };\n if (node.isInline) {\n return isInlineNodeHasVisibleContent(node);\n } else if (node.isBlock && (node.isLeaf || node.isAtom)) {\n return true;\n } else if (!node.childCount) {\n return false;\n }\n for (let index = 0; index < node.childCount; index++) {\n const child = node.child(index);\n if (hasVisibleContent(child)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Checks if node is an empty paragraph.\n */\nfunction isEmptyParagraph(node) {\n return !node || node.type.name === 'paragraph' && !node.textContent && !node.childCount;\n}\n\n/**\n * Checks if a node has any content. Ignores node that only contain empty block nodes.\n */\nfunction isNodeEmpty(node) {\n if (node && node.textContent) {\n return false;\n }\n if (!node || !node.childCount || node.childCount === 1 && isEmptyParagraph(node.firstChild)) {\n return true;\n }\n const block = [];\n const nonBlock = [];\n node.forEach(child => {\n child.isInline ? nonBlock.push(child) : block.push(child);\n });\n return !nonBlock.length && !block.filter(childNode => !!childNode.childCount && !(childNode.childCount === 1 && isEmptyParagraph(childNode.firstChild)) || childNode.isAtom).length;\n}\nconst compose = (...functions) => args => functions.reduceRight((arg, fn) => fn(arg), args);\n\n/**\n * A helper to get the underlying array of a fragment.\n */\nfunction getFragmentBackingArray(fragment) {\n return fragment.content;\n}\nfunction mapFragment(content, callback, parent) {\n const children = [];\n for (let i = 0, size = content.childCount; i < size; i++) {\n const node = content.child(i);\n const transformed = node.isLeaf ? callback(node, parent, i) : callback(node.copy(mapFragment(node.content, callback, node)), parent, i);\n if (transformed) {\n if (transformed) {\n children.push(...getFragmentBackingArray(transformed));\n } else if (Array.isArray(transformed)) {\n children.push(...transformed);\n } else {\n children.push(transformed);\n }\n }\n }\n return Fragment.fromArray(children);\n}\nfunction mapSlice(slice, callback) {\n const fragment = mapFragment(slice.content, callback);\n return new Slice(fragment, slice.openStart, slice.openEnd);\n}\nfunction atTheEndOfDoc(state) {\n const {\n selection,\n doc\n } = state;\n return doc.nodeSize - selection.$to.pos - 2 === selection.$to.depth;\n}\nfunction canMoveDown(state) {\n const {\n selection\n } = state;\n if (selection instanceof TextSelection) {\n if (!selection.empty) {\n return true;\n }\n }\n return !atTheEndOfDoc(state);\n}\nfunction atTheBeginningOfDoc(state) {\n const {\n selection\n } = state;\n return selection.$from.pos === selection.$from.depth;\n}\nfunction canMoveUp(state) {\n const {\n selection\n } = state;\n if (selection instanceof TextSelection) {\n if (!selection.empty) {\n return true;\n }\n }\n return !atTheBeginningOfDoc(state);\n}\n\nconst maxIndentation = 3;\nfunction createInputRule(regexp, nodeType) {\n return wrappingInputRule(regexp, nodeType, {}, (_, node) => node.type === nodeType);\n}\nconst insertList = (state, listType, listTypeName, start, end) => {\n // To ensure that match is done after HardBreak.\n const {\n hardBreak\n } = state.schema.nodes;\n if (state.doc.resolve(start).nodeAfter.type !== hardBreak) {\n return null;\n }\n\n // To ensure no nesting is done.\n if (state.doc.resolve(start).depth > 1) {\n return null;\n }\n\n // Split at the start of autoformatting and delete formatting characters.\n let tr = state.tr.delete(start, end).split(start);\n\n // If node has more content split at the end of autoformatting.\n let currentNode = tr.doc.nodeAt(start + 1);\n tr.doc.nodesBetween(start, start + currentNode.nodeSize, (node, pos) => {\n if (node.type === hardBreak) {\n tr = tr.split(pos + 1).delete(pos, pos + 1);\n }\n });\n\n // Wrap content in list node\n const {\n list_item\n } = state.schema.nodes;\n const position = tr.doc.resolve(start + 2);\n let range = position.blockRange(position);\n tr = tr.wrap(range, [{\n type: listType\n }, {\n type: list_item\n }]);\n return tr;\n};\n\n/**\n * Create input rules for bullet list node\n *\n * @param {Schema} schema\n * @returns {InputRule[]}\n */\nfunction getBulletListInputRules(schema) {\n const asteriskRule = createInputRule(/^\\s*([\\*\\-]) $/, schema.nodes['bullet_list']);\n const leafNodeAsteriskRule = createInputRule$1(new RegExp(`${leafNodeReplacementCharacter}\\\\s*([\\\\*\\\\-]) $`), (state, _match, start, end) => {\n return insertList(state, schema.nodes['bullet_list'], 'bullet', start, end);\n }, true);\n return [asteriskRule, leafNodeAsteriskRule];\n}\n\n/**\n * Create input rules for strong mark\n *\n * @param {Schema} schema\n * @returns {InputRule[]}\n */\nfunction getOrderedListInputRules(schema) {\n // NOTE: There is a built in input rule for ordered lists in ProseMirror. However, that\n // input rule will allow for a list to start at any given number, which isn't allowed in\n // markdown (where a ordered list will always start on 1). This is a slightly modified\n // version of that input rule.\n const numberOneRule = createInputRule(/^(1)[\\.\\)] $/, schema.nodes['ordered_list']);\n const leafNodeNumberOneRule = createInputRule$1(new RegExp(`${leafNodeReplacementCharacter}(1)[\\\\.\\\\)] $`), (state, _match, start, end) => {\n return insertList(state, schema.nodes['ordered_list'], 'numbered', start, end);\n }, true);\n return [numberOneRule, leafNodeNumberOneRule];\n}\nfunction listInputRules(schema) {\n const rules = [];\n if (schema.nodes['bullet_list']) {\n rules.push(...getBulletListInputRules(schema));\n }\n if (schema.nodes['ordered_list']) {\n rules.push(...getOrderedListInputRules(schema));\n }\n if (rules.length !== 0) {\n return inputRules({\n rules\n });\n }\n return;\n}\nconst isInsideListItem = state => {\n const {\n $from\n } = state.selection;\n const {\n list_item,\n paragraph\n } = state.schema.nodes;\n return hasParentNodeOfType(list_item)(state.selection) && $from.parent.type === paragraph;\n};\n\n// Returns the number of nested lists that are ancestors of the given selection\nconst numberNestedLists = (resolvedPos, nodes) => {\n const {\n bullet_list,\n ordered_list\n } = nodes;\n let count = 0;\n for (let i = resolvedPos.depth - 1; i > 0; i--) {\n const node = resolvedPos.node(i);\n if (node.type === bullet_list || node.type === ordered_list) {\n count += 1;\n }\n }\n return count;\n};\n\n/**\n * Merge closest bullet list blocks into one\n *\n * @param {NodeType} listItem\n * @param {NodeRange} range\n * @returns\n */\nfunction mergeLists(listItem, range) {\n return command => {\n return (state, dispatch) => command(state, tr => {\n const $start = state.doc.resolve(range.start);\n const $end = state.doc.resolve(range.end);\n const $join = tr.doc.resolve(tr.mapping.map(range.end - 1));\n if ($join.nodeBefore && $join.nodeAfter && $join.nodeBefore.type === $join.nodeAfter.type) {\n if ($end.nodeAfter && $end.nodeAfter.type === listItem && $end.parent.type === $start.parent.type) {\n tr.join($join.pos);\n }\n }\n if (dispatch) {\n dispatch(tr.scrollIntoView());\n }\n });\n };\n}\nfunction outdentList() {\n return function (state, dispatch) {\n const {\n list_item\n } = state.schema.nodes;\n const {\n $from,\n $to\n } = state.selection;\n if (isInsideListItem(state)) {\n let range = $from.blockRange($to, node => node.childCount > 0 && node.firstChild.type === list_item);\n if (!range) {\n return false;\n }\n return compose(mergeLists(list_item, range),\n // 2. Check if I need to merge nearest list\n baseListCommand.liftListItem // 1. First lift list item\n )(list_item)(state, dispatch);\n }\n return false;\n };\n}\nfunction splitListItem(itemType) {\n return function (state, dispatch) {\n const ref = state.selection;\n const $from = ref.$from;\n const $to = ref.$to;\n const node = ref.node;\n if (node && node.isBlock || $from.depth < 2 || !$from.sameParent($to)) {\n return false;\n }\n const grandParent = $from.node(-1);\n if (grandParent.type !== itemType) {\n return false;\n }\n if (grandParent.content.content.length <= 1 && $from.parent.content.size === 0 && !(grandParent.content.size === 0)) {\n // In an empty block. If this is a nested list, the wrapping\n // list item should be split. Otherwise, bail out and let next\n // command handle lifting.\n if ($from.depth === 2 || $from.node(-3).type !== itemType || $from.index(-2) !== $from.node(-2).childCount - 1) {\n return false;\n }\n if (dispatch) {\n let wrap = Fragment.empty;\n const keepItem = $from.index(-1) > 0;\n // Build a fragment containing empty versions of the structure\n // from the outer list item to the parent node of the cursor\n for (let d = $from.depth - (keepItem ? 1 : 2); d >= $from.depth - 3; d--) {\n wrap = Fragment.from($from.node(d).copy(wrap));\n }\n // Add a second list item with an empty default start node\n wrap = wrap.append(Fragment.from(itemType.createAndFill()));\n const tr$1 = state.tr.replace($from.before(keepItem ? undefined : -1), $from.after(-3), new Slice(wrap, keepItem ? 3 : 2, 2));\n tr$1.setSelection(state.selection.constructor.near(tr$1.doc.resolve($from.pos + (keepItem ? 3 : 2))));\n dispatch(tr$1.scrollIntoView());\n }\n return true;\n }\n const nextType = $to.pos === $from.end() ? grandParent.contentMatchAt(0).defaultType : undefined;\n const tr = state.tr.delete($from.pos, $to.pos);\n const types = nextType && [undefined, {\n type: nextType\n }];\n if (dispatch) {\n dispatch(tr.split($from.pos, 2, types).scrollIntoView());\n }\n return true;\n };\n}\nconst enterKeyOnListCommand = (state, dispatch) => {\n const {\n selection\n } = state;\n if (selection.empty) {\n const {\n $from\n } = selection;\n const {\n list_item\n } = state.schema.nodes;\n const node = $from.node($from.depth);\n const wrapper = $from.node($from.depth - 1);\n if (wrapper && wrapper.type === list_item) {\n /** Check if the wrapper has any visible content */\n const wrapperHasContent = hasVisibleContent(wrapper);\n if (isNodeEmpty(node) && !wrapperHasContent) {\n return outdentList()(state, dispatch);\n } else {\n return splitListItem(list_item)(state, dispatch);\n }\n }\n }\n return false;\n};\n\n/**\n * Check if we can sink the list.\n *\n * @param {number} initialIndentationLevel\n * @param {EditorState} state\n * @returns {boolean} - true if we can sink the list\n * - false if we reach the max indentation level\n */\nfunction canSink(initialIndentationLevel, state) {\n /*\n - Keep going forward in document until indentation of the node is < than the initial\n - If indentation is EVER > max indentation, return true and don't sink the list\n */\n let currentIndentationLevel;\n let currentPos = state.tr.selection.$to.pos;\n do {\n const resolvedPos = state.doc.resolve(currentPos);\n currentIndentationLevel = numberNestedLists(resolvedPos, state.schema.nodes);\n if (currentIndentationLevel > maxIndentation) {\n // Cancel sink list.\n // If current indentation less than the initial, it won't be\n // larger than the max, and the loop will terminate at end of this iteration\n return false;\n }\n currentPos++;\n } while (currentIndentationLevel >= initialIndentationLevel);\n return true;\n}\nfunction indentList() {\n return function (state, dispatch) {\n const {\n list_item\n } = state.schema.nodes;\n if (isInsideListItem(state)) {\n // Record initial list indentation\n const initialIndentationLevel = numberNestedLists(state.selection.$from, state.schema.nodes);\n if (canSink(initialIndentationLevel, state)) {\n baseListCommand.sinkListItem(list_item)(state, dispatch);\n }\n return true;\n }\n return false;\n };\n}\n\n// This is a copy of the linkify-it regex, passing `undefined` for the schema\n// will use the default regex.\nconst linkify = new LinkifyIt(undefined, {\n fuzzyLink: false\n});\nlinkify.add('sourcetree:', 'http:');\nconst tlds = 'app|biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|');\nconst tlds2Char = 'a[cdefgilmnoqrtuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrtuvwxyz]|n[acefgilopruz]|om|p[aefghkmnrtw]|qa|r[eosuw]|s[abcdegijklmnrtuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\ntlds.push(tlds2Char);\nlinkify.tlds(tlds, false);\nfunction createLinkInputRule(regexp) {\n // Plain typed text (eg, typing 'www.google.com') should convert to a hyperlink\n return createInputRule$1(regexp, (state, match, start, end) => {\n const {\n schema\n } = state;\n if (state.doc.rangeHasMark(start, end, schema.marks.link)) {\n return null;\n }\n const [link] = match;\n const url = normalizeUrl(link.url);\n const markType = schema.mark('link', {\n href: url\n });\n return state.tr.addMark(start - (link.input.length - link.lastIndex), end - (link.input.length - link.lastIndex), markType).insertText(' ');\n });\n}\nclass LinkMatcher {\n exec(str) {\n if (str.endsWith(' ')) {\n const chunks = str.slice(0, str.length - 1).split(' ');\n const lastChunk = chunks[chunks.length - 1];\n const links = linkify.match(lastChunk);\n if (links && links.length > 0) {\n const lastLink = links[links.length - 1];\n lastLink.input = lastChunk;\n lastLink.length = lastLink.lastIndex - lastLink.index + 1;\n return [lastLink];\n }\n }\n return null;\n }\n}\nconst whitelistedURLPatterns = [/^https?:\\/\\//im, /^ftps?:\\/\\//im, /^\\//im, /^mailto:/im, /^skype:/im, /^callto:/im, /^facetime:/im, /^git:/im, /^irc6?:/im, /^news:/im, /^nntp:/im, /^feed:/im, /^cvs:/im, /^svn:/im, /^mvn:/im, /^ssh:/im, /^scp:\\/\\//im, /^sftp:\\/\\//im, /^itms:/im, /^notes:/im, /^hipchat:\\/\\//im, /^sourcetree:/im, /^urn:/im, /^tel:/im, /^xmpp:/im, /^telnet:/im, /^vnc:/im, /^rdp:/im, /^whatsapp:/im, /^slack:/im, /^sips?:/im, /^magnet:/im];\nconst isSafeUrl = url => {\n return whitelistedURLPatterns.some(p => p.test(url.trim()) === true);\n};\nfunction getLinkMatch(str) {\n const match = str && linkify.match(str);\n return match && match[0];\n}\n\n/**\n * Adds protocol to url if needed.\n */\nfunction normalizeUrl(url) {\n if (!url) {\n return '';\n }\n if (isSafeUrl(url)) {\n return url;\n }\n const match = getLinkMatch(url);\n return match && match.url || '';\n}\nfunction linksInputRules(schema) {\n if (!schema.marks.link) {\n return;\n }\n const urlWithASpaceRule = createLinkInputRule(new LinkMatcher());\n\n // [something](link) should convert to a hyperlink\n const markdownLinkRule = createInputRule$1(/(^|[^!])\\[(.*?)\\]\\((\\S+)\\)$/, (state, match, start, end) => {\n const {\n schema\n } = state;\n const [, prefix, linkText, linkUrl] = match;\n const url = normalizeUrl(linkUrl);\n const markType = schema.mark('link', {\n href: url\n });\n return state.tr.replaceWith(start + prefix.length, end, schema.text(linkText, [markType]));\n });\n return inputRules({\n rules: [urlWithASpaceRule, markdownLinkRule]\n });\n}\n\nconst applyMarkOnRange = (from, to, removeMark, mark, tr) => {\n // const { schema } = tr.doc.type;\n // const { code } = schema.marks;\n // if (mark.type === code) {\n // // When turning to code we need to flat some special characters\n // import { transformSmartCharsMentionsAndEmojis } from '../plugins/text-formatting/commands/transform-to-code';\n // transformSmartCharsMentionsAndEmojis(from, to, tr);\n // }\n\n tr.doc.nodesBetween(tr.mapping.map(from), tr.mapping.map(to), (node, pos) => {\n if (!node.isText) {\n return true;\n }\n\n // This is an issue when the user selects some text.\n // We need to check if the current node position is less than the range selection from.\n // If it’s true, that means we should apply the mark using the range selection,\n // not the current node position.\n const nodeBetweenFrom = Math.max(pos, tr.mapping.map(from));\n const nodeBetweenTo = Math.min(pos + node.nodeSize, tr.mapping.map(to));\n {\n tr.addMark(nodeBetweenFrom, nodeBetweenTo, mark);\n }\n return true;\n });\n return tr;\n};\nconst moveRight = () => {\n return (state, dispatch) => {\n const {\n code\n } = state.schema.marks;\n const {\n empty,\n $cursor\n } = state.selection;\n if (!empty || !$cursor) {\n return false;\n }\n const {\n storedMarks\n } = state.tr;\n if (code) {\n const insideCode = markActive(state, code.create());\n const currentPosHasCode = state.doc.rangeHasMark($cursor.pos, $cursor.pos, code);\n const nextPosHasCode = state.doc.rangeHasMark($cursor.pos, $cursor.pos + 1, code);\n const exitingCode = !currentPosHasCode && !nextPosHasCode && (!storedMarks || !!storedMarks.length);\n const enteringCode = !currentPosHasCode && nextPosHasCode && (!storedMarks || !storedMarks.length);\n\n // entering code mark (from the left edge): don't move the cursor, just add the mark\n if (!insideCode && enteringCode) {\n if (dispatch) {\n dispatch(state.tr.addStoredMark(code.create()));\n }\n return true;\n }\n\n // exiting code mark: don't move the cursor, just remove the mark\n if (insideCode && exitingCode) {\n if (dispatch) {\n dispatch(state.tr.removeStoredMark(code));\n }\n return true;\n }\n }\n return false;\n };\n};\nconst moveLeft = () => {\n return (state, dispatch) => {\n const {\n code\n } = state.schema.marks;\n const {\n empty,\n $cursor\n } = state.selection;\n if (!empty || !$cursor) {\n return false;\n }\n const {\n storedMarks\n } = state.tr;\n if (code) {\n const insideCode = code && markActive(state, code.create());\n const currentPosHasCode = hasCode(state, $cursor.pos);\n const nextPosHasCode = hasCode(state, $cursor.pos - 1);\n const nextNextPosHasCode = hasCode(state, $cursor.pos - 2);\n const exitingCode = currentPosHasCode && !nextPosHasCode && Array.isArray(storedMarks);\n const atLeftEdge = nextPosHasCode && !nextNextPosHasCode && (storedMarks === null || Array.isArray(storedMarks) && !!storedMarks.length);\n const atRightEdge = (exitingCode && Array.isArray(storedMarks) && !storedMarks.length || !exitingCode && storedMarks === null) && !nextPosHasCode && nextNextPosHasCode;\n const enteringCode = !currentPosHasCode && nextPosHasCode && Array.isArray(storedMarks) && !storedMarks.length;\n\n // at the right edge: remove code mark and move the cursor to the left\n if (!insideCode && atRightEdge) {\n const tr = state.tr.setSelection(Selection.near(state.doc.resolve($cursor.pos - 1)));\n if (dispatch) {\n dispatch(tr.removeStoredMark(code));\n }\n return true;\n }\n\n // entering code mark (from right edge): don't move the cursor, just add the mark\n if (!insideCode && enteringCode) {\n if (dispatch) {\n dispatch(state.tr.addStoredMark(code.create()));\n }\n return true;\n }\n\n // at the left edge: add code mark and move the cursor to the left\n if (insideCode && atLeftEdge) {\n const tr = state.tr.setSelection(Selection.near(state.doc.resolve($cursor.pos - 1)));\n if (dispatch) {\n dispatch(tr.addStoredMark(code.create()));\n }\n return true;\n }\n\n // exiting code mark (or at the beginning of the line): don't move the cursor, just remove the mark\n const isFirstChild = $cursor.index($cursor.depth - 1) === 0;\n if (insideCode && (exitingCode || !$cursor.nodeBefore && isFirstChild)) {\n if (dispatch) {\n dispatch(state.tr.removeStoredMark(code));\n }\n return true;\n }\n }\n return false;\n };\n};\nconst insertBlock = (state, nodeType, nodeName, start, end, attrs) => {\n // To ensure that match is done after HardBreak.\n const {\n hard_break: hardBreak,\n code_block: codeBlock,\n list_item: listItem\n } = state.schema.nodes;\n const $pos = state.doc.resolve(start);\n if ($pos.nodeAfter.type !== hardBreak) {\n return null;\n }\n\n // To ensure no nesting is done. (unless we're inserting a codeBlock inside lists)\n if ($pos.depth > 1 && !(nodeType === codeBlock && hasParentNodeOfType(listItem)(state.selection))) {\n return null;\n }\n\n // Split at the start of autoformatting and delete formatting characters.\n let tr = state.tr.delete(start, end).split(start);\n let currentNode = tr.doc.nodeAt(start + 1);\n\n // If node has more content split at the end of autoformatting.\n let nodeHasMoreContent = false;\n tr.doc.nodesBetween(start, start + currentNode.nodeSize, (node, pos) => {\n if (!nodeHasMoreContent && node.type === hardBreak) {\n nodeHasMoreContent = true;\n tr = tr.split(pos + 1).delete(pos, pos + 1);\n }\n });\n if (nodeHasMoreContent) {\n currentNode = tr.doc.nodeAt(start + 1);\n }\n\n // Create new node and fill with content of current node.\n const {\n blockquote,\n paragraph\n } = state.schema.nodes;\n let content;\n let depth;\n if (nodeType === blockquote) {\n depth = 3;\n content = [paragraph.create({}, currentNode.content)];\n } else {\n depth = 2;\n content = currentNode.content;\n }\n const newNode = nodeType.create(attrs, content);\n\n // Add new node.\n tr = tr.setSelection(new NodeSelection(tr.doc.resolve(start + 1))).replaceSelectionWith(newNode).setSelection(new TextSelection(tr.doc.resolve(start + depth)));\n return tr;\n};\nfunction transformToCodeBlockAction(state, attrs) {\n if (!state.selection.empty) {\n // Don't do anything, if there is something selected\n return state.tr;\n }\n const codeBlock = state.schema.nodes.code_block;\n const startOfCodeBlockText = state.selection.$from;\n const parentPos = startOfCodeBlockText.before();\n const end = startOfCodeBlockText.end();\n const codeBlockSlice = mapSlice(state.doc.slice(startOfCodeBlockText.pos, end), node => {\n if (node.type === state.schema.nodes.hard_break) {\n return state.schema.text('\\n');\n }\n if (node.isText) {\n return node.mark([]);\n } else if (node.isInline) {\n return node.attrs.text ? state.schema.text(node.attrs.text) : null;\n } else {\n return node.content.childCount ? node.content : null;\n }\n });\n const tr = state.tr.replaceRange(startOfCodeBlockText.pos, end, codeBlockSlice);\n // If our offset isnt at 3 (backticks) at the start of line, cater for content.\n if (startOfCodeBlockText.parentOffset >= 3) {\n return tr.split(startOfCodeBlockText.pos, undefined, [{\n type: codeBlock,\n attrs\n }]);\n }\n // TODO: Check parent node for valid code block marks, ATM It's not necessary because code block doesn't have any valid mark.\n const codeBlockMarks = [];\n return tr.setNodeMarkup(parentPos, codeBlock, attrs, codeBlockMarks);\n}\nfunction isConvertableToCodeBlock(state) {\n // Before a document is loaded, there is no selection.\n if (!state.selection) {\n return false;\n }\n const {\n $from\n } = state.selection;\n const node = $from.parent;\n if (!node.isTextblock || node.type === state.schema.nodes.code_block) {\n return false;\n }\n const parentDepth = $from.depth - 1;\n const parentNode = $from.node(parentDepth);\n const index = $from.index(parentDepth);\n return parentNode.canReplaceWith(index, index + 1, state.schema.nodes.code_block);\n}\nconst cleanUpAtTheStartOfDocument = (state, dispatch) => {\n const {\n $cursor\n } = state.selection;\n if ($cursor && !$cursor.nodeBefore && !$cursor.nodeAfter && $cursor.pos === 1) {\n const {\n tr,\n schema\n } = state;\n const {\n paragraph\n } = schema.nodes;\n const {\n parent\n } = $cursor;\n\n /**\n * Use cases:\n * 1. Change `heading` to `paragraph`\n * 2. Remove block marks\n *\n * NOTE: We already know it's an empty doc so it's safe to use 0\n */\n tr.setNodeMarkup(0, paragraph, parent.attrs, []);\n if (dispatch) {\n dispatch(tr);\n }\n return true;\n }\n return false;\n};\nfunction canCreateParagraphNear(state) {\n const {\n selection: {\n $from\n }\n } = state;\n const node = $from.node($from.depth);\n const insideCodeBlock = !!node && node.type === state.schema.nodes.code_block;\n const isNodeSelection = state.selection instanceof NodeSelection;\n return $from.depth > 1 || isNodeSelection || insideCodeBlock;\n}\nconst createNewParagraphBelow = (state, dispatch) => {\n const append = true;\n if (!canMoveDown(state) && canCreateParagraphNear(state)) {\n createParagraphNear(append)(state, dispatch);\n return true;\n }\n return false;\n};\nconst createNewParagraphAbove = (state, dispatch) => {\n const append = false;\n if (!canMoveUp(state) && canCreateParagraphNear(state)) {\n createParagraphNear(append)(state, dispatch);\n return true;\n }\n return false;\n};\nfunction topLevelNodeIsEmptyTextBlock(state) {\n const topLevelNode = state.selection.$from.node(1);\n return topLevelNode.isTextblock && topLevelNode.type !== state.schema.nodes.code_block && topLevelNode.nodeSize === 2;\n}\nfunction getInsertPosFromTextBlock(state, append) {\n const {\n $from,\n $to\n } = state.selection;\n let pos;\n if (!append) {\n pos = $from.start(0);\n } else {\n pos = $to.end(0);\n }\n return pos;\n}\nfunction getInsertPosFromNonTextBlock(state, append) {\n const {\n $from,\n $to\n } = state.selection;\n let pos;\n if (!append) {\n // The start position is different with text block because it starts from 0\n pos = $from.start($from.depth);\n // The depth is different with text block because it starts from 0\n pos = $from.depth > 0 ? pos - 1 : pos;\n } else {\n pos = $to.end($to.depth);\n pos = $to.depth > 0 ? pos + 1 : pos;\n }\n return pos;\n}\nfunction createParagraphNear(append = true) {\n return function (state, dispatch) {\n const paragraph = state.schema.nodes.paragraph;\n if (!paragraph) {\n return false;\n }\n let insertPos;\n if (state.selection instanceof TextSelection) {\n if (topLevelNodeIsEmptyTextBlock(state)) {\n return false;\n }\n insertPos = getInsertPosFromTextBlock(state, append);\n } else {\n insertPos = getInsertPosFromNonTextBlock(state, append);\n }\n const tr = state.tr.insert(insertPos, paragraph.createAndFill());\n tr.setSelection(TextSelection.create(tr.doc, insertPos + 1));\n if (dispatch) {\n dispatch(tr);\n }\n return true;\n };\n}\n\nconst MAX_HEADING_LEVEL = 6;\nfunction getHeadingLevel(match) {\n return {\n level: match[1].length\n };\n}\nfunction headingRule(nodeType, maxLevel) {\n return textblockTypeInputRule(new RegExp('^(#{1,' + maxLevel + '})\\\\s$'), nodeType, getHeadingLevel);\n}\nfunction blockQuoteRule(nodeType) {\n return wrappingInputRule(/^\\s*>\\s$/, nodeType);\n}\n\n/**\n * Get heading rules\n *\n * @param {Schema} schema\n * @returns {}\n */\nfunction getHeadingRules(schema) {\n // '# ' for h1, '## ' for h2 and etc\n const hashRule = defaultInputRuleHandler(headingRule(schema.nodes.heading, MAX_HEADING_LEVEL), true);\n const leftNodeReplacementHashRule = createInputRule$1(new RegExp(`${leafNodeReplacementCharacter}(#{1,6})\\\\s$`), (state, match, start, end) => {\n const level = match[1].length;\n return insertBlock(state, schema.nodes.heading, `heading${level}`, start, end, {\n level\n });\n }, true);\n return [hashRule, leftNodeReplacementHashRule];\n}\n\n/**\n * Get all block quote input rules\n *\n * @param {Schema} schema\n * @returns {}\n */\nfunction getBlockQuoteRules(schema) {\n // '> ' for blockquote\n const greatherThanRule = defaultInputRuleHandler(blockQuoteRule(schema.nodes.blockquote), true);\n const leftNodeReplacementGreatherRule = createInputRule$1(new RegExp(`${leafNodeReplacementCharacter}\\\\s*>\\\\s$`), (state, _match, start, end) => {\n return insertBlock(state, schema.nodes.blockquote, 'blockquote', start, end);\n }, true);\n return [greatherThanRule, leftNodeReplacementGreatherRule];\n}\n\n/**\n * Get all code block input rules\n *\n * @param {Schema} schema\n * @returns {}\n */\nfunction getCodeBlockRules(schema) {\n const threeTildeRule = createInputRule$1(/((^`{3,})|(\\s`{3,}))(\\S*)$/, (state, match, start, end) => {\n const attributes = {};\n if (match[4]) {\n attributes.language = match[4];\n }\n const newStart = match[0][0] === ' ' ? start + 1 : start;\n if (isConvertableToCodeBlock(state)) {\n const tr = transformToCodeBlockAction(state, attributes)\n // remove markdown decorator ```\n .delete(newStart, end).scrollIntoView();\n return tr;\n }\n let {\n tr\n } = state;\n tr = tr.delete(newStart, end);\n const codeBlock = state.schema.nodes.code_block.createChecked();\n return safeInsert(codeBlock)(tr);\n }, true);\n const leftNodeReplacementThreeTildeRule = createInputRule$1(new RegExp(`((${leafNodeReplacementCharacter}\\`{3,})|(\\\\s\\`{3,}))(\\\\S*)$`), (state, match, start, end) => {\n const attributes = {};\n if (match[4]) {\n attributes.language = match[4];\n }\n let tr = insertBlock(state, schema.nodes.code_block, 'codeblock', start, end, attributes);\n return tr;\n }, true);\n return [threeTildeRule, leftNodeReplacementThreeTildeRule];\n}\nfunction blocksInputRule(schema) {\n const rules = [];\n if (schema.nodes.heading) {\n rules.push(...getHeadingRules(schema));\n }\n if (schema.nodes.blockquote) {\n rules.push(...getBlockQuoteRules(schema));\n }\n if (schema.nodes.code_block) {\n rules.push(...getCodeBlockRules(schema));\n }\n if (rules.length !== 0) {\n return inputRules({\n rules\n });\n }\n return;\n}\n\nfunction createHorizontalRuleInputRule(type) {\n return createInputRule$1(/^(?:---|___|\\*\\*\\*)\\s$/,\n // Ensures rule is triggered with space after \"---\", \"___\", or \"***\"\n (state, match, start, end) => {\n if (!match[0]) {\n return null; // If no match found, return null\n }\n\n // Deletes the matched sequence including the space\n let tr = state.tr.delete(start, end);\n const hrPos = start; // Position where the horizontal rule should be inserted\n\n // Insert the horizontal rule at the position\n tr = safeInsert(type.create(), hrPos)(tr);\n\n // Insert a paragraph node after the horizontal rule\n tr = safeInsert(state.schema.nodes.paragraph.create(), tr.mapping.map(hrPos + 1))(tr);\n return tr;\n });\n}\nfunction hrInputRules(schema) {\n if (!schema.nodes.horizontal_rule) {\n // Ensures that horizontal_rule is part of the schema\n return inputRules({\n rules: []\n });\n }\n const hrRule = createHorizontalRuleInputRule(schema.nodes.horizontal_rule);\n return inputRules({\n rules: [hrRule]\n });\n}\n\nconst mac = typeof navigator !== 'undefined' ? /Mac/.test(navigator.platform) : false;\nfunction baseKeyMaps(schema) {\n let keys = baseKeymap;\n function bind(key, cmd) {\n keys[key] = cmd;\n }\n bind('Mod-z', chainCommands(undoInputRule, undo));\n bind('Shift-Mod-z', redo);\n const backspaceComands = chainCommands(undoInputRule, cleanUpAtTheStartOfDocument, deleteSelection, joinBackward, selectNodeBackward);\n bind('Backspace', backspaceComands);\n bind('Mod-Backspace', backspaceComands);\n if (!mac) bind('Mod-y', redo);\n bind('Alt-ArrowUp', joinUp);\n bind('Alt-ArrowDown', joinDown);\n bind('Escape', selectParentNode);\n bind('ArrowLeft', moveLeft());\n bind('ArrowRight', moveRight());\n bind('ArrowDown', createNewParagraphBelow);\n bind('ArrowUp', createNewParagraphAbove);\n if (schema.marks.strong) {\n bind('Mod-b', toggleMark(schema.marks.strong));\n bind('Mod-B', toggleMark(schema.marks.strong));\n }\n if (schema.marks.em) {\n bind('Mod-i', toggleMark(schema.marks.em));\n bind('Mod-I', toggleMark(schema.marks.em));\n }\n if (schema.marks.superscript) {\n bind('Shift-Mod-.', toggleMark(schema.marks.superscript));\n }\n if (schema.nodes.hard_break) {\n let br = schema.nodes.hard_break,\n cmd = chainCommands(exitCode, (state, dispatch) => {\n dispatch(state.tr.insertText(` `).replaceSelectionWith(br.create()).scrollIntoView());\n return true;\n });\n bind('Mod-Enter', cmd);\n bind('Shift-Enter', cmd);\n if (mac) bind('Ctrl-Enter', cmd);\n }\n const modEnter = mac ? 'Mod-Enter' : 'Ctrl-Enter';\n const enterCommands = [newlineInCode, createParagraphNear$1, liftEmptyBlock, splitBlock];\n if (schema.nodes.list_item) {\n enterCommands.unshift(enterKeyOnListCommand);\n\n // TODO: Remove hacky fix\n // This needs to done only when the editor sends messages on Enter.\n // Currently Mod+enter command is never reached as it is overridden at the editor\n // side with Cmd+Enter for sending messages.\n // Fix this by using a different keymap or overriding existing keymap on condition.\n\n enterCommands.unshift(splitListItem(schema.nodes.list_item));\n bind('Tab', indentList());\n bind('Shift-Tab', outdentList());\n }\n bind('Enter', chainCommands.apply(null, enterCommands));\n bind(modEnter, chainCommands.apply(null, enterCommands));\n return keymap(keys);\n}\n\nconst validCombos = {\n '**': ['_', '~~', '^'],\n '*': ['__', '~~', '^'],\n '^': ['*', '_'],\n __: ['*', '~~', '^'],\n _: ['**', '~~', '^'],\n '~~': ['__', '_', '**', '*', '^']\n};\nconst validRegex = (char, str) => {\n for (let i = 0; i < validCombos[char].length; i++) {\n const ch = validCombos[char][i];\n if (ch === str) {\n return true;\n }\n const matchLength = str.length - ch.length;\n if (str.substr(matchLength, str.length) === ch) {\n return validRegex(ch, str.substr(0, matchLength));\n }\n }\n return false;\n};\nfunction addMark(markType, schema, charSize, char) {\n return (state, match, start, end) => {\n const [, prefix, textWithCombo] = match;\n const to = end;\n // in case of *string* pattern it matches the text from beginning of the paragraph,\n // because we want ** to work for strong text\n // that's why \"start\" argument is wrong and we need to calculate it ourselves\n const from = textWithCombo ? start + prefix.length : start;\n const nodeBefore = state.doc.resolve(start + prefix.length).nodeBefore;\n if (prefix && prefix.length > 0 && !validRegex(char, prefix) && !(nodeBefore && nodeBefore.type === state.schema.nodes.hard_break)) {\n return null;\n }\n // fixes the following case: my `*name` is *\n // expected result: should ignore special characters inside \"code\"\n if (state.schema.marks.code && state.schema.marks.code.isInSet(state.doc.resolve(from + 1).marks())) {\n return null;\n }\n\n // Prevent autoformatting across hardbreaks\n let containsHardBreak;\n state.doc.nodesBetween(from, to, node => {\n if (node.type === schema.nodes.hard_break) {\n containsHardBreak = true;\n return false;\n }\n return !containsHardBreak;\n });\n if (containsHardBreak) {\n return null;\n }\n\n // fixes autoformatting in heading nodes: # Heading *bold*\n // expected result: should not autoformat *bold*; <h1>Heading *bold*</h1>\n if (state.doc.resolve(from).sameParent(state.doc.resolve(to))) {\n if (!state.doc.resolve(from).parent.type.allowsMarkType(markType)) {\n return null;\n }\n }\n\n // apply mark to the range (from, to)\n let tr = state.tr.addMark(from, to, markType.create());\n if (charSize > 1) {\n // delete special characters after the text\n // Prosemirror removes the last symbol by itself, so we need to remove \"charSize - 1\" symbols\n tr = tr.delete(to - (charSize - 1), to);\n }\n return tr\n // delete special characters before the text\n .delete(from, from + charSize).removeStoredMark(markType);\n };\n}\nfunction addCodeMark(markType, specialChar) {\n return (state, match, start, end) => {\n if (match[1] && match[1].length > 0) {\n const allowedPrefixConditions = [prefix => {\n return prefix === '(';\n }, prefix => {\n const nodeBefore = state.doc.resolve(start + prefix.length).nodeBefore;\n return nodeBefore && nodeBefore.type === state.schema.nodes.hard_break || false;\n }];\n if (allowedPrefixConditions.every(condition => !condition(match[1]))) {\n return null;\n }\n }\n // fixes autoformatting in heading nodes: # Heading `bold`\n // expected result: should not autoformat *bold*; <h1>Heading `bold`</h1>\n if (state.doc.resolve(start).sameParent(state.doc.resolve(end))) {\n if (!state.doc.resolve(start).parent.type.allowsMarkType(markType)) {\n return null;\n }\n }\n let tr = state.tr;\n // checks if a selection exists and needs to be removed\n if (state.selection.from !== state.selection.to) {\n tr.delete(state.selection.from, state.selection.to);\n end -= state.selection.to - state.selection.from;\n }\n const regexStart = end - match[2].length + 1;\n const codeMark = state.schema.marks.code.create();\n return applyMarkOnRange(regexStart, end, false, codeMark, tr).setStoredMarks([codeMark]).delete(regexStart, regexStart + specialChar.length).removeStoredMark(markType);\n };\n}\nconst strongRegex1 = /(\\S*)(\\_\\_([^\\_\\s](\\_(?!\\_)|[^\\_])*[^\\_\\s]|[^\\_\\s])\\_\\_)$/;\nconst strongRegex2 = /(\\S*)(\\*\\*([^\\*\\s](\\*(?!\\*)|[^\\*])*[^\\*\\s]|[^\\*\\s])\\*\\*)$/;\nconst italicRegex1 = /(\\S*[^\\s\\_]*)(\\_([^\\s\\_][^\\_]*[^\\s\\_]|[^\\s\\_])\\_)$/;\nconst italicRegex2 = /(\\S*[^\\s\\*]*)(\\*([^\\s\\*][^\\*]*[^\\s\\*]|[^\\s\\*])\\*)$/;\nconst strikeRegex = /(\\S*)(\\~\\~([^\\s\\~](\\~(?!\\~)|[^\\~])*[^\\s\\~]|[^\\s\\~])\\~\\~)$/;\nconst codeRegex = /(\\S*)(`[^\\s][^`]*`)$/;\nconst supertextRegex = /(\\S*[^\\s^]*)(\\^([^\\s^][^^]*[^\\s^]|[^\\s^])\\^)$/;\n\n/**\n * Create input rules for strong mark\n *\n * @param {Schema} schema\n * @returns {InputRule[]}\n */\nfunction getStrongInputRules(schema) {\n // **string** or __strong__ should bold the text\n\n const markLength = 2;\n const doubleUnderscoreRule = createInputRule$1(strongRegex1, addMark(schema.marks.strong, schema, markLength, '__'));\n const doubleAsterixRule = createInputRule$1(strongRegex2, addMark(schema.marks.strong, schema, markLength, '**'));\n return [doubleUnderscoreRule, doubleAsterixRule];\n}\n\n/**\n * Create input rules for em mark\n *\n * @param {Schema} schema\n * @returns {InputRule[]}\n */\nfunction getItalicInputRules(schema) {\n // *string* or _string_ should italic the text\n const markLength = 1;\n const underscoreRule = createInputRule$1(italicRegex1, addMark(schema.marks.em, schema, markLength, '_'));\n const asterixRule = createInputRule$1(italicRegex2, addMark(schema.marks.em, schema, markLength, '*'));\n return [underscoreRule, asterixRule];\n}\n\n/**\n * Create input rules for strike mark\n *\n * @param {Schema} schema\n * @returns {InputRule[]}\n */\nfunction getStrikeInputRules(schema) {\n const markLength = 2;\n const doubleTildeRule = createInputRule$1(strikeRegex, addMark(schema.marks.strike, schema, markLength, '~~'));\n return [doubleTildeRule];\n}\nfunction getSuperscriptInputRules(schema) {\n const markLength = 1;\n // const doubleTildeRule = addMark(schema.marks.superscript);\n const doubleTildeRule = createInputRule$1(supertextRegex, addMark(schema.marks.superscript, schema, markLength, '^'));\n return [doubleTildeRule];\n}\n\n/**\n * Create input rules for code mark\n *\n * @param {Schema} schema\n * @returns {InputRule[]}\n */\nfunction getCodeInputRules(schema) {\n const backTickRule = createInputRule$1(codeRegex, addCodeMark(schema.marks.code, '`'));\n return [backTickRule];\n}\nfunction textFormattingInputRules(schema) {\n const rules = [];\n if (schema.marks.strong) {\n rules.push(...getStrongInputRules(schema));\n }\n if (schema.marks.em) {\n rules.push(...getItalicInputRules(schema));\n }\n if (schema.marks.superscript) {\n rules.push(...getSuperscriptInputRules(schema));\n }\n if (schema.marks.strike) {\n rules.push(...getStrikeInputRules(schema));\n }\n if (schema.marks.code) {\n rules.push(...getCodeInputRules(schema));\n }\n if (rules.length !== 0) {\n return inputRules({\n rules\n });\n }\n return;\n}\n\n/* eslint-disable no-plusplus */\nconst prefix = 'ProseMirror-prompt';\nfunction reportInvalid(dom, message) {\n // FIXME this is awful and needs a lot more work\n let parent = dom.parentNode;\n let msg = parent.appendChild(document.createElement('div'));\n msg.style.left = dom.offsetLeft + dom.offsetWidth + 2 + 'px';\n msg.style.top = dom.offsetTop - 5 + 'px';\n msg.className = 'ProseMirror-invalid';\n msg.textContent = message;\n setTimeout(() => parent.removeChild(msg), 1500);\n}\nfunction getValues(fields, domFields) {\n let result = Object.keys(fields).filter((name, index) => {\n let field = fields[name];\n let dom = domFields[index];\n let value = field.read(dom);\n let bad = field.validate(value);\n if (bad) reportInvalid(dom, bad);\n return !bad;\n }).reduce((acc, name, index) => {\n let field = fields[name];\n let dom = domFields[index];\n let value = field.read(dom);\n acc[name] = field.clean(value);\n return acc;\n }, {});\n return result;\n}\nfunction openPrompt(options) {\n let wrapper = document.body.appendChild(document.createElement('div'));\n wrapper.className = prefix;\n const close = () => {\n // eslint-disable-next-line no-use-before-define\n window.removeEventListener('mousedown', mouseOutside);\n if (wrapper.parentNode) wrapper.parentNode.removeChild(wrapper);\n };\n let mouseOutside = e => {\n if (!wrapper.contains(e.target)) close();\n };\n setTimeout(() => window.addEventListener('mousedown', mouseOutside), 50);\n let domFields = [];\n Object.values(options.fields).map(field => domFields.push(field.render()));\n let submitButton = document.createElement('button');\n submitButton.type = 'submit';\n submitButton.className = 'button tiny button--save-link ' + prefix + '-submit';\n submitButton.textContent = 'Create Link';\n let cancelButton = document.createElement('button');\n cancelButton.type = 'button';\n cancelButton.className = 'button tiny hollow secondary' + prefix + '-cancel';\n cancelButton.textContent = 'Cancel';\n cancelButton.addEventListener('click', close);\n let form = wrapper.appendChild(document.createElement('form'));\n if (options.title) {\n const titleDom = document.createElement('h5');\n titleDom.className = 'sub-block-title';\n form.appendChild(titleDom).textContent = options.title;\n }\n domFields.forEach(field => {\n form.appendChild(document.createElement('div')).appendChild(field);\n });\n let buttons = form.appendChild(document.createElement('div'));\n buttons.className = prefix + '-buttons';\n buttons.appendChild(submitButton);\n buttons.appendChild(document.createTextNode(' '));\n buttons.appendChild(cancelButton);\n let box = wrapper.getBoundingClientRect();\n wrapper.style.top = (window.innerHeight - box.height) / 2 + 'px';\n wrapper.style.left = (window.innerWidth - box.width) / 2 + 'px';\n let submit = () => {\n let params = getValues(options.fields, domFields);\n if (params) {\n close();\n options.callback(params);\n }\n };\n form.addEventListener('submit', e => {\n e.preventDefault();\n submit();\n });\n form.addEventListener('keydown', e => {\n if (e.key === 'Esc') {\n e.preventDefault();\n close();\n } else if (e.key === 'Enter' && !(e.ctrlKey || e.metaKey || e.shiftKey)) {\n e.preventDefault();\n submit();\n } else if (e.key === 'Tab') {\n window.setTimeout(() => {\n if (!wrapper.contains(document.activeElement)) close();\n }, 500);\n }\n });\n let input = form.elements[0];\n if (input) input.focus();\n}\n\n/* eslint-disable class-methods-use-this */\n// ::- The type of field that `FieldPrompt` expects to be passed to it.\nclass Field {\n // :: (Object)\n // Create a field with the given options. Options support by all\n // field types are:\n //\n // **`value`**`: ?any`\n // : The starting value for the field.\n //\n // **`label`**`: string`\n // : The label for the field.\n //\n // **`required`**`: ?bool`\n // : Whether the field is required.\n //\n // **`validate`**`: ?(any) → ?string`\n // : A function to validate the given value. Should return an\n // error message if it is not valid.\n constructor(options) {\n this.options = options;\n }\n\n // render:: (state: EditorState, props: Object) → dom.Node\n // Render the field to the DOM. Should be implemented by all subclasses.\n\n // :: (dom.Node) → any\n // Read the field's value from its DOM node.\n read(dom) {\n return dom.value;\n }\n\n // :: (any) → ?string\n // A field-type-specific validation function.\n validateType() {}\n validate(value) {\n if (!value && this.options.required) return 'Required field';\n return this.validateType(value) || this.options.validate && this.options.validate(value);\n }\n clean(value) {\n return this.options.clean ? this.options.clean(value) : value;\n }\n}\n\n// ::- A field class for single-line text fields.\nclass TextField extends Field {\n render() {\n let input = document.createElement('input');\n input.type = 'text';\n input.placeholder = this.options.label;\n input.className = this.options.class;\n input.value = this.options.value || '';\n input.autocomplete = 'off';\n return input;\n }\n}\n\nconst cmdItem = (cmd, options) => {\n const passedOptions = {\n label: options.title,\n run: cmd\n };\n Object.keys(options).reduce((acc, optionKey) => {\n acc[optionKey] = options[optionKey];\n return acc;\n }, passedOptions);\n if ((!options.enable || options.enable === true) && !options.select) {\n passedOptions[options.enable ? 'enable' : 'select'] = state => cmd(state);\n }\n return new MenuItem(passedOptions);\n};\nconst markItem = (markType, options) => {\n const passedOptions = {\n active(state) {\n return markActive(state, markType);\n },\n enable: true\n };\n Object.keys(options).reduce((acc, optionKey) => {\n acc[optionKey] = options[optionKey];\n return acc;\n }, passedOptions);\n return cmdItem(toggleMark(markType), passedOptions);\n};\nconst blockTypeIsActive = (state, type, attrs) => {\n const {\n $from\n } = state.selection;\n let wrapperDepth;\n let currentDepth = $from.depth;\n while (currentDepth > 0) {\n const currentNodeAtDepth = $from.node(currentDepth);\n ({\n ...attrs\n });\n if (currentNodeAtDepth.attrs.level) {\n currentNodeAtDepth.attrs.level;\n }\n const isType = type.name === currentNodeAtDepth.type.name;\n const hasAttrs = Object.keys(attrs).reduce((prev, curr) => {\n if (attrs[curr] !== currentNodeAtDepth.attrs[curr]) {\n return false;\n }\n return prev;\n }, true);\n if (isType && hasAttrs) {\n wrapperDepth = currentDepth;\n }\n currentDepth -= 1;\n }\n return wrapperDepth;\n};\nconst toggleBlockType = (type, attrs) => (state, dispatch) => {\n const isActive = blockTypeIsActive(state, type, attrs);\n const newNodeType = isActive ? state.schema.nodes.paragraph : type;\n const setBlockFunction = setBlockType(newNodeType, attrs);\n return setBlockFunction(state, dispatch);\n};\n\nconst BaseIcon = {\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n path: ''\n};\nconst icons = {\n strong: {\n ...BaseIcon,\n path: 'M6.935 4.44A1.5 1.5 0 0 1 7.996 4h4.383C15.017 4 17 6.182 17 8.625a4.63 4.63 0 0 1-.865 2.682c1.077.827 1.866 2.12 1.866 3.813C18 18.232 15.3 20 13.12 20H8a1.5 1.5 0 0 1-1.5-1.5l-.004-13c0-.397.158-.779.44-1.06ZM9.5 10.25h2.88c.903 0 1.62-.76 1.62-1.625S13.281 7 12.38 7H9.498l.002 3.25Zm0 3V17h3.62c.874 0 1.88-.754 1.88-1.88 0-1.13-.974-1.87-1.88-1.87H9.5Z'\n },\n em: {\n ...BaseIcon,\n path: 'M9.75 4h8.504a.75.75 0 0 1 .102 1.493l-.102.006h-3.197L10.037 18.5h4.213a.75.75 0 0 1 .742.648l.007.102a.75.75 0 0 1-.648.743L14.25 20h-9.5a.747.747 0 0 1-.746-.75c0-.38.28-.694.645-.743l.101-.007h3.685l.021-.065L13.45 5.499h-3.7a.75.75 0 0 1-.742-.648L9 4.75a.75.75 0 0 1 .648-.743L9.751 4h8.503-8.503Z'\n },\n superScript: {\n ...BaseIcon,\n path: `M18.736 3.5c-.543 0-.986.495-.986 1.023a.75.75 0 0 1-1.5 0C16.25 3.278 17.258 2 18.736 2c.855 0 1.684.4 2.15 1.117.49.751.5 1.724-.057 2.672-.285.484-.673.847-1.045 1.141-.187.148-.379.284-.557.41l-.078.056a17.45 17.45 0 0 0-.432.311c-.356.268-.619.511-.78.793h2.514a.75.75 0 0 1 0 1.5H17a.75.75 0 0 1-.75-.75c0-1.396.821-2.182 1.565-2.741.157-.119.32-.234.472-.341l.074-.052c.177-.126.34-.243.493-.363.306-.242.532-.47.682-.724.31-.53.229-.886.093-1.094-.158-.244-.486-.435-.893-.435Z\n M15.26 4.71c.06.562.385 1.043.847 1.318L10.987 12l5.583 6.512a.75.75 0 1 1-1.14.976L10 13.152l-5.43 6.336a.75.75 0 0 1-1.14-.976L9.013 12 3.431 5.488a.75.75 0 1 1 1.139-.976L10 10.848l5.26-6.137Z`\n },\n code: {\n ...BaseIcon,\n path: 'm8.066 18.943 6.5-14.5a.75.75 0 0 1 1.404.518l-.036.096-6.5 14.5a.75.75 0 0 1-1.404-.518l.036-.096 6.5-14.5-6.5 14.5ZM2.22 11.47l4.25-4.25a.75.75 0 0 1 1.133.976l-.073.085L3.81 12l3.72 3.719a.75.75 0 0 1-.976 1.133l-.084-.073-4.25-4.25a.75.75 0 0 1-.073-.976l.073-.084 4.25-4.25-4.25 4.25Zm14.25-4.25a.75.75 0 0 1 .976-.073l.084.073 4.25 4.25a.75.75 0 0 1 .073.976l-.073.085-4.25 4.25a.75.75 0 0 1-1.133-.977l.073-.084L20.19 12l-3.72-3.72a.75.75 0 0 1 0-1.06Z'\n },\n link: {\n ...BaseIcon,\n path: 'M9.25 7a.75.75 0 0 1 .11 1.492l-.11.008H7a3.5 3.5 0 0 0-.206 6.994L7 15.5h2.25a.75.75 0 0 1 .11 1.492L9.25 17H7a5 5 0 0 1-.25-9.994L7 7h2.25ZM17 7a5 5 0 0 1 .25 9.994L17 17h-2.25a.75.75 0 0 1-.11-1.492l.11-.008H17a3.5 3.5 0 0 0 .206-6.994L17 8.5h-2.25a.75.75 0 0 1-.11-1.492L14.75 7H17ZM7 11.25h10a.75.75 0 0 1 .102 1.493L17 12.75H7a.75.75 0 0 1-.102-1.493L7 11.25h10H7Z'\n },\n undo: {\n ...BaseIcon,\n path: 'M4.75 2a.75.75 0 0 1 .743.648l.007.102v5.69l4.574-4.56a6.41 6.41 0 0 1 8.879-.179l.186.18a6.41 6.41 0 0 1 0 9.063l-8.846 8.84a.75.75 0 0 1-1.06-1.062l8.845-8.838a4.91 4.91 0 0 0-6.766-7.112l-.178.17L6.562 9.5h5.688a.75.75 0 0 1 .743.648l.007.102a.75.75 0 0 1-.648.743L12.25 11h-7.5a.75.75 0 0 1-.743-.648L4 10.25v-7.5A.75.75 0 0 1 4.75 2Z'\n },\n redo: {\n ...BaseIcon,\n path: 'M19.25 2a.75.75 0 0 0-.743.648l-.007.102v5.69l-4.574-4.56a6.41 6.41 0 0 0-8.878-.179l-.186.18a6.41 6.41 0 0 0 0 9.063l8.845 8.84a.75.75 0 0 0 1.06-1.062l-8.845-8.838a4.91 4.91 0 0 1 6.766-7.112l.178.17L17.438 9.5H11.75a.75.75 0 0 0-.743.648L11 10.25c0 .38.282.694.648.743l.102.007h7.5a.75.75 0 0 0 .743-.648L20 10.25v-7.5a.75.75 0 0 0-.75-.75Z'\n },\n bulletList: {\n ...BaseIcon,\n path: 'M3.25 17.5a1.25 1.25 0 1 1 0 2.5 1.25 1.25 0 0 1 0-2.5Zm3.5.5h14.5a.75.75 0 0 1 .102 1.494l-.102.006H6.75a.75.75 0 0 1-.102-1.493L6.75 18h14.5-14.5Zm-3.5-7a1.25 1.25 0 1 1 0 2.5 1.25 1.25 0 0 1 0-2.5Zm3.5.5h14.5a.75.75 0 0 1 .102 1.494L21.25 13H6.75a.75.75 0 0 1-.102-1.493l.102-.007h14.5-14.5Zm-3.5-7A1.25 1.25 0 1 1 3.25 7a1.25 1.25 0 0 1 0-2.499Zm3.5.5h14.5a.75.75 0 0 1 .102 1.494l-.102.006H6.75a.75.75 0 0 1-.102-1.493L6.75 5h14.5-14.5Z'\n },\n orderedList: {\n ...BaseIcon,\n path: 'M6 2.75a.75.75 0 0 0-1.434-.307l-.002.003a1.45 1.45 0 0 1-.067.132 4.126 4.126 0 0 1-.238.384c-.217.313-.524.663-.906.902a.75.75 0 1 0 .794 1.272c.125-.078.243-.161.353-.248V7.25a.75.75 0 0 0 1.5 0v-4.5ZM20.5 18.75a.75.75 0 0 0-.75-.75h-9a.75.75 0 0 0 0 1.5h9a.75.75 0 0 0 .75-.75ZM20.5 12.244a.75.75 0 0 0-.75-.75h-9a.75.75 0 1 0 0 1.5h9a.75.75 0 0 0 .75-.75ZM20.5 5.75a.75.75 0 0 0-.75-.75h-9a.75.75 0 0 0 0 1.5h9a.75.75 0 0 0 .75-.75ZM5.15 10.52c-.3-.053-.676.066-.87.26a.75.75 0 1 1-1.06-1.06c.556-.556 1.43-.812 2.192-.677.397.07.805.254 1.115.605.316.358.473.825.473 1.352 0 .62-.271 1.08-.606 1.42-.278.283-.63.511-.906.689l-.08.051a5.88 5.88 0 0 0-.481.34H6.25a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75c0-1.314.984-1.953 1.575-2.337l.06-.04c.318-.205.533-.345.69-.504.134-.136.175-.238.175-.369 0-.223-.061-.318-.098-.36a.42.42 0 0 0-.251-.12ZM2.97 21.28s.093.084.004.005l.006.005.013.013a1.426 1.426 0 0 0 .15.125c.095.07.227.158.397.243.341.17.83.329 1.46.329.64 0 1.196-.181 1.601-.54.408-.36.61-.857.595-1.359A1.775 1.775 0 0 0 6.77 19c.259-.305.412-.685.426-1.101a1.73 1.73 0 0 0-.595-1.36C6.196 16.181 5.64 16 5 16c-.63 0-1.119.158-1.46.33a2.592 2.592 0 0 0-.51.334 1.426 1.426 0 0 0-.037.033l-.013.013-.006.005-.002.003H2.97l-.001.002a.75.75 0 0 0 1.048 1.072 1.1 1.1 0 0 1 .192-.121c.159-.08.42-.171.79-.171.36 0 .536.1.608.164.07.061.09.127.088.187a.325.325 0 0 1-.123.23c-.089.077-.263.169-.573.169a.75.75 0 0 0 0 1.5c.31 0 .484.092.573.168.091.08.121.166.123.231a.232.232 0 0 1-.088.187c-.072.064-.247.164-.608.164a1.75 1.75 0 0 1-.79-.17 1.1 1.1 0 0 1-.192-.122.75.75 0 0 0-1.048 1.072Zm.002-4.563-.001.002c.007-.006.2-.168 0-.002Z'\n },\n h1: {\n ...BaseIcon,\n path: 'M19.59 5.081a.746.746 0 0 0-.809.084.751.751 0 0 0-.249.367c-.69 2.051-2.057 3.409-3.168 4.075a.75.75 0 0 0 .772 1.286c.774-.464 1.623-1.18 2.364-2.146v9.503a.75.75 0 0 0 1.5 0V5.772a.75.75 0 0 0-.41-.69ZM3.5 5.75a.75.75 0 0 0-1.5 0v12.5a.75.75 0 0 0 1.5 0V12.5H10v5.75a.75.75 0 0 0 1.5 0V5.75a.75.75 0 0 0-1.5 0V11H3.5V5.75Z'\n },\n h2: {\n ...BaseIcon,\n path: 'M4.5 5.75a.75.75 0 0 0-1.5 0v12.5a.75.75 0 0 0 1.5 0V12.5H11v5.75a.75.75 0 0 0 1.5 0V5.75a.75.75 0 0 0-1.5 0V11H4.5V5.75Zm10.921 2.085c.23-.46.913-1.335 2.58-1.335.842 0 1.459.26 1.86.639.397.376.64.921.64 1.611 0 1.963-1.3 3.068-2.958 4.343l-.212.163C15.825 14.409 14 15.806 14 18.25a.75.75 0 0 0 .75.75h6.5a.75.75 0 0 0 0-1.5h-5.66c.315-1.252 1.427-2.11 2.866-3.218C20.05 13.057 22 11.537 22 8.75c0-1.06-.383-2.015-1.11-2.702C20.166 5.364 19.158 5 18 5c-2.333 0-3.484 1.291-3.92 2.165a.75.75 0 0 0 1.341.67Z'\n },\n h3: {\n ...BaseIcon,\n path: 'M3.5 5.75a.75.75 0 0 0-1.5 0v12.5a.75.75 0 0 0 1.5 0V12.5H10v5.75a.75.75 0 0 0 1.5 0V5.75a.75.75 0 0 0-1.5 0V11H3.5V5.75Zm11.92 2.085c.23-.46.914-1.335 2.58-1.335.843 0 1.46.26 1.86.639.398.376.64.921.64 1.611 0 .606-.161 1.026-.384 1.332-.228.314-.555.554-.953.735-.816.37-1.802.433-2.383.433a.75.75 0 0 0 0 1.5c.581 0 1.567.063 2.383.433.398.18.725.42.953.735.223.306.384.726.384 1.332 0 1.086-.914 2.25-2.5 2.25-1.727 0-2.348-.76-2.553-1.276a.75.75 0 1 0-1.394.552C14.508 17.926 15.727 19 18 19c2.414 0 4-1.836 4-3.75 0-.894-.245-1.63-.67-2.214A3.679 3.679 0 0 0 20.144 12a3.679 3.679 0 0 0 1.186-1.036c.425-.584.67-1.32.67-2.214 0-1.06-.383-2.015-1.11-2.702C20.165 5.364 19.157 5 18 5c-2.334 0-3.484 1.291-3.92 2.165a.75.75 0 1 0 1.34.67Z'\n },\n image: {\n ...BaseIcon,\n path: 'M18.75 4A3.25 3.25 0 0 1 22 7.25v11.5A3.25 3.25 0 0 1 18.75 22H7.25A3.25 3.25 0 0 1 4 18.75v-6.248c.474.198.977.34 1.5.422v5.826c0 .208.036.408.103.594l5.823-5.701a2.25 2.25 0 0 1 3.02-.116l.128.116l5.822 5.702c.067-.186.104-.386.104-.595V7.25a1.75 1.75 0 0 0-1.75-1.75h-5.826a6.457 6.457 0 0 0-.422-1.5h6.248Zm-6.191 10.644l-.084.07l-5.807 5.687c.182.064.378.099.582.099h11.5c.203 0 .399-.035.58-.099l-5.805-5.686a.75.75 0 0 0-.966-.071ZM16.252 7.5a2.252 2.252 0 1 1 0 4.504a2.252 2.252 0 0 1 0-4.504ZM6.5 1a5.5 5.5 0 1 1 0 11a5.5 5.5 0 0 1 0-11Zm9.752 8a.752.752 0 1 0 0 1.504a.752.752 0 0 0 0-1.504ZM6.5 3l-.09.007a.5.5 0 0 0-.402.402L6 3.5V6H3.498l-.09.008a.5.5 0 0 0-.402.402l-.008.09l.008.09a.5.5 0 0 0 .402.402l.09.008H6v2.503l.008.09a.5.5 0 0 0 .402.402l.09.009l.09-.009a.5.5 0 0 0 .402-.402L7 9.503V7h2.505l.09-.008a.5.5 0 0 0 .402-.402l.008-.09l-.008-.09a.5.5 0 0 0-.403-.402L9.504 6H7V3.5l-.008-.09a.5.5 0 0 0-.402-.403L6.5 3Z'\n }\n};\n\nconst wrapListItem = (nodeType, options) => cmdItem(wrapInList(nodeType, options.attrs), options);\nconst imageUploadItem = (nodeType, onImageUpload) => new MenuItem({\n title: \"Upload image\",\n icon: icons.image,\n enable() {\n return true;\n },\n run() {\n onImageUpload();\n return true;\n }\n});\nconst headerItem = (nodeType, options) => {\n const {\n level = 1\n } = options;\n return new MenuItem({\n title: `Heading ${level}`,\n icon: options.icon,\n active(state) {\n return blockTypeIsActive(state, nodeType, {\n level\n });\n },\n enable() {\n return true;\n },\n run(state, dispatch, view) {\n if (blockTypeIsActive(state, nodeType, {\n level\n })) {\n toggleBlockType(nodeType, {\n level\n })(state, dispatch);\n return true;\n }\n toggleBlockType(nodeType, {\n level\n })(view.state, view.dispatch);\n view.focus();\n return false;\n }\n });\n};\nconst linkItem = markType => new MenuItem({\n title: \"Add or remove link\",\n icon: icons.link,\n active(state) {\n return markActive(state, markType);\n },\n enable(state) {\n return !state.selection.empty;\n },\n run(state, dispatch, view) {\n if (markActive(state, markType)) {\n toggleMark(markType)(state, dispatch);\n return true;\n }\n openPrompt({\n title: \"Create a link\",\n fields: {\n href: new TextField({\n label: \"https://example.com\",\n class: \"small\",\n required: true\n })\n },\n callback(attrs) {\n toggleMark(markType, attrs)(view.state, view.dispatch);\n view.focus();\n }\n });\n return false;\n }\n});\nconst buildMenuOptions = (schema, {\n enabledMenuOptions = [\"strong\", \"em\", \"code\", \"link\", \"undo\", \"redo\", \"bulletList\", \"orderedList\"],\n onImageUpload = () => {}\n}) => {\n const availableMenuOptions = {\n strong: markItem(schema.marks.strong, {\n title: \"Toggle strong style\",\n icon: icons.strong\n }),\n em: markItem(schema.marks.em, {\n title: \"Toggle emphasis\",\n icon: icons.em\n }),\n code: markItem(schema.marks.code, {\n title: \"Toggle code font\",\n icon: icons.code\n }),\n link: linkItem(schema.marks.link),\n bulletList: wrapListItem(schema.nodes.bullet_list, {\n title: \"Wrap in bullet list\",\n icon: icons.bulletList\n }),\n orderedList: wrapListItem(schema.nodes.ordered_list, {\n title: \"Wrap in ordered list\",\n icon: icons.orderedList\n }),\n undo: new MenuItem({\n title: \"Undo last change\",\n run: undo,\n enable: state => undo(state),\n icon: icons.undo\n }),\n redo: new MenuItem({\n title: \"Redo last undone change\",\n run: redo,\n enable: state => redo(state),\n icon: icons.redo\n }),\n h1: headerItem(schema.nodes.heading, {\n level: 1,\n title: \"Toggle code font\",\n icon: icons.h1\n }),\n h2: headerItem(schema.nodes.heading, {\n level: 2,\n title: \"Toggle code font\",\n icon: icons.h2\n }),\n h3: headerItem(schema.nodes.heading, {\n level: 3,\n title: \"Toggle code font\",\n icon: icons.h3\n }),\n imageUpload: imageUploadItem(schema.nodes.image, onImageUpload)\n };\n return [enabledMenuOptions.filter(menuOptionKey => !!availableMenuOptions[menuOptionKey]).map(menuOptionKey => availableMenuOptions[menuOptionKey])];\n};\n\nfunction filterMdToPmSchemaMapping(schema, map) {\n return Object.keys(map).reduce((newMap, key) => {\n const value = map[key];\n const block = value.block || value.node;\n const mark = value.mark;\n if (block && schema.nodes[block] || mark && schema.marks[mark]) {\n newMap[key] = value;\n }\n return newMap;\n }, {});\n}\nconst baseSchemaToMdMapping = {\n nodes: {\n blockquote: 'blockquote',\n paragraph: 'paragraph',\n code_block: ['code', 'fence'],\n list_item: 'list'\n },\n marks: {\n em: 'emphasis',\n superscript: 'sup',\n strong: 'text',\n link: ['link', 'autolink', 'reference', 'linkify'],\n strike: 'strikethrough',\n code: 'backticks'\n }\n};\nconst baseNodesMdToPmMapping = {\n blockquote: {\n block: 'blockquote'\n },\n paragraph: {\n block: 'paragraph'\n },\n softbreak: {\n node: 'hard_break'\n },\n hardbreak: {\n node: 'hard_break'\n },\n code_block: {\n block: 'code_block'\n },\n fence: {\n block: 'code_block',\n // we trim any whitespaces around language definition\n attrs: tok => ({\n language: tok.info && tok.info.trim() || null\n })\n },\n list_item: {\n block: 'list_item'\n },\n bullet_list: {\n block: 'bullet_list'\n },\n ordered_list: {\n block: 'ordered_list',\n attrs: tok => ({\n order: +tok.attrGet('order') || 1\n })\n },\n image: {\n node: 'image',\n getAttrs: tok => {\n const src = tok.attrGet('src');\n const heightMatch = src.match(/cw_image_height=(\\d+)px/);\n return {\n src,\n title: tok.attrGet('title') || null,\n alt: tok.children[0] && tok.children[0].content || null,\n height: heightMatch ? `${heightMatch[1]}px` : null\n };\n }\n }\n};\nconst baseMarksMdToPmMapping = {\n em: {\n mark: 'em'\n },\n sup: {\n mark: 'superscript'\n },\n strong: {\n mark: 'strong'\n },\n link: {\n mark: 'link',\n attrs: tok => ({\n href: tok.attrGet('href'),\n title: tok.attrGet('title') || null\n })\n },\n code_inline: {\n mark: 'code'\n },\n s: {\n mark: 'strike'\n }\n};\n\nconst messageSchemaToMdMapping = {\n nodes: {\n ...baseSchemaToMdMapping.nodes\n },\n marks: {\n ...baseSchemaToMdMapping.marks\n }\n};\nconst messageMdToPmMapping = {\n ...baseNodesMdToPmMapping,\n ...baseMarksMdToPmMapping,\n mention: {\n node: 'mention',\n getAttrs: ({\n mention\n }) => {\n const {\n userId,\n userFullName\n } = mention;\n return {\n userId,\n userFullName\n };\n }\n }\n};\nconst md$1 = MarkdownIt('commonmark', {\n html: false,\n linkify: false\n});\nmd$1.enable([\n// Process html entity - {, ¯, ", ...\n'entity',\n// Process escaped chars and hardbreaks\n'escape']);\nmd$1.disable(['table', 'hr', 'heading', 'lheading'], true);\nclass MessageMarkdownTransformer {\n constructor(schema, tokenizer = md$1) {\n // Enable markdown plugins based on schema\n ['nodes', 'marks'].forEach(key => {\n for (const idx in messageSchemaToMdMapping[key]) {\n if (schema[key][idx]) {\n tokenizer.enable(messageSchemaToMdMapping[key][idx]);\n }\n }\n });\n this.markdownParser = new MarkdownParser(schema, tokenizer, filterMdToPmSchemaMapping(schema, messageMdToPmMapping));\n }\n encode(_node) {\n throw new Error('This is not implemented yet');\n }\n parse(content) {\n return this.markdownParser.parse(content);\n }\n}\n\nconst articleSchemaToMdMapping = {\n nodes: {\n ...baseSchemaToMdMapping.nodes,\n rule: 'hr',\n heading: ['heading'],\n image: 'image'\n },\n marks: {\n ...baseSchemaToMdMapping.marks\n }\n};\nconst articleMdToPmMapping = {\n ...baseNodesMdToPmMapping,\n ...baseMarksMdToPmMapping,\n hr: {\n node: 'horizontal_rule'\n },\n heading: {\n block: 'heading',\n attrs: tok => ({\n level: +tok.tag.slice(1)\n })\n },\n mention: {\n node: 'mention',\n getAttrs: ({\n mention\n }) => {\n const {\n userId,\n userFullName\n } = mention;\n return {\n userId,\n userFullName\n };\n }\n }\n};\nconst md = MarkdownIt('commonmark', {\n html: false,\n linkify: true,\n breaks: true\n}).use(MarkdownItSup);\nmd.enable([\n// Process html entity - {, ¯, ", ...\n'entity',\n// Process escaped chars and hardbreaks\n'escape', 'hr']);\nclass ArticleMarkdownTransformer {\n constructor(schema, tokenizer = md) {\n // Enable markdown plugins based on schema\n ['nodes', 'marks'].forEach(key => {\n for (const idx in articleSchemaToMdMapping[key]) {\n if (schema[key][idx]) {\n tokenizer.enable(articleSchemaToMdMapping[key][idx]);\n }\n }\n });\n this.markdownParser = new MarkdownParser(schema, tokenizer, filterMdToPmSchemaMapping(schema, articleMdToPmMapping));\n }\n encode(_node) {\n throw new Error('This is not implemented yet');\n }\n parse(content) {\n return this.markdownParser.parse(content);\n }\n}\n\nconst mention = (state, node) => {\n const uri = state.esc(`mention://user/${node.attrs.userId}/${encodeURIComponent(node.attrs.userFullName)}`);\n const escapedDisplayName = state.esc('@' + (node.attrs.userFullName || ''));\n state.write(`[${escapedDisplayName}](${uri})`);\n};\nconst blockquote = (state, node) => {\n state.wrapBlock('> ', null, node, () => state.renderContent(node));\n};\nconst code_block = (state, node) => {\n state.write('```' + (node.attrs.params || '') + '\\n');\n state.text(node.textContent, false);\n state.ensureNewLine();\n state.write('```');\n state.closeBlock(node);\n};\nconst heading = (state, node) => {\n state.write(state.repeat('#', node.attrs.level) + ' ');\n state.renderInline(node);\n state.closeBlock(node);\n};\nconst horizontal_rule = (state, node) => {\n state.write(node.attrs.markup || '---');\n state.closeBlock(node);\n};\nconst bullet_list = (state, node) => {\n state.renderList(node, ' ', () => (node.attrs.bullet || '*') + ' ');\n};\nconst ordered_list = (state, node) => {\n let start = node.attrs.order || 1;\n let maxW = String(start + node.childCount - 1).length;\n let space = state.repeat(' ', maxW + 2);\n state.renderList(node, space, i => {\n let nStr = String(start + i);\n return state.repeat(' ', maxW - nStr.length) + nStr + '. ';\n });\n};\nconst list_item = (state, node) => {\n state.renderContent(node);\n};\nconst paragraph = (state, node) => {\n state.renderInline(node);\n state.closeBlock(node);\n};\nconst image = (state, node) => {\n let src = state.esc(node.attrs.src);\n if (node.attrs.height) {\n const param = `cw_image_height=${node.attrs.height}`;\n if (src.includes('?')) {\n src = src.includes('cw_image_height=') ? src.replace(/cw_image_height=[^&]+/, param) : `${src}&${param}`;\n } else {\n src += `?${param}`;\n }\n }\n state.write(' : '') + ')');\n};\nconst hard_break = (state, node, parent, index) => {\n for (let i = index + 1; i < parent.childCount; i++) if (parent.child(i).type !== node.type) {\n state.write(' \\n');\n return;\n }\n};\nconst text = (state, node) => {\n state.text(node.text, false);\n};\nconst em = {\n open: '*',\n close: '*',\n mixable: true,\n expelEnclosingWhitespace: true\n};\nconst superscript = {\n open: '^',\n close: '^',\n mixable: false,\n escape: false,\n expelEnclosingWhitespace: false\n};\nconst strike = {\n open: '~~',\n close: '~~',\n mixable: true,\n expelEnclosingWhitespace: true\n};\nconst strong = {\n open: '**',\n close: '**',\n mixable: true,\n expelEnclosingWhitespace: true\n};\nconst link = {\n open(_state, mark, parent, index) {\n return isPlainURL(mark, parent, index, 1) ? '<' : '[';\n },\n close(state, mark, parent, index) {\n return isPlainURL(mark, parent, index, -1) ? '>' : '](' + state.esc(mark.attrs.href) + (mark.attrs.title ? ' ' + state.quote(mark.attrs.title) : '') + ')';\n },\n escape: false\n};\nconst code = {\n open(_state, _mark, parent, index) {\n return backticksFor(parent.child(index), -1);\n },\n close(_state, _mark, parent, index) {\n return backticksFor(parent.child(index - 1), 1);\n },\n escape: false\n};\nfunction backticksFor(node, side) {\n let ticks = /`+/g,\n m,\n len = 0;\n if (node.isText) while (m = ticks.exec(node.text)) len = Math.max(len, m[0].length);\n let result = len > 0 && side > 0 ? ' `' : '`';\n for (let i = 0; i < len; i++) result += '`';\n if (len > 0 && side < 0) result += ' ';\n return result;\n}\nfunction isPlainURL(link, parent, index, side) {\n if (link.attrs.title || !/^\\w+:/.test(link.attrs.href)) return false;\n let content = parent.child(index + (side < 0 ? -1 : 0));\n if (!content.isText || content.text != link.attrs.href || content.marks[content.marks.length - 1] != link) return false;\n if (index == (side < 0 ? 1 : parent.childCount - 1)) return true;\n let next = parent.child(index + (side < 0 ? -2 : 1));\n return !link.isInSet(next.marks);\n}\n\nconst ArticleMarkdownSerializer = new MarkdownSerializer({\n blockquote,\n code_block,\n heading,\n horizontal_rule,\n bullet_list,\n ordered_list,\n list_item,\n paragraph,\n image,\n hard_break,\n text\n}, {\n em,\n superscript,\n strike,\n strong,\n link,\n code\n});\n\nconst MessageMarkdownSerializer = new MarkdownSerializer({\n mention,\n blockquote,\n code_block,\n bullet_list,\n ordered_list,\n list_item,\n paragraph,\n image,\n hard_break,\n text\n}, {\n em,\n strike,\n strong,\n link,\n code\n});\n\nconst fullSchema = new Schema({\n nodes: {\n doc: schema.spec.nodes.get('doc'),\n paragraph: schema.spec.nodes.get('paragraph'),\n blockquote: schema.spec.nodes.get('blockquote'),\n horizontal_rule: schema.spec.nodes.get('horizontal_rule'),\n heading: schema.spec.nodes.get('heading'),\n code_block: schema.spec.nodes.get('code_block'),\n text: schema.spec.nodes.get('text'),\n image: schema.spec.nodes.get('image'),\n hard_break: schema.spec.nodes.get('hard_break'),\n ordered_list: Object.assign(orderedList, {\n content: 'list_item+',\n group: 'block'\n }),\n bullet_list: Object.assign(bulletList, {\n content: 'list_item+',\n group: 'block'\n }),\n list_item: Object.assign(listItem, {\n content: 'paragraph block*'\n })\n },\n marks: {\n link: schema.spec.marks.get('link'),\n em: schema.spec.marks.get('em'),\n superscript: {\n parseDOM: [{\n tag: 'sup'\n }],\n toDOM() {\n return ['sup'];\n }\n },\n strong: schema.spec.marks.get('strong'),\n code: schema.spec.marks.get('code'),\n strike: {\n parseDOM: [{\n tag: 's'\n }, {\n tag: 'del'\n }, {\n tag: 'strike'\n }, {\n style: 'text-decoration',\n getAttrs: value => value === 'line-through'\n }],\n toDOM: () => ['s', 0]\n }\n }\n});\n\nconst messageSchema = new Schema({\n nodes: {\n doc: schema.spec.nodes.get('doc'),\n paragraph: schema.spec.nodes.get('paragraph'),\n blockquote: schema.spec.nodes.get('blockquote'),\n code_block: schema.spec.nodes.get('code_block'),\n text: schema.spec.nodes.get('text'),\n hard_break: schema.spec.nodes.get('hard_break'),\n image: {\n ...schema.spec.nodes.get('image'),\n attrs: {\n ...schema.spec.nodes.get('image').attrs,\n height: {\n default: null\n }\n },\n parseDOM: [{\n tag: 'img[src]',\n getAttrs: dom => ({\n src: dom.getAttribute('src'),\n title: dom.getAttribute('title'),\n alt: dom.getAttribute('alt'),\n height: parseInt(dom.style.height)\n })\n }],\n toDOM: node => {\n const attrs = {\n src: node.attrs.src,\n alt: node.attrs.alt,\n height: node.attrs.height\n };\n if (node.attrs.height) {\n attrs.style = `height: ${node.attrs.height}`;\n }\n return [\"img\", attrs];\n }\n },\n ordered_list: Object.assign(orderedList, {\n content: 'list_item+',\n group: 'block'\n }),\n bullet_list: Object.assign(bulletList, {\n content: 'list_item+',\n group: 'block'\n }),\n list_item: Object.assign(listItem, {\n content: 'paragraph block*'\n }),\n mention: {\n attrs: {\n userFullName: {\n default: ''\n },\n userId: {\n default: ''\n }\n },\n group: 'inline',\n inline: true,\n selectable: true,\n draggable: true,\n atom: true,\n toDOM: node => ['span', {\n class: 'prosemirror-mention-node',\n 'mention-user-id': node.attrs.userId,\n 'mention-user-full-name': node.attrs.userFullName\n }, `@${node.attrs.userFullName}`],\n parseDOM: [{\n tag: 'span[mention-user-id][mention-user-full-name]',\n getAttrs: dom => {\n const userId = dom.getAttribute('mention-user-id');\n const userFullName = dom.getAttribute('mention-user-full-name');\n return {\n userId,\n userFullName\n };\n }\n }]\n }\n },\n marks: {\n link: schema.spec.marks.get('link'),\n em: schema.spec.marks.get('em'),\n strong: schema.spec.marks.get('strong'),\n code: schema.spec.marks.get('code'),\n strike: {\n parseDOM: [{\n tag: 's'\n }, {\n tag: 'del'\n }, {\n tag: 'strike'\n }, {\n style: 'text-decoration',\n getAttrs: value => value === 'line-through'\n }],\n toDOM: () => ['s', 0]\n }\n }\n});\n\nconst buildEditor = ({\n schema,\n placeholder,\n methods: {\n onImageUpload\n } = {},\n plugins = [],\n enabledMenuOptions\n}) => [...(plugins || []), history(), baseKeyMaps(schema), blocksInputRule(schema), textFormattingInputRules(schema), linksInputRules(schema), hrInputRules(schema), listInputRules(schema), dropCursor(), gapCursor(), Placeholder(placeholder), menuBar({\n floating: true,\n content: buildMenuOptions(schema, {\n enabledMenuOptions,\n onImageUpload\n })\n}), new Plugin({\n props: {\n attributes: {\n class: \"ProseMirror-woot-style\"\n }\n }\n})];\n\nexport { ArticleMarkdownSerializer, ArticleMarkdownTransformer, MessageMarkdownSerializer, MessageMarkdownTransformer, buildEditor, fullSchema, messageSchema };\n//# sourceMappingURL=index.es.js.map\n","import {\n messageSchema,\n MessageMarkdownTransformer,\n MessageMarkdownSerializer,\n} from '@chatwoot/prosemirror-schema';\nimport { replaceVariablesInMessage } from '@chatwoot/utils';\nimport * as Sentry from '@sentry/vue';\n\n/**\n * The delimiter used to separate the signature from the rest of the body.\n * @type {string}\n */\nexport const SIGNATURE_DELIMITER = '--';\n\n/**\n * Parse and Serialize the markdown text to remove any extra spaces or new lines\n */\nexport function cleanSignature(signature) {\n try {\n // remove any horizontal rule tokens\n signature = signature\n .replace(/^( *\\* *){3,} *$/gm, '')\n .replace(/^( *- *){3,} *$/gm, '')\n .replace(/^( *_ *){3,} *$/gm, '');\n\n const nodes = new MessageMarkdownTransformer(messageSchema).parse(\n signature\n );\n return MessageMarkdownSerializer.serialize(nodes);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(e);\n Sentry.captureException(e);\n // The parser can break on some cases\n // for example, Token type `hr` not supported by Markdown parser\n return signature;\n }\n}\n\n/**\n * Adds the signature delimiter to the beginning of the signature.\n *\n * @param {string} signature - The signature to add the delimiter to.\n * @returns {string} - The signature with the delimiter added.\n */\nfunction appendDelimiter(signature) {\n return `${SIGNATURE_DELIMITER}\\n\\n${cleanSignature(signature)}`;\n}\n\n/**\n * Check if there's an unedited signature at the end of the body\n * If there is, return the index of the signature, If there isn't, return -1\n *\n * @param {string} body - The body to search for the signature.\n * @param {string} signature - The signature to search for.\n * @returns {number} - The index of the last occurrence of the signature in the body, or -1 if not found.\n */\nexport function findSignatureInBody(body, signature) {\n const trimmedBody = body.trimEnd();\n const cleanedSignature = cleanSignature(signature);\n\n // check if body ends with signature\n if (trimmedBody.endsWith(cleanedSignature)) {\n return body.lastIndexOf(cleanedSignature);\n }\n\n return -1;\n}\n\n/**\n * Appends the signature to the body, separated by the signature delimiter.\n *\n * @param {string} body - The body to append the signature to.\n * @param {string} signature - The signature to append.\n * @returns {string} - The body with the signature appended.\n */\nexport function appendSignature(body, signature) {\n const cleanedSignature = cleanSignature(signature);\n // if signature is already present, return body\n if (findSignatureInBody(body, cleanedSignature) > -1) {\n return body;\n }\n\n return `${body.trimEnd()}\\n\\n${appendDelimiter(cleanedSignature)}`;\n}\n\n/**\n * Removes the signature from the body, along with the signature delimiter.\n *\n * @param {string} body - The body to remove the signature from.\n * @param {string} signature - The signature to remove.\n * @returns {string} - The body with the signature removed.\n */\nexport function removeSignature(body, signature) {\n // this will find the index of the signature if it exists\n // Regardless of extra spaces or new lines after the signature, the index will be the same if present\n const cleanedSignature = cleanSignature(signature);\n const signatureIndex = findSignatureInBody(body, cleanedSignature);\n\n // no need to trim the ends here, because it will simply be removed in the next method\n let newBody = body;\n\n // if signature is present, remove it and trim it\n // trimming will ensure any spaces or new lines before the signature are removed\n // This means we will have the delimiter at the end\n if (signatureIndex > -1) {\n newBody = newBody.substring(0, signatureIndex).trimEnd();\n }\n\n // let's find the delimiter and remove it\n const delimiterIndex = newBody.lastIndexOf(SIGNATURE_DELIMITER);\n if (\n delimiterIndex !== -1 &&\n delimiterIndex === newBody.length - SIGNATURE_DELIMITER.length // this will ensure the delimiter is at the end\n ) {\n // if the delimiter is at the end, remove it\n newBody = newBody.substring(0, delimiterIndex);\n }\n\n // return the value\n return newBody;\n}\n\n/**\n * Replaces the old signature with the new signature.\n * If the old signature is not present, it will append the new signature.\n *\n * @param {string} body - The body to replace the signature in.\n * @param {string} oldSignature - The signature to replace.\n * @param {string} newSignature - The signature to replace the old signature with.\n * @returns {string} - The body with the old signature replaced with the new signature.\n *\n */\nexport function replaceSignature(body, oldSignature, newSignature) {\n const withoutSignature = removeSignature(body, oldSignature);\n return appendSignature(withoutSignature, newSignature);\n}\n\n/**\n * Extract text from markdown, and remove all images, code blocks, links, headers, bold, italic, lists etc.\n * Links will be converted to text, and not removed.\n *\n * @param {string} markdown - markdown text to be extracted\n * @returns\n */\nexport function extractTextFromMarkdown(markdown) {\n return markdown\n .replace(/```[\\s\\S]*?```/g, '') // Remove code blocks\n .replace(/`.*?`/g, '') // Remove inline code\n .replace(/!\\[.*?\\]\\(.*?\\)/g, '') // Remove images before removing links\n .replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1') // Remove links but keep the text\n .replace(/#+\\s*|[*_-]{1,3}/g, '') // Remove headers, bold, italic, lists etc.\n .split('\\n')\n .map(line => line.trim())\n .filter(Boolean)\n .join('\\n') // Trim each line & remove any lines only having spaces\n .replace(/\\n{2,}/g, '\\n') // Remove multiple consecutive newlines (blank lines)\n .trim(); // Trim any extra space\n}\n\n/**\n * Scrolls the editor view into current cursor position\n *\n * @param {EditorView} view - The Prosemirror EditorView\n *\n */\nexport const scrollCursorIntoView = view => {\n // Get the current selection's head position (where the cursor is).\n const pos = view.state.selection.head;\n\n // Get the corresponding DOM node for that position.\n const domAtPos = view.domAtPos(pos);\n const node = domAtPos.node;\n\n // Scroll the node into view.\n if (node && node.scrollIntoView) {\n node.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n};\n\n/**\n * Returns a transaction that inserts a node into editor at the given position\n * Has an optional param 'content' to check if the\n *\n * @param {Node} node - The prosemirror node that needs to be inserted into the editor\n * @param {number} from - Position in the editor where the node needs to be inserted\n * @param {number} to - Position in the editor where the node needs to be replaced\n *\n */\nexport function insertAtCursor(editorView, node, from, to) {\n if (!editorView) {\n return undefined;\n }\n\n // This is a workaround to prevent inserting content into new line rather than on the exiting line\n // If the node is of type 'doc' and has only one child which is a paragraph,\n // then extract its inline content to be inserted as inline.\n const isWrappedInParagraph =\n node.type.name === 'doc' &&\n node.childCount === 1 &&\n node.firstChild.type.name === 'paragraph';\n\n if (isWrappedInParagraph) {\n node = node.firstChild.content;\n }\n\n let tr;\n if (to) {\n tr = editorView.state.tr.replaceWith(from, to, node).insertText(` `);\n } else {\n tr = editorView.state.tr.insert(from, node);\n }\n const state = editorView.state.apply(tr);\n editorView.updateState(state);\n editorView.focus();\n\n return state;\n}\n\n/**\n * Determines the appropriate node and position to insert an image in the editor.\n *\n * Based on the current editor state and the provided image URL, this function finds out the correct node (either\n * a standalone image node or an image wrapped in a paragraph) and its respective position in the editor.\n *\n * 1. If the current node is a paragraph and doesn't contain an image or text, the image is inserted directly into it.\n * 2. If the current node isn't a paragraph or it's a paragraph containing text, the image will be wrapped\n * in a new paragraph and then inserted.\n * 3. If the current node is a paragraph containing an image, the new image will be inserted directly into it.\n *\n * @param {Object} editorState - The current state of the editor. It provides necessary details like selection, schema, etc.\n * @param {string} fileUrl - The URL of the image to be inserted into the editor.\n * @returns {Object|null} An object containing details about the node to be inserted and its position. It returns null if no image node can be created.\n * @property {Node} node - The ProseMirror node to be inserted (either an image node or a paragraph containing the image).\n * @property {number} pos - The position where the new node should be inserted in the editor.\n */\n\nexport const findNodeToInsertImage = (editorState, fileUrl) => {\n const { selection, schema } = editorState;\n const { nodes } = schema;\n const currentNode = selection.$from.node();\n const {\n type: { name: typeName },\n content: { size, content },\n } = currentNode;\n\n const imageNode = nodes.image.create({ src: fileUrl });\n\n if (!imageNode) return null;\n\n const isInParagraph = typeName === 'paragraph';\n const needsNewLine =\n !content.some(n => n.type.name === 'image') && size !== 0 ? 1 : 0;\n\n return {\n node: isInParagraph ? imageNode : nodes.paragraph.create({}, imageNode),\n pos: selection.from + needsNewLine,\n };\n};\n\n/**\n * Set URL with query and size.\n *\n * @param {Object} selectedImageNode - The current selected node.\n * @param {Object} size - The size to set.\n * @param {Object} editorView - The editor view.\n */\nexport function setURLWithQueryAndSize(selectedImageNode, size, editorView) {\n if (selectedImageNode) {\n // Create and apply the transaction\n const tr = editorView.state.tr.setNodeMarkup(\n editorView.state.selection.from,\n null,\n {\n src: selectedImageNode.src,\n height: size.height,\n }\n );\n\n if (tr.docChanged) {\n editorView.dispatch(tr);\n }\n }\n}\n\n/**\n * Content Node Creation Helper Functions for\n * - mention\n * - canned response\n * - variable\n * - emoji\n */\n\n/**\n * Centralized node creation function that handles the creation of different types of nodes based on the specified type.\n * @param {Object} editorView - The editor view instance.\n * @param {string} nodeType - The type of node to create ('mention', 'cannedResponse', 'variable', 'emoji').\n * @param {Object|string} content - The content needed to create the node, which varies based on node type.\n * @returns {Object|null} - The created ProseMirror node or null if the type is not supported.\n */\nconst createNode = (editorView, nodeType, content) => {\n const { state } = editorView;\n switch (nodeType) {\n case 'mention':\n return state.schema.nodes.mention.create({\n userId: content.id,\n userFullName: content.name,\n });\n case 'cannedResponse':\n return new MessageMarkdownTransformer(messageSchema).parse(content);\n case 'variable':\n return state.schema.text(`{{${content}}}`);\n case 'emoji':\n return state.schema.text(content);\n default:\n return null;\n }\n};\n\n/**\n * Object mapping types to their respective node creation functions.\n */\nconst nodeCreators = {\n mention: (editorView, content, from, to) => ({\n node: createNode(editorView, 'mention', content),\n from,\n to,\n }),\n cannedResponse: (editorView, content, from, to, variables) => {\n const updatedMessage = replaceVariablesInMessage({\n message: content,\n variables,\n });\n const node = createNode(editorView, 'cannedResponse', updatedMessage);\n return {\n node,\n from: node.textContent === updatedMessage ? from : from - 1,\n to,\n };\n },\n variable: (editorView, content, from, to) => ({\n node: createNode(editorView, 'variable', content),\n from,\n to,\n }),\n emoji: (editorView, content, from, to) => ({\n node: createNode(editorView, 'emoji', content),\n from,\n to,\n }),\n};\n\n/**\n * Retrieves a content node based on the specified type and content, using a functional approach to select the appropriate node creation function.\n * @param {Object} editorView - The editor view instance.\n * @param {string} type - The type of content node to create ('mention', 'cannedResponse', 'variable', 'emoji').\n * @param {string|Object} content - The content to be transformed into a node.\n * @param {Object} range - An object containing 'from' and 'to' properties indicating the range in the document where the node should be placed.\n * @param {Object} variables - Optional. Variables to replace in the content, used for 'cannedResponse' type.\n * @returns {Object} - An object containing the created node and the updated 'from' and 'to' positions.\n */\nexport const getContentNode = (\n editorView,\n type,\n content,\n { from, to },\n variables\n) => {\n const creator = nodeCreators[type];\n return creator\n ? creator(editorView, content, from, to, variables)\n : { node: null, from, to };\n};\n","export const formatBytes = (bytes, decimals = 2) => {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / k ** i).toFixed(dm)) + ' ' + sizes[i];\n};\n\nexport const fileSizeInMegaBytes = bytes => {\n return bytes / (1024 * 1024);\n};\n\nexport const checkFileSizeLimit = (file, maximumUploadLimit) => {\n const fileSize = file?.file?.size || file?.size;\n const fileSizeInMB = fileSizeInMegaBytes(fileSize);\n return fileSizeInMB <= maximumUploadLimit;\n};\n","import {\n format,\n isSameYear,\n fromUnixTime,\n formatDistanceToNow,\n} from 'date-fns';\n\n/**\n * Formats a Unix timestamp into a human-readable time format.\n * @param {number} time - Unix timestamp.\n * @param {string} [dateFormat='h:mm a'] - Desired format of the time.\n * @returns {string} Formatted time string.\n */\nexport const messageStamp = (time, dateFormat = 'h:mm a') => {\n const unixTime = fromUnixTime(time);\n return format(unixTime, dateFormat);\n};\n\n/**\n * Provides a formatted timestamp, adjusting the format based on the current year.\n * @param {number} time - Unix timestamp.\n * @param {string} [dateFormat='MMM d, yyyy'] - Desired date format.\n * @returns {string} Formatted date string.\n */\nexport const messageTimestamp = (time, dateFormat = 'MMM d, yyyy') => {\n const messageTime = fromUnixTime(time);\n const now = new Date();\n const messageDate = format(messageTime, dateFormat);\n if (!isSameYear(messageTime, now)) {\n return format(messageTime, 'LLL d y, h:mm a');\n }\n return messageDate;\n};\n\n/**\n * Converts a Unix timestamp to a relative time string (e.g., 3 hours ago).\n * @param {number} time - Unix timestamp.\n * @returns {string} Relative time string.\n */\nexport const dynamicTime = time => {\n const unixTime = fromUnixTime(time);\n return formatDistanceToNow(unixTime, { addSuffix: true });\n};\n\n/**\n * Formats a Unix timestamp into a specified date format.\n * @param {number} time - Unix timestamp.\n * @param {string} [dateFormat='MMM d, yyyy'] - Desired date format.\n * @returns {string} Formatted date string.\n */\nexport const dateFormat = (time, df = 'MMM d, yyyy') => {\n const unixTime = fromUnixTime(time);\n return format(unixTime, df);\n};\n\n/**\n * Converts a detailed time description into a shorter format, optionally appending 'ago'.\n * @param {string} time - Detailed time description (e.g., 'a minute ago').\n * @param {boolean} [withAgo=false] - Whether to append 'ago' to the result.\n * @returns {string} Shortened time description.\n */\nexport const shortTimestamp = (time, withAgo = false) => {\n // This function takes a time string and converts it to a short time string\n // with the following format: 1m, 1h, 1d, 1mo, 1y\n // The function also takes an optional boolean parameter withAgo\n // which will add the word \"ago\" to the end of the time string\n const suffix = withAgo ? ' ago' : '';\n const timeMappings = {\n 'less than a minute ago': 'now',\n 'a minute ago': `1m${suffix}`,\n 'an hour ago': `1h${suffix}`,\n 'a day ago': `1d${suffix}`,\n 'a month ago': `1mo${suffix}`,\n 'a year ago': `1y${suffix}`,\n };\n // Check if the time string is one of the specific cases\n if (timeMappings[time]) {\n return timeMappings[time];\n }\n const convertToShortTime = time\n .replace(/about|over|almost|/g, '')\n .replace(' minute ago', `m${suffix}`)\n .replace(' minutes ago', `m${suffix}`)\n .replace(' hour ago', `h${suffix}`)\n .replace(' hours ago', `h${suffix}`)\n .replace(' day ago', `d${suffix}`)\n .replace(' days ago', `d${suffix}`)\n .replace(' month ago', `mo${suffix}`)\n .replace(' months ago', `mo${suffix}`)\n .replace(' year ago', `y${suffix}`)\n .replace(' years ago', `y${suffix}`);\n return convertToShortTime;\n};\n","<script>\nimport {\n appendSignature,\n removeSignature,\n extractTextFromMarkdown,\n} from 'dashboard/helper/editorHelper';\nimport { createTypingIndicator } from '@chatwoot/utils';\n\nconst TYPING_INDICATOR_IDLE_TIME = 4000;\nexport default {\n props: {\n placeholder: {\n type: String,\n default: '',\n },\n modelValue: {\n type: String,\n default: '',\n },\n minHeight: {\n type: Number,\n default: 2,\n },\n signature: {\n type: String,\n default: '',\n },\n rows: {\n type: Number,\n default: 2,\n },\n // add this as a prop, so that we won't have to add useUISettings\n sendWithSignature: {\n type: Boolean,\n default: false,\n },\n // allowSignature is a kill switch, ensuring no signature methods are triggered except when this flag is true\n allowSignature: {\n type: Boolean,\n default: false,\n },\n },\n emits: [\n 'typingOn',\n 'typingOff',\n 'update:modelValue',\n 'input',\n 'blur',\n 'focus',\n ],\n data() {\n return {\n typingIndicator: createTypingIndicator(\n () => {\n this.$emit('typingOn');\n },\n () => {\n this.$emit('typingOff');\n },\n TYPING_INDICATOR_IDLE_TIME\n ),\n };\n },\n computed: {\n cleanedSignature() {\n // clean the signature, this will ensure that we don't have\n // any markdown formatted text in the signature\n return extractTextFromMarkdown(this.signature);\n },\n },\n watch: {\n value() {\n this.resizeTextarea();\n // 🚨 watch triggers every time the value is changed, we cannot set this to focus then\n // when this runs, it sets the cursor to the end of the body, ignoring the signature\n // Suppose if someone manually set the cursor to the middle of the body\n // and starts typing, the cursor will be set to the end of the body\n // A surprise cursor jump? Definitely not user-friendly.\n if (document.activeElement !== this.$refs.textarea) {\n this.$nextTick(() => {\n this.setCursor();\n });\n }\n },\n sendWithSignature(newValue) {\n if (this.allowSignature) {\n this.toggleSignatureInEditor(newValue);\n }\n },\n },\n mounted() {\n this.$nextTick(() => {\n if (this.modelValue) {\n this.resizeTextarea();\n this.setCursor();\n } else {\n this.focus();\n }\n });\n },\n methods: {\n resizeTextarea() {\n this.$el.style.height = 'auto';\n if (!this.modelValue) {\n this.$el.style.height = `${this.minHeight}rem`;\n } else {\n this.$el.style.height = `${this.$el.scrollHeight}px`;\n }\n },\n // The toggleSignatureInEditor gets the new value from the\n // watcher, this means that if the value is true, the signature\n // is supposed to be added, else we remove it.\n toggleSignatureInEditor(signatureEnabled) {\n const valueWithSignature = signatureEnabled\n ? appendSignature(this.modelValue, this.cleanedSignature)\n : removeSignature(this.modelValue, this.cleanedSignature);\n\n this.$emit('update:modelValue', valueWithSignature);\n this.$emit('input', valueWithSignature);\n\n this.$nextTick(() => {\n this.resizeTextarea();\n this.setCursor();\n });\n },\n setCursor() {\n const bodyWithoutSignature = removeSignature(\n this.modelValue,\n this.cleanedSignature\n );\n\n // only trim at end, so if there are spaces at the start, those are not removed\n const bodyEndsAt = bodyWithoutSignature.trimEnd().length;\n const textarea = this.$refs.textarea;\n\n if (textarea) {\n textarea.focus();\n textarea.setSelectionRange(bodyEndsAt, bodyEndsAt);\n }\n },\n onInput(event) {\n this.$emit('update:modelValue', event.target.value);\n this.$emit('input', event.target.value);\n this.resizeTextarea();\n },\n onKeyup() {\n this.typingIndicator.start();\n },\n onBlur() {\n this.typingIndicator.stop();\n this.$emit('blur');\n },\n onFocus() {\n this.$emit('focus');\n },\n focus() {\n if (this.$refs.textarea) this.$refs.textarea.focus();\n },\n },\n};\n</script>\n\n<template>\n <textarea\n ref=\"textarea\"\n :placeholder=\"placeholder\"\n :rows=\"rows\"\n :value=\"modelValue\"\n @input=\"onInput\"\n @focus=\"onFocus\"\n @keyup=\"onKeyup\"\n @blur=\"onBlur\"\n />\n</template>\n","import ar from './locale/ar.json';\nimport ca from './locale/ca.json';\nimport cs from './locale/cs.json';\nimport da from './locale/da.json';\nimport de from './locale/de.json';\nimport el from './locale/el.json';\nimport en from './locale/en.json';\nimport es from './locale/es.json';\nimport fa from './locale/fa.json';\nimport fi from './locale/fi.json';\nimport fr from './locale/fr.json';\nimport he from './locale/he.json';\nimport hi from './locale/hi.json';\nimport hu from './locale/hu.json';\nimport id from './locale/id.json';\nimport is from './locale/is.json';\nimport it from './locale/it.json';\nimport ja from './locale/ja.json';\nimport ko from './locale/ko.json';\nimport lt from './locale/lt.json';\nimport lv from './locale/lv.json';\nimport ml from './locale/ml.json';\nimport nl from './locale/nl.json';\nimport no from './locale/no.json';\nimport pl from './locale/pl.json';\nimport pt from './locale/pt.json';\nimport pt_BR from './locale/pt_BR.json';\nimport ro from './locale/ro.json';\nimport ru from './locale/ru.json';\nimport sk from './locale/sk.json';\nimport sr from './locale/sr.json';\nimport sv from './locale/sv.json';\nimport ta from './locale/ta.json';\nimport th from './locale/th.json';\nimport tr from './locale/tr.json';\nimport uk from './locale/uk.json';\nimport vi from './locale/vi.json';\nimport zh_CN from './locale/zh_CN.json';\nimport zh_TW from './locale/zh_TW.json';\n\nexport default {\n ar,\n ca,\n cs,\n da,\n de,\n el,\n en,\n es,\n fa,\n fi,\n fr,\n he,\n hi,\n hu,\n id,\n is,\n it,\n ja,\n ko,\n lt,\n lv,\n ml,\n nl,\n no,\n pl,\n pt_BR,\n pt,\n ro,\n ru,\n sk,\n sr,\n sv,\n ta,\n th,\n tr,\n uk,\n vi,\n zh_CN,\n zh_TW,\n};\n","import parse from 'date-fns/parse';\nimport getHours from 'date-fns/getHours';\nimport getMinutes from 'date-fns/getMinutes';\nimport timeZoneData from './timezones.json';\n\nexport const defaultTimeSlot = [\n {\n day: 0,\n to: '',\n from: '',\n valid: false,\n },\n {\n day: 1,\n to: '',\n from: '',\n valid: false,\n },\n {\n day: 2,\n to: '',\n from: '',\n valid: false,\n },\n {\n day: 3,\n to: '',\n from: '',\n valid: false,\n },\n {\n day: 4,\n to: '',\n from: '',\n valid: false,\n },\n {\n day: 5,\n to: '',\n from: '',\n valid: false,\n },\n {\n day: 6,\n to: '',\n from: '',\n valid: false,\n },\n];\n\nexport const generateTimeSlots = (step = 15) => {\n /* \n Generates a list of time strings from 12:00 AM to next 24 hours. Each new string\n will be generated by adding `step` minutes to the previous one.\n The list is generated by starting with a random day and adding step minutes till end of the same day.\n */\n const date = new Date(1970, 1, 1);\n const slots = [];\n while (date.getDate() === 1) {\n slots.push(\n date.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: true,\n })\n );\n date.setMinutes(date.getMinutes() + step);\n }\n return slots;\n};\n\nexport const getTime = (hour, minute) => {\n const merdian = hour > 11 ? 'PM' : 'AM';\n const modHour = hour > 12 ? hour % 12 : hour || 12;\n const parsedHour = modHour < 10 ? `0${modHour}` : modHour;\n const parsedMinute = minute < 10 ? `0${minute}` : minute;\n return `${parsedHour}:${parsedMinute} ${merdian}`;\n};\n\nexport const timeSlotParse = timeSlots => {\n return timeSlots.map(slot => {\n const {\n day_of_week: day,\n open_hour: openHour,\n open_minutes: openMinutes,\n close_hour: closeHour,\n close_minutes: closeMinutes,\n closed_all_day: closedAllDay,\n open_all_day: openAllDay,\n } = slot;\n const from = closedAllDay ? '' : getTime(openHour, openMinutes);\n const to = closedAllDay ? '' : getTime(closeHour, closeMinutes);\n\n return {\n day,\n to,\n from,\n valid: !closedAllDay,\n openAllDay,\n };\n });\n};\n\nexport const timeSlotTransform = timeSlots => {\n return timeSlots.map(slot => {\n const closed = slot.openAllDay ? false : !(slot.to && slot.from);\n const openAllDay = slot.openAllDay;\n let fromDate = '';\n let toDate = '';\n let openHour = '';\n let openMinutes = '';\n let closeHour = '';\n let closeMinutes = '';\n\n if (!closed) {\n fromDate = parse(slot.from, 'hh:mm a', new Date());\n toDate = parse(slot.to, 'hh:mm a', new Date());\n openHour = getHours(fromDate);\n openMinutes = getMinutes(fromDate);\n closeHour = getHours(toDate);\n closeMinutes = getMinutes(toDate);\n }\n\n return {\n day_of_week: slot.day,\n closed_all_day: closed,\n open_hour: openHour,\n open_minutes: openMinutes,\n close_hour: closeHour,\n close_minutes: closeMinutes,\n open_all_day: openAllDay,\n };\n });\n};\n\nexport const timeZoneOptions = () => {\n return Object.keys(timeZoneData).map(key => ({\n label: key,\n value: timeZoneData[key],\n }));\n};\n","import fromUnixTime from 'date-fns/fromUnixTime';\nimport format from 'date-fns/format';\nimport isToday from 'date-fns/isToday';\nimport isYesterday from 'date-fns/isYesterday';\nimport { endOfDay, getUnixTime, startOfDay, differenceInDays } from 'date-fns';\n\nexport const formatUnixDate = (date, dateFormat = 'MMM dd, yyyy') => {\n const unixDate = fromUnixTime(date);\n return format(unixDate, dateFormat);\n};\n\nexport const formatDate = ({ date, todayText, yesterdayText }) => {\n const dateValue = new Date(date);\n if (isToday(dateValue)) return todayText;\n if (isYesterday(dateValue)) return yesterdayText;\n return date;\n};\n\nexport const formatDigitToString = val => {\n return val > 9 ? `${val}` : `0${val}`;\n};\n\nexport const isTimeAfter = (h1, m1, h2, m2) => {\n if (h1 < h2) {\n return false;\n }\n\n if (h1 === h2) {\n return m1 >= m2;\n }\n\n return true;\n};\n\n/** Get start of day as a UNIX timestamp */\nexport const getUnixStartOfDay = date => getUnixTime(startOfDay(date));\n\n/** Get end of day as a UNIX timestamp */\nexport const getUnixEndOfDay = date => getUnixTime(endOfDay(date));\n\nexport const generateRelativeTime = (value, unit, languageCode) => {\n const code = languageCode?.replace(/_/g, '-'); // Hacky fix we need to handle it from source\n const rtf = new Intl.RelativeTimeFormat(code, {\n numeric: 'auto',\n });\n return rtf.format(value, unit);\n};\n\nexport const getDayDifferenceFromNow = (now, timestampInSeconds) => {\n const date = new Date(timestampInSeconds * 1000);\n return differenceInDays(now, date);\n};\n","/*!\n Name: vue-upload-component \nComponent URI: https://github.com/lian-yue/vue-upload-component#readme \nVersion: 3.1.16 \nAuthor: LianYue \nLicense: Apache-2.0 \nDescription: Vue.js file upload component, Multi-file upload, Upload directory, Drag upload, Drag the directory, Upload multiple files at the same time, html4 (IE 9), `PUT` method, Customize the filter \n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('vue')) :\n typeof define === 'function' && define.amd ? define(['vue'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.VueUploadComponent = factory(global.Vue));\n})(this, (function (vue) { 'use strict';\n\n function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\n function _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\n function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\n function _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\n function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\n function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n function _ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\n function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _ownKeys(Object(source), !0).forEach(function (key) { _defineProperty2(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : _ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\n function _defineProperty2(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n /**\n * Creates a XHR request\n *\n * @param {Object} options\n */\n\n\n var createRequest = function createRequest(options) {\n var xhr = new XMLHttpRequest();\n xhr.open(options.method || 'GET', options.url);\n xhr.responseType = 'json';\n\n if (options.headers) {\n Object.keys(options.headers).forEach(function (key) {\n xhr.setRequestHeader(key, options.headers[key]);\n });\n }\n\n return xhr;\n };\n /**\n * Sends a XHR request with certain body\n *\n * @param {XMLHttpRequest} xhr\n * @param {Object} body\n */\n\n\n var sendRequest = function sendRequest(xhr, body) {\n return new Promise(function (resolve, reject) {\n xhr.onload = function () {\n if (xhr.status >= 200 && xhr.status < 300) {\n var response;\n\n try {\n response = JSON.parse(xhr.response);\n } catch (err) {\n response = xhr.response;\n }\n\n resolve(response);\n } else {\n reject(xhr.response);\n }\n };\n\n xhr.onerror = function () {\n return reject(xhr.response);\n };\n\n xhr.send(JSON.stringify(body));\n });\n };\n /**\n * Sends a XHR request with certain form data\n *\n * @param {XMLHttpRequest} xhr\n * @param {Object} data\n */\n\n\n var sendFormRequest = function sendFormRequest(xhr, data) {\n var body = new FormData();\n\n for (var name in data) {\n body.append(name, data[name]);\n }\n\n return new Promise(function (resolve, reject) {\n xhr.onload = function () {\n if (xhr.status >= 200 && xhr.status < 300) {\n var response;\n\n try {\n response = JSON.parse(xhr.response);\n } catch (err) {\n response = xhr.response;\n }\n\n resolve(response);\n } else {\n reject(xhr.response);\n }\n };\n\n xhr.onerror = function () {\n return reject(xhr.response);\n };\n\n xhr.send(body);\n });\n };\n /**\n * Creates and sends XHR request\n *\n * @param {Object} options\n *\n * @returns Promise\n */\n\n\n function request(options) {\n var xhr = createRequest(options);\n return sendRequest(xhr, options.body);\n }\n\n var ChunkUploadHandler = /*#__PURE__*/function () {\n /**\n * Constructor\n *\n * @param {File} file\n * @param {Object} options\n */\n function ChunkUploadHandler(file, options) {\n _classCallCheck(this, ChunkUploadHandler);\n\n this.file = file;\n this.options = options;\n this.chunks = [];\n this.sessionId = null;\n this.chunkSize = null;\n this.speedInterval = null;\n }\n /**\n * Gets the max retries from options\n */\n\n\n _createClass(ChunkUploadHandler, [{\n key: \"maxRetries\",\n get: function get() {\n return parseInt(this.options.maxRetries, 10);\n }\n /**\n * Gets the max number of active chunks being uploaded at once from options\n */\n\n }, {\n key: \"maxActiveChunks\",\n get: function get() {\n return parseInt(this.options.maxActive, 10);\n }\n /**\n * Gets the file type\n */\n\n }, {\n key: \"fileType\",\n get: function get() {\n return this.file.type;\n }\n /**\n * Gets the file size\n */\n\n }, {\n key: \"fileSize\",\n get: function get() {\n return this.file.size;\n }\n /**\n * Gets the file name\n */\n\n }, {\n key: \"fileName\",\n get: function get() {\n return this.file.name;\n }\n /**\n * Gets action (url) to upload the file\n */\n\n }, {\n key: \"action\",\n get: function get() {\n return this.options.action || null;\n }\n /**\n * Gets the body to be merged when sending the request in start phase\n */\n\n }, {\n key: \"startBody\",\n get: function get() {\n return this.options.startBody || {};\n }\n /**\n * Gets the body to be merged when sending the request in upload phase\n */\n\n }, {\n key: \"uploadBody\",\n get: function get() {\n return this.options.uploadBody || {};\n }\n /**\n * Gets the body to be merged when sending the request in finish phase\n */\n\n }, {\n key: \"finishBody\",\n get: function get() {\n return this.options.finishBody || {};\n }\n /**\n * Gets the headers of the requests from options\n */\n\n }, {\n key: \"headers\",\n get: function get() {\n return this.options.headers || {};\n }\n /**\n * Whether it's ready to upload files or not\n */\n\n }, {\n key: \"readyToUpload\",\n get: function get() {\n return !!this.chunks;\n }\n /**\n * Gets the progress of the chunk upload\n * - Gets all the completed chunks\n * - Gets the progress of all the chunks that are being uploaded\n */\n\n }, {\n key: \"progress\",\n get: function get() {\n var _this = this;\n\n var completedProgress = this.chunksUploaded.length / this.chunks.length * 100;\n var uploadingProgress = this.chunksUploading.reduce(function (progress, chunk) {\n return progress + (chunk.progress | 0) / _this.chunks.length;\n }, 0);\n return Math.min(completedProgress + uploadingProgress, 100);\n }\n /**\n * Gets all the chunks that are pending to be uploaded\n */\n\n }, {\n key: \"chunksToUpload\",\n get: function get() {\n return this.chunks.filter(function (chunk) {\n return !chunk.active && !chunk.uploaded;\n });\n }\n /**\n * Whether there are chunks to upload or not\n */\n\n }, {\n key: \"hasChunksToUpload\",\n get: function get() {\n return this.chunksToUpload.length > 0;\n }\n /**\n * Gets all the chunks that are uploading\n */\n\n }, {\n key: \"chunksUploading\",\n get: function get() {\n return this.chunks.filter(function (chunk) {\n return !!chunk.xhr && !!chunk.active;\n });\n }\n /**\n * Gets all the chunks that have finished uploading\n */\n\n }, {\n key: \"chunksUploaded\",\n get: function get() {\n return this.chunks.filter(function (chunk) {\n return !!chunk.uploaded;\n });\n }\n /**\n * Creates all the chunks in the initial state\n */\n\n }, {\n key: \"createChunks\",\n value: function createChunks() {\n this.chunks = [];\n var start = 0;\n var end = this.chunkSize;\n\n while (start < this.fileSize) {\n this.chunks.push({\n blob: this.file.file.slice(start, end),\n startOffset: start,\n active: false,\n retries: this.maxRetries\n });\n start = end;\n end = start + this.chunkSize;\n }\n }\n /**\n * Updates the progress of the file with the handler's progress\n */\n\n }, {\n key: \"updateFileProgress\",\n value: function updateFileProgress() {\n this.file.progress = this.progress;\n }\n /**\n * Paues the upload process\n * - Stops all active requests\n * - Sets the file not active\n */\n\n }, {\n key: \"pause\",\n value: function pause() {\n this.file.active = false;\n this.stopChunks();\n }\n /**\n * Stops all the current chunks\n */\n\n }, {\n key: \"stopChunks\",\n value: function stopChunks() {\n this.chunksUploading.forEach(function (chunk) {\n chunk.xhr.abort();\n chunk.active = false;\n });\n this.stopSpeedCalc();\n }\n /**\n * Resumes the file upload\n * - Sets the file active\n * - Starts the following chunks\n */\n\n }, {\n key: \"resume\",\n value: function resume() {\n this.file.active = true;\n this.startChunking();\n }\n /**\n * Starts the file upload\n *\n * @returns Promise\n * - resolve The file was uploaded\n * - reject The file upload failed\n */\n\n }, {\n key: \"upload\",\n value: function upload() {\n var _this2 = this;\n\n this.promise = new Promise(function (resolve, reject) {\n _this2.resolve = resolve;\n _this2.reject = reject;\n });\n this.start();\n return this.promise;\n }\n /**\n * Start phase\n * Sends a request to the backend to initialise the chunks\n */\n\n }, {\n key: \"start\",\n value: function start() {\n var _this3 = this;\n\n request({\n method: 'POST',\n headers: _objectSpread2(_objectSpread2({}, this.headers), {}, {\n 'Content-Type': 'application/json'\n }),\n url: this.action,\n body: Object.assign(this.startBody, {\n phase: 'start',\n mime_type: this.fileType,\n size: this.fileSize,\n name: this.fileName\n })\n }).then(function (res) {\n if (res.status !== 'success') {\n _this3.file.response = res;\n return _this3.reject('server');\n }\n\n _this3.sessionId = res.data.session_id;\n _this3.chunkSize = res.data.end_offset;\n\n _this3.createChunks();\n\n _this3.startChunking();\n }).catch(function (res) {\n _this3.file.response = res;\n\n _this3.reject('server');\n });\n }\n /**\n * Starts to upload chunks\n */\n\n }, {\n key: \"startChunking\",\n value: function startChunking() {\n for (var i = 0; i < this.maxActiveChunks; i++) {\n this.uploadNextChunk();\n }\n\n this.startSpeedCalc();\n }\n /**\n * Uploads the next chunk\n * - Won't do anything if the process is paused\n * - Will start finish phase if there are no more chunks to upload\n */\n\n }, {\n key: \"uploadNextChunk\",\n value: function uploadNextChunk() {\n if (this.file.active) {\n if (this.hasChunksToUpload) {\n return this.uploadChunk(this.chunksToUpload[0]);\n }\n\n if (this.chunksUploading.length === 0) {\n return this.finish();\n }\n }\n }\n /**\n * Uploads a chunk\n * - Sends the chunk to the backend\n * - Sets the chunk as uploaded if everything went well\n * - Decreases the number of retries if anything went wrong\n * - Fails if there are no more retries\n *\n * @param {Object} chunk\n */\n\n }, {\n key: \"uploadChunk\",\n value: function uploadChunk(chunk) {\n var _this4 = this;\n\n chunk.progress = 0;\n chunk.active = true;\n this.updateFileProgress();\n chunk.xhr = createRequest({\n method: 'POST',\n headers: this.headers,\n url: this.action\n });\n chunk.xhr.upload.addEventListener('progress', function (evt) {\n if (evt.lengthComputable) {\n chunk.progress = Math.round(evt.loaded / evt.total * 100);\n }\n }, false);\n sendFormRequest(chunk.xhr, Object.assign(this.uploadBody, {\n phase: 'upload',\n session_id: this.sessionId,\n start_offset: chunk.startOffset,\n chunk: chunk.blob\n })).then(function (res) {\n chunk.active = false;\n\n if (res.status === 'success') {\n chunk.uploaded = true;\n } else {\n if (chunk.retries-- <= 0) {\n _this4.stopChunks();\n\n return _this4.reject('upload');\n }\n }\n\n _this4.uploadNextChunk();\n }).catch(function () {\n chunk.active = false;\n\n if (chunk.retries-- <= 0) {\n _this4.stopChunks();\n\n return _this4.reject('upload');\n }\n\n _this4.uploadNextChunk();\n });\n }\n /**\n * Finish phase\n * Sends a request to the backend to finish the process\n */\n\n }, {\n key: \"finish\",\n value: function finish() {\n var _this5 = this;\n\n this.updateFileProgress();\n this.stopSpeedCalc();\n request({\n method: 'POST',\n headers: _objectSpread2(_objectSpread2({}, this.headers), {}, {\n 'Content-Type': 'application/json'\n }),\n url: this.action,\n body: Object.assign(this.finishBody, {\n phase: 'finish',\n session_id: this.sessionId\n })\n }).then(function (res) {\n _this5.file.response = res;\n\n if (res.status !== 'success') {\n return _this5.reject('server');\n }\n\n _this5.resolve(res);\n }).catch(function (res) {\n _this5.file.response = res;\n\n _this5.reject('server');\n });\n }\n /**\n * Sets an interval to calculate and\n * set upload speed every 3 seconds\n */\n\n }, {\n key: \"startSpeedCalc\",\n value: function startSpeedCalc() {\n var _this6 = this;\n\n this.file.speed = 0;\n var lastUploadedBytes = 0;\n\n if (!this.speedInterval) {\n this.speedInterval = window.setInterval(function () {\n var uploadedBytes = _this6.progress / 100 * _this6.fileSize;\n _this6.file.speed = uploadedBytes - lastUploadedBytes;\n lastUploadedBytes = uploadedBytes;\n }, 1000);\n }\n }\n /**\n * Removes the upload speed interval\n */\n\n }, {\n key: \"stopSpeedCalc\",\n value: function stopSpeedCalc() {\n this.speedInterval && window.clearInterval(this.speedInterval);\n this.speedInterval = null;\n this.file.speed = 0;\n }\n }]);\n\n return ChunkUploadHandler;\n }();\n\n var CHUNK_DEFAULT_OPTIONS = {\n headers: {},\n action: '',\n minSize: 1048576,\n maxActive: 3,\n maxRetries: 5,\n handler: ChunkUploadHandler\n };\n var script = vue.defineComponent({\n compatConfig: {\n MODE: 3\n },\n props: {\n inputId: {\n type: String\n },\n name: {\n type: String,\n default: 'file'\n },\n accept: {\n type: String\n },\n capture: {},\n disabled: {\n default: false\n },\n multiple: {\n type: Boolean,\n default: false\n },\n maximum: {\n type: Number\n },\n addIndex: {\n type: [Boolean, Number]\n },\n directory: {\n type: Boolean\n },\n createDirectory: {\n type: Boolean,\n default: false\n },\n postAction: {\n type: String\n },\n putAction: {\n type: String\n },\n customAction: {\n type: Function\n },\n headers: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n data: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n timeout: {\n type: Number,\n default: 0\n },\n drop: {\n type: [Boolean, String, HTMLElement],\n default: function _default() {\n return false;\n }\n },\n dropDirectory: {\n type: Boolean,\n default: true\n },\n size: {\n type: Number,\n default: 0\n },\n extensions: {\n type: [RegExp, String, Array],\n default: function _default() {\n return [];\n }\n },\n modelValue: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n thread: {\n type: Number,\n default: 1\n },\n // Chunk upload enabled\n chunkEnabled: {\n type: Boolean,\n default: false\n },\n // Chunk upload properties\n chunk: {\n type: Object,\n default: function _default() {\n return CHUNK_DEFAULT_OPTIONS;\n }\n }\n },\n emits: ['update:modelValue', 'input-filter', 'input-file'],\n data: function data() {\n return {\n files: this.modelValue,\n features: {\n html5: true,\n directory: false,\n drop: false\n },\n active: false,\n dropActive: false,\n dropElementActive: false,\n uploading: 0,\n destroy: false,\n maps: {},\n dropElement: null,\n dropTimeout: null,\n reload: false\n };\n },\n\n /**\r\n * mounted\r\n * @return {[type]} [description]\r\n */\n mounted: function mounted() {\n var _this7 = this;\n\n var input = document.createElement('input');\n input.type = 'file';\n input.multiple = true; // html5 特å¾\n\n if (window.FormData && input.files) {\n // ä¸Šä¼ ç›®å½•ç‰¹å¾\n // @ts-ignore\n if (typeof input.webkitdirectory === 'boolean' || typeof input.directory === 'boolean') {\n this.features.directory = true;\n } // 拖拽特å¾. è¦å…¼å®¹ relatedTarget\n\n\n if (this.features.html5 && typeof input.ondrop !== 'undefined' && this.isRelatedTargetSupported()) {\n this.features.drop = true;\n }\n } else {\n this.features.html5 = false;\n } // files 定ä½ç¼“å˜\n\n\n this.maps = {};\n\n if (this.files) {\n for (var i = 0; i < this.files.length; i++) {\n var file = this.files[i];\n this.maps[file.id] = file;\n }\n } // @ts-ignore\n\n\n this.$nextTick(function () {\n // 更新下父级\n if (_this7.$parent) {\n _this7.$parent.$forceUpdate(); // 拖拽渲染\n\n\n _this7.$parent.$nextTick(function () {\n _this7.watchDrop(_this7.drop);\n });\n } else {\n // 拖拽渲染\n _this7.watchDrop(_this7.drop);\n }\n });\n },\n\n /**\r\n * beforeUnmount\r\n * @return {[type]} [description]\r\n */\n beforeUnmount: function beforeUnmount() {\n // 已销æ¯\n this.destroy = true; // 设置æˆä¸æ¿€æ´»\n\n this.active = false; // 销æ¯æ‹–拽事件\n\n this.watchDrop(false); // 销æ¯ä¸æ¿€æ´»\n\n this.watchActive(false);\n },\n computed: {\n /**\r\n * uploading æ£åœ¨ä¸Šä¼ 的线程\r\n * @return {[type]} [description]\r\n */\n\n /**\r\n * uploaded 文件列表是å¦å…¨éƒ¨å·²ä¸Šä¼ \r\n * @return {[type]} [description]\r\n */\n uploaded: function uploaded() {\n var file;\n\n for (var i = 0; i < this.files.length; i++) {\n file = this.files[i];\n\n if (file.fileObject && !file.error && !file.success) {\n return false;\n }\n }\n\n return true;\n },\n chunkOptions: function chunkOptions() {\n return Object.assign(CHUNK_DEFAULT_OPTIONS, this.chunk);\n },\n className: function className() {\n return ['file-uploads', this.features.html5 ? 'file-uploads-html5' : 'file-uploads-html4', this.features.directory && this.directory ? 'file-uploads-directory' : undefined, this.features.drop && this.drop ? 'file-uploads-drop' : undefined, this.disabled ? 'file-uploads-disabled' : undefined];\n },\n forId: function forId() {\n return this.inputId || this.name;\n },\n iMaximum: function iMaximum() {\n if (this.maximum === undefined) {\n return this.multiple ? 0 : 1;\n }\n\n return this.maximum;\n },\n iExtensions: function iExtensions() {\n if (!this.extensions) {\n return;\n }\n\n if (this.extensions instanceof RegExp) {\n return this.extensions;\n }\n\n if (!this.extensions.length) {\n return;\n }\n\n var exts = [];\n\n if (typeof this.extensions === 'string') {\n exts = this.extensions.split(',');\n } else {\n exts = this.extensions;\n }\n\n exts = exts.map(function (value) {\n return value.trim();\n }).filter(function (value) {\n return value;\n });\n return new RegExp('\\\\.(' + exts.join('|').replace(/\\./g, '\\\\.') + ')$', 'i');\n },\n iDirectory: function iDirectory() {\n if (this.directory && this.features.directory) {\n return true;\n }\n\n return undefined;\n }\n },\n watch: {\n active: function active(_active) {\n this.watchActive(_active);\n },\n dropActive: function dropActive(value) {\n this.watchDropActive(value);\n\n if (this.$parent) {\n this.$parent.$forceUpdate();\n }\n },\n drop: function drop(value) {\n this.watchDrop(value);\n },\n modelValue: function modelValue(files) {\n if (this.files === files) {\n return;\n }\n\n this.files = files;\n var oldMaps = this.maps; // é‡å†™ maps 缓å˜\n\n this.maps = {};\n\n for (var i = 0; i < this.files.length; i++) {\n var file = this.files[i];\n this.maps[file.id] = file;\n } // add, update\n\n\n for (var key in this.maps) {\n var newFile = this.maps[key];\n var oldFile = oldMaps[key];\n\n if (newFile !== oldFile) {\n this.emitFile(newFile, oldFile);\n }\n } // delete\n\n\n for (var _key in oldMaps) {\n if (!this.maps[_key]) {\n this.emitFile(undefined, oldMaps[_key]);\n }\n }\n }\n },\n methods: {\n newId: function newId() {\n return Math.random().toString(36).substr(2);\n },\n // 清空\n clear: function clear() {\n if (this.files.length) {\n var files = this.files;\n this.files = []; // 定ä½\n\n this.maps = {}; // 事件\n\n this.emitInput();\n\n for (var i = 0; i < files.length; i++) {\n this.emitFile(undefined, files[i]);\n }\n }\n\n return true;\n },\n // 选择\n get: function get(id) {\n if (!id) {\n return false;\n }\n\n if (_typeof(id) === 'object') {\n return this.maps[id.id || ''] || false;\n }\n\n return this.maps[id] || false;\n },\n // æ·»åŠ \n add: function add(_files, index) {\n // ä¸æ˜¯æ•°ç»„æ•´ç†æˆæ•°ç»„\n var files;\n\n if (_files instanceof Array) {\n files = _files;\n } else {\n files = [_files];\n }\n\n if (index === undefined) {\n // eslint-disable-next-line\n index = this.addIndex;\n } // é历规范对象\n\n\n var addFiles = [];\n\n for (var i = 0; i < files.length; i++) {\n var file = files[i];\n\n if (this.features.html5 && file instanceof Blob) {\n file = {\n id: '',\n file: file,\n size: file.size,\n // @ts-ignore\n name: file.webkitRelativePath || file.relativePath || file.name || 'unknown',\n type: file.type\n };\n }\n\n file = file;\n var fileObject = false;\n if (file.fileObject === false) ;else if (file.fileObject) {\n fileObject = true;\n } else if (typeof Element !== 'undefined' && file.el instanceof HTMLInputElement) {\n fileObject = true;\n } else if (typeof Blob !== 'undefined' && file.file instanceof Blob) {\n fileObject = true;\n }\n\n if (fileObject) {\n file = _objectSpread(_objectSpread({\n fileObject: true,\n size: -1,\n name: 'Filename',\n type: '',\n active: false,\n error: '',\n success: false,\n putAction: this.putAction,\n postAction: this.postAction,\n timeout: this.timeout\n }, file), {}, {\n response: {},\n progress: '0.00',\n speed: 0 // åªè¯»\n // file: undefined,\n // xhr: undefined,\n // el: undefined,\n // iframe: undefined,\n\n });\n file.data = _objectSpread(_objectSpread({}, this.data), file.data ? file.data : {});\n file.headers = _objectSpread(_objectSpread({}, this.headers), file.headers ? file.headers : {});\n } // å¿…é¡»åŒ…å« id\n\n\n if (!file.id) {\n file.id = this.newId();\n }\n\n if (this.emitFilter(file, undefined)) {\n continue;\n } // 最大数é‡é™åˆ¶\n\n\n if (this.iMaximum > 1 && addFiles.length + this.files.length >= this.iMaximum) {\n break;\n }\n\n addFiles.push(file); // 最大数é‡é™åˆ¶\n\n if (this.iMaximum === 1) {\n break;\n }\n } // 没有文件\n\n\n if (!addFiles.length) {\n return;\n } // 如果是 1 清空\n\n\n if (this.iMaximum === 1) {\n this.clear();\n } // æ·»åŠ è¿›åŽ» files\n\n\n var newFiles;\n\n if (index === true || index === 0) {\n newFiles = addFiles.concat(this.files);\n } else if (index) {\n var _newFiles;\n\n newFiles = this.files.concat([]);\n\n (_newFiles = newFiles).splice.apply(_newFiles, [index, 0].concat(_toConsumableArray(addFiles)));\n } else {\n newFiles = this.files.concat(addFiles);\n }\n\n this.files = newFiles; // 读å–代ç†åŽçš„æ•°æ®\n\n var index2 = 0;\n\n if (index === true || index === 0) {\n index2 = 0;\n } else if (index) {\n if (index >= 0) {\n if (index + addFiles.length > this.files.length) {\n index2 = this.files.length - addFiles.length;\n } else {\n index2 = index;\n }\n } else {\n index2 = this.files.length - addFiles.length + index;\n\n if (index2 < 0) {\n index2 = 0;\n }\n }\n } else {\n index2 = this.files.length - addFiles.length;\n }\n\n addFiles = this.files.slice(index2, index2 + addFiles.length); // 定ä½\n\n for (var _i = 0; _i < addFiles.length; _i++) {\n var _file = addFiles[_i];\n this.maps[_file.id] = _file;\n } // 事件\n\n\n this.emitInput();\n\n for (var _i2 = 0; _i2 < addFiles.length; _i2++) {\n this.emitFile(addFiles[_i2], undefined);\n }\n\n return _files instanceof Array ? addFiles : addFiles[0];\n },\n // æ·»åŠ è¡¨å•æ–‡ä»¶\n addInputFile: function addInputFile(el) {\n var _this8 = this;\n\n var files = [];\n this.iMaximum; // @ts-ignore\n\n var entrys = el.webkitEntries || el.entries || undefined;\n\n if (entrys !== null && entrys !== void 0 && entrys.length) {\n return this.getFileSystemEntry(entrys).then(function (files) {\n return _this8.add(files);\n });\n }\n\n if (el.files) {\n for (var i = 0; i < el.files.length; i++) {\n var file = el.files[i];\n files.push({\n id: '',\n size: file.size,\n // @ts-ignore\n name: file.webkitRelativePath || file.relativePath || file.name,\n type: file.type,\n file: file\n });\n }\n } else {\n var names = el.value.replace(/\\\\/g, '/').split('/');\n\n if (!names || !names.length) {\n names = [el.value];\n } // @ts-ignore\n\n\n delete el.__vuex__;\n files.push({\n id: '',\n name: names[names.length - 1],\n el: el\n });\n }\n\n return Promise.resolve(this.add(files));\n },\n // æ·»åŠ DataTransfer\n addDataTransfer: function addDataTransfer(dataTransfer) {\n var _dataTransfer$items,\n _this9 = this;\n\n // dataTransfer.items 支æŒ\n if (dataTransfer !== null && dataTransfer !== void 0 && (_dataTransfer$items = dataTransfer.items) !== null && _dataTransfer$items !== void 0 && _dataTransfer$items.length) {\n var entrys = []; // é历出所有 dataTransferVueUploadItem\n\n for (var i = 0; i < dataTransfer.items.length; i++) {\n var dataTransferTtem = dataTransfer.items[i];\n var entry = void 0; // @ts-ignore\n\n if (dataTransferTtem.getAsEntry) {\n // @ts-ignore\n entry = dataTransferTtem.getAsEntry() || dataTransferTtem.getAsFile();\n } else if (dataTransferTtem.webkitGetAsEntry) {\n entry = dataTransferTtem.webkitGetAsEntry() || dataTransferTtem.getAsFile();\n } else {\n entry = dataTransferTtem.getAsFile();\n }\n\n if (entry) {\n entrys.push(entry);\n }\n }\n\n return this.getFileSystemEntry(entrys).then(function (files) {\n return _this9.add(files);\n });\n } // dataTransfer.files 支æŒ\n\n\n var maximumValue = this.iMaximum;\n var files = [];\n\n if (dataTransfer.files.length) {\n for (var _i3 = 0; _i3 < dataTransfer.files.length; _i3++) {\n files.push(dataTransfer.files[_i3]);\n\n if (maximumValue > 0 && files.length >= maximumValue) {\n break;\n }\n }\n\n return Promise.resolve(this.add(files));\n }\n\n return Promise.resolve([]);\n },\n // 获得 entrys \n getFileSystemEntry: function getFileSystemEntry(entry) {\n var _this10 = this;\n\n var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n // getFileSystemEntry(entry: any, path = ''): Promise<VueUploadItem[]> {\n return new Promise(function (resolve) {\n var maximumValue = _this10.iMaximum;\n\n if (!entry) {\n resolve([]);\n return;\n }\n\n if (entry instanceof Array) {\n // 多个\n var uploadFiles = [];\n\n var forEach = function forEach(i) {\n var v = entry[i];\n\n if (!v || maximumValue > 0 && uploadFiles.length >= maximumValue) {\n return resolve(uploadFiles);\n }\n\n _this10.getFileSystemEntry(v, path).then(function (results) {\n uploadFiles.push.apply(uploadFiles, _toConsumableArray(results));\n forEach(i + 1);\n });\n };\n\n forEach(0);\n return;\n }\n\n if (entry instanceof Blob) {\n resolve([{\n id: '',\n size: entry.size,\n // @ts-ignore\n name: path + entry.name,\n type: entry.type,\n file: entry\n }]);\n return;\n }\n\n if (entry.isFile) {\n var fileEntry = entry;\n fileEntry.file(function (file) {\n resolve([{\n id: '',\n size: file.size,\n name: path + file.name,\n type: file.type,\n file: file\n }]);\n });\n return;\n }\n\n if (entry.isDirectory && _this10.dropDirectory) {\n var directoryEntry = entry;\n var _uploadFiles = []; // 目录也è¦æ·»åŠ 到文件列表\n\n if (_this10.createDirectory) {\n _uploadFiles.push({\n id: '',\n name: path + directoryEntry.name,\n size: 0,\n type: 'text/directory',\n file: new File([], path + directoryEntry.name, {\n type: 'text/directory'\n })\n });\n }\n\n var dirReader = directoryEntry.createReader();\n\n var readEntries = function readEntries() {\n dirReader.readEntries(function (entries) {\n var forEach = function forEach(i) {\n if (!entries[i] && i === 0 || maximumValue > 0 && _uploadFiles.length >= maximumValue) {\n return resolve(_uploadFiles);\n }\n\n if (!entries[i]) {\n return readEntries();\n }\n\n _this10.getFileSystemEntry(entries[i], path + directoryEntry.name + '/').then(function (results) {\n _uploadFiles.push.apply(_uploadFiles, _toConsumableArray(results));\n\n forEach(i + 1);\n });\n };\n\n forEach(0);\n });\n };\n\n readEntries();\n return;\n }\n\n resolve([]);\n });\n },\n // 替æ¢\n replace: function replace(id1, id2) {\n var file1 = this.get(id1);\n var file2 = this.get(id2);\n\n if (!file1 || !file2 || file1 === file2) {\n return false;\n }\n\n var files = this.files.concat([]);\n var index1 = files.indexOf(file1);\n var index2 = files.indexOf(file2);\n\n if (index1 === -1 || index2 === -1) {\n return false;\n }\n\n files[index1] = file2;\n files[index2] = file1;\n this.files = files;\n this.emitInput();\n return true;\n },\n // 移除\n remove: function remove(id) {\n var file = this.get(id);\n\n if (file) {\n if (this.emitFilter(undefined, file)) {\n return false;\n }\n\n var files = this.files.concat([]);\n var index = files.indexOf(file);\n\n if (index === -1) {\n console.error('remove', file);\n return false;\n }\n\n files.splice(index, 1);\n this.files = files; // 定ä½\n\n delete this.maps[file.id]; // 事件\n\n this.emitInput();\n this.emitFile(undefined, file);\n }\n\n return file;\n },\n // æ›´æ–°\n update: function update(id, data) {\n var file = this.get(id);\n\n if (file) {\n var newFile = _objectSpread(_objectSpread({}, file), data); // åœç”¨å¿…é¡»åŠ ä¸Šé”™è¯¯\n\n\n if (file.fileObject && file.active && !newFile.active && !newFile.error && !newFile.success) {\n newFile.error = 'abort';\n }\n\n if (this.emitFilter(newFile, file)) {\n return false;\n }\n\n var files = this.files.concat([]);\n var index = files.indexOf(file);\n\n if (index === -1) {\n console.error('update', file);\n return false;\n }\n\n files.splice(index, 1, newFile);\n this.files = files;\n newFile = this.files[index]; // åˆ é™¤ æ—§å®šä½ å†™å…¥ æ–°å®šä½ ï¼ˆå·²ä¾¿æ”¯æŒä¿®æ”¹id)\n\n delete this.maps[file.id];\n this.maps[newFile.id] = newFile; // 事件\n\n this.emitInput();\n this.emitFile(newFile, file);\n return newFile;\n }\n\n return false;\n },\n // é¢„å¤„ç† äº‹ä»¶ 过滤器\n emitFilter: function emitFilter(newFile, oldFile) {\n var isPrevent = false;\n this.$emit('input-filter', newFile, oldFile, function () {\n var prevent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n isPrevent = prevent;\n return isPrevent;\n });\n return isPrevent;\n },\n // 处ç†åŽ 事件 分å‘\n emitFile: function emitFile(newFile, oldFile) {\n var _newFile,\n _this11 = this;\n\n this.$emit('input-file', newFile, oldFile);\n\n if ((_newFile = newFile) !== null && _newFile !== void 0 && _newFile.fileObject && newFile.active && (!oldFile || !oldFile.active)) {\n this.uploading++; // 激活\n // @ts-ignore\n\n this.$nextTick(function () {\n setTimeout(function () {\n newFile && _this11.upload(newFile).then(function () {\n var _newFile2;\n\n if (newFile) {\n // eslint-disable-next-line\n newFile = _this11.get(newFile) || undefined;\n }\n\n if ((_newFile2 = newFile) !== null && _newFile2 !== void 0 && _newFile2.fileObject) {\n _this11.update(newFile, {\n active: false,\n success: !newFile.error\n });\n }\n }).catch(function (e) {\n newFile && _this11.update(newFile, {\n active: false,\n success: false,\n error: e.code || e.error || e.message || e\n });\n });\n }, Math.ceil(Math.random() * 50 + 50));\n });\n } else if ((!newFile || !newFile.fileObject || !newFile.active) && oldFile && oldFile.fileObject && oldFile.active) {\n // åœæ¢\n this.uploading--;\n } // 自动延ç»æ¿€æ´»\n // @ts-ignore\n\n\n if (this.active && (Boolean(newFile) !== Boolean(oldFile) || newFile.active !== oldFile.active)) {\n this.watchActive(true);\n }\n },\n emitInput: function emitInput() {\n this.$emit('update:modelValue', this.files);\n },\n // ä¸Šä¼ \n upload: function upload(id) {\n var file = this.get(id); // è¢«åˆ é™¤\n\n if (!file) {\n return Promise.reject(new Error('not_exists'));\n } // ä¸æ˜¯æ–‡ä»¶å¯¹è±¡\n\n\n if (!file.fileObject) {\n return Promise.reject(new Error('file_object'));\n } // 有错误直接å“应\n\n\n if (file.error) {\n if (file.error instanceof Error) {\n return Promise.reject(file.error);\n }\n\n return Promise.reject(new Error(file.error));\n } // 已完æˆç›´æŽ¥å“应\n\n\n if (file.success) {\n return Promise.resolve(file);\n } // åŽç¼€\n\n\n if (file.name && this.iExtensions && file.type !== \"text/directory\") {\n if (file.name.search(this.iExtensions) === -1) {\n return Promise.reject(new Error('extension'));\n }\n } // 大å°\n\n\n if (this.size > 0 && file.size !== undefined && file.size >= 0 && file.size > this.size && file.type !== \"text/directory\") {\n return Promise.reject(new Error('size'));\n }\n\n if (this.customAction) {\n return this.customAction(file, this);\n }\n\n if (this.features.html5) {\n if (this.shouldUseChunkUpload(file)) {\n return this.uploadChunk(file);\n }\n\n if (file.putAction) {\n return this.uploadPut(file);\n }\n\n if (file.postAction) {\n return this.uploadHtml5(file);\n }\n }\n\n if (file.postAction) {\n return this.uploadHtml4(file);\n }\n\n return Promise.reject(new Error('No action configured'));\n },\n\n /**\r\n * Whether this file should be uploaded using chunk upload or not\r\n *\r\n * @param Object file\r\n */\n shouldUseChunkUpload: function shouldUseChunkUpload(file) {\n return this.chunkEnabled && !!this.chunkOptions.handler && file.size && file.size > this.chunkOptions.minSize;\n },\n\n /**\r\n * Upload a file using Chunk method\r\n *\r\n * @param File file\r\n */\n uploadChunk: function uploadChunk(file) {\n var HandlerClass = this.chunkOptions.handler;\n file.chunk = new HandlerClass(file, this.chunkOptions);\n return file.chunk.upload().then(function (res) {\n return file;\n });\n },\n uploadPut: function uploadPut(file) {\n var querys = [];\n var value;\n\n for (var key in file.data) {\n value = file.data[key];\n\n if (value !== null && value !== undefined) {\n querys.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n }\n }\n\n var putAction = file.putAction || '';\n var queryString = querys.length ? (putAction.indexOf('?') === -1 ? '?' : '&') + querys.join('&') : '';\n var xhr = new XMLHttpRequest();\n xhr.open('PUT', putAction + queryString);\n return this.uploadXhr(xhr, file, file.file);\n },\n uploadHtml5: function uploadHtml5(file) {\n var form = new window.FormData();\n var value;\n\n for (var key in file.data) {\n value = file.data[key];\n\n if (value && _typeof(value) === 'object' && typeof value.toString !== 'function') {\n if (value instanceof File) {\n form.append(key, value, value.name);\n } else {\n form.append(key, JSON.stringify(value));\n }\n } else if (value !== null && value !== undefined) {\n form.append(key, value);\n }\n } // Moved file.name as the first option to set the filename of the uploaded file, since file.name\n // contains the full (relative) path of the file not just the filename as in file.file.filename\n // @ts-ignore\n\n\n form.append(this.name, file.file, file.name || file.file.name || file.file.filename);\n var xhr = new XMLHttpRequest();\n xhr.open('POST', file.postAction || '');\n return this.uploadXhr(xhr, file, form);\n },\n uploadXhr: function uploadXhr(xhr, ufile, body) {\n var _this12 = this;\n\n var file = ufile;\n var speedTime = 0;\n var speedLoaded = 0; // 进度æ¡\n\n xhr.upload.onprogress = function (e) {\n // è¿˜æœªå¼€å§‹ä¸Šä¼ å·²åˆ é™¤ 未激活\n if (!file) {\n return;\n }\n\n file = _this12.get(file);\n\n if (!e.lengthComputable || !file || !file.fileObject || !file.active) {\n return;\n } // 进度 速度 æ¯ç§’更新一次\n\n\n var speedTime2 = Math.round(Date.now() / 1000);\n\n if (speedTime2 === speedTime) {\n return;\n }\n\n speedTime = speedTime2;\n file = _this12.update(file, {\n progress: (e.loaded / e.total * 100).toFixed(2),\n speed: e.loaded - speedLoaded\n });\n speedLoaded = e.loaded;\n }; // 检查激活状æ€\n\n\n var interval = window.setInterval(function () {\n if (file) {\n if (file = _this12.get(file)) {\n var _file2;\n\n if ((_file2 = file) !== null && _file2 !== void 0 && _file2.fileObject && !file.success && !file.error && file.active) {\n return;\n }\n }\n }\n\n if (interval) {\n clearInterval(interval);\n interval = undefined;\n }\n\n try {\n xhr.abort();\n xhr.timeout = 1;\n } catch (e) {}\n }, 100);\n return new Promise(function (resolve, reject) {\n if (!file) {\n reject(new Error('not_exists'));\n return;\n }\n\n var complete;\n\n var fn = function fn(e) {\n // å·²ç»å¤„ç†è¿‡äº†\n if (complete) {\n return;\n }\n\n complete = true;\n\n if (interval) {\n clearInterval(interval);\n interval = undefined;\n }\n\n if (!file) {\n return reject(new Error('not_exists'));\n }\n\n file = _this12.get(file); // ä¸å˜åœ¨ç›´æŽ¥å“应\n\n if (!file) {\n return reject(new Error('not_exists'));\n } // ä¸æ˜¯æ–‡ä»¶å¯¹è±¡\n\n\n if (!file.fileObject) {\n return reject(new Error('file_object'));\n } // 有错误自动å“应\n\n\n if (file.error) {\n if (file.error instanceof Error) {\n return reject(file.error);\n }\n\n return reject(new Error(file.error));\n } // 未激活\n\n\n if (!file.active) {\n return reject(new Error('abort'));\n } // å·²å®Œæˆ ç›´æŽ¥ç›¸åº”\n\n\n if (file.success) {\n return resolve(file);\n }\n\n var data = {};\n\n switch (e.type) {\n case 'timeout':\n case 'abort':\n data.error = e.type;\n break;\n\n case 'error':\n if (!xhr.status) {\n data.error = 'network';\n } else if (xhr.status >= 500) {\n data.error = 'server';\n } else if (xhr.status >= 400) {\n data.error = 'denied';\n }\n\n break;\n\n default:\n if (xhr.status >= 500) {\n data.error = 'server';\n } else if (xhr.status >= 400) {\n data.error = 'denied';\n } else {\n data.progress = '100.00';\n }\n\n }\n\n if (xhr.responseText) {\n var contentType = xhr.getResponseHeader('Content-Type');\n\n if (contentType && contentType.indexOf('/json') !== -1) {\n data.response = JSON.parse(xhr.responseText);\n } else {\n data.response = xhr.responseText;\n }\n } // æ›´æ–°\n // @ts-ignore\n\n\n file = _this12.update(file, data);\n\n if (!file) {\n return reject(new Error('abort'));\n } // 有错误自动å“应\n\n\n if (file.error) {\n if (file.error instanceof Error) {\n return reject(file.error);\n }\n\n return reject(new Error(file.error));\n } // å“应\n\n\n return resolve(file);\n }; // 事件\n\n\n xhr.onload = fn;\n xhr.onerror = fn;\n xhr.onabort = fn;\n xhr.ontimeout = fn; // 超时\n\n if (file.timeout) {\n xhr.timeout = file.timeout;\n } // headers\n\n\n for (var key in file.headers) {\n xhr.setRequestHeader(key, file.headers[key]);\n } // æ›´æ–° xhr\n // @ts-ignore\n\n\n file = _this12.update(file, {\n xhr: xhr\n }); // å¼€å§‹ä¸Šä¼ \n\n file && xhr.send(body);\n });\n },\n uploadHtml4: function uploadHtml4(ufile) {\n var _this13 = this;\n\n var file = ufile;\n\n if (!file) {\n return Promise.reject(new Error('not_exists'));\n }\n\n var onKeydown = function onKeydown(e) {\n if (e.keyCode === 27) {\n e.preventDefault();\n }\n };\n\n var iframe = document.createElement('iframe');\n iframe.id = 'upload-iframe-' + file.id;\n iframe.name = 'upload-iframe-' + file.id;\n iframe.src = 'about:blank';\n iframe.setAttribute('style', 'width:1px;height:1px;top:-999em;position:absolute; margin-top:-999em;');\n var form = document.createElement('form');\n form.setAttribute('action', file.postAction || '');\n form.name = 'upload-form-' + file.id;\n form.setAttribute('method', 'POST');\n form.setAttribute('target', 'upload-iframe-' + file.id);\n form.setAttribute('enctype', 'multipart/form-data');\n\n for (var key in file.data) {\n var value = file.data[key];\n\n if (value && _typeof(value) === 'object' && typeof value.toString !== 'function') {\n value = JSON.stringify(value);\n }\n\n if (value !== null && value !== undefined) {\n var el = document.createElement('input');\n el.type = 'hidden';\n el.name = key;\n el.value = value;\n form.appendChild(el);\n }\n }\n\n form.appendChild(file.el);\n document.body.appendChild(iframe).appendChild(form);\n\n var getResponseData = function getResponseData() {\n var _doc;\n\n var doc;\n\n try {\n if (iframe.contentWindow) {\n doc = iframe.contentWindow.document;\n }\n } catch (err) {}\n\n if (!doc) {\n try {\n // @ts-ignore\n doc = iframe.contentDocument ? iframe.contentDocument : iframe.document;\n } catch (err) {\n // @ts-ignore\n doc = iframe.document;\n }\n } // @ts-ignore\n\n\n if ((_doc = doc) !== null && _doc !== void 0 && _doc.body) {\n return doc.body.innerHTML;\n }\n\n return null;\n };\n\n return new Promise(function (resolve, reject) {\n setTimeout(function () {\n if (!file) {\n reject(new Error('not_exists'));\n return;\n }\n\n file = _this13.update(file, {\n iframe: iframe\n }); // ä¸å˜åœ¨\n\n if (!file) {\n return reject(new Error('not_exists'));\n } // 定时检查\n\n\n var interval = window.setInterval(function () {\n if (file) {\n if (file = _this13.get(file)) {\n if (file.fileObject && !file.success && !file.error && file.active) {\n return;\n }\n }\n }\n\n if (interval) {\n clearInterval(interval);\n interval = undefined;\n } // @ts-ignore\n\n\n iframe.onabort({\n type: file ? 'abort' : 'not_exists'\n });\n }, 100);\n var complete;\n\n var fn = function fn(e) {\n var _file3;\n\n // å·²ç»å¤„ç†è¿‡äº†\n if (complete) {\n return;\n }\n\n complete = true;\n\n if (interval) {\n clearInterval(interval);\n interval = undefined;\n } // å…³é— esc 事件\n\n\n document.body.removeEventListener('keydown', onKeydown);\n\n if (!file) {\n return reject(new Error('not_exists'));\n }\n\n file = _this13.get(file); // ä¸å˜åœ¨ç›´æŽ¥å“应\n\n if (!file) {\n return reject(new Error('not_exists'));\n } // ä¸æ˜¯æ–‡ä»¶å¯¹è±¡\n\n\n if (!file.fileObject) {\n return reject(new Error('file_object'));\n } // 有错误自动å“应\n\n\n if (file.error) {\n if (file.error instanceof Error) {\n return reject(file.error);\n }\n\n return reject(new Error(file.error));\n } // 未激活\n\n\n if (!file.active) {\n return reject(new Error('abort'));\n } // å·²å®Œæˆ ç›´æŽ¥ç›¸åº”\n\n\n if (file.success) {\n return resolve(file);\n }\n\n var response = getResponseData();\n var data = {};\n\n if (typeof e === 'string') {\n return reject(new Error(e));\n }\n\n switch (e.type) {\n case 'abort':\n data.error = 'abort';\n break;\n\n case 'error':\n if (file.error) {\n data.error = file.error;\n } else if (response === null) {\n data.error = 'network';\n } else {\n data.error = 'denied';\n }\n\n break;\n\n default:\n if (file.error) {\n data.error = file.error;\n } else if (response === null) {\n data.error = 'network';\n } else {\n data.progress = '100.00';\n }\n\n }\n\n if (response !== null) {\n if (response && response.substr(0, 1) === '{' && response.substr(response.length - 1, 1) === '}') {\n try {\n response = JSON.parse(response);\n } catch (err) {}\n }\n\n data.response = response;\n } // æ›´æ–°\n\n\n file = _this13.update(file, data);\n\n if (!file) {\n return reject(new Error('not_exists'));\n }\n\n if ((_file3 = file) !== null && _file3 !== void 0 && _file3.error) {\n if (file.error instanceof Error) {\n return reject(file.error);\n }\n\n return reject(new Error(file.error));\n } // å“应\n\n\n return resolve(file);\n }; // æ·»åŠ äº‹ä»¶\n\n\n iframe.onload = fn;\n iframe.onerror = fn;\n iframe.onabort = fn; // ç¦æ¢ esc é”®\n\n document.body.addEventListener('keydown', onKeydown); // æ交\n\n form.submit();\n }, 50);\n }).then(function (res) {\n var _iframe$parentNode;\n\n iframe === null || iframe === void 0 ? void 0 : (_iframe$parentNode = iframe.parentNode) === null || _iframe$parentNode === void 0 ? void 0 : _iframe$parentNode.removeChild(iframe);\n return res;\n }).catch(function (res) {\n var _iframe$parentNode2;\n\n iframe === null || iframe === void 0 ? void 0 : (_iframe$parentNode2 = iframe.parentNode) === null || _iframe$parentNode2 === void 0 ? void 0 : _iframe$parentNode2.removeChild(iframe);\n return res;\n });\n },\n watchActive: function watchActive(active) {\n var file;\n var index = 0;\n\n while (file = this.files[index]) {\n index++;\n if (!file.fileObject) ;else if (active && !this.destroy) {\n if (this.uploading >= this.thread || this.uploading && !this.features.html5) {\n break;\n }\n\n if (!file.active && !file.error && !file.success) {\n this.update(file, {\n active: true\n });\n }\n } else {\n if (file.active) {\n this.update(file, {\n active: false\n });\n }\n }\n }\n\n if (this.uploading === 0) {\n this.active = false;\n }\n },\n watchDrop: function watchDrop(newDrop) {\n var oldDrop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n if (!this.features.drop) {\n return;\n }\n\n if (newDrop === oldDrop) {\n return;\n } // 移除挂载\n\n\n if (this.dropElement) {\n try {\n document.removeEventListener('dragenter', this.onDocumentDragenter, false);\n document.removeEventListener('dragleave', this.onDocumentDragleave, false);\n document.removeEventListener('dragover', this.onDocumentDragover, false);\n document.removeEventListener('drop', this.onDocumentDrop, false);\n this.dropElement.removeEventListener('dragenter', this.onDragenter, false);\n this.dropElement.removeEventListener('dragleave', this.onDragleave, false);\n this.dropElement.removeEventListener('dragover', this.onDragover, false);\n this.dropElement.removeEventListener('drop', this.onDrop, false);\n } catch (e) {}\n }\n\n var el = null;\n if (!newDrop) ;else if (typeof newDrop === 'string') {\n // @ts-ignore\n el = document.querySelector(newDrop) || this.$root.$el.querySelector(newDrop);\n } else if (newDrop === true) {\n var _el;\n\n // @ts-ignore\n el = this.$parent.$el;\n\n if (!el || ((_el = el) === null || _el === void 0 ? void 0 : _el.nodeType) === 8) {\n var _el2;\n\n // @ts-ignore\n el = this.$root.$el;\n\n if (!el || ((_el2 = el) === null || _el2 === void 0 ? void 0 : _el2.nodeType) === 8) {\n el = document.body;\n }\n }\n } else {\n el = newDrop;\n }\n this.dropElement = el;\n\n if (this.dropElement) {\n document.addEventListener('dragenter', this.onDocumentDragenter, false);\n document.addEventListener('dragleave', this.onDocumentDragleave, false);\n document.addEventListener('dragover', this.onDocumentDragover, false);\n document.addEventListener('drop', this.onDocumentDrop, false);\n this.dropElement.addEventListener('dragenter', this.onDragenter, false);\n this.dropElement.addEventListener('dragleave', this.onDragleave, false);\n this.dropElement.addEventListener('dragover', this.onDragover, false);\n this.dropElement.addEventListener('drop', this.onDrop, false);\n }\n },\n watchDropActive: function watchDropActive(newDropActive, oldDropActive) {\n if (newDropActive === oldDropActive) {\n return;\n } // 设置 dropElementActive false\n\n\n if (!newDropActive && this.dropElementActive) {\n this.dropElementActive = false;\n }\n\n if (this.dropTimeout) {\n clearTimeout(this.dropTimeout);\n this.dropTimeout = null;\n }\n\n if (newDropActive) {\n // @ts-ignore\n this.dropTimeout = setTimeout(this.onDocumentDrop, 1000);\n }\n },\n onDocumentDragenter: function onDocumentDragenter(e) {\n var _dt$files, _dt$types;\n\n if (this.dropActive) {\n return;\n }\n\n if (!e.dataTransfer) {\n return;\n }\n\n var dt = e.dataTransfer;\n\n if (dt !== null && dt !== void 0 && (_dt$files = dt.files) !== null && _dt$files !== void 0 && _dt$files.length) {\n this.dropActive = true;\n } else if (!dt.types) {\n this.dropActive = true;\n } else if (dt.types.indexOf && dt.types.indexOf('Files') !== -1) {\n this.dropActive = true; // @ts-ignore\n } else if ((_dt$types = dt.types) !== null && _dt$types !== void 0 && _dt$types.contains && dt.types.contains('Files')) {\n this.dropActive = true;\n }\n\n if (this.dropActive) {\n this.watchDropActive(true);\n }\n },\n onDocumentDragleave: function onDocumentDragleave(e) {\n if (!this.dropActive) {\n return;\n } // @ts-ignore\n\n\n if (e.target === e.explicitOriginalTarget || !e.fromElement && (e.clientX <= 0 || e.clientY <= 0 || e.clientX >= window.innerWidth || e.clientY >= window.innerHeight)) {\n this.dropActive = false;\n this.watchDropActive(false);\n }\n },\n onDocumentDragover: function onDocumentDragover() {\n this.watchDropActive(true);\n },\n onDocumentDrop: function onDocumentDrop() {\n this.dropActive = false;\n this.watchDropActive(false);\n },\n onDragenter: function onDragenter(e) {\n if (!this.dropActive || this.dropElementActive) {\n return;\n }\n\n this.dropElementActive = true;\n },\n onDragleave: function onDragleave(e) {\n var _this$dropElement;\n\n if (!this.dropElementActive) {\n return;\n }\n\n var related = e.relatedTarget;\n\n if (!related) {\n this.dropElementActive = false;\n } else if ((_this$dropElement = this.dropElement) !== null && _this$dropElement !== void 0 && _this$dropElement.contains) {\n if (!this.dropElement.contains(related)) {\n this.dropElementActive = false;\n }\n } else {\n var child = related;\n\n while (child) {\n if (child === this.dropElement) {\n break;\n } // @ts-ignore\n\n\n child = child.parentNode;\n }\n\n if (child !== this.dropElement) {\n this.dropElementActive = false;\n }\n }\n },\n onDragover: function onDragover(e) {\n e.preventDefault();\n },\n onDrop: function onDrop(e) {\n e.preventDefault();\n e.dataTransfer && this.addDataTransfer(e.dataTransfer);\n },\n inputOnChange: async function inputOnChange(e) {\n var _this14 = this;\n\n if (!(e.target instanceof HTMLInputElement)) {\n return Promise.reject(new Error(\"not HTMLInputElement\"));\n }\n\n e.target;\n\n var reinput = function reinput(res) {\n _this14.reload = true; // @ts-ignore\n\n _this14.$nextTick(function () {\n _this14.reload = false;\n });\n\n return res;\n };\n\n return this.addInputFile(e.target).then(reinput).catch(reinput);\n },\n isRelatedTargetSupported: function isRelatedTargetSupported() {\n try {\n // 创建一个模拟的 MouseEvent\n var event = new MouseEvent('mouseout', {\n relatedTarget: document.body\n });\n return 'relatedTarget' in event; // 检查 `relatedTarget` 属性是å¦å˜åœ¨\n } catch (e) {\n // 如果 MouseEvent ä¸å—支æŒï¼Œæˆ–è€…æ— æ³•è®¾ç½® relatedTarget\n return false;\n }\n }\n }\n });\n var _hoisted_1 = [\"for\"];\n var _hoisted_2 = [\"name\", \"id\", \"accept\", \"capture\", \"disabled\", \"webkitdirectory\", \"allowdirs\", \"directory\", \"multiple\"];\n\n function render(_ctx, _cache, $props, $setup, $data, $options) {\n return vue.openBlock(), vue.createElementBlock(\"span\", {\n class: vue.normalizeClass(_ctx.className)\n }, [vue.renderSlot(_ctx.$slots, \"default\"), vue.createElementVNode(\"label\", {\n for: _ctx.forId\n }, null, 8, _hoisted_1), !_ctx.reload ? (vue.openBlock(), vue.createElementBlock(\"input\", {\n key: 0,\n ref: \"input\",\n type: \"file\",\n name: _ctx.name,\n id: _ctx.forId,\n accept: _ctx.accept,\n capture: _ctx.capture,\n disabled: _ctx.disabled,\n webkitdirectory: _ctx.iDirectory,\n allowdirs: _ctx.iDirectory,\n directory: _ctx.iDirectory,\n multiple: _ctx.multiple && _ctx.features.html5,\n onChange: _cache[0] || (_cache[0] = function () {\n return _ctx.inputOnChange && _ctx.inputOnChange.apply(_ctx, arguments);\n })\n }, null, 40, _hoisted_2)) : vue.createCommentVNode(\"\", true)], 2);\n }\n\n function styleInject(css, ref) {\n if (ref === void 0) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') {\n return;\n }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n }\n\n var css_248z = \"\\n.file-uploads {\\n overflow: hidden;\\n position: relative;\\n text-align: center;\\n display: inline-block;\\n}\\n.file-uploads.file-uploads-html4 input,\\n.file-uploads.file-uploads-html5 label {\\n /* background fix ie click */\\n background: #fff;\\n opacity: 0;\\n font-size: 20em;\\n z-index: 1;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n position: absolute;\\n width: 100%;\\n height: 100%;\\n}\\n.file-uploads.file-uploads-html5 input,\\n.file-uploads.file-uploads-html4 label {\\n /* background fix ie click */\\n position: absolute;\\n background: rgba(255, 255, 255, 0);\\n overflow: hidden;\\n position: fixed;\\n width: 1px;\\n height: 1px;\\n z-index: -1;\\n opacity: 0;\\n}\\n\";\n styleInject(css_248z);\n script.render = render;\n\n return script;\n\n}));\n//# sourceMappingURL=vue-upload-component.js.map\n","(function(global, factory) {\n typeof exports === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([ \"exports\" ], factory) : factory(global.ActiveStorage = {});\n})(this, function(exports) {\n \"use strict\";\n function createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n }\n var sparkMd5 = createCommonjsModule(function(module, exports) {\n (function(factory) {\n {\n module.exports = factory();\n }\n })(function(undefined) {\n var hex_chr = [ \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\" ];\n function md5cycle(x, k) {\n var a = x[0], b = x[1], c = x[2], d = x[3];\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n function md5blk(s) {\n var md5blks = [], i;\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n function md5blk_array(a) {\n var md5blks = [], i;\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n function md51(s) {\n var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function md51_array(a) {\n var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n length = a.length;\n tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << (i % 4 << 3);\n }\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function rhex(n) {\n var s = \"\", j;\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n }\n return s;\n }\n function hex(x) {\n var i;\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n return x.join(\"\");\n }\n if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n (function() {\n function clamp(val, length) {\n val = val | 0 || 0;\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n return Math.min(val, length);\n }\n ArrayBuffer.prototype.slice = function(from, to) {\n var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n if (to !== undefined) {\n end = clamp(to, length);\n }\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n return target;\n };\n })();\n }\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n return str;\n }\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n return returnUInt8Array ? arr : buff;\n }\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n return returnUInt8Array ? result : result.buffer;\n }\n function hexToBinaryString(hex) {\n var bytes = [], length = hex.length, x;\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n return String.fromCharCode.apply(String, bytes);\n }\n function SparkMD5() {\n this.reset();\n }\n SparkMD5.prototype.append = function(str) {\n this.appendBinary(toUtf8(str));\n return this;\n };\n SparkMD5.prototype.appendBinary = function(contents) {\n this._buff += contents;\n this._length += contents.length;\n var length = this._buff.length, i;\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n this._buff = this._buff.substring(i - 64);\n return this;\n };\n SparkMD5.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n SparkMD5.prototype.reset = function() {\n this._buff = \"\";\n this._length = 0;\n this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n return this;\n };\n SparkMD5.prototype.getState = function() {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash\n };\n };\n SparkMD5.prototype.setState = function(state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n return this;\n };\n SparkMD5.prototype.destroy = function() {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n SparkMD5.prototype._finish = function(tail, length) {\n var i = length, tmp, lo, hi;\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n SparkMD5.hash = function(str, raw) {\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n SparkMD5.hashBinary = function(content, raw) {\n var hash = md51(content), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n SparkMD5.ArrayBuffer = function() {\n this.reset();\n };\n SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n this._length += arr.byteLength;\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n return this;\n };\n SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n SparkMD5.ArrayBuffer.prototype.reset = function() {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n return this;\n };\n SparkMD5.ArrayBuffer.prototype.getState = function() {\n var state = SparkMD5.prototype.getState.call(this);\n state.buff = arrayBuffer2Utf8Str(state.buff);\n return state;\n };\n SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n return SparkMD5.prototype.setState.call(this, state);\n };\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n return SparkMD5;\n });\n });\n var classCallCheck = function(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n var createClass = function() {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function(Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n var fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n var FileChecksum = function() {\n createClass(FileChecksum, null, [ {\n key: \"create\",\n value: function create(file, callback) {\n var instance = new FileChecksum(file);\n instance.create(callback);\n }\n } ]);\n function FileChecksum(file) {\n classCallCheck(this, FileChecksum);\n this.file = file;\n this.chunkSize = 2097152;\n this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n this.chunkIndex = 0;\n }\n createClass(FileChecksum, [ {\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n this.callback = callback;\n this.md5Buffer = new sparkMd5.ArrayBuffer();\n this.fileReader = new FileReader();\n this.fileReader.addEventListener(\"load\", function(event) {\n return _this.fileReaderDidLoad(event);\n });\n this.fileReader.addEventListener(\"error\", function(event) {\n return _this.fileReaderDidError(event);\n });\n this.readNextChunk();\n }\n }, {\n key: \"fileReaderDidLoad\",\n value: function fileReaderDidLoad(event) {\n this.md5Buffer.append(event.target.result);\n if (!this.readNextChunk()) {\n var binaryDigest = this.md5Buffer.end(true);\n var base64digest = btoa(binaryDigest);\n this.callback(null, base64digest);\n }\n }\n }, {\n key: \"fileReaderDidError\",\n value: function fileReaderDidError(event) {\n this.callback(\"Error reading \" + this.file.name);\n }\n }, {\n key: \"readNextChunk\",\n value: function readNextChunk() {\n if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n var start = this.chunkIndex * this.chunkSize;\n var end = Math.min(start + this.chunkSize, this.file.size);\n var bytes = fileSlice.call(this.file, start, end);\n this.fileReader.readAsArrayBuffer(bytes);\n this.chunkIndex++;\n return true;\n } else {\n return false;\n }\n }\n } ]);\n return FileChecksum;\n }();\n function getMetaValue(name) {\n var element = findElement(document.head, 'meta[name=\"' + name + '\"]');\n if (element) {\n return element.getAttribute(\"content\");\n }\n }\n function findElements(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n var elements = root.querySelectorAll(selector);\n return toArray$1(elements);\n }\n function findElement(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n return root.querySelector(selector);\n }\n function dispatchEvent(element, type) {\n var eventInit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var disabled = element.disabled;\n var bubbles = eventInit.bubbles, cancelable = eventInit.cancelable, detail = eventInit.detail;\n var event = document.createEvent(\"Event\");\n event.initEvent(type, bubbles || true, cancelable || true);\n event.detail = detail || {};\n try {\n element.disabled = false;\n element.dispatchEvent(event);\n } finally {\n element.disabled = disabled;\n }\n return event;\n }\n function toArray$1(value) {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n }\n var BlobRecord = function() {\n function BlobRecord(file, checksum, url) {\n var _this = this;\n classCallCheck(this, BlobRecord);\n this.file = file;\n this.attributes = {\n filename: file.name,\n content_type: file.type,\n byte_size: file.size,\n checksum: checksum\n };\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"POST\", url, true);\n this.xhr.responseType = \"json\";\n this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n this.xhr.setRequestHeader(\"X-CSRF-Token\", getMetaValue(\"csrf-token\"));\n this.xhr.addEventListener(\"load\", function(event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function(event) {\n return _this.requestDidError(event);\n });\n }\n createClass(BlobRecord, [ {\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(JSON.stringify({\n blob: this.attributes\n }));\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n if (this.status >= 200 && this.status < 300) {\n var response = this.response;\n var direct_upload = response.direct_upload;\n delete response.direct_upload;\n this.attributes = response;\n this.directUploadData = direct_upload;\n this.callback(null, this.toJSON());\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error creating Blob for \"' + this.file.name + '\". Status: ' + this.status);\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n var result = {};\n for (var key in this.attributes) {\n result[key] = this.attributes[key];\n }\n return result;\n }\n }, {\n key: \"status\",\n get: function get$$1() {\n return this.xhr.status;\n }\n }, {\n key: \"response\",\n get: function get$$1() {\n var _xhr = this.xhr, responseType = _xhr.responseType, response = _xhr.response;\n if (responseType == \"json\") {\n return response;\n } else {\n return JSON.parse(response);\n }\n }\n } ]);\n return BlobRecord;\n }();\n var BlobUpload = function() {\n function BlobUpload(blob) {\n var _this = this;\n classCallCheck(this, BlobUpload);\n this.blob = blob;\n this.file = blob.file;\n var _blob$directUploadDat = blob.directUploadData, url = _blob$directUploadDat.url, headers = _blob$directUploadDat.headers;\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"PUT\", url, true);\n this.xhr.responseType = \"text\";\n for (var key in headers) {\n this.xhr.setRequestHeader(key, headers[key]);\n }\n this.xhr.addEventListener(\"load\", function(event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function(event) {\n return _this.requestDidError(event);\n });\n }\n createClass(BlobUpload, [ {\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(this.file.slice());\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n var _xhr = this.xhr, status = _xhr.status, response = _xhr.response;\n if (status >= 200 && status < 300) {\n this.callback(null, response);\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error storing \"' + this.file.name + '\". Status: ' + this.xhr.status);\n }\n } ]);\n return BlobUpload;\n }();\n var id = 0;\n var DirectUpload = function() {\n function DirectUpload(file, url, delegate) {\n classCallCheck(this, DirectUpload);\n this.id = ++id;\n this.file = file;\n this.url = url;\n this.delegate = delegate;\n }\n createClass(DirectUpload, [ {\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n FileChecksum.create(this.file, function(error, checksum) {\n if (error) {\n callback(error);\n return;\n }\n var blob = new BlobRecord(_this.file, checksum, _this.url);\n notify(_this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n blob.create(function(error) {\n if (error) {\n callback(error);\n } else {\n var upload = new BlobUpload(blob);\n notify(_this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n upload.create(function(error) {\n if (error) {\n callback(error);\n } else {\n callback(null, blob.toJSON());\n }\n });\n }\n });\n });\n }\n } ]);\n return DirectUpload;\n }();\n function notify(object, methodName) {\n if (object && typeof object[methodName] == \"function\") {\n for (var _len = arguments.length, messages = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n messages[_key - 2] = arguments[_key];\n }\n return object[methodName].apply(object, messages);\n }\n }\n var DirectUploadController = function() {\n function DirectUploadController(input, file) {\n classCallCheck(this, DirectUploadController);\n this.input = input;\n this.file = file;\n this.directUpload = new DirectUpload(this.file, this.url, this);\n this.dispatch(\"initialize\");\n }\n createClass(DirectUploadController, [ {\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n var hiddenInput = document.createElement(\"input\");\n hiddenInput.type = \"hidden\";\n hiddenInput.name = this.input.name;\n this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n this.dispatch(\"start\");\n this.directUpload.create(function(error, attributes) {\n if (error) {\n hiddenInput.parentNode.removeChild(hiddenInput);\n _this.dispatchError(error);\n } else {\n hiddenInput.value = attributes.signed_id;\n }\n _this.dispatch(\"end\");\n callback(error);\n });\n }\n }, {\n key: \"uploadRequestDidProgress\",\n value: function uploadRequestDidProgress(event) {\n var progress = event.loaded / event.total * 100;\n if (progress) {\n this.dispatch(\"progress\", {\n progress: progress\n });\n }\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n detail.file = this.file;\n detail.id = this.directUpload.id;\n return dispatchEvent(this.input, \"direct-upload:\" + name, {\n detail: detail\n });\n }\n }, {\n key: \"dispatchError\",\n value: function dispatchError(error) {\n var event = this.dispatch(\"error\", {\n error: error\n });\n if (!event.defaultPrevented) {\n alert(error);\n }\n }\n }, {\n key: \"directUploadWillCreateBlobWithXHR\",\n value: function directUploadWillCreateBlobWithXHR(xhr) {\n this.dispatch(\"before-blob-request\", {\n xhr: xhr\n });\n }\n }, {\n key: \"directUploadWillStoreFileWithXHR\",\n value: function directUploadWillStoreFileWithXHR(xhr) {\n var _this2 = this;\n this.dispatch(\"before-storage-request\", {\n xhr: xhr\n });\n xhr.upload.addEventListener(\"progress\", function(event) {\n return _this2.uploadRequestDidProgress(event);\n });\n }\n }, {\n key: \"url\",\n get: function get$$1() {\n return this.input.getAttribute(\"data-direct-upload-url\");\n }\n } ]);\n return DirectUploadController;\n }();\n var inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n var DirectUploadsController = function() {\n function DirectUploadsController(form) {\n classCallCheck(this, DirectUploadsController);\n this.form = form;\n this.inputs = findElements(form, inputSelector).filter(function(input) {\n return input.files.length;\n });\n }\n createClass(DirectUploadsController, [ {\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n var controllers = this.createDirectUploadControllers();\n var startNextController = function startNextController() {\n var controller = controllers.shift();\n if (controller) {\n controller.start(function(error) {\n if (error) {\n callback(error);\n _this.dispatch(\"end\");\n } else {\n startNextController();\n }\n });\n } else {\n callback();\n _this.dispatch(\"end\");\n }\n };\n this.dispatch(\"start\");\n startNextController();\n }\n }, {\n key: \"createDirectUploadControllers\",\n value: function createDirectUploadControllers() {\n var controllers = [];\n this.inputs.forEach(function(input) {\n toArray$1(input.files).forEach(function(file) {\n var controller = new DirectUploadController(input, file);\n controllers.push(controller);\n });\n });\n return controllers;\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return dispatchEvent(this.form, \"direct-uploads:\" + name, {\n detail: detail\n });\n }\n } ]);\n return DirectUploadsController;\n }();\n var processingAttribute = \"data-direct-uploads-processing\";\n var submitButtonsByForm = new WeakMap();\n var started = false;\n function start() {\n if (!started) {\n started = true;\n document.addEventListener(\"click\", didClick, true);\n document.addEventListener(\"submit\", didSubmitForm);\n document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n }\n }\n function didClick(event) {\n var target = event.target;\n if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n submitButtonsByForm.set(target.form, target);\n }\n }\n function didSubmitForm(event) {\n handleFormSubmissionEvent(event);\n }\n function didSubmitRemoteElement(event) {\n if (event.target.tagName == \"FORM\") {\n handleFormSubmissionEvent(event);\n }\n }\n function handleFormSubmissionEvent(event) {\n var form = event.target;\n if (form.hasAttribute(processingAttribute)) {\n event.preventDefault();\n return;\n }\n var controller = new DirectUploadsController(form);\n var inputs = controller.inputs;\n if (inputs.length) {\n event.preventDefault();\n form.setAttribute(processingAttribute, \"\");\n inputs.forEach(disable);\n controller.start(function(error) {\n form.removeAttribute(processingAttribute);\n if (error) {\n inputs.forEach(enable);\n } else {\n submitForm(form);\n }\n });\n }\n }\n function submitForm(form) {\n var button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n if (button) {\n var _button = button, disabled = _button.disabled;\n button.disabled = false;\n button.focus();\n button.click();\n button.disabled = disabled;\n } else {\n button = document.createElement(\"input\");\n button.type = \"submit\";\n button.style.display = \"none\";\n form.appendChild(button);\n button.click();\n form.removeChild(button);\n }\n submitButtonsByForm.delete(form);\n }\n function disable(input) {\n input.disabled = true;\n }\n function enable(input) {\n input.disabled = false;\n }\n function autostart() {\n if (window.ActiveStorage) {\n start();\n }\n }\n setTimeout(autostart, 1);\n exports.start = start;\n exports.DirectUpload = DirectUpload;\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n});\n","<template>\n <div class=\"p-4 space-y-6 bg-white dark:bg-slate-900\">\n <div class=\"space-y-2 animate-loader-pulse\">\n <div class=\"h-6 bg-slate-100 dark:bg-slate-700 rounded w-1/5\" />\n <div class=\"h-10 bg-slate-100 dark:bg-slate-700 rounded w-3/5\" />\n </div>\n <div class=\"space-y-2 animate-loader-pulse\">\n <div class=\"h-5 bg-slate-100 dark:bg-slate-700 rounded\" />\n <div class=\"h-5 bg-slate-100 dark:bg-slate-700 rounded\" />\n <div class=\"h-5 bg-slate-100 dark:bg-slate-700 rounded\" />\n <div class=\"h-5 bg-slate-100 dark:bg-slate-700 rounded w-4/5\" />\n </div>\n <div class=\"space-y-2 animate-loader-pulse\">\n <div class=\"h-5 bg-slate-100 dark:bg-slate-700 rounded\" />\n <div class=\"h-5 bg-slate-100 dark:bg-slate-700 rounded\" />\n <div class=\"h-5 bg-slate-100 dark:bg-slate-700 rounded w-3/5\" />\n <div class=\"h-5 bg-slate-100 dark:bg-slate-700 rounded\" />\n </div>\n <div class=\"space-y-2 animate-loader-pulse\">\n <div class=\"h-5 bg-slate-100 dark:bg-slate-700 rounded\" />\n <div class=\"h-5 bg-slate-100 dark:bg-slate-700 rounded\" />\n <div class=\"h-5 bg-slate-100 dark:bg-slate-700 rounded\" />\n <div class=\"h-5 bg-slate-100 dark:bg-slate-700 rounded w-3/5\" />\n </div>\n </div>\n</template>\n","<script>\nimport ArticleSkeletonLoader from 'shared/components/ArticleSkeletonLoader.vue';\n\nexport default {\n name: 'IframeLoader',\n components: {\n ArticleSkeletonLoader,\n },\n props: {\n url: {\n type: String,\n default: '',\n },\n isRtl: {\n type: Boolean,\n default: false,\n },\n },\n data() {\n return {\n isLoading: true,\n showEmptyState: !this.url,\n };\n },\n watch: {\n isRtl: {\n immediate: true,\n handler(value) {\n this.$nextTick(() => {\n const iframeElement = this.$el.querySelector('iframe');\n if (iframeElement) {\n iframeElement.onload = () => {\n try {\n const iframeDocument =\n iframeElement.contentDocument ||\n (iframeElement.contentWindow &&\n iframeElement.contentWindow.document);\n\n if (iframeDocument) {\n iframeDocument.documentElement.dir = value ? 'rtl' : 'ltr';\n }\n } catch (e) {\n // error\n }\n };\n }\n });\n },\n },\n },\n methods: {\n handleIframeLoad() {\n // Once loaded, the loading state is hidden\n this.isLoading = false;\n },\n handleIframeError() {\n // Hide the loading state and show the empty state when an error occurs\n this.isLoading = false;\n this.showEmptyState = true;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"relative overflow-hidden pb-1/2 h-full\">\n <iframe\n v-if=\"url\"\n :src=\"url\"\n class=\"absolute w-full h-full top-0 left-0\"\n @load=\"handleIframeLoad\"\n @error=\"handleIframeError\"\n />\n <ArticleSkeletonLoader\n v-if=\"isLoading\"\n class=\"absolute w-full h-full top-0 left-0\"\n />\n <div\n v-if=\"showEmptyState\"\n class=\"absolute w-full h-full top-0 left-0 flex justify-center items-center\"\n >\n <p>{{ $t('PORTAL.IFRAME_ERROR') }}</p>\n </div>\n </div>\n</template>\n","export const isAFormMessage = message => message.content_type === 'form';\nexport const isASubmittedFormMessage = (message = {}) =>\n isAFormMessage(message) && !!message.content_attributes?.submitted_values;\n\nexport const MESSAGE_MAX_LENGTH = {\n GENERAL: 10000,\n FACEBOOK: 1000,\n TWILIO_SMS: 320,\n TWILIO_WHATSAPP: 1600,\n EMAIL: 25000,\n};\n","const DYTE_MEETING_LINK = 'https://app.dyte.io/v2/meeting';\n\nexport const buildDyteURL = dyteAuthToken => {\n return `${DYTE_MEETING_LINK}?authToken=${dyteAuthToken}&showSetupScreen=true&disableVideoBackground=true`;\n};\n","export default \"__VITE_ASSET__BdSqWWoF__\"","var R=class{type=3;name=\"\";prefix=\"\";value=\"\";suffix=\"\";modifier=3;constructor(t,r,n,o,c,l){this.type=t,this.name=r,this.prefix=n,this.value=o,this.suffix=c,this.modifier=l}hasCustomName(){return this.name!==\"\"&&typeof this.name!=\"number\"}},be=/[$_\\p{ID_Start}]/u,Pe=/[$_\\u200C\\u200D\\p{ID_Continue}]/u,M=\".*\";function Re(e,t){return(t?/^[\\x00-\\xFF]*$/:/^[\\x00-\\x7F]*$/).test(e)}function v(e,t=!1){let r=[],n=0;for(;n<e.length;){let o=e[n],c=function(l){if(!t)throw new TypeError(l);r.push({type:\"INVALID_CHAR\",index:n,value:e[n++]})};if(o===\"*\"){r.push({type:\"ASTERISK\",index:n,value:e[n++]});continue}if(o===\"+\"||o===\"?\"){r.push({type:\"OTHER_MODIFIER\",index:n,value:e[n++]});continue}if(o===\"\\\\\"){r.push({type:\"ESCAPED_CHAR\",index:n++,value:e[n++]});continue}if(o===\"{\"){r.push({type:\"OPEN\",index:n,value:e[n++]});continue}if(o===\"}\"){r.push({type:\"CLOSE\",index:n,value:e[n++]});continue}if(o===\":\"){let l=\"\",s=n+1;for(;s<e.length;){let i=e.substr(s,1);if(s===n+1&&be.test(i)||s!==n+1&&Pe.test(i)){l+=e[s++];continue}break}if(!l){c(`Missing parameter name at ${n}`);continue}r.push({type:\"NAME\",index:n,value:l}),n=s;continue}if(o===\"(\"){let l=1,s=\"\",i=n+1,a=!1;if(e[i]===\"?\"){c(`Pattern cannot start with \"?\" at ${i}`);continue}for(;i<e.length;){if(!Re(e[i],!1)){c(`Invalid character '${e[i]}' at ${i}.`),a=!0;break}if(e[i]===\"\\\\\"){s+=e[i++]+e[i++];continue}if(e[i]===\")\"){if(l--,l===0){i++;break}}else if(e[i]===\"(\"&&(l++,e[i+1]!==\"?\")){c(`Capturing groups are not allowed at ${i}`),a=!0;break}s+=e[i++]}if(a)continue;if(l){c(`Unbalanced pattern at ${n}`);continue}if(!s){c(`Missing pattern at ${n}`);continue}r.push({type:\"REGEX\",index:n,value:s}),n=i;continue}r.push({type:\"CHAR\",index:n,value:e[n++]})}return r.push({type:\"END\",index:n,value:\"\"}),r}function D(e,t={}){let r=v(e);t.delimiter??=\"/#?\",t.prefixes??=\"./\";let n=`[^${S(t.delimiter)}]+?`,o=[],c=0,l=0,s=\"\",i=new Set,a=h=>{if(l<r.length&&r[l].type===h)return r[l++].value},f=()=>a(\"OTHER_MODIFIER\")??a(\"ASTERISK\"),d=h=>{let u=a(h);if(u!==void 0)return u;let{type:p,index:A}=r[l];throw new TypeError(`Unexpected ${p} at ${A}, expected ${h}`)},T=()=>{let h=\"\",u;for(;u=a(\"CHAR\")??a(\"ESCAPED_CHAR\");)h+=u;return h},Se=h=>h,L=t.encodePart||Se,I=\"\",U=h=>{I+=h},$=()=>{I.length&&(o.push(new R(3,\"\",\"\",L(I),\"\",3)),I=\"\")},V=(h,u,p,A,Y)=>{let g=3;switch(Y){case\"?\":g=1;break;case\"*\":g=0;break;case\"+\":g=2;break}if(!u&&!p&&g===3){U(h);return}if($(),!u&&!p){if(!h)return;o.push(new R(3,\"\",\"\",L(h),\"\",g));return}let m;p?p===\"*\"?m=M:m=p:m=n;let O=2;m===n?(O=1,m=\"\"):m===M&&(O=0,m=\"\");let P;if(u?P=u:p&&(P=c++),i.has(P))throw new TypeError(`Duplicate name '${P}'.`);i.add(P),o.push(new R(O,P,L(h),m,L(A),g))};for(;l<r.length;){let h=a(\"CHAR\"),u=a(\"NAME\"),p=a(\"REGEX\");if(!u&&!p&&(p=a(\"ASTERISK\")),u||p){let g=h??\"\";t.prefixes.indexOf(g)===-1&&(U(g),g=\"\"),$();let m=f();V(g,u,p,\"\",m);continue}let A=h??a(\"ESCAPED_CHAR\");if(A){U(A);continue}if(a(\"OPEN\")){let g=T(),m=a(\"NAME\"),O=a(\"REGEX\");!m&&!O&&(O=a(\"ASTERISK\"));let P=T();d(\"CLOSE\");let xe=f();V(g,m,O,P,xe);continue}$(),d(\"END\")}return o}function S(e){return e.replace(/([.+*?^${}()[\\]|/\\\\])/g,\"\\\\$1\")}function X(e){return e&&e.ignoreCase?\"ui\":\"u\"}function Z(e,t,r){return F(D(e,r),t,r)}function k(e){switch(e){case 0:return\"*\";case 1:return\"?\";case 2:return\"+\";case 3:return\"\"}}function F(e,t,r={}){r.delimiter??=\"/#?\",r.prefixes??=\"./\",r.sensitive??=!1,r.strict??=!1,r.end??=!0,r.start??=!0,r.endsWith=\"\";let n=r.start?\"^\":\"\";for(let s of e){if(s.type===3){s.modifier===3?n+=S(s.value):n+=`(?:${S(s.value)})${k(s.modifier)}`;continue}t&&t.push(s.name);let i=`[^${S(r.delimiter)}]+?`,a=s.value;if(s.type===1?a=i:s.type===0&&(a=M),!s.prefix.length&&!s.suffix.length){s.modifier===3||s.modifier===1?n+=`(${a})${k(s.modifier)}`:n+=`((?:${a})${k(s.modifier)})`;continue}if(s.modifier===3||s.modifier===1){n+=`(?:${S(s.prefix)}(${a})${S(s.suffix)})`,n+=k(s.modifier);continue}n+=`(?:${S(s.prefix)}`,n+=`((?:${a})(?:`,n+=S(s.suffix),n+=S(s.prefix),n+=`(?:${a}))*)${S(s.suffix)})`,s.modifier===0&&(n+=\"?\")}let o=`[${S(r.endsWith)}]|$`,c=`[${S(r.delimiter)}]`;if(r.end)return r.strict||(n+=`${c}?`),r.endsWith.length?n+=`(?=${o})`:n+=\"$\",new RegExp(n,X(r));r.strict||(n+=`(?:${c}(?=${o}))?`);let l=!1;if(e.length){let s=e[e.length-1];s.type===3&&s.modifier===3&&(l=r.delimiter.indexOf(s)>-1)}return l||(n+=`(?=${c}|${o})`),new RegExp(n,X(r))}var x={delimiter:\"\",prefixes:\"\",sensitive:!0,strict:!0},B={delimiter:\".\",prefixes:\"\",sensitive:!0,strict:!0},q={delimiter:\"/\",prefixes:\"/\",sensitive:!0,strict:!0};function J(e,t){return e.length?e[0]===\"/\"?!0:!t||e.length<2?!1:(e[0]==\"\\\\\"||e[0]==\"{\")&&e[1]==\"/\":!1}function Q(e,t){return e.startsWith(t)?e.substring(t.length,e.length):e}function Ee(e,t){return e.endsWith(t)?e.substr(0,e.length-t.length):e}function W(e){return!e||e.length<2?!1:e[0]===\"[\"||(e[0]===\"\\\\\"||e[0]===\"{\")&&e[1]===\"[\"}var ee=[\"ftp\",\"file\",\"http\",\"https\",\"ws\",\"wss\"];function N(e){if(!e)return!0;for(let t of ee)if(e.test(t))return!0;return!1}function te(e,t){if(e=Q(e,\"#\"),t||e===\"\")return e;let r=new URL(\"https://example.com\");return r.hash=e,r.hash?r.hash.substring(1,r.hash.length):\"\"}function re(e,t){if(e=Q(e,\"?\"),t||e===\"\")return e;let r=new URL(\"https://example.com\");return r.search=e,r.search?r.search.substring(1,r.search.length):\"\"}function ne(e,t){return t||e===\"\"?e:W(e)?j(e):z(e)}function se(e,t){if(t||e===\"\")return e;let r=new URL(\"https://example.com\");return r.password=e,r.password}function ie(e,t){if(t||e===\"\")return e;let r=new URL(\"https://example.com\");return r.username=e,r.username}function ae(e,t,r){if(r||e===\"\")return e;if(t&&!ee.includes(t))return new URL(`${t}:${e}`).pathname;let n=e[0]==\"/\";return e=new URL(n?e:\"/-\"+e,\"https://example.com\").pathname,n||(e=e.substring(2,e.length)),e}function oe(e,t,r){return _(t)===e&&(e=\"\"),r||e===\"\"?e:K(e)}function ce(e,t){return e=Ee(e,\":\"),t||e===\"\"?e:y(e)}function _(e){switch(e){case\"ws\":case\"http\":return\"80\";case\"wws\":case\"https\":return\"443\";case\"ftp\":return\"21\";default:return\"\"}}function y(e){if(e===\"\")return e;if(/^[-+.A-Za-z0-9]*$/.test(e))return e.toLowerCase();throw new TypeError(`Invalid protocol '${e}'.`)}function le(e){if(e===\"\")return e;let t=new URL(\"https://example.com\");return t.username=e,t.username}function fe(e){if(e===\"\")return e;let t=new URL(\"https://example.com\");return t.password=e,t.password}function z(e){if(e===\"\")return e;if(/[\\t\\n\\r #%/:<>?@[\\]^\\\\|]/g.test(e))throw new TypeError(`Invalid hostname '${e}'`);let t=new URL(\"https://example.com\");return t.hostname=e,t.hostname}function j(e){if(e===\"\")return e;if(/[^0-9a-fA-F[\\]:]/g.test(e))throw new TypeError(`Invalid IPv6 hostname '${e}'`);return e.toLowerCase()}function K(e){if(e===\"\"||/^[0-9]*$/.test(e)&&parseInt(e)<=65535)return e;throw new TypeError(`Invalid port '${e}'.`)}function he(e){if(e===\"\")return e;let t=new URL(\"https://example.com\");return t.pathname=e[0]!==\"/\"?\"/-\"+e:e,e[0]!==\"/\"?t.pathname.substring(2,t.pathname.length):t.pathname}function ue(e){return e===\"\"?e:new URL(`data:${e}`).pathname}function de(e){if(e===\"\")return e;let t=new URL(\"https://example.com\");return t.search=e,t.search.substring(1,t.search.length)}function pe(e){if(e===\"\")return e;let t=new URL(\"https://example.com\");return t.hash=e,t.hash.substring(1,t.hash.length)}var H=class{#i;#n=[];#t={};#e=0;#s=1;#l=0;#o=0;#d=0;#p=0;#g=!1;constructor(t){this.#i=t}get result(){return this.#t}parse(){for(this.#n=v(this.#i,!0);this.#e<this.#n.length;this.#e+=this.#s){if(this.#s=1,this.#n[this.#e].type===\"END\"){if(this.#o===0){this.#b(),this.#f()?this.#r(9,1):this.#h()?this.#r(8,1):this.#r(7,0);continue}else if(this.#o===2){this.#u(5);continue}this.#r(10,0);break}if(this.#d>0)if(this.#A())this.#d-=1;else continue;if(this.#T()){this.#d+=1;continue}switch(this.#o){case 0:this.#P()&&this.#u(1);break;case 1:if(this.#P()){this.#C();let t=7,r=1;this.#E()?(t=2,r=3):this.#g&&(t=2),this.#r(t,r)}break;case 2:this.#S()?this.#u(3):(this.#x()||this.#h()||this.#f())&&this.#u(5);break;case 3:this.#O()?this.#r(4,1):this.#S()&&this.#r(5,1);break;case 4:this.#S()&&this.#r(5,1);break;case 5:this.#y()?this.#p+=1:this.#w()&&(this.#p-=1),this.#k()&&!this.#p?this.#r(6,1):this.#x()?this.#r(7,0):this.#h()?this.#r(8,1):this.#f()&&this.#r(9,1);break;case 6:this.#x()?this.#r(7,0):this.#h()?this.#r(8,1):this.#f()&&this.#r(9,1);break;case 7:this.#h()?this.#r(8,1):this.#f()&&this.#r(9,1);break;case 8:this.#f()&&this.#r(9,1);break;case 9:break;case 10:break}}this.#t.hostname!==void 0&&this.#t.port===void 0&&(this.#t.port=\"\")}#r(t,r){switch(this.#o){case 0:break;case 1:this.#t.protocol=this.#c();break;case 2:break;case 3:this.#t.username=this.#c();break;case 4:this.#t.password=this.#c();break;case 5:this.#t.hostname=this.#c();break;case 6:this.#t.port=this.#c();break;case 7:this.#t.pathname=this.#c();break;case 8:this.#t.search=this.#c();break;case 9:this.#t.hash=this.#c();break;case 10:break}this.#o!==0&&t!==10&&([1,2,3,4].includes(this.#o)&&[6,7,8,9].includes(t)&&(this.#t.hostname??=\"\"),[1,2,3,4,5,6].includes(this.#o)&&[8,9].includes(t)&&(this.#t.pathname??=this.#g?\"/\":\"\"),[1,2,3,4,5,6,7].includes(this.#o)&&t===9&&(this.#t.search??=\"\")),this.#R(t,r)}#R(t,r){this.#o=t,this.#l=this.#e+r,this.#e+=r,this.#s=0}#b(){this.#e=this.#l,this.#s=0}#u(t){this.#b(),this.#o=t}#m(t){return t<0&&(t=this.#n.length-t),t<this.#n.length?this.#n[t]:this.#n[this.#n.length-1]}#a(t,r){let n=this.#m(t);return n.value===r&&(n.type===\"CHAR\"||n.type===\"ESCAPED_CHAR\"||n.type===\"INVALID_CHAR\")}#P(){return this.#a(this.#e,\":\")}#E(){return this.#a(this.#e+1,\"/\")&&this.#a(this.#e+2,\"/\")}#S(){return this.#a(this.#e,\"@\")}#O(){return this.#a(this.#e,\":\")}#k(){return this.#a(this.#e,\":\")}#x(){return this.#a(this.#e,\"/\")}#h(){if(this.#a(this.#e,\"?\"))return!0;if(this.#n[this.#e].value!==\"?\")return!1;let t=this.#m(this.#e-1);return t.type!==\"NAME\"&&t.type!==\"REGEX\"&&t.type!==\"CLOSE\"&&t.type!==\"ASTERISK\"}#f(){return this.#a(this.#e,\"#\")}#T(){return this.#n[this.#e].type==\"OPEN\"}#A(){return this.#n[this.#e].type==\"CLOSE\"}#y(){return this.#a(this.#e,\"[\")}#w(){return this.#a(this.#e,\"]\")}#c(){let t=this.#n[this.#e],r=this.#m(this.#l).index;return this.#i.substring(r,t.index)}#C(){let t={};Object.assign(t,x),t.encodePart=y;let r=Z(this.#c(),void 0,t);this.#g=N(r)}};var G=[\"protocol\",\"username\",\"password\",\"hostname\",\"port\",\"pathname\",\"search\",\"hash\"],E=\"*\";function ge(e,t){if(typeof e!=\"string\")throw new TypeError(\"parameter 1 is not of type 'string'.\");let r=new URL(e,t);return{protocol:r.protocol.substring(0,r.protocol.length-1),username:r.username,password:r.password,hostname:r.hostname,port:r.port,pathname:r.pathname,search:r.search!==\"\"?r.search.substring(1,r.search.length):void 0,hash:r.hash!==\"\"?r.hash.substring(1,r.hash.length):void 0}}function b(e,t){return t?C(e):e}function w(e,t,r){let n;if(typeof t.baseURL==\"string\")try{n=new URL(t.baseURL),t.protocol===void 0&&(e.protocol=b(n.protocol.substring(0,n.protocol.length-1),r)),!r&&t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.username===void 0&&(e.username=b(n.username,r)),!r&&t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.username===void 0&&t.password===void 0&&(e.password=b(n.password,r)),t.protocol===void 0&&t.hostname===void 0&&(e.hostname=b(n.hostname,r)),t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&(e.port=b(n.port,r)),t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.pathname===void 0&&(e.pathname=b(n.pathname,r)),t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.pathname===void 0&&t.search===void 0&&(e.search=b(n.search.substring(1,n.search.length),r)),t.protocol===void 0&&t.hostname===void 0&&t.port===void 0&&t.pathname===void 0&&t.search===void 0&&t.hash===void 0&&(e.hash=b(n.hash.substring(1,n.hash.length),r))}catch{throw new TypeError(`invalid baseURL '${t.baseURL}'.`)}if(typeof t.protocol==\"string\"&&(e.protocol=ce(t.protocol,r)),typeof t.username==\"string\"&&(e.username=ie(t.username,r)),typeof t.password==\"string\"&&(e.password=se(t.password,r)),typeof t.hostname==\"string\"&&(e.hostname=ne(t.hostname,r)),typeof t.port==\"string\"&&(e.port=oe(t.port,e.protocol,r)),typeof t.pathname==\"string\"){if(e.pathname=t.pathname,n&&!J(e.pathname,r)){let o=n.pathname.lastIndexOf(\"/\");o>=0&&(e.pathname=b(n.pathname.substring(0,o+1),r)+e.pathname)}e.pathname=ae(e.pathname,e.protocol,r)}return typeof t.search==\"string\"&&(e.search=re(t.search,r)),typeof t.hash==\"string\"&&(e.hash=te(t.hash,r)),e}function C(e){return e.replace(/([+*?:{}()\\\\])/g,\"\\\\$1\")}function Oe(e){return e.replace(/([.+*?^${}()[\\]|/\\\\])/g,\"\\\\$1\")}function ke(e,t){t.delimiter??=\"/#?\",t.prefixes??=\"./\",t.sensitive??=!1,t.strict??=!1,t.end??=!0,t.start??=!0,t.endsWith=\"\";let r=\".*\",n=`[^${Oe(t.delimiter)}]+?`,o=/[$_\\u200C\\u200D\\p{ID_Continue}]/u,c=\"\";for(let l=0;l<e.length;++l){let s=e[l];if(s.type===3){if(s.modifier===3){c+=C(s.value);continue}c+=`{${C(s.value)}}${k(s.modifier)}`;continue}let i=s.hasCustomName(),a=!!s.suffix.length||!!s.prefix.length&&(s.prefix.length!==1||!t.prefixes.includes(s.prefix)),f=l>0?e[l-1]:null,d=l<e.length-1?e[l+1]:null;if(!a&&i&&s.type===1&&s.modifier===3&&d&&!d.prefix.length&&!d.suffix.length)if(d.type===3){let T=d.value.length>0?d.value[0]:\"\";a=o.test(T)}else a=!d.hasCustomName();if(!a&&!s.prefix.length&&f&&f.type===3){let T=f.value[f.value.length-1];a=t.prefixes.includes(T)}a&&(c+=\"{\"),c+=C(s.prefix),i&&(c+=`:${s.name}`),s.type===2?c+=`(${s.value})`:s.type===1?i||(c+=`(${n})`):s.type===0&&(!i&&(!f||f.type===3||f.modifier!==3||a||s.prefix!==\"\")?c+=\"*\":c+=`(${r})`),s.type===1&&i&&s.suffix.length&&o.test(s.suffix[0])&&(c+=\"\\\\\"),c+=C(s.suffix),a&&(c+=\"}\"),s.modifier!==3&&(c+=k(s.modifier))}return c}var me=class{#i;#n={};#t={};#e={};#s={};#l=!1;constructor(t={},r,n){try{let o;if(typeof r==\"string\"?o=r:n=r,typeof t==\"string\"){let i=new H(t);if(i.parse(),t=i.result,o===void 0&&typeof t.protocol!=\"string\")throw new TypeError(\"A base URL must be provided for a relative constructor string.\");t.baseURL=o}else{if(!t||typeof t!=\"object\")throw new TypeError(\"parameter 1 is not of type 'string' and cannot convert to dictionary.\");if(o)throw new TypeError(\"parameter 1 is not of type 'string'.\")}typeof n>\"u\"&&(n={ignoreCase:!1});let c={ignoreCase:n.ignoreCase===!0},l={pathname:E,protocol:E,username:E,password:E,hostname:E,port:E,search:E,hash:E};this.#i=w(l,t,!0),_(this.#i.protocol)===this.#i.port&&(this.#i.port=\"\");let s;for(s of G){if(!(s in this.#i))continue;let i={},a=this.#i[s];switch(this.#t[s]=[],s){case\"protocol\":Object.assign(i,x),i.encodePart=y;break;case\"username\":Object.assign(i,x),i.encodePart=le;break;case\"password\":Object.assign(i,x),i.encodePart=fe;break;case\"hostname\":Object.assign(i,B),W(a)?i.encodePart=j:i.encodePart=z;break;case\"port\":Object.assign(i,x),i.encodePart=K;break;case\"pathname\":N(this.#n.protocol)?(Object.assign(i,q,c),i.encodePart=he):(Object.assign(i,x,c),i.encodePart=ue);break;case\"search\":Object.assign(i,x,c),i.encodePart=de;break;case\"hash\":Object.assign(i,x,c),i.encodePart=pe;break}try{this.#s[s]=D(a,i),this.#n[s]=F(this.#s[s],this.#t[s],i),this.#e[s]=ke(this.#s[s],i),this.#l=this.#l||this.#s[s].some(f=>f.type===2)}catch{throw new TypeError(`invalid ${s} pattern '${this.#i[s]}'.`)}}}catch(o){throw new TypeError(`Failed to construct 'URLPattern': ${o.message}`)}}test(t={},r){let n={pathname:\"\",protocol:\"\",username:\"\",password:\"\",hostname:\"\",port:\"\",search:\"\",hash:\"\"};if(typeof t!=\"string\"&&r)throw new TypeError(\"parameter 1 is not of type 'string'.\");if(typeof t>\"u\")return!1;try{typeof t==\"object\"?n=w(n,t,!1):n=w(n,ge(t,r),!1)}catch{return!1}let o;for(o of G)if(!this.#n[o].exec(n[o]))return!1;return!0}exec(t={},r){let n={pathname:\"\",protocol:\"\",username:\"\",password:\"\",hostname:\"\",port:\"\",search:\"\",hash:\"\"};if(typeof t!=\"string\"&&r)throw new TypeError(\"parameter 1 is not of type 'string'.\");if(typeof t>\"u\")return;try{typeof t==\"object\"?n=w(n,t,!1):n=w(n,ge(t,r),!1)}catch{return null}let o={};r?o.inputs=[t,r]:o.inputs=[t];let c;for(c of G){let l=this.#n[c].exec(n[c]);if(!l)return null;let s={};for(let[i,a]of this.#t[c].entries())if(typeof a==\"string\"||typeof a==\"number\"){let f=l[i+1];s[a]=f}o[c]={input:n[c]??\"\",groups:s}}return o}static compareComponent(t,r,n){let o=(i,a)=>{for(let f of[\"type\",\"modifier\",\"prefix\",\"value\",\"suffix\"]){if(i[f]<a[f])return-1;if(i[f]===a[f])continue;return 1}return 0},c=new R(3,\"\",\"\",\"\",\"\",3),l=new R(0,\"\",\"\",\"\",\"\",3),s=(i,a)=>{let f=0;for(;f<Math.min(i.length,a.length);++f){let d=o(i[f],a[f]);if(d)return d}return i.length===a.length?0:o(i[f]??c,a[f]??c)};return!r.#e[t]&&!n.#e[t]?0:r.#e[t]&&!n.#e[t]?s(r.#s[t],[l]):!r.#e[t]&&n.#e[t]?s([l],n.#s[t]):s(r.#s[t],n.#s[t])}get protocol(){return this.#e.protocol}get username(){return this.#e.username}get password(){return this.#e.password}get hostname(){return this.#e.hostname}get port(){return this.#e.port}get pathname(){return this.#e.pathname}get search(){return this.#e.search}get hash(){return this.#e.hash}get hasRegExpGroups(){return this.#l}};export{me as URLPattern};\n","import { URLPattern } from \"./dist/urlpattern.js\";\n\nexport { URLPattern };\n\nif (!globalThis.URLPattern) {\n globalThis.URLPattern = URLPattern;\n}\n"],"names":["explicitKeys","token","dedupe","arr1","arr2","has","obj","property","eq","valA","valB","deep","explicit","eqRegExp","k","key","x","y","empty","value","type","_i","escapeExp","string","regexForFormat","format","escaped","formats","tokens","regex","format2","isRecord","o","isObject","isPojo","ctor","prot","extend","original","additional","extendArrays","ignoreUndefined","merged","isQuotedString","str","quoteType","p","rmEscapes","clean","lastChar","char","nodeProps","sets","valid","props","name","modelValue","config","plugins","validProps","parseArgs","args","arg","depth","quote","except","toRemove","exps","n","keysToRemove","exp","only","include","camel","_s","g","kebab","trail","cap","shallowClone","returnObject","applyExplicit","clone","newObj","cloneAny","getAt","addr","segments","i","segment","undefine","init","slugify","oncePerTick","fn","called","boolGetter","createDispatcher","middleware","currentIndex","use2","dispatchable","dispatch","payload","current","explicitPayload","index","createEmitter","listeners","receipts2","buffer","emitter","node","event","wrapper","eventName","listener","pos","modifiers","receipt","_a","eventListeners","child","events","node2","emit","context","bubble2","meta","bubble","_context","isNode","on","_node","off","errorHandler","error2","next","warningHandler","warning","result","warn","code","data","error","createMessage","conf","storeTraps","applyMessages","setMessage","removeMessage","filterMessages","reduceMessages","releaseBuffer","touchMessages","createStore","_buffer","messages","_b","_m","_r","store","_target","_t","prop","releaseMissed","messageStore","message","previous","e","buffered","m","callback","_store","reducer","accumulator","_messageStore","clear","applied","address","missed","createMessages","errors","sourceKey","make","errorSet","errors2","misses","createLedger","ledger","createCounter","add","merge","counterName","condition","increment","parseCondition","counter","sum","count","initial","post","delta","parent","remove","originalParent","registry","reflected","emit2","register","deregister","id","getNode","watchRegistry","configChange","usingFallback","createConfig","options","nodes","target","t","r","submitForm","root","formElement","clearState","reset","resetTo","resetValue2","defaultConfig","useIndex","valueRemoved","valueMoved","valueInserted","isList","invalidSetter","traps","trap","getContext","addChild","addProps","getAddress","getNode2","clearErrors","calm","define","disturb","destroy","hydrate","getIndex","setIndex","input","eachChild","find","setParent","removeChild","getRoot","resetValue","resetConfig","setErrors","submit","text","use","getName","walkTree","createTraps","getter","setter","curryGetter","createHooks","hooks","_","nameCount","idCount","createName","createValue","async","validateInput","commit","calm2","hydrate2","partial","from","insert","_value","syncListNodes","childValue","newChildren","unused","placeholderValues","indexes","emptyIndexes","createPlaceholder","isPlaceholder","resolve","shouldHydrate","definition","clonedDef","mergeProps","feature","propNames","defaults","defaults2","attrs","attr","camelName","mergedProps","toPropsObj","props2","newProps","extend$1","parentContext","listIndex","existingNode","_property","childIndex","preserve","stopIfFalse","skipSubtreeOnFalse","val","createConfig2","plugin","run","library","setIndex2","children","oldIndex","locator","first","pointer","c","select","selector","matches","action","argStr","searchTerm","searcher","bfs","tree","searchValue","searchGoal","search","stack","localValue","parentVal","rootValue","didSet","fragment","localErrors","childErrors","clearChildErrors","createProps","isEmitting","propDefs","_c","_d","originalValue","receiver","trap2","findDefinition","createContext","nodeInit","hasInitialId","createNode","ops","isDOM","isComponent","isConditional","isSugar","sugar","iterator","bind","compile","expr","provideTokens","requirements","operand","operatorRegistry","l","operatorSymbols","s","operatorChars","getOp","symbols","expression","candidates","symbol","getStep","direction","reversed","start","char2","operators","getTail","tail","length","parseLogicals","step","op","left","operation","parenthetical","parenQuote","startP","addTo","depth2","hasTail","lStep","rStep","evaluate","v","fnToken","userFuncReturn","tailCall","userFunc","subTokens","rootTokens","tokenSet","token3","cleaned","compiled","reqs","provide","createClasses","propertyKey","sectionClassList","generateClassList","combinedClassList","finalClassList","currentClassList","handleNegativeClasses","$reset","classList","removalToken","hasNegativeClassValue","applicableClasses","className","negativeClass","targetClass","setErrors2","clearErrors2","clearChildren","FORMKIT_VERSION","revokedObservers","createObserver","dependencies","deps","receipts","addDependency","observeProps","observeLedger","observe","observed","revoke","block","after","watch","old","newDeps","removeListeners","subArgs","subValue","applyListeners","toAdd","depNode","events2","nodeReceipts","doAfterObservation","res2","diffDeps","oldDeps","res","eventsToAdd","previousEvents","eventsToRemove","newEvents","isKilled","accepted","accepted_default","date_after","compare","timestamp","fieldValue","date_after_default","date_after_or_equal","date_after_or_equal_default","date_after_node","foreignValue","date_after_node_default","alpha","set","selectedSet","alpha_default","alpha_spaces","alpha_spaces_default","alphanumeric","alphanumeric_default","date_before","date_before_default","date_before_node","date_before_node_default","date_before_or_equal","date_before_or_equal_default","between","to","b","between_default","hasConfirm","confirm","comparison","confirm_default","contains_alpha","contains_alpha_default","contains_alpha_spaces","contains_alpha_spaces_default","contains_alphanumeric","contains_alphanumeric_default","contains_lowercase","contains_lowercase_default","contains_numeric","contains_numeric_default","contains_symbol","contains_symbol_default","contains_uppercase","contains_uppercase_default","date_between","dateA","dateB","compareTo","date_between_default","date_format","date_format_default","email","email_default","ends_with","item","ends_with_default","is","is_default","second","min3","max3","length3","length_default","lowercase","lowercase_default","pattern","matches_default","max","maximum","max_default","min","minimum","min_default","not","not_default","number2","number_default","require_one","inputNames","require_one_default","required","required_default","starts_with","starts_with_default","symbol_default","uppercase","uppercase_default","url","protocols","url3","url_default","validatingMessage","createValidationPlugin","baseRules","propRules","availableRules","state","validation","reboot","newValidation","newRules","validation2","parseRules","validate","validations","removeImmediately","complete","currentRun","diff","createFailedMessage","nextValidation","runRule","createI18nArgs","i18nArgs","customMessage","createCustomMessage","createMessageName","hintPattern","rulePattern","ruleExtractor","hintExtractor","debounceExtractor","hasDebounce","defaultHints","rules","extractRules","rule","hints","ruleName","parsedHints","parseHints","fnHints","parsedRule","parseRule","trimmed","map","hintGroups","hints2","group","hint","existingHints","sentence","list","items","conjunction","oxford","date","date2","dateTime","order","ui10","validation10","postfix","a","labels","name2","dependentNode","en","i18nNodes","createI18nPlugin","localeKey","parseLocale","locale","lang","availableLocales","locale2","createLibraryPlugin","libraries","lib","runtimeProps","isGroupOption","option2","normalizeOptions","options2","optionValue","undefinedIfNotFound","found","shouldSelect","valueA","valueB","createSection","section","el","fragment2","extendable","extensions","extendSchema","createRoot","rootSection","isSchemaObject","schema","extension","actions","box","boxHelp","boxInner","boxLabel","boxOption","boxOptions","boxWrapper","buttonInput","buttonLabel","decorator","fieldset","fileInput","fileItem","fileList","fileName","fileRemove","formInput","help","icon","sectionKey","rawIconProp","inner","label","legend","noFiles","optGroup","option","optionSlot","outer","prefix","selectInput","submitInput","suffix","textInput","textareaInput","radioInstance","renamesRadios","renamesRadiosPlugin","normalizeBoxes","toggleChecked","existingValue","isChecked","checkboxes","defaultIcon","defaultIcon2","disables","localize","isBrowser","removeHover","preventStrayDrop","files","files2","file2","loading","handleSubmit","submitEvent","submitNonce","setSubmitted","setIncompleteMessage","retVal","autoDisable","form","disabled","ignore","initialValue","casts","strict","numericValue","toggleChecked2","isChecked2","radios","isSelected","optionValue2","optionA","containsValue","deferChange","selectInput2","applyPlaceholder","placeholder","firstValue","isMultiple","hasMatchingValue","isSlotCondition","useSchema","inputSection","sectionsSchema","propSectionsSchema","$if","then","otherwise","conditionalNode","$extend","extendWith","button","checkbox","file","form2","hidden","radio","select2","textarea","inputs","documentStyles","documentThemeLinkTag","themeDidLoad","themeHasLoaded","themeWasRequested","themeLoaded","isClient","iconRegistry","iconRequests","createThemePlugin","theme","icons","iconLoaderUrl","iconLoader","loadTheme","themePlugin","createIconHandler","loadIconPropIcons","clickHandlerProp","handlerFunction","themeUrl","link","iconName","isDefault","iconWasAlreadyLoaded","loadedIcon","getIconFromStylesheet","iconValue","getRemoteIcon","finalIcon","loadStylesheetIcon","cssVarIcon","formkitVersion","fetchUrl","iconHandler","iconRegex","loadPropIcon","reloadIcon","svg","operator","warnings","inputType","decodeErrors","err","registered","decodeWarnings","__defProp","__getOwnPropNames","__esm","__export","all","vueBindings","bindings_default","init_bindings","isValid","ref","hasErrors","hasTicked","nextTick","availableMessages","reactive","message3","validationVisibility","hasShownErrors","isRequired","checkForRequired","parsedRules","validationVisible","computed","isInvalid","isComplete","hasValidation","messages3","visibleMessages","ui","messages4","passing","cachedClasses","classes2","rootClasses","globalConfigClasses","classesPropClasses","sectionPropClasses","keys","describedBy","describers","value2","doCompare","isDirty","markRaw","triggerRef","isSettled","iconPattern","matchingProps","definedAs","definition3","isRef","isReactive","updateState","defaultConfig_exports","init_defaultConfig","locales","inputs$1","nodeOptions","defaultRules","i18n","isServer","ssrCompleteRegistry","onSSRComplete","app","isServer2","memo","memoKeys","instanceKey","instanceScopes","raw","isClassProp","getRef","nodeRefs","get","path","watchEffect","getValue","subset","foundValue","currentValue","parseSchema","memoKey","library2","provider","createElements","alternate","parseConditionAttr","_default","parseAttrs","unparsedAttrs","bindExp","explicitAttrs","boundAttrs","setters","bound","getValue2","isStr","parseNode","element","childCondition","iterationData","produceChildren","slotData2","currentKey","values","createSlots","slots","allSlots","slotName","slotFn","createElement","createNodes","createTextVNode","resolveComponent","h","repeatedNode","getValues","valueName","keyName","_v","instanceScope","isArray","previousIterationData","scopedData","schema2","els","element2","providers","compiledFns","createInstance","providerCallback","toMemoKey","render","compiledProviders","compiledProvider","useScope","defaultValue","scopedValue","slotData","data2","prevKey","createRenderFn","instanceCreator","instanceKey2","slot","hasSlot","FormKitSchema","defineComponent","instance","getCurrentInstance","FormKit_default","newSchema","oldSchema","oldKey","cleanUp","onMounted","onUnmounted","FormKitSchema_default","isServer3","parentSymbol","componentSymbol","FormKit","useInput","generateSchema","schemaDefinition","definitionLibrary","formkitComponent","didMount","rootSymbol","createPlugin","optionsSymbol","configSymbol","_options","rootConfig","pseudoProps","boolProps","classesToNodeProps","onlyListeners","inject","__root","__cmpCallback","isVModeled","isMounted","createInitialProps","initialProps2","propValues","propName","classesProps","initialProps","lateBoundProps","lateProps","newProp","pseudoPropNames","names","passThrough","attributeWatchers","possibleProps","watchAttributes","attrProps","stop","error3","inputErrors","clonedValueBeforeVmodel","toRef","onBeforeUnmount","totalCreated","isComponent2","createInput","schemaOrComponent","definitionOptions","cmpName","summary","summaryInner","messages2","message2","summaryHeader","messageLink","hasEmojiSupport","offset","ctx","removeEmoji","_sfc_main","mapGetters","iconType","$options","_createElementBlock","_normalizeClass","_createBlock","_component_fluent_icon","$props","_createCommentVNode","EmojiOrIcon","Spinner","hasEmojiOrIcon","_hoisted_1","_component_Spinner","_component_EmojiOrIcon","_ctx","_renderSlot","countries","_iterableToArrayLimit","u","f","ownKeys","_objectSpread2","_defineProperty","_toPropertyKey","_objectWithoutPropertiesLoose","source","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","_slicedToArray","arr","_arrayWithHoles","_unsupportedIterableToArray","_nonIterableRest","minLen","_arrayLikeToArray","len","_toPrimitive","prim","countries$1","timezones$1","timezonesMap","buildCountry","tzMap","getTimezonesMap","buildTimezonesMap","tz","aliasTz","country","buildTimezone","timezone","_timezone$a","aliasOf","utcOffset","dstOffset","getOffsetStr","hours","sign","getNumStr","num","_excluded","totalTimezones","timezones","memoizedTimezones","getAllCountries","prev","getCountry","getAllTimezones","getTimezone","deliverTimezones","memoizeCountry","deliverCountry","memoizeTimezone","getCountriesForTimezone","tzName","getCountryForTimezone","_getCountriesForTimez","_getCountriesForTimez2","main","getTimezonesForCountry","countryId","tzs","_ref","deprecated","_ref2","other","getActiveDialCode","getPhoneCodeByTimezone","getActiveCountryCode","ct","initials","acc","curr","_normalizeStyle","_createTextVNode","_toDisplayString","Avatar","size","badgeSize","borderRadius","statusSize","variant","oldValue","_hoisted_2","_hoisted_3","_createElementVNode","_createVNode","_component_Avatar","addDays","dirtyDate","dirtyAmount","requiredArgs","toDate","amount","toInteger","compareAsc","dirtyDateLeft","dirtyDateRight","dateLeft","dateRight","isSameDay","dateLeftStartOfDay","startOfDay","dateRightStartOfDay","differenceInCalendarMonths","yearDiff","monthDiff","differenceInMilliseconds","endOfDay","endOfMonth","month","isLastDayOfMonth","differenceInMonths","difference","isLastMonthNotFull","differenceInSeconds","assign","dirtyObject","cloneObject","MINUTES_IN_DAY","MINUTES_IN_ALMOST_TWO_DAYS","MINUTES_IN_MONTH","MINUTES_IN_TWO_MONTHS","formatDistance","dirtyBaseDate","dirtyOptions","defaultLocale","localizeOptions","seconds","offsetInSeconds","getTimezoneOffsetInMilliseconds","minutes","months","days","nearestMonth","monthsSinceStartOfYear","years","formatDistanceToNow","distanceInWords","getHours","getMinutes","getTime","getUnixTime","subDays","setUTCDay","dirtyDay","localeWeekStartsOn","defaultWeekStartsOn","weekStartsOn","day","currentDay","remainder","dayIndex","setUTCISODay","setUTCISOWeek","dirtyISOWeek","isoWeek","getUTCISOWeek","setUTCWeek","dirtyWeek","week","getUTCWeek","MILLISECONDS_IN_HOUR","MILLISECONDS_IN_MINUTE","MILLISECONDS_IN_SECOND","numericPatterns","timezonePatterns","parseNumericPattern","valueCallback","matchResult","parseTimezonePattern","parseAnyDigitsSigned","parseNDigits","parseNDigitsSigned","dayPeriodEnumToHours","enumValue","normalizeTwoDigitYear","twoDigitYear","currentYear","isCommonEra","absCurrentYear","rangeEnd","rangeEndCentury","isPreviousCentury","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","isLeapYearIndex","year","parsers","match","flags","_date","normalizedTwoDigitYear","getUTCWeekYear","startOfUTCWeek","_match","_flags","firstWeekOfYear","startOfUTCISOWeek","isLeapYear","wholeWeekDays","isPM","_token","TIMEZONE_UNIT_PRIORITY","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","notWhitespaceRegExp","unescapedLatinCharacterRegExp","parse","dirtyDateString","dirtyFormatString","dirtyReferenceDate","dateString","formatString","localeFirstWeekContainsDate","defaultFirstWeekContainsDate","firstWeekContainsDate","subFnOptions","dateToSystemTimezone","substring","firstCharacter","longFormatter","longFormatters","usedTokens","isProtectedWeekYearToken","throwProtectedError","isProtectedDayOfYearToken","parser","incompatibleTokens","incompatibleToken","usedToken","parseResult","cleanEscapedString","uniquePrioritySetters","priority","array","setterArray","utcDate","subMilliseconds","convertedDate","isSameYear","isToday","isYesterday","useStore","vm","useStoreGetters","useMapGetter","useFunctionGetter","unrefedArgs","unref","global","factory","exports","this","adapters","logger","_adapters$logger","_len","_key","_typeof","classCallCheck","Constructor","createClass","defineProperties","descriptor","protoProps","staticProps","now","secondsSince","time","clamp","number","ConnectionMonitor","connection","_this","_constructor$pollInte","multiplier","interval","_this2","INTERNAL","message_types","supportedProtocols","indexOf","Connection","consumer","allowReconnect","states","handler","_JSON$parse","identifier","reason","reconnect","object","properties","Subscription","params","mixin","Subscriptions","channelName","channel","subscription","callbackName","_this3","_len2","_key2","subscriptions","command","Consumer","createWebSocketURL","createConsumer","getConfig","PRESENCE_INTERVAL","RECONNECT_INTERVAL","_BaseActionCableConnector","pubsubToken","websocketHost","__publicField","websocketURL","isConnectionActive","BaseActionCableConnector","GOOD_LEAF_SIZE","RopeSequence","Append","elt","Leaf","prototypeAccessors","right","leftLen","ropeSequence","OrderedMap","content","newKey","self","place","without","findDiffStart","childA","childB","j","findDiffEnd","posA","posB","iA","iB","same","minSize","Fragment","nodeStart","end","blockSeparator","leafText","nodeText","last","copy","otherPos","round","retIndex","curPos","cur","joined","compareDeep","Mark","placed","json","mark","marks","ReplaceError","Slice","openStart","openEnd","insertInto","removeRange","openIsolating","indexTo","offsetTo","dist","replace","$from","$to","slice","replaceOuter","close","prepareSliceForReplace","replaceThreeWay","replaceTwoWay","checkJoin","sub","joinable","$before","$after","addNode","addRange","$start","$end","startIndex","endIndex","$along","extra","ResolvedPos","parentOffset","dOff","tmp","pred","d","NodeRange","doc","rem","cache","resolveCache","ResolveCache","resolveCacheSize","emptyAttrs","Node$1","Node","startPos","includeParents","wrapMarks","replacement","one","two","TextNode","base","ContentMatch","validEnd","nodeTypes","stream","TokenStream","parseExpr","dfa","nfa","checkForDeadEnds","frag","toEnd","seen","types","finished","tp","active","scan","out","tok","exprs","parseExprSeq","parseExprSubscript","parseExprAtom","parseExprRange","parseNum","resolveName","typeName","connect","edge","term","edges","loop","cmp","nullFrom","labeled","explore","work","dead","defaultAttrs","attrName","computeAttrs","built","given","checkAttrs","initAttrs","Attribute","NodeType$1","NodeType","spec","before","matched","markType","topType","validateType","MarkType","rank","Schema","instanceSpec","contentExprCache","contentExpr","markExpr","gatherMarks","excl","ok","isTagRule","isStyleRule","DOMParser","matchedStyles","dom","ParseContext","style","blockTags","ignoreTags","listTags","OPT_PRESERVE_WS","OPT_PRESERVE_WS_FULL","OPT_OPEN_LEFT","wsOptionsFor","preserveWhitespace","NodeContext","solid","fill","wrap","isOpen","topNode","topContext","topOptions","top","nodeBefore","domNodeBefore","matchAfter","ruleID","normalizeList","sync","oldNeedsBlock","innerMarks","styles","continueAfter","nodeType","startIn","contentDOM","route","cx","nodeMarks","markMayApply","preserveWS","applyMarks","textNode","parts","useRoot","minDepth","part","$context","deflt","prevItem","DOMSerializer","keep","rendered","markDOM","renderSpec","inline","toDOM","structure","xmlNS","blockArraysIn","gatherToDOM","suspiciousAttributeCache","suspiciousAttributes","suspiciousAttributesInner","tagName","suspicious","space","innerContent","lower16","factor16","makeRecover","recoverIndex","recoverOffset","DEL_BEFORE","DEL_AFTER","DEL_ACROSS","DEL_SIDE","MapResult","delInfo","recover","StepMap","ranges","inverted","assoc","simple","newIndex","oldSize","newSize","side","del","oldStart","newStart","Mapping","maps","mirror","mirrors","mapping","startSize","mirr","totalSize","inverse","corr","stepsByID","Step","stepClass","StepResult","failed","mapFragment","mapped","AddMarkStep","oldSlice","RemoveMarkStep","AddNodeMarkStep","updated","newSet","RemoveNodeMarkStep","ReplaceStep","contentBetween","ReplaceAroundStep","gapFrom","gapTo","gap","inserted","addMark","tr","removed","added","removing","adding","removeMark","clearIncompatible","parentType","clearNewlines","replSteps","allowed","newline","canCut","liftTarget","range","lift","gapStart","gapEnd","splitting","findWrapping","innerRange","around","findWrappingOutside","findWrappingInside","withAttrs","inside","innerMatch","wrappers","setBlockType","mapFrom","attrsHere","canChangeType","convertNewlines","pre","supportLinebreak","replaceLinebreaks","startM","endM","replaceNewlines","$pos","setNodeMarkup","newNode","canSplit","typesAfter","innerType","rest","overrideChild","baseType","split","typeAfter","canJoin","joinPoint","dir","join","insertPoint","dropPoint","pass","bias","insertPos","fits","wrapping","replaceStep","fitsTrivially","Fitter","unplaced","fit","moveInline","placedSize","startDepth","sliceDepth","contentAt","frontierDepth","openAtEnd","dropFromFragment","taken","openEndCount","closeNodeStart","addToFragment","level","contentAfterFits","dropInner","open","invalidMarks","definesContent","replaceRange","targetDepths","coveredDepths","preferredTarget","preferredTargetIndex","leftNodes","preferredDepth","leftNode","def","openDepth","targetDepth","expand","closeFragment","startSteps","oldOpen","newOpen","replaceRangeWith","point","deleteRange","covered","AttrStep","DocAttrStep","TransformError","Transform","classesById","Selection","$anchor","$head","SelectionRange","lastNode","lastParent","selectionToInsertionEnd","textOnly","TextSelection","findSelectionIn","AllSelection","cls","selectionClass","warnedAboutTextSelection","checkTextSelection","TextBookmark","anchor","head","dPos","NodeSelection","deleted","NodeBookmark","sel","AllBookmark","startLen","_from","_to","_newFrom","newTo","UPDATED_SEL","UPDATED_MARKS","UPDATED_SCROLL","Transaction","selection","inheritMarks","FieldDesc","desc","baseFields","_marks","_old","Configuration","EditorState","rootTr","trs","newState","haveNew","oldState","newInstance","fields","field","$config","pluginFields","bindProps","Plugin","createKey","PluginKey","max_empty_items","Branch","eventCount","preserveItems","remap","transform","remaining","addAfter","addBefore","Item","histOptions","newItems","oldItems","lastItem","overflow","DEPTH_OVERFLOW","cutOffEvents","mirrorPos","rebasedTransform","rebasedCount","rebasedItems","newUntil","iRebased","newMaps","branch","upto","newItem","cutPoint","mirrorOffset","HistoryState","done","undone","prevRanges","prevTime","prevComposition","applyTransaction","history","historyTr","historyKey","rebased","closeHistoryKey","appended","mustPreserveItems","rangesFor","composition","newGroup","isAdjacentTo","mapRanges","adjacent","histTransaction","redo","pop","newHist","cachedPreserveItems","cachedPreserveItemsPlugins","hist","view","undo","buildCommand","scroll","dropCursor","editorView","DropCursorView","prevState","isBlock","rect","nodeRect","coords","parentLeft","parentTop","timeout","disableDropCursor","shift","chrome","safari","gecko","mac","ie","brokenModifierNames","ignoreKey","normalizeKeyName","alt","ctrl","mod","normalize","keymap","bindings","keydownHandler","baseName","direct","noShift","fromCode","domIndex","parentNode","reusedRange","textRange","clearReusedRange","isEquivalentPosition","targetNode","targetOff","scanFor","atomElements","nodeSize","hasBlockDesc","textNodeBefore$1","textNodeAfter$1","isOnEdge","atStart","atEnd","selectionCollapsed","domSel","keyEvent","keyCode","deepActiveElement","caretFromPoint","nav","agent","ie_edge","ie_upto10","ie_11up","ie_version","_chrome","chrome_version","ios","windows","android","webkit","webkit_version","windowRect","vp","getSide","clientRect","scaleX","scaleY","scrollRectIntoView","startDOM","scrollThreshold","scrollMargin","atTop","bounding","moveX","moveY","startX","startY","dX","dY","storeScrollPos","refDOM","refTop","localRect","scrollStack","resetScrollPos","newRefTop","restoreScrollStack","dTop","preventScrollSupported","focusPreventScroll","stored","findOffsetInNode","closest","dxClosest","coordsClosest","rowBot","rowTop","firstBelow","coordsBelow","rects","dx","findOffsetInText","singleRect","inRect","targetKludge","posFromElement","posFromCaret","outsideBlock","sawBlock","elementFromPoint","startI","posAtCoords","caret","nonZero","BIDI","coordsAtPos","atom","supportEmptyRange","rectBefore","rectAfter","flattenV","takeSide","flattenH","withFlushedState","viewState","endOfTextblockVertical","nearest","boxes","maybeRTL","endOfTextblockHorizontal","oldNode","oldOff","anchorNode","anchorOffset","oldBidiLevel","parentDOM","newOff","cachedState","cachedDir","cachedResult","endOfTextblock","NOT_DIRTY","CHILD_DIRTY","CONTENT_DIRTY","NODE_DIRTY","ViewDesc","widget","outerDeco","innerDeco","nodeName","domBefore","domAfter","onlyNodes","nodeDOM","TrailingHackViewDesc","WidgetViewDesc","enter","fromOffset","toOffset","childBase","force","anchorDOM","headDOM","brKludge","domSelExtended","mutation","startInside","endInside","dirty","CompositionViewDesc","textDOM","mut","MarkViewDesc","custom","replaceNodes","NodeViewDesc","descObj","applyOuterDeco","CustomNodeViewDesc","TextViewDesc","sameOuterDeco","localComposition","compositionInChild","updater","ViewTreeUpdater","iterDeco","insideNode","compIndex","renderDescs","iosHacks","textPos","findTextInFragment","needsWrap","oldDOM","patchOuterDeco","computeOuterDeco","docViewDesc","docView","skip","descs","written","childDOM","rm","OuterDecoLevel","noDeco","outerDOM","prevComputed","curComputed","curDOM","deco","patchAttributes","prevList","curList","lock","preMatch","maxKeep","markDesc","targetDesc","domNode","nextDOM","locked","ch","lastChild","hack","parentDesc","curDesc","descI","fI","compareSide","onWidget","onNode","locals","decoIndex","restNode","parentIndex","widgets","cutAt","oldCSS","childStart","selectionFromDOM","origin","nearestDesc","inWidget","nearestDescNode","selectionBetween","editorOwnsSelection","hasSelection","selectionToDOM","syncNodeSelection","curSel","selectCursorWrapper","resetEditableFrom","resetEditableTo","brokenSelectBetweenUneditable","temporarilyEditableNear","resetEditable","removeClassOnSelectionChange","setEditable","img","clearNodeSelection","hasFocusAndSelection","anchorInRightPlace","moveSelectionBlock","$side","apply","selectHorizontally","mods","$newHead","nodePos","nodeLen","isIgnorable","skipIgnoredNodes","skipIgnoredNodesBefore","skipIgnoredNodesAfter","moveNode","moveOffset","isBlockNode","setSelFocus","textNodeAfter","textNodeBefore","findDirection","mid","selectVertically","beyond","stopNativeHorizontalDelete","nextNode","switchEditable","safariDownArrowBug","focusNode","focusOffset","getMods","captureKeyDown","serializeForClipboard","serializer","detachedDoc","firstChild","wrapMap","parseFromClipboard","html","plainText","inCode","asText","parsed","readHTML","restoreReplacedSpaces","contextNode","sliceData","inlineParents","addContext","closeSlice","normalizeSiblings","lastWrap","inLast","addToSibling","closeRight","wrapped","withWrappers","sibling","closeRange","_detachedDoc","metas","firstTag","handlers","editHandlers","passiveHandlers","InputState","initInput","eventBelongsToView","runCustomHandler","ensureListeners","setSelectionOrigin","destroyInput","currentHandlers","dispatchEvent","_event","inOrNearComposition","eventCoords","isNear","click","dy","runHandlerOnContext","updateSelection","selectClickedLeaf","selectClickedNode","selectedNode","selectAt","handleSingleClick","selectNode","handleDoubleClick","handleTripleClick","defaultTripleClick","forceDOMFlush","endComposition","selectNodeModifier","flushed","MouseDown","targetPos","timeoutComposition","scheduleComposeEnd","delay","clearComposition","timestampFromCustomEvent","findCompositionNode","textBefore","textAfter","descAfter","lastChanged","descBefore","restarting","captureCopy","brokenClipboardAPI","cut","sliceSingleNode","capturePaste","plain","doPaste","preferPlain","singleNode","getText","clipboardData","uris","Dragging","move","dragCopyModifier","mouseDown","draggedSlice","dragging","eventPos","$mouse","beforeInsert","domChangeCount","$cursor","compareObjs","WidgetType","noSpec","span","oldOffset","Decoration","InlineType","none","DecorationSet","local","decorations","buildTree","predicate","childOff","newLocal","mapChildren","byPos","childNode","childOffset","baseOffset","takeSpansForNode","moveSpans","withoutNulls","dec","localSet","DecorationGroup","removeOverlap","members","mappedDecos","member","sorted","oldChildren","moved","oldEnd","newEnd","dSize","mustRebuild","fromLocal","toLocal","mapAndGatherRemainingDecorations","spans","gather","hasNulls","localStart","subtree","working","insertAhead","viewDecorations","observeOptions","useCharData","SelectionState","DOMObserver","handleDOMChange","mutations","take","ancestors","container","newSel","typeOver","brs","br","blockParent","readSel","checkCSS","previousSibling","nextSibling","cssChecked","cssCheckWarned","rangeToSelectionRange","currentAnchor","safariShadowSelectionRange","read","parseBetween","from_","to_","startDoc","ruleFromNode","isInline","readDOMChange","addedNodes","compositionID","shared","preferredPos","preferredSide","change","findDiff","resolveSelection","$fromA","inlineChange","nextSel","looksLikeBackspace","chFrom","chTo","storedMarks","markChange","isMarkChange","parsedSel","curMarks","prevMarks","update","$newStart","$newEnd","skipClosingAndOpening","$next","fromEnd","mayOpen","endA","endB","adjust","isSurrogatePair","EditorView","checkStateComponent","getEditable","updateCursorWrapper","buildNodeViews","computeDocDeco","prevProps","redraw","updateSel","pluginsChanged","nodeViews","changedNodeViews","updateDoc","oldScrollPos","forceSelUpdate","selectionContextChanged","chromeKludge","pluginView","movedPos","cached","dispatchTransaction","sel1","sel2","nA","nB","GapCursor","GapBookmark","closedBefore","closedAfter","override","mustMove","$cur","gapCursor","drawGapCursor","_view","handleClick","handleKeyDown","beforeinput","arrow","axis","dirStr","$found","clickPos","crelt","deleteSelection","atBlockStart","joinBackward","$cut","findCutBefore","deleteBarrier","textblockAt","delStep","selectNodeBackward","atBlockEnd","joinForward","findCutAfter","selectNodeForward","joinUp","nodeSel","joinDown","newlineInCode","defaultBlockAt","exitCode","above","createParagraphNear","liftEmptyBlock","splitBlockAs","splitNode","can","$first","splitBlock","selectParentNode","selectAll","joinMaybeClear","conn","isolated","canDelAfter","joinAt","selAfter","at","afterText","afterDepth","selectTextblockSide","selectTextblockStart","selectTextblockEnd","applicable","markApplies","enterAtoms","toggleMark","spaceStart","spaceEnd","chainCommands","commands","backspace","pcBaseKeymap","macBaseKeymap","baseKeymap","SVG","XLINK","prefix$2","hashPath","hash","getIcon","width","height","buildSVG","css","collection","sym","prefix$1","MenuItem","crel","translate","title","selected","enabled","setClass","combineUpdates","updates","something","up","renderGrouped","separators","localUpdates","localNodes","separator","needSep","hasContent","isIOS","menuBar","MenuBarView","potentialScrollers","getAllWrapping","selRect","selectionIsInverted","menuRect","scrollable","findWrappingScrollable","scrollAncestor","editorRect","border","InputRule","stringHandler","cutOff","MAX_MATCH","inputRules","undoInputRule","undoable","toUndo","wrappingInputRule","regexp","getAttrs","joinPredicate","textblockTypeInputRule","replaceParentNodeOfType","findParentNodeOfType","newTr","replaceNodeAtPos","setTextSelection","position","nextSelection","isSelectableNode","PMNode","shouldSelectNode","setSelection","safeInsert","tryToReplace","hasPosition","$insertPos","isNodeSelection","isEmptyParagraph","oldTr","canInsert","cloneTr","NodeSelection2","equalNodeType","canReplace","Fragment2","PMNode2","findParentNode","validateSameParent","fromNode","findParentNodeClosestToPos","hasParentNode","hasParentNodeOfType","olDOM","ulDOM","liDOM","orderedList","bulletList","listItem","wrapInList","listType","doJoin","outerRange","$insert","doWrapInList","joinBefore","splitDepth","splitPos","liftListItem","itemType","liftToOuterList","liftOutOfList","endOfList","indexBefore","sinkListItem","nestedBefore","decodeCache","getDecodeCache","exclude","decode","seq","b1","b2","chr","b3","b4","encodeCache","getEncodeCache","encode","keepEscaped","nextCode","Url","protocolPattern","portPattern","simplePathPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","hostlessProtocol","slashedProtocol","urlParse","slashesDenoteHost","lowerProto","hec","slashes","simplePath","proto","hostEnd","auth","atSign","host","ipv6Hostname","hostparts","newpart","validParts","notHost","bit","qm","port","Any","Cc","regex$1","P","Z$1","htmlDecodeTree","xmlDecodeTree","decodeMap","fromCodePoint","codePoint","output","replaceCodePoint","CharCodes","TO_LOWER_BIT","BinTrieFlags","isNumber","isHexadecimalCharacter","isAsciiAlphaNumeric","isEntityInAttributeInvalidEnd","EntityDecoderState","DecodingMode","EntityDecoder","decodeTree","emitCodePoint","decodeMode","digitCount","startIdx","lastCp","expectedLength","valueLength","determineBranch","consumed","getDecoder","ret","decoder","lastIndex","nodeIdx","branchCount","jumpOffset","lo","hi","midVal","htmlDecoder","decodeHTML","mode","_class","isString","_hasOwnProperty","arrayReplaceAt","src","newElements","isValidEntityCode","surrogate1","surrogate2","UNESCAPE_MD_RE","ENTITY_RE","UNESCAPE_ALL_RE","DIGITAL_ENTITY_TEST_RE","replaceEntityPattern","decoded","unescapeMd","unescapeAll","entity","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","escapeHtml","REGEXP_ESCAPE_RE","escapeRE","isSpace","isWhiteSpace","isPunctChar","ucmicro.P","ucmicro.S","isMdAsciiPunct","normalizeReference","mdurl","ucmicro","parseLinkLabel","disableNested","marker","prevPos","oldPos","labelEnd","parseLinkDestination","parseLinkTitle","prev_state","default_rules","idx","env","slf","info","langName","langAttrs","highlighted","tmpAttrs","tmpToken","Renderer","needLf","nextToken","Ruler","chains","altName","chain","opt","beforeName","afterName","ignoreInvalid","chainName","Token","tag","nesting","attrData","StateCore","md","NEWLINES_RE","NULL_RE","isLinkOpen","isLinkClose","linkify","blockTokens","htmlLinkLevel","currentToken","links","lastPos","ln","fullUrl","urlText","token_o","token_t","token_c","RARE_RE","SCOPED_ABBR_TEST_RE","SCOPED_ABBR_RE","SCOPED_ABBR","replaceFn","replace_scoped","inlineTokens","inside_autolink","replace_rare","blkIdx","QUOTE_TEST_RE","QUOTE_RE","APOSTROPHE","replaceAt","process_inlines","thisLevel","OUTER","canOpen","canClose","isSingle","nextChar","isLastPunctChar","isNextPunctChar","isLastWhiteSpace","isNextWhiteSpace","openQuote","closeQuote","smartquotes","text_join","_rules","r_normalize","r_block","r_inline","r_linkify","r_replacements","r_smartquotes","r_text_join","Core","StateBlock","indent","indent_found","line","begin","keepLastLF","queue","lineIndent","lineStart","MAX_AUTOCOMPLETED_CELLS","getLine","escapedSplit","isEscaped","table","startLine","endLine","silent","nextLine","firstCh","secondCh","lineText","columns","aligns","columnCount","oldParentType","terminatorRules","token_to","tableLines","token_tho","token_htro","token_ho","token_il","tbodyLines","autocompletedCells","terminate","token_tbo","token_tro","token_tdo","fence","mem","markup","haveEndMarker","blockquote","oldLineMax","oldBMarks","oldBSCount","oldSCount","oldTShift","lastLineEmpty","isOutdented","spaceAfterMarker","adjustTab","oldIndent","lines","hr","cnt","skipBulletListMarker","skipOrderedListMarker","markTightParagraphs","tight","isTerminatingParagraph","isOrdered","markerValue","posAfterMarker","markerCharCode","listTokIdx","listLines","prevEmptyEnd","contentStart","indentAfterMarker","itemLines","oldTight","oldListIndent","reference","_endLine","getNextLine","isContinuation","lineContent","destRes","href","destEndPos","destEndLineNo","titleRes","block_names","attr_name","unquoted","single_quoted","double_quoted","attr_value","attribute","open_tag","close_tag","comment","processing","declaration","cdata","HTML_TAG_RE","HTML_OPEN_CLOSE_TAG_RE","HTML_SEQUENCES","html_block","heading","token_i","lheading","paragraph","r_table","r_code","r_fence","r_blockquote","r_hr","r_list","r_reference","r_html_block","r_heading","r_lheading","r_paragraph","ParserBlock","maxNesting","hasEmptyLines","prevLine","outTokens","StateInline","token_meta","canSplitWord","left_flanking","right_flanking","isTerminatorChar","SCHEME_RE","pmax","ws","ESCAPED","escape","ch1","escapedStr","ch2","origStr","backtick","openerLength","matchEnd","matchStart","closerLength","strikethrough_tokenize","scanned","postProcess","delimiters","loneMarkers","startDelim","endDelim","strikethrough_postProcess","tokens_meta","r_strikethrough","emphasis_tokenize","isStrong","emphasis_post_process","r_emphasis","parseReference","labelStart","image","EMAIL_RE","AUTOLINK_RE","autolink","isLetter","lc","html_inline","DIGITAL_RE","NAMED_RE","processDelimiters","openersBottom","headerIdx","lastTokenIdx","jumps","closerIdx","closer","minOpenerIdx","openerIdx","newMinOpenerIdx","opener","isOddMatch","lastJump","link_pairs","fragments_join","r_text","r_newline","r_escape","r_backticks","r_link","r_image","r_autolink","r_html_inline","r_entity","_rules2","r_balance_pairs","r_fragments_join","ParserInline","reFactory","opts","re","Z","text_separators","isRegExp","isFunction","defaultOptions","isOptionsObj","defaultSchemas","tlds_2ch_src_re","tlds_default","resetScanCache","createValidator","createNormalizer","tlds","untpl","tpl","aliases","schemaError","alias","slist","Match","createMatch","LinkifyIt","schemas","ml","me","tld_pos","at_pos","keepOld","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","baseMinusTMin","floor","stringFromCharCode","mapDomain","domain","encoded","ucs2decode","ucs2encode","codePoints","basicToDigit","digitToBasic","digit","flag","adapt","numPoints","firstTime","inputLength","basic","oldi","w","baseMinusT","basicLength","handledCPCount","handledCPCountPlusOne","q","qMinusT","toUnicode","toASCII","punycode","cfg_default","cfg_zero","cfg_commonmark","BAD_PROTO_RE","GOOD_DATA_RE","validateLink","RECODE_HOSTNAME_FOR","normalizeLink","mdurl.parse","mdurl.encode","mdurl.format","normalizeLinkText","mdurl.decode","MarkdownIt","presetName","utils.isString","ParserCore","utils","utils.assign","helpers","presets","maybeMerge","MarkdownParseState","tokenHandlers","toks","noCloseToken","withoutTrailingNewline","noOp","MarkdownParser","tokenizer","markdownEnv","listIsTight","blankMark","MarkdownSerializer","MarkdownSerializerState","delimMin","trim","delim","firstDelim","fromBlockStart","trailing","progress","leading","lead","noEsc","isTight","prevTight","startOfLine","UNESCAPE_RE","superscript","token_so","token_sc","sup_plugin","Placeholder","placeholderText","decorate","markActive","hasCode","hasUnsupportedMarkForBlockInputRule","unsupportedMarksPresent","isUnsupportedMark","hasUnsupportedMarkForInputRule","isCodemark","defaultInputRuleHandler","inputRule","isBlockNodeRule","originalHandler","unsupportedMarks","createInputRule$1","leafNodeReplacementCharacter","hasVisibleContent","isInlineNodeHasVisibleContent","inlineNode","isNodeEmpty","nonBlock","compose","functions","getFragmentBackingArray","transformed","mapSlice","atTheEndOfDoc","canMoveDown","atTheBeginningOfDoc","canMoveUp","maxIndentation","createInputRule","insertList","listTypeName","hardBreak","currentNode","list_item","getBulletListInputRules","asteriskRule","leafNodeAsteriskRule","getOrderedListInputRules","numberOneRule","leafNodeNumberOneRule","listInputRules","isInsideListItem","numberNestedLists","resolvedPos","bullet_list","ordered_list","mergeLists","$join","outdentList","baseListCommand.liftListItem","splitListItem","grandParent","keepItem","tr$1","nextType","enterKeyOnListCommand","wrapperHasContent","canSink","initialIndentationLevel","currentIndentationLevel","currentPos","indentList","baseListCommand.sinkListItem","tlds2Char","createLinkInputRule","normalizeUrl","LinkMatcher","chunks","lastChunk","lastLink","whitelistedURLPatterns","isSafeUrl","getLinkMatch","linksInputRules","urlWithASpaceRule","markdownLinkRule","linkText","linkUrl","applyMarkOnRange","nodeBetweenFrom","nodeBetweenTo","moveRight","insideCode","currentPosHasCode","nextPosHasCode","exitingCode","enteringCode","moveLeft","nextNextPosHasCode","atLeftEdge","atRightEdge","isFirstChild","insertBlock","codeBlock","nodeHasMoreContent","transformToCodeBlockAction","startOfCodeBlockText","parentPos","codeBlockSlice","codeBlockMarks","isConvertableToCodeBlock","parentDepth","cleanUpAtTheStartOfDocument","canCreateParagraphNear","insideCodeBlock","createNewParagraphBelow","createNewParagraphAbove","topLevelNodeIsEmptyTextBlock","topLevelNode","getInsertPosFromTextBlock","append","getInsertPosFromNonTextBlock","MAX_HEADING_LEVEL","getHeadingLevel","headingRule","maxLevel","blockQuoteRule","getHeadingRules","hashRule","leftNodeReplacementHashRule","getBlockQuoteRules","greatherThanRule","leftNodeReplacementGreatherRule","getCodeBlockRules","threeTildeRule","attributes","leftNodeReplacementThreeTildeRule","blocksInputRule","createHorizontalRuleInputRule","hrPos","hrInputRules","hrRule","baseKeyMaps","cmd","backspaceComands","modEnter","enterCommands","createParagraphNear$1","validCombos","validRegex","matchLength","charSize","textWithCombo","containsHardBreak","addCodeMark","specialChar","regexStart","codeMark","strongRegex1","strongRegex2","italicRegex1","italicRegex2","strikeRegex","codeRegex","supertextRegex","getStrongInputRules","doubleUnderscoreRule","doubleAsterixRule","getItalicInputRules","underscoreRule","asterixRule","getStrikeInputRules","getSuperscriptInputRules","getCodeInputRules","textFormattingInputRules","reportInvalid","msg","domFields","bad","openPrompt","mouseOutside","submitButton","cancelButton","titleDom","buttons","Field","TextField","cmdItem","passedOptions","optionKey","markItem","blockTypeIsActive","wrapperDepth","currentDepth","currentNodeAtDepth","isType","hasAttrs","toggleBlockType","newNodeType","BaseIcon","wrapListItem","imageUploadItem","onImageUpload","headerItem","linkItem","buildMenuOptions","enabledMenuOptions","availableMenuOptions","menuOptionKey","filterMdToPmSchemaMapping","newMap","baseSchemaToMdMapping","baseNodesMdToPmMapping","heightMatch","baseMarksMdToPmMapping","messageSchemaToMdMapping","messageMdToPmMapping","mention","userId","userFullName","md$1","MessageMarkdownTransformer","articleSchemaToMdMapping","articleMdToPmMapping","MarkdownItSup","ArticleMarkdownTransformer","uri","escapedDisplayName","code_block","horizontal_rule","maxW","nStr","param","hard_break","em","strike","strong","_state","isPlainURL","_mark","backticksFor","ticks","ArticleMarkdownSerializer","MessageMarkdownSerializer","fullSchema","messageSchema","buildEditor","SIGNATURE_DELIMITER","cleanSignature","signature","Sentry.captureException","appendDelimiter","findSignatureInBody","body","trimmedBody","cleanedSignature","appendSignature","removeSignature","signatureIndex","newBody","delimiterIndex","replaceSignature","oldSignature","newSignature","withoutSignature","extractTextFromMarkdown","markdown","scrollCursorIntoView","insertAtCursor","findNodeToInsertImage","editorState","fileUrl","imageNode","isInParagraph","needsNewLine","setURLWithQueryAndSize","selectedImageNode","nodeCreators","variables","updatedMessage","replaceVariablesInMessage","getContentNode","creator","formatBytes","bytes","decimals","dm","sizes","fileSizeInMegaBytes","checkFileSizeLimit","maximumUploadLimit","fileSize","messageStamp","dateFormat","unixTime","fromUnixTime","messageTimestamp","messageTime","messageDate","dynamicTime","df","shortTimestamp","withAgo","timeMappings","TYPING_INDICATOR_IDLE_TIME","createTypingIndicator","newValue","signatureEnabled","valueWithSignature","bodyEndsAt","i18nMessages","ar","ca","cs","da","de","es","fa","fi","fr","he","hu","it","ja","ko","lt","lv","nl","no","pl","pt_BR","pt","ro","ru","sk","sr","sv","ta","th","uk","vi","zh_CN","zh_TW","defaultTimeSlot","generateTimeSlots","hour","minute","merdian","modHour","parsedHour","parsedMinute","timeSlotParse","timeSlots","openHour","openMinutes","closeHour","closeMinutes","closedAllDay","openAllDay","timeSlotTransform","closed","fromDate","timeZoneOptions","timeZoneData","formatUnixDate","unixDate","formatDate","todayText","yesterdayText","dateValue","isTimeAfter","h1","m1","h2","m2","getUnixStartOfDay","getUnixEndOfDay","generateRelativeTime","unit","languageCode","getDayDifferenceFromNow","timestampInSeconds","differenceInDays","module","require$$0","vue","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","iter","_ownKeys","enumerableOnly","_objectSpread","_defineProperty2","_classCallCheck","_defineProperties","_createClass","createRequest","xhr","sendRequest","reject","response","sendFormRequest","request","ChunkUploadHandler","completedProgress","uploadingProgress","chunk","_this4","evt","_this5","_this6","lastUploadedBytes","uploadedBytes","CHUNK_DEFAULT_OPTIONS","script","_this7","exts","_active","oldMaps","newFile","oldFile","_files","addFiles","fileObject","newFiles","_newFiles","index2","_file","_i2","_this8","entrys","dataTransfer","_dataTransfer$items","_this9","dataTransferTtem","entry","maximumValue","_i3","_this10","uploadFiles","forEach","results","fileEntry","directoryEntry","_uploadFiles","dirReader","readEntries","entries","id1","id2","file1","index1","isPrevent","prevent","_newFile","_this11","_newFile2","HandlerClass","querys","putAction","queryString","ufile","_this12","speedTime","speedLoaded","speedTime2","_file2","contentType","_this13","onKeydown","iframe","getResponseData","_doc","_file3","_iframe$parentNode","_iframe$parentNode2","newDrop","oldDrop","_el","_el2","newDropActive","oldDropActive","_dt$files","_dt$types","dt","_this$dropElement","related","_this14","reinput","_cache","$setup","$data","styleInject","insertAt","css_248z","createCommonjsModule","sparkMd5","undefined","hex_chr","md5cycle","md5blk","md5blks","md5blk_array","md51","md51_array","rhex","hex","targetArray","sourceArray","toUtf8","utf8Str2ArrayBuffer","returnUInt8Array","buff","arrayBuffer2Utf8Str","concatenateArrayBuffers","hexToBinaryString","SparkMD5","contents","fileSlice","FileChecksum","binaryDigest","base64digest","getMetaValue","findElement","findElements","elements","toArray$1","eventInit","bubbles","cancelable","detail","BlobRecord","checksum","direct_upload","_xhr","responseType","BlobUpload","blob","_blob$directUploadDat","headers","status","DirectUpload","delegate","notify","upload","methodName","DirectUploadController","hiddenInput","inputSelector","DirectUploadsController","controllers","startNextController","controller","processingAttribute","submitButtonsByForm","started","didClick","didSubmitForm","didSubmitRemoteElement","handleFormSubmissionEvent","disable","enable","_button","autostart","_sfc_render","_openBlock","ArticleSkeletonLoader","iframeElement","iframeDocument","_component_ArticleSkeletonLoader","isAFormMessage","isASubmittedFormMessage","MESSAGE_MAX_LENGTH","DYTE_MEETING_LINK","buildDyteURL","dyteAuthToken","_imports_0","R","be","Pe","M","Re","D","S","A","T","Se","L","I","U","$","V","Y","O","xe","X","F","B","J","Q","Ee","W","ee","N","te","ne","z","se","ae","oe","K","ce","le","fe","ue","pe","H","__privateAdd","_H_instances","_n","_e","_l","_o","_p","_g","__privateSet","__privateGet","__privateMethod","b_fn","f_fn","r_fn","h_fn","u_fn","A_fn","T_fn","P_fn","C_fn","E_fn","S_fn","x_fn","O_fn","y_fn","w_fn","k_fn","c_fn","R_fn","m_fn","a_fn","G","E","ge","C","Oe","ke","URLPattern"],"mappings":"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X,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,YACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,kCACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,yBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,iCACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,oBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,eACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,KACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,iBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,2BACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,OACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,mBACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,0BACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,8CACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,eACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,gBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,OACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,iBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,qBACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,cACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,oBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,8BACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,gBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,OACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,gBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,mBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,YACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,YACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,OACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,YACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,gBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,gCACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,YACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,YACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,yCACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,OACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,cACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,+CACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,iCACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,OACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,yBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,gBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,YACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,YACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,OACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,mBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,YACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,6CACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,MAAO,OACP,UAAW,OACX,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,cACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,uBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,gBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,cACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,YACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,OACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,iBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,2BACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,OACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,kCACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,mBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,OACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,cACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,cACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,KACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,mBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,+CACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,wBACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,cACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,eACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,4BACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,mCACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,wBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,eACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,eACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,YACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,kBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,eACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,cACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,+CACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,YACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,yBACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,YACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,cACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,uBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,wCACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,cACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,OACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,sBACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,eACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,2BACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,uBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,iBACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,gBACN,UAAW,KACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,aACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,8CACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,UACN,UAAW,MACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,0BACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,uBACN,UAAW,QACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,oBACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,QACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,SACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,EACD,CACE,KAAM,WACN,UAAW,OACX,MAAO,OACP,GAAI,IACL,CACH,EC76CM98B,GAAI,CACR,iBAAkB,OAClB,eAAgB,OAChB,qBAAsB,OACtB,iBAAkB,OAClB,gBAAiB,OACjB,gBAAiB,OACjB,gBAAiB,OACjB,gBAAiB,OACjB,gBAAiB,OACjB,kBAAmB,OACnB,qBAAsB,OACtB,mBAAoB,OACpB,eAAgB,MAChB,oBAAqB,OACrB,eAAgB,MAChB,iBAAkB,OAClB,eAAgB,OAChB,uBAAwB,OACxB,kBAAmB,OACnB,gBAAiB,OACjB,kBAAmB,OACnB,kBAAmB,OACnB,kBAAmB,OACnB,gBAAiB,OACjB,sBAAuB,MACvB,cAAe,OACf,iBAAkB,OAClB,kBAAmB,OACnB,gBAAiB,OACjB,kBAAmB,OACnB,eAAgB,OAChB,oBAAqB,OACrB,cAAe,OACf,gBAAiB,OACjB,oBAAqB,OACrB,gBAAiB,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GAAI,UACJ,GAAI,SACJ,GAAI,uCACJ,GAAI,2BACJ,GAAI,UACJ,GAAI,aACJ,GAAI,WACJ,GAAI,mCACJ,GAAI,YACJ,GAAI,sBACJ,GAAI,sBACJ,GAAI,UACJ,GAAI,UACJ,GAAI,oBACJ,GAAI,QACJ,GAAI,QACJ,GAAI,UACJ,GAAI,eACJ,GAAI,SACJ,GAAI,UACL,EACIC,GAAc,CACjB,iBAAkB,CACjB,EAAG,EACH,EAAG,CACF,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACH,CACE,EACD,eAAgB,CACf,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,qBAAsB,CACrB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,GACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,eACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,EACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,qBAAsB,CACrB,EAAG,eACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,eAAgB,CACf,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,GACH,EAAG,EACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,GACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,eAAgB,CACf,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,uBAAwB,CACvB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,eACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,GACH,EAAG,EACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,sBAAuB,CACtB,EAAG,IACH,EAAG,CACF,KACA,KACA,IACH,CACE,EACD,cAAe,CACd,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,eACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,eAAgB,CACf,EAAG,GACH,EAAG,CACF,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,eACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,cAAe,CACd,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,eACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,oBAAqB,CACpB,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,eACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,EACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,CACF,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,GACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,eACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,oBAAqB,CACpB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,qBAAsB,CACrB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,oBAAqB,CACpB,EAAG,eACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,EACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,GACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iCAAkC,CACjC,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,8BAA+B,CAC9B,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,mCAAoC,CACnC,EAAG,8BACH,EAAG,CACH,EACD,4BAA6B,CAC5B,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,0BAA2B,CAC1B,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,6BAA8B,CAC7B,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,4BAA6B,CAC5B,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iCAAkC,CACjC,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,0BAA2B,CAC1B,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,6BAA8B,CAC7B,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,6BAA8B,CAC7B,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,4BAA6B,CAC5B,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,4BAA6B,CAC5B,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,eAAgB,CACf,EAAG,eACH,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,yBAA0B,CACzB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,uBAAwB,CACvB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,uBAAwB,CACvB,EAAG,iCACH,EAAG,CACH,EACD,wBAAyB,CACxB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,uBAAwB,CACvB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,8BACH,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,wBAAyB,CACxB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,wBAAyB,CACxB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,4BACH,EAAG,CACH,EACD,qBAAsB,CACrB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,kBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,uBAAwB,CACvB,EAAG,EACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,uBAAwB,CACvB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,sBAAuB,CACtB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,kBACH,EAAG,CACH,EACD,sBAAuB,CACtB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,+BACH,EAAG,CACH,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,eACH,EAAG,CACH,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,qBAAsB,CACrB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,+BAAgC,CAC/B,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,uBAAwB,CACvB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,0BAA2B,CAC1B,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,6BAA8B,CAC7B,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,4BAA6B,CAC5B,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,wBAAyB,CACxB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,4BAA6B,CAC5B,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,0BAA2B,CAC1B,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,uBAAwB,CACvB,EAAG,+BACH,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,0BACH,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,8BAA+B,CAC9B,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,8BAA+B,CAC9B,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,uBACH,EAAG,CACH,EACD,qBAAsB,CACrB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,sBAAuB,CACtB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,8BACH,EAAG,CACH,EACD,wBAAyB,CACxB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,qBAAsB,CACrB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,4BACH,EAAG,CACH,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,sBAAuB,CACtB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,kBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,qBAAsB,CACrB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,kBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,kBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,eAAgB,CACf,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,8BAA+B,CAC9B,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,8BAA+B,CAC9B,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iCAAkC,CACjC,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,KACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,CACF,KACA,KACA,IACH,CACE,EACD,sBAAuB,CACtB,EAAG,kBACH,EAAG,CACH,EACD,qBAAsB,CACrB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,KACH,EAAG,CACF,KACA,IACH,CACE,EACD,yBAA0B,CACzB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,wBAAyB,CACxB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,qBAAsB,CACrB,EAAG,qBACH,EAAG,CACH,EACD,sBAAuB,CACtB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,sBAAuB,CACtB,EAAG,KACH,EAAG,CACF,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACH,CACE,EACD,uBAAwB,CACvB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,sBAAuB,CACtB,EAAG,mBACH,EAAG,CACH,EACD,uBAAwB,CACvB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,4BACH,EAAG,CACH,EACD,uBAAwB,CACvB,EAAG,kBACH,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,wBAAyB,CACxB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,uBAAwB,CACvB,EAAG,IACH,EAAG,EACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,iBACH,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,wBAAyB,CACxB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,oBAAqB,CACpB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,qBAAsB,CACrB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,wBAAyB,CACxB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,sBAAuB,CACtB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,sBAAuB,CACtB,EAAG,kBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,KACH,EAAG,KACH,EAAG,CACF,KACA,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,qBAAsB,CACrB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,sBAAuB,CACtB,EAAG,mBACH,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,4BAA6B,CAC5B,EAAG,uBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,uBAAwB,CACvB,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,mBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,wBAAyB,CACxB,EAAG,mBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,cACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,EACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,cACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,sBAAuB,CACtB,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,YAAa,CACZ,EAAG,cACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,cAAe,CACd,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,aAAc,CACb,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,cAAe,CACd,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,aAAc,CACb,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,cAAe,CACd,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,gBACH,EAAG,CACH,EACD,cAAe,CACd,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,aACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,YAAa,CACZ,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,KACA,KACA,KACA,KACA,IACH,CACE,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,cAAe,CACd,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,cAAe,CACd,EAAG,eACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,eACH,EAAG,CACH,EACD,aAAc,CACb,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,gBACH,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,gBACH,EAAG,CACH,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,aAAc,CACb,EAAG,aACH,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,aAAc,CACb,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,YAAa,CACZ,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,aAAc,CACb,EAAG,IACH,EAAG,CACF,KACA,KACA,KACA,KACA,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,YAAa,CACZ,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,cAAe,CACd,EAAG,gBACH,EAAG,CACH,EACD,cAAe,CACd,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,YAAa,CACZ,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,kBACH,EAAG,CACH,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,aAAc,CACb,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,cACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,iBACH,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,KACA,IACH,CACE,EACD,cAAe,CACd,EAAG,cACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,aAAc,CACb,EAAG,aACH,EAAG,CACH,EACD,aAAc,CACb,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,cAAe,CACd,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,cAAe,CACd,EAAG,aACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,eAAgB,CACf,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,YAAa,CACZ,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,YAAa,CACZ,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,eACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,aAAc,CACb,EAAG,IACH,EAAG,CACF,KACA,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,cACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,cAAe,CACd,EAAG,IACH,EAAG,CACF,KACA,KACA,KACA,IACH,CACE,EACD,cAAe,CACd,EAAG,mBACH,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,aAAc,CACb,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,CACF,KACA,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,cAAe,CACd,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,cAAe,CACd,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,iBACH,EAAG,CACH,EACD,cAAe,CACd,EAAG,eACH,EAAG,CACH,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,aAAc,CACb,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,aAAc,CACb,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,gBACH,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,mBACH,EAAG,CACH,EACD,cAAe,CACd,EAAG,IACH,EAAG,CACF,KACA,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,eACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,cAAe,CACd,EAAG,IACH,EAAG,CACF,KACA,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,IACH,EAAG,EACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,EACH,EAAG,GACH,EAAG,CACF,IACH,CACE,EACD,sBAAuB,CACtB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,iBACH,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,EACH,EAAG,GACH,EAAG,CACF,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,EACH,EAAG,GACH,EAAG,CACF,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,yBAA0B,CACzB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,mBACH,EAAG,CACH,EACD,qBAAsB,CACrB,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,wBAAyB,CACxB,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,mBACH,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,mBACH,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,sBACH,EAAG,CACH,EACD,qBAAsB,CACrB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,sBAAuB,CACtB,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,sBAAuB,CACtB,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,mBACH,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,mBACH,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,uBAAwB,CACvB,EAAG,qBACH,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,qBACH,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,mBACH,EAAG,CACH,EACD,qBAAsB,CACrB,EAAG,sBACH,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,kBACH,EAAG,CACH,EACD,uBAAwB,CACvB,EAAG,wBACH,EAAG,CACH,EACD,cAAe,CACd,EAAG,qBACH,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,kBACH,EAAG,CACH,EACD,cAAe,CACd,EAAG,oBACH,EAAG,CACH,EACD,cAAe,CACd,EAAG,iBACH,EAAG,CACH,EACD,IAAK,CACJ,EAAG,GACH,EAAG,GACH,EACD,QAAS,CACR,EAAG,KACH,EAAG,IACH,EACD,kBAAmB,CAClB,EAAG,kBACH,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,mBACH,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,kBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,mBACH,EAAG,CACH,EACD,sBAAuB,CACtB,EAAG,mBACH,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,oBACH,EAAG,CACH,EACD,sBAAuB,CACtB,EAAG,iBACH,EAAG,CACH,EACD,eAAgB,CACf,EAAG,qBACH,EAAG,CACH,EACD,oBAAqB,CACpB,EAAG,mBACH,EAAG,CACH,EACD,qBAAsB,CACrB,EAAG,iBACH,EAAG,CACH,EACD,KAAM,CACL,EAAG,iBACH,EAAG,CACH,EACD,IAAK,CACJ,EAAG,IACH,EAAG,GACH,EACD,IAAK,CACJ,EAAG,IACH,EACD,QAAS,CACR,EAAG,KACH,EAAG,IACH,EACD,MAAO,CACN,EAAG,eACH,EAAG,CACH,EACD,KAAM,CACL,EAAG,gBACH,EAAG,CACH,EACD,UAAW,CACV,EAAG,CACH,EACD,YAAa,CACZ,EAAG,UACH,EAAG,CACH,EACD,YAAa,CACZ,EAAG,GACH,EACD,aAAc,CACb,EAAG,IACH,EACD,aAAc,CACb,EAAG,IACH,EACD,aAAc,CACb,EAAG,IACH,EACD,YAAa,CACZ,EAAG,IACH,EACD,YAAa,CACZ,EAAG,IACH,EACD,YAAa,CACZ,EAAG,IACH,EACD,YAAa,CACZ,EAAG,IACH,EACD,YAAa,CACZ,EAAG,IACH,EACD,YAAa,CACZ,EAAG,IACH,EACD,YAAa,CACZ,EAAG,IACH,EACD,YAAa,CACZ,EAAG,IACH,EACD,YAAa,CACZ,EAAG,UACH,EAAG,CACH,EACD,YAAa,CACZ,EAAG,EACH,EACD,aAAc,CACb,EAAG,GACH,EACD,aAAc,CACb,EAAG,GACH,EACD,aAAc,CACb,EAAG,GACH,EACD,aAAc,CACb,EAAG,GACH,EACD,aAAc,CACb,EAAG,GACH,EACD,YAAa,CACZ,EAAG,GACH,EACD,YAAa,CACZ,EAAG,GACH,EACD,YAAa,CACZ,EAAG,GACH,EACD,YAAa,CACZ,EAAG,GACH,EACD,YAAa,CACZ,EAAG,GACH,EACD,YAAa,CACZ,EAAG,GACH,EACD,YAAa,CACZ,EAAG,GACH,EACD,YAAa,CACZ,EAAG,GACH,EACD,WAAY,CACX,EAAG,UACH,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,UACH,EAAG,CACH,EACD,UAAW,CACV,EAAG,UACH,EAAG,CACH,EACD,UAAW,CACV,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,UACH,EAAG,CACH,EACD,WAAY,CACX,EAAG,UACH,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,kBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,GACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,GACH,EAAG,IACH,EAAG,CACF,KACA,KACA,KACA,KACA,KACA,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,GACH,EAAG,IACH,EAAG,CACF,KACA,KACA,KACA,KACA,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,GACH,EAAG,IACH,EAAG,CACF,KACA,KACA,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,GACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,GACH,EAAG,EACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,GACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,IACH,EAAG,IACH,EAAG,CACF,KACA,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,qBAAsB,CACrB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,cAAe,CACd,EAAG,cACH,EAAG,CACH,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,cAAe,CACd,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,EACH,EAAG,GACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,kBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,EACH,EAAG,GACH,EAAG,CACF,KACA,KACA,KACA,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,kBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,GACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,GACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,kBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,eACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,eACH,EAAG,CACH,EACD,cAAe,CACd,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,eAAgB,CACf,EAAG,GACH,EAAG,IACH,EAAG,CACF,KACA,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,kBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,GACH,EAAG,IACH,EAAG,CACF,KACA,IACH,CACE,EACD,cAAe,CACd,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,cAAe,CACd,EAAG,GACH,EAAG,IACH,EAAG,CACF,KACA,KACA,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,cACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,kBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,IACH,EAAG,CACF,KACA,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,kBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,eAAgB,CACf,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,GACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,kBACH,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,cACH,EAAG,CACH,EACD,eAAgB,CACf,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,cACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,GACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,GACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,kBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,oBAAqB,CACpB,EAAG,cACH,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,GACH,EAAG,IACH,EAAG,CACF,KACA,KACA,IACH,CACE,EACD,QAAS,CACR,EAAG,CACH,EACD,GAAI,CACH,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,UAAW,CACV,EAAG,gBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,IAAK,CACJ,EAAG,UACH,EAAG,CACH,EACD,QAAS,CACR,EAAG,UACH,EAAG,CACH,EACD,QAAS,CACR,EAAG,UACH,EAAG,CACH,EACD,KAAM,CACL,EAAG,UACH,EAAG,CACH,EACD,UAAW,CACV,EAAG,UACH,EAAG,CACH,EACD,IAAK,CACJ,EAAG,IACH,EACD,SAAU,CACT,EAAG,iBACH,EAAG,CACH,EACD,QAAS,CACR,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,sBAAuB,CACtB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,eACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,eAAgB,CACf,EAAG,cACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,mBAAoB,CACnB,EAAG,kBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,cAAe,CACd,EAAG,aACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,IACH,EAAG,CACF,KACA,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,aACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,KAAM,CACL,EAAG,cACH,EAAG,CACH,EACD,OAAQ,CACP,EAAG,iBACH,EAAG,CACH,EACD,QAAS,CACR,EAAG,kBACH,EAAG,CACH,EACD,MAAO,CACN,EAAG,aACH,EAAG,CACH,EACD,UAAW,CACV,EAAG,oBACH,EAAG,CACH,EACD,MAAO,CACN,EAAG,iBACH,EAAG,CACH,EACD,IAAK,CACJ,EAAG,GACH,EAAG,GACH,EACD,IAAK,CACJ,EAAG,IACH,EACD,QAAS,CACR,EAAG,KACH,EAAG,IACH,EACD,mBAAoB,CACnB,EAAG,kBACH,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,mBACH,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,sBACH,EAAG,CACH,EACD,GAAI,CACH,EAAG,mBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,UAAW,CACV,EAAG,kBACH,EAAG,CACH,EACD,OAAQ,CACP,EAAG,iBACH,EAAG,CACH,EACD,IAAK,CACJ,EAAG,gBACH,EAAG,CACH,EACD,QAAS,CACR,EAAG,KACH,EAAG,IACH,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,IACH,EAAG,IACH,EAAG,CACF,KACA,IACH,CACE,EACD,uBAAwB,CACvB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,uBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,iBACH,EAAG,CACH,EACD,kBAAmB,CAClB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,sBAAuB,CACtB,EAAG,IACH,EAAG,CACF,KACA,IACH,CACE,EACD,eAAgB,CACf,EAAG,IACH,EAAG,CACF,KACA,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,mBACH,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,qBAAsB,CACrB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,oBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,IACH,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,CACF,KACA,IACH,CACE,EACD,gBAAiB,CAChB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,mBAAoB,CACnB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,kBAAmB,CAClB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,sBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,uBAAwB,CACvB,EAAG,IACH,EAAG,CACF,KACA,KACA,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,eACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,gBAAiB,CAChB,EAAG,oBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,KACH,EAAG,CACF,IACH,CACE,EACD,iBAAkB,CACjB,EAAG,IACH,EAAG,CACF,KACA,KACA,KACA,KACA,IACH,CACE,EACD,oBAAqB,CACpB,EAAG,IACH,EAAG,CACF,IACH,CACE,EACD,eAAgB,CACf,EAAG,uBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,eAAgB,CACf,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,iBAAkB,CACjB,EAAG,iBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,cAAe,CACd,EAAG,uBACH,EAAG,CACF,IACA,EACD,EAAG,CACH,EACD,OAAQ,CACP,EAAG,gBACH,EAAG,CACH,EACD,SAAU,CACT,EAAG,gBACH,EAAG,CACH,EACD,IAAK,CACJ,EAAG,cA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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,14,15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,48,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,145,146,152,153]}