@dynamicforms/vuetify-inputs 0.10.0 → 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"dynamicforms-vuetify-inputs.js","sources":["../node_modules/date-fns/locale/sl/_lib/formatDistance.js","../node_modules/date-fns/locale/_lib/buildFormatLongFn.js","../node_modules/date-fns/locale/sl/_lib/formatLong.js","../node_modules/date-fns/locale/sl/_lib/formatRelative.js","../node_modules/date-fns/locale/_lib/buildLocalizeFn.js","../node_modules/date-fns/locale/sl/_lib/localize.js","../node_modules/date-fns/locale/_lib/buildMatchFn.js","../node_modules/date-fns/locale/_lib/buildMatchPatternFn.js","../node_modules/date-fns/locale/sl/_lib/match.js","../node_modules/date-fns/locale/sl.js","../src/helpers/date-time-locale.ts","../src/helpers/df-input-hint.vue","../src/helpers/df-label.vue","../src/helpers/settings.ts","../src/helpers/input-base.ts","../src/helpers/input-base.vue","../src/helpers/translations.ts","../src/helpers/action/action-display-style.ts","../src/helpers/action/responsive-render-options.ts","../src/helpers/action/action-render-options.ts","../src/helpers/action/action.ts","../src/df-actions.vue","../src/df-checkbox.vue","../src/df-color.vue","../src/df-datetime.vue","../src/df-file.vue","../src/df-input.vue","../src/helpers/rtf-editor/block-styles.ts","../src/helpers/rtf-editor/image-paste.ts","../src/helpers/rtf-editor/link-with-download.ts","../src/helpers/rtf-editor/media-embed.ts","../src/helpers/rtf-editor/use-editor-tick.ts","../src/helpers/rtf-editor/rtf-toolbar.vue","../src/helpers/rtf-editor/word-paste.ts","../src/helpers/rtf-editor/editor-core.vue","../src/df-rtf-editor.vue","../src/helpers/df-select.helper.ts","../src/df-select.vue","../src/df-text-area.vue","../src/dynamicforms-components-by-tag.ts","../src/index.ts"],"sourcesContent":["function isPluralType(val) {\n return val.one !== undefined;\n}\n\nconst formatDistanceLocale = {\n lessThanXSeconds: {\n present: {\n one: \"manj kot {{count}} sekunda\",\n two: \"manj kot {{count}} sekundi\",\n few: \"manj kot {{count}} sekunde\",\n other: \"manj kot {{count}} sekund\",\n },\n past: {\n one: \"manj kot {{count}} sekundo\",\n two: \"manj kot {{count}} sekundama\",\n few: \"manj kot {{count}} sekundami\",\n other: \"manj kot {{count}} sekundami\",\n },\n future: {\n one: \"manj kot {{count}} sekundo\",\n two: \"manj kot {{count}} sekundi\",\n few: \"manj kot {{count}} sekunde\",\n other: \"manj kot {{count}} sekund\",\n },\n },\n\n xSeconds: {\n present: {\n one: \"{{count}} sekunda\",\n two: \"{{count}} sekundi\",\n few: \"{{count}} sekunde\",\n other: \"{{count}} sekund\",\n },\n past: {\n one: \"{{count}} sekundo\",\n two: \"{{count}} sekundama\",\n few: \"{{count}} sekundami\",\n other: \"{{count}} sekundami\",\n },\n future: {\n one: \"{{count}} sekundo\",\n two: \"{{count}} sekundi\",\n few: \"{{count}} sekunde\",\n other: \"{{count}} sekund\",\n },\n },\n\n halfAMinute: \"pol minute\",\n\n lessThanXMinutes: {\n present: {\n one: \"manj kot {{count}} minuta\",\n two: \"manj kot {{count}} minuti\",\n few: \"manj kot {{count}} minute\",\n other: \"manj kot {{count}} minut\",\n },\n past: {\n one: \"manj kot {{count}} minuto\",\n two: \"manj kot {{count}} minutama\",\n few: \"manj kot {{count}} minutami\",\n other: \"manj kot {{count}} minutami\",\n },\n future: {\n one: \"manj kot {{count}} minuto\",\n two: \"manj kot {{count}} minuti\",\n few: \"manj kot {{count}} minute\",\n other: \"manj kot {{count}} minut\",\n },\n },\n\n xMinutes: {\n present: {\n one: \"{{count}} minuta\",\n two: \"{{count}} minuti\",\n few: \"{{count}} minute\",\n other: \"{{count}} minut\",\n },\n past: {\n one: \"{{count}} minuto\",\n two: \"{{count}} minutama\",\n few: \"{{count}} minutami\",\n other: \"{{count}} minutami\",\n },\n future: {\n one: \"{{count}} minuto\",\n two: \"{{count}} minuti\",\n few: \"{{count}} minute\",\n other: \"{{count}} minut\",\n },\n },\n\n aboutXHours: {\n present: {\n one: \"približno {{count}} ura\",\n two: \"približno {{count}} uri\",\n few: \"približno {{count}} ure\",\n other: \"približno {{count}} ur\",\n },\n past: {\n one: \"približno {{count}} uro\",\n two: \"približno {{count}} urama\",\n few: \"približno {{count}} urami\",\n other: \"približno {{count}} urami\",\n },\n future: {\n one: \"približno {{count}} uro\",\n two: \"približno {{count}} uri\",\n few: \"približno {{count}} ure\",\n other: \"približno {{count}} ur\",\n },\n },\n\n xHours: {\n present: {\n one: \"{{count}} ura\",\n two: \"{{count}} uri\",\n few: \"{{count}} ure\",\n other: \"{{count}} ur\",\n },\n past: {\n one: \"{{count}} uro\",\n two: \"{{count}} urama\",\n few: \"{{count}} urami\",\n other: \"{{count}} urami\",\n },\n future: {\n one: \"{{count}} uro\",\n two: \"{{count}} uri\",\n few: \"{{count}} ure\",\n other: \"{{count}} ur\",\n },\n },\n\n xDays: {\n present: {\n one: \"{{count}} dan\",\n two: \"{{count}} dni\",\n few: \"{{count}} dni\",\n other: \"{{count}} dni\",\n },\n past: {\n one: \"{{count}} dnem\",\n two: \"{{count}} dnevoma\",\n few: \"{{count}} dnevi\",\n other: \"{{count}} dnevi\",\n },\n future: {\n one: \"{{count}} dan\",\n two: \"{{count}} dni\",\n few: \"{{count}} dni\",\n other: \"{{count}} dni\",\n },\n },\n\n // no tenses for weeks?\n aboutXWeeks: {\n one: \"približno {{count}} teden\",\n two: \"približno {{count}} tedna\",\n few: \"približno {{count}} tedne\",\n other: \"približno {{count}} tednov\",\n },\n\n // no tenses for weeks?\n xWeeks: {\n one: \"{{count}} teden\",\n two: \"{{count}} tedna\",\n few: \"{{count}} tedne\",\n other: \"{{count}} tednov\",\n },\n\n aboutXMonths: {\n present: {\n one: \"približno {{count}} mesec\",\n two: \"približno {{count}} meseca\",\n few: \"približno {{count}} mesece\",\n other: \"približno {{count}} mesecev\",\n },\n past: {\n one: \"približno {{count}} mesecem\",\n two: \"približno {{count}} mesecema\",\n few: \"približno {{count}} meseci\",\n other: \"približno {{count}} meseci\",\n },\n future: {\n one: \"približno {{count}} mesec\",\n two: \"približno {{count}} meseca\",\n few: \"približno {{count}} mesece\",\n other: \"približno {{count}} mesecev\",\n },\n },\n\n xMonths: {\n present: {\n one: \"{{count}} mesec\",\n two: \"{{count}} meseca\",\n few: \"{{count}} meseci\",\n other: \"{{count}} mesecev\",\n },\n past: {\n one: \"{{count}} mesecem\",\n two: \"{{count}} mesecema\",\n few: \"{{count}} meseci\",\n other: \"{{count}} meseci\",\n },\n future: {\n one: \"{{count}} mesec\",\n two: \"{{count}} meseca\",\n few: \"{{count}} mesece\",\n other: \"{{count}} mesecev\",\n },\n },\n\n aboutXYears: {\n present: {\n one: \"približno {{count}} leto\",\n two: \"približno {{count}} leti\",\n few: \"približno {{count}} leta\",\n other: \"približno {{count}} let\",\n },\n past: {\n one: \"približno {{count}} letom\",\n two: \"približno {{count}} letoma\",\n few: \"približno {{count}} leti\",\n other: \"približno {{count}} leti\",\n },\n future: {\n one: \"približno {{count}} leto\",\n two: \"približno {{count}} leti\",\n few: \"približno {{count}} leta\",\n other: \"približno {{count}} let\",\n },\n },\n\n xYears: {\n present: {\n one: \"{{count}} leto\",\n two: \"{{count}} leti\",\n few: \"{{count}} leta\",\n other: \"{{count}} let\",\n },\n past: {\n one: \"{{count}} letom\",\n two: \"{{count}} letoma\",\n few: \"{{count}} leti\",\n other: \"{{count}} leti\",\n },\n future: {\n one: \"{{count}} leto\",\n two: \"{{count}} leti\",\n few: \"{{count}} leta\",\n other: \"{{count}} let\",\n },\n },\n\n overXYears: {\n present: {\n one: \"več kot {{count}} leto\",\n two: \"več kot {{count}} leti\",\n few: \"več kot {{count}} leta\",\n other: \"več kot {{count}} let\",\n },\n past: {\n one: \"več kot {{count}} letom\",\n two: \"več kot {{count}} letoma\",\n few: \"več kot {{count}} leti\",\n other: \"več kot {{count}} leti\",\n },\n future: {\n one: \"več kot {{count}} leto\",\n two: \"več kot {{count}} leti\",\n few: \"več kot {{count}} leta\",\n other: \"več kot {{count}} let\",\n },\n },\n\n almostXYears: {\n present: {\n one: \"skoraj {{count}} leto\",\n two: \"skoraj {{count}} leti\",\n few: \"skoraj {{count}} leta\",\n other: \"skoraj {{count}} let\",\n },\n past: {\n one: \"skoraj {{count}} letom\",\n two: \"skoraj {{count}} letoma\",\n few: \"skoraj {{count}} leti\",\n other: \"skoraj {{count}} leti\",\n },\n future: {\n one: \"skoraj {{count}} leto\",\n two: \"skoraj {{count}} leti\",\n few: \"skoraj {{count}} leta\",\n other: \"skoraj {{count}} let\",\n },\n },\n};\n\nfunction getFormFromCount(count) {\n switch (count % 100) {\n case 1:\n return \"one\";\n case 2:\n return \"two\";\n case 3:\n case 4:\n return \"few\";\n default:\n return \"other\";\n }\n}\n\nexport const formatDistance = (token, count, options) => {\n let result = \"\";\n let tense = \"present\";\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n tense = \"future\";\n result = \"čez \";\n } else {\n tense = \"past\";\n result = \"pred \";\n }\n }\n\n const tokenValue = formatDistanceLocale[token];\n\n if (typeof tokenValue === \"string\") {\n result += tokenValue;\n } else {\n const form = getFormFromCount(count);\n if (isPluralType(tokenValue)) {\n result += tokenValue[form].replace(\"{{count}}\", String(count));\n } else {\n result += tokenValue[tense][form].replace(\"{{count}}\", String(count));\n }\n }\n\n return result;\n};\n","export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, dd. MMMM y\",\n long: \"dd. MMMM y\",\n medium: \"d. MMM y\",\n short: \"d. MM. yy\",\n};\n\nconst timeFormats = {\n full: \"HH:mm:ss zzzz\",\n long: \"HH:mm:ss z\",\n medium: \"HH:mm:ss\",\n short: \"HH:mm\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} {{time}}\",\n long: \"{{date}} {{time}}\",\n medium: \"{{date}} {{time}}\",\n short: \"{{date}} {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: (date) => {\n const day = date.getDay();\n\n switch (day) {\n case 0:\n return \"'prejšnjo nedeljo ob' p\";\n case 3:\n return \"'prejšnjo sredo ob' p\";\n case 6:\n return \"'prejšnjo soboto ob' p\";\n default:\n return \"'prejšnji' EEEE 'ob' p\";\n }\n },\n yesterday: \"'včeraj ob' p\",\n today: \"'danes ob' p\",\n tomorrow: \"'jutri ob' p\",\n nextWeek: (date) => {\n const day = date.getDay();\n\n switch (day) {\n case 0:\n return \"'naslednjo nedeljo ob' p\";\n case 3:\n return \"'naslednjo sredo ob' p\";\n case 6:\n return \"'naslednjo soboto ob' p\";\n default:\n return \"'naslednji' EEEE 'ob' p\";\n }\n },\n other: \"P\",\n};\n\nexport const formatRelative = (token, date, _baseDate, _options) => {\n const format = formatRelativeLocale[token];\n\n if (typeof format === \"function\") {\n return format(date);\n }\n\n return format;\n};\n","/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"pr. n. št.\", \"po n. št.\"],\n abbreviated: [\"pr. n. št.\", \"po n. št.\"],\n wide: [\"pred našim štetjem\", \"po našem štetju\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"1. čet.\", \"2. čet.\", \"3. čet.\", \"4. čet.\"],\n wide: [\"1. četrtletje\", \"2. četrtletje\", \"3. četrtletje\", \"4. četrtletje\"],\n};\n\nconst monthValues = {\n narrow: [\"j\", \"f\", \"m\", \"a\", \"m\", \"j\", \"j\", \"a\", \"s\", \"o\", \"n\", \"d\"],\n abbreviated: [\n \"jan.\",\n \"feb.\",\n \"mar.\",\n \"apr.\",\n \"maj\",\n \"jun.\",\n \"jul.\",\n \"avg.\",\n \"sep.\",\n \"okt.\",\n \"nov.\",\n \"dec.\",\n ],\n\n wide: [\n \"januar\",\n \"februar\",\n \"marec\",\n \"april\",\n \"maj\",\n \"junij\",\n \"julij\",\n \"avgust\",\n \"september\",\n \"oktober\",\n \"november\",\n \"december\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"n\", \"p\", \"t\", \"s\", \"č\", \"p\", \"s\"],\n short: [\"ned.\", \"pon.\", \"tor.\", \"sre.\", \"čet.\", \"pet.\", \"sob.\"],\n abbreviated: [\"ned.\", \"pon.\", \"tor.\", \"sre.\", \"čet.\", \"pet.\", \"sob.\"],\n\n wide: [\n \"nedelja\",\n \"ponedeljek\",\n \"torek\",\n \"sreda\",\n \"četrtek\",\n \"petek\",\n \"sobota\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"d\",\n pm: \"p\",\n midnight: \"24.00\",\n noon: \"12.00\",\n morning: \"j\",\n afternoon: \"p\",\n evening: \"v\",\n night: \"n\",\n },\n abbreviated: {\n am: \"dop.\",\n pm: \"pop.\",\n midnight: \"poln.\",\n noon: \"pold.\",\n morning: \"jut.\",\n afternoon: \"pop.\",\n evening: \"več.\",\n night: \"noč\",\n },\n wide: {\n am: \"dop.\",\n pm: \"pop.\",\n midnight: \"polnoč\",\n noon: \"poldne\",\n morning: \"jutro\",\n afternoon: \"popoldne\",\n evening: \"večer\",\n night: \"noč\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"d\",\n pm: \"p\",\n midnight: \"24.00\",\n noon: \"12.00\",\n morning: \"zj\",\n afternoon: \"p\",\n evening: \"zv\",\n night: \"po\",\n },\n abbreviated: {\n am: \"dop.\",\n pm: \"pop.\",\n midnight: \"opoln.\",\n noon: \"opold.\",\n morning: \"zjut.\",\n afternoon: \"pop.\",\n evening: \"zveč.\",\n night: \"ponoči\",\n },\n wide: {\n am: \"dop.\",\n pm: \"pop.\",\n midnight: \"opolnoči\",\n noon: \"opoldne\",\n morning: \"zjutraj\",\n afternoon: \"popoldan\",\n evening: \"zvečer\",\n night: \"ponoči\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n return number + \".\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // [TODO] -- I challenge you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // [TODO] -- I challenge you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // [TODO] I challenge you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)\\./i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n abbreviated: /^(pr\\. n\\. št\\.|po n\\. št\\.)/i,\n wide: /^(pred Kristusom|pred na[sš]im [sš]tetjem|po Kristusu|po na[sš]em [sš]tetju|na[sš]ega [sš]tetja)/i,\n};\nconst parseEraPatterns = {\n any: [/^pr/i, /^(po|na[sš]em)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^[1234]\\.\\s?[čc]et\\.?/i,\n wide: /^[1234]\\. [čc]etrtletje/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated:\n /^(jan\\.|feb\\.|mar\\.|apr\\.|maj|jun\\.|jul\\.|avg\\.|sep\\.|okt\\.|nov\\.|dec\\.)/i,\n wide: /^(januar|februar|marec|april|maj|junij|julij|avgust|september|oktober|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n abbreviated: [\n /^ja/i,\n /^fe/i,\n /^mar/i,\n /^ap/i,\n /^maj/i,\n /^jun/i,\n /^jul/i,\n /^av/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n wide: [\n /^ja/i,\n /^fe/i,\n /^mar/i,\n /^ap/i,\n /^maj/i,\n /^jun/i,\n /^jul/i,\n /^av/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[nptsčc]/i,\n short: /^(ned\\.|pon\\.|tor\\.|sre\\.|[cč]et\\.|pet\\.|sob\\.)/i,\n abbreviated: /^(ned\\.|pon\\.|tor\\.|sre\\.|[cč]et\\.|pet\\.|sob\\.)/i,\n wide: /^(nedelja|ponedeljek|torek|sreda|[cč]etrtek|petek|sobota)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^n/i, /^p/i, /^t/i, /^s/i, /^[cč]/i, /^p/i, /^s/i],\n any: [/^n/i, /^po/i, /^t/i, /^sr/i, /^[cč]/i, /^pe/i, /^so/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(d|po?|z?v|n|z?j|24\\.00|12\\.00)/i,\n any: /^(dop\\.|pop\\.|o?poln(\\.|o[cč]i?)|o?pold(\\.|ne)|z?ve[cč](\\.|er)|(po)?no[cč]i?|popold(ne|an)|jut(\\.|ro)|zjut(\\.|raj))/i,\n};\nconst parseDayPeriodPatterns = {\n narrow: {\n am: /^d/i,\n pm: /^p/i,\n midnight: /^24/i,\n noon: /^12/i,\n morning: /^(z?j)/i,\n afternoon: /^p/i,\n evening: /^(z?v)/i,\n night: /^(n|po)/i,\n },\n any: {\n am: /^dop\\./i,\n pm: /^pop\\./i,\n midnight: /^o?poln/i,\n noon: /^o?pold/i,\n morning: /j/i,\n afternoon: /^pop\\./i,\n evening: /^z?ve/i,\n night: /(po)?no/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"wide\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./sl/_lib/formatDistance.js\";\nimport { formatLong } from \"./sl/_lib/formatLong.js\";\nimport { formatRelative } from \"./sl/_lib/formatRelative.js\";\nimport { localize } from \"./sl/_lib/localize.js\";\nimport { match } from \"./sl/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary Slovenian locale.\n * @language Slovenian\n * @iso-639-2 slv\n * @author Adam Stradovnik [@Neoglyph](https://github.com/Neoglyph)\n * @author Mato Žgajner [@mzgajner](https://github.com/mzgajner)\n */\nexport const sl = {\n code: \"sl\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1 /* Monday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default sl;\n","import { Locale } from 'date-fns';\nimport { sl } from 'date-fns/locale/sl';\nimport { isRef, ref, Ref } from 'vue';\n\nexport const DateTimeLocaleConfig = {\n dateTimeLocale: ref(sl),\n setDateTimeLocale(locale: Locale | Ref<Locale>) {\n if (isRef(locale)) {\n this.dateTimeLocale = locale;\n } else {\n this.dateTimeLocale.value = locale;\n }\n },\n};\n","<template>\n <messages-widget :message=\"widgetMessage\" :classes=\"widgetClasses\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { MessagesWidget } from '@dynamicforms/vue-forms';\nimport { computed } from 'vue';\n\nimport type { DfInputHintProps } from '../dynamicforms-component-props';\n\nconst props = withDefaults(defineProps<DfInputHintProps>(), {\n errors: '',\n message: '',\n errorClasses: 'text-error',\n messageClasses: '',\n});\n\nconst isError = computed(() => {\n if (props.errors) {\n if (typeof props.errors === 'string') {\n return props.errors.trim().length > 0;\n }\n return props.errors.length > 0;\n }\n return false;\n});\n\nconst widgetMessage = computed(() => {\n return isError.value ? props.errors : props.message;\n});\n\nconst widgetClasses = computed(() => {\n return isError.value ? props.errorClasses : props.messageClasses;\n});\n</script>\n\n<style scoped></style>\n","<template>\n <div class=\"df-label\" :class=\"{ 'allow-wrap': allowWrap }\">\n <template v-if=\"label.icon\">\n <cached-icon v-if=\"label.iconComponent === 'v-icon'\" :name=\"label.icon\" size=\"1.25em\" />\n <v-img v-else-if=\"label.iconComponent === 'v-img'\" class=\"icon\" :src=\"label.icon\" />\n <component :is=\"label.iconComponent\" v-else :src=\"label.icon\" />\n </template>\n <vue-markdown\n v-if=\"lbl instanceof MdString\"\n class=\"markdown\"\n :source=\"lbl.toString()\"\n :options=\"lbl.options\"\n :plugins=\"lbl.plugins\"\n />\n <template v-else>{{ lbl }}</template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { MdString } from '@dynamicforms/vue-forms';\nimport { computed } from 'vue';\nimport { CachedIcon } from 'vue-cached-icon';\nimport VueMarkdown from 'vue-markdown-render';\n\nimport type { DfLabelProps } from '../dynamicforms-component-props';\n\nconst props = defineProps<DfLabelProps>();\n\nconst lbl = computed(() => (props.data ? props.data.label : props.label.text));\n</script>\n\n<style>\n.df-label {\n display: flex;\n align-items: center;\n gap: 2px;\n white-space: nowrap;\n justify-content: flex-start;\n}\n\n.df-label.allow-wrap {\n white-space: initial;\n}\n\n.df-label .icon {\n width: 1.25em;\n}\n\n.df-label .markdown :first-child,\n.df-label .markdown :last-child {\n margin-top: 0 !important;\n padding-top: 0 !important;\n margin-bottom: 0 !important;\n padding-bottom: 0 !important;\n line-height: 1.35em !important; /* inspired by vitepress' aggressive settings */\n}\n</style>\n","import { FieldDensity, type FieldVariant } from '@/helpers/input-base';\n\nexport interface VuetifyInputsSettings {\n defaultVariant?: FieldVariant;\n defaultDensity?: FieldDensity;\n}\n\nexport const vuetifyInputsSettingsKey = Symbol('vuetifyInputsSettingsKey');\n","import Form, { MdString, ValidationErrorRenderContent } from '@dynamicforms/vue-forms';\nimport { isEmpty, isString } from 'lodash-es';\nimport { computed, inject, nextTick, ref, shallowRef, toRaw } from 'vue';\n\nimport { VuetifyInputsSettings, vuetifyInputsSettingsKey } from './settings';\n\nexport class Label {\n constructor(\n public text: string,\n public icon?: string,\n public iconComponent: string = 'v-icon',\n ) {}\n}\n\nexport type FieldVariant = 'outlined' | 'plain' | 'underlined' | 'filled' | 'solo' | 'solo-inverted' | 'solo-filled';\nexport type VuetifyDensity = 'default' | 'comfortable' | 'compact';\nexport type FieldDensity = 'default' | 'comfortable' | 'compact' | 'inline';\n\n/**\n * The presentation an element carries for the components in this library.\n *\n * Every one of these is also a prop, and the prop wins where both state something: a call site is more specific\n * than the element it renders. What the element carries is what a form declared in code says about itself, so a\n * field that names its own label needs no attribute at the tag that draws it.\n *\n * `Extras` is @dynamicforms/vue-forms' augmentation point for exactly this, so these properties are typed on every\n * element in an application that installs this library, the fields written inline in a `Group` declaration\n * included.\n */\ndeclare module '@dynamicforms/vue-forms' {\n interface Extras {\n label?: string | Label | MdString;\n placeholder?: string;\n helpText?: string;\n hint?: string;\n cssClass?: string;\n density?: FieldDensity;\n variant?: FieldVariant;\n }\n}\n\nexport interface BaseProps<T = any> {\n control?: Form.FieldBase<T>;\n modelValue?: T;\n label?: string | Label | MdString;\n errors?: string[];\n placeholder?: string;\n helpText?: string;\n hint?: string;\n enabled?: boolean;\n visibility?: Form.DisplayMode | string;\n cssClass?: string;\n clearable?: boolean;\n passthroughAttrs?: Record<string, any>;\n density?: FieldDensity;\n variant?: FieldVariant;\n}\n\nexport const defaultBaseProps = { enabled: undefined, clearable: true };\n\nexport interface BaseEmits<T = any> {\n (e: 'update:modelValue', value: T): void;\n (e: 'click:clear'): void;\n}\n\nexport function useInputBase<T = any>(props: BaseProps<T>, emit: BaseEmits<T>) {\n const settings = inject<VuetifyInputsSettings>(vuetifyInputsSettingsKey, {});\n const injectedDensity = inject<FieldDensity | null>('field-density', null);\n const injectedVariant = inject<FieldVariant | null>('field-variant', null);\n const internalValue = ref<T | null>(null);\n\n // A write is not a statement about what the control ends up holding. A ValueChangedAction may write a different\n // value back, a disabled field drops the write, and a handler that throws unwinds it. The rendered control has\n // the written value in its DOM by then, so it is the read here that has to correct it - and where the value the\n // control ends up holding is the one it started with, as under a rule that puts back the five characters a\n // six-character write exceeded, the read does not move and Vue schedules no render at all. Holding the written\n // value for one tick makes the read change twice, so the repaint that restores what the control holds happens.\n const pendingWrite = shallowRef<{ value: T } | null>(null);\n\n const value = computed({\n get(): T {\n if (pendingWrite.value) return pendingWrite.value.value;\n if (props.control) return props.control.value as T;\n if (props.modelValue === undefined) return internalValue.value as T;\n return props.modelValue as T;\n },\n set(newValue: T) {\n try {\n if (props.control) props.control.value = newValue;\n } finally {\n // compared as the write was made: an element holds its state behind reactive(), so an array or an object\n // reads back as a proxy of what was written and an identity comparison would answer that every such write\n // was refused. Object.is over the raw objects answers for NaN as well\n if (props.control && !Object.is(toRaw(props.control.value as any), toRaw(newValue as any))) {\n pendingWrite.value = { value: newValue };\n nextTick(() => {\n pendingWrite.value = null;\n });\n }\n }\n if (props.modelValue === undefined) internalValue.value = newValue;\n emit('update:modelValue', props.control ? (props.control.value as T) : newValue);\n },\n });\n\n if (props.control && !(props.control instanceof Form.FieldBase)) {\n throw new Error('control prop is not a vue-form control instance');\n }\n\n const controlTouch = computed({\n get() {\n return props.control!.touched;\n },\n set(val: boolean) {\n props.control!.touched = val;\n },\n });\n const touched = props.control ? controlTouch : ref(false);\n const valid = computed(() => (props.control ? props.control.valid : true));\n const errors = computed(() =>\n props.control ? props.control.errors : (props.errors || []).map((error) => new ValidationErrorRenderContent(error)),\n );\n const anyErrors = computed(() => (touched.value && errors.value.length > 0 ? ' ' : undefined));\n const showErrors = computed(() => (touched.value ? errors.value : undefined));\n // a field inside a disabled section is drawn disabled: effectiveEnabled is false where the element or any\n // container above it is disabled, which is the question a rendered input asks\n const enabled = computed(() => (props.control ? props.control.effectiveEnabled : props.enabled !== false));\n // A control resolves its own mode - vue-forms refuses anything that is not a DisplayMode constant and reads a\n // name case-insensitively. The prop is resolved the same way, so `visibility=\"hidden\"` states what it looks\n // like it states and an unrecognised mode is refused here as loudly as it is there.\n const visibility = computed(() => {\n if (props.control) return props.control.visibility;\n if (props.visibility == null) return Form.DisplayMode.FULL;\n return Form.DisplayMode.fromAny(props.visibility);\n });\n const isRendered = computed(() => visibility.value !== Form.DisplayMode.SUPPRESS);\n const visibilityClass = computed(() => ({\n 'd-none': visibility.value === Form.DisplayMode.HIDDEN,\n invisible: visibility.value === Form.DisplayMode.INVISIBLE,\n }));\n // the presentation the bound element carries: what a prop does not state is taken from here before any default\n const extra = computed(() => props.control?.extra ?? {});\n\n const label = computed((): Label => {\n const stated = props.label ?? extra.value.label;\n return isString(stated || '') ? new Label(<string>stated || '') : <Label>stated;\n });\n const placeholder = computed(() => props.placeholder ?? extra.value.placeholder ?? '');\n const helpText = computed(() => props.helpText ?? extra.value.helpText ?? '');\n const hint = computed(() => props.hint ?? extra.value.hint ?? '');\n const cssClass = computed(() => props.cssClass ?? extra.value.cssClass ?? '');\n\n const density = computed(\n (): FieldDensity => props.density ?? extra.value.density ?? injectedDensity ?? settings.defaultDensity ?? 'default',\n );\n const boundDensity = computed((): VuetifyDensity => (density.value === 'inline' ? 'default' : density.value));\n const variant = computed(\n (): FieldVariant =>\n props.variant ?? extra.value.variant ?? injectedVariant ?? settings.defaultVariant ?? 'underlined',\n );\n\n return {\n value,\n valid,\n enabled,\n errors,\n showErrors,\n visibility,\n isRendered,\n visibilityClass,\n label,\n touched,\n density,\n densityClass: computed(() => `df-density-${density.value}`),\n\n vuetifyBindings: computed(() => ({\n name: props.control?.fieldName,\n class: cssClass.value,\n\n density: boundDensity.value,\n variant: variant.value,\n\n label: label.value.text,\n errorMessages: anyErrors.value,\n // 'error-count': errors?.value.length || 0,\n readonly: !enabled.value,\n disabled: !enabled.value,\n\n placeholder: placeholder.value,\n 'persistent-placeholder': !isEmpty(placeholder.value),\n\n hint: hint.value,\n persistentHint: true, // we want persistent hint always\n hideDetails: <boolean | 'auto' | undefined>'auto', // we want to hide the hint element when hint isn't there\n helpText: helpText.value,\n\n ...(props.passthroughAttrs || {}),\n })),\n };\n}\n","<template>\n <v-input\n v-if=\"isRendered\"\n :name=\"vuetifyBindings.name\"\n :density=\"vuetifyBindings.density\"\n :hint=\"vuetifyBindings.hint\"\n :persistent-hint=\"vuetifyBindings.persistentHint\"\n :hide-details=\"vuetifyBindings.hideDetails\"\n :error-messages=\"vuetifyBindings.errorMessages\"\n :class=\"[cssClass, visibilityClass]\"\n >\n <v-field\n :variant=\"vuetifyBindings.variant\"\n :density=\"vuetifyBindings.density\"\n :label=\"vuetifyBindings.label\"\n :disabled=\"vuetifyBindings.disabled\"\n :clearable=\"isClearable\"\n :persistent-clear=\"true\"\n :dirty=\"!!value || !!vuetifyBindings.placeholder\"\n :active=\"focused\"\n :loading=\"loading\"\n @click:clear=\"emits('click:clear')\"\n @update:focused=\"(isFocused) => setFocused(isFocused)\"\n >\n <template #label=\"labelData\"><df-label :data=\"labelData\" :label=\"label\" /></template>\n <template #default=\"slotProps\">\n <div class=\"d-flex w-100 df-style-resetting df-sub-field\"><slot v-bind=\"slotProps\" /></div>\n </template>\n <template #loader=\"loaderProps\"><slot name=\"loader\" v-bind=\"loaderProps\" /></template>\n <template v-if=\"$slots['prepend-inner']\" #prepend-inner=\"prependInnerProps\">\n <slot name=\"prepend-inner\" v-bind=\"prependInnerProps\" />\n </template>\n </v-field>\n <template #message=\"{ message }\">\n <df-input-hint :message=\"message\" :errors=\"showErrors\" />\n </template>\n <template v-if=\"$slots.prepend\" #prepend=\"prependProps\"><slot name=\"prepend\" v-bind=\"prependProps\" /></template>\n </v-input>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, unref } from 'vue';\n\nimport DfInputHint from './df-input-hint.vue';\nimport DfLabel from './df-label.vue';\nimport { BaseEmits, BaseProps, useInputBase } from './input-base';\n\nconst props = defineProps<BaseProps & { loading?: boolean }>();\nconst emits = defineEmits<BaseEmits & { (e: 'blur'): void }>();\n\nconst { isRendered, label, showErrors, touched, value, visibilityClass, vuetifyBindings } = useInputBase(props, emits);\n\nconst isClearable = computed(() => !!(unref(props.clearable) && unref(value)));\nconst focused = ref<boolean>(false);\n\nfunction setFocused(isFocused: boolean) {\n focused.value = isFocused;\n if (!isFocused) {\n touched.value = true;\n emits('blur');\n }\n}\n</script>\n\n<style>\n.df-style-resetting .v-field__overlay {\n background-color: transparent;\n}\n.df-style-resetting .v-field__outline::before,\n.df-style-resetting .v-field__outline::after {\n content: none !important;\n}\n\n.df-sub-field {\n max-height: var(--v-input-control-height);\n min-height: max(\n var(--v-input-control-height, 56px),\n 1.5rem + var(--v-field-input-padding-top) + var(--v-field-input-padding-bottom)\n );\n}\n\n.df-density-inline .df-sub-field {\n min-height: revert;\n}\n\n.rtf-editor .df-sub-field {\n max-height: revert;\n}\n</style>\n","export const translatableStrings = {\n Yes: 'Yes',\n No: 'No',\n Close: 'Close',\n Paragraph: 'Paragraph',\n Heading1: 'Heading 1',\n Heading2: 'Heading 2',\n Heading3: 'Heading 3',\n Heading4: 'Heading 4',\n Heading5: 'Heading 5',\n Heading6: 'Heading 6',\n Downloadable: 'Downloadable',\n ArticleCategory: 'Article category',\n Title: 'Title',\n Subtitle: 'Subtitle',\n InfoBox: 'Info box',\n SideQuote: 'Side quote',\n Marker: 'Marker',\n Spoiler: 'Spoiler',\n CodeDark: 'Code (dark)',\n CodeBright: 'Code (bright)',\n Undo: 'Undo',\n Redo: 'Redo',\n SelectAll: 'Select all',\n Bold: 'Bold',\n Italic: 'Italic',\n HorizontalLine: 'Horizontal line',\n Blockquote: 'Block quote',\n BulletedList: 'Bulleted list',\n NumberedList: 'Numbered list',\n Outdent: 'Decrease indent',\n Indent: 'Increase indent',\n AlignLeft: 'Align left',\n AlignCenter: 'Align center',\n AlignRight: 'Align right',\n AlignJustify: 'Justify',\n Link: 'Link',\n LinkUrl: 'URL',\n LinkApply: 'Apply',\n LinkRemove: 'Remove link',\n Image: 'Image',\n ImageUrl: 'Image URL',\n ImageUpload: 'Upload image',\n ImageInsert: 'Insert',\n Table: 'Table',\n TableInsert: 'Insert table',\n TableAddRowAbove: 'Add row above',\n TableAddRowBelow: 'Add row below',\n TableDeleteRow: 'Delete row',\n TableAddColumnBefore: 'Add column before',\n TableAddColumnAfter: 'Add column after',\n TableDeleteColumn: 'Delete column',\n TableToggleHeaderRow: 'Toggle header row',\n TableDeleteTable: 'Delete table',\n Style: 'Style',\n MediaEmbed: 'Insert media',\n MediaEmbedUrl: 'Video URL',\n MediaEmbedInsert: 'Insert',\n};\n\nexport function translateStrings(translationCallback: (s: string) => string) {\n Object.keys(translatableStrings).forEach((key) => {\n const translation = translationCallback(key);\n if (translation != null) {\n translatableStrings[key as keyof typeof translatableStrings] = translation;\n }\n });\n}\n","/**\n * DisplayMode enum provides an enumeration for supported ways of rendering a particular object in the DOM\n */\nenum ActionDisplayStyle {\n // This enum is actually declared in dynamicforms.action.py\n BUTTON = 0, // action should render as a button\n TEXT = 1, // action should render as a link text\n}\n\nexport const defaultDisplayStyle = ActionDisplayStyle.BUTTON;\n\n// eslint-disable-next-line @typescript-eslint/no-namespace, no-redeclare\nnamespace ActionDisplayStyle {\n export function fromString(mode: string): ActionDisplayStyle {\n if (mode.toUpperCase() === 'BUTTON') return ActionDisplayStyle.BUTTON;\n if (mode.toUpperCase() === 'TEXT') return ActionDisplayStyle.TEXT;\n return defaultDisplayStyle;\n }\n\n export function fromAny(mode: any): ActionDisplayStyle {\n const input = typeof mode === 'number' ? mode : ActionDisplayStyle.fromString(mode as string);\n if (Object.values(ActionDisplayStyle).includes(input)) return input;\n return defaultDisplayStyle;\n }\n\n export function isDefined(mode: number | string): boolean {\n const check = typeof mode === 'number' ? mode : ActionDisplayStyle.fromString(mode as string);\n return Object.values(ActionDisplayStyle).includes(check);\n }\n}\n\nObject.freeze(ActionDisplayStyle);\n\nexport { ActionDisplayStyle };\n","import { isPlainObject } from 'lodash-es';\nimport { computed } from 'vue';\nimport { useDisplay } from 'vuetify';\n\nexport const responsiveBreakpoints = ['xs', 'sm', 'md', 'lg', 'xl'] as const;\nexport type BreakpointNames = (typeof responsiveBreakpoints)[number];\n/**\n * A set of options and the per-breakpoint sets that restate parts of it. `B` is what a breakpoint may state,\n * and defaults to the whole of `T`; a subclass narrows it where a member belongs to the object as a whole rather\n * than to one screen width.\n */\nexport type BreakpointsJSON<T extends Record<string, any>, B extends Record<string, any> = T> = T &\n Partial<Record<BreakpointNames, B>>;\n\nexport abstract class ResponsiveRenderOptions<T extends Record<string, any>> {\n protected readonly _value: BreakpointsJSON<T>;\n\n constructor(data?: BreakpointsJSON<T>) {\n this._value = this.cleanBreakpoint(data as T, true)!;\n if (data) {\n responsiveBreakpoints.forEach((bp) => {\n const options = this.cleanBreakpoint(data[bp]);\n if (options) this._value[bp] = options;\n });\n }\n }\n\n getOptionsForBreakpoint(breakpoint: BreakpointNames): T {\n // a base that states nothing cleans to null, and the breakpoints above it still have options to resolve\n const result = (this.cleanBreakpoint(this._value as T) ?? ({} as T)) as BreakpointsJSON<T>;\n for (const bp of responsiveBreakpoints) {\n // the fields that cascade are the ones each breakpoint states, so a field named at a breakpoint and\n // nowhere else still reaches the result\n const bpData = this._value[bp] ?? {};\n for (const field of Object.keys(bpData)) {\n const value = (<any>bpData)[field];\n // a breakpoint states what it changes; a field it says nothing about keeps cascading\n if (value == null) continue;\n if (isPlainObject(value)) {\n // shallow, so a breakpoint restates single keys of an options object rather than the whole of it. A\n // nested object is a value like any other and is replaced whole. Only plain objects merge: a Date, a\n // Map or a class instance would come out of a spread as its own properties without its prototype.\n (<any>result)[field] = { ...(<any>result)[field], ...value };\n } else {\n (<any>result)[field] = value;\n }\n }\n if (bp === breakpoint) break;\n }\n return result;\n }\n\n /**\n * Normalizes one breakpoint's options. The merge reads `null` and `undefined` as \"this breakpoint says\n * nothing about that field\", so a field the breakpoint does not state has to come back as `undefined` rather\n * than as an empty value - an empty array or string returned here reads as a breakpoint deliberately emptying\n * what it inherited.\n */\n protected abstract cleanBreakpoint(bp?: T, defaultIfEmpty?: boolean): T | null;\n}\n\nexport function getBreakpointName(dp: ReturnType<typeof useDisplay>): BreakpointNames {\n if (dp.xlAndUp.value) return 'xl';\n if (dp.lgAndUp.value) return 'lg';\n if (dp.mdAndUp.value) return 'md';\n if (dp.smAndUp.value) return 'sm';\n return 'xs';\n}\n\nexport function useBreakpoint() {\n const display = useDisplay();\n\n return computed<BreakpointNames>(() => getBreakpointName(display));\n}\n","import { ActionValue } from '@dynamicforms/vue-forms';\nimport { isBoolean, isEmpty, isObjectLike, isPlainObject, isString } from 'lodash-es';\n\nimport { ActionDisplayStyle } from './action-display-style';\nimport { BreakpointNames, BreakpointsJSON, ResponsiveRenderOptions } from './responsive-render-options';\n\nexport interface ActionRenderOptions extends ActionValue {\n /** The text of the action, rendered when {@link showLabel} is set and the text is not empty. `ActionValue`\n * types this `unknown`, leaving what a label is to the rendering library; here it is a string. */\n label?: string;\n /** The icon of the action, a name `vue-cached-icon` resolves, rendered when {@link showIcon} is set and the\n * name is not empty. Typed here for the same reason `label` is. */\n icon?: string;\n /** Unique identifier for the action. Purely informational to `<df-actions>` itself - it is not used for\n * rendering - but by convention should match the key under which the action is registered in a\n * `FormActions` (`Record<string, Action>`) map passed to `@dynamicforms/vuetify-modal-form-kit`'s\n * `modal.message()`/`modal.yesNo()`/etc. That map key (or the action's `fieldName`, when it's part of a\n * `Form.Group`) - not this `name` field - is what the modal's promise actually resolves with; keeping them\n * in sync is what lets callers do e.g. `if (await modal.yesNo(...) === 'yes')`. */\n name?: string;\n /** How the action is rendered: {@link ActionDisplayStyle.BUTTON} for a tonal `<v-btn>`, or\n * {@link ActionDisplayStyle.TEXT} for a text-variant `<v-btn>`. */\n renderAs?: ActionDisplayStyle;\n /** Whether the label is shown. If `label` is empty, the label is never shown regardless of this flag. */\n showLabel?: boolean;\n /** Whether the icon is shown. If `icon` is empty, the icon is never shown regardless of this flag. */\n showIcon?: boolean;\n /** Marks this as the action to trigger on Enter when rendered inside `<df-modal>` (see that component's\n * `onKeydown` in `@dynamicforms/vuetify-modal-form-kit`) - e.g. a \"Save\" or \"Yes\" action. In `<df-actions>` it\n * also colors the button `primary`, unless overridden via `passthroughAttrs.color`. At most one action in a\n * given set should set this. */\n defaultConfirm?: boolean;\n /** Marks this as the action to trigger on Escape when rendered inside `<df-modal>` (see that component's\n * `onKeydown` in `@dynamicforms/vuetify-modal-form-kit`) - e.g. a \"Cancel\" or \"No\" action. In `<df-actions>` it\n * also colors the button `secondary`, unless overridden via `passthroughAttrs.color`. At most one action in a\n * given set should set this (an action such as `Action.closeAction()` may set both `defaultConfirm` and\n * `defaultReject` so it fires on either key). */\n defaultReject?: boolean;\n /** Additional props/attrs forwarded verbatim to the rendered `<v-btn>` (e.g. `color`, `loading`, `density`,\n * `rounded`, `block`, `prependIcon`, ...), taking precedence over `<df-actions>`'s own computed bindings\n * (`variant`, `color`, `disabled`). Mirrors the `passthroughAttrs` convention used by `df-input`/`df-file`/etc\n * (see `helpers/input-base.ts`); it has to live on the action's value here because `<df-actions>` renders a\n * whole array of buttons, not just one. */\n passthroughAttrs?: Record<string, any>;\n}\n/**\n * What one breakpoint of an action's value may state: the members that describe how the action is drawn.\n * `name`, `defaultConfirm` and `defaultReject` are not among them - which key a modal resolves with, and which\n * key fires the action, are properties of the action itself and do not depend on the width of the screen.\n */\nexport type ActionBreakpointRenderOptions = Omit<ActionRenderOptions, 'name' | 'defaultConfirm' | 'defaultReject'>;\nexport type ActionBreakpointOptions = BreakpointsJSON<ActionRenderOptions, ActionBreakpointRenderOptions>;\n\nexport class ResponsiveActionRenderOptions extends ResponsiveRenderOptions<ActionRenderOptions> {\n protected cleanBreakpoint(bp?: ActionRenderOptions, defaultIfEmpty: boolean = false): ActionRenderOptions | null {\n if ((!bp || !isObjectLike(bp)) && !defaultIfEmpty) return null;\n\n const result: ActionRenderOptions = {};\n if (defaultIfEmpty) {\n result.renderAs = ActionDisplayStyle.BUTTON;\n result.showLabel = true;\n result.showIcon = true;\n }\n\n if (bp) {\n if (bp.renderAs != null) result.renderAs = ActionDisplayStyle.fromAny(bp.renderAs);\n if (isString(bp.label)) result.label = bp.label;\n if (isString(bp.icon)) result.icon = bp.icon;\n if (isBoolean(bp.showLabel)) result.showLabel = bp.showLabel;\n if (isBoolean(bp.showIcon)) result.showIcon = bp.showIcon;\n if (isString(bp.name)) result.name = bp.name;\n if (isBoolean(bp.defaultConfirm)) result.defaultConfirm = bp.defaultConfirm;\n if (isBoolean(bp.defaultReject)) result.defaultReject = bp.defaultReject;\n // copied rather than kept by identity, so the cascade's shallow merge of a later breakpoint's attrs does\n // not write into the object the action holds\n if (isPlainObject(bp.passthroughAttrs)) result.passthroughAttrs = { ...bp.passthroughAttrs };\n }\n\n return Object.keys(result).length ? result : null;\n }\n}\n\n/**\n * What one action renders as at `breakpoint`, read off the value of any `Action`. The members\n * `ActionRenderOptions` adds over `ActionValue` are taken where the value carries them and defaulted where it does\n * not, so an action holding nothing but a label - which is all a `@dynamicforms/vue-forms` `Action` declares -\n * renders as a button showing that label.\n *\n * `label` and `icon` come back only where the matching flag says they are shown, and the flags come back false\n * where there is no text or name to show, so a caller renders each member on its own flag and never on emptiness.\n */\nexport function getRenderOptionsForBreakpoint(value: ActionValue, breakpoint: BreakpointNames): ActionRenderOptions {\n const options = new ResponsiveActionRenderOptions(value as ActionBreakpointOptions);\n const partial = options.getOptionsForBreakpoint(breakpoint);\n return {\n name: partial.name,\n label: partial.showLabel ? partial.label : undefined,\n icon: partial.showIcon ? partial.icon : undefined,\n renderAs: partial.renderAs,\n showLabel: isString(partial.label) && !isEmpty(partial.label) ? partial.showLabel : false,\n showIcon: isString(partial.icon) && !isEmpty(partial.icon) ? partial.showIcon : false,\n defaultConfirm: partial.defaultConfirm,\n defaultReject: partial.defaultReject,\n passthroughAttrs: partial.passthroughAttrs,\n };\n}\n","import { Action as FormAction, IFieldConstructorParams } from '@dynamicforms/vue-forms';\nimport { isEmpty, isString } from 'lodash-es';\nimport { computed, Ref } from 'vue';\n\nimport { translatableStrings } from '../translations';\n\nimport { ActionDisplayStyle } from './action-display-style';\nimport { ActionBreakpointOptions, getRenderOptionsForBreakpoint } from './action-render-options';\nimport { BreakpointNames } from './responsive-render-options';\n\nclass Action extends FormAction<ActionBreakpointOptions> {\n /** @see getRenderOptionsForBreakpoint, which answers the same for the value of any `Action` */\n getBreakpointValue(breakpoint: Ref<BreakpointNames>) {\n return computed(() => getRenderOptionsForBreakpoint(this.value, breakpoint.value));\n }\n\n /** @see ActionRenderOptions.name */\n get name() {\n return this.value.name;\n }\n\n /**\n * The label as this action renders it: the text where {@link ActionRenderOptions.showLabel} states it is shown,\n * and `undefined` where it is not. `label` is the base class's, and answers the text whatever the flag says.\n */\n get renderedLabel() {\n return this.value.showLabel ? this.value.label : undefined;\n }\n\n /** @see ActionRenderOptions.showLabel */\n get showLabel() {\n return isString(this.value.label) && !isEmpty(this.value.label) ? this.value.showLabel : false;\n }\n\n /**\n * The icon as this action renders it: the name where {@link ActionRenderOptions.showIcon} states it is shown,\n * and `undefined` where it is not. `icon` is the base class's, and answers the name whatever the flag says.\n */\n get renderedIcon() {\n return this.value.showIcon ? this.value.icon : undefined;\n }\n\n /** @see ActionRenderOptions.showIcon */\n get showIcon() {\n return isString(this.value.icon) && !isEmpty(this.value.icon) ? this.value.showIcon : false;\n }\n\n /** @see ActionRenderOptions.renderAs */\n get renderAs() {\n return this.value.renderAs;\n }\n\n /** @see ActionRenderOptions.defaultConfirm */\n get defaultConfirm() {\n return this.value.defaultConfirm;\n }\n\n /** @see ActionRenderOptions.defaultReject */\n get defaultReject() {\n return this.value.defaultReject;\n }\n\n /** @see ActionRenderOptions.passthroughAttrs */\n get passthroughAttrs() {\n return this.value.passthroughAttrs;\n }\n\n static closeAction(data?: Partial<IFieldConstructorParams<ActionBreakpointOptions>>) {\n const init: Partial<IFieldConstructorParams<ActionBreakpointOptions>> = {\n ...(data ?? {}), // any properties in data should overwrite properties in the constant\n value: {\n name: 'close',\n label: translatableStrings.Close,\n icon: 'ion-close-outline',\n renderAs: ActionDisplayStyle.BUTTON,\n showLabel: true,\n showIcon: true,\n },\n };\n init.value = { ...init.value, ...(data?.value ?? {}) }; // data may only contain partial info of the value\n return new Action(init);\n }\n\n static yesAction(data?: Partial<IFieldConstructorParams<ActionBreakpointOptions>>) {\n const init: Partial<IFieldConstructorParams<ActionBreakpointOptions>> = {\n ...(data ?? {}), // any properties in data should overwrite properties in the constant\n value: {\n name: 'yes',\n label: translatableStrings.Yes,\n icon: 'ion-thumbs-up-outline',\n renderAs: ActionDisplayStyle.BUTTON,\n showLabel: true,\n showIcon: true,\n },\n };\n init.value = { ...init.value, ...(data?.value ?? {}) }; // data may only contain partial info of the value\n return new Action(init);\n }\n\n static noAction(data?: Partial<IFieldConstructorParams<ActionBreakpointOptions>>) {\n const init: Partial<IFieldConstructorParams<ActionBreakpointOptions>> = {\n ...(data ?? {}), // any properties in data should overwrite properties in the constant\n value: {\n name: 'no',\n label: translatableStrings.No,\n icon: 'ion-thumbs-down-outline',\n renderAs: ActionDisplayStyle.BUTTON,\n showLabel: true,\n showIcon: true,\n },\n };\n init.value = { ...init.value, ...(data?.value ?? {}) }; // data may only contain partial info of the value\n return new Action(init);\n }\n}\n\nexport { Action };\n","<template>\n <div\n v-if=\"actionsRef.length > 0\"\n class=\"text-end df-actions\"\n :class=\"{\n 'button-group': showAsGroup === 'grouped' || showAsGroup === 'grouped-no-borders',\n 'with-border': showAsGroup === 'grouped',\n }\"\n >\n <v-btn\n v-for=\"(action, idx) in actionsWithBreakpoint\"\n :key=\"idx\"\n :variant=\"action.renderAs === ActionDisplayStyle.BUTTON ? 'tonal' : 'text'\"\n :color=\"defaultActionColor(action)\"\n :disabled=\"!action.action.effectiveEnabled || action.action.busy\"\n :loading=\"action.action.busy\"\n :elevation=\"0\"\n :size=\"buttonSize\"\n :class=\"{\n 'd-none': action.action.visibility === DisplayMode.HIDDEN,\n invisible: action.action.visibility === DisplayMode.INVISIBLE,\n }\"\n v-bind=\"action.passthroughAttrs\"\n @click.stop=\"(event: MouseEvent) => action.action.execute(event)\"\n >\n <cached-icon v-if=\"action.icon\" :name=\"action.icon\" />\n <span v-if=\"action.icon && action.label\" style=\"width: 0.5rem\" />\n <span v-if=\"action.label\">{{ action.label }}</span>\n </v-btn>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { DisplayMode } from '@dynamicforms/vue-forms';\nimport { computed, unref } from 'vue';\nimport { CachedIcon } from 'vue-cached-icon';\n\nimport { DfActionsProps } from './dynamicforms-component-props';\nimport { ActionDisplayStyle, ActionRenderOptions, getRenderOptionsForBreakpoint, useBreakpoint } from './helpers';\n\nconst props = withDefaults(defineProps<DfActionsProps>(), {\n buttonSize: 'default',\n showAsGroup: 'no',\n});\n\nconst breakpoint = useBreakpoint();\nconst actionsRef = computed(() => unref(props.actions).filter((action) => action.visibility !== DisplayMode.SUPPRESS));\n// What each button draws is read off the action's value rather than through the accessors this library's `Action`\n// adds over it, so an action declared as a `@dynamicforms/vue-forms` one - which declares none of them - is drawn\n// as well. The spread is that value resolved at the current breakpoint.\nconst actionsWithBreakpoint = computed(() =>\n actionsRef.value.map((action) => ({\n action,\n ...getRenderOptionsForBreakpoint(action.value, breakpoint.value),\n })),\n);\n\nfunction defaultActionColor(options: ActionRenderOptions): string | undefined {\n if (options.defaultConfirm) return 'primary';\n if (options.defaultReject) return 'secondary';\n return undefined;\n}\n</script>\n\n<style>\n.df-actions.button-group {\n border-radius: 0.5em;\n /* the following two make the container fit the small buttons. without them there would be a top margin */\n line-height: 0;\n height: fit-content;\n}\n.df-actions.button-group .v-btn {\n border: none;\n border-radius: 0;\n margin: 0 !important;\n padding: 0 0.25em;\n}\n.df-actions.button-group .v-btn:first-child {\n border-start-start-radius: 0.5em;\n border-end-start-radius: 0.5em;\n}\n.df-actions.button-group .v-btn:last-child {\n border-start-end-radius: 0.5em;\n border-end-end-radius: 0.5em;\n}\n.df-actions.button-group.with-border {\n border: 0.1em solid currentColor;\n}\n.df-actions.button-group.with-border .v-btn:not(:first-child) {\n border-inline-start: 0.1em solid currentColor;\n}\n.df-actions .v-btn:not(:first-child) {\n margin-left: 0.5em;\n}\n</style>\n","<template>\n <v-checkbox\n v-if=\"isRendered\"\n v-model=\"boolValue\"\n density=\"compact\"\n :class=\"[densityClass, visibilityClass]\"\n :indeterminate=\"indeterminate\"\n :false-value=\"false\"\n :true-value=\"true\"\n v-bind=\"vuetifyBindings as any\"\n @change=\"change\"\n @blur=\"touched = true\"\n >\n <template #label=\"labelData\"><df-label :allow-wrap=\"true\" :data=\"labelData as any\" :label=\"label\" /></template>\n <template #message=\"{ message }\"><df-input-hint :message=\"message\" :errors=\"showErrors\" /></template>\n </v-checkbox>\n</template>\n\n<script setup lang=\"ts\">\nimport { clone } from 'lodash-es';\nimport { computed } from 'vue';\n\nimport { DfCheckboxProps } from './dynamicforms-component-props';\nimport { BaseEmits, defaultBaseProps, DfInputHint, DfLabel, useInputBase } from './helpers';\n\nconst props = withDefaults(defineProps<DfCheckboxProps>(), { ...defaultBaseProps, allowNull: false });\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { densityClass, isRendered, label, showErrors, touched, value, visibilityClass, vuetifyBindings } = useInputBase(\n props,\n emits,\n);\n\nconst indeterminate = computed(() => props.allowNull && value.value == null);\n\nconst boolValue = computed({\n get(): any {\n return value.value;\n },\n set() {},\n});\n\nfunction change() {\n const oldVal = clone(value.value);\n if (oldVal === true) {\n value.value = props.allowNull ? null : false;\n } else {\n value.value = oldVal === false;\n }\n}\n</script>\n","<template>\n <v-text-field\n v-if=\"isRendered\"\n v-model=\"value\"\n :class=\"[densityClass, visibilityClass]\"\n :clearable=\"allowNull\"\n type=\"text\"\n :rules=\"rules\"\n v-bind=\"vuetifyBindings\"\n @blur=\"touched = true\"\n >\n <template #label=\"labelData\"><df-label :data=\"labelData\" :label=\"label\" /></template>\n <template #message=\"{ message }\"><df-input-hint :message=\"message\" :errors=\"showErrors\" /></template>\n <template #prepend-inner>\n <div\n style=\"width: 24px; height: 24px; border-radius: 4px; border: 1px solid #ccc\"\n :style=\"{ backgroundColor: value }\"\n />\n </template>\n <template #default>\n <v-menu v-model=\"dropdownShown\" :close-on-content-click=\"false\" activator=\"parent\">\n <v-color-picker v-model=\"value\" mode=\"hexa\" />\n </v-menu>\n </template>\n </v-text-field>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\n\nimport { DfColorProps } from './dynamicforms-component-props';\nimport { BaseEmits, defaultBaseProps, DfInputHint, DfLabel, useInputBase } from './helpers';\n\nconst props = withDefaults(defineProps<DfColorProps>(), { ...defaultBaseProps, allowNull: false });\n\ninterface Emits extends BaseEmits {}\n\nconst emits = defineEmits<Emits>();\n\nconst { densityClass, isRendered, label, showErrors, touched, value, visibilityClass, vuetifyBindings } = useInputBase(\n props,\n emits,\n);\nconst dropdownShown = ref(false);\n\nconst rules = computed<((val: string) => boolean | string)[]>(() => [\n (val: string) => {\n if (props.control) return true; // if there's a form field, we expect there to be a validator\n if (!val && props.allowNull) return true; // allowed empty values are also not a problem\n\n const regex = /^#?([a-fA-F0-9]{3}|[a-fA-F0-9]{4}|[a-fA-F0-9]{6}|[a-fA-F0-9]{8})$/;\n return regex.test(val) ? true : 'Not a valid hex string.';\n },\n]);\n</script>\n","<template>\n <input-base\n v-bind=\"props\"\n :class=\"densityClass\"\n :clearable=\"clearable\"\n @click:clear=\"value = null\"\n @blur=\"touched = true\"\n >\n <template #default=\"slotProps\">\n <div\n :class=\"[\n 'd-flex',\n 'w-100',\n ['plain', 'underlined'].includes(vuetifyBindings.variant) ? undefined : 'ml-4',\n 'df-input-wrapper',\n density,\n ]\"\n >\n <v-text-field\n v-if=\"['date', 'datetime'].includes(inputType)\"\n v-model=\"dateFormatted\"\n style=\"flex-grow: 4\"\n density=\"compact\"\n variant=\"plain\"\n :clearable=\"false\"\n :hide-details=\"true\"\n :readonly=\"vuetifyBindings.readonly\"\n :disabled=\"vuetifyBindings.disabled\"\n :name=\"`${vuetifyBindings.name}-date`\"\n :placeholder=\"vuetifyBindings.placeholder\"\n v-bind=\"passthroughAttrs\"\n @click=\"dropdown = 'date'\"\n @keydown.space=\"dropdown = 'date'\"\n @focus=\"slotProps.focus()\"\n @blur=\"slotProps.blur()\"\n >\n <template #default>\n <v-menu v-model=\"dateMenuShown\" :close-on-content-click=\"false\" activator=\"parent\">\n <v-confirm-edit v-model=\"valueAsDate\" @cancel=\"dropdown = ''\" @save=\"dropdown = ''\">\n <template #default=\"{ model: proxyModel, actions }\">\n <v-date-picker\n v-model=\"proxyModel.value\"\n :hide-header=\"true\"\n :first-day-of-week=\"firstDayOfWeek\"\n :show-adjacent-months=\"true\"\n :show-week=\"true\"\n >\n <template #actions><component :is=\"actions\" /></template>\n </v-date-picker>\n </template>\n </v-confirm-edit>\n </v-menu>\n </template>\n </v-text-field>\n\n <v-text-field\n v-if=\"['time', 'datetime'].includes(inputType)\"\n v-model=\"timeFormatted\"\n style=\"flex-grow: 3\"\n density=\"compact\"\n variant=\"plain\"\n :clearable=\"false\"\n :hide-details=\"true\"\n :readonly=\"vuetifyBindings.readonly\"\n :disabled=\"vuetifyBindings.disabled\"\n :name=\"`${vuetifyBindings.name}-time`\"\n :placeholder=\"inputType === 'time' ? vuetifyBindings.placeholder : undefined\"\n v-bind=\"passthroughAttrs\"\n @click=\"dropdown = 'time'\"\n @keydown.space=\"dropdown = 'time'\"\n @focus=\"slotProps.focus()\"\n @blur=\"slotProps.blur()\"\n >\n <template #default>\n <v-menu v-model=\"timeMenuShown\" :close-on-content-click=\"false\" activator=\"parent\">\n <v-confirm-edit v-model=\"valueAsTimeString\" @cancel=\"dropdown = ''\" @save=\"dropdown = ''\">\n <template #default=\"{ model: proxyModel, actions }\">\n <v-time-picker v-model=\"proxyModel.value\" :hide-header=\"true\" format=\"24hr\">\n <template #actions><component :is=\"actions\" /></template>\n </v-time-picker>\n </template>\n </v-confirm-edit>\n </v-menu>\n </template>\n </v-text-field>\n </div>\n </template>\n </input-base>\n</template>\n\n<script setup lang=\"ts\">\nimport { format, parse } from 'date-fns';\nimport { toNumber, isNaN } from 'lodash-es';\nimport { ref, computed, watch, toRefs, unref } from 'vue';\n\nimport { DfDateTimeProps } from './dynamicforms-component-props';\nimport { BaseEmits, DateTimeLocaleConfig, defaultBaseProps, InputBase, useInputBase } from './helpers';\n\nconst props = withDefaults(defineProps<DfDateTimeProps>(), {\n ...defaultBaseProps,\n inputType: 'datetime',\n displayFormatDate: 'P',\n displayFormatTime: 'p',\n});\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst currentLocale = computed(() => props.locale ?? unref(DateTimeLocaleConfig.dateTimeLocale));\nconst firstDayOfWeek = computed(() => currentLocale.value.options?.weekStartsOn ?? 1);\nconst { density, densityClass, touched, value, vuetifyBindings } = useInputBase<string | null>(props, emits);\nconst { inputType, displayFormatDate, displayFormatTime } = toRefs(props);\n\nconst dropdown = ref('');\nconst dateMenuShown = computed({\n get() {\n return unref(dropdown) === 'date';\n },\n set(newValue: boolean) {\n dropdown.value = newValue ? 'date' : '';\n },\n});\nconst timeMenuShown = computed({\n get() {\n return unref(dropdown) === 'time';\n },\n set(newValue: boolean) {\n dropdown.value = newValue ? 'time' : '';\n },\n});\n\nconst formatNaive = (val: Date) => `${format(val, 'yyyy-MM-dd')}T${format(val, 'HH:mm')}:00`;\n\nconst valueISOFull = ref<string | null>(null);\nfunction setValueISOFull(newISOValue: string | null, dateOrTimeIdx: number) {\n if (newISOValue == null) {\n valueISOFull.value = null;\n } else if (dateOrTimeIdx === -1) {\n // setting valueISOFull from value\n if (unref(inputType) === 'time') {\n valueISOFull.value = formatNaive(new Date());\n setValueISOFull(`T${newISOValue}`, 1);\n } else {\n const val = formatNaive(new Date(newISOValue));\n setValueISOFull(val, 0);\n setValueISOFull(val, 1);\n }\n } else {\n if (valueISOFull.value == null) valueISOFull.value = formatNaive(new Date());\n const vif = valueISOFull.value.split(/[TZ]/g);\n const nv = newISOValue!.split(/[TZ]/g);\n vif[dateOrTimeIdx] = nv[dateOrTimeIdx];\n valueISOFull.value = formatNaive(new Date(`${vif[0]}T${vif[1].split('.')[0]}`));\n\n if (unref(inputType) === 'date') value.value = vif[0];\n else if (unref(inputType) === 'time') value.value = vif[1];\n else value.value = unref(valueISOFull) + format(new Date(), 'XXX');\n }\n}\nwatch(value, (newValue: string | null) => setValueISOFull(newValue, -1), { immediate: true });\n\nconst valueAsDate = computed({\n get() {\n const uValue = unref(valueISOFull);\n if (uValue == null) return null;\n const res = new Date(uValue);\n return !Number.isNaN(res.getTime()) ? res : null;\n },\n set(newValue: Date) {\n setValueISOFull(formatNaive(newValue), 0);\n },\n});\n\nconst valueAsTimeString = computed({\n get() {\n const val = unref(valueISOFull);\n if (val == null) return '';\n const vif = val.split(/[TZ]/g);\n return vif[1].split('.')[0];\n },\n set(newValue: string) {\n setValueISOFull(`T${newValue}`, 1);\n },\n});\n\nconst dateFormatted = computed({\n get() {\n const vad = unref(valueAsDate);\n if (vad == null) return '';\n return format(vad, unref(displayFormatDate), { locale: currentLocale.value });\n },\n set(newValue: string) {\n try {\n const d = parse(newValue, unref(displayFormatDate), new Date(), { locale: currentLocale.value });\n setValueISOFull(formatNaive(d), 0);\n } catch (err) {\n console.error(err);\n }\n },\n});\n\nconst timeFormatted = computed({\n get() {\n const vad = unref(valueAsDate);\n if (vad == null) return '';\n return format(vad, unref(displayFormatTime), { locale: currentLocale.value });\n },\n set(newValue: string) {\n const d = newValue.match(/(\\d+):(\\d+)\\s?([a-zA-Z]+)?/);\n if (d == null) return;\n let hour = toNumber(d[1]);\n const minute = toNumber(d[2]);\n if (isNaN(hour) || isNaN(minute)) return;\n if (d[3] && d[3].toLowerCase() === 'pm' && hour < 13) hour += 12;\n setValueISOFull(`T${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}:00`, 1);\n },\n});\n</script>\n","<template>\n <input-base\n v-bind=\"{ ...props, loading } as any\"\n :class=\"densityClass\"\n clearable\n @click:clear=\"removeFile\"\n @blur=\"touched = true\"\n >\n <template #prepend-inner><cached-icon name=\"mdi-paperclip\" /></template>\n <template #loader>\n <v-progress-linear\n v-if=\"currentFile && progress < 100\"\n :model-value=\"progress\"\n :indeterminate=\"progress === -1\"\n />\n </template>\n <template #default=\"slotProps\">\n <div class=\"d-flex w-100 position-relative df-input-wrapper\" :class=\"density\">\n <v-file-input\n v-model=\"selectedFile\"\n :label=\"fileLabel\"\n density=\"compact\"\n variant=\"plain\"\n :readonly=\"vuetifyBindings.readonly\"\n :disabled=\"vuetifyBindings.disabled\"\n :name=\"vuetifyBindings.name\"\n :hide-details=\"true\"\n :show-size=\"true\"\n :multiple=\"false\"\n :style=\"currentFile && progress < 100 ? 'visibility: hidden' : ''\"\n :clearable=\"false\"\n v-bind=\"passthroughAttrs\"\n prepend-icon=\"\"\n @update:model-value=\"handleFileChange\"\n @focus=\"slotProps.focus()\"\n @blur=\"slotProps.blur()\"\n />\n </div>\n </template>\n </input-base>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onBeforeUnmount, watch } from 'vue';\nimport { CachedIcon } from 'vue-cached-icon';\n\nimport { DfFileProps } from './dynamicforms-component-props';\nimport { BaseEmits, defaultBaseProps, InputBase, useInputBase } from './helpers';\n\nconst props = withDefaults(defineProps<DfFileProps>(), defaultBaseProps);\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { density, densityClass, touched, value, vuetifyBindings } = useInputBase(props, emits);\nconst touchInterval = ref<number | null>(null);\n\n// State\nconst currentFile = ref<File | null>(null);\nconst progress = ref(0);\nconst fileInputKey = ref(Math.round(Math.random() * 1000));\nconst selectedFile = ref<File | null>();\nconst loading = computed(() => currentFile.value && progress.value < 100);\n\nconst fileLabel = computed(() => {\n if (!selectedFile.value && value.value) {\n return props.modelValue;\n }\n return '';\n});\n\nfunction clearTouchInterval() {\n if (touchInterval.value) window.clearInterval(touchInterval.value);\n}\nfunction setupTouchInterval() {\n clearTouchInterval();\n touchInterval.value = window.setInterval(() => {\n if (value.value) props.comms.touch(value.value);\n }, 60 * 1000);\n}\n\nonBeforeUnmount(() => clearTouchInterval());\nwatch(value, (newValue) => {\n if (newValue) setupTouchInterval();\n else clearTouchInterval();\n});\n\nasync function removeFile() {\n if (value.value) {\n await props.comms.delete(value.value);\n }\n\n value.value = null;\n progress.value = 0;\n fileInputKey.value = Math.round(Math.random() * 1000);\n currentFile.value = null;\n selectedFile.value = null;\n clearTouchInterval();\n}\n\nasync function upload(file: File) {\n progress.value = -1;\n currentFile.value = file;\n\n try {\n value.value = await props.comms.upload(file, (loaded: number, total: number) => {\n progress.value = Math.round((loaded * 100) / total);\n });\n progress.value = 100;\n setupTouchInterval();\n } catch (err) {\n progress.value = 0;\n currentFile.value = null;\n fileInputKey.value = Math.round(Math.random() * 1000);\n selectedFile.value = null;\n throw err;\n }\n}\n\nfunction handleFileChange(file: File | File[]): any {\n if (file) {\n if (Array.isArray(file)) {\n console.error('Uploading multiple files not supported right now');\n } else {\n upload(file);\n }\n }\n}\n</script>\n","<template>\n <div v-if=\"isRendered\" class=\"df-input-container\" :class=\"[densityClass, visibilityClass]\">\n <v-text-field\n v-if=\"!isNumber\"\n v-model=\"value\"\n :type=\"inputType\"\n v-bind=\"vuetifyBindings as any\"\n @blur=\"touched = true\"\n >\n <template #label=\"labelData\"><df-label :data=\"labelData\" :label=\"label\" /></template>\n <template #message=\"{ message }\"><df-input-hint :message=\"message\" :errors=\"showErrors\" /></template>\n </v-text-field>\n <v-number-input\n v-else\n v-model=\"value\"\n density=\"compact\"\n control-variant=\"stacked\"\n v-bind=\"{ ...vuetifyBindings, ...numberInputBindings } as any\"\n >\n <template #label=\"labelData\"><df-label :data=\"labelData\" :label=\"label\" /></template>\n <template #message=\"{ message }\"><df-input-hint :message=\"message\" :errors=\"showErrors\" /></template>\n </v-number-input>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, toRefs, unref } from 'vue';\n\nimport { DfInputProps } from './dynamicforms-component-props';\nimport { BaseEmits, defaultBaseProps, DfInputHint, DfLabel, useInputBase } from './helpers';\n\nconst props = withDefaults(defineProps<DfInputProps>(), {\n ...defaultBaseProps,\n inputType: 'text',\n precision: null,\n step: undefined,\n min: undefined,\n max: undefined,\n});\n\ninterface Emits extends BaseEmits {}\n\nconst emits = defineEmits<Emits>();\n\nconst { densityClass, isRendered, label, showErrors, touched, value, visibilityClass, vuetifyBindings } = useInputBase(\n props,\n emits,\n);\nconst { inputType, max, min, precision, step } = toRefs(props);\n\nconst isNumber = computed(() => inputType.value === 'number');\nconst numberInputBindings = computed(() =>\n !isNumber.value ? {} : { min: unref(min), max: unref(max), precision: unref(precision), step: unref(step) },\n);\n</script>\n","import { Editor, Extension, Mark, mergeAttributes } from '@tiptap/core';\n\n/**\n * Adds a `class` attribute to paragraph, heading, blockquote and code-block nodes, so the \"Style\" dropdown's\n * named looks (`h3.category`, `p.info-box`, `pre.fancy-code-dark`...) persist through `getHTML()`/`setContent()`\n * the same way any other node attribute does.\n */\nexport const ClassAttribute = Extension.create({\n name: 'classAttribute',\n addGlobalAttributes() {\n return [\n {\n types: ['paragraph', 'heading', 'blockquote', 'codeBlock'],\n attributes: {\n class: {\n default: null,\n parseHTML: (element: HTMLElement) => element.getAttribute('class'),\n renderHTML: (attributes: Record<string, any>) => (attributes.class ? { class: attributes.class } : {}),\n },\n },\n },\n ];\n },\n});\n\nfunction styledSpanMark(name: string, className: string) {\n return Mark.create({\n name,\n parseHTML() {\n return [{ tag: `span.${className}` }];\n },\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(HTMLAttributes, { class: className }), 0];\n },\n });\n}\n\n/** Toggle mark wrapping the selection in `<span class=\"marker\">`, behaving like bold/italic over a selection. */\nexport const Marker = styledSpanMark('marker', 'marker');\n/** Toggle mark wrapping the selection in `<span class=\"spoiler\">`, behaving like bold/italic over a selection. */\nexport const Spoiler = styledSpanMark('spoiler', 'spoiler');\n\ninterface BlockStyleDef {\n key: 'ArticleCategory' | 'Title' | 'Subtitle' | 'InfoBox' | 'SideQuote' | 'CodeDark' | 'CodeBright';\n kind: 'heading' | 'paragraph' | 'blockquote' | 'codeBlock';\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n className: string;\n}\n\ninterface MarkStyleDef {\n key: 'Marker' | 'Spoiler';\n kind: 'mark';\n markName: 'marker' | 'spoiler';\n}\n\nexport type StyleDef = BlockStyleDef | MarkStyleDef;\n\n/** The \"Style\" dropdown's entries, in the order they are listed - element/class pairs the toolbar applies. */\nexport const STYLE_DEFS: StyleDef[] = [\n { key: 'ArticleCategory', kind: 'heading', level: 3, className: 'category' },\n { key: 'Title', kind: 'heading', level: 2, className: 'document-title' },\n { key: 'Subtitle', kind: 'heading', level: 3, className: 'document-subtitle' },\n { key: 'InfoBox', kind: 'paragraph', className: 'info-box' },\n { key: 'SideQuote', kind: 'blockquote', className: 'side-quote' },\n { key: 'Marker', kind: 'mark', markName: 'marker' },\n { key: 'Spoiler', kind: 'mark', markName: 'spoiler' },\n { key: 'CodeDark', kind: 'codeBlock', className: 'fancy-code fancy-code-dark' },\n { key: 'CodeBright', kind: 'codeBlock', className: 'fancy-code fancy-code-bright' },\n];\n\n// `editor.isActive(type, attrs)` requires every node touched by the current selection to match, so a\n// selection that spans a styled block plus the empty trailing paragraph TipTap keeps after it (or, after\n// `selectAll` on a single-block document, the whole document) reports no match even though the block the\n// selection starts in carries the style. Reading off the selection's anchor node instead answers the question\n// the dropdown actually asks: \"does the block/mark the selection starts in carry this style\".\n//\n// `$from` for a whole-document `AllSelection` resolves at depth 0 (the boundary before the first child, not\n// inside it), so a depth-0 anchor is re-resolved one position in - a position guaranteed to sit inside the\n// document's first block.\nfunction anchorPos(editor: Editor) {\n const { state } = editor;\n const { $from } = state.selection;\n if ($from.depth > 0 || state.doc.content.size === 0) return $from;\n return state.doc.resolve(Math.min(1, state.doc.content.size));\n}\n\nfunction anchorNode(editor: Editor) {\n return anchorPos(editor).parent;\n}\n\nfunction anchorAncestor(editor: Editor, typeName: string) {\n const $pos = anchorPos(editor);\n for (let depth = $pos.depth; depth >= 0; depth -= 1) {\n if ($pos.node(depth).type.name === typeName) return $pos.node(depth);\n }\n return null;\n}\n\nexport function isStyleActive(editor: Editor, def: StyleDef): boolean {\n switch (def.kind) {\n case 'heading': {\n const node = anchorNode(editor);\n return node.type.name === 'heading' && node.attrs.level === def.level && node.attrs.class === def.className;\n }\n case 'paragraph': {\n const node = anchorNode(editor);\n return node.type.name === 'paragraph' && node.attrs.class === def.className;\n }\n case 'codeBlock': {\n const node = anchorNode(editor);\n return node.type.name === 'codeBlock' && node.attrs.class === def.className;\n }\n case 'blockquote': {\n const node = anchorAncestor(editor, 'blockquote');\n return !!node && node.attrs.class === def.className;\n }\n case 'mark':\n return editor.isActive(def.markName);\n default:\n return false;\n }\n}\n\n/**\n * Applies (or, over an already-styled block/selection, removes) one \"Style\" dropdown entry. Block styles both\n * set the node type and its class in one step; the two inline marks toggle over the current selection like bold\n * or italic.\n */\nexport function applyStyle(editor: Editor, def: StyleDef): void {\n const chain = editor.chain().focus();\n\n // `lift` (which `unsetBlockquote` calls) only acts when every node the selection touches matches the target\n // type - a whole-document `AllSelection` (as `selectAll` produces) also touches the trailing empty paragraph\n // TipTap keeps after the last block, so it never matches and the command silently no-ops. Collapsing such a\n // selection down to the anchor block first keeps every block command below scoped to the block the dropdown\n // means. The two marks are left alone - they need the real selection range to wrap the marked text in.\n const { $from } = editor.state.selection;\n if (def.kind !== 'mark' && $from.depth === 0 && editor.state.doc.content.size > 0) {\n chain.setTextSelection(anchorPos(editor).pos);\n }\n\n switch (def.kind) {\n case 'heading':\n if (isStyleActive(editor, def)) chain.setParagraph().updateAttributes('paragraph', { class: null }).run();\n else {\n chain.setNode('heading', { level: def.level }).updateAttributes('heading', { class: def.className }).run();\n }\n break;\n case 'paragraph':\n if (isStyleActive(editor, def)) chain.setParagraph().updateAttributes('paragraph', { class: null }).run();\n else chain.setParagraph().updateAttributes('paragraph', { class: def.className }).run();\n break;\n case 'blockquote':\n if (isStyleActive(editor, def)) chain.unsetBlockquote().run();\n else if (anchorAncestor(editor, 'blockquote')) {\n chain.updateAttributes('blockquote', { class: def.className }).run();\n } else chain.setBlockquote().updateAttributes('blockquote', { class: def.className }).run();\n break;\n case 'codeBlock':\n if (isStyleActive(editor, def)) chain.toggleCodeBlock().updateAttributes('paragraph', { class: null }).run();\n else if (anchorNode(editor).type.name === 'codeBlock') {\n chain.updateAttributes('codeBlock', { class: def.className }).run();\n } else chain.setCodeBlock().updateAttributes('codeBlock', { class: def.className }).run();\n break;\n case 'mark':\n chain.toggleMark(def.markName).run();\n break;\n default:\n break;\n }\n}\n","import { Fragment, Node as PMNode, Slice } from '@tiptap/pm/model';\nimport { EditorView } from '@tiptap/pm/view';\nimport { Editor } from '@tiptap/vue-3';\n\n/** Reads a `File` into a base64 `data:` URI - the same embedding an uploaded or dropped image goes through. */\nexport function fileToDataUrl(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * The image files carried alongside (or instead of) HTML on a clipboard paste. Copying a picture out of another\n * app, or a Word/Docs selection that contains embedded pictures, delivers the pixel data this way rather than as\n * an inline `data:` URI in the HTML - `items` covers Chromium and Firefox, `files` is the fallback where a\n * browser only populates that.\n */\nexport function extractImageFiles(dataTransfer: DataTransfer | null): File[] {\n if (!dataTransfer) return [];\n const files: File[] = [];\n Array.from(dataTransfer.items || []).forEach((item) => {\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (file && file.type.startsWith('image/')) files.push(file);\n }\n });\n if (files.length === 0) {\n Array.from(dataTransfer.files || []).forEach((file) => {\n if (file.type.startsWith('image/')) files.push(file);\n });\n }\n return files;\n}\n\nfunction countImageNodes(fragment: Fragment): number {\n let count = 0;\n fragment.forEach((node) => {\n if (node.type.name === 'image') count += 1;\n else if (node.content.size) count += countImageNodes(node.content);\n });\n return count;\n}\n\nfunction replaceImageSources(fragment: Fragment, urls: string[], cursor: { index: number }): Fragment {\n const children: PMNode[] = [];\n fragment.forEach((node) => {\n if (node.type.name === 'image' && cursor.index < urls.length) {\n children.push(node.type.create({ ...node.attrs, src: urls[cursor.index] }, node.content, node.marks));\n cursor.index += 1;\n } else if (node.content.size) {\n children.push(node.copy(replaceImageSources(node.content, urls, cursor)));\n } else {\n children.push(node);\n }\n });\n return Fragment.fromArray(children);\n}\n\n/**\n * A `handlePaste` for `editorProps`: when the clipboard carries image files, embeds each as a base64 `data:` URI\n * and either drops it into the `<img>` placeholders the pasted HTML already parsed into (order-matched - the\n * shape a Word/Docs selection with embedded pictures takes once `transformPastedHTML` and the schema have parsed\n * it into `slice`), or, where the paste held no HTML worth keeping, inserts the images as new nodes at the\n * selection. Non-image pastes are left to the editor's default handling by returning `false`.\n */\nexport function createImagePasteHandler(getEditor: () => Editor | undefined) {\n return (view: EditorView, event: ClipboardEvent, slice: Slice): boolean => {\n const files = extractImageFiles(event.clipboardData);\n if (files.length === 0) return false;\n\n event.preventDefault();\n\n Promise.all(files.map(fileToDataUrl)).then((urls) => {\n if (countImageNodes(slice.content) > 0) {\n const content = replaceImageSources(slice.content, urls, { index: 0 });\n const newSlice = new Slice(content, slice.openStart, slice.openEnd);\n view.dispatch(view.state.tr.replaceSelection(newSlice).scrollIntoView());\n return;\n }\n\n getEditor()\n ?.chain()\n .focus()\n .insertContent(urls.map((src) => ({ type: 'image', attrs: { src } })))\n .run();\n });\n\n return true;\n };\n}\n","import Link from '@tiptap/extension-link';\n\n/**\n * `Link`, with a `download` attribute the toolbar's \"Downloadable\" toggle can set - rendered as `download=\"file\"`\n * on the anchor.\n */\nexport const LinkWithDownload = Link.extend({\n name: 'link',\n addAttributes() {\n return {\n ...this.parent?.(),\n download: {\n default: null,\n parseHTML: (element: HTMLElement) => element.getAttribute('download'),\n renderHTML: (attributes: Record<string, any>) => (attributes.download ? { download: attributes.download } : {}),\n },\n };\n },\n});\n","import { mergeAttributes, Node } from '@tiptap/core';\n\n/**\n * Recognises a YouTube or Vimeo watch/share URL and returns the equivalent embeddable player URL, or `null` for\n * anything else - the toolbar falls back to inserting the URL as a plain link when this returns `null`.\n */\nexport function toEmbedSrc(url: string): string | null {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n return null;\n }\n\n const host = parsed.hostname.replace(/^www\\.|^m\\./, '');\n\n if (host === 'youtube.com') {\n const id = parsed.searchParams.get('v');\n if (id) return `https://www.youtube.com/embed/${id}`;\n const embedMatch = parsed.pathname.match(/^\\/embed\\/([\\w-]+)/);\n if (embedMatch) return `https://www.youtube.com/embed/${embedMatch[1]}`;\n const shortsMatch = parsed.pathname.match(/^\\/shorts\\/([\\w-]+)/);\n if (shortsMatch) return `https://www.youtube.com/embed/${shortsMatch[1]}`;\n return null;\n }\n\n if (host === 'youtu.be') {\n const id = parsed.pathname.slice(1);\n return id ? `https://www.youtube.com/embed/${id}` : null;\n }\n\n if (host === 'vimeo.com') {\n const id = parsed.pathname.split('/').filter(Boolean).pop();\n return id && /^\\d+$/.test(id) ? `https://player.vimeo.com/video/${id}` : null;\n }\n\n return null;\n}\n\n/**\n * A responsive `<iframe>` block for a recognised video URL (YouTube, Vimeo) - saved in `getHTML()` output as a\n * plain `iframe.media-embed`, with the responsive 16:9 sizing coming from the editor's own CSS rather than\n * inline styles, so the saved HTML stays provider-agnostic.\n */\nexport const MediaEmbed = Node.create({\n name: 'mediaEmbed',\n group: 'block',\n atom: true,\n draggable: true,\n addAttributes() {\n return {\n src: { default: null },\n };\n },\n parseHTML() {\n return [{ tag: 'iframe.media-embed' }];\n },\n renderHTML({ HTMLAttributes }) {\n return [\n 'iframe',\n mergeAttributes(\n {\n class: 'media-embed',\n frameborder: '0',\n allow: 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture',\n allowfullscreen: 'true',\n },\n HTMLAttributes,\n ),\n ];\n },\n});\n","import { Editor } from '@tiptap/vue-3';\nimport { onBeforeUnmount, Ref, ref, watch } from 'vue';\n\n/**\n * A counter bumped on every editor transaction. The `Editor` instance is not a reactive object, so nothing else\n * tells Vue that `editor.isActive(...)`/`editor.can()...` now answer differently - a computed that reads this\n * counter before calling them re-evaluates exactly when the editor's state actually changed.\n */\nexport function useEditorTick(editorRef: Ref<Editor | undefined>) {\n const tick = ref(0);\n let bound: Editor | undefined;\n\n const onTransaction = () => {\n tick.value += 1;\n };\n const bind = (next: Editor | undefined) => {\n bound?.off('transaction', onTransaction);\n bound = next;\n bound?.on('transaction', onTransaction);\n };\n\n watch(editorRef, bind, { immediate: true });\n onBeforeUnmount(() => bind(undefined));\n\n return tick;\n}\n","<template>\n <div class=\"rtf-toolbar\" :class=\"{ 'rtf-toolbar--disabled': !editable }\">\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.Undo\"\n :disabled=\"!editable || !state.canUndo\"\n @click=\"editor?.chain().focus().undo().run()\"\n >\n <cached-icon name=\"mdi-undo\" />\n </v-btn>\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.Redo\"\n :disabled=\"!editable || !state.canRedo\"\n @click=\"editor?.chain().focus().redo().run()\"\n >\n <cached-icon name=\"mdi-redo\" />\n </v-btn>\n\n <v-divider vertical inset class=\"mx-1\" />\n\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.SelectAll\"\n :disabled=\"!editable\"\n @click=\"editor?.chain().focus().selectAll().run()\"\n >\n <cached-icon name=\"mdi-select-all\" />\n </v-btn>\n\n <v-divider vertical inset class=\"mx-1\" />\n\n <v-menu>\n <template #activator=\"{ props: menuProps }\">\n <v-btn size=\"small\" variant=\"text\" :disabled=\"!editable\" v-bind=\"menuProps\" append-icon=\"mdi-chevron-down\">\n {{ headingLabel }}\n </v-btn>\n </template>\n <v-list density=\"compact\">\n <v-list-item\n v-for=\"option in headingOptions\"\n :key=\"option.level\"\n :active=\"isHeadingActive(option.level)\"\n @click=\"setHeading(option.level)\"\n >\n <v-list-item-title>{{ option.label }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <v-menu>\n <template #activator=\"{ props: menuProps }\">\n <v-btn size=\"small\" variant=\"text\" :disabled=\"!editable\" v-bind=\"menuProps\" append-icon=\"mdi-chevron-down\">\n {{ t.Style }}\n </v-btn>\n </template>\n <v-list density=\"compact\">\n <v-list-item\n v-for=\"def in styleDefs\"\n :key=\"def.key\"\n :active=\"styleActive(def)\"\n @click=\"editor && applyStyle(editor, def)\"\n >\n <v-list-item-title>{{ t[def.key] }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <v-divider vertical inset class=\"mx-1\" />\n\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.Bold\"\n :disabled=\"!editable\"\n :active=\"state.bold\"\n @click=\"editor?.chain().focus().toggleBold().run()\"\n >\n <cached-icon name=\"mdi-format-bold\" />\n </v-btn>\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.Italic\"\n :disabled=\"!editable\"\n :active=\"state.italic\"\n @click=\"editor?.chain().focus().toggleItalic().run()\"\n >\n <cached-icon name=\"mdi-format-italic\" />\n </v-btn>\n\n <v-divider vertical inset class=\"mx-1\" />\n\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.HorizontalLine\"\n :disabled=\"!editable\"\n @click=\"editor?.chain().focus().setHorizontalRule().run()\"\n >\n <cached-icon name=\"mdi-minus\" />\n </v-btn>\n\n <v-menu :close-on-content-click=\"false\" @update:model-value=\"(shown: boolean) => shown && openLinkMenu()\">\n <template #activator=\"{ props: menuProps }\">\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.Link\"\n :disabled=\"!editable\"\n :active=\"state.link\"\n v-bind=\"menuProps\"\n >\n <cached-icon name=\"mdi-link-variant\" />\n </v-btn>\n </template>\n <v-card min-width=\"280\" class=\"pa-3\">\n <v-text-field\n v-model=\"linkUrl\"\n :label=\"t.LinkUrl\"\n density=\"compact\"\n hide-details\n autofocus\n @keydown.enter=\"applyLink\"\n />\n <v-checkbox v-model=\"linkDownloadable\" :label=\"t.Downloadable\" density=\"compact\" hide-details class=\"mt-1\" />\n <div class=\"d-flex justify-end ga-2 mt-2\">\n <v-btn v-if=\"state.link\" size=\"small\" variant=\"text\" @click=\"removeLink\">{{ t.LinkRemove }}</v-btn>\n <v-btn size=\"small\" color=\"primary\" variant=\"tonal\" @click=\"applyLink\">{{ t.LinkApply }}</v-btn>\n </div>\n </v-card>\n </v-menu>\n\n <v-menu :close-on-content-click=\"false\">\n <template #activator=\"{ props: menuProps }\">\n <v-btn icon size=\"small\" variant=\"text\" :title=\"t.Image\" :disabled=\"!editable\" v-bind=\"menuProps\">\n <cached-icon name=\"mdi-image-plus\" />\n </v-btn>\n </template>\n <v-card min-width=\"280\" class=\"pa-3\">\n <v-text-field\n v-model=\"imageUrl\"\n :label=\"t.ImageUrl\"\n density=\"compact\"\n hide-details\n autofocus\n @keydown.enter=\"insertImageFromUrl\"\n />\n <div class=\"d-flex justify-space-between align-center ga-2 mt-2\">\n <v-btn size=\"small\" variant=\"text\" prepend-icon=\"mdi-upload\" @click=\"triggerImageUpload\">\n {{ t.ImageUpload }}\n </v-btn>\n <v-btn size=\"small\" color=\"primary\" variant=\"tonal\" @click=\"insertImageFromUrl\">\n {{ t.ImageInsert }}\n </v-btn>\n </div>\n </v-card>\n </v-menu>\n <input ref=\"imageInput\" type=\"file\" accept=\"image/*\" class=\"d-none\" @change=\"onImageFileChosen\" />\n\n <v-menu :close-on-content-click=\"false\">\n <template #activator=\"{ props: menuProps }\">\n <v-btn icon size=\"small\" variant=\"text\" :title=\"t.MediaEmbed\" :disabled=\"!editable\" v-bind=\"menuProps\">\n <cached-icon name=\"mdi-video-plus\" />\n </v-btn>\n </template>\n <v-card min-width=\"280\" class=\"pa-3\">\n <v-text-field\n v-model=\"embedUrl\"\n :label=\"t.MediaEmbedUrl\"\n density=\"compact\"\n hide-details\n autofocus\n @keydown.enter=\"insertMediaEmbed\"\n />\n <div class=\"d-flex justify-end mt-2\">\n <v-btn size=\"small\" color=\"primary\" variant=\"tonal\" @click=\"insertMediaEmbed\">\n {{ t.MediaEmbedInsert }}\n </v-btn>\n </div>\n </v-card>\n </v-menu>\n\n <v-menu>\n <template #activator=\"{ props: menuProps }\">\n <v-btn icon size=\"small\" variant=\"text\" :title=\"t.Table\" :disabled=\"!editable\" v-bind=\"menuProps\">\n <cached-icon name=\"mdi-table\" />\n </v-btn>\n </template>\n <v-list density=\"compact\">\n <v-list-item @click=\"editor?.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run()\">\n <template #prepend><cached-icon name=\"mdi-table-plus\" /></template>\n <v-list-item-title>{{ t.TableInsert }}</v-list-item-title>\n </v-list-item>\n <v-divider />\n <v-list-item :disabled=\"!state.inTable\" @click=\"editor?.chain().focus().addRowBefore().run()\">\n <template #prepend><cached-icon name=\"mdi-table-row-plus-before\" /></template>\n <v-list-item-title>{{ t.TableAddRowAbove }}</v-list-item-title>\n </v-list-item>\n <v-list-item :disabled=\"!state.inTable\" @click=\"editor?.chain().focus().addRowAfter().run()\">\n <template #prepend><cached-icon name=\"mdi-table-row-plus-after\" /></template>\n <v-list-item-title>{{ t.TableAddRowBelow }}</v-list-item-title>\n </v-list-item>\n <v-list-item :disabled=\"!state.inTable\" @click=\"editor?.chain().focus().deleteRow().run()\">\n <template #prepend><cached-icon name=\"mdi-table-row-remove\" /></template>\n <v-list-item-title>{{ t.TableDeleteRow }}</v-list-item-title>\n </v-list-item>\n <v-divider />\n <v-list-item :disabled=\"!state.inTable\" @click=\"editor?.chain().focus().addColumnBefore().run()\">\n <template #prepend><cached-icon name=\"mdi-table-column-plus-before\" /></template>\n <v-list-item-title>{{ t.TableAddColumnBefore }}</v-list-item-title>\n </v-list-item>\n <v-list-item :disabled=\"!state.inTable\" @click=\"editor?.chain().focus().addColumnAfter().run()\">\n <template #prepend><cached-icon name=\"mdi-table-column-plus-after\" /></template>\n <v-list-item-title>{{ t.TableAddColumnAfter }}</v-list-item-title>\n </v-list-item>\n <v-list-item :disabled=\"!state.inTable\" @click=\"editor?.chain().focus().deleteColumn().run()\">\n <template #prepend><cached-icon name=\"mdi-table-column-remove\" /></template>\n <v-list-item-title>{{ t.TableDeleteColumn }}</v-list-item-title>\n </v-list-item>\n <v-divider />\n <v-list-item :disabled=\"!state.inTable\" @click=\"editor?.chain().focus().toggleHeaderRow().run()\">\n <template #prepend><cached-icon name=\"mdi-table-row\" /></template>\n <v-list-item-title>{{ t.TableToggleHeaderRow }}</v-list-item-title>\n </v-list-item>\n <v-list-item :disabled=\"!state.inTable\" @click=\"editor?.chain().focus().deleteTable().run()\">\n <template #prepend><cached-icon name=\"mdi-table-remove\" /></template>\n <v-list-item-title>{{ t.TableDeleteTable }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.Blockquote\"\n :disabled=\"!editable\"\n :active=\"state.blockquote\"\n @click=\"editor?.chain().focus().toggleBlockquote().run()\"\n >\n <cached-icon name=\"mdi-format-quote-close\" />\n </v-btn>\n\n <v-divider vertical inset class=\"mx-1\" />\n\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.AlignLeft\"\n :disabled=\"!editable\"\n :active=\"state.alignLeft\"\n @click=\"editor?.chain().focus().setTextAlign('left').run()\"\n >\n <cached-icon name=\"mdi-format-align-left\" />\n </v-btn>\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.AlignCenter\"\n :disabled=\"!editable\"\n :active=\"state.alignCenter\"\n @click=\"editor?.chain().focus().setTextAlign('center').run()\"\n >\n <cached-icon name=\"mdi-format-align-center\" />\n </v-btn>\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.AlignRight\"\n :disabled=\"!editable\"\n :active=\"state.alignRight\"\n @click=\"editor?.chain().focus().setTextAlign('right').run()\"\n >\n <cached-icon name=\"mdi-format-align-right\" />\n </v-btn>\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.AlignJustify\"\n :disabled=\"!editable\"\n :active=\"state.alignJustify\"\n @click=\"editor?.chain().focus().setTextAlign('justify').run()\"\n >\n <cached-icon name=\"mdi-format-align-justify\" />\n </v-btn>\n\n <v-divider vertical inset class=\"mx-1\" />\n\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.BulletedList\"\n :disabled=\"!editable\"\n :active=\"state.bulletList\"\n @click=\"editor?.chain().focus().toggleBulletList().run()\"\n >\n <cached-icon name=\"mdi-format-list-bulleted\" />\n </v-btn>\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.NumberedList\"\n :disabled=\"!editable\"\n :active=\"state.orderedList\"\n @click=\"editor?.chain().focus().toggleOrderedList().run()\"\n >\n <cached-icon name=\"mdi-format-list-numbered\" />\n </v-btn>\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.Outdent\"\n :disabled=\"!editable || !state.canLift\"\n @click=\"editor?.chain().focus().liftListItem('listItem').run()\"\n >\n <cached-icon name=\"mdi-format-indent-decrease\" />\n </v-btn>\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.Indent\"\n :disabled=\"!editable || !state.canSink\"\n @click=\"editor?.chain().focus().sinkListItem('listItem').run()\"\n >\n <cached-icon name=\"mdi-format-indent-increase\" />\n </v-btn>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Editor } from '@tiptap/vue-3';\nimport { computed, ref } from 'vue';\nimport { CachedIcon } from 'vue-cached-icon';\n\nimport { translatableStrings } from '../translations';\n\nimport { applyStyle, isStyleActive, STYLE_DEFS } from './block-styles';\nimport { fileToDataUrl } from './image-paste';\nimport { toEmbedSrc } from './media-embed';\nimport { useEditorTick } from './use-editor-tick';\n\nconst props = defineProps<{ editor?: Editor }>();\n\nconst t = translatableStrings;\n\nconst editor = computed(() => props.editor);\nconst tick = useEditorTick(editor);\nconst editable = computed(() => !!props.editor?.isEditable);\n\nconst state = computed(() => {\n void tick.value;\n const e = props.editor;\n return {\n canUndo: !!e?.can().undo(),\n canRedo: !!e?.can().redo(),\n bold: !!e?.isActive('bold'),\n italic: !!e?.isActive('italic'),\n link: !!e?.isActive('link'),\n blockquote: !!e?.isActive('blockquote'),\n bulletList: !!e?.isActive('bulletList'),\n orderedList: !!e?.isActive('orderedList'),\n alignLeft: !!e?.isActive({ textAlign: 'left' }),\n alignCenter: !!e?.isActive({ textAlign: 'center' }),\n alignRight: !!e?.isActive({ textAlign: 'right' }),\n alignJustify: !!e?.isActive({ textAlign: 'justify' }),\n inTable: !!e?.isActive('table'),\n canLift: !!e?.can().liftListItem('listItem'),\n canSink: !!e?.can().sinkListItem('listItem'),\n };\n});\n\nconst headingOptions = [\n { level: 0, label: t.Paragraph },\n { level: 1, label: t.Heading1 },\n { level: 2, label: t.Heading2 },\n { level: 3, label: t.Heading3 },\n { level: 4, label: t.Heading4 },\n { level: 5, label: t.Heading5 },\n { level: 6, label: t.Heading6 },\n] as const;\n\nfunction isHeadingActive(level: number) {\n void tick.value;\n if (level === 0) return !!editor.value?.isActive('paragraph');\n return !!editor.value?.isActive('heading', { level });\n}\nconst headingLabel = computed(\n () => headingOptions.find((option) => isHeadingActive(option.level))?.label ?? t.Paragraph,\n);\n\nfunction setHeading(level: number) {\n const chain = editor.value?.chain().focus();\n if (!chain) return;\n if (level === 0) chain.setParagraph().run();\n else chain.toggleHeading({ level: level as 1 | 2 | 3 | 4 | 5 | 6 }).run();\n}\n\n// Style dropdown\nconst styleDefs = STYLE_DEFS;\nfunction styleActive(def: (typeof STYLE_DEFS)[number]) {\n void tick.value;\n return !!editor.value && isStyleActive(editor.value, def);\n}\n\n// Link menu\nconst linkUrl = ref('');\nconst linkDownloadable = ref(false);\nfunction openLinkMenu() {\n const attrs = editor.value?.getAttributes('link') ?? {};\n linkUrl.value = attrs.href ?? '';\n linkDownloadable.value = !!attrs.download;\n}\nfunction applyLink() {\n if (!linkUrl.value) return;\n editor.value\n ?.chain()\n .focus()\n .extendMarkRange('link')\n .setLink({ href: linkUrl.value })\n .updateAttributes('link', { download: linkDownloadable.value ? 'file' : null })\n .run();\n}\nfunction removeLink() {\n editor.value?.chain().focus().unsetLink().run();\n}\n\n// Image menu\nconst imageUrl = ref('');\nconst imageInput = ref<HTMLInputElement>();\nfunction insertImageFromUrl() {\n if (!imageUrl.value) return;\n editor.value?.chain().focus().setImage({ src: imageUrl.value }).run();\n imageUrl.value = '';\n}\nfunction triggerImageUpload() {\n imageInput.value?.click();\n}\nasync function onImageFileChosen(event: Event) {\n const file = (event.target as HTMLInputElement).files?.[0];\n if (!file) return;\n const src = await fileToDataUrl(file);\n editor.value?.chain().focus().setImage({ src }).run();\n (event.target as HTMLInputElement).value = '';\n}\n\n// Media embed menu\nconst embedUrl = ref('');\nfunction insertMediaEmbed() {\n if (!embedUrl.value) return;\n const src = toEmbedSrc(embedUrl.value);\n const chain = editor.value?.chain().focus();\n if (!chain) return;\n if (src) chain.insertContent({ type: 'mediaEmbed', attrs: { src } }).run();\n else {\n chain\n .insertContent({ type: 'text', text: embedUrl.value, marks: [{ type: 'link', attrs: { href: embedUrl.value } }] })\n .run();\n }\n embedUrl.value = '';\n}\n</script>\n\n<style>\n.rtf-toolbar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 2px;\n padding: 4px;\n overflow-x: auto;\n border-bottom: 1px solid rgb(var(--v-theme-surface-variant));\n}\n\n.rtf-toolbar--disabled {\n opacity: 0.6;\n}\n</style>\n","// Content copied from Word or Google Docs carries mso-* inline styles, Mso*-prefixed classes, namespaced tags\n// (o:p, w:sdt, v:shape...), and conditional-compilation comments that are meaningless outside their originating\n// document. Left in place, they either render as visible clutter or silently defeat the mark/heading detection\n// the editor's own paste parsing relies on (an inline `mso-bidi-font-weight` next to a real `font-weight:bold`\n// is harmless, but a class name colliding with one this library uses for content styling would not be).\nconst NAMESPACED_TAG = /^[a-z][a-z0-9]*:[a-z]/i;\nconst MSO_STYLE_PROPERTY = /mso-[a-z-]+\\s*:[^;]+;?/gi;\nconst MSO_CLASS = /^Mso/i;\n// Word's own cell/table shading (Automatic/theme colours resolved at copy time, not necessarily what the\n// document visibly showed) rides along as a plain, non-mso `background`/`background-color` - stripped so a\n// pasted table adopts the editor's own theme instead of carrying the source document's shading. Foreground\n// `color` is left alone: unlike background shading, it is usually deliberate content styling worth keeping.\nconst BACKGROUND_STYLE_PROPERTY = /background(?:-color)?\\s*:[^;]+;?/gi;\n\nfunction stripComments(root: Element) {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_COMMENT);\n const comments: Comment[] = [];\n for (let node = walker.nextNode(); node; node = walker.nextNode()) comments.push(node as Comment);\n comments.forEach((comment) => comment.parentNode?.removeChild(comment));\n}\n\nfunction unwrap(element: Element) {\n const parent = element.parentNode;\n if (!parent) return;\n while (element.firstChild) parent.insertBefore(element.firstChild, element);\n parent.removeChild(element);\n}\n\nfunction cleanAttributes(element: HTMLElement) {\n const style = element.getAttribute('style');\n if (style != null) {\n const cleaned = style.replace(MSO_STYLE_PROPERTY, '').replace(BACKGROUND_STYLE_PROPERTY, '').trim();\n if (cleaned) element.setAttribute('style', cleaned);\n else element.removeAttribute('style');\n }\n\n const cssClass = element.getAttribute('class');\n if (cssClass != null) {\n const cleaned = cssClass\n .split(/\\s+/)\n .filter((name) => name && !MSO_CLASS.test(name))\n .join(' ');\n if (cleaned) element.setAttribute('class', cleaned);\n else element.removeAttribute('class');\n }\n\n element.removeAttribute('lang');\n element.removeAttribute('xml:lang');\n element.removeAttribute('id');\n element.removeAttribute('align');\n element.removeAttribute('bgcolor');\n}\n\n/**\n * Strips Word/Google Docs clipboard artifacts from pasted HTML before it reaches the editor's schema parser:\n * conditional comments, `<xml>`/`<style>`/`<meta>` blocks, namespaced tags (`o:p`, `w:sdt`, `v:shape`...),\n * `mso-*` inline style properties, `Mso*` classes, `background`/`background-color`/`bgcolor` shading, and\n * `lang`/`id`/`align` attributes. Real formatting left behind (`font-weight`, `<b>`, `<table>`, `<h1>`...) is\n * untouched, since it is what the editor's own extensions parse into marks, headings, lists and tables.\n */\nexport function stripWordArtifacts(html: string): string {\n if (!html || typeof DOMParser === 'undefined') return html;\n\n const doc = new DOMParser().parseFromString(html, 'text/html');\n const root = doc.body;\n if (!root) return html;\n\n stripComments(root);\n root.querySelectorAll('xml, style, script, meta, link').forEach((node) => node.remove());\n\n Array.from(root.querySelectorAll<HTMLElement>('*')).forEach((element) => {\n if (NAMESPACED_TAG.test(element.tagName) || element.tagName === 'FONT') {\n unwrap(element);\n return;\n }\n cleanAttributes(element);\n });\n\n // A span or div left with no attributes after cleanup is a pure wrapper Word adds around every run of text.\n Array.from(root.querySelectorAll('span, div')).forEach((element) => {\n if (element.attributes.length === 0) unwrap(element);\n });\n\n return root.innerHTML;\n}\n","<template>\n <div class=\"editor-container\">\n <rtf-toolbar :editor=\"editor\" />\n <editor-content class=\"editor-container__editor\" :editor=\"editor\" />\n <bubble-menu v-if=\"editor\" :editor=\"editor\" :should-show=\"bubbleShouldShow\">\n <div class=\"rtf-bubble-menu\">\n <v-btn icon size=\"small\" variant=\"text\" :active=\"bubbleState.bold\" @click=\"toggle('toggleBold')\">\n <cached-icon name=\"mdi-format-bold\" />\n </v-btn>\n <v-btn icon size=\"small\" variant=\"text\" :active=\"bubbleState.italic\" @click=\"toggle('toggleItalic')\">\n <cached-icon name=\"mdi-format-italic\" />\n </v-btn>\n <v-btn icon size=\"small\" variant=\"text\" :active=\"bubbleState.link\" @click=\"toggleBubbleLink\">\n <cached-icon name=\"mdi-link-variant\" />\n </v-btn>\n <v-btn icon size=\"small\" variant=\"text\" :active=\"bubbleState.bulletList\" @click=\"toggle('toggleBulletList')\">\n <cached-icon name=\"mdi-format-list-bulleted\" />\n </v-btn>\n <v-btn icon size=\"small\" variant=\"text\" :active=\"bubbleState.orderedList\" @click=\"toggle('toggleOrderedList')\">\n <cached-icon name=\"mdi-format-list-numbered\" />\n </v-btn>\n </div>\n </bubble-menu>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Image from '@tiptap/extension-image';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport { Table } from '@tiptap/extension-table';\nimport TableCell from '@tiptap/extension-table-cell';\nimport TableHeader from '@tiptap/extension-table-header';\nimport TableRow from '@tiptap/extension-table-row';\nimport TextAlign from '@tiptap/extension-text-align';\nimport { NodeSelection } from '@tiptap/pm/state';\nimport StarterKit from '@tiptap/starter-kit';\nimport { EditorContent, useEditor } from '@tiptap/vue-3';\nimport { BubbleMenu } from '@tiptap/vue-3/menus';\nimport { computed, watch } from 'vue';\nimport { CachedIcon } from 'vue-cached-icon';\n\nimport { ClassAttribute, Marker, Spoiler } from './block-styles';\nimport { createImagePasteHandler } from './image-paste';\nimport { LinkWithDownload } from './link-with-download';\nimport { MediaEmbed } from './media-embed';\nimport RtfToolbar from './rtf-toolbar.vue';\nimport { useEditorTick } from './use-editor-tick';\nimport { stripWordArtifacts } from './word-paste';\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n minHeight?: string;\n disabled?: boolean;\n }>(),\n { modelValue: '', minHeight: '7em', disabled: false },\n);\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string): void;\n}>();\n\nconst editor = useEditor({\n content: props.modelValue,\n editable: !props.disabled,\n extensions: [\n StarterKit.configure({ link: false }),\n LinkWithDownload.configure({ openOnClick: false, autolink: true, defaultProtocol: 'https' }),\n Image.configure({\n inline: true,\n allowBase64: true,\n resize: {\n enabled: true,\n directions: ['top', 'right', 'bottom', 'left', 'top-left', 'top-right', 'bottom-left', 'bottom-right'],\n minWidth: 24,\n minHeight: 24,\n },\n }),\n TextAlign.configure({ types: ['heading', 'paragraph'] }),\n Table.configure({ resizable: true }),\n TableRow,\n TableHeader,\n TableCell,\n Placeholder.configure({ placeholder: '' }),\n ClassAttribute,\n Marker,\n Spoiler,\n MediaEmbed,\n ],\n editorProps: {\n attributes: { class: 'rtf-content' },\n transformPastedHTML: (html: string) => stripWordArtifacts(html),\n handlePaste: createImagePasteHandler(() => editor.value),\n },\n onUpdate: ({ editor: instance }) => {\n emit('update:modelValue', instance.getHTML());\n },\n});\n\n// External writes (a reset, a different record loaded into the same form) are applied without re-emitting: the\n// third `setContent` argument suppresses the `update` this would otherwise trigger straight back out.\nwatch(\n () => props.modelValue,\n (value) => {\n const instance = editor.value;\n if (!instance) return;\n const incoming = value ?? '';\n if (incoming === instance.getHTML()) return;\n instance.commands.setContent(incoming, { emitUpdate: false });\n },\n);\n\nwatch(\n () => props.disabled,\n (disabled) => editor.value?.setEditable(!disabled),\n);\nwatch(editor, (instance) => instance?.setEditable(!props.disabled));\n\nconst bubbleTick = useEditorTick(editor);\nconst bubbleState = computed(() => {\n void bubbleTick.value;\n return {\n bold: !!editor.value?.isActive('bold'),\n italic: !!editor.value?.isActive('italic'),\n link: !!editor.value?.isActive('link'),\n bulletList: !!editor.value?.isActive('bulletList'),\n orderedList: !!editor.value?.isActive('orderedList'),\n };\n});\n\n// A NodeSelection (an image, a table, a horizontal rule - anything selected as a whole rather than as text) is\n// excluded: bold/italic/link/list toggles don't apply to a selected node, so showing this text-formatting bubble\n// over one is just noise sitting on top of whatever selection UI that node has of its own (an image's resize\n// handles, for instance).\nfunction bubbleShouldShow({ state }: { state: { selection: { empty: boolean } } }) {\n return !state.selection.empty && !(state.selection instanceof NodeSelection);\n}\n\nfunction toggle(command: 'toggleBold' | 'toggleItalic' | 'toggleBulletList' | 'toggleOrderedList') {\n editor.value?.chain().focus()[command]().run();\n}\n\nfunction toggleBubbleLink() {\n const instance = editor.value;\n if (!instance) return;\n if (instance.isActive('link')) {\n instance.chain().focus().unsetLink().run();\n return;\n }\n\n const href = window.prompt('URL');\n if (href) instance.chain().focus().extendMarkRange('link').setLink({ href }).run();\n}\n</script>\n\n<style>\n@import url('https://fonts.googleapis.com/css2?family=Oswald&family=PT+Serif:ital,wght@0,400;0,700;1,400&display=swap');\n@import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,400;0,700;1,400;1,700&display=swap');\n\n@media print {\n body {\n margin: 0 !important;\n }\n}\n\n.editor-container {\n font-family: 'Lato';\n width: 100%;\n}\n\n.rtf-content {\n font-family: 'Lato';\n line-height: 1.6;\n word-break: break-word;\n min-height: v-bind(minHeight);\n padding: 0.5em 0.75em;\n background: rgb(var(--v-theme-surface));\n color: rgb(var(--v-theme-on-surface));\n outline: none;\n}\n\n.rtf-content p {\n margin: 0 0 1em;\n}\n\n/* ProseMirror's list/table schemas wrap every block of text in a <p>, list item or cell content included, so\n without this every list item and table cell would carry the same margin ordinary paragraphs do - list items\n readable as double-spaced lines, cells with dead space above and below their text. */\n.rtf-content li p,\n.rtf-content td p,\n.rtf-content th p {\n margin: 0;\n}\n\n.rtf-content li + li {\n margin-top: 0;\n}\n\n.rtf-content img {\n max-width: 100%;\n height: auto;\n}\n\n/* TipTap's image resize NodeView (@tiptap/extension-image's `resize` option) builds the handle elements below\n with no visual styling of their own - position only - so the consuming app is expected to supply the look. */\n.rtf-content [data-resize-handle] {\n background: rgb(var(--v-theme-primary));\n border: 1px solid rgb(var(--v-theme-surface));\n border-radius: 2px;\n opacity: 0;\n transition: opacity 0.1s ease;\n z-index: 1;\n}\n\n.rtf-content [data-resize-container]:hover [data-resize-handle],\n.rtf-content [data-resize-container]:focus-within [data-resize-handle] {\n opacity: 1;\n}\n\n.rtf-content [data-resize-handle='top'],\n.rtf-content [data-resize-handle='bottom'] {\n height: 6px;\n cursor: ns-resize;\n}\n\n.rtf-content [data-resize-handle='left'],\n.rtf-content [data-resize-handle='right'] {\n width: 6px;\n cursor: ew-resize;\n}\n\n.rtf-content [data-resize-handle='top-left'],\n.rtf-content [data-resize-handle='bottom-right'] {\n width: 10px;\n height: 10px;\n cursor: nwse-resize;\n}\n\n.rtf-content [data-resize-handle='top-right'],\n.rtf-content [data-resize-handle='bottom-left'] {\n width: 10px;\n height: 10px;\n cursor: nesw-resize;\n}\n\n/* Holding Shift while dragging a handle locks the aspect ratio (ResizableNodeView's own behaviour, not\n something this component adds) - a one-off tooltip on the corner handle most people reach for first is enough\n to surface it, rather than a whole toolbar for a modifier key. */\n.rtf-content [data-resize-handle='bottom-right']:hover::after {\n content: 'Hold Shift to keep the aspect ratio';\n position: absolute;\n bottom: 14px;\n right: 0;\n white-space: nowrap;\n font-size: 12px;\n font-family: 'Lato';\n padding: 2px 6px;\n border-radius: 4px;\n background: rgb(var(--v-theme-surface-variant));\n color: rgb(var(--v-theme-on-surface-variant));\n pointer-events: none;\n}\n\n.rtf-content iframe.media-embed {\n width: 100%;\n aspect-ratio: 16 / 9;\n margin: 1em 0;\n border: 0;\n}\n\n.rtf-bubble-menu {\n display: flex;\n align-items: center;\n gap: 2px;\n padding: 2px;\n background: rgb(var(--v-theme-surface));\n border: 1px solid rgb(var(--v-theme-surface-variant));\n border-radius: 4px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n}\n\n.rtf-content h3.category {\n font-family: 'Oswald';\n font-size: 20px;\n font-weight: bold;\n color: #555;\n letter-spacing: 10px;\n margin: 0;\n padding: 0;\n}\n\n.rtf-content h2.document-title {\n font-family: 'Oswald';\n font-size: 50px;\n font-weight: bold;\n margin: 0;\n padding: 0;\n border: 0;\n}\n\n.rtf-content h3.document-subtitle {\n font-family: 'Oswald';\n font-size: 20px;\n color: #555;\n margin: 0 0 1em;\n font-weight: bold;\n padding: 0;\n}\n\n.rtf-content p.info-box {\n --background-size: 30px;\n --background-color: #e91e63;\n padding: 1.2em 2em;\n border: 1px solid var(--background-color);\n background:\n linear-gradient(\n 135deg,\n var(--background-color) 0%,\n var(--background-color) var(--background-size),\n transparent var(--background-size)\n ),\n linear-gradient(\n 135deg,\n transparent calc(100% - var(--background-size)),\n var(--background-color) calc(100% - var(--background-size)),\n var(--background-color)\n );\n border-radius: 10px;\n margin: 1.5em 2em;\n box-shadow: 5px 5px 0 #ffe6ef;\n}\n\n.rtf-content blockquote.side-quote {\n font-family: 'Oswald';\n font-style: normal;\n float: right;\n width: 35%;\n position: relative;\n border: 0;\n overflow: visible;\n z-index: 1;\n margin-left: 1em;\n}\n\n.rtf-content blockquote.side-quote::before {\n content: '“';\n position: absolute;\n top: -37px;\n left: -10px;\n display: block;\n font-size: 200px;\n color: #e7e7e7;\n z-index: -1;\n line-height: 1;\n}\n\n.rtf-content blockquote.side-quote p {\n font-size: 2em;\n line-height: 1;\n}\n\n.rtf-content blockquote.side-quote p:last-child:not(:first-child) {\n font-size: 1.3em;\n text-align: right;\n color: #555;\n}\n\n.rtf-content span.marker {\n background: yellow;\n}\n\n.rtf-content span.spoiler {\n background: #000;\n color: #000;\n}\n\n.rtf-content span.spoiler:hover {\n background: #000;\n color: #fff;\n}\n\n.rtf-content pre.fancy-code {\n border: 0;\n margin-left: 2em;\n margin-right: 2em;\n border-radius: 10px;\n}\n\n.rtf-content pre.fancy-code::before {\n content: '';\n display: block;\n height: 13px;\n background: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1NCAxMyI+CiAgPGNpcmNsZSBjeD0iNi41IiBjeT0iNi41IiByPSI2LjUiIGZpbGw9IiNGMzZCNUMiLz4KICA8Y2lyY2xlIGN4PSIyNi41IiBjeT0iNi41IiByPSI2LjUiIGZpbGw9IiNGOUJFNEQiLz4KICA8Y2lyY2xlIGN4PSI0Ny41IiBjeT0iNi41IiByPSI2LjUiIGZpbGw9IiM1NkM0NTMiLz4KPC9zdmc+Cg==);\n margin-bottom: 8px;\n background-repeat: no-repeat;\n}\n\n.rtf-content pre.fancy-code-dark {\n background: #272822;\n color: #fff;\n box-shadow: 5px 5px 0 #0000001f;\n}\n\n.rtf-content pre.fancy-code-bright {\n background: #dddfe0;\n color: #000;\n box-shadow: 5px 5px 0 #b3b3b3;\n}\n</style>\n","<template>\n <input-base v-bind=\"props\" class=\"rtf-editor\" :class=\"densityClass\">\n <template #default=\"slotProps\">\n <rtf-editor-core\n ref=\"$editor\"\n v-model=\"value\"\n :class=\"{ 'mt-6': !!label }\"\n :min-height=\"minHeight\"\n :disabled=\"vuetifyBindings.disabled\"\n v-bind=\"passthroughAttrs\"\n @focusin=\"slotProps.focus()\"\n @focusout=\"slotProps.blur()\"\n />\n </template>\n </input-base>\n</template>\n\n<script setup lang=\"ts\">\nimport { DfRtfEditorProps } from './dynamicforms-component-props';\nimport { BaseEmits, defaultBaseProps, InputBase, useInputBase } from './helpers';\nimport RtfEditorCore from './helpers/rtf-editor/editor-core.vue';\n\nconst props = withDefaults(defineProps<DfRtfEditorProps>(), { ...defaultBaseProps, minHeight: undefined });\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { densityClass, value, vuetifyBindings } = useInputBase(props, emits);\n</script>\n\n<style>\n.rtf-editor .v-field:not(.v-field--active) .v-label.v-field-label:not(.v-field-label--floating) {\n transform: translate(0.5em, 3em);\n}\n\n.rtf-editor .v-input__control {\n /* So the toolbar's dropdown menus draw over vuetify inputs that are positioned underneath */\n z-index: 1;\n}\n</style>\n","import { isArray, first, castArray } from 'lodash-es';\nimport { Ref } from 'vue';\n\nimport { SelectChoice } from './df-select.interface';\n\nexport function convertItems(items: SelectChoice[]) {\n return items.map((item) => ({ value: item.id, title: item.text, icon: item.icon }));\n}\n\n/**\n * multipleCompliantValue ensures that resulting value of the select component is\n * 1 - null, when nothing is selected\n * 2 - array, when multiple is truthy\n * 3 - ordinal / simple value when multiple is not truthy\n * @param value the value to make compliant\n * @param multiple indicator for multiple selection\n */\nexport function multipleCompliantValue(value: any, multiple: boolean): any {\n // Če je vrednost null ali undefined\n if (value == null) return null;\n\n // Če je prazno polje (za multiple)\n if (isArray(value) && value.length === 0) return null;\n\n // Za multiple vedno vrni polje\n if (multiple) return castArray(value);\n\n // Za single vrni prvo vrednost ali vrednost samo\n return isArray(value) ? (first(value) ?? null) : value;\n}\n\nexport function getSelectedChoices(loadedChoices: SelectChoice[], multipleCpliantValue: any | any[] | null) {\n if (multipleCpliantValue == null) return [];\n const mcValue = castArray(multipleCpliantValue);\n return loadedChoices.filter((choice) => mcValue.some((val: any) => val === choice.id));\n}\n\n/**\n * updateSelectedFromValue ensures that the actual select component receives model-value formatted to its needs\n */\nexport function updateSelectedFromValue(\n resultingValue: any,\n selected: Ref<any>,\n multiple: boolean,\n taggable: boolean,\n loadedChoices: SelectChoice[],\n) {\n const mcValue = multipleCompliantValue(resultingValue, multiple);\n\n if (mcValue == null) {\n selected.value = multiple ? [] : null;\n return;\n }\n\n if (multiple) {\n if (taggable) {\n // if taggable (can add new items not in choices), keep the value as-is\n selected.value = mcValue;\n } else {\n // when not taggable, we filter the result to existing choices\n selected.value = getSelectedChoices(loadedChoices, mcValue).map((choice) => choice.id);\n }\n } else {\n if (taggable) {\n // if taggable, we just keep the selected value\n selected.value = mcValue;\n } else {\n // when not taggable, we filter the result to existing choices\n const matchingChoice = first(getSelectedChoices(loadedChoices, mcValue));\n selected.value = matchingChoice?.id ?? null;\n }\n }\n}\n","<template>\n <component\n :is=\"taggable ? 'v-combobox' : 'v-autocomplete'\"\n v-if=\"isRendered\"\n ref=\"dfSelectRef\"\n v-model=\"selected\"\n :class=\"[cssClass, densityClass, visibilityClass, { 'df-select-multirow': isMultiline }]\"\n :items=\"options\"\n :return-object=\"false\"\n chips\n :auto-select-first=\"true\"\n :closable-chips=\"allowNull || (multiple && selected.length > 1)\"\n :clearable=\"allowNull\"\n :multiple=\"multiple\"\n :loading=\"loading\"\n :hide-selected=\"false\"\n :aria-describedby=\"vuetifyBindings.helpText ? `${vuetifyBindings.name}-help` : null\"\n :menu-props=\"{ maxHeight: '400' }\"\n :search=\"searchText\"\n v-bind=\"vuetifyBindings\"\n @update:search=\"(query: any) => queryOptions(query, undefined)\"\n @update:model-value=\"onSelect\"\n @click:clear=\"selected = null\"\n @blur=\"touched = true\"\n @mousedown.capture=\"onMouseDown($event)\"\n >\n <template #chip=\"{ item }\">\n <v-chip\n :key=\"item.value\"\n label\n size=\"small\"\n class=\"d-flex align-middle\"\n :variant=\"multiple ? 'tonal' : 'text'\"\n :closable=\"multiple\"\n @click:close=\"chipClose($event, item.value)\"\n >\n <template #prepend>\n <cached-icon v-if=\"item.raw?.icon\" class=\"me-1\" :name=\"item.raw.icon\" />\n </template>\n <span :class=\"{ 'text-body-1': !multiple }\">{{ item.title }}</span>\n </v-chip>\n </template>\n <template #label=\"labelData\">\n <df-label :data=\"labelData\" :label=\"label\" />\n </template>\n\n <template #item=\"{ props: prps, item }\">\n <v-list-item v-bind=\"prps\">\n <template #prepend>\n <span v-if=\"item.raw?.icon\" class=\"me-1\">\n <cached-icon class=\"action-icon\" :name=\"item.raw.icon\" />\n </span>\n </template>\n </v-list-item>\n </template>\n <template #message=\"{ message }\">\n <df-input-hint :message=\"message\" :errors=\"showErrors\" />\n </template>\n <template v-if=\"$slots['append-inner']\" #append-inner=\"props\">\n <slot name=\"append-inner\" v-bind=\"props\" />\n </template>\n <template v-if=\"$slots['prepend-inner']\" #prepend-inner=\"props\">\n <slot name=\"prepend-inner\" v-bind=\"props\" />\n </template>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport { isEqual, unionBy } from 'lodash-es';\nimport { computed, nextTick, ref, toRefs, unref, watch } from 'vue';\nimport { CachedIcon } from 'vue-cached-icon';\nimport { VAutocomplete, VCombobox } from 'vuetify/components';\n\nimport { DfSelectProps } from './dynamicforms-component-props';\nimport { BaseEmits, defaultBaseProps, DfInputHint, DfLabel, SelectChoice, useInputBase } from './helpers';\nimport {\n convertItems,\n getSelectedChoices,\n multipleCompliantValue,\n updateSelectedFromValue,\n} from './helpers/df-select.helper';\n\nconst propsWithDefaults = withDefaults(defineProps<DfSelectProps>(), {\n ...defaultBaseProps,\n choices: undefined,\n multiple: false,\n allowTags: false,\n allowNull: true,\n fetchChoices: undefined,\n});\n\nconst { choices, multiple, allowTags: taggable, allowNull, cssClass } = toRefs(propsWithDefaults);\n\ninterface Emits extends BaseEmits {\n (e: 'update:modelValueDisplay', value: SelectChoice[]): any;\n}\n\nconst emits = defineEmits<Emits>();\ndefineSlots<{\n 'append-inner'?: (props: any) => any;\n 'prepend-inner'?: (props: any) => any;\n}>();\n\nconst dfSelectRef = ref<InstanceType<typeof VAutocomplete> | InstanceType<typeof VCombobox> | null>(null);\n\nconst {\n densityClass,\n isRendered,\n label,\n showErrors,\n touched,\n value: resultingValue,\n visibilityClass,\n vuetifyBindings,\n} = useInputBase(propsWithDefaults, emits);\n\nconst selected = ref<any>(null);\nconst takeLoaded = ref(false);\nconst loaded = ref<SelectChoice[]>([]);\nconst loadedChoices = computed<SelectChoice[]>(() => (unref(takeLoaded) ? unref(loaded) : unref(choices) || []));\nconst loading = ref<boolean>(false);\n\nconst options = computed(() => convertItems(loadedChoices.value));\nconst searchText = ref<string | null>(null);\nconst fetchCounterGlobal = ref(0);\nconst isMultiline = ref(false);\n\nif (choices.value?.length && propsWithDefaults.fetchChoices !== undefined) {\n console.warn('Both choices and fetchChoices are set. Only one of them should be set.');\n}\n\nfunction emitModelValueDisplay(mcVal: any) {\n emits('update:modelValueDisplay', getSelectedChoices(loadedChoices.value, mcVal));\n}\n\nconst setResultingValueGuard = ref(false);\n\nfunction setResultingValue(newValue: any) {\n setResultingValueGuard.value = true;\n try {\n resultingValue.value = newValue;\n } finally {\n // The guard suppresses the watch that pushes the model's value back into `selected`. A write the control does\n // not take verbatim - a ValueChangedAction that writes another value back, a disabled field that drops it, a\n // handler that throws and unwinds it - never reaches that watch, so the chips would go on showing a selection\n // the control never took. Comparing what the control holds against what was written is what restores it, and\n // it needs a deep comparison: for multiple selection the value reads back as a different array holding the\n // same items.\n if (!isEqual(multipleCompliantValue(resultingValue.value, multiple.value), newValue)) {\n updateSelectedFromValue(\n multipleCompliantValue(resultingValue.value, multiple.value),\n selected,\n multiple.value,\n taggable.value,\n loadedChoices.value,\n );\n }\n nextTick(() => {\n setResultingValueGuard.value = false;\n });\n }\n}\n\nfunction getFullWidth(item: HTMLElement | null) {\n if (!item) return 0;\n const rect = item.getBoundingClientRect();\n const style = window.getComputedStyle(item);\n\n return rect.width + parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n}\n\nfunction checkMultiline() {\n if (multiple.value && allowNull.value && selected.value != null && selected.value.length > 0 && dfSelectRef.value) {\n const dfSelect = dfSelectRef.value.$el;\n const inputWidth = dfSelect.querySelector('.v-input__control')?.clientWidth;\n const container = dfSelect.querySelector('.v-field__input');\n const items = container.querySelectorAll('.v-autocomplete__selection, .v-combobox__selection');\n\n const style = window.getComputedStyle(container);\n let selectedWidth = parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n\n items.forEach((item: HTMLElement) => {\n selectedWidth += getFullWidth(item);\n });\n\n const clearableWidth = getFullWidth(dfSelect.querySelector('.v-field .v-field__clearable'));\n const appendWidth = getFullWidth(dfSelect.querySelector('.v-field .v-field__append-inner'));\n const chipGap = 2;\n isMultiline.value = inputWidth - selectedWidth - items.length * chipGap - appendWidth < clearableWidth;\n } else {\n isMultiline.value = false;\n }\n}\n\nfunction onMouseDown(event: MouseEvent) {\n // če je klik na close ikoni ali njenem childu\n const target = event.target;\n if (target instanceof HTMLElement && target.closest('.v-chip__close')) {\n event.stopPropagation();\n event.preventDefault();\n }\n}\n\nwatch(\n selected,\n (newValue) => {\n if (vuetifyBindings.value.readonly) return;\n nextTick(() => {\n const mcVal = multipleCompliantValue(newValue, multiple.value);\n emitModelValueDisplay(mcVal);\n setResultingValue(mcVal);\n });\n },\n { deep: true },\n);\nwatch(\n resultingValue,\n (newValue: any) => {\n if (!setResultingValueGuard.value) {\n const mcVal = multipleCompliantValue(newValue, multiple.value);\n updateSelectedFromValue(mcVal, selected, multiple.value, false, loadedChoices.value);\n }\n },\n { deep: true },\n);\n\nwatch(setResultingValueGuard, () => {\n if (!setResultingValueGuard.value) {\n checkMultiline();\n }\n});\n\nfunction resetQuery() {\n if (searchText.value != null && searchText.value.length > 0) {\n searchText.value = null;\n queryOptions();\n }\n}\n\nfunction onSelect(/* val: any */) {\n resetQuery();\n if (vuetifyBindings.value.readonly || taggable.value) return;\n const mcVal = multipleCompliantValue(selected.value, multiple.value);\n updateSelectedFromValue(mcVal, selected, multiple.value, false, loadedChoices.value);\n setResultingValue(mcVal);\n}\n\nfunction chipClose(event: MouseEvent, itemValue: any) {\n event.stopPropagation();\n if (vuetifyBindings.value.readonly || taggable.value) {\n if (taggable.value) {\n selected.value = selected.value.filter((v: any) => v !== itemValue);\n }\n return;\n }\n let mcVal;\n if (multiple.value && Array.isArray(selected.value)) {\n mcVal = multipleCompliantValue(\n selected.value.filter((v) => v !== itemValue),\n multiple.value,\n );\n } else {\n mcVal = null;\n }\n updateSelectedFromValue(mcVal, selected, multiple.value, false, loadedChoices.value);\n setResultingValue(mcVal);\n}\n\nasync function queryOptions(queryValue?: any, idValue?: any): Promise<void> {\n if (vuetifyBindings.value.readonly) return;\n searchText.value = queryValue;\n if (choices.value || propsWithDefaults.fetchChoices === undefined) return;\n const fetchCounter = ++fetchCounterGlobal.value;\n loading.value = true;\n try {\n const selectedChoices = getSelectedChoices(\n loadedChoices.value,\n multipleCompliantValue(selected.value, multiple.value),\n );\n const newChoices = await propsWithDefaults.fetchChoices(queryValue, idValue);\n if (fetchCounter !== fetchCounterGlobal.value) return;\n loaded.value = unionBy([...selectedChoices, ...newChoices], 'id');\n takeLoaded.value = true;\n } finally {\n loading.value = false;\n }\n}\n\nfunction initialValueCheck() {\n let val = resultingValue.value;\n if (!allowNull.value && val == null && options.value.length) {\n // Starting settings: check if value is mandatory and select the first item from the options\n val = options.value[0].value;\n }\n val = multipleCompliantValue(val, multiple.value);\n updateSelectedFromValue(val, selected, multiple.value, taggable.value, loadedChoices.value);\n emitModelValueDisplay(val);\n setResultingValue(val);\n}\n\ninitialValueCheck();\n\n// Starting settings: check if ajax and current value is not loaded yet - then load the value from back-end\nif (propsWithDefaults.fetchChoices !== undefined) {\n queryOptions(undefined, resultingValue.value).then(() => {\n initialValueCheck();\n });\n}\n</script>\n\n<style scoped>\n.df-select-multirow :deep(.v-field__clearable) {\n position: absolute;\n}\n\n.df-select-multirow :deep(.v-field__append-inner) {\n margin-top: 24px;\n}\n\n.df-select-multirow :deep(.v-autocomplete .v-field:not(.v-field--focused) input) {\n min-width: 24px;\n}\n</style>\n","<template>\n <div v-if=\"isRendered\" class=\"df-textarea-container\" :class=\"[densityClass, visibilityClass]\">\n <v-textarea\n v-model=\"value\"\n :class=\"cssClass\"\n :rows=\"rows\"\n :auto-grow=\"(maxRows || 0) > 0\"\n :max-rows=\"maxRows\"\n v-bind=\"vuetifyBindings as any\"\n @blur=\"touched = true\"\n >\n <template #label=\"labelData\"><df-label :data=\"labelData\" :label=\"label\" /></template>\n <template #message=\"{ message }\"><df-input-hint :message=\"message\" :errors=\"showErrors\" /></template>\n </v-textarea>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { toRefs } from 'vue';\n\nimport { DfTextAreaProps } from './dynamicforms-component-props';\nimport { BaseEmits, defaultBaseProps, DfInputHint, DfLabel, useInputBase } from './helpers';\n\nconst props = withDefaults(defineProps<DfTextAreaProps>(), {\n ...defaultBaseProps,\n rows: undefined,\n maxRows: undefined,\n});\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { densityClass, isRendered, label, showErrors, touched, value, visibilityClass, vuetifyBindings } = useInputBase(\n props,\n emits,\n);\nconst { cssClass } = toRefs(props);\n</script>\n","import {\n DfActions,\n DfCheckbox,\n DfColor,\n DfDateTime,\n DfFile,\n DfInput,\n DfInputHint,\n DfLabel,\n DfRtfEditor,\n DfSelect,\n DfTextArea,\n} from './dynamicforms-components';\n\n/**\n * Every component this library draws with, keyed by the tag a layout names it by.\n *\n * A rendering layer that resolves a component by name out of a map - `@dynamicforms/vuetify-modal-form-kit`'s\n * `<component-render>` is one - is handed this instead of keeping a list of its own, which would have to be\n * extended whenever this package gains a component and would silently render nothing until it was.\n *\n * The keys are the kebab-case of the export names, so a tag names the same component whether it is looked up\n * here or left to Vue's own resolver after `DynamicFormsInputs` has registered the components globally.\n */\nexport const dfInputComponentsByTag = {\n 'df-actions': DfActions,\n 'df-checkbox': DfCheckbox,\n 'df-color': DfColor,\n 'df-date-time': DfDateTime,\n 'df-file': DfFile,\n 'df-input': DfInput,\n 'df-input-hint': DfInputHint,\n 'df-label': DfLabel,\n 'df-rtf-editor': DfRtfEditor,\n 'df-select': DfSelect,\n 'df-text-area': DfTextArea,\n} as const;\n\n/** The tags {@link dfInputComponentsByTag} answers for. */\nexport type DfInputComponentTag = keyof typeof dfInputComponentsByTag;\n","import { App } from 'vue';\n\nimport * as Inputs from './dynamicforms-components';\nimport { VuetifyInputsSettings, vuetifyInputsSettingsKey } from './helpers';\nimport * as VuetifyComponents from './vuetify-components';\n\nexport * from './helpers';\nexport * as VuetifyComponents from './vuetify-components';\nexport * from './dynamicforms-components';\nexport * from './dynamicforms-components-by-tag';\nexport * as DfInputComponents from './dynamicforms-components';\nexport * as DfInputComponentProps from './dynamicforms-component-props';\n\nexport interface DynamicFormsInputsOptions extends VuetifyInputsSettings {\n registerComponents: boolean;\n registerVuetifyComponents: boolean;\n}\n\nexport const DynamicFormsInputs = {\n install: (app: App, options?: Partial<DynamicFormsInputsOptions>) => {\n app.provide(vuetifyInputsSettingsKey, options ?? {});\n if (options?.registerComponents ?? false) {\n Object.entries(Inputs).map(([name, component]) => app.component(name, component));\n }\n if (options?.registerVuetifyComponents ?? false) {\n Object.entries(VuetifyComponents).map(([name, component]) => app.component(name, component));\n }\n },\n};\n"],"names":["isPluralType","val","formatDistanceLocale","getFormFromCount","count","formatDistance","token","options","result","tense","tokenValue","form","buildFormatLongFn","args","width","dateFormats","timeFormats","dateTimeFormats","formatLong","formatRelativeLocale","date","formatRelative","_baseDate","_options","format","buildLocalizeFn","value","context","valuesArray","defaultWidth","index","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","dirtyNumber","localize","quarter","buildMatchFn","string","matchPattern","matchResult","matchedString","parsePatterns","key","findIndex","pattern","findKey","rest","object","predicate","array","buildMatchPatternFn","parseResult","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","match","sl","DateTimeLocaleConfig","ref","locale","isRef","props","__props","isError","computed","widgetMessage","widgetClasses","_createBlock","_unref","MessagesWidget","lbl","_createElementBlock","_normalizeClass","_Fragment","CachedIcon","_component_v_img","_resolveDynamicComponent","MdString","VueMarkdown","vuetifyInputsSettingsKey","Label","text","icon","iconComponent","__publicField","defaultBaseProps","useInputBase","emit","settings","inject","injectedDensity","injectedVariant","internalValue","pendingWrite","shallowRef","newValue","toRaw","nextTick","Form","controlTouch","touched","valid","errors","error","ValidationErrorRenderContent","anyErrors","showErrors","enabled","visibility","isRendered","visibilityClass","extra","_b","_a","label","stated","isString","placeholder","helpText","hint","cssClass","density","_d","_c","boundDensity","variant","__spreadValues","isEmpty","emits","__emit","vuetifyBindings","isClearable","unref","focused","setFocused","isFocused","_component_v_input","_withCtx","message","_createVNode","DfInputHint","_component_v_field","_cache","labelData","DfLabel","slotProps","_createElementVNode","_hoisted_1","_renderSlot","_ctx","loaderProps","$slots","prependInnerProps","prependProps","translatableStrings","translateStrings","translationCallback","translation","ActionDisplayStyle","defaultDisplayStyle","fromString","mode","fromAny","input","isDefined","check","responsiveBreakpoints","ResponsiveRenderOptions","data","bp","breakpoint","bpData","field","isPlainObject","getBreakpointName","dp","useBreakpoint","display","useDisplay","ResponsiveActionRenderOptions","defaultIfEmpty","isObjectLike","isBoolean","getRenderOptionsForBreakpoint","partial","Action","FormAction","init","__spreadProps","actionsRef","action","DisplayMode","actionsWithBreakpoint","defaultActionColor","_openBlock","_renderList","idx","_component_v_btn","_mergeProps","_withModifiers","event","_hoisted_2","_toDisplayString","densityClass","indeterminate","boolValue","change","oldVal","clone","_component_v_checkbox","$event","dropdownShown","rules","_component_v_text_field","_normalizeStyle","_component_v_menu","_component_v_color_picker","currentLocale","firstDayOfWeek","inputType","displayFormatDate","displayFormatTime","toRefs","dropdown","dateMenuShown","timeMenuShown","formatNaive","valueISOFull","setValueISOFull","newISOValue","dateOrTimeIdx","vif","nv","watch","valueAsDate","uValue","res","valueAsTimeString","dateFormatted","vad","d","parse","err","timeFormatted","hour","toNumber","minute","isNaN","InputBase","_component_v_confirm_edit","proxyModel","actions","_component_v_date_picker","_component_v_time_picker","touchInterval","currentFile","progress","fileInputKey","selectedFile","loading","fileLabel","clearTouchInterval","setupTouchInterval","onBeforeUnmount","removeFile","__async","upload","file","loaded","total","handleFileChange","_component_v_progress_linear","_component_v_file_input","max","min","precision","step","isNumber","numberInputBindings","_component_v_number_input","ClassAttribute","Extension","element","attributes","styledSpanMark","name","className","Mark","HTMLAttributes","mergeAttributes","Marker","Spoiler","STYLE_DEFS","anchorPos","editor","state","$from","anchorNode","anchorAncestor","typeName","$pos","depth","isStyleActive","def","node","applyStyle","chain","fileToDataUrl","resolve","reject","reader","extractImageFiles","dataTransfer","files","item","countImageNodes","fragment","replaceImageSources","urls","cursor","children","Fragment","createImagePasteHandler","getEditor","view","slice","content","newSlice","Slice","src","LinkWithDownload","Link","toEmbedSrc","url","parsed","e","host","id","embedMatch","shortsMatch","MediaEmbed","Node","useEditorTick","editorRef","tick","bound","onTransaction","bind","next","editable","headingOptions","isHeadingActive","level","headingLabel","option","setHeading","styleDefs","styleActive","linkUrl","linkDownloadable","openLinkMenu","attrs","applyLink","removeLink","imageUrl","imageInput","insertImageFromUrl","triggerImageUpload","onImageFileChosen","embedUrl","insertMediaEmbed","_component_v_divider","menuProps","_component_v_list","_component_v_list_item","_component_v_list_item_title","_createTextVNode","shown","_component_v_card","_hoisted_3","NAMESPACED_TAG","MSO_STYLE_PROPERTY","MSO_CLASS","BACKGROUND_STYLE_PROPERTY","stripComments","root","walker","comments","comment","unwrap","parent","cleanAttributes","style","cleaned","stripWordArtifacts","html","useEditor","StarterKit","Image","TextAlign","Table","TableRow","TableHeader","TableCell","Placeholder","instance","incoming","disabled","bubbleTick","bubbleState","_e","bubbleShouldShow","NodeSelection","toggle","command","toggleBubbleLink","href","RtfToolbar","EditorContent","BubbleMenu","RtfEditorCore","convertItems","items","multipleCompliantValue","multiple","isArray","castArray","first","getSelectedChoices","loadedChoices","multipleCpliantValue","mcValue","choice","updateSelectedFromValue","resultingValue","selected","taggable","matchingChoice","propsWithDefaults","choices","allowNull","dfSelectRef","takeLoaded","searchText","fetchCounterGlobal","isMultiline","emitModelValueDisplay","mcVal","setResultingValueGuard","setResultingValue","isEqual","getFullWidth","rect","checkMultiline","dfSelect","inputWidth","container","selectedWidth","clearableWidth","appendWidth","chipGap","onMouseDown","target","resetQuery","queryOptions","onSelect","chipClose","itemValue","v","queryValue","idValue","fetchCounter","selectedChoices","newChoices","unionBy","initialValueCheck","query","_component_v_chip","prps","_component_v_textarea","dfInputComponentsByTag","DfActions","DfCheckbox","DfColor","DfDateTime","DfFile","DfInput","DfRtfEditor","DfSelect","DfTextArea","DynamicFormsInputs","app","Inputs","component","VuetifyComponents"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}
1
+ {"version":3,"file":"dynamicforms-vuetify-inputs.js","sources":["../node_modules/date-fns/locale/sl/_lib/formatDistance.js","../node_modules/date-fns/locale/_lib/buildFormatLongFn.js","../node_modules/date-fns/locale/sl/_lib/formatLong.js","../node_modules/date-fns/locale/sl/_lib/formatRelative.js","../node_modules/date-fns/locale/_lib/buildLocalizeFn.js","../node_modules/date-fns/locale/sl/_lib/localize.js","../node_modules/date-fns/locale/_lib/buildMatchFn.js","../node_modules/date-fns/locale/_lib/buildMatchPatternFn.js","../node_modules/date-fns/locale/sl/_lib/match.js","../node_modules/date-fns/locale/sl.js","../src/helpers/date-time-locale.ts","../src/helpers/df-file.interface.ts","../src/helpers/df-input-hint.vue","../src/helpers/df-label.vue","../src/helpers/settings.ts","../src/helpers/input-base.ts","../src/helpers/input-base.vue","../src/helpers/translations.ts","../src/helpers/action/action-display-style.ts","../src/helpers/action/responsive-render-options.ts","../src/helpers/action/action-render-options.ts","../src/helpers/action/action.ts","../src/helpers/use-file-touch-keepalive.ts","../src/df-actions.vue","../src/df-checkbox.vue","../src/df-color.vue","../src/df-datetime.vue","../src/df-file.vue","../src/df-image.vue","../src/df-input.vue","../src/helpers/rtf-editor/block-styles.ts","../src/helpers/rtf-editor/image-paste.ts","../src/helpers/rtf-editor/link-with-download.ts","../src/helpers/rtf-editor/media-embed.ts","../src/helpers/rtf-editor/use-editor-tick.ts","../src/helpers/rtf-editor/rtf-toolbar.vue","../src/helpers/rtf-editor/word-paste.ts","../src/helpers/rtf-editor/editor-core.vue","../src/df-rtf-editor.vue","../src/helpers/df-select.helper.ts","../src/df-select.vue","../src/df-text-area.vue","../src/dynamicforms-components-by-tag.ts","../src/index.ts"],"sourcesContent":["function isPluralType(val) {\n return val.one !== undefined;\n}\n\nconst formatDistanceLocale = {\n lessThanXSeconds: {\n present: {\n one: \"manj kot {{count}} sekunda\",\n two: \"manj kot {{count}} sekundi\",\n few: \"manj kot {{count}} sekunde\",\n other: \"manj kot {{count}} sekund\",\n },\n past: {\n one: \"manj kot {{count}} sekundo\",\n two: \"manj kot {{count}} sekundama\",\n few: \"manj kot {{count}} sekundami\",\n other: \"manj kot {{count}} sekundami\",\n },\n future: {\n one: \"manj kot {{count}} sekundo\",\n two: \"manj kot {{count}} sekundi\",\n few: \"manj kot {{count}} sekunde\",\n other: \"manj kot {{count}} sekund\",\n },\n },\n\n xSeconds: {\n present: {\n one: \"{{count}} sekunda\",\n two: \"{{count}} sekundi\",\n few: \"{{count}} sekunde\",\n other: \"{{count}} sekund\",\n },\n past: {\n one: \"{{count}} sekundo\",\n two: \"{{count}} sekundama\",\n few: \"{{count}} sekundami\",\n other: \"{{count}} sekundami\",\n },\n future: {\n one: \"{{count}} sekundo\",\n two: \"{{count}} sekundi\",\n few: \"{{count}} sekunde\",\n other: \"{{count}} sekund\",\n },\n },\n\n halfAMinute: \"pol minute\",\n\n lessThanXMinutes: {\n present: {\n one: \"manj kot {{count}} minuta\",\n two: \"manj kot {{count}} minuti\",\n few: \"manj kot {{count}} minute\",\n other: \"manj kot {{count}} minut\",\n },\n past: {\n one: \"manj kot {{count}} minuto\",\n two: \"manj kot {{count}} minutama\",\n few: \"manj kot {{count}} minutami\",\n other: \"manj kot {{count}} minutami\",\n },\n future: {\n one: \"manj kot {{count}} minuto\",\n two: \"manj kot {{count}} minuti\",\n few: \"manj kot {{count}} minute\",\n other: \"manj kot {{count}} minut\",\n },\n },\n\n xMinutes: {\n present: {\n one: \"{{count}} minuta\",\n two: \"{{count}} minuti\",\n few: \"{{count}} minute\",\n other: \"{{count}} minut\",\n },\n past: {\n one: \"{{count}} minuto\",\n two: \"{{count}} minutama\",\n few: \"{{count}} minutami\",\n other: \"{{count}} minutami\",\n },\n future: {\n one: \"{{count}} minuto\",\n two: \"{{count}} minuti\",\n few: \"{{count}} minute\",\n other: \"{{count}} minut\",\n },\n },\n\n aboutXHours: {\n present: {\n one: \"približno {{count}} ura\",\n two: \"približno {{count}} uri\",\n few: \"približno {{count}} ure\",\n other: \"približno {{count}} ur\",\n },\n past: {\n one: \"približno {{count}} uro\",\n two: \"približno {{count}} urama\",\n few: \"približno {{count}} urami\",\n other: \"približno {{count}} urami\",\n },\n future: {\n one: \"približno {{count}} uro\",\n two: \"približno {{count}} uri\",\n few: \"približno {{count}} ure\",\n other: \"približno {{count}} ur\",\n },\n },\n\n xHours: {\n present: {\n one: \"{{count}} ura\",\n two: \"{{count}} uri\",\n few: \"{{count}} ure\",\n other: \"{{count}} ur\",\n },\n past: {\n one: \"{{count}} uro\",\n two: \"{{count}} urama\",\n few: \"{{count}} urami\",\n other: \"{{count}} urami\",\n },\n future: {\n one: \"{{count}} uro\",\n two: \"{{count}} uri\",\n few: \"{{count}} ure\",\n other: \"{{count}} ur\",\n },\n },\n\n xDays: {\n present: {\n one: \"{{count}} dan\",\n two: \"{{count}} dni\",\n few: \"{{count}} dni\",\n other: \"{{count}} dni\",\n },\n past: {\n one: \"{{count}} dnem\",\n two: \"{{count}} dnevoma\",\n few: \"{{count}} dnevi\",\n other: \"{{count}} dnevi\",\n },\n future: {\n one: \"{{count}} dan\",\n two: \"{{count}} dni\",\n few: \"{{count}} dni\",\n other: \"{{count}} dni\",\n },\n },\n\n // no tenses for weeks?\n aboutXWeeks: {\n one: \"približno {{count}} teden\",\n two: \"približno {{count}} tedna\",\n few: \"približno {{count}} tedne\",\n other: \"približno {{count}} tednov\",\n },\n\n // no tenses for weeks?\n xWeeks: {\n one: \"{{count}} teden\",\n two: \"{{count}} tedna\",\n few: \"{{count}} tedne\",\n other: \"{{count}} tednov\",\n },\n\n aboutXMonths: {\n present: {\n one: \"približno {{count}} mesec\",\n two: \"približno {{count}} meseca\",\n few: \"približno {{count}} mesece\",\n other: \"približno {{count}} mesecev\",\n },\n past: {\n one: \"približno {{count}} mesecem\",\n two: \"približno {{count}} mesecema\",\n few: \"približno {{count}} meseci\",\n other: \"približno {{count}} meseci\",\n },\n future: {\n one: \"približno {{count}} mesec\",\n two: \"približno {{count}} meseca\",\n few: \"približno {{count}} mesece\",\n other: \"približno {{count}} mesecev\",\n },\n },\n\n xMonths: {\n present: {\n one: \"{{count}} mesec\",\n two: \"{{count}} meseca\",\n few: \"{{count}} meseci\",\n other: \"{{count}} mesecev\",\n },\n past: {\n one: \"{{count}} mesecem\",\n two: \"{{count}} mesecema\",\n few: \"{{count}} meseci\",\n other: \"{{count}} meseci\",\n },\n future: {\n one: \"{{count}} mesec\",\n two: \"{{count}} meseca\",\n few: \"{{count}} mesece\",\n other: \"{{count}} mesecev\",\n },\n },\n\n aboutXYears: {\n present: {\n one: \"približno {{count}} leto\",\n two: \"približno {{count}} leti\",\n few: \"približno {{count}} leta\",\n other: \"približno {{count}} let\",\n },\n past: {\n one: \"približno {{count}} letom\",\n two: \"približno {{count}} letoma\",\n few: \"približno {{count}} leti\",\n other: \"približno {{count}} leti\",\n },\n future: {\n one: \"približno {{count}} leto\",\n two: \"približno {{count}} leti\",\n few: \"približno {{count}} leta\",\n other: \"približno {{count}} let\",\n },\n },\n\n xYears: {\n present: {\n one: \"{{count}} leto\",\n two: \"{{count}} leti\",\n few: \"{{count}} leta\",\n other: \"{{count}} let\",\n },\n past: {\n one: \"{{count}} letom\",\n two: \"{{count}} letoma\",\n few: \"{{count}} leti\",\n other: \"{{count}} leti\",\n },\n future: {\n one: \"{{count}} leto\",\n two: \"{{count}} leti\",\n few: \"{{count}} leta\",\n other: \"{{count}} let\",\n },\n },\n\n overXYears: {\n present: {\n one: \"več kot {{count}} leto\",\n two: \"več kot {{count}} leti\",\n few: \"več kot {{count}} leta\",\n other: \"več kot {{count}} let\",\n },\n past: {\n one: \"več kot {{count}} letom\",\n two: \"več kot {{count}} letoma\",\n few: \"več kot {{count}} leti\",\n other: \"več kot {{count}} leti\",\n },\n future: {\n one: \"več kot {{count}} leto\",\n two: \"več kot {{count}} leti\",\n few: \"več kot {{count}} leta\",\n other: \"več kot {{count}} let\",\n },\n },\n\n almostXYears: {\n present: {\n one: \"skoraj {{count}} leto\",\n two: \"skoraj {{count}} leti\",\n few: \"skoraj {{count}} leta\",\n other: \"skoraj {{count}} let\",\n },\n past: {\n one: \"skoraj {{count}} letom\",\n two: \"skoraj {{count}} letoma\",\n few: \"skoraj {{count}} leti\",\n other: \"skoraj {{count}} leti\",\n },\n future: {\n one: \"skoraj {{count}} leto\",\n two: \"skoraj {{count}} leti\",\n few: \"skoraj {{count}} leta\",\n other: \"skoraj {{count}} let\",\n },\n },\n};\n\nfunction getFormFromCount(count) {\n switch (count % 100) {\n case 1:\n return \"one\";\n case 2:\n return \"two\";\n case 3:\n case 4:\n return \"few\";\n default:\n return \"other\";\n }\n}\n\nexport const formatDistance = (token, count, options) => {\n let result = \"\";\n let tense = \"present\";\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n tense = \"future\";\n result = \"čez \";\n } else {\n tense = \"past\";\n result = \"pred \";\n }\n }\n\n const tokenValue = formatDistanceLocale[token];\n\n if (typeof tokenValue === \"string\") {\n result += tokenValue;\n } else {\n const form = getFormFromCount(count);\n if (isPluralType(tokenValue)) {\n result += tokenValue[form].replace(\"{{count}}\", String(count));\n } else {\n result += tokenValue[tense][form].replace(\"{{count}}\", String(count));\n }\n }\n\n return result;\n};\n","export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, dd. MMMM y\",\n long: \"dd. MMMM y\",\n medium: \"d. MMM y\",\n short: \"d. MM. yy\",\n};\n\nconst timeFormats = {\n full: \"HH:mm:ss zzzz\",\n long: \"HH:mm:ss z\",\n medium: \"HH:mm:ss\",\n short: \"HH:mm\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} {{time}}\",\n long: \"{{date}} {{time}}\",\n medium: \"{{date}} {{time}}\",\n short: \"{{date}} {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: (date) => {\n const day = date.getDay();\n\n switch (day) {\n case 0:\n return \"'prejšnjo nedeljo ob' p\";\n case 3:\n return \"'prejšnjo sredo ob' p\";\n case 6:\n return \"'prejšnjo soboto ob' p\";\n default:\n return \"'prejšnji' EEEE 'ob' p\";\n }\n },\n yesterday: \"'včeraj ob' p\",\n today: \"'danes ob' p\",\n tomorrow: \"'jutri ob' p\",\n nextWeek: (date) => {\n const day = date.getDay();\n\n switch (day) {\n case 0:\n return \"'naslednjo nedeljo ob' p\";\n case 3:\n return \"'naslednjo sredo ob' p\";\n case 6:\n return \"'naslednjo soboto ob' p\";\n default:\n return \"'naslednji' EEEE 'ob' p\";\n }\n },\n other: \"P\",\n};\n\nexport const formatRelative = (token, date, _baseDate, _options) => {\n const format = formatRelativeLocale[token];\n\n if (typeof format === \"function\") {\n return format(date);\n }\n\n return format;\n};\n","/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"pr. n. št.\", \"po n. št.\"],\n abbreviated: [\"pr. n. št.\", \"po n. št.\"],\n wide: [\"pred našim štetjem\", \"po našem štetju\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"1. čet.\", \"2. čet.\", \"3. čet.\", \"4. čet.\"],\n wide: [\"1. četrtletje\", \"2. četrtletje\", \"3. četrtletje\", \"4. četrtletje\"],\n};\n\nconst monthValues = {\n narrow: [\"j\", \"f\", \"m\", \"a\", \"m\", \"j\", \"j\", \"a\", \"s\", \"o\", \"n\", \"d\"],\n abbreviated: [\n \"jan.\",\n \"feb.\",\n \"mar.\",\n \"apr.\",\n \"maj\",\n \"jun.\",\n \"jul.\",\n \"avg.\",\n \"sep.\",\n \"okt.\",\n \"nov.\",\n \"dec.\",\n ],\n\n wide: [\n \"januar\",\n \"februar\",\n \"marec\",\n \"april\",\n \"maj\",\n \"junij\",\n \"julij\",\n \"avgust\",\n \"september\",\n \"oktober\",\n \"november\",\n \"december\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"n\", \"p\", \"t\", \"s\", \"č\", \"p\", \"s\"],\n short: [\"ned.\", \"pon.\", \"tor.\", \"sre.\", \"čet.\", \"pet.\", \"sob.\"],\n abbreviated: [\"ned.\", \"pon.\", \"tor.\", \"sre.\", \"čet.\", \"pet.\", \"sob.\"],\n\n wide: [\n \"nedelja\",\n \"ponedeljek\",\n \"torek\",\n \"sreda\",\n \"četrtek\",\n \"petek\",\n \"sobota\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"d\",\n pm: \"p\",\n midnight: \"24.00\",\n noon: \"12.00\",\n morning: \"j\",\n afternoon: \"p\",\n evening: \"v\",\n night: \"n\",\n },\n abbreviated: {\n am: \"dop.\",\n pm: \"pop.\",\n midnight: \"poln.\",\n noon: \"pold.\",\n morning: \"jut.\",\n afternoon: \"pop.\",\n evening: \"več.\",\n night: \"noč\",\n },\n wide: {\n am: \"dop.\",\n pm: \"pop.\",\n midnight: \"polnoč\",\n noon: \"poldne\",\n morning: \"jutro\",\n afternoon: \"popoldne\",\n evening: \"večer\",\n night: \"noč\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"d\",\n pm: \"p\",\n midnight: \"24.00\",\n noon: \"12.00\",\n morning: \"zj\",\n afternoon: \"p\",\n evening: \"zv\",\n night: \"po\",\n },\n abbreviated: {\n am: \"dop.\",\n pm: \"pop.\",\n midnight: \"opoln.\",\n noon: \"opold.\",\n morning: \"zjut.\",\n afternoon: \"pop.\",\n evening: \"zveč.\",\n night: \"ponoči\",\n },\n wide: {\n am: \"dop.\",\n pm: \"pop.\",\n midnight: \"opolnoči\",\n noon: \"opoldne\",\n morning: \"zjutraj\",\n afternoon: \"popoldan\",\n evening: \"zvečer\",\n night: \"ponoči\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n return number + \".\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // [TODO] -- I challenge you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // [TODO] -- I challenge you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // [TODO] I challenge you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)\\./i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n abbreviated: /^(pr\\. n\\. št\\.|po n\\. št\\.)/i,\n wide: /^(pred Kristusom|pred na[sš]im [sš]tetjem|po Kristusu|po na[sš]em [sš]tetju|na[sš]ega [sš]tetja)/i,\n};\nconst parseEraPatterns = {\n any: [/^pr/i, /^(po|na[sš]em)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^[1234]\\.\\s?[čc]et\\.?/i,\n wide: /^[1234]\\. [čc]etrtletje/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated:\n /^(jan\\.|feb\\.|mar\\.|apr\\.|maj|jun\\.|jul\\.|avg\\.|sep\\.|okt\\.|nov\\.|dec\\.)/i,\n wide: /^(januar|februar|marec|april|maj|junij|julij|avgust|september|oktober|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n abbreviated: [\n /^ja/i,\n /^fe/i,\n /^mar/i,\n /^ap/i,\n /^maj/i,\n /^jun/i,\n /^jul/i,\n /^av/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n wide: [\n /^ja/i,\n /^fe/i,\n /^mar/i,\n /^ap/i,\n /^maj/i,\n /^jun/i,\n /^jul/i,\n /^av/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[nptsčc]/i,\n short: /^(ned\\.|pon\\.|tor\\.|sre\\.|[cč]et\\.|pet\\.|sob\\.)/i,\n abbreviated: /^(ned\\.|pon\\.|tor\\.|sre\\.|[cč]et\\.|pet\\.|sob\\.)/i,\n wide: /^(nedelja|ponedeljek|torek|sreda|[cč]etrtek|petek|sobota)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^n/i, /^p/i, /^t/i, /^s/i, /^[cč]/i, /^p/i, /^s/i],\n any: [/^n/i, /^po/i, /^t/i, /^sr/i, /^[cč]/i, /^pe/i, /^so/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(d|po?|z?v|n|z?j|24\\.00|12\\.00)/i,\n any: /^(dop\\.|pop\\.|o?poln(\\.|o[cč]i?)|o?pold(\\.|ne)|z?ve[cč](\\.|er)|(po)?no[cč]i?|popold(ne|an)|jut(\\.|ro)|zjut(\\.|raj))/i,\n};\nconst parseDayPeriodPatterns = {\n narrow: {\n am: /^d/i,\n pm: /^p/i,\n midnight: /^24/i,\n noon: /^12/i,\n morning: /^(z?j)/i,\n afternoon: /^p/i,\n evening: /^(z?v)/i,\n night: /^(n|po)/i,\n },\n any: {\n am: /^dop\\./i,\n pm: /^pop\\./i,\n midnight: /^o?poln/i,\n noon: /^o?pold/i,\n morning: /j/i,\n afternoon: /^pop\\./i,\n evening: /^z?ve/i,\n night: /(po)?no/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"wide\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./sl/_lib/formatDistance.js\";\nimport { formatLong } from \"./sl/_lib/formatLong.js\";\nimport { formatRelative } from \"./sl/_lib/formatRelative.js\";\nimport { localize } from \"./sl/_lib/localize.js\";\nimport { match } from \"./sl/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary Slovenian locale.\n * @language Slovenian\n * @iso-639-2 slv\n * @author Adam Stradovnik [@Neoglyph](https://github.com/Neoglyph)\n * @author Mato Žgajner [@mzgajner](https://github.com/mzgajner)\n */\nexport const sl = {\n code: \"sl\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1 /* Monday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default sl;\n","import { Locale } from 'date-fns';\nimport { sl } from 'date-fns/locale/sl';\nimport { isRef, ref, Ref } from 'vue';\n\nexport const DateTimeLocaleConfig = {\n dateTimeLocale: ref(sl),\n setDateTimeLocale(locale: Locale | Ref<Locale>) {\n if (isRef(locale)) {\n this.dateTimeLocale = locale;\n } else {\n this.dateTimeLocale.value = locale;\n }\n },\n};\n","export type FileProgressCallback = (loaded: number, total: number) => void;\n\n/**\n * Thrown by `FileComms.touch` or `FileComms.delete` when the backend confirms the file identifier no longer\n * exists there (e.g. its keep-alive TTL expired). The component reacts to this specific type by clearing the\n * field and, where a `control` is bound, showing `errorText` as a validation error. Any other thrown error is\n * treated as transient and left entirely to the consumer.\n */\nexport class FileGoneError extends Error {\n constructor(public errorText: string) {\n super(errorText);\n }\n}\n\nexport interface FileComms {\n /**\n * upload is called when a file is added to the input and needs to be uploaded to the backend for storage\n * the component will then set its modelValue to the file identifier returned by this function. when the form\n * is posted, only the identifier will be sent to the backend\n *\n * the method may throw an exception which will mean upload failure\n *\n * @param file the file to be uploaded\n * @param progressCallback callback function to call with current upload progress data.\n * See e.g. axios onUploadProgress for axios post method\n * @return file id\n */\n upload: (file: File, progressCallback?: FileProgressCallback) => Promise<string>;\n\n /**\n * delete is called when the file is removed from the input and needs to be deleted at the backend\n *\n * throw {@link FileGoneError} if the backend reports the file identifier is already gone; any other thrown\n * error is treated as a transient failure\n *\n * @param fileIdentifier the identifier that was returned by upload\n */\n delete: (fileIdentifier: string) => Promise<void>;\n\n /**\n * touch is called at a regular interval (see the `touchInterval` prop / `defaultTouchInterval` setting) to let\n * the backend know that the file is still in play and must not be discarded\n *\n * throw {@link FileGoneError} if the backend reports the file identifier no longer exists; any other thrown\n * error is treated as a transient failure and left to the consumer to act on, if at all\n *\n * @param fileIdentifier the identifier that was returned by upload\n */\n touch: (fileIdentifier: string) => Promise<void>;\n}\n","<template>\n <messages-widget :message=\"widgetMessage\" :classes=\"widgetClasses\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { MessagesWidget } from '@dynamicforms/vue-forms';\nimport { computed } from 'vue';\n\nimport type { DfInputHintProps } from '../dynamicforms-component-props';\n\nconst props = withDefaults(defineProps<DfInputHintProps>(), {\n errors: '',\n message: '',\n errorClasses: 'text-error',\n messageClasses: '',\n});\n\nconst isError = computed(() => {\n if (props.errors) {\n if (typeof props.errors === 'string') {\n return props.errors.trim().length > 0;\n }\n return props.errors.length > 0;\n }\n return false;\n});\n\nconst widgetMessage = computed(() => {\n return isError.value ? props.errors : props.message;\n});\n\nconst widgetClasses = computed(() => {\n return isError.value ? props.errorClasses : props.messageClasses;\n});\n</script>\n\n<style scoped></style>\n","<template>\n <div class=\"df-label\" :class=\"{ 'allow-wrap': allowWrap }\">\n <template v-if=\"label.icon\">\n <cached-icon v-if=\"label.iconComponent === 'v-icon'\" :name=\"label.icon\" size=\"1.25em\" />\n <v-img v-else-if=\"label.iconComponent === 'v-img'\" class=\"icon\" :src=\"label.icon\" />\n <component :is=\"label.iconComponent\" v-else :src=\"label.icon\" />\n </template>\n <vue-markdown\n v-if=\"lbl instanceof MdString\"\n class=\"markdown\"\n :source=\"lbl.toString()\"\n :options=\"lbl.options\"\n :plugins=\"lbl.plugins\"\n />\n <template v-else>{{ lbl }}</template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { MdString } from '@dynamicforms/vue-forms';\nimport { computed } from 'vue';\nimport { CachedIcon } from 'vue-cached-icon';\nimport VueMarkdown from 'vue-markdown-render';\n\nimport type { DfLabelProps } from '../dynamicforms-component-props';\n\nconst props = defineProps<DfLabelProps>();\n\nconst lbl = computed(() => (props.data ? props.data.label : props.label.text));\n</script>\n\n<style>\n.df-label {\n display: flex;\n align-items: center;\n gap: 2px;\n white-space: nowrap;\n justify-content: flex-start;\n}\n\n.df-label.allow-wrap {\n white-space: initial;\n}\n\n.df-label .icon {\n width: 1.25em;\n}\n\n.df-label .markdown :first-child,\n.df-label .markdown :last-child {\n margin-top: 0 !important;\n padding-top: 0 !important;\n margin-bottom: 0 !important;\n padding-bottom: 0 !important;\n line-height: 1.35em !important; /* inspired by vitepress' aggressive settings */\n}\n</style>\n","import { FieldDensity, type FieldVariant } from '@/helpers/input-base';\n\nexport interface VuetifyInputsSettings {\n defaultVariant?: FieldVariant;\n defaultDensity?: FieldDensity;\n /** Milliseconds between `<df-file>`/`<df-image>` keep-alive touches; overridable per field by their\n * `touchInterval` prop. Defaults to 60000 when neither is set. */\n defaultTouchInterval?: number;\n}\n\nexport const vuetifyInputsSettingsKey = Symbol('vuetifyInputsSettingsKey');\n","import Form, { MdString, ValidationErrorRenderContent } from '@dynamicforms/vue-forms';\nimport { isEmpty, isString } from 'lodash-es';\nimport { computed, inject, nextTick, ref, shallowRef, toRaw } from 'vue';\n\nimport { VuetifyInputsSettings, vuetifyInputsSettingsKey } from './settings';\n\nexport class Label {\n constructor(\n public text: string,\n public icon?: string,\n public iconComponent: string = 'v-icon',\n ) {}\n}\n\nexport type FieldVariant = 'outlined' | 'plain' | 'underlined' | 'filled' | 'solo' | 'solo-inverted' | 'solo-filled';\nexport type VuetifyDensity = 'default' | 'comfortable' | 'compact';\nexport type FieldDensity = 'default' | 'comfortable' | 'compact' | 'inline';\n\n/**\n * The presentation an element carries for the components in this library.\n *\n * Every one of these is also a prop, and the prop wins where both state something: a call site is more specific\n * than the element it renders. What the element carries is what a form declared in code says about itself, so a\n * field that names its own label needs no attribute at the tag that draws it.\n *\n * `Extras` is @dynamicforms/vue-forms' augmentation point for exactly this, so these properties are typed on every\n * element in an application that installs this library, the fields written inline in a `Group` declaration\n * included.\n */\ndeclare module '@dynamicforms/vue-forms' {\n interface Extras {\n label?: string | Label | MdString;\n placeholder?: string;\n helpText?: string;\n hint?: string;\n cssClass?: string;\n density?: FieldDensity;\n variant?: FieldVariant;\n }\n}\n\nexport interface BaseProps<T = any> {\n control?: Form.FieldBase<T>;\n modelValue?: T;\n label?: string | Label | MdString;\n errors?: string[];\n placeholder?: string;\n helpText?: string;\n hint?: string;\n enabled?: boolean;\n visibility?: Form.DisplayMode | string;\n cssClass?: string;\n clearable?: boolean;\n passthroughAttrs?: Record<string, any>;\n density?: FieldDensity;\n variant?: FieldVariant;\n}\n\nexport const defaultBaseProps = { enabled: undefined, clearable: true };\n\nexport interface BaseEmits<T = any> {\n (e: 'update:modelValue', value: T): void;\n (e: 'click:clear'): void;\n}\n\nexport function useInputBase<T = any>(props: BaseProps<T>, emit: BaseEmits<T>) {\n const settings = inject<VuetifyInputsSettings>(vuetifyInputsSettingsKey, {});\n const injectedDensity = inject<FieldDensity | null>('field-density', null);\n const injectedVariant = inject<FieldVariant | null>('field-variant', null);\n const internalValue = ref<T | null>(null);\n\n // A write is not a statement about what the control ends up holding. A ValueChangedAction may write a different\n // value back, a disabled field drops the write, and a handler that throws unwinds it. The rendered control has\n // the written value in its DOM by then, so it is the read here that has to correct it - and where the value the\n // control ends up holding is the one it started with, as under a rule that puts back the five characters a\n // six-character write exceeded, the read does not move and Vue schedules no render at all. Holding the written\n // value for one tick makes the read change twice, so the repaint that restores what the control holds happens.\n const pendingWrite = shallowRef<{ value: T } | null>(null);\n\n const value = computed({\n get(): T {\n if (pendingWrite.value) return pendingWrite.value.value;\n if (props.control) return props.control.value as T;\n if (props.modelValue === undefined) return internalValue.value as T;\n return props.modelValue as T;\n },\n set(newValue: T) {\n try {\n if (props.control) props.control.value = newValue;\n } finally {\n // compared as the write was made: an element holds its state behind reactive(), so an array or an object\n // reads back as a proxy of what was written and an identity comparison would answer that every such write\n // was refused. Object.is over the raw objects answers for NaN as well\n if (props.control && !Object.is(toRaw(props.control.value as any), toRaw(newValue as any))) {\n pendingWrite.value = { value: newValue };\n nextTick(() => {\n pendingWrite.value = null;\n });\n }\n }\n if (props.modelValue === undefined) internalValue.value = newValue;\n emit('update:modelValue', props.control ? (props.control.value as T) : newValue);\n },\n });\n\n if (props.control && !(props.control instanceof Form.FieldBase)) {\n throw new Error('control prop is not a vue-form control instance');\n }\n\n const controlTouch = computed({\n get() {\n return props.control!.touched;\n },\n set(val: boolean) {\n props.control!.touched = val;\n },\n });\n const touched = props.control ? controlTouch : ref(false);\n const valid = computed(() => (props.control ? props.control.valid : true));\n const errors = computed(() =>\n props.control ? props.control.errors : (props.errors || []).map((error) => new ValidationErrorRenderContent(error)),\n );\n const anyErrors = computed(() => (touched.value && errors.value.length > 0 ? ' ' : undefined));\n const showErrors = computed(() => (touched.value ? errors.value : undefined));\n // a field inside a disabled section is drawn disabled: effectiveEnabled is false where the element or any\n // container above it is disabled, which is the question a rendered input asks\n const enabled = computed(() => (props.control ? props.control.effectiveEnabled : props.enabled !== false));\n // A control resolves its own mode - vue-forms refuses anything that is not a DisplayMode constant and reads a\n // name case-insensitively. The prop is resolved the same way, so `visibility=\"hidden\"` states what it looks\n // like it states and an unrecognised mode is refused here as loudly as it is there.\n const visibility = computed(() => {\n if (props.control) return props.control.visibility;\n if (props.visibility == null) return Form.DisplayMode.FULL;\n return Form.DisplayMode.fromAny(props.visibility);\n });\n const isRendered = computed(() => visibility.value !== Form.DisplayMode.SUPPRESS);\n const visibilityClass = computed(() => ({\n 'd-none': visibility.value === Form.DisplayMode.HIDDEN,\n invisible: visibility.value === Form.DisplayMode.INVISIBLE,\n }));\n // the presentation the bound element carries: what a prop does not state is taken from here before any default\n const extra = computed(() => props.control?.extra ?? {});\n\n const label = computed((): Label => {\n const stated = props.label ?? extra.value.label;\n return isString(stated || '') ? new Label(<string>stated || '') : <Label>stated;\n });\n const placeholder = computed(() => props.placeholder ?? extra.value.placeholder ?? '');\n const helpText = computed(() => props.helpText ?? extra.value.helpText ?? '');\n const hint = computed(() => props.hint ?? extra.value.hint ?? '');\n const cssClass = computed(() => props.cssClass ?? extra.value.cssClass ?? '');\n\n const density = computed(\n (): FieldDensity => props.density ?? extra.value.density ?? injectedDensity ?? settings.defaultDensity ?? 'default',\n );\n const boundDensity = computed((): VuetifyDensity => (density.value === 'inline' ? 'default' : density.value));\n const variant = computed(\n (): FieldVariant =>\n props.variant ?? extra.value.variant ?? injectedVariant ?? settings.defaultVariant ?? 'underlined',\n );\n\n return {\n value,\n valid,\n enabled,\n errors,\n showErrors,\n visibility,\n isRendered,\n visibilityClass,\n label,\n touched,\n density,\n densityClass: computed(() => `df-density-${density.value}`),\n\n vuetifyBindings: computed(() => ({\n name: props.control?.fieldName,\n class: cssClass.value,\n\n density: boundDensity.value,\n variant: variant.value,\n\n label: label.value.text,\n errorMessages: anyErrors.value,\n // 'error-count': errors?.value.length || 0,\n readonly: !enabled.value,\n disabled: !enabled.value,\n\n placeholder: placeholder.value,\n 'persistent-placeholder': !isEmpty(placeholder.value),\n\n hint: hint.value,\n persistentHint: true, // we want persistent hint always\n hideDetails: <boolean | 'auto' | undefined>'auto', // we want to hide the hint element when hint isn't there\n helpText: helpText.value,\n\n ...(props.passthroughAttrs || {}),\n })),\n };\n}\n","<template>\n <v-input\n v-if=\"isRendered\"\n :name=\"vuetifyBindings.name\"\n :density=\"vuetifyBindings.density\"\n :hint=\"vuetifyBindings.hint\"\n :persistent-hint=\"vuetifyBindings.persistentHint\"\n :hide-details=\"vuetifyBindings.hideDetails\"\n :error-messages=\"vuetifyBindings.errorMessages\"\n :class=\"[cssClass, visibilityClass]\"\n >\n <v-field\n :variant=\"vuetifyBindings.variant\"\n :density=\"vuetifyBindings.density\"\n :label=\"vuetifyBindings.label\"\n :disabled=\"vuetifyBindings.disabled\"\n :clearable=\"isClearable\"\n :persistent-clear=\"true\"\n :dirty=\"!!value || !!vuetifyBindings.placeholder\"\n :active=\"focused\"\n :loading=\"loading\"\n @click:clear=\"emits('click:clear')\"\n @update:focused=\"(isFocused) => setFocused(isFocused)\"\n >\n <template #label=\"labelData\"><df-label :data=\"labelData\" :label=\"label\" /></template>\n <template #default=\"slotProps\">\n <div class=\"d-flex w-100 df-style-resetting df-sub-field\"><slot v-bind=\"slotProps\" /></div>\n </template>\n <template #loader=\"loaderProps\"><slot name=\"loader\" v-bind=\"loaderProps\" /></template>\n <template v-if=\"$slots['prepend-inner']\" #prepend-inner=\"prependInnerProps\">\n <slot name=\"prepend-inner\" v-bind=\"prependInnerProps\" />\n </template>\n </v-field>\n <template #message=\"{ message }\">\n <df-input-hint :message=\"message\" :errors=\"showErrors\" />\n </template>\n <template v-if=\"$slots.prepend\" #prepend=\"prependProps\"><slot name=\"prepend\" v-bind=\"prependProps\" /></template>\n </v-input>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, unref } from 'vue';\n\nimport DfInputHint from './df-input-hint.vue';\nimport DfLabel from './df-label.vue';\nimport { BaseEmits, BaseProps, useInputBase } from './input-base';\n\nconst props = defineProps<BaseProps & { loading?: boolean }>();\nconst emits = defineEmits<BaseEmits & { (e: 'blur'): void }>();\n\nconst { isRendered, label, showErrors, touched, value, visibilityClass, vuetifyBindings } = useInputBase(props, emits);\n\nconst isClearable = computed(() => !!(unref(props.clearable) && unref(value)));\nconst focused = ref<boolean>(false);\n\nfunction setFocused(isFocused: boolean) {\n focused.value = isFocused;\n if (!isFocused) {\n touched.value = true;\n emits('blur');\n }\n}\n</script>\n\n<style>\n.df-style-resetting .v-field__overlay {\n background-color: transparent;\n}\n.df-style-resetting .v-field__outline::before,\n.df-style-resetting .v-field__outline::after {\n content: none !important;\n}\n\n.df-sub-field {\n max-height: var(--v-input-control-height);\n min-height: max(\n var(--v-input-control-height, 56px),\n 1.5rem + var(--v-field-input-padding-top) + var(--v-field-input-padding-bottom)\n );\n}\n\n.df-density-inline .df-sub-field {\n min-height: revert;\n}\n\n.rtf-editor .df-sub-field {\n max-height: revert;\n}\n</style>\n","export const translatableStrings = {\n Yes: 'Yes',\n No: 'No',\n Close: 'Close',\n Paragraph: 'Paragraph',\n Heading1: 'Heading 1',\n Heading2: 'Heading 2',\n Heading3: 'Heading 3',\n Heading4: 'Heading 4',\n Heading5: 'Heading 5',\n Heading6: 'Heading 6',\n Downloadable: 'Downloadable',\n ArticleCategory: 'Article category',\n Title: 'Title',\n Subtitle: 'Subtitle',\n InfoBox: 'Info box',\n SideQuote: 'Side quote',\n Marker: 'Marker',\n Spoiler: 'Spoiler',\n CodeDark: 'Code (dark)',\n CodeBright: 'Code (bright)',\n Undo: 'Undo',\n Redo: 'Redo',\n SelectAll: 'Select all',\n Bold: 'Bold',\n Italic: 'Italic',\n HorizontalLine: 'Horizontal line',\n Blockquote: 'Block quote',\n BulletedList: 'Bulleted list',\n NumberedList: 'Numbered list',\n Outdent: 'Decrease indent',\n Indent: 'Increase indent',\n AlignLeft: 'Align left',\n AlignCenter: 'Align center',\n AlignRight: 'Align right',\n AlignJustify: 'Justify',\n Link: 'Link',\n LinkUrl: 'URL',\n LinkApply: 'Apply',\n LinkRemove: 'Remove link',\n Image: 'Image',\n ImageUrl: 'Image URL',\n ImageUpload: 'Upload image',\n ImageInsert: 'Insert',\n ImageDropHint: 'Drop image here or click to browse',\n ImageReplace: 'Replace image',\n Table: 'Table',\n TableInsert: 'Insert table',\n TableAddRowAbove: 'Add row above',\n TableAddRowBelow: 'Add row below',\n TableDeleteRow: 'Delete row',\n TableAddColumnBefore: 'Add column before',\n TableAddColumnAfter: 'Add column after',\n TableDeleteColumn: 'Delete column',\n TableToggleHeaderRow: 'Toggle header row',\n TableDeleteTable: 'Delete table',\n Style: 'Style',\n MediaEmbed: 'Insert media',\n MediaEmbedUrl: 'Video URL',\n MediaEmbedInsert: 'Insert',\n};\n\nexport function translateStrings(translationCallback: (s: string) => string) {\n Object.keys(translatableStrings).forEach((key) => {\n const translation = translationCallback(key);\n if (translation != null) {\n translatableStrings[key as keyof typeof translatableStrings] = translation;\n }\n });\n}\n","/**\n * DisplayMode enum provides an enumeration for supported ways of rendering a particular object in the DOM\n */\nenum ActionDisplayStyle {\n // This enum is actually declared in dynamicforms.action.py\n BUTTON = 0, // action should render as a button\n TEXT = 1, // action should render as a link text\n}\n\nexport const defaultDisplayStyle = ActionDisplayStyle.BUTTON;\n\n// eslint-disable-next-line @typescript-eslint/no-namespace, no-redeclare\nnamespace ActionDisplayStyle {\n export function fromString(mode: string): ActionDisplayStyle {\n if (mode.toUpperCase() === 'BUTTON') return ActionDisplayStyle.BUTTON;\n if (mode.toUpperCase() === 'TEXT') return ActionDisplayStyle.TEXT;\n return defaultDisplayStyle;\n }\n\n export function fromAny(mode: any): ActionDisplayStyle {\n const input = typeof mode === 'number' ? mode : ActionDisplayStyle.fromString(mode as string);\n if (Object.values(ActionDisplayStyle).includes(input)) return input;\n return defaultDisplayStyle;\n }\n\n export function isDefined(mode: number | string): boolean {\n const check = typeof mode === 'number' ? mode : ActionDisplayStyle.fromString(mode as string);\n return Object.values(ActionDisplayStyle).includes(check);\n }\n}\n\nObject.freeze(ActionDisplayStyle);\n\nexport { ActionDisplayStyle };\n","import { isPlainObject } from 'lodash-es';\nimport { computed } from 'vue';\nimport { useDisplay } from 'vuetify';\n\nexport const responsiveBreakpoints = ['xs', 'sm', 'md', 'lg', 'xl'] as const;\nexport type BreakpointNames = (typeof responsiveBreakpoints)[number];\n/**\n * A set of options and the per-breakpoint sets that restate parts of it. `B` is what a breakpoint may state,\n * and defaults to the whole of `T`; a subclass narrows it where a member belongs to the object as a whole rather\n * than to one screen width.\n */\nexport type BreakpointsJSON<T extends Record<string, any>, B extends Record<string, any> = T> = T &\n Partial<Record<BreakpointNames, B>>;\n\nexport abstract class ResponsiveRenderOptions<T extends Record<string, any>> {\n protected readonly _value: BreakpointsJSON<T>;\n\n constructor(data?: BreakpointsJSON<T>) {\n this._value = this.cleanBreakpoint(data as T, true)!;\n if (data) {\n responsiveBreakpoints.forEach((bp) => {\n const options = this.cleanBreakpoint(data[bp]);\n if (options) this._value[bp] = options;\n });\n }\n }\n\n getOptionsForBreakpoint(breakpoint: BreakpointNames): T {\n // a base that states nothing cleans to null, and the breakpoints above it still have options to resolve\n const result = (this.cleanBreakpoint(this._value as T) ?? ({} as T)) as BreakpointsJSON<T>;\n for (const bp of responsiveBreakpoints) {\n // the fields that cascade are the ones each breakpoint states, so a field named at a breakpoint and\n // nowhere else still reaches the result\n const bpData = this._value[bp] ?? {};\n for (const field of Object.keys(bpData)) {\n const value = (<any>bpData)[field];\n // a breakpoint states what it changes; a field it says nothing about keeps cascading\n if (value == null) continue;\n if (isPlainObject(value)) {\n // shallow, so a breakpoint restates single keys of an options object rather than the whole of it. A\n // nested object is a value like any other and is replaced whole. Only plain objects merge: a Date, a\n // Map or a class instance would come out of a spread as its own properties without its prototype.\n (<any>result)[field] = { ...(<any>result)[field], ...value };\n } else {\n (<any>result)[field] = value;\n }\n }\n if (bp === breakpoint) break;\n }\n return result;\n }\n\n /**\n * Normalizes one breakpoint's options. The merge reads `null` and `undefined` as \"this breakpoint says\n * nothing about that field\", so a field the breakpoint does not state has to come back as `undefined` rather\n * than as an empty value - an empty array or string returned here reads as a breakpoint deliberately emptying\n * what it inherited.\n */\n protected abstract cleanBreakpoint(bp?: T, defaultIfEmpty?: boolean): T | null;\n}\n\nexport function getBreakpointName(dp: ReturnType<typeof useDisplay>): BreakpointNames {\n if (dp.xlAndUp.value) return 'xl';\n if (dp.lgAndUp.value) return 'lg';\n if (dp.mdAndUp.value) return 'md';\n if (dp.smAndUp.value) return 'sm';\n return 'xs';\n}\n\nexport function useBreakpoint() {\n const display = useDisplay();\n\n return computed<BreakpointNames>(() => getBreakpointName(display));\n}\n","import { ActionValue } from '@dynamicforms/vue-forms';\nimport { isBoolean, isEmpty, isObjectLike, isPlainObject, isString } from 'lodash-es';\n\nimport { ActionDisplayStyle } from './action-display-style';\nimport { BreakpointNames, BreakpointsJSON, ResponsiveRenderOptions } from './responsive-render-options';\n\nexport interface ActionRenderOptions extends ActionValue {\n /** The text of the action, rendered when {@link showLabel} is set and the text is not empty. `ActionValue`\n * types this `unknown`, leaving what a label is to the rendering library; here it is a string. */\n label?: string;\n /** The icon of the action, a name `vue-cached-icon` resolves, rendered when {@link showIcon} is set and the\n * name is not empty. Typed here for the same reason `label` is. */\n icon?: string;\n /** Unique identifier for the action. Purely informational to `<df-actions>` itself - it is not used for\n * rendering - but by convention should match the key under which the action is registered in a\n * `FormActions` (`Record<string, Action>`) map passed to `@dynamicforms/vuetify-modal-form-kit`'s\n * `modal.message()`/`modal.yesNo()`/etc. That map key (or the action's `fieldName`, when it's part of a\n * `Form.Group`) - not this `name` field - is what the modal's promise actually resolves with; keeping them\n * in sync is what lets callers do e.g. `if (await modal.yesNo(...) === 'yes')`. */\n name?: string;\n /** How the action is rendered: {@link ActionDisplayStyle.BUTTON} for a tonal `<v-btn>`, or\n * {@link ActionDisplayStyle.TEXT} for a text-variant `<v-btn>`. */\n renderAs?: ActionDisplayStyle;\n /** Whether the label is shown. If `label` is empty, the label is never shown regardless of this flag. */\n showLabel?: boolean;\n /** Whether the icon is shown. If `icon` is empty, the icon is never shown regardless of this flag. */\n showIcon?: boolean;\n /** Marks this as the action to trigger on Enter when rendered inside `<df-modal>` (see that component's\n * `onKeydown` in `@dynamicforms/vuetify-modal-form-kit`) - e.g. a \"Save\" or \"Yes\" action. In `<df-actions>` it\n * also colors the button `primary`, unless overridden via `passthroughAttrs.color`. At most one action in a\n * given set should set this. */\n defaultConfirm?: boolean;\n /** Marks this as the action to trigger on Escape when rendered inside `<df-modal>` (see that component's\n * `onKeydown` in `@dynamicforms/vuetify-modal-form-kit`) - e.g. a \"Cancel\" or \"No\" action. In `<df-actions>` it\n * also colors the button `secondary`, unless overridden via `passthroughAttrs.color`. At most one action in a\n * given set should set this (an action such as `Action.closeAction()` may set both `defaultConfirm` and\n * `defaultReject` so it fires on either key). */\n defaultReject?: boolean;\n /** Additional props/attrs forwarded verbatim to the rendered `<v-btn>` (e.g. `color`, `loading`, `density`,\n * `rounded`, `block`, `prependIcon`, ...), taking precedence over `<df-actions>`'s own computed bindings\n * (`variant`, `color`, `disabled`). Mirrors the `passthroughAttrs` convention used by `df-input`/`df-file`/etc\n * (see `helpers/input-base.ts`); it has to live on the action's value here because `<df-actions>` renders a\n * whole array of buttons, not just one. */\n passthroughAttrs?: Record<string, any>;\n}\n/**\n * What one breakpoint of an action's value may state: the members that describe how the action is drawn.\n * `name`, `defaultConfirm` and `defaultReject` are not among them - which key a modal resolves with, and which\n * key fires the action, are properties of the action itself and do not depend on the width of the screen.\n */\nexport type ActionBreakpointRenderOptions = Omit<ActionRenderOptions, 'name' | 'defaultConfirm' | 'defaultReject'>;\nexport type ActionBreakpointOptions = BreakpointsJSON<ActionRenderOptions, ActionBreakpointRenderOptions>;\n\nexport class ResponsiveActionRenderOptions extends ResponsiveRenderOptions<ActionRenderOptions> {\n protected cleanBreakpoint(bp?: ActionRenderOptions, defaultIfEmpty: boolean = false): ActionRenderOptions | null {\n if ((!bp || !isObjectLike(bp)) && !defaultIfEmpty) return null;\n\n const result: ActionRenderOptions = {};\n if (defaultIfEmpty) {\n result.renderAs = ActionDisplayStyle.BUTTON;\n result.showLabel = true;\n result.showIcon = true;\n }\n\n if (bp) {\n if (bp.renderAs != null) result.renderAs = ActionDisplayStyle.fromAny(bp.renderAs);\n if (isString(bp.label)) result.label = bp.label;\n if (isString(bp.icon)) result.icon = bp.icon;\n if (isBoolean(bp.showLabel)) result.showLabel = bp.showLabel;\n if (isBoolean(bp.showIcon)) result.showIcon = bp.showIcon;\n if (isString(bp.name)) result.name = bp.name;\n if (isBoolean(bp.defaultConfirm)) result.defaultConfirm = bp.defaultConfirm;\n if (isBoolean(bp.defaultReject)) result.defaultReject = bp.defaultReject;\n // copied rather than kept by identity, so the cascade's shallow merge of a later breakpoint's attrs does\n // not write into the object the action holds\n if (isPlainObject(bp.passthroughAttrs)) result.passthroughAttrs = { ...bp.passthroughAttrs };\n }\n\n return Object.keys(result).length ? result : null;\n }\n}\n\n/**\n * What one action renders as at `breakpoint`, read off the value of any `Action`. The members\n * `ActionRenderOptions` adds over `ActionValue` are taken where the value carries them and defaulted where it does\n * not, so an action holding nothing but a label - which is all a `@dynamicforms/vue-forms` `Action` declares -\n * renders as a button showing that label.\n *\n * `label` and `icon` come back only where the matching flag says they are shown, and the flags come back false\n * where there is no text or name to show, so a caller renders each member on its own flag and never on emptiness.\n */\nexport function getRenderOptionsForBreakpoint(value: ActionValue, breakpoint: BreakpointNames): ActionRenderOptions {\n const options = new ResponsiveActionRenderOptions(value as ActionBreakpointOptions);\n const partial = options.getOptionsForBreakpoint(breakpoint);\n return {\n name: partial.name,\n label: partial.showLabel ? partial.label : undefined,\n icon: partial.showIcon ? partial.icon : undefined,\n renderAs: partial.renderAs,\n showLabel: isString(partial.label) && !isEmpty(partial.label) ? partial.showLabel : false,\n showIcon: isString(partial.icon) && !isEmpty(partial.icon) ? partial.showIcon : false,\n defaultConfirm: partial.defaultConfirm,\n defaultReject: partial.defaultReject,\n passthroughAttrs: partial.passthroughAttrs,\n };\n}\n","import { Action as FormAction, IFieldConstructorParams } from '@dynamicforms/vue-forms';\nimport { isEmpty, isString } from 'lodash-es';\nimport { computed, Ref } from 'vue';\n\nimport { translatableStrings } from '../translations';\n\nimport { ActionDisplayStyle } from './action-display-style';\nimport { ActionBreakpointOptions, getRenderOptionsForBreakpoint } from './action-render-options';\nimport { BreakpointNames } from './responsive-render-options';\n\nclass Action extends FormAction<ActionBreakpointOptions> {\n /** @see getRenderOptionsForBreakpoint, which answers the same for the value of any `Action` */\n getBreakpointValue(breakpoint: Ref<BreakpointNames>) {\n return computed(() => getRenderOptionsForBreakpoint(this.value, breakpoint.value));\n }\n\n /** @see ActionRenderOptions.name */\n get name() {\n return this.value.name;\n }\n\n /**\n * The label as this action renders it: the text where {@link ActionRenderOptions.showLabel} states it is shown,\n * and `undefined` where it is not. `label` is the base class's, and answers the text whatever the flag says.\n */\n get renderedLabel() {\n return this.value.showLabel ? this.value.label : undefined;\n }\n\n /** @see ActionRenderOptions.showLabel */\n get showLabel() {\n return isString(this.value.label) && !isEmpty(this.value.label) ? this.value.showLabel : false;\n }\n\n /**\n * The icon as this action renders it: the name where {@link ActionRenderOptions.showIcon} states it is shown,\n * and `undefined` where it is not. `icon` is the base class's, and answers the name whatever the flag says.\n */\n get renderedIcon() {\n return this.value.showIcon ? this.value.icon : undefined;\n }\n\n /** @see ActionRenderOptions.showIcon */\n get showIcon() {\n return isString(this.value.icon) && !isEmpty(this.value.icon) ? this.value.showIcon : false;\n }\n\n /** @see ActionRenderOptions.renderAs */\n get renderAs() {\n return this.value.renderAs;\n }\n\n /** @see ActionRenderOptions.defaultConfirm */\n get defaultConfirm() {\n return this.value.defaultConfirm;\n }\n\n /** @see ActionRenderOptions.defaultReject */\n get defaultReject() {\n return this.value.defaultReject;\n }\n\n /** @see ActionRenderOptions.passthroughAttrs */\n get passthroughAttrs() {\n return this.value.passthroughAttrs;\n }\n\n static closeAction(data?: Partial<IFieldConstructorParams<ActionBreakpointOptions>>) {\n const init: Partial<IFieldConstructorParams<ActionBreakpointOptions>> = {\n ...(data ?? {}), // any properties in data should overwrite properties in the constant\n value: {\n name: 'close',\n label: translatableStrings.Close,\n icon: 'ion-close-outline',\n renderAs: ActionDisplayStyle.BUTTON,\n showLabel: true,\n showIcon: true,\n },\n };\n init.value = { ...init.value, ...(data?.value ?? {}) }; // data may only contain partial info of the value\n return new Action(init);\n }\n\n static yesAction(data?: Partial<IFieldConstructorParams<ActionBreakpointOptions>>) {\n const init: Partial<IFieldConstructorParams<ActionBreakpointOptions>> = {\n ...(data ?? {}), // any properties in data should overwrite properties in the constant\n value: {\n name: 'yes',\n label: translatableStrings.Yes,\n icon: 'ion-thumbs-up-outline',\n renderAs: ActionDisplayStyle.BUTTON,\n showLabel: true,\n showIcon: true,\n },\n };\n init.value = { ...init.value, ...(data?.value ?? {}) }; // data may only contain partial info of the value\n return new Action(init);\n }\n\n static noAction(data?: Partial<IFieldConstructorParams<ActionBreakpointOptions>>) {\n const init: Partial<IFieldConstructorParams<ActionBreakpointOptions>> = {\n ...(data ?? {}), // any properties in data should overwrite properties in the constant\n value: {\n name: 'no',\n label: translatableStrings.No,\n icon: 'ion-thumbs-down-outline',\n renderAs: ActionDisplayStyle.BUTTON,\n showLabel: true,\n showIcon: true,\n },\n };\n init.value = { ...init.value, ...(data?.value ?? {}) }; // data may only contain partial info of the value\n return new Action(init);\n }\n}\n\nexport { Action };\n","import Form, { ValidationErrorRenderContent } from '@dynamicforms/vue-forms';\nimport { inject, onBeforeUnmount, ref, watch, type Ref } from 'vue';\n\nimport { FileComms, FileGoneError } from './df-file.interface';\nimport { VuetifyInputsSettings, vuetifyInputsSettingsKey } from './settings';\n\n/**\n * Runs the `comms.touch` keep-alive interval for `<df-file>`/`<df-image>` while `value` holds a file\n * identifier: starts it once `value` becomes truthy, stops it once it doesn't, and stops it on unmount.\n * `onGone` is called with `err.errorText` whenever a touch rejects with a {@link FileGoneError}; any other\n * rejection is left unhandled beyond that (it's a transient failure, for the consumer to act on if at all).\n */\nexport function useFileTouchKeepAlive(\n value: Ref<string | null>,\n comms: () => FileComms,\n touchIntervalProp: () => number | undefined,\n onGone: (errorText: string) => void,\n) {\n const settings = inject<VuetifyInputsSettings>(vuetifyInputsSettingsKey, {});\n const touchIntervalHandle = ref<number | null>(null);\n\n function clearTouchInterval() {\n if (touchIntervalHandle.value) window.clearInterval(touchIntervalHandle.value);\n }\n\n function setupTouchInterval() {\n clearTouchInterval();\n const interval = touchIntervalProp() ?? settings.defaultTouchInterval ?? 60_000;\n touchIntervalHandle.value = window.setInterval(() => {\n if (value.value) {\n comms()\n .touch(value.value)\n .catch((err) => {\n if (err instanceof FileGoneError) onGone(err.errorText);\n });\n }\n }, interval);\n }\n\n onBeforeUnmount(() => clearTouchInterval());\n watch(value, (newValue) => (newValue ? setupTouchInterval() : clearTouchInterval()));\n\n return { setupTouchInterval, clearTouchInterval };\n}\n\n/**\n * Reports a {@link FileGoneError}'s message on `control`, where one is bound. Kept outside the component's own\n * script so the write to `control.errors` isn't seen as a `.vue` component mutating its own prop — the write\n * goes through `Form.FieldBase`'s own setter, the same way `useInputBase`'s `touched` does.\n */\nexport function setFileGoneError(control: Form.FieldBase | undefined, errorText: string) {\n if (control) control.errors = [new ValidationErrorRenderContent(errorText)];\n}\n","<template>\n <div\n v-if=\"actionsRef.length > 0\"\n class=\"text-end df-actions\"\n :class=\"{\n 'button-group': showAsGroup === 'grouped' || showAsGroup === 'grouped-no-borders',\n 'with-border': showAsGroup === 'grouped',\n }\"\n >\n <v-btn\n v-for=\"(action, idx) in actionsWithBreakpoint\"\n :key=\"idx\"\n :variant=\"action.renderAs === ActionDisplayStyle.BUTTON ? 'tonal' : 'text'\"\n :color=\"defaultActionColor(action)\"\n :disabled=\"!action.action.effectiveEnabled || action.action.busy\"\n :loading=\"action.action.busy\"\n :elevation=\"0\"\n :size=\"buttonSize\"\n :class=\"{\n 'd-none': action.action.visibility === DisplayMode.HIDDEN,\n invisible: action.action.visibility === DisplayMode.INVISIBLE,\n }\"\n v-bind=\"action.passthroughAttrs\"\n @click.stop=\"(event: MouseEvent) => action.action.execute(event)\"\n >\n <cached-icon v-if=\"action.icon\" :name=\"action.icon\" />\n <span v-if=\"action.icon && action.label\" style=\"width: 0.5rem\" />\n <span v-if=\"action.label\">{{ action.label }}</span>\n </v-btn>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { DisplayMode } from '@dynamicforms/vue-forms';\nimport { computed, unref } from 'vue';\nimport { CachedIcon } from 'vue-cached-icon';\n\nimport { DfActionsProps } from './dynamicforms-component-props';\nimport { ActionDisplayStyle, ActionRenderOptions, getRenderOptionsForBreakpoint, useBreakpoint } from './helpers';\n\nconst props = withDefaults(defineProps<DfActionsProps>(), {\n buttonSize: 'default',\n showAsGroup: 'no',\n});\n\nconst breakpoint = useBreakpoint();\nconst actionsRef = computed(() => unref(props.actions).filter((action) => action.visibility !== DisplayMode.SUPPRESS));\n// What each button draws is read off the action's value rather than through the accessors this library's `Action`\n// adds over it, so an action declared as a `@dynamicforms/vue-forms` one - which declares none of them - is drawn\n// as well. The spread is that value resolved at the current breakpoint.\nconst actionsWithBreakpoint = computed(() =>\n actionsRef.value.map((action) => ({\n action,\n ...getRenderOptionsForBreakpoint(action.value, breakpoint.value),\n })),\n);\n\nfunction defaultActionColor(options: ActionRenderOptions): string | undefined {\n if (options.defaultConfirm) return 'primary';\n if (options.defaultReject) return 'secondary';\n return undefined;\n}\n</script>\n\n<style>\n.df-actions.button-group {\n border-radius: 0.5em;\n /* the following two make the container fit the small buttons. without them there would be a top margin */\n line-height: 0;\n height: fit-content;\n}\n.df-actions.button-group .v-btn {\n border: none;\n border-radius: 0;\n margin: 0 !important;\n padding: 0 0.25em;\n}\n.df-actions.button-group .v-btn:first-child {\n border-start-start-radius: 0.5em;\n border-end-start-radius: 0.5em;\n}\n.df-actions.button-group .v-btn:last-child {\n border-start-end-radius: 0.5em;\n border-end-end-radius: 0.5em;\n}\n.df-actions.button-group.with-border {\n border: 0.1em solid currentColor;\n}\n.df-actions.button-group.with-border .v-btn:not(:first-child) {\n border-inline-start: 0.1em solid currentColor;\n}\n.df-actions .v-btn:not(:first-child) {\n margin-left: 0.5em;\n}\n</style>\n","<template>\n <v-checkbox\n v-if=\"isRendered\"\n v-model=\"boolValue\"\n density=\"compact\"\n :class=\"[densityClass, visibilityClass]\"\n :indeterminate=\"indeterminate\"\n :false-value=\"false\"\n :true-value=\"true\"\n v-bind=\"vuetifyBindings as any\"\n @change=\"change\"\n @blur=\"touched = true\"\n >\n <template #label=\"labelData\"><df-label :allow-wrap=\"true\" :data=\"labelData as any\" :label=\"label\" /></template>\n <template #message=\"{ message }\"><df-input-hint :message=\"message\" :errors=\"showErrors\" /></template>\n </v-checkbox>\n</template>\n\n<script setup lang=\"ts\">\nimport { clone } from 'lodash-es';\nimport { computed } from 'vue';\n\nimport { DfCheckboxProps } from './dynamicforms-component-props';\nimport { BaseEmits, defaultBaseProps, DfInputHint, DfLabel, useInputBase } from './helpers';\n\nconst props = withDefaults(defineProps<DfCheckboxProps>(), { ...defaultBaseProps, allowNull: false });\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { densityClass, isRendered, label, showErrors, touched, value, visibilityClass, vuetifyBindings } = useInputBase(\n props,\n emits,\n);\n\nconst indeterminate = computed(() => props.allowNull && value.value == null);\n\nconst boolValue = computed({\n get(): any {\n return value.value;\n },\n set() {},\n});\n\nfunction change() {\n const oldVal = clone(value.value);\n if (oldVal === true) {\n value.value = props.allowNull ? null : false;\n } else {\n value.value = oldVal === false;\n }\n}\n</script>\n","<template>\n <v-text-field\n v-if=\"isRendered\"\n v-model=\"value\"\n :class=\"[densityClass, visibilityClass]\"\n :clearable=\"allowNull\"\n type=\"text\"\n :rules=\"rules\"\n v-bind=\"vuetifyBindings\"\n @blur=\"touched = true\"\n >\n <template #label=\"labelData\"><df-label :data=\"labelData\" :label=\"label\" /></template>\n <template #message=\"{ message }\"><df-input-hint :message=\"message\" :errors=\"showErrors\" /></template>\n <template #prepend-inner>\n <div\n style=\"width: 24px; height: 24px; border-radius: 4px; border: 1px solid #ccc\"\n :style=\"{ backgroundColor: value }\"\n />\n </template>\n <template #default>\n <v-menu v-model=\"dropdownShown\" :close-on-content-click=\"false\" activator=\"parent\">\n <v-color-picker v-model=\"value\" mode=\"hexa\" />\n </v-menu>\n </template>\n </v-text-field>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\n\nimport { DfColorProps } from './dynamicforms-component-props';\nimport { BaseEmits, defaultBaseProps, DfInputHint, DfLabel, useInputBase } from './helpers';\n\nconst props = withDefaults(defineProps<DfColorProps>(), { ...defaultBaseProps, allowNull: false });\n\ninterface Emits extends BaseEmits {}\n\nconst emits = defineEmits<Emits>();\n\nconst { densityClass, isRendered, label, showErrors, touched, value, visibilityClass, vuetifyBindings } = useInputBase(\n props,\n emits,\n);\nconst dropdownShown = ref(false);\n\nconst rules = computed<((val: string) => boolean | string)[]>(() => [\n (val: string) => {\n if (props.control) return true; // if there's a form field, we expect there to be a validator\n if (!val && props.allowNull) return true; // allowed empty values are also not a problem\n\n const regex = /^#?([a-fA-F0-9]{3}|[a-fA-F0-9]{4}|[a-fA-F0-9]{6}|[a-fA-F0-9]{8})$/;\n return regex.test(val) ? true : 'Not a valid hex string.';\n },\n]);\n</script>\n","<template>\n <input-base\n v-bind=\"props\"\n :class=\"densityClass\"\n :clearable=\"clearable\"\n @click:clear=\"value = null\"\n @blur=\"touched = true\"\n >\n <template #default=\"slotProps\">\n <div\n :class=\"[\n 'd-flex',\n 'w-100',\n ['plain', 'underlined'].includes(vuetifyBindings.variant) ? undefined : 'ml-4',\n 'df-input-wrapper',\n density,\n ]\"\n >\n <v-text-field\n v-if=\"['date', 'datetime'].includes(inputType)\"\n v-model=\"dateFormatted\"\n style=\"flex-grow: 4\"\n density=\"compact\"\n variant=\"plain\"\n :clearable=\"false\"\n :hide-details=\"true\"\n :readonly=\"vuetifyBindings.readonly\"\n :disabled=\"vuetifyBindings.disabled\"\n :name=\"`${vuetifyBindings.name}-date`\"\n :placeholder=\"vuetifyBindings.placeholder\"\n v-bind=\"passthroughAttrs\"\n @click=\"dropdown = 'date'\"\n @keydown.space=\"dropdown = 'date'\"\n @focus=\"slotProps.focus()\"\n @blur=\"slotProps.blur()\"\n >\n <template #default>\n <v-menu v-model=\"dateMenuShown\" :close-on-content-click=\"false\" activator=\"parent\">\n <v-confirm-edit v-model=\"valueAsDate\" @cancel=\"dropdown = ''\" @save=\"dropdown = ''\">\n <template #default=\"{ model: proxyModel, actions }\">\n <v-date-picker\n v-model=\"proxyModel.value\"\n :hide-header=\"true\"\n :first-day-of-week=\"firstDayOfWeek\"\n :show-adjacent-months=\"true\"\n :show-week=\"true\"\n >\n <template #actions><component :is=\"actions\" /></template>\n </v-date-picker>\n </template>\n </v-confirm-edit>\n </v-menu>\n </template>\n </v-text-field>\n\n <v-text-field\n v-if=\"['time', 'datetime'].includes(inputType)\"\n v-model=\"timeFormatted\"\n style=\"flex-grow: 3\"\n density=\"compact\"\n variant=\"plain\"\n :clearable=\"false\"\n :hide-details=\"true\"\n :readonly=\"vuetifyBindings.readonly\"\n :disabled=\"vuetifyBindings.disabled\"\n :name=\"`${vuetifyBindings.name}-time`\"\n :placeholder=\"inputType === 'time' ? vuetifyBindings.placeholder : undefined\"\n v-bind=\"passthroughAttrs\"\n @click=\"dropdown = 'time'\"\n @keydown.space=\"dropdown = 'time'\"\n @focus=\"slotProps.focus()\"\n @blur=\"slotProps.blur()\"\n >\n <template #default>\n <v-menu v-model=\"timeMenuShown\" :close-on-content-click=\"false\" activator=\"parent\">\n <v-confirm-edit v-model=\"valueAsTimeString\" @cancel=\"dropdown = ''\" @save=\"dropdown = ''\">\n <template #default=\"{ model: proxyModel, actions }\">\n <v-time-picker v-model=\"proxyModel.value\" :hide-header=\"true\" format=\"24hr\">\n <template #actions><component :is=\"actions\" /></template>\n </v-time-picker>\n </template>\n </v-confirm-edit>\n </v-menu>\n </template>\n </v-text-field>\n </div>\n </template>\n </input-base>\n</template>\n\n<script setup lang=\"ts\">\nimport { format, parse } from 'date-fns';\nimport { toNumber, isNaN } from 'lodash-es';\nimport { ref, computed, watch, toRefs, unref } from 'vue';\n\nimport { DfDateTimeProps } from './dynamicforms-component-props';\nimport { BaseEmits, DateTimeLocaleConfig, defaultBaseProps, InputBase, useInputBase } from './helpers';\n\nconst props = withDefaults(defineProps<DfDateTimeProps>(), {\n ...defaultBaseProps,\n inputType: 'datetime',\n displayFormatDate: 'P',\n displayFormatTime: 'p',\n});\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst currentLocale = computed(() => props.locale ?? unref(DateTimeLocaleConfig.dateTimeLocale));\nconst firstDayOfWeek = computed(() => currentLocale.value.options?.weekStartsOn ?? 1);\nconst { density, densityClass, touched, value, vuetifyBindings } = useInputBase<string | null>(props, emits);\nconst { inputType, displayFormatDate, displayFormatTime } = toRefs(props);\n\nconst dropdown = ref('');\nconst dateMenuShown = computed({\n get() {\n return unref(dropdown) === 'date';\n },\n set(newValue: boolean) {\n dropdown.value = newValue ? 'date' : '';\n },\n});\nconst timeMenuShown = computed({\n get() {\n return unref(dropdown) === 'time';\n },\n set(newValue: boolean) {\n dropdown.value = newValue ? 'time' : '';\n },\n});\n\nconst formatNaive = (val: Date) => `${format(val, 'yyyy-MM-dd')}T${format(val, 'HH:mm')}:00`;\n\nconst valueISOFull = ref<string | null>(null);\nfunction setValueISOFull(newISOValue: string | null, dateOrTimeIdx: number) {\n if (newISOValue == null) {\n valueISOFull.value = null;\n } else if (dateOrTimeIdx === -1) {\n // setting valueISOFull from value\n if (unref(inputType) === 'time') {\n valueISOFull.value = formatNaive(new Date());\n setValueISOFull(`T${newISOValue}`, 1);\n } else {\n const val = formatNaive(new Date(newISOValue));\n setValueISOFull(val, 0);\n setValueISOFull(val, 1);\n }\n } else {\n if (valueISOFull.value == null) valueISOFull.value = formatNaive(new Date());\n const vif = valueISOFull.value.split(/[TZ]/g);\n const nv = newISOValue!.split(/[TZ]/g);\n vif[dateOrTimeIdx] = nv[dateOrTimeIdx];\n valueISOFull.value = formatNaive(new Date(`${vif[0]}T${vif[1].split('.')[0]}`));\n\n if (unref(inputType) === 'date') value.value = vif[0];\n else if (unref(inputType) === 'time') value.value = vif[1];\n else value.value = unref(valueISOFull) + format(new Date(), 'XXX');\n }\n}\nwatch(value, (newValue: string | null) => setValueISOFull(newValue, -1), { immediate: true });\n\nconst valueAsDate = computed({\n get() {\n const uValue = unref(valueISOFull);\n if (uValue == null) return null;\n const res = new Date(uValue);\n return !Number.isNaN(res.getTime()) ? res : null;\n },\n set(newValue: Date) {\n setValueISOFull(formatNaive(newValue), 0);\n },\n});\n\nconst valueAsTimeString = computed({\n get() {\n const val = unref(valueISOFull);\n if (val == null) return '';\n const vif = val.split(/[TZ]/g);\n return vif[1].split('.')[0];\n },\n set(newValue: string) {\n setValueISOFull(`T${newValue}`, 1);\n },\n});\n\nconst dateFormatted = computed({\n get() {\n const vad = unref(valueAsDate);\n if (vad == null) return '';\n return format(vad, unref(displayFormatDate), { locale: currentLocale.value });\n },\n set(newValue: string) {\n try {\n const d = parse(newValue, unref(displayFormatDate), new Date(), { locale: currentLocale.value });\n setValueISOFull(formatNaive(d), 0);\n } catch (err) {\n console.error(err);\n }\n },\n});\n\nconst timeFormatted = computed({\n get() {\n const vad = unref(valueAsDate);\n if (vad == null) return '';\n return format(vad, unref(displayFormatTime), { locale: currentLocale.value });\n },\n set(newValue: string) {\n const d = newValue.match(/(\\d+):(\\d+)\\s?([a-zA-Z]+)?/);\n if (d == null) return;\n let hour = toNumber(d[1]);\n const minute = toNumber(d[2]);\n if (isNaN(hour) || isNaN(minute)) return;\n if (d[3] && d[3].toLowerCase() === 'pm' && hour < 13) hour += 12;\n setValueISOFull(`T${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}:00`, 1);\n },\n});\n</script>\n","<template>\n <input-base\n v-bind=\"{ ...props, loading } as any\"\n :class=\"densityClass\"\n clearable\n @click:clear=\"removeFile\"\n @blur=\"touched = true\"\n >\n <template #prepend-inner><cached-icon name=\"mdi-paperclip\" /></template>\n <template #loader>\n <v-progress-linear\n v-if=\"currentFile && progress < 100\"\n :model-value=\"progress\"\n :indeterminate=\"progress === -1\"\n />\n </template>\n <template #default=\"slotProps\">\n <div class=\"d-flex w-100 position-relative df-input-wrapper\" :class=\"density\">\n <v-file-input\n v-model=\"selectedFile\"\n :label=\"fileLabel\"\n density=\"compact\"\n variant=\"plain\"\n :readonly=\"vuetifyBindings.readonly\"\n :disabled=\"vuetifyBindings.disabled\"\n :name=\"vuetifyBindings.name\"\n :hide-details=\"true\"\n :show-size=\"true\"\n :multiple=\"false\"\n :style=\"currentFile && progress < 100 ? 'visibility: hidden' : ''\"\n :clearable=\"false\"\n v-bind=\"passthroughAttrs\"\n prepend-icon=\"\"\n @update:model-value=\"handleFileChange\"\n @focus=\"slotProps.focus()\"\n @blur=\"slotProps.blur()\"\n />\n </div>\n </template>\n </input-base>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue';\nimport { CachedIcon } from 'vue-cached-icon';\n\nimport { DfFileProps } from './dynamicforms-component-props';\nimport {\n BaseEmits,\n defaultBaseProps,\n InputBase,\n setFileGoneError,\n useFileTouchKeepAlive,\n useInputBase,\n} from './helpers';\n\nconst props = withDefaults(defineProps<DfFileProps>(), defaultBaseProps);\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { density, densityClass, touched, value, vuetifyBindings } = useInputBase(props, emits);\n\n// State\nconst currentFile = ref<File | null>(null);\nconst progress = ref(0);\nconst fileInputKey = ref(Math.round(Math.random() * 1000));\nconst selectedFile = ref<File | null>();\nconst loading = computed(() => currentFile.value && progress.value < 100);\n\nconst fileLabel = computed(() => {\n if (!selectedFile.value && value.value) {\n return props.modelValue;\n }\n return '';\n});\n\nfunction resetFileState() {\n value.value = null;\n progress.value = 0;\n fileInputKey.value = Math.round(Math.random() * 1000);\n currentFile.value = null;\n selectedFile.value = null;\n clearTouchInterval();\n}\n\nfunction handleFileGone(errorText: string) {\n resetFileState();\n setFileGoneError(props.control, errorText);\n}\n\nconst { setupTouchInterval, clearTouchInterval } = useFileTouchKeepAlive(\n value,\n () => props.comms,\n () => props.touchInterval,\n handleFileGone,\n);\n\nasync function removeFile() {\n if (value.value) {\n await props.comms.delete(value.value);\n }\n\n resetFileState();\n}\n\nasync function upload(file: File) {\n progress.value = -1;\n currentFile.value = file;\n\n try {\n value.value = await props.comms.upload(file, (loaded: number, total: number) => {\n progress.value = Math.round((loaded * 100) / total);\n });\n progress.value = 100;\n setupTouchInterval();\n } catch (err) {\n progress.value = 0;\n currentFile.value = null;\n fileInputKey.value = Math.round(Math.random() * 1000);\n selectedFile.value = null;\n throw err;\n }\n}\n\nfunction handleFileChange(file: File | File[]): any {\n if (file) {\n if (Array.isArray(file)) {\n console.error('Uploading multiple files not supported right now');\n } else {\n upload(file);\n }\n }\n}\n</script>\n","<template>\n <input-base\n v-bind=\"{ ...props, loading } as any\"\n class=\"df-image-field\"\n :class=\"densityClass\"\n clearable\n @click:clear=\"removeFile\"\n @blur=\"touched = true\"\n >\n <template #prepend-inner><cached-icon name=\"mdi-image\" /></template>\n <template #loader>\n <v-progress-linear\n v-if=\"currentFile && progress < 100\"\n :model-value=\"progress\"\n :indeterminate=\"progress === -1\"\n />\n </template>\n <template #default=\"slotProps\">\n <!-- click.stop: v-field's own click handler calls preventDefault whenever the click target isn't already\n the focused element, which would silently cancel a <label>'s file-picker default action before it\n can reach the input it targets. -->\n <div\n class=\"d-flex w-100 position-relative df-input-wrapper df-image-wrapper\"\n :class=\"[density, { 'df-image-dragging': isDragging, 'df-image-disabled': isDisabled }]\"\n @dragenter.prevent=\"onDragEnter\"\n @dragover.prevent=\"onDragEnter\"\n @dragleave.prevent=\"onDragLeave\"\n @drop.prevent=\"onDrop\"\n @click.stop\n >\n <input\n :id=\"fileInputId\"\n ref=\"fileInputRef\"\n type=\"file\"\n accept=\"image/*\"\n class=\"df-image-native-input\"\n :disabled=\"isDisabled\"\n :name=\"vuetifyBindings.name\"\n @change=\"onNativeChange\"\n @focus=\"slotProps.focus()\"\n @blur=\"slotProps.blur()\"\n />\n <label v-if=\"previewUrl\" :for=\"fileInputId\" class=\"df-image-preview-label\">\n <v-img\n :src=\"previewUrl\"\n class=\"df-image-preview\"\n :style=\"currentFile && progress < 100 ? 'visibility: hidden' : ''\"\n />\n </label>\n <label v-else :for=\"fileInputId\" class=\"df-image-placeholder\">\n <cached-icon name=\"mdi-tray-arrow-up\" />\n <span>{{ t.ImageDropHint }}</span>\n </label>\n <label v-if=\"previewUrl && !isDisabled\" :for=\"fileInputId\" class=\"df-image-replace-btn\" :title=\"t.ImageReplace\">\n <cached-icon name=\"mdi-pencil\" />\n </label>\n </div>\n </template>\n </input-base>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, useId } from 'vue';\nimport { CachedIcon } from 'vue-cached-icon';\n\nimport { DfImageProps } from './dynamicforms-component-props';\nimport {\n BaseEmits,\n defaultBaseProps,\n InputBase,\n setFileGoneError,\n translatableStrings,\n useFileTouchKeepAlive,\n useInputBase,\n} from './helpers';\n\nconst props = withDefaults(defineProps<DfImageProps>(), defaultBaseProps);\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { density, densityClass, touched, value, vuetifyBindings } = useInputBase(props, emits);\nconst t = translatableStrings;\nconst fileInputId = useId();\n\n// State\nconst currentFile = ref<File | null>(null);\nconst progress = ref(0);\nconst objectUrl = ref<string | null>(null);\nconst dragCounter = ref(0);\nconst fileInputRef = ref<HTMLInputElement | null>(null);\n\nconst loading = computed(() => currentFile.value && progress.value < 100);\nconst isDisabled = computed(() => !!(vuetifyBindings.value.disabled || vuetifyBindings.value.readonly));\nconst isDragging = computed(() => dragCounter.value > 0);\nconst previewUrl = computed<string | null>(() => objectUrl.value ?? (value.value ? (value.value as string) : null));\n\nfunction revokeObjectUrl() {\n if (objectUrl.value) {\n URL.revokeObjectURL(objectUrl.value);\n objectUrl.value = null;\n }\n}\n\nfunction resetFileState() {\n value.value = null;\n progress.value = 0;\n currentFile.value = null;\n revokeObjectUrl();\n clearTouchInterval();\n}\n\nfunction handleFileGone(errorText: string) {\n resetFileState();\n setFileGoneError(props.control, errorText);\n}\n\nconst { setupTouchInterval, clearTouchInterval } = useFileTouchKeepAlive(\n value,\n () => props.comms,\n () => props.touchInterval,\n handleFileGone,\n);\n\nonBeforeUnmount(() => revokeObjectUrl());\n\nasync function removeFile() {\n if (value.value) {\n await props.comms.delete(value.value);\n }\n\n resetFileState();\n}\n\nasync function upload(file: File) {\n progress.value = -1;\n currentFile.value = file;\n revokeObjectUrl();\n objectUrl.value = URL.createObjectURL(file);\n\n try {\n value.value = await props.comms.upload(file, (loaded: number, total: number) => {\n progress.value = Math.round((loaded * 100) / total);\n });\n progress.value = 100;\n setupTouchInterval();\n } catch (err) {\n progress.value = 0;\n currentFile.value = null;\n revokeObjectUrl();\n throw err;\n }\n}\n\nfunction handleFile(file: File) {\n if (!file.type.startsWith('image/')) {\n console.error('Only image files are supported');\n return;\n }\n upload(file);\n}\n\nfunction onNativeChange(event: Event) {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0];\n input.value = '';\n if (file) handleFile(file);\n}\n\nfunction onDragEnter() {\n if (isDisabled.value) return;\n dragCounter.value += 1;\n}\nfunction onDragLeave() {\n dragCounter.value = Math.max(0, dragCounter.value - 1);\n}\nfunction onDrop(event: DragEvent) {\n dragCounter.value = 0;\n if (isDisabled.value) return;\n const file = event.dataTransfer?.files?.[0];\n if (file) handleFile(file);\n}\n</script>\n\n<style>\n/* .df-sub-field caps itself at the height of a single-line input; without lifting that cap here, the taller\n image area would keep the field's own layout box small and just paint over whatever follows it on the page. */\n.df-image-field .df-sub-field {\n max-height: revert;\n}\n\n.df-image-wrapper {\n height: 160px;\n border: 1px dashed rgba(128, 128, 128, 0.5);\n border-radius: 4px;\n overflow: hidden;\n}\n.df-image-wrapper.df-image-dragging {\n border-color: rgb(var(--v-theme-primary));\n background-color: rgba(var(--v-theme-primary), 0.08);\n}\n.df-image-wrapper.df-image-disabled .df-image-placeholder,\n.df-image-wrapper.df-image-disabled .df-image-preview-label {\n cursor: not-allowed;\n}\n\n/* Visually hidden but focusable (keyboard-reachable) and clickable via its <label>s. */\n.df-image-native-input {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n opacity: 0;\n}\n.df-image-native-input:focus-visible ~ label {\n outline: 2px solid rgb(var(--v-theme-primary));\n outline-offset: -2px;\n}\n\n.df-image-preview-label,\n.df-image-preview {\n display: block;\n width: 100%;\n height: 100%;\n}\n/* a host page's own typography reset (e.g. margin on bare <img> tags) would otherwise offset v-img's <img> from\n the box it's meant to fill exactly, clipping it against .df-image-wrapper's overflow:hidden */\n.df-image-preview img {\n margin: 0;\n}\n.df-image-preview-label {\n cursor: pointer;\n}\n\n.df-image-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 4px;\n width: 100%;\n height: 100%;\n cursor: pointer;\n color: inherit;\n opacity: 0.7;\n}\n\n.df-image-replace-btn {\n position: absolute;\n top: 4px;\n right: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n cursor: pointer;\n background-color: rgba(var(--v-theme-surface), 0.9);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);\n}\n</style>\n","<template>\n <div v-if=\"isRendered\" class=\"df-input-container\" :class=\"[densityClass, visibilityClass]\">\n <v-text-field\n v-if=\"!isNumber\"\n v-model=\"value\"\n :type=\"inputType\"\n v-bind=\"vuetifyBindings as any\"\n @blur=\"touched = true\"\n >\n <template #label=\"labelData\"><df-label :data=\"labelData\" :label=\"label\" /></template>\n <template #message=\"{ message }\"><df-input-hint :message=\"message\" :errors=\"showErrors\" /></template>\n </v-text-field>\n <v-number-input\n v-else\n v-model=\"value\"\n density=\"compact\"\n control-variant=\"stacked\"\n v-bind=\"{ ...vuetifyBindings, ...numberInputBindings } as any\"\n >\n <template #label=\"labelData\"><df-label :data=\"labelData\" :label=\"label\" /></template>\n <template #message=\"{ message }\"><df-input-hint :message=\"message\" :errors=\"showErrors\" /></template>\n </v-number-input>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, toRefs, unref } from 'vue';\n\nimport { DfInputProps } from './dynamicforms-component-props';\nimport { BaseEmits, defaultBaseProps, DfInputHint, DfLabel, useInputBase } from './helpers';\n\nconst props = withDefaults(defineProps<DfInputProps>(), {\n ...defaultBaseProps,\n inputType: 'text',\n precision: null,\n step: undefined,\n min: undefined,\n max: undefined,\n});\n\ninterface Emits extends BaseEmits {}\n\nconst emits = defineEmits<Emits>();\n\nconst { densityClass, isRendered, label, showErrors, touched, value, visibilityClass, vuetifyBindings } = useInputBase(\n props,\n emits,\n);\nconst { inputType, max, min, precision, step } = toRefs(props);\n\nconst isNumber = computed(() => inputType.value === 'number');\nconst numberInputBindings = computed(() =>\n !isNumber.value ? {} : { min: unref(min), max: unref(max), precision: unref(precision), step: unref(step) },\n);\n</script>\n","import { Editor, Extension, Mark, mergeAttributes } from '@tiptap/core';\n\n/**\n * Adds a `class` attribute to paragraph, heading, blockquote and code-block nodes, so the \"Style\" dropdown's\n * named looks (`h3.category`, `p.info-box`, `pre.fancy-code-dark`...) persist through `getHTML()`/`setContent()`\n * the same way any other node attribute does.\n */\nexport const ClassAttribute = Extension.create({\n name: 'classAttribute',\n addGlobalAttributes() {\n return [\n {\n types: ['paragraph', 'heading', 'blockquote', 'codeBlock'],\n attributes: {\n class: {\n default: null,\n parseHTML: (element: HTMLElement) => element.getAttribute('class'),\n renderHTML: (attributes: Record<string, any>) => (attributes.class ? { class: attributes.class } : {}),\n },\n },\n },\n ];\n },\n});\n\nfunction styledSpanMark(name: string, className: string) {\n return Mark.create({\n name,\n parseHTML() {\n return [{ tag: `span.${className}` }];\n },\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(HTMLAttributes, { class: className }), 0];\n },\n });\n}\n\n/** Toggle mark wrapping the selection in `<span class=\"marker\">`, behaving like bold/italic over a selection. */\nexport const Marker = styledSpanMark('marker', 'marker');\n/** Toggle mark wrapping the selection in `<span class=\"spoiler\">`, behaving like bold/italic over a selection. */\nexport const Spoiler = styledSpanMark('spoiler', 'spoiler');\n\ninterface BlockStyleDef {\n key: 'ArticleCategory' | 'Title' | 'Subtitle' | 'InfoBox' | 'SideQuote' | 'CodeDark' | 'CodeBright';\n kind: 'heading' | 'paragraph' | 'blockquote' | 'codeBlock';\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n className: string;\n}\n\ninterface MarkStyleDef {\n key: 'Marker' | 'Spoiler';\n kind: 'mark';\n markName: 'marker' | 'spoiler';\n}\n\nexport type StyleDef = BlockStyleDef | MarkStyleDef;\n\n/** The \"Style\" dropdown's entries, in the order they are listed - element/class pairs the toolbar applies. */\nexport const STYLE_DEFS: StyleDef[] = [\n { key: 'ArticleCategory', kind: 'heading', level: 3, className: 'category' },\n { key: 'Title', kind: 'heading', level: 2, className: 'document-title' },\n { key: 'Subtitle', kind: 'heading', level: 3, className: 'document-subtitle' },\n { key: 'InfoBox', kind: 'paragraph', className: 'info-box' },\n { key: 'SideQuote', kind: 'blockquote', className: 'side-quote' },\n { key: 'Marker', kind: 'mark', markName: 'marker' },\n { key: 'Spoiler', kind: 'mark', markName: 'spoiler' },\n { key: 'CodeDark', kind: 'codeBlock', className: 'fancy-code fancy-code-dark' },\n { key: 'CodeBright', kind: 'codeBlock', className: 'fancy-code fancy-code-bright' },\n];\n\n// `editor.isActive(type, attrs)` requires every node touched by the current selection to match, so a\n// selection that spans a styled block plus the empty trailing paragraph TipTap keeps after it (or, after\n// `selectAll` on a single-block document, the whole document) reports no match even though the block the\n// selection starts in carries the style. Reading off the selection's anchor node instead answers the question\n// the dropdown actually asks: \"does the block/mark the selection starts in carry this style\".\n//\n// `$from` for a whole-document `AllSelection` resolves at depth 0 (the boundary before the first child, not\n// inside it), so a depth-0 anchor is re-resolved one position in - a position guaranteed to sit inside the\n// document's first block.\nfunction anchorPos(editor: Editor) {\n const { state } = editor;\n const { $from } = state.selection;\n if ($from.depth > 0 || state.doc.content.size === 0) return $from;\n return state.doc.resolve(Math.min(1, state.doc.content.size));\n}\n\nfunction anchorNode(editor: Editor) {\n return anchorPos(editor).parent;\n}\n\nfunction anchorAncestor(editor: Editor, typeName: string) {\n const $pos = anchorPos(editor);\n for (let depth = $pos.depth; depth >= 0; depth -= 1) {\n if ($pos.node(depth).type.name === typeName) return $pos.node(depth);\n }\n return null;\n}\n\nexport function isStyleActive(editor: Editor, def: StyleDef): boolean {\n switch (def.kind) {\n case 'heading': {\n const node = anchorNode(editor);\n return node.type.name === 'heading' && node.attrs.level === def.level && node.attrs.class === def.className;\n }\n case 'paragraph': {\n const node = anchorNode(editor);\n return node.type.name === 'paragraph' && node.attrs.class === def.className;\n }\n case 'codeBlock': {\n const node = anchorNode(editor);\n return node.type.name === 'codeBlock' && node.attrs.class === def.className;\n }\n case 'blockquote': {\n const node = anchorAncestor(editor, 'blockquote');\n return !!node && node.attrs.class === def.className;\n }\n case 'mark':\n return editor.isActive(def.markName);\n default:\n return false;\n }\n}\n\n/**\n * Applies (or, over an already-styled block/selection, removes) one \"Style\" dropdown entry. Block styles both\n * set the node type and its class in one step; the two inline marks toggle over the current selection like bold\n * or italic.\n */\nexport function applyStyle(editor: Editor, def: StyleDef): void {\n const chain = editor.chain().focus();\n\n // `lift` (which `unsetBlockquote` calls) only acts when every node the selection touches matches the target\n // type - a whole-document `AllSelection` (as `selectAll` produces) also touches the trailing empty paragraph\n // TipTap keeps after the last block, so it never matches and the command silently no-ops. Collapsing such a\n // selection down to the anchor block first keeps every block command below scoped to the block the dropdown\n // means. The two marks are left alone - they need the real selection range to wrap the marked text in.\n const { $from } = editor.state.selection;\n if (def.kind !== 'mark' && $from.depth === 0 && editor.state.doc.content.size > 0) {\n chain.setTextSelection(anchorPos(editor).pos);\n }\n\n switch (def.kind) {\n case 'heading':\n if (isStyleActive(editor, def)) chain.setParagraph().updateAttributes('paragraph', { class: null }).run();\n else {\n chain.setNode('heading', { level: def.level }).updateAttributes('heading', { class: def.className }).run();\n }\n break;\n case 'paragraph':\n if (isStyleActive(editor, def)) chain.setParagraph().updateAttributes('paragraph', { class: null }).run();\n else chain.setParagraph().updateAttributes('paragraph', { class: def.className }).run();\n break;\n case 'blockquote':\n if (isStyleActive(editor, def)) chain.unsetBlockquote().run();\n else if (anchorAncestor(editor, 'blockquote')) {\n chain.updateAttributes('blockquote', { class: def.className }).run();\n } else chain.setBlockquote().updateAttributes('blockquote', { class: def.className }).run();\n break;\n case 'codeBlock':\n if (isStyleActive(editor, def)) chain.toggleCodeBlock().updateAttributes('paragraph', { class: null }).run();\n else if (anchorNode(editor).type.name === 'codeBlock') {\n chain.updateAttributes('codeBlock', { class: def.className }).run();\n } else chain.setCodeBlock().updateAttributes('codeBlock', { class: def.className }).run();\n break;\n case 'mark':\n chain.toggleMark(def.markName).run();\n break;\n default:\n break;\n }\n}\n","import { Fragment, Node as PMNode, Slice } from '@tiptap/pm/model';\nimport { EditorView } from '@tiptap/pm/view';\nimport { Editor } from '@tiptap/vue-3';\n\n/** Reads a `File` into a base64 `data:` URI - the same embedding an uploaded or dropped image goes through. */\nexport function fileToDataUrl(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * The image files carried alongside (or instead of) HTML on a clipboard paste. Copying a picture out of another\n * app, or a Word/Docs selection that contains embedded pictures, delivers the pixel data this way rather than as\n * an inline `data:` URI in the HTML - `items` covers Chromium and Firefox, `files` is the fallback where a\n * browser only populates that.\n */\nexport function extractImageFiles(dataTransfer: DataTransfer | null): File[] {\n if (!dataTransfer) return [];\n const files: File[] = [];\n Array.from(dataTransfer.items || []).forEach((item) => {\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (file && file.type.startsWith('image/')) files.push(file);\n }\n });\n if (files.length === 0) {\n Array.from(dataTransfer.files || []).forEach((file) => {\n if (file.type.startsWith('image/')) files.push(file);\n });\n }\n return files;\n}\n\nfunction countImageNodes(fragment: Fragment): number {\n let count = 0;\n fragment.forEach((node) => {\n if (node.type.name === 'image') count += 1;\n else if (node.content.size) count += countImageNodes(node.content);\n });\n return count;\n}\n\nfunction replaceImageSources(fragment: Fragment, urls: string[], cursor: { index: number }): Fragment {\n const children: PMNode[] = [];\n fragment.forEach((node) => {\n if (node.type.name === 'image' && cursor.index < urls.length) {\n children.push(node.type.create({ ...node.attrs, src: urls[cursor.index] }, node.content, node.marks));\n cursor.index += 1;\n } else if (node.content.size) {\n children.push(node.copy(replaceImageSources(node.content, urls, cursor)));\n } else {\n children.push(node);\n }\n });\n return Fragment.fromArray(children);\n}\n\n/**\n * A `handlePaste` for `editorProps`: when the clipboard carries image files, embeds each as a base64 `data:` URI\n * and either drops it into the `<img>` placeholders the pasted HTML already parsed into (order-matched - the\n * shape a Word/Docs selection with embedded pictures takes once `transformPastedHTML` and the schema have parsed\n * it into `slice`), or, where the paste held no HTML worth keeping, inserts the images as new nodes at the\n * selection. Non-image pastes are left to the editor's default handling by returning `false`.\n */\nexport function createImagePasteHandler(getEditor: () => Editor | undefined) {\n return (view: EditorView, event: ClipboardEvent, slice: Slice): boolean => {\n const files = extractImageFiles(event.clipboardData);\n if (files.length === 0) return false;\n\n event.preventDefault();\n\n Promise.all(files.map(fileToDataUrl)).then((urls) => {\n if (countImageNodes(slice.content) > 0) {\n const content = replaceImageSources(slice.content, urls, { index: 0 });\n const newSlice = new Slice(content, slice.openStart, slice.openEnd);\n view.dispatch(view.state.tr.replaceSelection(newSlice).scrollIntoView());\n return;\n }\n\n getEditor()\n ?.chain()\n .focus()\n .insertContent(urls.map((src) => ({ type: 'image', attrs: { src } })))\n .run();\n });\n\n return true;\n };\n}\n","import Link from '@tiptap/extension-link';\n\n/**\n * `Link`, with a `download` attribute the toolbar's \"Downloadable\" toggle can set - rendered as `download=\"file\"`\n * on the anchor.\n */\nexport const LinkWithDownload = Link.extend({\n name: 'link',\n addAttributes() {\n return {\n ...this.parent?.(),\n download: {\n default: null,\n parseHTML: (element: HTMLElement) => element.getAttribute('download'),\n renderHTML: (attributes: Record<string, any>) => (attributes.download ? { download: attributes.download } : {}),\n },\n };\n },\n});\n","import { mergeAttributes, Node } from '@tiptap/core';\n\n/**\n * Recognises a YouTube or Vimeo watch/share URL and returns the equivalent embeddable player URL, or `null` for\n * anything else - the toolbar falls back to inserting the URL as a plain link when this returns `null`.\n */\nexport function toEmbedSrc(url: string): string | null {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n return null;\n }\n\n const host = parsed.hostname.replace(/^www\\.|^m\\./, '');\n\n if (host === 'youtube.com') {\n const id = parsed.searchParams.get('v');\n if (id) return `https://www.youtube.com/embed/${id}`;\n const embedMatch = parsed.pathname.match(/^\\/embed\\/([\\w-]+)/);\n if (embedMatch) return `https://www.youtube.com/embed/${embedMatch[1]}`;\n const shortsMatch = parsed.pathname.match(/^\\/shorts\\/([\\w-]+)/);\n if (shortsMatch) return `https://www.youtube.com/embed/${shortsMatch[1]}`;\n return null;\n }\n\n if (host === 'youtu.be') {\n const id = parsed.pathname.slice(1);\n return id ? `https://www.youtube.com/embed/${id}` : null;\n }\n\n if (host === 'vimeo.com') {\n const id = parsed.pathname.split('/').filter(Boolean).pop();\n return id && /^\\d+$/.test(id) ? `https://player.vimeo.com/video/${id}` : null;\n }\n\n return null;\n}\n\n/**\n * A responsive `<iframe>` block for a recognised video URL (YouTube, Vimeo) - saved in `getHTML()` output as a\n * plain `iframe.media-embed`, with the responsive 16:9 sizing coming from the editor's own CSS rather than\n * inline styles, so the saved HTML stays provider-agnostic.\n */\nexport const MediaEmbed = Node.create({\n name: 'mediaEmbed',\n group: 'block',\n atom: true,\n draggable: true,\n addAttributes() {\n return {\n src: { default: null },\n };\n },\n parseHTML() {\n return [{ tag: 'iframe.media-embed' }];\n },\n renderHTML({ HTMLAttributes }) {\n return [\n 'iframe',\n mergeAttributes(\n {\n class: 'media-embed',\n frameborder: '0',\n allow: 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture',\n allowfullscreen: 'true',\n },\n HTMLAttributes,\n ),\n ];\n },\n});\n","import { Editor } from '@tiptap/vue-3';\nimport { onBeforeUnmount, Ref, ref, watch } from 'vue';\n\n/**\n * A counter bumped on every editor transaction. The `Editor` instance is not a reactive object, so nothing else\n * tells Vue that `editor.isActive(...)`/`editor.can()...` now answer differently - a computed that reads this\n * counter before calling them re-evaluates exactly when the editor's state actually changed.\n */\nexport function useEditorTick(editorRef: Ref<Editor | undefined>) {\n const tick = ref(0);\n let bound: Editor | undefined;\n\n const onTransaction = () => {\n tick.value += 1;\n };\n const bind = (next: Editor | undefined) => {\n bound?.off('transaction', onTransaction);\n bound = next;\n bound?.on('transaction', onTransaction);\n };\n\n watch(editorRef, bind, { immediate: true });\n onBeforeUnmount(() => bind(undefined));\n\n return tick;\n}\n","<template>\n <div class=\"rtf-toolbar\" :class=\"{ 'rtf-toolbar--disabled': !editable }\">\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.Undo\"\n :disabled=\"!editable || !state.canUndo\"\n @click=\"editor?.chain().focus().undo().run()\"\n >\n <cached-icon name=\"mdi-undo\" />\n </v-btn>\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.Redo\"\n :disabled=\"!editable || !state.canRedo\"\n @click=\"editor?.chain().focus().redo().run()\"\n >\n <cached-icon name=\"mdi-redo\" />\n </v-btn>\n\n <v-divider vertical inset class=\"mx-1\" />\n\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.SelectAll\"\n :disabled=\"!editable\"\n @click=\"editor?.chain().focus().selectAll().run()\"\n >\n <cached-icon name=\"mdi-select-all\" />\n </v-btn>\n\n <v-divider vertical inset class=\"mx-1\" />\n\n <v-menu>\n <template #activator=\"{ props: menuProps }\">\n <v-btn size=\"small\" variant=\"text\" :disabled=\"!editable\" v-bind=\"menuProps\" append-icon=\"mdi-chevron-down\">\n {{ headingLabel }}\n </v-btn>\n </template>\n <v-list density=\"compact\">\n <v-list-item\n v-for=\"option in headingOptions\"\n :key=\"option.level\"\n :active=\"isHeadingActive(option.level)\"\n @click=\"setHeading(option.level)\"\n >\n <v-list-item-title>{{ option.label }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <v-menu>\n <template #activator=\"{ props: menuProps }\">\n <v-btn size=\"small\" variant=\"text\" :disabled=\"!editable\" v-bind=\"menuProps\" append-icon=\"mdi-chevron-down\">\n {{ t.Style }}\n </v-btn>\n </template>\n <v-list density=\"compact\">\n <v-list-item\n v-for=\"def in styleDefs\"\n :key=\"def.key\"\n :active=\"styleActive(def)\"\n @click=\"editor && applyStyle(editor, def)\"\n >\n <v-list-item-title>{{ t[def.key] }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <v-divider vertical inset class=\"mx-1\" />\n\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.Bold\"\n :disabled=\"!editable\"\n :active=\"state.bold\"\n @click=\"editor?.chain().focus().toggleBold().run()\"\n >\n <cached-icon name=\"mdi-format-bold\" />\n </v-btn>\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.Italic\"\n :disabled=\"!editable\"\n :active=\"state.italic\"\n @click=\"editor?.chain().focus().toggleItalic().run()\"\n >\n <cached-icon name=\"mdi-format-italic\" />\n </v-btn>\n\n <v-divider vertical inset class=\"mx-1\" />\n\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.HorizontalLine\"\n :disabled=\"!editable\"\n @click=\"editor?.chain().focus().setHorizontalRule().run()\"\n >\n <cached-icon name=\"mdi-minus\" />\n </v-btn>\n\n <v-menu :close-on-content-click=\"false\" @update:model-value=\"(shown: boolean) => shown && openLinkMenu()\">\n <template #activator=\"{ props: menuProps }\">\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.Link\"\n :disabled=\"!editable\"\n :active=\"state.link\"\n v-bind=\"menuProps\"\n >\n <cached-icon name=\"mdi-link-variant\" />\n </v-btn>\n </template>\n <v-card min-width=\"280\" class=\"pa-3\">\n <v-text-field\n v-model=\"linkUrl\"\n :label=\"t.LinkUrl\"\n density=\"compact\"\n hide-details\n autofocus\n @keydown.enter=\"applyLink\"\n />\n <v-checkbox v-model=\"linkDownloadable\" :label=\"t.Downloadable\" density=\"compact\" hide-details class=\"mt-1\" />\n <div class=\"d-flex justify-end ga-2 mt-2\">\n <v-btn v-if=\"state.link\" size=\"small\" variant=\"text\" @click=\"removeLink\">{{ t.LinkRemove }}</v-btn>\n <v-btn size=\"small\" color=\"primary\" variant=\"tonal\" @click=\"applyLink\">{{ t.LinkApply }}</v-btn>\n </div>\n </v-card>\n </v-menu>\n\n <v-menu :close-on-content-click=\"false\">\n <template #activator=\"{ props: menuProps }\">\n <v-btn icon size=\"small\" variant=\"text\" :title=\"t.Image\" :disabled=\"!editable\" v-bind=\"menuProps\">\n <cached-icon name=\"mdi-image-plus\" />\n </v-btn>\n </template>\n <v-card min-width=\"280\" class=\"pa-3\">\n <v-text-field\n v-model=\"imageUrl\"\n :label=\"t.ImageUrl\"\n density=\"compact\"\n hide-details\n autofocus\n @keydown.enter=\"insertImageFromUrl\"\n />\n <div class=\"d-flex justify-space-between align-center ga-2 mt-2\">\n <v-btn size=\"small\" variant=\"text\" prepend-icon=\"mdi-upload\" @click=\"triggerImageUpload\">\n {{ t.ImageUpload }}\n </v-btn>\n <v-btn size=\"small\" color=\"primary\" variant=\"tonal\" @click=\"insertImageFromUrl\">\n {{ t.ImageInsert }}\n </v-btn>\n </div>\n </v-card>\n </v-menu>\n <input ref=\"imageInput\" type=\"file\" accept=\"image/*\" class=\"d-none\" @change=\"onImageFileChosen\" />\n\n <v-menu :close-on-content-click=\"false\">\n <template #activator=\"{ props: menuProps }\">\n <v-btn icon size=\"small\" variant=\"text\" :title=\"t.MediaEmbed\" :disabled=\"!editable\" v-bind=\"menuProps\">\n <cached-icon name=\"mdi-video-plus\" />\n </v-btn>\n </template>\n <v-card min-width=\"280\" class=\"pa-3\">\n <v-text-field\n v-model=\"embedUrl\"\n :label=\"t.MediaEmbedUrl\"\n density=\"compact\"\n hide-details\n autofocus\n @keydown.enter=\"insertMediaEmbed\"\n />\n <div class=\"d-flex justify-end mt-2\">\n <v-btn size=\"small\" color=\"primary\" variant=\"tonal\" @click=\"insertMediaEmbed\">\n {{ t.MediaEmbedInsert }}\n </v-btn>\n </div>\n </v-card>\n </v-menu>\n\n <v-menu>\n <template #activator=\"{ props: menuProps }\">\n <v-btn icon size=\"small\" variant=\"text\" :title=\"t.Table\" :disabled=\"!editable\" v-bind=\"menuProps\">\n <cached-icon name=\"mdi-table\" />\n </v-btn>\n </template>\n <v-list density=\"compact\">\n <v-list-item @click=\"editor?.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run()\">\n <template #prepend><cached-icon name=\"mdi-table-plus\" /></template>\n <v-list-item-title>{{ t.TableInsert }}</v-list-item-title>\n </v-list-item>\n <v-divider />\n <v-list-item :disabled=\"!state.inTable\" @click=\"editor?.chain().focus().addRowBefore().run()\">\n <template #prepend><cached-icon name=\"mdi-table-row-plus-before\" /></template>\n <v-list-item-title>{{ t.TableAddRowAbove }}</v-list-item-title>\n </v-list-item>\n <v-list-item :disabled=\"!state.inTable\" @click=\"editor?.chain().focus().addRowAfter().run()\">\n <template #prepend><cached-icon name=\"mdi-table-row-plus-after\" /></template>\n <v-list-item-title>{{ t.TableAddRowBelow }}</v-list-item-title>\n </v-list-item>\n <v-list-item :disabled=\"!state.inTable\" @click=\"editor?.chain().focus().deleteRow().run()\">\n <template #prepend><cached-icon name=\"mdi-table-row-remove\" /></template>\n <v-list-item-title>{{ t.TableDeleteRow }}</v-list-item-title>\n </v-list-item>\n <v-divider />\n <v-list-item :disabled=\"!state.inTable\" @click=\"editor?.chain().focus().addColumnBefore().run()\">\n <template #prepend><cached-icon name=\"mdi-table-column-plus-before\" /></template>\n <v-list-item-title>{{ t.TableAddColumnBefore }}</v-list-item-title>\n </v-list-item>\n <v-list-item :disabled=\"!state.inTable\" @click=\"editor?.chain().focus().addColumnAfter().run()\">\n <template #prepend><cached-icon name=\"mdi-table-column-plus-after\" /></template>\n <v-list-item-title>{{ t.TableAddColumnAfter }}</v-list-item-title>\n </v-list-item>\n <v-list-item :disabled=\"!state.inTable\" @click=\"editor?.chain().focus().deleteColumn().run()\">\n <template #prepend><cached-icon name=\"mdi-table-column-remove\" /></template>\n <v-list-item-title>{{ t.TableDeleteColumn }}</v-list-item-title>\n </v-list-item>\n <v-divider />\n <v-list-item :disabled=\"!state.inTable\" @click=\"editor?.chain().focus().toggleHeaderRow().run()\">\n <template #prepend><cached-icon name=\"mdi-table-row\" /></template>\n <v-list-item-title>{{ t.TableToggleHeaderRow }}</v-list-item-title>\n </v-list-item>\n <v-list-item :disabled=\"!state.inTable\" @click=\"editor?.chain().focus().deleteTable().run()\">\n <template #prepend><cached-icon name=\"mdi-table-remove\" /></template>\n <v-list-item-title>{{ t.TableDeleteTable }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.Blockquote\"\n :disabled=\"!editable\"\n :active=\"state.blockquote\"\n @click=\"editor?.chain().focus().toggleBlockquote().run()\"\n >\n <cached-icon name=\"mdi-format-quote-close\" />\n </v-btn>\n\n <v-divider vertical inset class=\"mx-1\" />\n\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.AlignLeft\"\n :disabled=\"!editable\"\n :active=\"state.alignLeft\"\n @click=\"editor?.chain().focus().setTextAlign('left').run()\"\n >\n <cached-icon name=\"mdi-format-align-left\" />\n </v-btn>\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.AlignCenter\"\n :disabled=\"!editable\"\n :active=\"state.alignCenter\"\n @click=\"editor?.chain().focus().setTextAlign('center').run()\"\n >\n <cached-icon name=\"mdi-format-align-center\" />\n </v-btn>\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.AlignRight\"\n :disabled=\"!editable\"\n :active=\"state.alignRight\"\n @click=\"editor?.chain().focus().setTextAlign('right').run()\"\n >\n <cached-icon name=\"mdi-format-align-right\" />\n </v-btn>\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.AlignJustify\"\n :disabled=\"!editable\"\n :active=\"state.alignJustify\"\n @click=\"editor?.chain().focus().setTextAlign('justify').run()\"\n >\n <cached-icon name=\"mdi-format-align-justify\" />\n </v-btn>\n\n <v-divider vertical inset class=\"mx-1\" />\n\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.BulletedList\"\n :disabled=\"!editable\"\n :active=\"state.bulletList\"\n @click=\"editor?.chain().focus().toggleBulletList().run()\"\n >\n <cached-icon name=\"mdi-format-list-bulleted\" />\n </v-btn>\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.NumberedList\"\n :disabled=\"!editable\"\n :active=\"state.orderedList\"\n @click=\"editor?.chain().focus().toggleOrderedList().run()\"\n >\n <cached-icon name=\"mdi-format-list-numbered\" />\n </v-btn>\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.Outdent\"\n :disabled=\"!editable || !state.canLift\"\n @click=\"editor?.chain().focus().liftListItem('listItem').run()\"\n >\n <cached-icon name=\"mdi-format-indent-decrease\" />\n </v-btn>\n <v-btn\n icon\n size=\"small\"\n variant=\"text\"\n :title=\"t.Indent\"\n :disabled=\"!editable || !state.canSink\"\n @click=\"editor?.chain().focus().sinkListItem('listItem').run()\"\n >\n <cached-icon name=\"mdi-format-indent-increase\" />\n </v-btn>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Editor } from '@tiptap/vue-3';\nimport { computed, ref } from 'vue';\nimport { CachedIcon } from 'vue-cached-icon';\n\nimport { translatableStrings } from '../translations';\n\nimport { applyStyle, isStyleActive, STYLE_DEFS } from './block-styles';\nimport { fileToDataUrl } from './image-paste';\nimport { toEmbedSrc } from './media-embed';\nimport { useEditorTick } from './use-editor-tick';\n\nconst props = defineProps<{ editor?: Editor }>();\n\nconst t = translatableStrings;\n\nconst editor = computed(() => props.editor);\nconst tick = useEditorTick(editor);\nconst editable = computed(() => !!props.editor?.isEditable);\n\nconst state = computed(() => {\n void tick.value;\n const e = props.editor;\n return {\n canUndo: !!e?.can().undo(),\n canRedo: !!e?.can().redo(),\n bold: !!e?.isActive('bold'),\n italic: !!e?.isActive('italic'),\n link: !!e?.isActive('link'),\n blockquote: !!e?.isActive('blockquote'),\n bulletList: !!e?.isActive('bulletList'),\n orderedList: !!e?.isActive('orderedList'),\n alignLeft: !!e?.isActive({ textAlign: 'left' }),\n alignCenter: !!e?.isActive({ textAlign: 'center' }),\n alignRight: !!e?.isActive({ textAlign: 'right' }),\n alignJustify: !!e?.isActive({ textAlign: 'justify' }),\n inTable: !!e?.isActive('table'),\n canLift: !!e?.can().liftListItem('listItem'),\n canSink: !!e?.can().sinkListItem('listItem'),\n };\n});\n\nconst headingOptions = [\n { level: 0, label: t.Paragraph },\n { level: 1, label: t.Heading1 },\n { level: 2, label: t.Heading2 },\n { level: 3, label: t.Heading3 },\n { level: 4, label: t.Heading4 },\n { level: 5, label: t.Heading5 },\n { level: 6, label: t.Heading6 },\n] as const;\n\nfunction isHeadingActive(level: number) {\n void tick.value;\n if (level === 0) return !!editor.value?.isActive('paragraph');\n return !!editor.value?.isActive('heading', { level });\n}\nconst headingLabel = computed(\n () => headingOptions.find((option) => isHeadingActive(option.level))?.label ?? t.Paragraph,\n);\n\nfunction setHeading(level: number) {\n const chain = editor.value?.chain().focus();\n if (!chain) return;\n if (level === 0) chain.setParagraph().run();\n else chain.toggleHeading({ level: level as 1 | 2 | 3 | 4 | 5 | 6 }).run();\n}\n\n// Style dropdown\nconst styleDefs = STYLE_DEFS;\nfunction styleActive(def: (typeof STYLE_DEFS)[number]) {\n void tick.value;\n return !!editor.value && isStyleActive(editor.value, def);\n}\n\n// Link menu\nconst linkUrl = ref('');\nconst linkDownloadable = ref(false);\nfunction openLinkMenu() {\n const attrs = editor.value?.getAttributes('link') ?? {};\n linkUrl.value = attrs.href ?? '';\n linkDownloadable.value = !!attrs.download;\n}\nfunction applyLink() {\n if (!linkUrl.value) return;\n editor.value\n ?.chain()\n .focus()\n .extendMarkRange('link')\n .setLink({ href: linkUrl.value })\n .updateAttributes('link', { download: linkDownloadable.value ? 'file' : null })\n .run();\n}\nfunction removeLink() {\n editor.value?.chain().focus().unsetLink().run();\n}\n\n// Image menu\nconst imageUrl = ref('');\nconst imageInput = ref<HTMLInputElement>();\nfunction insertImageFromUrl() {\n if (!imageUrl.value) return;\n editor.value?.chain().focus().setImage({ src: imageUrl.value }).run();\n imageUrl.value = '';\n}\nfunction triggerImageUpload() {\n imageInput.value?.click();\n}\nasync function onImageFileChosen(event: Event) {\n const file = (event.target as HTMLInputElement).files?.[0];\n if (!file) return;\n const src = await fileToDataUrl(file);\n editor.value?.chain().focus().setImage({ src }).run();\n (event.target as HTMLInputElement).value = '';\n}\n\n// Media embed menu\nconst embedUrl = ref('');\nfunction insertMediaEmbed() {\n if (!embedUrl.value) return;\n const src = toEmbedSrc(embedUrl.value);\n const chain = editor.value?.chain().focus();\n if (!chain) return;\n if (src) chain.insertContent({ type: 'mediaEmbed', attrs: { src } }).run();\n else {\n chain\n .insertContent({ type: 'text', text: embedUrl.value, marks: [{ type: 'link', attrs: { href: embedUrl.value } }] })\n .run();\n }\n embedUrl.value = '';\n}\n</script>\n\n<style>\n.rtf-toolbar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 2px;\n padding: 4px;\n overflow-x: auto;\n border-bottom: 1px solid rgb(var(--v-theme-surface-variant));\n}\n\n.rtf-toolbar--disabled {\n opacity: 0.6;\n}\n</style>\n","// Content copied from Word or Google Docs carries mso-* inline styles, Mso*-prefixed classes, namespaced tags\n// (o:p, w:sdt, v:shape...), and conditional-compilation comments that are meaningless outside their originating\n// document. Left in place, they either render as visible clutter or silently defeat the mark/heading detection\n// the editor's own paste parsing relies on (an inline `mso-bidi-font-weight` next to a real `font-weight:bold`\n// is harmless, but a class name colliding with one this library uses for content styling would not be).\nconst NAMESPACED_TAG = /^[a-z][a-z0-9]*:[a-z]/i;\nconst MSO_STYLE_PROPERTY = /mso-[a-z-]+\\s*:[^;]+;?/gi;\nconst MSO_CLASS = /^Mso/i;\n// Word's own cell/table shading (Automatic/theme colours resolved at copy time, not necessarily what the\n// document visibly showed) rides along as a plain, non-mso `background`/`background-color` - stripped so a\n// pasted table adopts the editor's own theme instead of carrying the source document's shading. Foreground\n// `color` is left alone: unlike background shading, it is usually deliberate content styling worth keeping.\nconst BACKGROUND_STYLE_PROPERTY = /background(?:-color)?\\s*:[^;]+;?/gi;\n\nfunction stripComments(root: Element) {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_COMMENT);\n const comments: Comment[] = [];\n for (let node = walker.nextNode(); node; node = walker.nextNode()) comments.push(node as Comment);\n comments.forEach((comment) => comment.parentNode?.removeChild(comment));\n}\n\nfunction unwrap(element: Element) {\n const parent = element.parentNode;\n if (!parent) return;\n while (element.firstChild) parent.insertBefore(element.firstChild, element);\n parent.removeChild(element);\n}\n\nfunction cleanAttributes(element: HTMLElement) {\n const style = element.getAttribute('style');\n if (style != null) {\n const cleaned = style.replace(MSO_STYLE_PROPERTY, '').replace(BACKGROUND_STYLE_PROPERTY, '').trim();\n if (cleaned) element.setAttribute('style', cleaned);\n else element.removeAttribute('style');\n }\n\n const cssClass = element.getAttribute('class');\n if (cssClass != null) {\n const cleaned = cssClass\n .split(/\\s+/)\n .filter((name) => name && !MSO_CLASS.test(name))\n .join(' ');\n if (cleaned) element.setAttribute('class', cleaned);\n else element.removeAttribute('class');\n }\n\n element.removeAttribute('lang');\n element.removeAttribute('xml:lang');\n element.removeAttribute('id');\n element.removeAttribute('align');\n element.removeAttribute('bgcolor');\n}\n\n/**\n * Strips Word/Google Docs clipboard artifacts from pasted HTML before it reaches the editor's schema parser:\n * conditional comments, `<xml>`/`<style>`/`<meta>` blocks, namespaced tags (`o:p`, `w:sdt`, `v:shape`...),\n * `mso-*` inline style properties, `Mso*` classes, `background`/`background-color`/`bgcolor` shading, and\n * `lang`/`id`/`align` attributes. Real formatting left behind (`font-weight`, `<b>`, `<table>`, `<h1>`...) is\n * untouched, since it is what the editor's own extensions parse into marks, headings, lists and tables.\n */\nexport function stripWordArtifacts(html: string): string {\n if (!html || typeof DOMParser === 'undefined') return html;\n\n const doc = new DOMParser().parseFromString(html, 'text/html');\n const root = doc.body;\n if (!root) return html;\n\n stripComments(root);\n root.querySelectorAll('xml, style, script, meta, link').forEach((node) => node.remove());\n\n Array.from(root.querySelectorAll<HTMLElement>('*')).forEach((element) => {\n if (NAMESPACED_TAG.test(element.tagName) || element.tagName === 'FONT') {\n unwrap(element);\n return;\n }\n cleanAttributes(element);\n });\n\n // A span or div left with no attributes after cleanup is a pure wrapper Word adds around every run of text.\n Array.from(root.querySelectorAll('span, div')).forEach((element) => {\n if (element.attributes.length === 0) unwrap(element);\n });\n\n return root.innerHTML;\n}\n","<template>\n <div class=\"editor-container\">\n <rtf-toolbar :editor=\"editor\" />\n <editor-content class=\"editor-container__editor\" :editor=\"editor\" />\n <bubble-menu v-if=\"editor\" :editor=\"editor\" :should-show=\"bubbleShouldShow\">\n <div class=\"rtf-bubble-menu\">\n <v-btn icon size=\"small\" variant=\"text\" :active=\"bubbleState.bold\" @click=\"toggle('toggleBold')\">\n <cached-icon name=\"mdi-format-bold\" />\n </v-btn>\n <v-btn icon size=\"small\" variant=\"text\" :active=\"bubbleState.italic\" @click=\"toggle('toggleItalic')\">\n <cached-icon name=\"mdi-format-italic\" />\n </v-btn>\n <v-btn icon size=\"small\" variant=\"text\" :active=\"bubbleState.link\" @click=\"toggleBubbleLink\">\n <cached-icon name=\"mdi-link-variant\" />\n </v-btn>\n <v-btn icon size=\"small\" variant=\"text\" :active=\"bubbleState.bulletList\" @click=\"toggle('toggleBulletList')\">\n <cached-icon name=\"mdi-format-list-bulleted\" />\n </v-btn>\n <v-btn icon size=\"small\" variant=\"text\" :active=\"bubbleState.orderedList\" @click=\"toggle('toggleOrderedList')\">\n <cached-icon name=\"mdi-format-list-numbered\" />\n </v-btn>\n </div>\n </bubble-menu>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Image from '@tiptap/extension-image';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport { Table } from '@tiptap/extension-table';\nimport TableCell from '@tiptap/extension-table-cell';\nimport TableHeader from '@tiptap/extension-table-header';\nimport TableRow from '@tiptap/extension-table-row';\nimport TextAlign from '@tiptap/extension-text-align';\nimport { NodeSelection } from '@tiptap/pm/state';\nimport StarterKit from '@tiptap/starter-kit';\nimport { EditorContent, useEditor } from '@tiptap/vue-3';\nimport { BubbleMenu } from '@tiptap/vue-3/menus';\nimport { computed, watch } from 'vue';\nimport { CachedIcon } from 'vue-cached-icon';\n\nimport { ClassAttribute, Marker, Spoiler } from './block-styles';\nimport { createImagePasteHandler } from './image-paste';\nimport { LinkWithDownload } from './link-with-download';\nimport { MediaEmbed } from './media-embed';\nimport RtfToolbar from './rtf-toolbar.vue';\nimport { useEditorTick } from './use-editor-tick';\nimport { stripWordArtifacts } from './word-paste';\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: string;\n minHeight?: string;\n disabled?: boolean;\n }>(),\n { modelValue: '', minHeight: '7em', disabled: false },\n);\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string): void;\n}>();\n\nconst editor = useEditor({\n content: props.modelValue,\n editable: !props.disabled,\n extensions: [\n StarterKit.configure({ link: false }),\n LinkWithDownload.configure({ openOnClick: false, autolink: true, defaultProtocol: 'https' }),\n Image.configure({\n inline: true,\n allowBase64: true,\n resize: {\n enabled: true,\n directions: ['top', 'right', 'bottom', 'left', 'top-left', 'top-right', 'bottom-left', 'bottom-right'],\n minWidth: 24,\n minHeight: 24,\n },\n }),\n TextAlign.configure({ types: ['heading', 'paragraph'] }),\n Table.configure({ resizable: true }),\n TableRow,\n TableHeader,\n TableCell,\n Placeholder.configure({ placeholder: '' }),\n ClassAttribute,\n Marker,\n Spoiler,\n MediaEmbed,\n ],\n editorProps: {\n attributes: { class: 'rtf-content' },\n transformPastedHTML: (html: string) => stripWordArtifacts(html),\n handlePaste: createImagePasteHandler(() => editor.value),\n },\n onUpdate: ({ editor: instance }) => {\n emit('update:modelValue', instance.getHTML());\n },\n});\n\n// External writes (a reset, a different record loaded into the same form) are applied without re-emitting: the\n// third `setContent` argument suppresses the `update` this would otherwise trigger straight back out.\nwatch(\n () => props.modelValue,\n (value) => {\n const instance = editor.value;\n if (!instance) return;\n const incoming = value ?? '';\n if (incoming === instance.getHTML()) return;\n instance.commands.setContent(incoming, { emitUpdate: false });\n },\n);\n\nwatch(\n () => props.disabled,\n (disabled) => editor.value?.setEditable(!disabled),\n);\nwatch(editor, (instance) => instance?.setEditable(!props.disabled));\n\nconst bubbleTick = useEditorTick(editor);\nconst bubbleState = computed(() => {\n void bubbleTick.value;\n return {\n bold: !!editor.value?.isActive('bold'),\n italic: !!editor.value?.isActive('italic'),\n link: !!editor.value?.isActive('link'),\n bulletList: !!editor.value?.isActive('bulletList'),\n orderedList: !!editor.value?.isActive('orderedList'),\n };\n});\n\n// A NodeSelection (an image, a table, a horizontal rule - anything selected as a whole rather than as text) is\n// excluded: bold/italic/link/list toggles don't apply to a selected node, so showing this text-formatting bubble\n// over one is just noise sitting on top of whatever selection UI that node has of its own (an image's resize\n// handles, for instance).\nfunction bubbleShouldShow({ state }: { state: { selection: { empty: boolean } } }) {\n return !state.selection.empty && !(state.selection instanceof NodeSelection);\n}\n\nfunction toggle(command: 'toggleBold' | 'toggleItalic' | 'toggleBulletList' | 'toggleOrderedList') {\n editor.value?.chain().focus()[command]().run();\n}\n\nfunction toggleBubbleLink() {\n const instance = editor.value;\n if (!instance) return;\n if (instance.isActive('link')) {\n instance.chain().focus().unsetLink().run();\n return;\n }\n\n const href = window.prompt('URL');\n if (href) instance.chain().focus().extendMarkRange('link').setLink({ href }).run();\n}\n</script>\n\n<style>\n@import url('https://fonts.googleapis.com/css2?family=Oswald&family=PT+Serif:ital,wght@0,400;0,700;1,400&display=swap');\n@import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,400;0,700;1,400;1,700&display=swap');\n\n@media print {\n body {\n margin: 0 !important;\n }\n}\n\n.editor-container {\n font-family: 'Lato';\n width: 100%;\n}\n\n.rtf-content {\n font-family: 'Lato';\n line-height: 1.6;\n word-break: break-word;\n min-height: v-bind(minHeight);\n padding: 0.5em 0.75em;\n background: rgb(var(--v-theme-surface));\n color: rgb(var(--v-theme-on-surface));\n outline: none;\n}\n\n.rtf-content p {\n margin: 0 0 1em;\n}\n\n/* ProseMirror's list/table schemas wrap every block of text in a <p>, list item or cell content included, so\n without this every list item and table cell would carry the same margin ordinary paragraphs do - list items\n readable as double-spaced lines, cells with dead space above and below their text. */\n.rtf-content li p,\n.rtf-content td p,\n.rtf-content th p {\n margin: 0;\n}\n\n.rtf-content li + li {\n margin-top: 0;\n}\n\n.rtf-content img {\n max-width: 100%;\n height: auto;\n}\n\n/* TipTap's image resize NodeView (@tiptap/extension-image's `resize` option) builds the handle elements below\n with no visual styling of their own - position only - so the consuming app is expected to supply the look. */\n.rtf-content [data-resize-handle] {\n background: rgb(var(--v-theme-primary));\n border: 1px solid rgb(var(--v-theme-surface));\n border-radius: 2px;\n opacity: 0;\n transition: opacity 0.1s ease;\n z-index: 1;\n}\n\n.rtf-content [data-resize-container]:hover [data-resize-handle],\n.rtf-content [data-resize-container]:focus-within [data-resize-handle] {\n opacity: 1;\n}\n\n.rtf-content [data-resize-handle='top'],\n.rtf-content [data-resize-handle='bottom'] {\n height: 6px;\n cursor: ns-resize;\n}\n\n.rtf-content [data-resize-handle='left'],\n.rtf-content [data-resize-handle='right'] {\n width: 6px;\n cursor: ew-resize;\n}\n\n.rtf-content [data-resize-handle='top-left'],\n.rtf-content [data-resize-handle='bottom-right'] {\n width: 10px;\n height: 10px;\n cursor: nwse-resize;\n}\n\n.rtf-content [data-resize-handle='top-right'],\n.rtf-content [data-resize-handle='bottom-left'] {\n width: 10px;\n height: 10px;\n cursor: nesw-resize;\n}\n\n/* Holding Shift while dragging a handle locks the aspect ratio (ResizableNodeView's own behaviour, not\n something this component adds) - a one-off tooltip on the corner handle most people reach for first is enough\n to surface it, rather than a whole toolbar for a modifier key. */\n.rtf-content [data-resize-handle='bottom-right']:hover::after {\n content: 'Hold Shift to keep the aspect ratio';\n position: absolute;\n bottom: 14px;\n right: 0;\n white-space: nowrap;\n font-size: 12px;\n font-family: 'Lato';\n padding: 2px 6px;\n border-radius: 4px;\n background: rgb(var(--v-theme-surface-variant));\n color: rgb(var(--v-theme-on-surface-variant));\n pointer-events: none;\n}\n\n.rtf-content iframe.media-embed {\n width: 100%;\n aspect-ratio: 16 / 9;\n margin: 1em 0;\n border: 0;\n}\n\n.rtf-bubble-menu {\n display: flex;\n align-items: center;\n gap: 2px;\n padding: 2px;\n background: rgb(var(--v-theme-surface));\n border: 1px solid rgb(var(--v-theme-surface-variant));\n border-radius: 4px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n}\n\n.rtf-content h3.category {\n font-family: 'Oswald';\n font-size: 20px;\n font-weight: bold;\n color: #555;\n letter-spacing: 10px;\n margin: 0;\n padding: 0;\n}\n\n.rtf-content h2.document-title {\n font-family: 'Oswald';\n font-size: 50px;\n font-weight: bold;\n margin: 0;\n padding: 0;\n border: 0;\n}\n\n.rtf-content h3.document-subtitle {\n font-family: 'Oswald';\n font-size: 20px;\n color: #555;\n margin: 0 0 1em;\n font-weight: bold;\n padding: 0;\n}\n\n.rtf-content p.info-box {\n --background-size: 30px;\n --background-color: #e91e63;\n padding: 1.2em 2em;\n border: 1px solid var(--background-color);\n background:\n linear-gradient(\n 135deg,\n var(--background-color) 0%,\n var(--background-color) var(--background-size),\n transparent var(--background-size)\n ),\n linear-gradient(\n 135deg,\n transparent calc(100% - var(--background-size)),\n var(--background-color) calc(100% - var(--background-size)),\n var(--background-color)\n );\n border-radius: 10px;\n margin: 1.5em 2em;\n box-shadow: 5px 5px 0 #ffe6ef;\n}\n\n.rtf-content blockquote.side-quote {\n font-family: 'Oswald';\n font-style: normal;\n float: right;\n width: 35%;\n position: relative;\n border: 0;\n overflow: visible;\n z-index: 1;\n margin-left: 1em;\n}\n\n.rtf-content blockquote.side-quote::before {\n content: '“';\n position: absolute;\n top: -37px;\n left: -10px;\n display: block;\n font-size: 200px;\n color: #e7e7e7;\n z-index: -1;\n line-height: 1;\n}\n\n.rtf-content blockquote.side-quote p {\n font-size: 2em;\n line-height: 1;\n}\n\n.rtf-content blockquote.side-quote p:last-child:not(:first-child) {\n font-size: 1.3em;\n text-align: right;\n color: #555;\n}\n\n.rtf-content span.marker {\n background: yellow;\n}\n\n.rtf-content span.spoiler {\n background: #000;\n color: #000;\n}\n\n.rtf-content span.spoiler:hover {\n background: #000;\n color: #fff;\n}\n\n.rtf-content pre.fancy-code {\n border: 0;\n margin-left: 2em;\n margin-right: 2em;\n border-radius: 10px;\n}\n\n.rtf-content pre.fancy-code::before {\n content: '';\n display: block;\n height: 13px;\n background: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1NCAxMyI+CiAgPGNpcmNsZSBjeD0iNi41IiBjeT0iNi41IiByPSI2LjUiIGZpbGw9IiNGMzZCNUMiLz4KICA8Y2lyY2xlIGN4PSIyNi41IiBjeT0iNi41IiByPSI2LjUiIGZpbGw9IiNGOUJFNEQiLz4KICA8Y2lyY2xlIGN4PSI0Ny41IiBjeT0iNi41IiByPSI2LjUiIGZpbGw9IiM1NkM0NTMiLz4KPC9zdmc+Cg==);\n margin-bottom: 8px;\n background-repeat: no-repeat;\n}\n\n.rtf-content pre.fancy-code-dark {\n background: #272822;\n color: #fff;\n box-shadow: 5px 5px 0 #0000001f;\n}\n\n.rtf-content pre.fancy-code-bright {\n background: #dddfe0;\n color: #000;\n box-shadow: 5px 5px 0 #b3b3b3;\n}\n</style>\n","<template>\n <input-base v-bind=\"props\" class=\"rtf-editor\" :class=\"densityClass\">\n <template #default=\"slotProps\">\n <rtf-editor-core\n ref=\"$editor\"\n v-model=\"value\"\n :class=\"{ 'mt-6': !!label }\"\n :min-height=\"minHeight\"\n :disabled=\"vuetifyBindings.disabled\"\n v-bind=\"passthroughAttrs\"\n @focusin=\"slotProps.focus()\"\n @focusout=\"slotProps.blur()\"\n />\n </template>\n </input-base>\n</template>\n\n<script setup lang=\"ts\">\nimport { DfRtfEditorProps } from './dynamicforms-component-props';\nimport { BaseEmits, defaultBaseProps, InputBase, useInputBase } from './helpers';\nimport RtfEditorCore from './helpers/rtf-editor/editor-core.vue';\n\nconst props = withDefaults(defineProps<DfRtfEditorProps>(), { ...defaultBaseProps, minHeight: undefined });\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { densityClass, value, vuetifyBindings } = useInputBase(props, emits);\n</script>\n\n<style>\n.rtf-editor .v-field:not(.v-field--active) .v-label.v-field-label:not(.v-field-label--floating) {\n transform: translate(0.5em, 3em);\n}\n\n.rtf-editor .v-input__control {\n /* So the toolbar's dropdown menus draw over vuetify inputs that are positioned underneath */\n z-index: 1;\n}\n</style>\n","import { isArray, first, castArray } from 'lodash-es';\nimport { Ref } from 'vue';\n\nimport { SelectChoice } from './df-select.interface';\n\nexport function convertItems(items: SelectChoice[]) {\n return items.map((item) => ({ value: item.id, title: item.text, icon: item.icon }));\n}\n\n/**\n * multipleCompliantValue ensures that resulting value of the select component is\n * 1 - null, when nothing is selected\n * 2 - array, when multiple is truthy\n * 3 - ordinal / simple value when multiple is not truthy\n * @param value the value to make compliant\n * @param multiple indicator for multiple selection\n */\nexport function multipleCompliantValue(value: any, multiple: boolean): any {\n // Če je vrednost null ali undefined\n if (value == null) return null;\n\n // Če je prazno polje (za multiple)\n if (isArray(value) && value.length === 0) return null;\n\n // Za multiple vedno vrni polje\n if (multiple) return castArray(value);\n\n // Za single vrni prvo vrednost ali vrednost samo\n return isArray(value) ? (first(value) ?? null) : value;\n}\n\nexport function getSelectedChoices(loadedChoices: SelectChoice[], multipleCpliantValue: any | any[] | null) {\n if (multipleCpliantValue == null) return [];\n const mcValue = castArray(multipleCpliantValue);\n return loadedChoices.filter((choice) => mcValue.some((val: any) => val === choice.id));\n}\n\n/**\n * updateSelectedFromValue ensures that the actual select component receives model-value formatted to its needs\n */\nexport function updateSelectedFromValue(\n resultingValue: any,\n selected: Ref<any>,\n multiple: boolean,\n taggable: boolean,\n loadedChoices: SelectChoice[],\n) {\n const mcValue = multipleCompliantValue(resultingValue, multiple);\n\n if (mcValue == null) {\n selected.value = multiple ? [] : null;\n return;\n }\n\n if (multiple) {\n if (taggable) {\n // if taggable (can add new items not in choices), keep the value as-is\n selected.value = mcValue;\n } else {\n // when not taggable, we filter the result to existing choices\n selected.value = getSelectedChoices(loadedChoices, mcValue).map((choice) => choice.id);\n }\n } else {\n if (taggable) {\n // if taggable, we just keep the selected value\n selected.value = mcValue;\n } else {\n // when not taggable, we filter the result to existing choices\n const matchingChoice = first(getSelectedChoices(loadedChoices, mcValue));\n selected.value = matchingChoice?.id ?? null;\n }\n }\n}\n","<template>\n <component\n :is=\"taggable ? 'v-combobox' : 'v-autocomplete'\"\n v-if=\"isRendered\"\n ref=\"dfSelectRef\"\n v-model=\"selected\"\n :class=\"[cssClass, densityClass, visibilityClass, { 'df-select-multirow': isMultiline }]\"\n :items=\"options\"\n :return-object=\"false\"\n chips\n :auto-select-first=\"true\"\n :closable-chips=\"allowNull || (multiple && selected.length > 1)\"\n :clearable=\"allowNull\"\n :multiple=\"multiple\"\n :loading=\"loading\"\n :hide-selected=\"false\"\n :aria-describedby=\"vuetifyBindings.helpText ? `${vuetifyBindings.name}-help` : null\"\n :menu-props=\"{ maxHeight: '400' }\"\n :search=\"searchText\"\n v-bind=\"vuetifyBindings\"\n @update:search=\"(query: any) => queryOptions(query, undefined)\"\n @update:model-value=\"onSelect\"\n @click:clear=\"selected = null\"\n @blur=\"touched = true\"\n @mousedown.capture=\"onMouseDown($event)\"\n >\n <template #chip=\"{ item }\">\n <v-chip\n :key=\"item.value\"\n label\n size=\"small\"\n class=\"d-flex align-middle\"\n :variant=\"multiple ? 'tonal' : 'text'\"\n :closable=\"multiple\"\n @click:close=\"chipClose($event, item.value)\"\n >\n <template #prepend>\n <cached-icon v-if=\"item.raw?.icon\" class=\"me-1\" :name=\"item.raw.icon\" />\n </template>\n <span :class=\"{ 'text-body-1': !multiple }\">{{ item.title }}</span>\n </v-chip>\n </template>\n <template #label=\"labelData\">\n <df-label :data=\"labelData\" :label=\"label\" />\n </template>\n\n <template #item=\"{ props: prps, item }\">\n <v-list-item v-bind=\"prps\">\n <template #prepend>\n <span v-if=\"item.raw?.icon\" class=\"me-1\">\n <cached-icon class=\"action-icon\" :name=\"item.raw.icon\" />\n </span>\n </template>\n </v-list-item>\n </template>\n <template #message=\"{ message }\">\n <df-input-hint :message=\"message\" :errors=\"showErrors\" />\n </template>\n <template v-if=\"$slots['append-inner']\" #append-inner=\"props\">\n <slot name=\"append-inner\" v-bind=\"props\" />\n </template>\n <template v-if=\"$slots['prepend-inner']\" #prepend-inner=\"props\">\n <slot name=\"prepend-inner\" v-bind=\"props\" />\n </template>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport { isEqual, unionBy } from 'lodash-es';\nimport { computed, nextTick, ref, toRefs, unref, watch } from 'vue';\nimport { CachedIcon } from 'vue-cached-icon';\nimport { VAutocomplete, VCombobox } from 'vuetify/components';\n\nimport { DfSelectProps } from './dynamicforms-component-props';\nimport { BaseEmits, defaultBaseProps, DfInputHint, DfLabel, SelectChoice, useInputBase } from './helpers';\nimport {\n convertItems,\n getSelectedChoices,\n multipleCompliantValue,\n updateSelectedFromValue,\n} from './helpers/df-select.helper';\n\nconst propsWithDefaults = withDefaults(defineProps<DfSelectProps>(), {\n ...defaultBaseProps,\n choices: undefined,\n multiple: false,\n allowTags: false,\n allowNull: true,\n fetchChoices: undefined,\n});\n\nconst { choices, multiple, allowTags: taggable, allowNull, cssClass } = toRefs(propsWithDefaults);\n\ninterface Emits extends BaseEmits {\n (e: 'update:modelValueDisplay', value: SelectChoice[]): any;\n}\n\nconst emits = defineEmits<Emits>();\ndefineSlots<{\n 'append-inner'?: (props: any) => any;\n 'prepend-inner'?: (props: any) => any;\n}>();\n\nconst dfSelectRef = ref<InstanceType<typeof VAutocomplete> | InstanceType<typeof VCombobox> | null>(null);\n\nconst {\n densityClass,\n isRendered,\n label,\n showErrors,\n touched,\n value: resultingValue,\n visibilityClass,\n vuetifyBindings,\n} = useInputBase(propsWithDefaults, emits);\n\nconst selected = ref<any>(null);\nconst takeLoaded = ref(false);\nconst loaded = ref<SelectChoice[]>([]);\nconst loadedChoices = computed<SelectChoice[]>(() => (unref(takeLoaded) ? unref(loaded) : unref(choices) || []));\nconst loading = ref<boolean>(false);\n\nconst options = computed(() => convertItems(loadedChoices.value));\nconst searchText = ref<string | null>(null);\nconst fetchCounterGlobal = ref(0);\nconst isMultiline = ref(false);\n\nif (choices.value?.length && propsWithDefaults.fetchChoices !== undefined) {\n console.warn('Both choices and fetchChoices are set. Only one of them should be set.');\n}\n\nfunction emitModelValueDisplay(mcVal: any) {\n emits('update:modelValueDisplay', getSelectedChoices(loadedChoices.value, mcVal));\n}\n\nconst setResultingValueGuard = ref(false);\n\nfunction setResultingValue(newValue: any) {\n setResultingValueGuard.value = true;\n try {\n resultingValue.value = newValue;\n } finally {\n // The guard suppresses the watch that pushes the model's value back into `selected`. A write the control does\n // not take verbatim - a ValueChangedAction that writes another value back, a disabled field that drops it, a\n // handler that throws and unwinds it - never reaches that watch, so the chips would go on showing a selection\n // the control never took. Comparing what the control holds against what was written is what restores it, and\n // it needs a deep comparison: for multiple selection the value reads back as a different array holding the\n // same items.\n if (!isEqual(multipleCompliantValue(resultingValue.value, multiple.value), newValue)) {\n updateSelectedFromValue(\n multipleCompliantValue(resultingValue.value, multiple.value),\n selected,\n multiple.value,\n taggable.value,\n loadedChoices.value,\n );\n }\n nextTick(() => {\n setResultingValueGuard.value = false;\n });\n }\n}\n\nfunction getFullWidth(item: HTMLElement | null) {\n if (!item) return 0;\n const rect = item.getBoundingClientRect();\n const style = window.getComputedStyle(item);\n\n return rect.width + parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n}\n\nfunction checkMultiline() {\n if (multiple.value && allowNull.value && selected.value != null && selected.value.length > 0 && dfSelectRef.value) {\n const dfSelect = dfSelectRef.value.$el;\n const inputWidth = dfSelect.querySelector('.v-input__control')?.clientWidth;\n const container = dfSelect.querySelector('.v-field__input');\n const items = container.querySelectorAll('.v-autocomplete__selection, .v-combobox__selection');\n\n const style = window.getComputedStyle(container);\n let selectedWidth = parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n\n items.forEach((item: HTMLElement) => {\n selectedWidth += getFullWidth(item);\n });\n\n const clearableWidth = getFullWidth(dfSelect.querySelector('.v-field .v-field__clearable'));\n const appendWidth = getFullWidth(dfSelect.querySelector('.v-field .v-field__append-inner'));\n const chipGap = 2;\n isMultiline.value = inputWidth - selectedWidth - items.length * chipGap - appendWidth < clearableWidth;\n } else {\n isMultiline.value = false;\n }\n}\n\nfunction onMouseDown(event: MouseEvent) {\n // če je klik na close ikoni ali njenem childu\n const target = event.target;\n if (target instanceof HTMLElement && target.closest('.v-chip__close')) {\n event.stopPropagation();\n event.preventDefault();\n }\n}\n\nwatch(\n selected,\n (newValue) => {\n if (vuetifyBindings.value.readonly) return;\n nextTick(() => {\n const mcVal = multipleCompliantValue(newValue, multiple.value);\n emitModelValueDisplay(mcVal);\n setResultingValue(mcVal);\n });\n },\n { deep: true },\n);\nwatch(\n resultingValue,\n (newValue: any) => {\n if (!setResultingValueGuard.value) {\n const mcVal = multipleCompliantValue(newValue, multiple.value);\n updateSelectedFromValue(mcVal, selected, multiple.value, false, loadedChoices.value);\n }\n },\n { deep: true },\n);\n\nwatch(setResultingValueGuard, () => {\n if (!setResultingValueGuard.value) {\n checkMultiline();\n }\n});\n\nfunction resetQuery() {\n if (searchText.value != null && searchText.value.length > 0) {\n searchText.value = null;\n queryOptions();\n }\n}\n\nfunction onSelect(/* val: any */) {\n resetQuery();\n if (vuetifyBindings.value.readonly || taggable.value) return;\n const mcVal = multipleCompliantValue(selected.value, multiple.value);\n updateSelectedFromValue(mcVal, selected, multiple.value, false, loadedChoices.value);\n setResultingValue(mcVal);\n}\n\nfunction chipClose(event: MouseEvent, itemValue: any) {\n event.stopPropagation();\n if (vuetifyBindings.value.readonly || taggable.value) {\n if (taggable.value) {\n selected.value = selected.value.filter((v: any) => v !== itemValue);\n }\n return;\n }\n let mcVal;\n if (multiple.value && Array.isArray(selected.value)) {\n mcVal = multipleCompliantValue(\n selected.value.filter((v) => v !== itemValue),\n multiple.value,\n );\n } else {\n mcVal = null;\n }\n updateSelectedFromValue(mcVal, selected, multiple.value, false, loadedChoices.value);\n setResultingValue(mcVal);\n}\n\nasync function queryOptions(queryValue?: any, idValue?: any): Promise<void> {\n if (vuetifyBindings.value.readonly) return;\n searchText.value = queryValue;\n if (choices.value || propsWithDefaults.fetchChoices === undefined) return;\n const fetchCounter = ++fetchCounterGlobal.value;\n loading.value = true;\n try {\n const selectedChoices = getSelectedChoices(\n loadedChoices.value,\n multipleCompliantValue(selected.value, multiple.value),\n );\n const newChoices = await propsWithDefaults.fetchChoices(queryValue, idValue);\n if (fetchCounter !== fetchCounterGlobal.value) return;\n loaded.value = unionBy([...selectedChoices, ...newChoices], 'id');\n takeLoaded.value = true;\n } finally {\n loading.value = false;\n }\n}\n\nfunction initialValueCheck() {\n let val = resultingValue.value;\n if (!allowNull.value && val == null && options.value.length) {\n // Starting settings: check if value is mandatory and select the first item from the options\n val = options.value[0].value;\n }\n val = multipleCompliantValue(val, multiple.value);\n updateSelectedFromValue(val, selected, multiple.value, taggable.value, loadedChoices.value);\n emitModelValueDisplay(val);\n setResultingValue(val);\n}\n\ninitialValueCheck();\n\n// Starting settings: check if ajax and current value is not loaded yet - then load the value from back-end\nif (propsWithDefaults.fetchChoices !== undefined) {\n queryOptions(undefined, resultingValue.value).then(() => {\n initialValueCheck();\n });\n}\n</script>\n\n<style scoped>\n.df-select-multirow :deep(.v-field__clearable) {\n position: absolute;\n}\n\n.df-select-multirow :deep(.v-field__append-inner) {\n margin-top: 24px;\n}\n\n.df-select-multirow :deep(.v-autocomplete .v-field:not(.v-field--focused) input) {\n min-width: 24px;\n}\n</style>\n","<template>\n <div v-if=\"isRendered\" class=\"df-textarea-container\" :class=\"[densityClass, visibilityClass]\">\n <v-textarea\n v-model=\"value\"\n :class=\"cssClass\"\n :rows=\"rows\"\n :auto-grow=\"(maxRows || 0) > 0\"\n :max-rows=\"maxRows\"\n v-bind=\"vuetifyBindings as any\"\n @blur=\"touched = true\"\n >\n <template #label=\"labelData\"><df-label :data=\"labelData\" :label=\"label\" /></template>\n <template #message=\"{ message }\"><df-input-hint :message=\"message\" :errors=\"showErrors\" /></template>\n </v-textarea>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { toRefs } from 'vue';\n\nimport { DfTextAreaProps } from './dynamicforms-component-props';\nimport { BaseEmits, defaultBaseProps, DfInputHint, DfLabel, useInputBase } from './helpers';\n\nconst props = withDefaults(defineProps<DfTextAreaProps>(), {\n ...defaultBaseProps,\n rows: undefined,\n maxRows: undefined,\n});\n\ninterface Emits extends BaseEmits {}\nconst emits = defineEmits<Emits>();\n\nconst { densityClass, isRendered, label, showErrors, touched, value, visibilityClass, vuetifyBindings } = useInputBase(\n props,\n emits,\n);\nconst { cssClass } = toRefs(props);\n</script>\n","import {\n DfActions,\n DfCheckbox,\n DfColor,\n DfDateTime,\n DfFile,\n DfImage,\n DfInput,\n DfInputHint,\n DfLabel,\n DfRtfEditor,\n DfSelect,\n DfTextArea,\n} from './dynamicforms-components';\n\n/**\n * Every component this library draws with, keyed by the tag a layout names it by.\n *\n * A rendering layer that resolves a component by name out of a map - `@dynamicforms/vuetify-modal-form-kit`'s\n * `<component-render>` is one - is handed this instead of keeping a list of its own, which would have to be\n * extended whenever this package gains a component and would silently render nothing until it was.\n *\n * The keys are the kebab-case of the export names, so a tag names the same component whether it is looked up\n * here or left to Vue's own resolver after `DynamicFormsInputs` has registered the components globally.\n */\nexport const dfInputComponentsByTag = {\n 'df-actions': DfActions,\n 'df-checkbox': DfCheckbox,\n 'df-color': DfColor,\n 'df-date-time': DfDateTime,\n 'df-file': DfFile,\n 'df-image': DfImage,\n 'df-input': DfInput,\n 'df-input-hint': DfInputHint,\n 'df-label': DfLabel,\n 'df-rtf-editor': DfRtfEditor,\n 'df-select': DfSelect,\n 'df-text-area': DfTextArea,\n} as const;\n\n/** The tags {@link dfInputComponentsByTag} answers for. */\nexport type DfInputComponentTag = keyof typeof dfInputComponentsByTag;\n","import { App } from 'vue';\n\nimport * as Inputs from './dynamicforms-components';\nimport { VuetifyInputsSettings, vuetifyInputsSettingsKey } from './helpers';\nimport * as VuetifyComponents from './vuetify-components';\n\nexport * from './helpers';\nexport * as VuetifyComponents from './vuetify-components';\nexport * from './dynamicforms-components';\nexport * from './dynamicforms-components-by-tag';\nexport * as DfInputComponents from './dynamicforms-components';\nexport * as DfInputComponentProps from './dynamicforms-component-props';\n\nexport interface DynamicFormsInputsOptions extends VuetifyInputsSettings {\n registerComponents: boolean;\n registerVuetifyComponents: boolean;\n}\n\nexport const DynamicFormsInputs = {\n install: (app: App, options?: Partial<DynamicFormsInputsOptions>) => {\n app.provide(vuetifyInputsSettingsKey, options ?? {});\n if (options?.registerComponents ?? false) {\n Object.entries(Inputs).map(([name, component]) => app.component(name, component));\n }\n if (options?.registerVuetifyComponents ?? false) {\n Object.entries(VuetifyComponents).map(([name, component]) => app.component(name, component));\n }\n },\n};\n"],"names":["isPluralType","val","formatDistanceLocale","getFormFromCount","count","formatDistance","token","options","result","tense","tokenValue","form","buildFormatLongFn","args","width","dateFormats","timeFormats","dateTimeFormats","formatLong","formatRelativeLocale","date","formatRelative","_baseDate","_options","format","buildLocalizeFn","value","context","valuesArray","defaultWidth","index","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","dirtyNumber","localize","quarter","buildMatchFn","string","matchPattern","matchResult","matchedString","parsePatterns","key","findIndex","pattern","findKey","rest","object","predicate","array","buildMatchPatternFn","parseResult","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","match","sl","DateTimeLocaleConfig","ref","locale","isRef","FileGoneError","errorText","__publicField","props","__props","isError","computed","widgetMessage","widgetClasses","_createBlock","_unref","MessagesWidget","lbl","_createElementBlock","_normalizeClass","_Fragment","CachedIcon","_component_v_img","_resolveDynamicComponent","MdString","VueMarkdown","vuetifyInputsSettingsKey","Label","text","icon","iconComponent","defaultBaseProps","useInputBase","emit","settings","inject","injectedDensity","injectedVariant","internalValue","pendingWrite","shallowRef","newValue","toRaw","nextTick","Form","controlTouch","touched","valid","errors","error","ValidationErrorRenderContent","anyErrors","showErrors","enabled","visibility","isRendered","visibilityClass","extra","_b","_a","label","stated","isString","placeholder","helpText","hint","cssClass","density","_d","_c","boundDensity","variant","__spreadValues","isEmpty","emits","__emit","vuetifyBindings","isClearable","unref","focused","setFocused","isFocused","_component_v_input","_withCtx","message","_createVNode","DfInputHint","_component_v_field","_cache","labelData","DfLabel","slotProps","_createElementVNode","_hoisted_1","_renderSlot","_ctx","loaderProps","$slots","prependInnerProps","prependProps","translatableStrings","translateStrings","translationCallback","translation","ActionDisplayStyle","defaultDisplayStyle","fromString","mode","fromAny","input","isDefined","check","responsiveBreakpoints","ResponsiveRenderOptions","data","bp","breakpoint","bpData","field","isPlainObject","getBreakpointName","dp","useBreakpoint","display","useDisplay","ResponsiveActionRenderOptions","defaultIfEmpty","isObjectLike","isBoolean","getRenderOptionsForBreakpoint","partial","Action","FormAction","init","__spreadProps","useFileTouchKeepAlive","comms","touchIntervalProp","onGone","touchIntervalHandle","clearTouchInterval","setupTouchInterval","interval","err","onBeforeUnmount","watch","setFileGoneError","control","actionsRef","action","DisplayMode","actionsWithBreakpoint","defaultActionColor","_openBlock","_renderList","idx","_component_v_btn","_mergeProps","_withModifiers","event","_hoisted_2","_toDisplayString","densityClass","indeterminate","boolValue","change","oldVal","clone","_component_v_checkbox","$event","dropdownShown","rules","_component_v_text_field","_normalizeStyle","_component_v_menu","_component_v_color_picker","currentLocale","firstDayOfWeek","inputType","displayFormatDate","displayFormatTime","toRefs","dropdown","dateMenuShown","timeMenuShown","formatNaive","valueISOFull","setValueISOFull","newISOValue","dateOrTimeIdx","vif","nv","valueAsDate","uValue","res","valueAsTimeString","dateFormatted","vad","d","parse","timeFormatted","hour","toNumber","minute","isNaN","InputBase","_component_v_confirm_edit","proxyModel","actions","_component_v_date_picker","_component_v_time_picker","currentFile","progress","fileInputKey","selectedFile","loading","fileLabel","resetFileState","handleFileGone","removeFile","__async","upload","file","loaded","total","handleFileChange","_component_v_progress_linear","_component_v_file_input","t","fileInputId","useId","objectUrl","dragCounter","fileInputRef","isDisabled","isDragging","previewUrl","revokeObjectUrl","handleFile","onNativeChange","onDragEnter","onDragLeave","onDrop","max","min","precision","step","isNumber","numberInputBindings","_component_v_number_input","ClassAttribute","Extension","element","attributes","styledSpanMark","name","className","Mark","HTMLAttributes","mergeAttributes","Marker","Spoiler","STYLE_DEFS","anchorPos","editor","state","$from","anchorNode","anchorAncestor","typeName","$pos","depth","isStyleActive","def","node","applyStyle","chain","fileToDataUrl","resolve","reject","reader","extractImageFiles","dataTransfer","files","item","countImageNodes","fragment","replaceImageSources","urls","cursor","children","Fragment","createImagePasteHandler","getEditor","view","slice","content","newSlice","Slice","src","LinkWithDownload","Link","toEmbedSrc","url","parsed","e","host","id","embedMatch","shortsMatch","MediaEmbed","Node","useEditorTick","editorRef","tick","bound","onTransaction","bind","next","editable","headingOptions","isHeadingActive","level","headingLabel","option","setHeading","styleDefs","styleActive","linkUrl","linkDownloadable","openLinkMenu","attrs","applyLink","removeLink","imageUrl","imageInput","insertImageFromUrl","triggerImageUpload","onImageFileChosen","embedUrl","insertMediaEmbed","_component_v_divider","menuProps","_component_v_list","_component_v_list_item","_component_v_list_item_title","_createTextVNode","shown","_component_v_card","_hoisted_3","NAMESPACED_TAG","MSO_STYLE_PROPERTY","MSO_CLASS","BACKGROUND_STYLE_PROPERTY","stripComments","root","walker","comments","comment","unwrap","parent","cleanAttributes","style","cleaned","stripWordArtifacts","html","useEditor","StarterKit","Image","TextAlign","Table","TableRow","TableHeader","TableCell","Placeholder","instance","incoming","disabled","bubbleTick","bubbleState","_e","bubbleShouldShow","NodeSelection","toggle","command","toggleBubbleLink","href","RtfToolbar","EditorContent","BubbleMenu","RtfEditorCore","convertItems","items","multipleCompliantValue","multiple","isArray","castArray","first","getSelectedChoices","loadedChoices","multipleCpliantValue","mcValue","choice","updateSelectedFromValue","resultingValue","selected","taggable","matchingChoice","propsWithDefaults","choices","allowNull","dfSelectRef","takeLoaded","searchText","fetchCounterGlobal","isMultiline","emitModelValueDisplay","mcVal","setResultingValueGuard","setResultingValue","isEqual","getFullWidth","rect","checkMultiline","dfSelect","inputWidth","container","selectedWidth","clearableWidth","appendWidth","chipGap","onMouseDown","target","resetQuery","queryOptions","onSelect","chipClose","itemValue","v","queryValue","idValue","fetchCounter","selectedChoices","newChoices","unionBy","initialValueCheck","query","_component_v_chip","prps","_component_v_textarea","dfInputComponentsByTag","DfActions","DfCheckbox","DfColor","DfDateTime","DfFile","DfImage","DfInput","DfRtfEditor","DfSelect","DfTextArea","DynamicFormsInputs","app","Inputs","component","VuetifyComponents"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,GAAaC,GAAK;AACzB,SAAOA,EAAI,QAAQ;AACrB;AAEA,MAAMC,KAAuB;AAAA,EAC3B,kBAAkB;AAAA,IAChB,SAAS;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,EACA;AAAA,EAEE,UAAU;AAAA,IACR,SAAS;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,EACA;AAAA,EAEE,aAAa;AAAA,EAEb,kBAAkB;AAAA,IAChB,SAAS;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,EACA;AAAA,EAEE,UAAU;AAAA,IACR,SAAS;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,EACA;AAAA,EAEE,aAAa;AAAA,IACX,SAAS;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,EACA;AAAA,EAEE,QAAQ;AAAA,IACN,SAAS;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,EACA;AAAA,EAEE,OAAO;AAAA,IACL,SAAS;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,EACA;AAAA;AAAA,EAGE,aAAa;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,EACX;AAAA;AAAA,EAGE,QAAQ;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,EACX;AAAA,EAEE,cAAc;AAAA,IACZ,SAAS;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,EACA;AAAA,EAEE,SAAS;AAAA,IACP,SAAS;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,EACA;AAAA,EAEE,aAAa;AAAA,IACX,SAAS;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,EACA;AAAA,EAEE,QAAQ;AAAA,IACN,SAAS;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,EACA;AAAA,EAEE,YAAY;AAAA,IACV,SAAS;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,EACA;AAAA,EAEE,cAAc;AAAA,IACZ,SAAS;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,IACI,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACb;AAAA,EACA;AACA;AAEA,SAASC,GAAiBC,GAAO;AAC/B,UAAQA,IAAQ,KAAG;AAAA,IACjB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACb;AACA;AAEO,MAAMC,KAAiB,CAACC,GAAOF,GAAOG,MAAY;AACvD,MAAIC,IAAS,IACTC,IAAQ;AAEZ,EAAIF,KAAA,QAAAA,EAAS,cACPA,EAAQ,cAAcA,EAAQ,aAAa,KAC7CE,IAAQ,UACRD,IAAS,WAETC,IAAQ,QACRD,IAAS;AAIb,QAAME,IAAaR,GAAqBI,CAAK;AAE7C,MAAI,OAAOI,KAAe;AACxB,IAAAF,KAAUE;AAAA,OACL;AACL,UAAMC,IAAOR,GAAiBC,CAAK;AACnC,IAAIJ,GAAaU,CAAU,IACzBF,KAAUE,EAAWC,CAAI,EAAE,QAAQ,aAAa,OAAOP,CAAK,CAAC,IAE7DI,KAAUE,EAAWD,CAAK,EAAEE,CAAI,EAAE,QAAQ,aAAa,OAAOP,CAAK,CAAC;AAAA,EAExE;AAEA,SAAOI;AACT;ACnVO,SAASI,GAAkBC,GAAM;AACtC,SAAO,CAACN,IAAU,OAAO;AAEvB,UAAMO,IAAQP,EAAQ,QAAQ,OAAOA,EAAQ,KAAK,IAAIM,EAAK;AAE3D,WADeA,EAAK,QAAQC,CAAK,KAAKD,EAAK,QAAQA,EAAK,YAAY;AAAA,EAEtE;AACF;ACLA,MAAME,KAAc;AAAA,EAClB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AACT,GAEMC,KAAc;AAAA,EAClB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AACT,GAEMC,KAAkB;AAAA,EACtB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AACT,GAEaC,KAAa;AAAA,EACxB,MAAMN,GAAkB;AAAA,IACtB,SAASG;AAAA,IACT,cAAc;AAAA,EAClB,CAAG;AAAA,EAED,MAAMH,GAAkB;AAAA,IACtB,SAASI;AAAA,IACT,cAAc;AAAA,EAClB,CAAG;AAAA,EAED,UAAUJ,GAAkB;AAAA,IAC1B,SAASK;AAAA,IACT,cAAc;AAAA,EAClB,CAAG;AACH,GCtCME,KAAuB;AAAA,EAC3B,UAAU,CAACC,MAAS;AAGlB,YAFYA,EAAK,OAAM,GAEZ;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACf;AAAA,EACE;AAAA,EACA,WAAW;AAAA,EACX,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU,CAACA,MAAS;AAGlB,YAFYA,EAAK,OAAM,GAEZ;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACf;AAAA,EACE;AAAA,EACA,OAAO;AACT,GAEaC,KAAiB,CAACf,GAAOc,GAAME,GAAWC,MAAa;AAClE,QAAMC,IAASL,GAAqBb,CAAK;AAEzC,SAAI,OAAOkB,KAAW,aACbA,EAAOJ,CAAI,IAGbI;AACT;ACJO,SAASC,GAAgBZ,GAAM;AACpC,SAAO,CAACa,GAAOnB,MAAY;AACzB,UAAMoB,IAAUpB,KAAA,QAAAA,EAAS,UAAU,OAAOA,EAAQ,OAAO,IAAI;AAE7D,QAAIqB;AACJ,QAAID,MAAY,gBAAgBd,EAAK,kBAAkB;AACrD,YAAMgB,IAAehB,EAAK,0BAA0BA,EAAK,cACnDC,IAAQP,KAAA,QAAAA,EAAS,QAAQ,OAAOA,EAAQ,KAAK,IAAIsB;AAEvD,MAAAD,IACEf,EAAK,iBAAiBC,CAAK,KAAKD,EAAK,iBAAiBgB,CAAY;AAAA,IACtE,OAAO;AACL,YAAMA,IAAehB,EAAK,cACpBC,IAAQP,KAAA,QAAAA,EAAS,QAAQ,OAAOA,EAAQ,KAAK,IAAIM,EAAK;AAE5D,MAAAe,IAAcf,EAAK,OAAOC,CAAK,KAAKD,EAAK,OAAOgB,CAAY;AAAA,IAC9D;AACA,UAAMC,IAAQjB,EAAK,mBAAmBA,EAAK,iBAAiBa,CAAK,IAAIA;AAGrE,WAAOE,EAAYE,CAAK;AAAA,EAC1B;AACF;AC3DA,MAAMC,KAAY;AAAA,EAChB,QAAQ,CAAC,cAAc,WAAW;AAAA,EAClC,aAAa,CAAC,cAAc,WAAW;AAAA,EACvC,MAAM,CAAC,sBAAsB,iBAAiB;AAChD,GAEMC,KAAgB;AAAA,EACpB,QAAQ,CAAC,KAAK,KAAK,KAAK,GAAG;AAAA,EAC3B,aAAa,CAAC,WAAW,WAAW,WAAW,SAAS;AAAA,EACxD,MAAM,CAAC,iBAAiB,iBAAiB,iBAAiB,eAAe;AAC3E,GAEMC,KAAc;AAAA,EAClB,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACnE,aAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAAA,EAEE,MAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACA,GAEMC,KAAY;AAAA,EAChB,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EAC1C,OAAO,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;AAAA,EAC9D,aAAa,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;AAAA,EAEpE,MAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACA,GAEMC,KAAkB;AAAA,EACtB,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,EACX;AAAA,EACE,aAAa;AAAA,IACX,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,EACX;AAAA,EACE,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,EACX;AACA,GAEMC,KAA4B;AAAA,EAChC,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,EACX;AAAA,EACE,aAAa;AAAA,IACX,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,EACX;AAAA,EACE,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,EACX;AACA,GAEMC,KAAgB,CAACC,GAAaf,MACnB,OAAOe,CAAW,IACjB,KAGLC,KAAW;AAAA,EACtB,eAAAF;AAAA,EAEA,KAAKZ,GAAgB;AAAA,IACnB,QAAQM;AAAA,IACR,cAAc;AAAA,EAClB,CAAG;AAAA,EAED,SAASN,GAAgB;AAAA,IACvB,QAAQO;AAAA,IACR,cAAc;AAAA,IACd,kBAAkB,CAACQ,MAAYA,IAAU;AAAA,EAC7C,CAAG;AAAA,EAED,OAAOf,GAAgB;AAAA,IACrB,QAAQQ;AAAA,IACR,cAAc;AAAA,EAClB,CAAG;AAAA,EAED,KAAKR,GAAgB;AAAA,IACnB,QAAQS;AAAA,IACR,cAAc;AAAA,EAClB,CAAG;AAAA,EAED,WAAWT,GAAgB;AAAA,IACzB,QAAQU;AAAA,IACR,cAAc;AAAA,IACd,kBAAkBC;AAAA,IAClB,wBAAwB;AAAA,EAC5B,CAAG;AACH;ACpKO,SAASK,GAAa5B,GAAM;AACjC,SAAO,CAAC6B,GAAQnC,IAAU,OAAO;AAC/B,UAAMO,IAAQP,EAAQ,OAEhBoC,IACH7B,KAASD,EAAK,cAAcC,CAAK,KAClCD,EAAK,cAAcA,EAAK,iBAAiB,GACrC+B,IAAcF,EAAO,MAAMC,CAAY;AAE7C,QAAI,CAACC;AACH,aAAO;AAET,UAAMC,IAAgBD,EAAY,CAAC,GAE7BE,IACHhC,KAASD,EAAK,cAAcC,CAAK,KAClCD,EAAK,cAAcA,EAAK,iBAAiB,GAErCkC,IAAM,MAAM,QAAQD,CAAa,IACnCE,GAAUF,GAAe,CAACG,MAAYA,EAAQ,KAAKJ,CAAa,CAAC;AAAA;AAAA,MAEjEK,GAAQJ,GAAe,CAACG,MAAYA,EAAQ,KAAKJ,CAAa,CAAC;AAAA;AAEnE,QAAInB;AAEJ,IAAAA,IAAQb,EAAK,gBAAgBA,EAAK,cAAckC,CAAG,IAAIA,GACvDrB,IAAQnB,EAAQ;AAAA;AAAA,MAEZA,EAAQ,cAAcmB,CAAK;AAAA,QAC3BA;AAEJ,UAAMyB,IAAOT,EAAO,MAAMG,EAAc,MAAM;AAE9C,WAAO,EAAE,OAAAnB,GAAO,MAAAyB,EAAI;AAAA,EACtB;AACF;AAEA,SAASD,GAAQE,GAAQC,GAAW;AAClC,aAAWN,KAAOK;AAChB,QACE,OAAO,UAAU,eAAe,KAAKA,GAAQL,CAAG,KAChDM,EAAUD,EAAOL,CAAG,CAAC;AAErB,aAAOA;AAIb;AAEA,SAASC,GAAUM,GAAOD,GAAW;AACnC,WAASN,IAAM,GAAGA,IAAMO,EAAM,QAAQP;AACpC,QAAIM,EAAUC,EAAMP,CAAG,CAAC;AACtB,aAAOA;AAIb;ACxDO,SAASQ,GAAoB1C,GAAM;AACxC,SAAO,CAAC6B,GAAQnC,IAAU,OAAO;AAC/B,UAAMqC,IAAcF,EAAO,MAAM7B,EAAK,YAAY;AAClD,QAAI,CAAC+B,EAAa,QAAO;AACzB,UAAMC,IAAgBD,EAAY,CAAC,GAE7BY,IAAcd,EAAO,MAAM7B,EAAK,YAAY;AAClD,QAAI,CAAC2C,EAAa,QAAO;AACzB,QAAI9B,IAAQb,EAAK,gBACbA,EAAK,cAAc2C,EAAY,CAAC,CAAC,IACjCA,EAAY,CAAC;AAGjB,IAAA9B,IAAQnB,EAAQ,gBAAgBA,EAAQ,cAAcmB,CAAK,IAAIA;AAE/D,UAAMyB,IAAOT,EAAO,MAAMG,EAAc,MAAM;AAE9C,WAAO,EAAE,OAAAnB,GAAO,MAAAyB,EAAI;AAAA,EACtB;AACF;AChBA,MAAMM,KAA4B,aAC5BC,KAA4B,QAE5BC,KAAmB;AAAA,EACvB,aAAa;AAAA,EACb,MAAM;AACR,GACMC,KAAmB;AAAA,EACvB,KAAK,CAAC,QAAQ,iBAAiB;AACjC,GAEMC,KAAuB;AAAA,EAC3B,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,MAAM;AACR,GACMC,KAAuB;AAAA,EAC3B,KAAK,CAAC,MAAM,MAAM,MAAM,IAAI;AAC9B,GAEMC,KAAqB;AAAA,EACzB,QAAQ;AAAA,EACR,aACE;AAAA,EACF,MAAM;AACR,GACMC,KAAqB;AAAA,EACzB,QAAQ;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAAA,EAEE,aAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAAA,EAEE,MAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACA,GAEMC,KAAmB;AAAA,EACvB,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,aAAa;AAAA,EACb,MAAM;AACR,GACMC,KAAmB;AAAA,EACvB,QAAQ,CAAC,OAAO,OAAO,OAAO,OAAO,UAAU,OAAO,KAAK;AAAA,EAC3D,KAAK,CAAC,OAAO,QAAQ,OAAO,QAAQ,UAAU,QAAQ,MAAM;AAC9D,GAEMC,KAAyB;AAAA,EAC7B,QAAQ;AAAA,EACR,KAAK;AACP,GACMC,KAAyB;AAAA,EAC7B,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,EACX;AAAA,EACE,KAAK;AAAA,IACH,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,EACX;AACA,GAEaC,KAAQ;AAAA,EACnB,eAAed,GAAoB;AAAA,IACjC,cAAcE;AAAA,IACd,cAAcC;AAAA,IACd,eAAe,CAAChC,MAAU,SAASA,GAAO,EAAE;AAAA,EAChD,CAAG;AAAA,EAED,KAAKe,GAAa;AAAA,IAChB,eAAekB;AAAA,IACf,mBAAmB;AAAA,IACnB,eAAeC;AAAA,IACf,mBAAmB;AAAA,EACvB,CAAG;AAAA,EAED,SAASnB,GAAa;AAAA,IACpB,eAAeoB;AAAA,IACf,mBAAmB;AAAA,IACnB,eAAeC;AAAA,IACf,mBAAmB;AAAA,IACnB,eAAe,CAAChC,MAAUA,IAAQ;AAAA,EACtC,CAAG;AAAA,EAED,OAAOW,GAAa;AAAA,IAClB,eAAesB;AAAA,IACf,mBAAmB;AAAA,IACnB,eAAeC;AAAA,IACf,mBAAmB;AAAA,EACvB,CAAG;AAAA,EAED,KAAKvB,GAAa;AAAA,IAChB,eAAewB;AAAA,IACf,mBAAmB;AAAA,IACnB,eAAeC;AAAA,IACf,mBAAmB;AAAA,EACvB,CAAG;AAAA,EAED,WAAWzB,GAAa;AAAA,IACtB,eAAe0B;AAAA,IACf,mBAAmB;AAAA,IACnB,eAAeC;AAAA,IACf,mBAAmB;AAAA,EACvB,CAAG;AACH,GC9IaE,KAAK;AAAA,EAChB,MAAM;AAAA,EACN,gBAAgBjE;AAAA,EAChB,YAAYa;AAAA,EACZ,gBAAgBG;AAAA,EAChB,UAAUkB;AAAA,EACV,OAAO8B;AAAA,EACP,SAAS;AAAA,IACP,cAAc;AAAA,IACd,uBAAuB;AAAA,EAC3B;AACA,GCrBaE,KAAuB;AAAA,EAClC,gBAAgBC,EAAIF,EAAE;AAAA,EACtB,kBAAkBG,GAA8B;AAC9C,IAAIC,GAAMD,CAAM,IACd,KAAK,iBAAiBA,IAEtB,KAAK,eAAe,QAAQA;AAAA,EAEhC;AACF;ACLO,MAAME,WAAsB,MAAM;AAAA,EACvC,YAAmBC,GAAmB;AACpC,UAAMA,CAAS;AADE,IAAAC,GAAA;AAAA,SAAA,YAAAD;AAAA,EAEnB;AACF;;;;;;;;;;ACFA,UAAME,IAAQC,GAORC,IAAUC,EAAS,MACnBH,EAAM,SACJ,OAAOA,EAAM,UAAW,WACnBA,EAAM,OAAO,KAAA,EAAO,SAAS,IAE/BA,EAAM,OAAO,SAAS,IAExB,EACR,GAEKI,IAAgBD,EAAS,MACtBD,EAAQ,QAAQF,EAAM,SAASA,EAAM,OAC7C,GAEKK,IAAgBF,EAAS,MACtBD,EAAQ,QAAQF,EAAM,eAAeA,EAAM,cACnD;2BAhCCM,EAAqEC,EAAAC,EAAA,GAAA;AAAA,MAAnD,SAASJ,EAAA;AAAA,MAAgB,SAASC,EAAA;AAAA,IAAA;;;;;;;;;;ACyBtD,UAAML,IAAQC,GAERQ,IAAMN,EAAS,MAAOH,EAAM,OAAOA,EAAM,KAAK,QAAQA,EAAM,MAAM,IAAK;;;kBA3B3EU,EAcM,OAAA;AAAA,QAdD,OAAKC,GAAA,CAAC,YAAU,EAAA,cAAyBV,EAAA,WAAS,CAAA;AAAA,MAAA;QACrCA,EAAA,MAAM,aAAtBS,EAIWE,IAAA,EAAA,KAAA,KAAA;AAAA,UAHUX,EAAA,MAAM,kBAAa,iBAAtCK,EAAwFC,EAAAM,CAAA,GAAA;AAAA;YAAlC,MAAMZ,EAAA,MAAM;AAAA,YAAM,MAAK;AAAA,UAAA,yBAC3DA,EAAA,MAAM,kBAAa,gBAArCK,EAAoFQ,GAAA;AAAA;YAAjC,OAAM;AAAA,YAAQ,KAAKb,EAAA,MAAM;AAAA,UAAA,8BAC5EK,EAAgES,GAAhDd,EAAA,MAAM,aAAa,GAAA;AAAA;YAAU,KAAKA,EAAA,MAAM;AAAA,UAAA;;QAGlDQ,EAAA,iBAAeF,EAAAS,EAAA,UADvBV,EAMEC,EAAAU,EAAA,GAAA;AAAA;UAJA,OAAM;AAAA,UACL,QAAQR,EAAA,MAAI,SAAA;AAAA,UACZ,SAASA,EAAA,MAAI;AAAA,UACb,SAASA,EAAA,MAAI;AAAA,QAAA,uDAEhBC,EAAqCE,IAAA,EAAA,KAAA,KAAA;AAAA,cAAjBH,EAAA,KAAG,GAAA,CAAA;AAAA,QAAA;;;;ICJdS,4BAAkC,0BAA0B;ACJlE,MAAMC,GAAM;AAAA,EACjB,YACSC,GACAC,GACAC,IAAwB,UAC/B;AAHO,IAAAvB,GAAA;AACA,IAAAA,GAAA;AACA,IAAAA,GAAA;AAFA,SAAA,OAAAqB,GACA,KAAA,OAAAC,GACA,KAAA,gBAAAC;AAAA,EACN;AACL;AA8CO,MAAMC,KAAmB,EAAE,SAAS,QAAW,WAAW,GAAA;AAO1D,SAASC,GAAsBxB,GAAqByB,GAAoB;AAC7E,QAAMC,IAAWC,GAA8BT,IAA0B,EAAE,GACrEU,IAAkBD,GAA4B,iBAAiB,IAAI,GACnEE,IAAkBF,GAA4B,iBAAiB,IAAI,GACnEG,IAAgBpC,EAAc,IAAI,GAQlCqC,IAAeC,GAAgC,IAAI,GAEnDpF,IAAQuD,EAAS;AAAA,IACrB,MAAS;AACP,aAAI4B,EAAa,QAAcA,EAAa,MAAM,QAC9C/B,EAAM,UAAgBA,EAAM,QAAQ,QACpCA,EAAM,eAAe,SAAkB8B,EAAc,QAClD9B,EAAM;AAAA,IACf;AAAA,IACA,IAAIiC,GAAa;AACf,UAAI;AACF,QAAIjC,EAAM,YAASA,EAAM,QAAQ,QAAQiC;AAAA,MAC3C,UAAA;AAIE,QAAIjC,EAAM,WAAW,CAAC,OAAO,GAAGkC,GAAMlC,EAAM,QAAQ,KAAY,GAAGkC,GAAMD,CAAe,CAAC,MACvFF,EAAa,QAAQ,EAAE,OAAOE,EAAA,GAC9BE,GAAS,MAAM;AACb,UAAAJ,EAAa,QAAQ;AAAA,QACvB,CAAC;AAAA,MAEL;AACA,MAAI/B,EAAM,eAAe,WAAW8B,EAAc,QAAQG,IAC1DR,EAAK,qBAAqBzB,EAAM,UAAWA,EAAM,QAAQ,QAAciC,CAAQ;AAAA,IACjF;AAAA,EAAA,CACD;AAED,MAAIjC,EAAM,WAAW,EAAEA,EAAM,mBAAmBoC,GAAK;AACnD,UAAM,IAAI,MAAM,iDAAiD;AAGnE,QAAMC,IAAelC,EAAS;AAAA,IAC5B,MAAM;AACJ,aAAOH,EAAM,QAAS;AAAA,IACxB;AAAA,IACA,IAAI7E,GAAc;AAChB,MAAA6E,EAAM,QAAS,UAAU7E;AAAA,IAC3B;AAAA,EAAA,CACD,GACKmH,IAAUtC,EAAM,UAAUqC,IAAe3C,EAAI,EAAK,GAClD6C,IAAQpC,EAAS,MAAOH,EAAM,UAAUA,EAAM,QAAQ,QAAQ,EAAK,GACnEwC,IAASrC;AAAA,IAAS,MACtBH,EAAM,UAAUA,EAAM,QAAQ,UAAUA,EAAM,UAAU,CAAA,GAAI,IAAI,CAACyC,MAAU,IAAIC,GAA6BD,CAAK,CAAC;AAAA,EAAA,GAE9GE,IAAYxC,EAAS,MAAOmC,EAAQ,SAASE,EAAO,MAAM,SAAS,IAAI,MAAM,MAAU,GACvFI,IAAazC,EAAS,MAAOmC,EAAQ,QAAQE,EAAO,QAAQ,MAAU,GAGtEK,IAAU1C,EAAS,MAAOH,EAAM,UAAUA,EAAM,QAAQ,mBAAmBA,EAAM,YAAY,EAAM,GAInG8C,IAAa3C,EAAS,MACtBH,EAAM,UAAgBA,EAAM,QAAQ,aACpCA,EAAM,cAAc,OAAaoC,GAAK,YAAY,OAC/CA,GAAK,YAAY,QAAQpC,EAAM,UAAU,CACjD,GACK+C,IAAa5C,EAAS,MAAM2C,EAAW,UAAUV,GAAK,YAAY,QAAQ,GAC1EY,IAAkB7C,EAAS,OAAO;AAAA,IACtC,UAAU2C,EAAW,UAAUV,GAAK,YAAY;AAAA,IAChD,WAAWU,EAAW,UAAUV,GAAK,YAAY;AAAA,EAAA,EACjD,GAEIa,IAAQ9C,EAAS,MAAA;;AAAM,YAAA+C,KAAAC,IAAAnD,EAAM,YAAN,gBAAAmD,EAAe,UAAf,OAAAD,IAAwB;GAAE,GAEjDE,IAAQjD,EAAS,MAAa;;AAClC,UAAMkD,KAASF,IAAAnD,EAAM,UAAN,OAAAmD,IAAeF,EAAM,MAAM;AAC1C,WAAOK,GAASD,KAAU,EAAE,IAAI,IAAIlC,GAAckC,KAAU,EAAE,IAAWA;AAAA,EAC3E,CAAC,GACKE,IAAcpD,EAAS;;AAAM,YAAA+C,KAAAC,IAAAnD,EAAM,gBAAN,OAAAmD,IAAqBF,EAAM,MAAM,gBAAjC,OAAAC,IAAgD;AAAA,GAAE,GAC/EM,IAAWrD,EAAS;;AAAM,YAAA+C,KAAAC,IAAAnD,EAAM,aAAN,OAAAmD,IAAkBF,EAAM,MAAM,aAA9B,OAAAC,IAA0C;AAAA,GAAE,GACtEO,IAAOtD,EAAS;;AAAM,YAAA+C,KAAAC,IAAAnD,EAAM,SAAN,OAAAmD,IAAcF,EAAM,MAAM,SAA1B,OAAAC,IAAkC;AAAA,GAAE,GAC1DQ,IAAWvD,EAAS;;AAAM,YAAA+C,KAAAC,IAAAnD,EAAM,aAAN,OAAAmD,IAAkBF,EAAM,MAAM,aAA9B,OAAAC,IAA0C;AAAA,GAAE,GAEtES,IAAUxD;AAAA,IACd;;AAAoB,cAAAyD,KAAAC,KAAAX,KAAAC,IAAAnD,EAAM,YAAN,OAAAmD,IAAiBF,EAAM,MAAM,YAA7B,OAAAC,IAAwCtB,MAAxC,OAAAiC,IAA2DnC,EAAS,mBAApE,OAAAkC,IAAsF;AAAA;AAAA,EAAA,GAEtGE,IAAe3D,EAAS,MAAuBwD,EAAQ,UAAU,WAAW,YAAYA,EAAQ,KAAM,GACtGI,IAAU5D;AAAA,IACd;;AACE,cAAAyD,KAAAC,KAAAX,KAAAC,IAAAnD,EAAM,YAAN,OAAAmD,IAAiBF,EAAM,MAAM,YAA7B,OAAAC,IAAwCrB,MAAxC,OAAAgC,IAA2DnC,EAAS,mBAApE,OAAAkC,IAAsF;AAAA;AAAA,EAAA;AAG1F,SAAO;AAAA,IACL,OAAAhH;AAAA,IACA,OAAA2F;AAAA,IACA,SAAAM;AAAA,IACA,QAAAL;AAAA,IACA,YAAAI;AAAA,IACA,YAAAE;AAAA,IACA,YAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,OAAAI;AAAA,IACA,SAAAd;AAAA,IACA,SAAAqB;AAAA,IACA,cAAcxD,EAAS,MAAM,cAAcwD,EAAQ,KAAK,EAAE;AAAA,IAE1D,iBAAiBxD,EAAS,MAAA;;AAAO,aAAA6D,EAAA;AAAA,QAC/B,OAAMb,IAAAnD,EAAM,YAAN,gBAAAmD,EAAe;AAAA,QACrB,OAAOO,EAAS;AAAA,QAEhB,SAASI,EAAa;AAAA,QACtB,SAASC,EAAQ;AAAA,QAEjB,OAAOX,EAAM,MAAM;AAAA,QACnB,eAAeT,EAAU;AAAA;AAAA,QAEzB,UAAU,CAACE,EAAQ;AAAA,QACnB,UAAU,CAACA,EAAQ;AAAA,QAEnB,aAAaU,EAAY;AAAA,QACzB,0BAA0B,CAACU,GAAQV,EAAY,KAAK;AAAA,QAEpD,MAAME,EAAK;AAAA,QACX,gBAAgB;AAAA;AAAA,QAChB,aAA2C;AAAA;AAAA,QAC3C,UAAUD,EAAS;AAAA,SAEfxD,EAAM,oBAAoB,CAAA;AAAA,KAC9B;AAAA,EAAA;AAEN;;;;;;;;;;;;;;;;;;;;;;ACxJA,UAAMA,IAAQC,GACRiE,IAAQC,GAER,EAAE,YAAApB,GAAY,OAAAK,GAAO,YAAAR,GAAY,SAAAN,GAAS,OAAA1F,GAAO,iBAAAoG,GAAiB,iBAAAoB,EAAA,IAAoB5C,GAAaxB,GAAOkE,CAAK,GAE/GG,IAAclE,EAAS,MAAM,CAAC,EAAEmE,EAAMtE,EAAM,SAAS,KAAKsE,EAAM1H,CAAK,EAAE,GACvE2H,IAAU7E,EAAa,EAAK;AAElC,aAAS8E,EAAWC,GAAoB;AACtC,MAAAF,EAAQ,QAAQE,GACXA,MACHnC,EAAQ,QAAQ,IAChB4B,EAAM,MAAM;AAAA,IAEhB;;;aA3DU3D,EAAAwC,CAAA,UADRzC,EAoCUoE,GAAA;AAAA;QAlCP,MAAMnE,EAAA6D,CAAA,EAAgB;AAAA,QACtB,SAAS7D,EAAA6D,CAAA,EAAgB;AAAA,QACzB,MAAM7D,EAAA6D,CAAA,EAAgB;AAAA,QACtB,mBAAiB7D,EAAA6D,CAAA,EAAgB;AAAA,QACjC,gBAAc7D,EAAA6D,CAAA,EAAgB;AAAA,QAC9B,kBAAgB7D,EAAA6D,CAAA,EAAgB;AAAA,QAChC,OAAKzD,GAAA,CAAGV,EAAA,UAAUM,EAAAyC,CAAA,CAAe,CAAA;AAAA,MAAA;QAwBvB,SAAO2B,EAChB,CAAyD,EADrC,SAAAC,QAAO;AAAA,UAC3BC,EAAyDC,IAAA;AAAA,YAAzC,SAAAF;AAAA,YAAmB,QAAQrE,EAAAqC,CAAA;AAAA,UAAA;;mBAvB7C,MAqBU;AAAA,UArBViC,EAqBUE,GAAA;AAAA,YApBP,SAASxE,EAAA6D,CAAA,EAAgB;AAAA,YACzB,SAAS7D,EAAA6D,CAAA,EAAgB;AAAA,YACzB,OAAO7D,EAAA6D,CAAA,EAAgB;AAAA,YACvB,UAAU7D,EAAA6D,CAAA,EAAgB;AAAA,YAC1B,WAAWC,EAAA;AAAA,YACX,oBAAkB;AAAA,YAClB,OAAK,CAAA,CAAI9D,EAAA3D,CAAA,KAAK,CAAA,CAAM2D,EAAA6D,CAAA,EAAgB;AAAA,YACpC,QAAQG,EAAA;AAAA,YACR,SAAStE,EAAA;AAAA,YACT,wCAAaiE,EAAK,aAAA;AAAA,YAClB,oBAAcc,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGP,MAAcD,EAAWC,CAAS;AAAA,UAAA;YAEzC,OAAKE,EAAa,CAA6CM,MAA/C;AAAA,cAAEJ,EAA6CK,IAAA;AAAA,gBAAlC,MAAMD;AAAA,gBAAY,OAAO1E,EAAA6C,CAAA;AAAA,cAAA;;YACtD,SAAOuB,EAChB,CAA2FQ,MADhE;AAAA,cAC3BC,GAA2F,OAA3FC,IAA2F;AAAA,gBAAjCC,GAA2BC,2BAAbJ,CAAS,CAAA,CAAA;AAAA,cAAA;;YAExE,QAAMR,EAAe,CAA2Ca,MAA7C;AAAA,cAAEF,GAA2CC,0BAAfC,CAAW,CAAA,CAAA;AAAA,YAAA;;;YACvDC,EAAAA,OAAM,eAAA;oBAAoB;AAAA,cACxC,IAAAd,EAAA,CADuDe,MAAiB;AAAA,gBACxEJ,GAAwDC,iCAArBG,CAAiB,CAAA,CAAA;AAAA,cAAA;;;;;;;QAMxCD,EAAAA,OAAO;gBAAU;AAAA,UAAuB,IAAAd,EAAA,CAAdgB,MAAY;AAAA,YAAEL,GAA6CC,2BAAhBI,CAAY,CAAA,CAAA;AAAA,UAAA;;;;;;ICpCxFC,KAAsB;AAAA,EACjC,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,WAAW;AAAA,EACX,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP,UAAU;AAAA,EACV,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,MAAM;AAAA,EACN,WAAW;AAAA,EACX,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,cAAc;AAAA,EACd,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,MAAM;AAAA,EACN,SAAS;AAAA,EACT,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,UAAU;AAAA,EACV,aAAa;AAAA,EACb,aAAa;AAAA,EACb,eAAe;AAAA,EACf,cAAc;AAAA,EACd,OAAO;AAAA,EACP,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,sBAAsB;AAAA,EACtB,qBAAqB;AAAA,EACrB,mBAAmB;AAAA,EACnB,sBAAsB;AAAA,EACtB,kBAAkB;AAAA,EAClB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,kBAAkB;AACpB;AAEO,SAASC,GAAiBC,GAA4C;AAC3E,SAAO,KAAKF,EAAmB,EAAE,QAAQ,CAAC3H,MAAQ;AAChD,UAAM8H,IAAcD,EAAoB7H,CAAG;AAC3C,IAAI8H,KAAe,SACjBH,GAAoB3H,CAAuC,IAAI8H;AAAA,EAEnE,CAAC;AACH;AClEA,IAAKC,uBAAAA,OAEHA,EAAAA,EAAA,SAAS,CAAA,IAAT,UACAA,EAAAA,EAAA,OAAO,CAAA,IAAP,QAHGA,IAAAA,MAAA,CAAA,CAAA;AAME,MAAMC,KAAsB;AAAA,CAGnC,CAAUD,MAAV;AACS,WAASE,EAAWC,GAAkC;AAC3D,WAAIA,EAAK,kBAAkB,WAAiB,IACxCA,EAAK,kBAAkB,SAAe,IACnCF;AAAA,EACT;AAJOD,EAAAA,EAAS,aAAAE;AAMT,WAASE,EAAQD,GAA+B;AACrD,UAAME,IAAQ,OAAOF,KAAS,WAAWA,IAAOH,EAAmB,WAAWG,CAAc;AAC5F,WAAI,OAAO,OAAOH,CAAkB,EAAE,SAASK,CAAK,IAAUA,IACvDJ;AAAA,EACT;AAJOD,EAAAA,EAAS,UAAAI;AAMT,WAASE,EAAUH,GAAgC;AACxD,UAAMI,IAAQ,OAAOJ,KAAS,WAAWA,IAAOH,EAAmB,WAAWG,CAAc;AAC5F,WAAO,OAAO,OAAOH,CAAkB,EAAE,SAASO,CAAK;AAAA,EACzD;AAHOP,EAAAA,EAAS,YAAAM;AAAA,GAbRN,OAAAA,KAAA,CAAA,EAAA;AAmBV,OAAO,OAAOA,EAAkB;AC3BzB,MAAMQ,KAAwB,CAAC,MAAM,MAAM,MAAM,MAAM,IAAI;AAU3D,MAAeC,GAAuD;AAAA,EAG3E,YAAYC,GAA2B;AAFpB,IAAA3G,GAAA;AAGjB,SAAK,SAAS,KAAK,gBAAgB2G,GAAW,EAAI,GAC9CA,KACFF,GAAsB,QAAQ,CAACG,MAAO;AACpC,YAAMlL,IAAU,KAAK,gBAAgBiL,EAAKC,CAAE,CAAC;AAC7C,MAAIlL,MAAS,KAAK,OAAOkL,CAAE,IAAIlL;AAAA,IACjC,CAAC;AAAA,EAEL;AAAA,EAEA,wBAAwBmL,GAAgC;;AAEtD,UAAMlL,KAAUyH,IAAA,KAAK,gBAAgB,KAAK,MAAW,MAArC,OAAAA,IAA2C,CAAA;AAC3D,eAAWwD,KAAMH,IAAuB;AAGtC,YAAMK,KAAS3D,IAAA,KAAK,OAAOyD,CAAE,MAAd,OAAAzD,IAAmB,CAAA;AAClC,iBAAW4D,KAAS,OAAO,KAAKD,CAAM,GAAG;AACvC,cAAMjK,IAAciK,EAAQC,CAAK;AAEjC,QAAIlK,KAAS,SACTmK,GAAcnK,CAAK,IAIflB,EAAQoL,CAAK,IAAI9C,IAAA,IAAWtI,EAAQoL,CAAK,IAAMlK,KAE/ClB,EAAQoL,CAAK,IAAIlK;AAAA,MAE3B;AACA,UAAI+J,MAAOC,EAAY;AAAA,IACzB;AACA,WAAOlL;AAAA,EACT;AASF;AAEO,SAASsL,GAAkBC,GAAoD;AACpF,SAAIA,EAAG,QAAQ,QAAc,OACzBA,EAAG,QAAQ,QAAc,OACzBA,EAAG,QAAQ,QAAc,OACzBA,EAAG,QAAQ,QAAc,OACtB;AACT;AAEO,SAASC,KAAgB;AAC9B,QAAMC,IAAUC,GAAA;AAEhB,SAAOjH,EAA0B,MAAM6G,GAAkBG,CAAO,CAAC;AACnE;ACpBO,MAAME,WAAsCZ,GAA6C;AAAA,EACpF,gBAAgBE,GAA0BW,IAA0B,IAAmC;AAC/G,SAAK,CAACX,KAAM,CAACY,GAAaZ,CAAE,MAAM,CAACW,EAAgB,QAAO;AAE1D,UAAM5L,IAA8B,CAAA;AACpC,WAAI4L,MACF5L,EAAO,WAAWsK,GAAmB,QACrCtK,EAAO,YAAY,IACnBA,EAAO,WAAW,KAGhBiL,MACEA,EAAG,YAAY,SAAMjL,EAAO,WAAWsK,GAAmB,QAAQW,EAAG,QAAQ,IAC7ErD,GAASqD,EAAG,KAAK,MAAGjL,EAAO,QAAQiL,EAAG,QACtCrD,GAASqD,EAAG,IAAI,MAAGjL,EAAO,OAAOiL,EAAG,OACpCa,GAAUb,EAAG,SAAS,MAAGjL,EAAO,YAAYiL,EAAG,YAC/Ca,GAAUb,EAAG,QAAQ,MAAGjL,EAAO,WAAWiL,EAAG,WAC7CrD,GAASqD,EAAG,IAAI,MAAGjL,EAAO,OAAOiL,EAAG,OACpCa,GAAUb,EAAG,cAAc,MAAGjL,EAAO,iBAAiBiL,EAAG,iBACzDa,GAAUb,EAAG,aAAa,MAAGjL,EAAO,gBAAgBiL,EAAG,gBAGvDI,GAAcJ,EAAG,gBAAgB,QAAU,mBAAmB3C,EAAA,IAAK2C,EAAG,qBAGrE,OAAO,KAAKjL,CAAM,EAAE,SAASA,IAAS;AAAA,EAC/C;AACF;AAWO,SAAS+L,GAA8B7K,GAAoBgK,GAAkD;AAElH,QAAMc,IADU,IAAIL,GAA8BzK,CAAgC,EAC1D,wBAAwBgK,CAAU;AAC1D,SAAO;AAAA,IACL,MAAMc,EAAQ;AAAA,IACd,OAAOA,EAAQ,YAAYA,EAAQ,QAAQ;AAAA,IAC3C,MAAMA,EAAQ,WAAWA,EAAQ,OAAO;AAAA,IACxC,UAAUA,EAAQ;AAAA,IAClB,WAAWpE,GAASoE,EAAQ,KAAK,KAAK,CAACzD,GAAQyD,EAAQ,KAAK,IAAIA,EAAQ,YAAY;AAAA,IACpF,UAAUpE,GAASoE,EAAQ,IAAI,KAAK,CAACzD,GAAQyD,EAAQ,IAAI,IAAIA,EAAQ,WAAW;AAAA,IAChF,gBAAgBA,EAAQ;AAAA,IACxB,eAAeA,EAAQ;AAAA,IACvB,kBAAkBA,EAAQ;AAAA,EAAA;AAE9B;AC/FA,MAAMC,WAAeC,GAAoC;AAAA;AAAA,EAEvD,mBAAmBhB,GAAkC;AACnD,WAAOzG,EAAS,MAAMsH,GAA8B,KAAK,OAAOb,EAAW,KAAK,CAAC;AAAA,EACnF;AAAA;AAAA,EAGA,IAAI,OAAO;AACT,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,gBAAgB;AAClB,WAAO,KAAK,MAAM,YAAY,KAAK,MAAM,QAAQ;AAAA,EACnD;AAAA;AAAA,EAGA,IAAI,YAAY;AACd,WAAOtD,GAAS,KAAK,MAAM,KAAK,KAAK,CAACW,GAAQ,KAAK,MAAM,KAAK,IAAI,KAAK,MAAM,YAAY;AAAA,EAC3F;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,eAAe;AACjB,WAAO,KAAK,MAAM,WAAW,KAAK,MAAM,OAAO;AAAA,EACjD;AAAA;AAAA,EAGA,IAAI,WAAW;AACb,WAAOX,GAAS,KAAK,MAAM,IAAI,KAAK,CAACW,GAAQ,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,WAAW;AAAA,EACxF;AAAA;AAAA,EAGA,IAAI,WAAW;AACb,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA,EAGA,IAAI,iBAAiB;AACnB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA,EAGA,IAAI,gBAAgB;AAClB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA,EAGA,IAAI,mBAAmB;AACrB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,OAAO,YAAYyC,GAAkE;;AACnF,UAAMmB,IAAkEC,GAAA9D,EAAA,IAClE0C,KAAA,OAAAA,IAAQ,CAAA,IAD0D;AAAA;AAAA,MAEtE,OAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAOd,GAAoB;AAAA,QAC3B,MAAM;AAAA,QACN,UAAUI,GAAmB;AAAA,QAC7B,WAAW;AAAA,QACX,UAAU;AAAA,MAAA;AAAA,IACZ;AAEF,WAAA6B,EAAK,QAAQ7D,IAAA,IAAK6D,EAAK,SAAW1E,IAAAuD,KAAA,gBAAAA,EAAM,UAAN,OAAAvD,IAAe,KAC1C,IAAIwE,GAAOE,CAAI;AAAA,EACxB;AAAA,EAEA,OAAO,UAAUnB,GAAkE;;AACjF,UAAMmB,IAAkEC,GAAA9D,EAAA,IAClE0C,KAAA,OAAAA,IAAQ,CAAA,IAD0D;AAAA;AAAA,MAEtE,OAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAOd,GAAoB;AAAA,QAC3B,MAAM;AAAA,QACN,UAAUI,GAAmB;AAAA,QAC7B,WAAW;AAAA,QACX,UAAU;AAAA,MAAA;AAAA,IACZ;AAEF,WAAA6B,EAAK,QAAQ7D,IAAA,IAAK6D,EAAK,SAAW1E,IAAAuD,KAAA,gBAAAA,EAAM,UAAN,OAAAvD,IAAe,KAC1C,IAAIwE,GAAOE,CAAI;AAAA,EACxB;AAAA,EAEA,OAAO,SAASnB,GAAkE;;AAChF,UAAMmB,IAAkEC,GAAA9D,EAAA,IAClE0C,KAAA,OAAAA,IAAQ,CAAA,IAD0D;AAAA;AAAA,MAEtE,OAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAOd,GAAoB;AAAA,QAC3B,MAAM;AAAA,QACN,UAAUI,GAAmB;AAAA,QAC7B,WAAW;AAAA,QACX,UAAU;AAAA,MAAA;AAAA,IACZ;AAEF,WAAA6B,EAAK,QAAQ7D,IAAA,IAAK6D,EAAK,SAAW1E,IAAAuD,KAAA,gBAAAA,EAAM,UAAN,OAAAvD,IAAe,KAC1C,IAAIwE,GAAOE,CAAI;AAAA,EACxB;AACF;ACtGO,SAASE,GACdnL,GACAoL,GACAC,GACAC,GACA;AACA,QAAMxG,IAAWC,GAA8BT,IAA0B,EAAE,GACrEiH,IAAsBzI,EAAmB,IAAI;AAEnD,WAAS0I,IAAqB;AAC5B,IAAID,EAAoB,SAAO,OAAO,cAAcA,EAAoB,KAAK;AAAA,EAC/E;AAEA,WAASE,IAAqB;;AAC5B,IAAAD,EAAA;AACA,UAAME,KAAWpF,KAAAC,IAAA8E,EAAA,MAAA,OAAA9E,IAAuBzB,EAAS,yBAAhC,OAAAwB,IAAwD;AACzE,IAAAiF,EAAoB,QAAQ,OAAO,YAAY,MAAM;AACnD,MAAIvL,EAAM,SACRoL,EAAA,EACG,MAAMpL,EAAM,KAAK,EACjB,MAAM,CAAC2L,MAAQ;AACd,QAAIA,aAAe1I,MAAeqI,EAAOK,EAAI,SAAS;AAAA,MACxD,CAAC;AAAA,IAEP,GAAGD,CAAQ;AAAA,EACb;AAEA,SAAAE,GAAgB,MAAMJ,GAAoB,GAC1CK,GAAM7L,GAAO,CAACqF,MAAcA,IAAWoG,EAAA,IAAuBD,GAAqB,GAE5E,EAAE,oBAAAC,GAAoB,oBAAAD,EAAA;AAC/B;AAOO,SAASM,GAAiBC,GAAqC7I,GAAmB;AACvF,EAAI6I,MAASA,EAAQ,SAAS,CAAC,IAAIjG,GAA6B5C,CAAS,CAAC;AAC5E;;;;;;;;;;;;ACZA,UAAME,IAAQC,GAKR2G,IAAaM,GAAA,GACb0B,IAAazI,EAAS,MAAMmE,EAAMtE,EAAM,OAAO,EAAE,OAAO,CAAC6I,MAAWA,EAAO,eAAeC,GAAY,QAAQ,CAAC,GAI/GC,IAAwB5I;AAAA,MAAS,MACrCyI,EAAW,MAAM,IAAI,CAACC,MAAY7E,EAAA;AAAA,QAChC,QAAA6E;AAAA,SACGpB,GAA8BoB,EAAO,OAAOjC,EAAW,KAAK,EAC/D;AAAA,IAAA;AAGJ,aAASoC,EAAmBvN,GAAkD;AAC5E,UAAIA,EAAQ,eAAgB,QAAO;AACnC,UAAIA,EAAQ,cAAe,QAAO;AAAA,IAEpC;;;AA3DU,aAAAmN,EAAA,MAAW,SAAM,UADzBlI,EA4BM,OAAA;AAAA;QA1BJ,WAAM,uBAAqB;AAAA,UACK,gBAAAT,EAAA,6BAA6BA,EAAA,gBAAW;AAAA,yBAAgDA,EAAA,gBAAW;AAAA,QAAA;;SAKnIgJ,EAAA,EAAA,GAAAvI,EAmBQE,IAAA,MAAAsI,GAlBkBH,EAAA,OAAqB,CAArCF,GAAQM,OADlBF,EAAA,GAAA3I,EAmBQ8I,GAnBRC,EAmBQ;AAAA,UAjBL,KAAKF;AAAA,UACL,SAASN,EAAO,aAAatI,EAAAyF,EAAA,EAAmB,SAAM,UAAA;AAAA,UACtD,OAAOgD,EAAmBH,CAAM;AAAA,UAChC,UAAQ,CAAGA,EAAO,OAAO,oBAAoBA,EAAO,OAAO;AAAA,UAC3D,SAASA,EAAO,OAAO;AAAA,UACvB,WAAW;AAAA,UACX,MAAM5I,EAAA;AAAA,UACN,OAAK;AAAA,YAAsB,UAAA4I,EAAO,OAAO,eAAetI,EAAAuI,EAAA,EAAY;AAAA,YAA2B,WAAAD,EAAO,OAAO,eAAetI,EAAAuI,EAAA,EAAY;AAAA,UAAA;AAAA,WAIjI,EAAA,SAAA,MAAAD,EAAO,kBAAgB;AAAA,UAC9B,SAAKS,GAAA,CAAQC,MAAsBV,EAAO,OAAO,QAAQU,CAAK,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;qBAE/D,MAAsD;AAAA,YAAnCV,EAAO,aAA1BvI,EAAsDC,EAAAM,CAAA,GAAA;AAAA;cAArB,MAAMgI,EAAO;AAAA,YAAA;YAClCA,EAAO,QAAQA,EAAO,SAAlCI,EAAA,GAAAvI,EAAiE,QAAjE2E,EAAiE;YACrDwD,EAAO,cAAnBnI,EAAmD,QAAA8I,IAAAC,EAAtBZ,EAAO,KAAK,GAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACF/C,UAAM7I,IAAQC,GAGRiE,IAAQC,GAER,EAAE,cAAAuF,GAAc,YAAA3G,GAAY,OAAAK,GAAO,YAAAR,GAAY,SAAAN,GAAS,OAAA1F,GAAO,iBAAAoG,GAAiB,iBAAAoB,EAAA,IAAoB5C;AAAA,MACxGxB;AAAA,MACAkE;AAAA,IAAA,GAGIyF,IAAgBxJ,EAAS,MAAMH,EAAM,aAAapD,EAAM,SAAS,IAAI,GAErEgN,IAAYzJ,EAAS;AAAA,MACzB,MAAW;AACT,eAAOvD,EAAM;AAAA,MACf;AAAA,MACA,MAAM;AAAA,MAAC;AAAA,IAAA,CACR;AAED,aAASiN,IAAS;AAChB,YAAMC,IAASC,GAAMnN,EAAM,KAAK;AAChC,MAAIkN,MAAW,KACblN,EAAM,QAAQoD,EAAM,YAAY,OAAO,KAEvCpD,EAAM,QAAQkN,MAAW;AAAA,IAE7B;;;aAjDUvJ,EAAAwC,CAAA,KADRkG,KAAA3I,EAca0J,GAdbX,EAca;AAAA;oBAZFO,EAAA;AAAA,sDAAAA,EAAS,QAAAK;AAAA,QAClB,SAAQ;AAAA,QACP,OAAK,CAAG1J,EAAAmJ,CAAA,GAAcnJ,EAAAyC,CAAA,CAAe;AAAA,QACrC,eAAe2G,EAAA;AAAA,QACf,eAAa;AAAA,QACb,cAAY;AAAA,MAAA,GACLpJ,EAAA6D,CAAA,GAAe;AAAA,QACtB,UAAQyF;AAAA,QACR,+BAAMvH,EAAA,QAAO;AAAA,MAAA;QAEH,OAAKqC,EAAa,CAAuEM,MAAzE;AAAA,UAAEJ,EAAuEtE,EAAA2E,EAAA,GAAA;AAAA,YAA5D,cAAY;AAAA,YAAO,MAAMD;AAAA,YAAmB,OAAO1E,EAAA6C,CAAA;AAAA,UAAA;;QAChF,SAAOuB,EAAe,CAAyD,EAApE,SAAAC,QAAO;AAAA,UAAIC,EAAyDtE,EAAAuE,EAAA,GAAA;AAAA,YAAzC,SAAAF;AAAA,YAAmB,QAAQrE,EAAAqC,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACmBhF,UAAM5C,IAAQC,GAIRiE,IAAQC,GAER,EAAE,cAAAuF,GAAc,YAAA3G,GAAY,OAAAK,GAAO,YAAAR,GAAY,SAAAN,GAAS,OAAA1F,GAAO,iBAAAoG,GAAiB,iBAAAoB,EAAA,IAAoB5C;AAAA,MACxGxB;AAAA,MACAkE;AAAA,IAAA,GAEIgG,IAAgBxK,EAAI,EAAK,GAEzByK,IAAQhK,EAAgD,MAAM;AAAA,MAClE,CAAChF,MACK6E,EAAM,WACN,CAAC7E,KAAO6E,EAAM,aAEJ,oEACD,KAAK7E,CAAG,IAHe,KAGJ;AAAA,IAClC,CACD;;;aAnDSoF,EAAAwC,CAAA,KADRkG,KAAA3I,EAuBe8J,GAvBff,EAuBe;AAAA;oBArBJ9I,EAAA3D,CAAA;AAAA,8DAAAA,EAAK,QAAAqN,IAAA;AAAA,QACb,OAAK,CAAG1J,EAAAmJ,CAAA,GAAcnJ,EAAAyC,CAAA,CAAe;AAAA,QACrC,WAAW/C,EAAA;AAAA,QACZ,MAAK;AAAA,QACJ,OAAOkK,EAAA;AAAA,MAAA,GACA5J,EAAA6D,CAAA,GAAe;AAAA,QACtB,+BAAM9B,EAAA,QAAO;AAAA,MAAA;QAEH,OAAKqC,EAAa,CAA6CM,MAA/C;AAAA,UAAEJ,EAA6CtE,EAAA2E,EAAA,GAAA;AAAA,YAAlC,MAAMD;AAAA,YAAY,OAAO1E,EAAA6C,CAAA;AAAA,UAAA;;QACtD,SAAOuB,EAAe,CAAyD,EAApE,SAAAC,QAAO;AAAA,UAAIC,EAAyDtE,EAAAuE,EAAA,GAAA;AAAA,YAAzC,SAAAF;AAAA,YAAmB,QAAQrE,EAAAqC,CAAA;AAAA,UAAA;;QACjE,mBACT,MAGE;AAAA,UAHFwC,GAGE,OAAA;AAAA,YAFA,OAA6EiF,GAAA,CAA7E,EAAA,OAAA,QAAA,QAAA,QAAA,iBAAA,OAAA,QAAA,oBAA6E,EAAA,iBAClD9J,EAAA3D,CAAA,GAAK,CAAA;AAAA,UAAA;;QAGzB,WACT,MAES;AAAA,UAFTiI,EAESyF,GAAA;AAAA,wBAFQJ,EAAA;AAAA,0DAAAA,EAAa,QAAAD;AAAA,YAAG,0BAAwB;AAAA,YAAO,WAAU;AAAA,UAAA;uBACxE,MAA8C;AAAA,cAA9CpF,EAA8C0F,GAAA;AAAA,4BAArBhK,EAAA3D,CAAA;AAAA,sEAAAA,EAAK,QAAAqN,IAAA;AAAA,gBAAE,MAAK;AAAA,cAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC6E7C,UAAMjK,IAAQC,GAQRiE,IAAQC,GAERqG,IAAgBrK,EAAS;;AAAM,cAAAgD,IAAAnD,EAAM,WAAN,OAAAmD,IAAgBmB,EAAM7E,GAAqB,cAAc;AAAA,KAAC,GACzFgL,IAAiBtK,EAAS,MAAA;;AAAM,cAAA+C,KAAAC,IAAAqH,EAAc,MAAM,YAApB,gBAAArH,EAA6B,iBAA7B,OAAAD,IAA6C;AAAA,KAAC,GAC9E,EAAE,SAAAS,GAAS,cAAA+F,GAAc,SAAApH,GAAS,OAAA1F,GAAO,iBAAAwH,MAAoB5C,GAA4BxB,GAAOkE,CAAK,GACrG,EAAE,WAAAwG,GAAW,mBAAAC,GAAmB,mBAAAC,EAAA,IAAsBC,GAAO7K,CAAK,GAElE8K,IAAWpL,EAAI,EAAE,GACjBqL,IAAgB5K,EAAS;AAAA,MAC7B,MAAM;AACJ,eAAOmE,EAAMwG,CAAQ,MAAM;AAAA,MAC7B;AAAA,MACA,IAAI7I,GAAmB;AACrB,QAAA6I,EAAS,QAAQ7I,IAAW,SAAS;AAAA,MACvC;AAAA,IAAA,CACD,GACK+I,IAAgB7K,EAAS;AAAA,MAC7B,MAAM;AACJ,eAAOmE,EAAMwG,CAAQ,MAAM;AAAA,MAC7B;AAAA,MACA,IAAI7I,GAAmB;AACrB,QAAA6I,EAAS,QAAQ7I,IAAW,SAAS;AAAA,MACvC;AAAA,IAAA,CACD,GAEKgJ,IAAc,CAAC9P,MAAc,GAAGuB,GAAOvB,GAAK,YAAY,CAAC,IAAIuB,GAAOvB,GAAK,OAAO,CAAC,OAEjF+P,IAAexL,EAAmB,IAAI;AAC5C,aAASyL,EAAgBC,GAA4BC,GAAuB;AAC1E,UAAID,KAAe;AACjB,QAAAF,EAAa,QAAQ;AAAA,eACZG,MAAkB;AAE3B,YAAI/G,EAAMoG,CAAS,MAAM;AACvB,UAAAQ,EAAa,QAAQD,EAAY,oBAAI,KAAA,CAAM,GAC3CE,EAAgB,IAAIC,CAAW,IAAI,CAAC;AAAA,aAC/B;AACL,gBAAMjQ,IAAM8P,EAAY,IAAI,KAAKG,CAAW,CAAC;AAC7C,UAAAD,EAAgBhQ,GAAK,CAAC,GACtBgQ,EAAgBhQ,GAAK,CAAC;AAAA,QACxB;AAAA,WACK;AACL,QAAI+P,EAAa,SAAS,SAAMA,EAAa,QAAQD,EAAY,oBAAI,MAAM;AAC3E,cAAMK,IAAMJ,EAAa,MAAM,MAAM,OAAO,GACtCK,IAAKH,EAAa,MAAM,OAAO;AACrC,QAAAE,EAAID,CAAa,IAAIE,EAAGF,CAAa,GACrCH,EAAa,QAAQD,EAAY,oBAAI,KAAK,GAAGK,EAAI,CAAC,CAAC,IAAIA,EAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAE1EhH,EAAMoG,CAAS,MAAM,SAAQ9N,EAAM,QAAQ0O,EAAI,CAAC,IAC3ChH,EAAMoG,CAAS,MAAM,SAAQ9N,EAAM,QAAQ0O,EAAI,CAAC,IACpD1O,EAAM,QAAQ0H,EAAM4G,CAAY,IAAIxO,GAAO,oBAAI,KAAA,GAAQ,KAAK;AAAA,MACnE;AAAA,IACF;AACA,IAAA+L,GAAM7L,GAAO,CAACqF,MAA4BkJ,EAAgBlJ,GAAU,EAAE,GAAG,EAAE,WAAW,IAAM;AAE5F,UAAMuJ,IAAcrL,EAAS;AAAA,MAC3B,MAAM;AACJ,cAAMsL,IAASnH,EAAM4G,CAAY;AACjC,YAAIO,KAAU,KAAM,QAAO;AAC3B,cAAMC,IAAM,IAAI,KAAKD,CAAM;AAC3B,eAAQ,OAAO,MAAMC,EAAI,QAAA,CAAS,IAAU,OAANA;AAAA,MACxC;AAAA,MACA,IAAIzJ,GAAgB;AAClB,QAAAkJ,EAAgBF,EAAYhJ,CAAQ,GAAG,CAAC;AAAA,MAC1C;AAAA,IAAA,CACD,GAEK0J,IAAoBxL,EAAS;AAAA,MACjC,MAAM;AACJ,cAAMhF,IAAMmJ,EAAM4G,CAAY;AAC9B,eAAI/P,KAAO,OAAa,KACZA,EAAI,MAAM,OAAO,EAClB,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,MAC5B;AAAA,MACA,IAAI8G,GAAkB;AACpB,QAAAkJ,EAAgB,IAAIlJ,CAAQ,IAAI,CAAC;AAAA,MACnC;AAAA,IAAA,CACD,GAEK2J,IAAgBzL,EAAS;AAAA,MAC7B,MAAM;AACJ,cAAM0L,IAAMvH,EAAMkH,CAAW;AAC7B,eAAIK,KAAO,OAAa,KACjBnP,GAAOmP,GAAKvH,EAAMqG,CAAiB,GAAG,EAAE,QAAQH,EAAc,OAAO;AAAA,MAC9E;AAAA,MACA,IAAIvI,GAAkB;AACpB,YAAI;AACF,gBAAM6J,IAAIC,GAAM9J,GAAUqC,EAAMqG,CAAiB,GAAG,oBAAI,KAAA,GAAQ,EAAE,QAAQH,EAAc,OAAO;AAC/F,UAAAW,EAAgBF,EAAYa,CAAC,GAAG,CAAC;AAAA,QACnC,SAASvD,GAAK;AACZ,kBAAQ,MAAMA,CAAG;AAAA,QACnB;AAAA,MACF;AAAA,IAAA,CACD,GAEKyD,IAAgB7L,EAAS;AAAA,MAC7B,MAAM;AACJ,cAAM0L,IAAMvH,EAAMkH,CAAW;AAC7B,eAAIK,KAAO,OAAa,KACjBnP,GAAOmP,GAAKvH,EAAMsG,CAAiB,GAAG,EAAE,QAAQJ,EAAc,OAAO;AAAA,MAC9E;AAAA,MACA,IAAIvI,GAAkB;AACpB,cAAM6J,IAAI7J,EAAS,MAAM,4BAA4B;AACrD,YAAI6J,KAAK,KAAM;AACf,YAAIG,IAAOC,GAASJ,EAAE,CAAC,CAAC;AACxB,cAAMK,IAASD,GAASJ,EAAE,CAAC,CAAC;AAC5B,QAAIM,GAAMH,CAAI,KAAKG,GAAMD,CAAM,MAC3BL,EAAE,CAAC,KAAKA,EAAE,CAAC,EAAE,YAAA,MAAkB,QAAQG,IAAO,OAAIA,KAAQ,KAC9Dd,EAAgB,IAAIc,EAAK,SAAA,EAAW,SAAS,GAAG,GAAG,CAAC,IAAIE,EAAO,WAAW,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC;AAAA,MACpG;AAAA,IAAA,CACD;;;kBAvNC7L,EAsFaC,EAAA8L,EAAA,GAtFbhD,EAsFarJ,GArFE;AAAA,QACZ,OAAOO,EAAAmJ,CAAA;AAAA,QACP,WAAWzJ,EAAA;AAAA,QACX,2CAAarD,EAAA,QAAK;AAAA,QAClB,kCAAM0F,EAAA,QAAO;AAAA,MAAA;QAEH,SAAOqC,EAChB,CA4EMQ,OA7EqB;AAAA,UAC3BC,GA4EM,OAAA;AAAA,YA3EH,OAAKzE,GAAA;AAAA;;cAA6E,CAAA,SAAA,YAAA,EAAA,SAASJ,EAAA6D,CAAA,EAAgB,OAAO,IAAI,SAAS;AAAA;cAAmD7D,EAAAoD,CAAA;AAAA,YAAA;;YAStJ,CAAA,QAAA,UAAA,EAAA,SAASpD,EAAAmK,CAAA,CAAS,KAD/CzB,EAAA,GAAA3I,EAmCe8J,GAnCff,EAmCe;AAAA;0BAjCJuC,EAAA;AAAA,4DAAAA,EAAa,QAAA3B;AAAA,cACtB,OAAA,EAAA,aAAA,IAAA;AAAA,cACA,SAAQ;AAAA,cACR,SAAQ;AAAA,cACP,WAAW;AAAA,cACX,gBAAc;AAAA,cACd,UAAU1J,EAAA6D,CAAA,EAAgB;AAAA,cAC1B,UAAU7D,EAAA6D,CAAA,EAAgB;AAAA,cAC1B,MAAI,GAAK7D,EAAA6D,CAAA,EAAgB,IAAI;AAAA,cAC7B,aAAa7D,EAAA6D,CAAA,EAAgB;AAAA,YAAA,GACtBnE,EAAA,kBAAgB;AAAA,cACvB,gCAAO6K,EAAA,QAAQ;AAAA,cACf,qCAAeA,EAAA,QAAQ,QAAA,CAAA,OAAA,CAAA;AAAA,cACvB,SAAK,CAAAb,MAAE9E,GAAU,MAAA;AAAA,cACjB,QAAI,CAAA8E,MAAE9E,GAAU,KAAA;AAAA,YAAI;cAEV,WACT,MAcS;AAAA,gBAdTN,EAcSyF,GAAA;AAAA,8BAdQS,EAAA;AAAA,gEAAAA,EAAa,QAAAd;AAAA,kBAAG,0BAAwB;AAAA,kBAAO,WAAU;AAAA,gBAAA;6BACxE,MAYiB;AAAA,oBAZjBpF,EAYiByH,GAAA;AAAA,kCAZQd,EAAA;AAAA,oEAAAA,EAAW,QAAAvB;AAAA,sBAAG,iCAAQa,EAAA,QAAQ;AAAA,sBAAQ,+BAAMA,EAAA,QAAQ;AAAA,oBAAA;sBAChE,SAAOnG,EAChB,CAQgB,EAAA,OATW4H,GAAY,SAAAC,QAAO;AAAA,wBAC9C3H,EAQgB4H,GAAA;AAAA,0BAPL,YAAAF,EAAW;AAAA,0BAAX,uBAAA,CAAAtC,MAAAsC,EAAW,QAAKtC;AAAA,0BACxB,eAAa;AAAA,0BACb,qBAAmBQ,EAAA;AAAA,0BACnB,wBAAsB;AAAA,0BACtB,aAAW;AAAA,wBAAA;0BAED,WAAQ,MAA2B;AAAA,6BAA3BxB,KAAA3I,EAA2BS,GAAXyL,CAAO,CAAA;AAAA,0BAAA;;;;;;;;;;;;YASzB,CAAA,QAAA,UAAA,EAAA,SAASjM,EAAAmK,CAAA,CAAS,KAD/CzB,EAAA,GAAA3I,EA6Be8J,GA7Bff,EA6Be;AAAA;0BA3BJ2C,EAAA;AAAA,8DAAAA,EAAa,QAAA/B;AAAA,cACtB,OAAA,EAAA,aAAA,IAAA;AAAA,cACA,SAAQ;AAAA,cACR,SAAQ;AAAA,cACP,WAAW;AAAA,cACX,gBAAc;AAAA,cACd,UAAU1J,EAAA6D,CAAA,EAAgB;AAAA,cAC1B,UAAU7D,EAAA6D,CAAA,EAAgB;AAAA,cAC1B,MAAI,GAAK7D,EAAA6D,CAAA,EAAgB,IAAI;AAAA,cAC7B,aAAa7D,EAAAmK,CAAA,MAAS,SAAcnK,KAAgB,cAAc;AAAA,YAAA,GAC3DN,EAAA,kBAAgB;AAAA,cACvB,kCAAO6K,EAAA,QAAQ;AAAA,cACf,uCAAeA,EAAA,QAAQ,QAAA,CAAA,OAAA,CAAA;AAAA,cACvB,SAAK,CAAAb,MAAE9E,GAAU,MAAA;AAAA,cACjB,QAAI,CAAA8E,MAAE9E,GAAU,KAAA;AAAA,YAAI;cAEV,WACT,MAQS;AAAA,gBARTN,EAQSyF,GAAA;AAAA,8BARQU,EAAA;AAAA,kEAAAA,EAAa,QAAAf;AAAA,kBAAG,0BAAwB;AAAA,kBAAO,WAAU;AAAA,gBAAA;6BACxE,MAMiB;AAAA,oBANjBpF,EAMiByH,GAAA;AAAA,kCANQX,EAAA;AAAA,oEAAAA,EAAiB,QAAA1B;AAAA,sBAAG,iCAAQa,EAAA,QAAQ;AAAA,sBAAQ,+BAAMA,EAAA,QAAQ;AAAA,oBAAA;sBACtE,SAAOnG,EAChB,CAEgB,EAAA,OAHW4H,GAAY,SAAAC,QAAO;AAAA,wBAC9C3H,EAEgB6H,GAAA;AAAA,0BAFQ,YAAAH,EAAW;AAAA,0BAAX,uBAAA,CAAAtC,MAAAsC,EAAW,QAAKtC;AAAA,0BAAG,eAAa;AAAA,0BAAM,QAAO;AAAA,wBAAA;0BACxD,WAAQ,MAA2B;AAAA,6BAA3BhB,KAAA3I,EAA2BS,GAAXyL,CAAO,CAAA;AAAA,0BAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtB9D,UAAMxM,IAAQC,GAGRiE,IAAQC,GAER,EAAE,SAAAR,GAAS,cAAA+F,GAAc,SAAApH,GAAS,OAAA1F,GAAO,iBAAAwH,MAAoB5C,GAAaxB,GAAOkE,CAAK,GAGtFyI,IAAcjN,EAAiB,IAAI,GACnCkN,IAAWlN,EAAI,CAAC,GAChBmN,IAAenN,EAAI,KAAK,MAAM,KAAK,OAAA,IAAW,GAAI,CAAC,GACnDoN,IAAepN,EAAA,GACfqN,IAAU5M,EAAS,MAAMwM,EAAY,SAASC,EAAS,QAAQ,GAAG,GAElEI,IAAY7M,EAAS,MACrB,CAAC2M,EAAa,SAASlQ,EAAM,QACxBoD,EAAM,aAER,EACR;AAED,aAASiN,IAAiB;AACxB,MAAArQ,EAAM,QAAQ,MACdgQ,EAAS,QAAQ,GACjBC,EAAa,QAAQ,KAAK,MAAM,KAAK,OAAA,IAAW,GAAI,GACpDF,EAAY,QAAQ,MACpBG,EAAa,QAAQ,MACrB1E,EAAA;AAAA,IACF;AAEA,aAAS8E,EAAepN,GAAmB;AACzC,MAAAmN,EAAA,GACAvE,GAAiB1I,EAAM,SAASF,CAAS;AAAA,IAC3C;AAEA,UAAM,EAAE,oBAAAuI,GAAoB,oBAAAD,EAAA,IAAuBL;AAAA,MACjDnL;AAAA,MACA,MAAMoD,EAAM;AAAA,MACZ,MAAMA,EAAM;AAAA,MACZkN;AAAA,IAAA;AAGF,aAAeC,IAAa;AAAA,aAAAC,GAAA;AAC1B,QAAIxQ,EAAM,UACR,MAAMoD,EAAM,MAAM,OAAOpD,EAAM,KAAK,IAGtCqQ,EAAA;AAAA,MACF;AAAA;AAEA,aAAeI,EAAOC,GAAY;AAAA,aAAAF,GAAA;AAChC,QAAAR,EAAS,QAAQ,IACjBD,EAAY,QAAQW;AAEpB,YAAI;AACF,UAAA1Q,EAAM,QAAQ,MAAMoD,EAAM,MAAM,OAAOsN,GAAM,CAACC,GAAgBC,MAAkB;AAC9E,YAAAZ,EAAS,QAAQ,KAAK,MAAOW,IAAS,MAAOC,CAAK;AAAA,UACpD,CAAC,GACDZ,EAAS,QAAQ,KACjBvE,EAAA;AAAA,QACF,SAASE,GAAK;AACZ,gBAAAqE,EAAS,QAAQ,GACjBD,EAAY,QAAQ,MACpBE,EAAa,QAAQ,KAAK,MAAM,KAAK,OAAA,IAAW,GAAI,GACpDC,EAAa,QAAQ,MACfvE;AAAA,QACR;AAAA,MACF;AAAA;AAEA,aAASkF,EAAiBH,GAA0B;AAClD,MAAIA,MACE,MAAM,QAAQA,CAAI,IACpB,QAAQ,MAAM,kDAAkD,IAEhED,EAAOC,CAAI;AAAA,IAGjB;;;AApIE,aAAArE,EAAA,GAAA3I,EAsCaC,EAAA8L,EAAA,GAtCbhD,EAsCavB,GAAA9D,EAAA,IArCEhE,IAqCF,WArCS+M,EAAA,UAAO;AAAA,QAC1B,OAAOxM,EAAAmJ,CAAA;AAAA,QACR,WAAA;AAAA,QACC,iBAAayD;AAAA,QACb,+BAAM7K,EAAA,QAAO;AAAA,MAAA;QAEH,mBAAc,MAAoC;AAAA,UAApCuC,EAAoCtE,EAAAM,CAAA,GAAA,EAAvB,MAAK,iBAAe;AAAA,QAAA;QAC/C,UACT,MAIE;AAAA,UAHM8L,EAAA,SAAeC,EAAA,QAAQ,YAD/BtM,EAIEoN,GAAA;AAAA;YAFC,eAAad,EAAA;AAAA,YACb,eAAeA,EAAA,UAAQ;AAAA,UAAA;;QAGjB,SAAOjI,EAChB,CAoBMQ,MArBqB;AAAA,UAC3BC,GAoBM,OAAA;AAAA,YApBD,OAAKzE,GAAA,CAAC,mDAA0DJ,EAAAoD,CAAA,CAAO,CAAA;AAAA,UAAA;YAC1EkB,EAkBE8I,GAlBFtE,EAkBE;AAAA,0BAjBSyD,EAAA;AAAA,4DAAAA,EAAY,QAAA7C;AAAA,cACpB,OAAO+C,EAAA;AAAA,cACR,SAAQ;AAAA,cACR,SAAQ;AAAA,cACP,UAAUzM,EAAA6D,CAAA,EAAgB;AAAA,cAC1B,UAAU7D,EAAA6D,CAAA,EAAgB;AAAA,cAC1B,MAAM7D,EAAA6D,CAAA,EAAgB;AAAA,cACtB,gBAAc;AAAA,cACd,aAAW;AAAA,cACX,UAAU;AAAA,cACV,OAAOuI,EAAA,SAAeC,EAAA,QAAQ,MAAA,uBAAA;AAAA,cAC9B,WAAW;AAAA,YAAA,GACJ3M,EAAA,kBAAgB;AAAA,cACxB,gBAAa;AAAA,cACZ,uBAAoBwN;AAAA,cACpB,SAAK,CAAAxD,MAAE9E,EAAU,MAAA;AAAA,cACjB,QAAI,CAAA8E,MAAE9E,EAAU,KAAA;AAAA,YAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACyC/B,UAAMnF,IAAQC,GAGRiE,IAAQC,GAER,EAAE,SAAAR,GAAS,cAAA+F,GAAc,SAAApH,GAAS,OAAA1F,GAAO,iBAAAwH,MAAoB5C,GAAaxB,GAAOkE,CAAK,GACtF0J,IAAIhI,IACJiI,IAAcC,GAAA,GAGdnB,IAAcjN,EAAiB,IAAI,GACnCkN,IAAWlN,EAAI,CAAC,GAChBqO,IAAYrO,EAAmB,IAAI,GACnCsO,IAActO,EAAI,CAAC,GACnBuO,IAAevO,EAA6B,IAAI,GAEhDqN,IAAU5M,EAAS,MAAMwM,EAAY,SAASC,EAAS,QAAQ,GAAG,GAClEsB,IAAa/N,EAAS,MAAM,CAAC,EAAEiE,EAAgB,MAAM,YAAYA,EAAgB,MAAM,SAAS,GAChG+J,IAAahO,EAAS,MAAM6N,EAAY,QAAQ,CAAC,GACjDI,IAAajO,EAAwB,MAAA;;AAAM,cAAAgD,IAAA4K,EAAU,UAAV,OAAA5K,IAAoBvG,EAAM,QAASA,EAAM,QAAmB;AAAA,KAAK;AAElH,aAASyR,IAAkB;AACzB,MAAIN,EAAU,UACZ,IAAI,gBAAgBA,EAAU,KAAK,GACnCA,EAAU,QAAQ;AAAA,IAEtB;AAEA,aAASd,IAAiB;AACxB,MAAArQ,EAAM,QAAQ,MACdgQ,EAAS,QAAQ,GACjBD,EAAY,QAAQ,MACpB0B,EAAA,GACAjG,EAAA;AAAA,IACF;AAEA,aAAS8E,EAAepN,GAAmB;AACzC,MAAAmN,EAAA,GACAvE,GAAiB1I,EAAM,SAASF,CAAS;AAAA,IAC3C;AAEA,UAAM,EAAE,oBAAAuI,GAAoB,oBAAAD,EAAA,IAAuBL;AAAA,MACjDnL;AAAA,MACA,MAAMoD,EAAM;AAAA,MACZ,MAAMA,EAAM;AAAA,MACZkN;AAAA,IAAA;AAGF,IAAA1E,GAAgB,MAAM6F,GAAiB;AAEvC,aAAelB,IAAa;AAAA,aAAAC,GAAA;AAC1B,QAAIxQ,EAAM,UACR,MAAMoD,EAAM,MAAM,OAAOpD,EAAM,KAAK,IAGtCqQ,EAAA;AAAA,MACF;AAAA;AAEA,aAAeI,EAAOC,GAAY;AAAA,aAAAF,GAAA;AAChC,QAAAR,EAAS,QAAQ,IACjBD,EAAY,QAAQW,GACpBe,EAAA,GACAN,EAAU,QAAQ,IAAI,gBAAgBT,CAAI;AAE1C,YAAI;AACF,UAAA1Q,EAAM,QAAQ,MAAMoD,EAAM,MAAM,OAAOsN,GAAM,CAACC,GAAgBC,MAAkB;AAC9E,YAAAZ,EAAS,QAAQ,KAAK,MAAOW,IAAS,MAAOC,CAAK;AAAA,UACpD,CAAC,GACDZ,EAAS,QAAQ,KACjBvE,EAAA;AAAA,QACF,SAASE,GAAK;AACZ,gBAAAqE,EAAS,QAAQ,GACjBD,EAAY,QAAQ,MACpB0B,EAAA,GACM9F;AAAA,QACR;AAAA,MACF;AAAA;AAEA,aAAS+F,EAAWhB,GAAY;AAC9B,UAAI,CAACA,EAAK,KAAK,WAAW,QAAQ,GAAG;AACnC,gBAAQ,MAAM,gCAAgC;AAC9C;AAAA,MACF;AACA,MAAAD,EAAOC,CAAI;AAAA,IACb;AAEA,aAASiB,EAAehF,GAAc;;AACpC,YAAMlD,IAAQkD,EAAM,QACd+D,KAAOnK,KAAAkD,EAAM,UAAN,gBAAAlD,GAAc;AAC3B,MAAAkD,EAAM,QAAQ,IACViH,OAAiBA,CAAI;AAAA,IAC3B;AAEA,aAASkB,IAAc;AACrB,MAAIN,EAAW,UACfF,EAAY,SAAS;AAAA,IACvB;AACA,aAASS,IAAc;AACrB,MAAAT,EAAY,QAAQ,KAAK,IAAI,GAAGA,EAAY,QAAQ,CAAC;AAAA,IACvD;AACA,aAASU,GAAOnF,GAAkB;;AAEhC,UADAyE,EAAY,QAAQ,GAChBE,EAAW,MAAO;AACtB,YAAMZ,KAAOpK,MAAAC,IAAAoG,EAAM,iBAAN,gBAAApG,EAAoB,UAApB,gBAAAD,GAA4B;AACzC,MAAIoK,OAAiBA,CAAI;AAAA,IAC3B;;;AApLE,aAAArE,EAAA,GAAA3I,EAyDaC,EAAA8L,EAAA,GAzDbhD,EAyDavB,GAAA9D,EAAA,IAxDEhE,IAwDF,WAxDS+M,EAAA,UAAO;AAAA,QAC3B,OAAK,CAAC,kBACExM,EAAAmJ,CAAA,CAAY;AAAA,QACpB,WAAA;AAAA,QACC,iBAAayD;AAAA,QACb,+BAAM7K,EAAA,QAAO;AAAA,MAAA;QAEH,mBAAc,MAAgC;AAAA,UAAhCuC,EAAgCtE,EAAAM,CAAA,GAAA,EAAnB,MAAK,aAAW;AAAA,QAAA;QAC3C,UACT,MAIE;AAAA,UAHM8L,EAAA,SAAeC,EAAA,QAAQ,YAD/BtM,EAIEoN,GAAA;AAAA;YAFC,eAAad,EAAA;AAAA,YACb,eAAeA,EAAA,UAAQ;AAAA,UAAA;;QAGjB,SAAOjI,EAIhB,CAmCMQ,MAvCqB;AAAA,UAI3BC,GAmCM,OAAA;AAAA,YAlCJ,WAAM,oEAAkE,CAC/D7E,MAAO,EAAA,qBAAyB4N,EAAA,4BAAiCD,EAAA,MAAA,CAAU,CAAA,CAAA;AAAA,YACnF,gBAAmBM,GAAW,CAAA,SAAA,CAAA;AAAA,YAC9B,eAAkBA,GAAW,CAAA,SAAA,CAAA;AAAA,YAC7B,gBAAmBC,GAAW,CAAA,SAAA,CAAA;AAAA,YAC9B,WAAcC,IAAM,CAAA,SAAA,CAAA;AAAA,YACpB,4BAAD,MAAA;AAAA,YAAA,GAAW,CAAA,MAAA,CAAA;AAAA,UAAA;YAEXtJ,GAWE,SAAA;AAAA,cAVC,IAAI7E,EAAAsN,CAAA;AAAA,uBACD;AAAA,cAAJ,KAAII;AAAA,cACJ,MAAK;AAAA,cACL,QAAO;AAAA,cACP,OAAM;AAAA,cACL,UAAUC,EAAA;AAAA,cACV,MAAM3N,EAAA6D,CAAA,EAAgB;AAAA,cACtB,UAAQmK;AAAA,cACR,SAAK,CAAAtE,MAAE9E,EAAU,MAAA;AAAA,cACjB,QAAI,CAAA8E,MAAE9E,EAAU,KAAA;AAAA,YAAI;YAEViJ,EAAA,cAAb1N,EAMQ,SAAA;AAAA;cANkB,KAAKH,EAAAsN,CAAA;AAAA,cAAa,OAAM;AAAA,YAAA;cAChDhJ,EAIE/D,IAAA;AAAA,gBAHC,KAAKsN,EAAA;AAAA,gBACN,OAAM;AAAA,gBACL,OAAK/D,GAAEsC,EAAA,SAAeC,EAAA,QAAQ,MAAA,uBAAA,EAAA;AAAA,cAAA;+BAGnClM,EAGQ,SAAA;AAAA;cAHO,KAAKH,EAAAsN,CAAA;AAAA,cAAa,OAAM;AAAA,YAAA;cACrChJ,EAAwCtE,EAAAM,CAAA,GAAA,EAA3B,MAAK,qBAAmB;AAAA,cACrCuE,GAAkC,QAAA,MAAAqE,EAAzBlJ,EAAAqN,CAAA,EAAE,aAAa,GAAA,CAAA;AAAA,YAAA;YAEbQ,EAAA,UAAeF,EAAA,cAA5BxN,EAEQ,SAAA;AAAA;cAFiC,KAAKH,EAAAsN,CAAA;AAAA,cAAa,OAAM;AAAA,cAAwB,OAAOtN,EAAAqN,CAAA,EAAE;AAAA,YAAA;cAChG/I,EAAiCtE,EAAAM,CAAA,GAAA,EAApB,MAAK,cAAY;AAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBxC,UAAMb,IAAQC,GAWRiE,IAAQC,GAER,EAAE,cAAAuF,GAAc,YAAA3G,GAAY,OAAAK,GAAO,YAAAR,GAAY,SAAAN,GAAS,OAAA1F,GAAO,iBAAAoG,GAAiB,iBAAAoB,EAAA,IAAoB5C;AAAA,MACxGxB;AAAA,MACAkE;AAAA,IAAA,GAEI,EAAE,WAAAwG,GAAW,KAAAiE,GAAK,KAAAC,GAAK,WAAAC,GAAW,MAAAC,EAAA,IAASjE,GAAO7K,CAAK,GAEvD+O,IAAW5O,EAAS,MAAMuK,EAAU,UAAU,QAAQ,GACtDsE,IAAsB7O;AAAA,MAAS,MAClC4O,EAAS,QAAa,EAAE,KAAKzK,EAAMsK,CAAG,GAAG,KAAKtK,EAAMqK,CAAG,GAAG,WAAWrK,EAAMuK,CAAS,GAAG,MAAMvK,EAAMwK,CAAI,EAAA,IAAtF,CAAA;AAAA,IAAwF;;;aAnD/FvO,EAAAwC,CAAA,UAAXrC,EAqBM,OAAA;AAAA;QArBiB,OAAKC,GAAA,CAAC,sBAAoB,CAAUJ,EAAAmJ,CAAA,GAAcnJ,EAAAyC,CAAA,CAAe,CAAA,CAAA;AAAA,MAAA;QAE7E+L,EAAA,SAST9F,KAAA3I,EASiB2O,GATjB5F,EASiB;AAAA;sBAPN9I,EAAA3D,CAAA;AAAA,gEAAAA,EAAK,QAAAqN,IAAA;AAAA,UACd,SAAQ;AAAA,UACR,mBAAgB;AAAA,QAAA,GACHjG,IAAA,IAAAzD,EAAA6D,CAAA,IAAoB4K,EAAA,MAAmB,GAAA;AAAA,UAEzC,OAAKrK,EAAa,CAA6CM,MAA/C;AAAA,YAAEJ,EAA6CtE,EAAA2E,EAAA,GAAA;AAAA,cAAlC,MAAMD;AAAA,cAAY,OAAO1E,EAAA6C,CAAA;AAAA,YAAA;;UACtD,SAAOuB,EAAe,CAAyD,EAApE,SAAAC,QAAO;AAAA,YAAIC,EAAyDtE,EAAAuE,EAAA,GAAA;AAAA,cAAzC,SAAAF;AAAA,cAAmB,QAAQrE,EAAAqC,CAAA;AAAA,YAAA;;;mCAlB9EqG,KAAA3I,EASe8J,GATff,EASe;AAAA;sBAPJ9I,EAAA3D,CAAA;AAAA,gEAAAA,EAAK,QAAAqN,IAAA;AAAA,UACb,MAAM1J,EAAAmK,CAAA;AAAA,QAAA,GACCnK,EAAA6D,CAAA,GAAe;AAAA,UACtB,+BAAM9B,EAAA,QAAO;AAAA,QAAA;UAEH,OAAKqC,EAAa,CAA6CM,MAA/C;AAAA,YAAEJ,EAA6CtE,EAAA2E,EAAA,GAAA;AAAA,cAAlC,MAAMD;AAAA,cAAY,OAAO1E,EAAA6C,CAAA;AAAA,YAAA;;UACtD,SAAOuB,EAAe,CAAyD,EAApE,SAAAC,QAAO;AAAA,YAAIC,EAAyDtE,EAAAuE,EAAA,GAAA;AAAA,cAAzC,SAAAF;AAAA,cAAmB,QAAQrE,EAAAqC,CAAA;AAAA,YAAA;;;;;;;ICHrEsM,KAAiBC,GAAU,OAAO;AAAA,EAC7C,MAAM;AAAA,EACN,sBAAsB;AACpB,WAAO;AAAA,MACL;AAAA,QACE,OAAO,CAAC,aAAa,WAAW,cAAc,WAAW;AAAA,QACzD,YAAY;AAAA,UACV,OAAO;AAAA,YACL,SAAS;AAAA,YACT,WAAW,CAACC,MAAyBA,EAAQ,aAAa,OAAO;AAAA,YACjE,YAAY,CAACC,MAAqCA,EAAW,QAAQ,EAAE,OAAOA,EAAW,UAAU,CAAA;AAAA,UAAC;AAAA,QACtG;AAAA,MACF;AAAA,IACF;AAAA,EAEJ;AACF,CAAC;AAED,SAASC,GAAeC,GAAcC,GAAmB;AACvD,SAAOC,GAAK,OAAO;AAAA,IACjB,MAAAF;AAAA,IACA,YAAY;AACV,aAAO,CAAC,EAAE,KAAK,QAAQC,CAAS,IAAI;AAAA,IACtC;AAAA,IACA,WAAW,EAAE,gBAAAE,KAAkB;AAC7B,aAAO,CAAC,QAAQC,GAAgBD,GAAgB,EAAE,OAAOF,EAAA,CAAW,GAAG,CAAC;AAAA,IAC1E;AAAA,EAAA,CACD;AACH;AAGO,MAAMI,KAASN,GAAe,UAAU,QAAQ,GAE1CO,KAAUP,GAAe,WAAW,SAAS,GAkB7CQ,KAAyB;AAAA,EACpC,EAAE,KAAK,mBAAmB,MAAM,WAAW,OAAO,GAAG,WAAW,WAAA;AAAA,EAChE,EAAE,KAAK,SAAS,MAAM,WAAW,OAAO,GAAG,WAAW,iBAAA;AAAA,EACtD,EAAE,KAAK,YAAY,MAAM,WAAW,OAAO,GAAG,WAAW,oBAAA;AAAA,EACzD,EAAE,KAAK,WAAW,MAAM,aAAa,WAAW,WAAA;AAAA,EAChD,EAAE,KAAK,aAAa,MAAM,cAAc,WAAW,aAAA;AAAA,EACnD,EAAE,KAAK,UAAU,MAAM,QAAQ,UAAU,SAAA;AAAA,EACzC,EAAE,KAAK,WAAW,MAAM,QAAQ,UAAU,UAAA;AAAA,EAC1C,EAAE,KAAK,YAAY,MAAM,aAAa,WAAW,6BAAA;AAAA,EACjD,EAAE,KAAK,cAAc,MAAM,aAAa,WAAW,+BAAA;AACrD;AAWA,SAASC,GAAUC,GAAgB;AACjC,QAAM,EAAE,OAAAC,MAAUD,GACZ,EAAE,OAAAE,MAAUD,EAAM;AACxB,SAAIC,EAAM,QAAQ,KAAKD,EAAM,IAAI,QAAQ,SAAS,IAAUC,IACrDD,EAAM,IAAI,QAAQ,KAAK,IAAI,GAAGA,EAAM,IAAI,QAAQ,IAAI,CAAC;AAC9D;AAEA,SAASE,GAAWH,GAAgB;AAClC,SAAOD,GAAUC,CAAM,EAAE;AAC3B;AAEA,SAASI,GAAeJ,GAAgBK,GAAkB;AACxD,QAAMC,IAAOP,GAAUC,CAAM;AAC7B,WAASO,IAAQD,EAAK,OAAOC,KAAS,GAAGA,KAAS;AAChD,QAAID,EAAK,KAAKC,CAAK,EAAE,KAAK,SAASF,EAAU,QAAOC,EAAK,KAAKC,CAAK;AAErE,SAAO;AACT;AAEO,SAASC,GAAcR,GAAgBS,GAAwB;AACpE,UAAQA,EAAI,MAAA;AAAA,IACV,KAAK,WAAW;AACd,YAAMC,IAAOP,GAAWH,CAAM;AAC9B,aAAOU,EAAK,KAAK,SAAS,aAAaA,EAAK,MAAM,UAAUD,EAAI,SAASC,EAAK,MAAM,UAAUD,EAAI;AAAA,IACpG;AAAA,IACA,KAAK,aAAa;AAChB,YAAMC,IAAOP,GAAWH,CAAM;AAC9B,aAAOU,EAAK,KAAK,SAAS,eAAeA,EAAK,MAAM,UAAUD,EAAI;AAAA,IACpE;AAAA,IACA,KAAK,aAAa;AAChB,YAAMC,IAAOP,GAAWH,CAAM;AAC9B,aAAOU,EAAK,KAAK,SAAS,eAAeA,EAAK,MAAM,UAAUD,EAAI;AAAA,IACpE;AAAA,IACA,KAAK,cAAc;AACjB,YAAMC,IAAON,GAAeJ,GAAQ,YAAY;AAChD,aAAO,CAAC,CAACU,KAAQA,EAAK,MAAM,UAAUD,EAAI;AAAA,IAC5C;AAAA,IACA,KAAK;AACH,aAAOT,EAAO,SAASS,EAAI,QAAQ;AAAA,IACrC;AACE,aAAO;AAAA,EAAA;AAEb;AAOO,SAASE,GAAWX,GAAgBS,GAAqB;AAC9D,QAAMG,IAAQZ,EAAO,MAAA,EAAQ,MAAA,GAOvB,EAAE,OAAAE,EAAA,IAAUF,EAAO,MAAM;AAK/B,UAJIS,EAAI,SAAS,UAAUP,EAAM,UAAU,KAAKF,EAAO,MAAM,IAAI,QAAQ,OAAO,KAC9EY,EAAM,iBAAiBb,GAAUC,CAAM,EAAE,GAAG,GAGtCS,EAAI,MAAA;AAAA,IACV,KAAK;AACH,MAAID,GAAcR,GAAQS,CAAG,MAAS,aAAA,EAAe,iBAAiB,aAAa,EAAE,OAAO,KAAA,CAAM,EAAE,IAAA,IAElGG,EAAM,QAAQ,WAAW,EAAE,OAAOH,EAAI,OAAO,EAAE,iBAAiB,WAAW,EAAE,OAAOA,EAAI,UAAA,CAAW,EAAE,IAAA;AAEvG;AAAA,IACF,KAAK;AACH,MAAID,GAAcR,GAAQS,CAAG,MAAS,aAAA,EAAe,iBAAiB,aAAa,EAAE,OAAO,KAAA,CAAM,EAAE,IAAA,IAC/FG,EAAM,eAAe,iBAAiB,aAAa,EAAE,OAAOH,EAAI,WAAW,EAAE,IAAA;AAClF;AAAA,IACF,KAAK;AACH,MAAID,GAAcR,GAAQS,CAAG,IAAGG,EAAM,gBAAA,EAAkB,IAAA,IAC/CR,GAAeJ,GAAQ,YAAY,IAC1CY,EAAM,iBAAiB,cAAc,EAAE,OAAOH,EAAI,UAAA,CAAW,EAAE,IAAA,IAC1DG,EAAM,cAAA,EAAgB,iBAAiB,cAAc,EAAE,OAAOH,EAAI,UAAA,CAAW,EAAE,IAAA;AACtF;AAAA,IACF,KAAK;AACH,MAAID,GAAcR,GAAQS,CAAG,MAAS,gBAAA,EAAkB,iBAAiB,aAAa,EAAE,OAAO,KAAA,CAAM,EAAE,IAAA,IAC9FN,GAAWH,CAAM,EAAE,KAAK,SAAS,cACxCY,EAAM,iBAAiB,aAAa,EAAE,OAAOH,EAAI,UAAA,CAAW,EAAE,IAAA,IACzDG,EAAM,aAAA,EAAe,iBAAiB,aAAa,EAAE,OAAOH,EAAI,UAAA,CAAW,EAAE,IAAA;AACpF;AAAA,IACF,KAAK;AACH,MAAAG,EAAM,WAAWH,EAAI,QAAQ,EAAE,IAAA;AAC/B;AAAA,EAEA;AAEN;ACrKO,SAASI,GAAcvD,GAA6B;AACzD,SAAO,IAAI,QAAQ,CAACwD,GAASC,MAAW;AACtC,UAAMC,IAAS,IAAI,WAAA;AACnB,IAAAA,EAAO,SAAS,MAAMF,EAAQE,EAAO,MAAgB,GACrDA,EAAO,UAAU,MAAMD,EAAOC,EAAO,KAAK,GAC1CA,EAAO,cAAc1D,CAAI;AAAA,EAC3B,CAAC;AACH;AAQO,SAAS2D,GAAkBC,GAA2C;AAC3E,MAAI,CAACA,EAAc,QAAO,CAAA;AAC1B,QAAMC,IAAgB,CAAA;AACtB,eAAM,KAAKD,EAAa,SAAS,CAAA,CAAE,EAAE,QAAQ,CAACE,MAAS;AACrD,QAAIA,EAAK,SAAS,QAAQ;AACxB,YAAM9D,IAAO8D,EAAK,UAAA;AAClB,MAAI9D,KAAQA,EAAK,KAAK,WAAW,QAAQ,KAAG6D,EAAM,KAAK7D,CAAI;AAAA,IAC7D;AAAA,EACF,CAAC,GACG6D,EAAM,WAAW,KACnB,MAAM,KAAKD,EAAa,SAAS,CAAA,CAAE,EAAE,QAAQ,CAAC5D,MAAS;AACrD,IAAIA,EAAK,KAAK,WAAW,QAAQ,KAAG6D,EAAM,KAAK7D,CAAI;AAAA,EACrD,CAAC,GAEI6D;AACT;AAEA,SAASE,GAAgBC,GAA4B;AACnD,MAAIhW,IAAQ;AACZ,SAAAgW,EAAS,QAAQ,CAACZ,MAAS;AACzB,IAAIA,EAAK,KAAK,SAAS,UAASpV,KAAS,IAChCoV,EAAK,QAAQ,SAAMpV,KAAS+V,GAAgBX,EAAK,OAAO;AAAA,EACnE,CAAC,GACMpV;AACT;AAEA,SAASiW,GAAoBD,GAAoBE,GAAgBC,GAAqC;AACpG,QAAMC,IAAqB,CAAA;AAC3B,SAAAJ,EAAS,QAAQ,CAACZ,MAAS;AACzB,IAAIA,EAAK,KAAK,SAAS,WAAWe,EAAO,QAAQD,EAAK,UACpDE,EAAS,KAAKhB,EAAK,KAAK,OAAO5I,GAAA9D,EAAA,IAAK0M,EAAK,QAAV,EAAiB,KAAKc,EAAKC,EAAO,KAAK,EAAA,IAAKf,EAAK,SAASA,EAAK,KAAK,CAAC,GACpGe,EAAO,SAAS,KACPf,EAAK,QAAQ,OACtBgB,EAAS,KAAKhB,EAAK,KAAKa,GAAoBb,EAAK,SAASc,GAAMC,CAAM,CAAC,CAAC,IAExEC,EAAS,KAAKhB,CAAI;AAAA,EAEtB,CAAC,GACMiB,GAAS,UAAUD,CAAQ;AACpC;AASO,SAASE,GAAwBC,GAAqC;AAC3E,SAAO,CAACC,GAAkBvI,GAAuBwI,MAA0B;AACzE,UAAMZ,IAAQF,GAAkB1H,EAAM,aAAa;AACnD,WAAI4H,EAAM,WAAW,IAAU,MAE/B5H,EAAM,eAAA,GAEN,QAAQ,IAAI4H,EAAM,IAAIN,EAAa,CAAC,EAAE,KAAK,CAACW,MAAS;;AACnD,UAAIH,GAAgBU,EAAM,OAAO,IAAI,GAAG;AACtC,cAAMC,IAAUT,GAAoBQ,EAAM,SAASP,GAAM,EAAE,OAAO,GAAG,GAC/DS,IAAW,IAAIC,GAAMF,GAASD,EAAM,WAAWA,EAAM,OAAO;AAClE,QAAAD,EAAK,SAASA,EAAK,MAAM,GAAG,iBAAiBG,CAAQ,EAAE,gBAAgB;AACvE;AAAA,MACF;AAEA,OAAA9O,IAAA0O,EAAA,MAAA,QAAA1O,EACI,QACD,QACA,cAAcqO,EAAK,IAAI,CAACW,OAAS,EAAE,MAAM,SAAS,OAAO,EAAE,KAAAA,EAAA,IAAQ,GACnE;AAAA,IACL,CAAC,GAEM;AAAA,EACT;AACF;ACtFO,MAAMC,KAAmBC,GAAK,OAAO;AAAA,EAC1C,MAAM;AAAA,EACN,gBAAgB;;AACd,WAAOvK,GAAA9D,EAAA,KACFb,IAAA,KAAK,WAAL,gBAAAA,EAAA,aADE;AAAA,MAEL,UAAU;AAAA,QACR,SAAS;AAAA,QACT,WAAW,CAACiM,MAAyBA,EAAQ,aAAa,UAAU;AAAA,QACpE,YAAY,CAACC,MAAqCA,EAAW,WAAW,EAAE,UAAUA,EAAW,aAAa,CAAA;AAAA,MAAC;AAAA,IAC/G;AAAA,EAEJ;AACF,CAAC;ACZM,SAASiD,GAAWC,GAA4B;AACrD,MAAIC;AACJ,MAAI;AACF,IAAAA,IAAS,IAAI,IAAID,CAAG;AAAA,EACtB,SAAQE,GAAA;AACN,WAAO;AAAA,EACT;AAEA,QAAMC,IAAOF,EAAO,SAAS,QAAQ,eAAe,EAAE;AAEtD,MAAIE,MAAS,eAAe;AAC1B,UAAMC,IAAKH,EAAO,aAAa,IAAI,GAAG;AACtC,QAAIG,EAAI,QAAO,iCAAiCA,CAAE;AAClD,UAAMC,IAAaJ,EAAO,SAAS,MAAM,oBAAoB;AAC7D,QAAII,EAAY,QAAO,iCAAiCA,EAAW,CAAC,CAAC;AACrE,UAAMC,IAAcL,EAAO,SAAS,MAAM,qBAAqB;AAC/D,WAAIK,IAAoB,iCAAiCA,EAAY,CAAC,CAAC,KAChE;AAAA,EACT;AAEA,MAAIH,MAAS,YAAY;AACvB,UAAMC,IAAKH,EAAO,SAAS,MAAM,CAAC;AAClC,WAAOG,IAAK,iCAAiCA,CAAE,KAAK;AAAA,EACtD;AAEA,MAAID,MAAS,aAAa;AACxB,UAAMC,IAAKH,EAAO,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,IAAA;AACtD,WAAOG,KAAM,QAAQ,KAAKA,CAAE,IAAI,kCAAkCA,CAAE,KAAK;AAAA,EAC3E;AAEA,SAAO;AACT;AAOO,MAAMG,KAAaC,GAAK,OAAO;AAAA,EACpC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,WAAW;AAAA,EACX,gBAAgB;AACd,WAAO;AAAA,MACL,KAAK,EAAE,SAAS,KAAA;AAAA,IAAK;AAAA,EAEzB;AAAA,EACA,YAAY;AACV,WAAO,CAAC,EAAE,KAAK,sBAAsB;AAAA,EACvC;AAAA,EACA,WAAW,EAAE,gBAAArD,KAAkB;AAC7B,WAAO;AAAA,MACL;AAAA,MACAC;AAAA,QACE;AAAA,UACE,OAAO;AAAA,UACP,aAAa;AAAA,UACb,OAAO;AAAA,UACP,iBAAiB;AAAA,QAAA;AAAA,QAEnBD;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ;AACF,CAAC;AC/DM,SAASsD,GAAcC,GAAoC;AAChE,QAAMC,IAAOxT,EAAI,CAAC;AAClB,MAAIyT;AAEJ,QAAMC,IAAgB,MAAM;AAC1B,IAAAF,EAAK,SAAS;AAAA,EAChB,GACMG,IAAO,CAACC,MAA6B;AACzC,IAAAH,KAAA,QAAAA,EAAO,IAAI,eAAeC,IAC1BD,IAAQG,GACRH,KAAA,QAAAA,EAAO,GAAG,eAAeC;AAAA,EAC3B;AAEA,SAAA3K,GAAMwK,GAAWI,GAAM,EAAE,WAAW,IAAM,GAC1C7K,GAAgB,MAAM6K,EAAK,MAAS,CAAC,GAE9BH;AACT;;;;;;;AC+UA,UAAMlT,IAAQC,GAER2N,IAAIhI,IAEJoK,IAAS7P,EAAS,MAAMH,EAAM,MAAM,GACpCkT,IAAOF,GAAchD,CAAM,GAC3BuD,IAAWpT,EAAS,MAAA;;AAAM,cAAC,GAACgD,IAAAnD,EAAM,WAAN,QAAAmD,EAAc;AAAA,KAAU,GAEpD8M,IAAQ9P,EAAS,MAAM;AAC3B,MAAK+S,EAAK;AACV,YAAMT,IAAIzS,EAAM;AAChB,aAAO;AAAA,QACL,SAAS,CAAC,EAACyS,KAAA,QAAAA,EAAG,MAAM;AAAA,QACpB,SAAS,CAAC,EAACA,KAAA,QAAAA,EAAG,MAAM;AAAA,QACpB,MAAM,CAAC,EAACA,KAAA,QAAAA,EAAG,SAAS;AAAA,QACpB,QAAQ,CAAC,EAACA,KAAA,QAAAA,EAAG,SAAS;AAAA,QACtB,MAAM,CAAC,EAACA,KAAA,QAAAA,EAAG,SAAS;AAAA,QACpB,YAAY,CAAC,EAACA,KAAA,QAAAA,EAAG,SAAS;AAAA,QAC1B,YAAY,CAAC,EAACA,KAAA,QAAAA,EAAG,SAAS;AAAA,QAC1B,aAAa,CAAC,EAACA,KAAA,QAAAA,EAAG,SAAS;AAAA,QAC3B,WAAW,CAAC,EAACA,KAAA,QAAAA,EAAG,SAAS,EAAE,WAAW;QACtC,aAAa,CAAC,EAACA,KAAA,QAAAA,EAAG,SAAS,EAAE,WAAW;QACxC,YAAY,CAAC,EAACA,KAAA,QAAAA,EAAG,SAAS,EAAE,WAAW;QACvC,cAAc,CAAC,EAACA,KAAA,QAAAA,EAAG,SAAS,EAAE,WAAW;QACzC,SAAS,CAAC,EAACA,KAAA,QAAAA,EAAG,SAAS;AAAA,QACvB,SAAS,CAAC,EAACA,KAAA,QAAAA,EAAG,MAAM,aAAa;AAAA,QACjC,SAAS,CAAC,EAACA,KAAA,QAAAA,EAAG,MAAM,aAAa;AAAA,MAAU;AAAA,IAE/C,CAAC,GAEKe,IAAiB;AAAA,MACrB,EAAE,OAAO,GAAG,OAAO5F,EAAE,UAAA;AAAA,MACrB,EAAE,OAAO,GAAG,OAAOA,EAAE,SAAA;AAAA,MACrB,EAAE,OAAO,GAAG,OAAOA,EAAE,SAAA;AAAA,MACrB,EAAE,OAAO,GAAG,OAAOA,EAAE,SAAA;AAAA,MACrB,EAAE,OAAO,GAAG,OAAOA,EAAE,SAAA;AAAA,MACrB,EAAE,OAAO,GAAG,OAAOA,EAAE,SAAA;AAAA,MACrB,EAAE,OAAO,GAAG,OAAOA,EAAE,SAAA;AAAA,IAAS;AAGhC,aAAS6F,EAAgBC,GAAe;;AAEtC,aADKR,EAAK,OACNQ,MAAU,IAAU,CAAC,GAACvQ,IAAA6M,EAAO,UAAP,QAAA7M,EAAc,SAAS,gBAC1C,CAAC,GAACD,IAAA8M,EAAO,UAAP,QAAA9M,EAAc,SAAS,WAAW,EAAE,OAAAwQ;IAC/C;AACA,UAAMC,IAAexT;AAAA,MACnB;;AAAM,gBAAA+C,KAAAC,IAAAqQ,EAAe,KAAK,CAACI,MAAWH,EAAgBG,EAAO,KAAK,CAAC,MAA7D,gBAAAzQ,EAAgE,UAAhE,OAAAD,IAAyE0K,EAAE;AAAA;AAAA,IAAA;AAGnF,aAASiG,EAAWH,GAAe;;AACjC,YAAM9C,KAAQzN,IAAA6M,EAAO,UAAP,gBAAA7M,EAAc,QAAQ;AACpC,MAAKyN,MACD8C,MAAU,IAAG9C,EAAM,aAAA,EAAe,IAAA,MAC3B,cAAc,EAAE,OAAA8C,EAAA,CAAuC,EAAE,IAAA;AAAA,IACtE;AAGA,UAAMI,IAAYhE;AAClB,aAASiE,EAAYtD,GAAkC;AACrD,aAAKyC,EAAK,OACH,CAAC,CAAClD,EAAO,SAASQ,GAAcR,EAAO,OAAOS,CAAG;AAAA,IAC1D;AAGA,UAAMuD,IAAUtU,EAAI,EAAE,GAChBuU,IAAmBvU,EAAI,EAAK;AAClC,aAASwU,IAAe;;AACtB,YAAMC,KAAQjR,KAAAC,IAAA6M,EAAO,UAAP,gBAAA7M,EAAc,cAAc,YAA5B,OAAAD,IAAuC,CAAA;AACrD,MAAA8Q,EAAQ,SAAQnQ,IAAAsQ,EAAM,SAAN,OAAAtQ,IAAc,IAC9BoQ,EAAiB,QAAQ,CAAC,CAACE,EAAM;AAAA,IACnC;AACA,aAASC,IAAY;;AACnB,MAAKJ,EAAQ,WACb7Q,IAAA6M,EAAO,UAAP,QAAA7M,EACI,QACD,QACA,gBAAgB,QAChB,QAAQ,EAAE,MAAM6Q,EAAQ,SACxB,iBAAiB,QAAQ,EAAE,UAAUC,EAAiB,QAAQ,SAAS,QACvE;AAAA,IACL;AACA,aAASI,IAAa;;AACpB,OAAAlR,IAAA6M,EAAO,UAAP,QAAA7M,EAAc,QAAQ,QAAQ,YAAY;AAAA,IAC5C;AAGA,UAAMmR,IAAW5U,EAAI,EAAE,GACjB6U,IAAa7U,EAAA;AACnB,aAAS8U,IAAqB;;AAC5B,MAAKF,EAAS,WACdnR,IAAA6M,EAAO,UAAP,QAAA7M,EAAc,QAAQ,QAAQ,SAAS,EAAE,KAAKmR,EAAS,MAAA,GAAS,OAChEA,EAAS,QAAQ;AAAA,IACnB;AACA,aAASG,IAAqB;;AAC5B,OAAAtR,IAAAoR,EAAW,UAAX,QAAApR,EAAkB;AAAA,IACpB;AACA,aAAeuR,EAAkBnL,GAAc;AAAA,aAAA6D,GAAA;;AAC7C,cAAME,KAAQnK,IAAAoG,EAAM,OAA4B,UAAlC,gBAAApG,EAA0C;AACxD,YAAI,CAACmK,EAAM;AACX,cAAM6E,IAAM,MAAMtB,GAAcvD,CAAI;AACpC,SAAApK,IAAA8M,EAAO,UAAP,QAAA9M,EAAc,QAAQ,QAAQ,SAAS,EAAE,KAAAiP,KAAO,OAC/C5I,EAAM,OAA4B,QAAQ;AAAA,MAC7C;AAAA;AAGA,UAAMoL,IAAWjV,EAAI,EAAE;AACvB,aAASkV,IAAmB;;AAC1B,UAAI,CAACD,EAAS,MAAO;AACrB,YAAMxC,IAAMG,GAAWqC,EAAS,KAAK,GAC/B/D,KAAQzN,IAAA6M,EAAO,UAAP,gBAAA7M,EAAc,QAAQ;AACpC,MAAKyN,MACDuB,IAAKvB,EAAM,cAAc,EAAE,MAAM,cAAc,OAAO,EAAE,KAAAuB,IAAI,CAAG,EAAE,IAAA,IAEnEvB,EACG,cAAc,EAAE,MAAM,QAAQ,MAAM+D,EAAS,OAAO,OAAO,CAAC,EAAE,MAAM,QAAQ,OAAO,EAAE,MAAMA,EAAS,SAAS,GAAG,EAChH,IAAA,GAELA,EAAS,QAAQ;AAAA,IACnB;;;kBA7dEjU,EAwVM,OAAA;AAAA,QAxVD,OAAKC,GAAA,CAAC,eAAa,EAAA,yBAAA,CAAqC4S,EAAA,OAAQ,CAAA;AAAA,MAAA;QACnE1O,EASQuE,GAAA;AAAA,UARN,MAAA;AAAA,UACA,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,OAAO7I,EAAAqN,CAAA,EAAE;AAAA,UACT,UAAQ,CAAG2F,EAAA,SAAQ,CAAKtD,EAAA,MAAM;AAAA,UAC9B,SAAKjL,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAiF,MAAA;;AAAE,oBAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,OAAO;AAAA;AAAA,QAAG;qBAE1C,MAA+B;AAAA,YAA/B0B,EAA+BtE,EAAAM,CAAA,GAAA,EAAlB,MAAK,YAAU;AAAA,UAAA;;;QAE9BgE,EASQuE,GAAA;AAAA,UARN,MAAA;AAAA,UACA,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,OAAO7I,EAAAqN,CAAA,EAAE;AAAA,UACT,UAAQ,CAAG2F,EAAA,SAAQ,CAAKtD,EAAA,MAAM;AAAA,UAC9B,SAAKjL,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAiF,MAAA;;AAAE,oBAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,OAAO;AAAA;AAAA,QAAG;qBAE1C,MAA+B;AAAA,YAA/B0B,EAA+BtE,EAAAM,CAAA,GAAA,EAAlB,MAAK,YAAU;AAAA,UAAA;;;QAG9BgE,EAAyCgQ,GAAA;AAAA,UAA9B,UAAA;AAAA,UAAS,OAAA;AAAA,UAAM,OAAM;AAAA,QAAA;QAEhChQ,EASQuE,GAAA;AAAA,UARN,MAAA;AAAA,UACA,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,OAAO7I,EAAAqN,CAAA,EAAE;AAAA,UACT,WAAW2F,EAAA;AAAA,UACX,SAAKvO,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAiF,MAAA;;AAAE,oBAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,YAAY;AAAA;AAAA,QAAG;qBAE/C,MAAqC;AAAA,YAArC0B,EAAqCtE,EAAAM,CAAA,GAAA,EAAxB,MAAK,kBAAgB;AAAA,UAAA;;;QAGpCgE,EAAyCgQ,GAAA;AAAA,UAA9B,UAAA;AAAA,UAAS,OAAA;AAAA,UAAM,OAAM;AAAA,QAAA;QAEhChQ,EAgBSyF,GAAA,MAAA;AAAA,UAfI,WAAS3F,EAClB,CAEQ,EAAA,OAHqBmQ,QAAS;AAAA,YACtCjQ,EAEQuE,GAFRC,EAEQ;AAAA,cAFD,MAAK;AAAA,cAAQ,SAAQ;AAAA,cAAQ,WAAWkK,EAAA;AAAA,YAAA,GAAkBuB,GAAS,EAAE,eAAY,mBAAA,CAAkB,GAAA;AAAA,yBACxG,MAAkB;AAAA,oBAAfnB,EAAA,KAAY,GAAA,CAAA;AAAA,cAAA;;;;qBAGnB,MASS;AAAA,YATT9O,EASSkQ,IAAA,EATD,SAAQ,aAAS;AAAA,yBAErB,MAAgC;AAAA,sBADlCrU,EAOcE,IAAA,MAAAsI,GANKsK,GAAc,CAAxBI,MADT/O,EAOcmQ,GAAA;AAAA,kBALX,KAAKpB,EAAO;AAAA,kBACZ,QAAQH,EAAgBG,EAAO,KAAK;AAAA,kBACpC,SAAK,CAAA3J,MAAE4J,EAAWD,EAAO,KAAK;AAAA,gBAAA;6BAE/B,MAAyD;AAAA,oBAAzD/O,EAAyDoQ,GAAA,MAAA;AAAA,iCAAtC,MAAkB;AAAA,wBAAfC,EAAAzL,EAAAmK,EAAO,KAAK,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;;QAKxC/O,EAgBSyF,GAAA,MAAA;AAAA,UAfI,WAAS3F,EAClB,CAEQ,EAAA,OAHqBmQ,QAAS;AAAA,YACtCjQ,EAEQuE,GAFRC,EAEQ;AAAA,cAFD,MAAK;AAAA,cAAQ,SAAQ;AAAA,cAAQ,WAAWkK,EAAA;AAAA,YAAA,GAAkBuB,GAAS,EAAE,eAAY,mBAAA,CAAkB,GAAA;AAAA,yBACxG,MAAa;AAAA,gBAAVI,EAAAzL,EAAAlJ,EAAAqN,CAAA,EAAE,KAAK,GAAA,CAAA;AAAA,cAAA;;;;qBAGd,MASS;AAAA,YATT/I,EASSkQ,IAAA,EATD,SAAQ,aAAS;AAAA,yBAErB,MAAwB;AAAA,wBAD1BrU,EAOcE,IAAA,MAAAsI,GANE3I,EAAAuT,CAAA,GAAS,CAAhBrD,YADTnQ,EAOc0U,GAAA;AAAA,kBALX,KAAKvE,EAAI;AAAA,kBACT,QAAQsD,EAAYtD,CAAG;AAAA,kBACvB,gBAAOT,EAAA,SAAUzP,MAAWyP,EAAA,OAAQS,CAAG;AAAA,gBAAA;6BAExC,MAAuD;AAAA,oBAAvD5L,EAAuDoQ,GAAA,MAAA;AAAA,iCAApC,MAAgB;AAAA,4BAAb1U,EAAAqN,CAAA,EAAE6C,EAAI,GAAG,CAAA,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;;QAKrC5L,EAAyCgQ,GAAA;AAAA,UAA9B,UAAA;AAAA,UAAS,OAAA;AAAA,UAAM,OAAM;AAAA,QAAA;QAEhChQ,EAUQuE,GAAA;AAAA,UATN,MAAA;AAAA,UACA,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,OAAO7I,EAAAqN,CAAA,EAAE;AAAA,UACT,WAAW2F,EAAA;AAAA,UACX,QAAQtD,EAAA,MAAM;AAAA,UACd,SAAKjL,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAiF,MAAA;;AAAE,oBAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,aAAa;AAAA;AAAA,QAAG;qBAEhD,MAAsC;AAAA,YAAtC0B,EAAsCtE,EAAAM,CAAA,GAAA,EAAzB,MAAK,mBAAiB;AAAA,UAAA;;;QAErCgE,EAUQuE,GAAA;AAAA,UATN,MAAA;AAAA,UACA,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,OAAO7I,EAAAqN,CAAA,EAAE;AAAA,UACT,WAAW2F,EAAA;AAAA,UACX,QAAQtD,EAAA,MAAM;AAAA,UACd,SAAKjL,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAiF,MAAA;;AAAE,oBAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,eAAe;AAAA;AAAA,QAAG;qBAElD,MAAwC;AAAA,YAAxC0B,EAAwCtE,EAAAM,CAAA,GAAA,EAA3B,MAAK,qBAAmB;AAAA,UAAA;;;QAGvCgE,EAAyCgQ,GAAA;AAAA,UAA9B,UAAA;AAAA,UAAS,OAAA;AAAA,UAAM,OAAM;AAAA,QAAA;QAEhChQ,EASQuE,GAAA;AAAA,UARN,MAAA;AAAA,UACA,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,OAAO7I,EAAAqN,CAAA,EAAE;AAAA,UACT,WAAW2F,EAAA;AAAA,UACX,SAAKvO,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAiF,MAAA;;AAAE,oBAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,oBAAoB;AAAA;AAAA,QAAG;qBAEvD,MAAgC;AAAA,YAAhC0B,EAAgCtE,EAAAM,CAAA,GAAA,EAAnB,MAAK,aAAW;AAAA,UAAA;;;QAG/BgE,EA6BSyF,GAAA;AAAA,UA7BA,0BAAwB;AAAA,UAAQ,uBAAkBtF,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGmQ,MAAmBA,KAASjB,EAAA;AAAA,QAAY;UACzF,WAASvP,EAClB,CAUQ,EAAA,OAXqBmQ,QAAS;AAAA,YACtCjQ,EAUQuE,GAVRC,EAUQ;AAAA,cATN,MAAA;AAAA,cACA,MAAK;AAAA,cACL,SAAQ;AAAA,cACP,OAAO9I,EAAAqN,CAAA,EAAE;AAAA,cACT,WAAW2F,EAAA;AAAA,cACX,QAAQtD,EAAA,MAAM;AAAA,YAAA,GACP6E,CAAS,GAAA;AAAA,yBAEjB,MAAuC;AAAA,gBAAvCjQ,EAAuCtE,EAAAM,CAAA,GAAA,EAA1B,MAAK,oBAAkB;AAAA,cAAA;;;;qBAGxC,MAcS;AAAA,YAdTgE,EAcSuQ,IAAA;AAAA,cAdD,aAAU;AAAA,cAAM,OAAM;AAAA,YAAA;yBAC5B,MAOE;AAAA,gBAPFvQ,EAOEuF,GAAA;AAAA,8BANS4J,EAAA;AAAA,gEAAAA,EAAO,QAAA/J;AAAA,kBACf,OAAO1J,EAAAqN,CAAA,EAAE;AAAA,kBACV,SAAQ;AAAA,kBACR,gBAAA;AAAA,kBACA,WAAA;AAAA,kBACC,cAAewG,GAAS,CAAA,OAAA,CAAA;AAAA,gBAAA;gBAE3BvP,EAA6GmF,GAAA;AAAA,8BAAxFiK,EAAA;AAAA,gEAAAA,EAAgB,QAAAhK;AAAA,kBAAG,OAAO1J,EAAAqN,CAAA,EAAE;AAAA,kBAAc,SAAQ;AAAA,kBAAU,gBAAA;AAAA,kBAAa,OAAM;AAAA,gBAAA;gBACpGxI,GAGM,OAHNC,IAGM;AAAA,kBAFS4K,EAAA,MAAM,aAAnB3P,EAAmG8I,GAAA;AAAA;oBAA1E,MAAK;AAAA,oBAAQ,SAAQ;AAAA,oBAAQ,SAAOiL;AAAA,kBAAA;+BAAY,MAAkB;AAAA,sBAAfa,EAAAzL,EAAAlJ,EAAAqN,CAAA,EAAE,UAAU,GAAA,CAAA;AAAA,oBAAA;;;kBACxF/I,EAAgGuE,GAAA;AAAA,oBAAzF,MAAK;AAAA,oBAAQ,OAAM;AAAA,oBAAU,SAAQ;AAAA,oBAAS,SAAOgL;AAAA,kBAAA;+BAAW,MAAiB;AAAA,sBAAdc,EAAAzL,EAAAlJ,EAAAqN,CAAA,EAAE,SAAS,GAAA,CAAA;AAAA,oBAAA;;;;;;;;;;QAK3F/I,EAwBSyF,GAAA,EAxBA,0BAAwB,MAAK;AAAA,UACzB,WAAS3F,EAClB,CAEQ,EAAA,OAHqBmQ,QAAS;AAAA,YACtCjQ,EAEQuE,GAFRC,EAEQ;AAAA,cAFD,MAAA;AAAA,cAAK,MAAK;AAAA,cAAQ,SAAQ;AAAA,cAAQ,OAAO9I,EAAAqN,CAAA,EAAE;AAAA,cAAQ,WAAW2F,EAAA;AAAA,YAAA,GAAkBuB,CAAS,GAAA;AAAA,yBAC9F,MAAqC;AAAA,gBAArCjQ,EAAqCtE,EAAAM,CAAA,GAAA,EAAxB,MAAK,kBAAgB;AAAA,cAAA;;;;qBAGtC,MAiBS;AAAA,YAjBTgE,EAiBSuQ,IAAA;AAAA,cAjBD,aAAU;AAAA,cAAM,OAAM;AAAA,YAAA;yBAC5B,MAOE;AAAA,gBAPFvQ,EAOEuF,GAAA;AAAA,8BANSkK,EAAA;AAAA,gEAAAA,EAAQ,QAAArK;AAAA,kBAChB,OAAO1J,EAAAqN,CAAA,EAAE;AAAA,kBACV,SAAQ;AAAA,kBACR,gBAAA;AAAA,kBACA,WAAA;AAAA,kBACC,cAAe4G,GAAkB,CAAA,OAAA,CAAA;AAAA,gBAAA;gBAEpCpP,GAOM,OAPNoE,IAOM;AAAA,kBANJ3E,EAEQuE,GAAA;AAAA,oBAFD,MAAK;AAAA,oBAAQ,SAAQ;AAAA,oBAAO,gBAAa;AAAA,oBAAc,SAAOqL;AAAA,kBAAA;+BACnE,MAAmB;AAAA,sBAAhBS,EAAAzL,EAAAlJ,EAAAqN,CAAA,EAAE,WAAW,GAAA,CAAA;AAAA,oBAAA;;;kBAElB/I,EAEQuE,GAAA;AAAA,oBAFD,MAAK;AAAA,oBAAQ,OAAM;AAAA,oBAAU,SAAQ;AAAA,oBAAS,SAAOoL;AAAA,kBAAA;+BAC1D,MAAmB;AAAA,sBAAhBU,EAAAzL,EAAAlJ,EAAAqN,CAAA,EAAE,WAAW,GAAA,CAAA;AAAA,oBAAA;;;;;;;;;;QAKxBxI,GAAkG,SAAA;AAAA,mBAAvF;AAAA,UAAJ,KAAImP;AAAA,UAAa,MAAK;AAAA,UAAO,QAAO;AAAA,UAAU,OAAM;AAAA,UAAU,UAAQG;AAAA,QAAA;QAE7E7P,EAqBSyF,GAAA,EArBA,0BAAwB,MAAK;AAAA,UACzB,WAAS3F,EAClB,CAEQ,EAAA,OAHqBmQ,QAAS;AAAA,YACtCjQ,EAEQuE,GAFRC,EAEQ;AAAA,cAFD,MAAA;AAAA,cAAK,MAAK;AAAA,cAAQ,SAAQ;AAAA,cAAQ,OAAO9I,EAAAqN,CAAA,EAAE;AAAA,cAAa,WAAW2F,EAAA;AAAA,YAAA,GAAkBuB,CAAS,GAAA;AAAA,yBACnG,MAAqC;AAAA,gBAArCjQ,EAAqCtE,EAAAM,CAAA,GAAA,EAAxB,MAAK,kBAAgB;AAAA,cAAA;;;;qBAGtC,MAcS;AAAA,YAdTgE,EAcSuQ,IAAA;AAAA,cAdD,aAAU;AAAA,cAAM,OAAM;AAAA,YAAA;yBAC5B,MAOE;AAAA,gBAPFvQ,EAOEuF,GAAA;AAAA,8BANSuK,EAAA;AAAA,kEAAAA,EAAQ,QAAA1K;AAAA,kBAChB,OAAO1J,EAAAqN,CAAA,EAAE;AAAA,kBACV,SAAQ;AAAA,kBACR,gBAAA;AAAA,kBACA,WAAA;AAAA,kBACC,cAAegH,GAAgB,CAAA,OAAA,CAAA;AAAA,gBAAA;gBAElCxP,GAIM,OAJNiQ,IAIM;AAAA,kBAHJxQ,EAEQuE,GAAA;AAAA,oBAFD,MAAK;AAAA,oBAAQ,OAAM;AAAA,oBAAU,SAAQ;AAAA,oBAAS,SAAOwL;AAAA,kBAAA;+BAC1D,MAAwB;AAAA,sBAArBM,EAAAzL,EAAAlJ,EAAAqN,CAAA,EAAE,gBAAgB,GAAA,CAAA;AAAA,oBAAA;;;;;;;;;;QAM7B/I,EA+CSyF,GAAA,MAAA;AAAA,UA9CI,WAAS3F,EAClB,CAEQ,EAAA,OAHqBmQ,QAAS;AAAA,YACtCjQ,EAEQuE,GAFRC,EAEQ;AAAA,cAFD,MAAA;AAAA,cAAK,MAAK;AAAA,cAAQ,SAAQ;AAAA,cAAQ,OAAO9I,EAAAqN,CAAA,EAAE;AAAA,cAAQ,WAAW2F,EAAA;AAAA,YAAA,GAAkBuB,CAAS,GAAA;AAAA,yBAC9F,MAAgC;AAAA,gBAAhCjQ,EAAgCtE,EAAAM,CAAA,GAAA,EAAnB,MAAK,aAAW;AAAA,cAAA;;;;qBAGjC,MAwCS;AAAA,YAxCTgE,EAwCSkQ,IAAA,EAxCD,SAAQ,aAAS;AAAA,yBACvB,MAGc;AAAA,gBAHdlQ,EAGcmQ,GAAA;AAAA,kBAHA,SAAKhQ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,4BAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,YAAW,EAAA,MAAA,GAAA,MAAA,GAAA,eAAA,MAA4C;AAAA;AAAA,gBAAG;kBAC1F,WAAQ,MAAqC;AAAA,oBAArC0B,EAAqCtE,EAAAM,CAAA,GAAA,EAAxB,MAAK,kBAAgB;AAAA,kBAAA;6BACrD,MAA0D;AAAA,oBAA1DgE,EAA0DoQ,GAAA,MAAA;AAAA,iCAAvC,MAAmB;AAAA,wBAAhBC,EAAAzL,EAAAlJ,EAAAqN,CAAA,EAAE,WAAW,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAErC/I,EAAagQ,CAAA;AAAA,gBACbhQ,EAGcmQ,GAAA;AAAA,kBAHA,UAAQ,CAAG/E,EAAA,MAAM;AAAA,kBAAU,SAAKjL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,4BAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,eAAe;AAAA;AAAA,gBAAG;kBAC7E,WAAQ,MAAgD;AAAA,oBAAhD0B,EAAgDtE,EAAAM,CAAA,GAAA,EAAnC,MAAK,6BAA2B;AAAA,kBAAA;6BAChE,MAA+D;AAAA,oBAA/DgE,EAA+DoQ,GAAA,MAAA;AAAA,iCAA5C,MAAwB;AAAA,wBAArBC,EAAAzL,EAAAlJ,EAAAqN,CAAA,EAAE,gBAAgB,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAE1C/I,EAGcmQ,GAAA;AAAA,kBAHA,UAAQ,CAAG/E,EAAA,MAAM;AAAA,kBAAU,SAAKjL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,4BAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,cAAc;AAAA;AAAA,gBAAG;kBAC5E,WAAQ,MAA+C;AAAA,oBAA/C0B,EAA+CtE,EAAAM,CAAA,GAAA,EAAlC,MAAK,4BAA0B;AAAA,kBAAA;6BAC/D,MAA+D;AAAA,oBAA/DgE,EAA+DoQ,GAAA,MAAA;AAAA,iCAA5C,MAAwB;AAAA,wBAArBC,EAAAzL,EAAAlJ,EAAAqN,CAAA,EAAE,gBAAgB,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAE1C/I,EAGcmQ,GAAA;AAAA,kBAHA,UAAQ,CAAG/E,EAAA,MAAM;AAAA,kBAAU,SAAKjL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,4BAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,YAAY;AAAA;AAAA,gBAAG;kBAC1E,WAAQ,MAA2C;AAAA,oBAA3C0B,EAA2CtE,EAAAM,CAAA,GAAA,EAA9B,MAAK,wBAAsB;AAAA,kBAAA;6BAC3D,MAA6D;AAAA,oBAA7DgE,EAA6DoQ,GAAA,MAAA;AAAA,iCAA1C,MAAsB;AAAA,wBAAnBC,EAAAzL,EAAAlJ,EAAAqN,CAAA,EAAE,cAAc,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAExC/I,EAAagQ,CAAA;AAAA,gBACbhQ,EAGcmQ,GAAA;AAAA,kBAHA,UAAQ,CAAG/E,EAAA,MAAM;AAAA,kBAAU,SAAKjL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,4BAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,kBAAkB;AAAA;AAAA,gBAAG;kBAChF,WAAQ,MAAmD;AAAA,oBAAnD0B,EAAmDtE,EAAAM,CAAA,GAAA,EAAtC,MAAK,gCAA8B;AAAA,kBAAA;6BACnE,MAAmE;AAAA,oBAAnEgE,EAAmEoQ,GAAA,MAAA;AAAA,iCAAhD,MAA4B;AAAA,wBAAzBC,EAAAzL,EAAAlJ,EAAAqN,CAAA,EAAE,oBAAoB,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAE9C/I,EAGcmQ,GAAA;AAAA,kBAHA,UAAQ,CAAG/E,EAAA,MAAM;AAAA,kBAAU,SAAKjL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,4BAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,iBAAiB;AAAA;AAAA,gBAAG;kBAC/E,WAAQ,MAAkD;AAAA,oBAAlD0B,EAAkDtE,EAAAM,CAAA,GAAA,EAArC,MAAK,+BAA6B;AAAA,kBAAA;6BAClE,MAAkE;AAAA,oBAAlEgE,EAAkEoQ,GAAA,MAAA;AAAA,iCAA/C,MAA2B;AAAA,wBAAxBC,EAAAzL,EAAAlJ,EAAAqN,CAAA,EAAE,mBAAmB,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAE7C/I,EAGcmQ,GAAA;AAAA,kBAHA,UAAQ,CAAG/E,EAAA,MAAM;AAAA,kBAAU,SAAKjL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,4BAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,eAAe;AAAA;AAAA,gBAAG;kBAC7E,WAAQ,MAA8C;AAAA,oBAA9C0B,EAA8CtE,EAAAM,CAAA,GAAA,EAAjC,MAAK,2BAAyB;AAAA,kBAAA;6BAC9D,MAAgE;AAAA,oBAAhEgE,EAAgEoQ,GAAA,MAAA;AAAA,iCAA7C,MAAyB;AAAA,wBAAtBC,EAAAzL,EAAAlJ,EAAAqN,CAAA,EAAE,iBAAiB,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAE3C/I,EAAagQ,CAAA;AAAA,gBACbhQ,EAGcmQ,GAAA;AAAA,kBAHA,UAAQ,CAAG/E,EAAA,MAAM;AAAA,kBAAU,SAAKjL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,4BAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,kBAAkB;AAAA;AAAA,gBAAG;kBAChF,WAAQ,MAAoC;AAAA,oBAApC0B,EAAoCtE,EAAAM,CAAA,GAAA,EAAvB,MAAK,iBAAe;AAAA,kBAAA;6BACpD,MAAmE;AAAA,oBAAnEgE,EAAmEoQ,GAAA,MAAA;AAAA,iCAAhD,MAA4B;AAAA,wBAAzBC,EAAAzL,EAAAlJ,EAAAqN,CAAA,EAAE,oBAAoB,GAAA,CAAA;AAAA,sBAAA;;;;;;gBAE9C/I,EAGcmQ,GAAA;AAAA,kBAHA,UAAQ,CAAG/E,EAAA,MAAM;AAAA,kBAAU,SAAKjL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,4BAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,cAAc;AAAA;AAAA,gBAAG;kBAC5E,WAAQ,MAAuC;AAAA,oBAAvC0B,EAAuCtE,EAAAM,CAAA,GAAA,EAA1B,MAAK,oBAAkB;AAAA,kBAAA;6BACvD,MAA+D;AAAA,oBAA/DgE,EAA+DoQ,GAAA,MAAA;AAAA,iCAA5C,MAAwB;AAAA,wBAArBC,EAAAzL,EAAAlJ,EAAAqN,CAAA,EAAE,gBAAgB,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;;QAK9C/I,EAUQuE,GAAA;AAAA,UATN,MAAA;AAAA,UACA,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,OAAO7I,EAAAqN,CAAA,EAAE;AAAA,UACT,WAAW2F,EAAA;AAAA,UACX,QAAQtD,EAAA,MAAM;AAAA,UACd,SAAKjL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,oBAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,mBAAmB;AAAA;AAAA,QAAG;qBAEtD,MAA6C;AAAA,YAA7C0B,EAA6CtE,EAAAM,CAAA,GAAA,EAAhC,MAAK,0BAAwB;AAAA,UAAA;;;QAG5CgE,EAAyCgQ,GAAA;AAAA,UAA9B,UAAA;AAAA,UAAS,OAAA;AAAA,UAAM,OAAM;AAAA,QAAA;QAEhChQ,EAUQuE,GAAA;AAAA,UATN,MAAA;AAAA,UACA,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,OAAO7I,EAAAqN,CAAA,EAAE;AAAA,UACT,WAAW2F,EAAA;AAAA,UACX,QAAQtD,EAAA,MAAM;AAAA,UACd,SAAKjL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,oBAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,aAAY,QAAS;AAAA;AAAA,QAAG;qBAExD,MAA4C;AAAA,YAA5C0B,EAA4CtE,EAAAM,CAAA,GAAA,EAA/B,MAAK,yBAAuB;AAAA,UAAA;;;QAE3CgE,EAUQuE,GAAA;AAAA,UATN,MAAA;AAAA,UACA,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,OAAO7I,EAAAqN,CAAA,EAAE;AAAA,UACT,WAAW2F,EAAA;AAAA,UACX,QAAQtD,EAAA,MAAM;AAAA,UACd,SAAKjL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,oBAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,aAAY,UAAW;AAAA;AAAA,QAAG;qBAE1D,MAA8C;AAAA,YAA9C0B,EAA8CtE,EAAAM,CAAA,GAAA,EAAjC,MAAK,2BAAyB;AAAA,UAAA;;;QAE7CgE,EAUQuE,GAAA;AAAA,UATN,MAAA;AAAA,UACA,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,OAAO7I,EAAAqN,CAAA,EAAE;AAAA,UACT,WAAW2F,EAAA;AAAA,UACX,QAAQtD,EAAA,MAAM;AAAA,UACd,SAAKjL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,oBAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,aAAY,SAAU;AAAA;AAAA,QAAG;qBAEzD,MAA6C;AAAA,YAA7C0B,EAA6CtE,EAAAM,CAAA,GAAA,EAAhC,MAAK,0BAAwB;AAAA,UAAA;;;QAE5CgE,EAUQuE,GAAA;AAAA,UATN,MAAA;AAAA,UACA,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,OAAO7I,EAAAqN,CAAA,EAAE;AAAA,UACT,WAAW2F,EAAA;AAAA,UACX,QAAQtD,EAAA,MAAM;AAAA,UACd,SAAKjL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,oBAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,aAAY,WAAY;AAAA;AAAA,QAAG;qBAE3D,MAA+C;AAAA,YAA/C0B,EAA+CtE,EAAAM,CAAA,GAAA,EAAlC,MAAK,4BAA0B;AAAA,UAAA;;;QAG9CgE,EAAyCgQ,GAAA;AAAA,UAA9B,UAAA;AAAA,UAAS,OAAA;AAAA,UAAM,OAAM;AAAA,QAAA;QAEhChQ,EAUQuE,GAAA;AAAA,UATN,MAAA;AAAA,UACA,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,OAAO7I,EAAAqN,CAAA,EAAE;AAAA,UACT,WAAW2F,EAAA;AAAA,UACX,QAAQtD,EAAA,MAAM;AAAA,UACd,SAAKjL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,oBAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,mBAAmB;AAAA;AAAA,QAAG;qBAEtD,MAA+C;AAAA,YAA/C0B,EAA+CtE,EAAAM,CAAA,GAAA,EAAlC,MAAK,4BAA0B;AAAA,UAAA;;;QAE9CgE,EAUQuE,GAAA;AAAA,UATN,MAAA;AAAA,UACA,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,OAAO7I,EAAAqN,CAAA,EAAE;AAAA,UACT,WAAW2F,EAAA;AAAA,UACX,QAAQtD,EAAA,MAAM;AAAA,UACd,SAAKjL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,oBAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,oBAAoB;AAAA;AAAA,QAAG;qBAEvD,MAA+C;AAAA,YAA/C0B,EAA+CtE,EAAAM,CAAA,GAAA,EAAlC,MAAK,4BAA0B;AAAA,UAAA;;;QAE9CgE,EASQuE,GAAA;AAAA,UARN,MAAA;AAAA,UACA,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,OAAO7I,EAAAqN,CAAA,EAAE;AAAA,UACT,UAAQ,CAAG2F,EAAA,SAAQ,CAAKtD,EAAA,MAAM;AAAA,UAC9B,SAAKjL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,oBAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,aAAY,YAAa;AAAA;AAAA,QAAG;qBAE5D,MAAiD;AAAA,YAAjD0B,EAAiDtE,EAAAM,CAAA,GAAA,EAApC,MAAK,8BAA4B;AAAA,UAAA;;;QAEhDgE,EASQuE,GAAA;AAAA,UARN,MAAA;AAAA,UACA,MAAK;AAAA,UACL,SAAQ;AAAA,UACP,OAAO7I,EAAAqN,CAAA,EAAE;AAAA,UACT,UAAQ,CAAG2F,EAAA,SAAQ,CAAKtD,EAAA,MAAM;AAAA,UAC9B,SAAKjL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAiF,MAAA;;AAAE,oBAAA9G,IAAA6M,YAAA,gBAAA7M,EAAQ,QAAQ,QAAQ,aAAY,YAAa;AAAA;AAAA,QAAG;qBAE5D,MAAiD;AAAA,YAAjD0B,EAAiDtE,EAAAM,CAAA,GAAA,EAApC,MAAK,8BAA4B;AAAA,UAAA;;;;;;IClV9CyU,KAAiB,0BACjBC,KAAqB,4BACrBC,KAAY,SAKZC,KAA4B;AAElC,SAASC,GAAcC,GAAe;AACpC,QAAMC,IAAS,SAAS,iBAAiBD,GAAM,WAAW,YAAY,GAChEE,IAAsB,CAAA;AAC5B,WAASnF,IAAOkF,EAAO,SAAA,GAAYlF,GAAMA,IAAOkF,EAAO,SAAA,EAAY,CAAAC,EAAS,KAAKnF,CAAe;AAChG,EAAAmF,EAAS,QAAQ,CAACC,MAAA;;AAAY,YAAA3S,IAAA2S,EAAQ,eAAR,gBAAA3S,EAAoB,YAAY2S;AAAA,GAAQ;AACxE;AAEA,SAASC,GAAO3G,GAAkB;AAChC,QAAM4G,IAAS5G,EAAQ;AACvB,MAAK4G,GACL;AAAA,WAAO5G,EAAQ,aAAY,CAAA4G,EAAO,aAAa5G,EAAQ,YAAYA,CAAO;AAC1E,IAAA4G,EAAO,YAAY5G,CAAO;AAAA;AAC5B;AAEA,SAAS6G,GAAgB7G,GAAsB;AAC7C,QAAM8G,IAAQ9G,EAAQ,aAAa,OAAO;AAC1C,MAAI8G,KAAS,MAAM;AACjB,UAAMC,IAAUD,EAAM,QAAQX,IAAoB,EAAE,EAAE,QAAQE,IAA2B,EAAE,EAAE,KAAA;AAC7F,IAAIU,IAAS/G,EAAQ,aAAa,SAAS+G,CAAO,IAC7C/G,EAAQ,gBAAgB,OAAO;AAAA,EACtC;AAEA,QAAM1L,IAAW0L,EAAQ,aAAa,OAAO;AAC7C,MAAI1L,KAAY,MAAM;AACpB,UAAMyS,IAAUzS,EACb,MAAM,KAAK,EACX,OAAO,CAAC6L,MAASA,KAAQ,CAACiG,GAAU,KAAKjG,CAAI,CAAC,EAC9C,KAAK,GAAG;AACX,IAAI4G,IAAS/G,EAAQ,aAAa,SAAS+G,CAAO,IAC7C/G,EAAQ,gBAAgB,OAAO;AAAA,EACtC;AAEA,EAAAA,EAAQ,gBAAgB,MAAM,GAC9BA,EAAQ,gBAAgB,UAAU,GAClCA,EAAQ,gBAAgB,IAAI,GAC5BA,EAAQ,gBAAgB,OAAO,GAC/BA,EAAQ,gBAAgB,SAAS;AACnC;AASO,SAASgH,GAAmBC,GAAsB;AACvD,MAAI,CAACA,KAAQ,OAAO,aAAc,YAAa,QAAOA;AAGtD,QAAMV,IADM,IAAI,UAAA,EAAY,gBAAgBU,GAAM,WAAW,EAC5C;AACjB,SAAKV,KAELD,GAAcC,CAAI,GAClBA,EAAK,iBAAiB,gCAAgC,EAAE,QAAQ,CAACjF,MAASA,EAAK,QAAQ,GAEvF,MAAM,KAAKiF,EAAK,iBAA8B,GAAG,CAAC,EAAE,QAAQ,CAACvG,MAAY;AACvE,QAAIkG,GAAe,KAAKlG,EAAQ,OAAO,KAAKA,EAAQ,YAAY,QAAQ;AACtE,MAAA2G,GAAO3G,CAAO;AACd;AAAA,IACF;AACA,IAAA6G,GAAgB7G,CAAO;AAAA,EACzB,CAAC,GAGD,MAAM,KAAKuG,EAAK,iBAAiB,WAAW,CAAC,EAAE,QAAQ,CAACvG,MAAY;AAClE,IAAIA,EAAQ,WAAW,WAAW,QAAUA,CAAO;AAAA,EACrD,CAAC,GAEMuG,EAAK,aAlBMU;AAmBpB;;;;;;;;;;;;;ACnCA,UAAMrW,IAAQC,GASRwB,IAAO0C,GAIP6L,IAASsG,GAAU;AAAA,MACvB,SAAStW,EAAM;AAAA,MACf,UAAU,CAACA,EAAM;AAAA,MACjB,YAAY;AAAA,QACVuW,GAAW,UAAU,EAAE,MAAM,IAAO;AAAA,QACpCnE,GAAiB,UAAU,EAAE,aAAa,IAAO,UAAU,IAAM,iBAAiB,SAAS;AAAA,QAC3FoE,GAAM,UAAU;AAAA,UACd,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,QAAQ;AAAA,YACN,SAAS;AAAA,YACT,YAAY,CAAC,OAAO,SAAS,UAAU,QAAQ,YAAY,aAAa,eAAe,cAAc;AAAA,YACrG,UAAU;AAAA,YACV,WAAW;AAAA,UAAA;AAAA,QACb,CACD;AAAA,QACDC,GAAU,UAAU,EAAE,OAAO,CAAC,WAAW,WAAW,GAAG;AAAA,QACvDC,GAAM,UAAU,EAAE,WAAW,IAAM;AAAA,QACnCC;AAAA,QACAC;AAAA,QACAC;AAAA,QACAC,GAAY,UAAU,EAAE,aAAa,IAAI;AAAA,QACzC5H;AAAA,QACAU;AAAA,QACAC;AAAA,QACAiD;AAAA,MAAA;AAAA,MAEF,aAAa;AAAA,QACX,YAAY,EAAE,OAAO,cAAA;AAAA,QACrB,qBAAqB,CAACuD,MAAiBD,GAAmBC,CAAI;AAAA,QAC9D,aAAazE,GAAwB,MAAM5B,EAAO,KAAK;AAAA,MAAA;AAAA,MAEzD,UAAU,CAAC,EAAE,QAAQ+G,QAAe;AAClC,QAAAtV,EAAK,qBAAqBsV,EAAS,SAAS;AAAA,MAC9C;AAAA,IAAA,CACD;AAID,IAAAtO;AAAA,MACE,MAAMzI,EAAM;AAAA,MACZ,CAACpD,MAAU;AACT,cAAMma,IAAW/G,EAAO;AACxB,YAAI,CAAC+G,EAAU;AACf,cAAMC,IAAWpa,KAAA,OAAAA,IAAS;AAC1B,QAAIoa,MAAaD,EAAS,aAC1BA,EAAS,SAAS,WAAWC,GAAU,EAAE,YAAY,IAAO;AAAA,MAC9D;AAAA,IAAA,GAGFvO;AAAA,MACE,MAAMzI,EAAM;AAAA,MACZ,CAACiX,MAAA;;AAAa,gBAAA9T,IAAA6M,EAAO,UAAP,gBAAA7M,EAAc,YAAY,CAAC8T;AAAA;AAAA,IAAQ,GAEnDxO,GAAMuH,GAAQ,CAAC+G,MAAaA,KAAA,gBAAAA,EAAU,YAAY,CAAC/W,EAAM,SAAS;AAElE,UAAMkX,IAAalE,GAAchD,CAAM,GACjCmH,IAAchX,EAAS,MAAM;;AACjC,aAAK+W,EAAW,OACT;AAAA,QACL,MAAM,CAAC,GAAC/T,IAAA6M,EAAO,UAAP,QAAA7M,EAAc,SAAS;AAAA,QAC/B,QAAQ,CAAC,GAACD,IAAA8M,EAAO,UAAP,QAAA9M,EAAc,SAAS;AAAA,QACjC,MAAM,CAAC,GAACW,IAAAmM,EAAO,UAAP,QAAAnM,EAAc,SAAS;AAAA,QAC/B,YAAY,CAAC,GAACD,IAAAoM,EAAO,UAAP,QAAApM,EAAc,SAAS;AAAA,QACrC,aAAa,CAAC,GAACwT,IAAApH,EAAO,UAAP,QAAAoH,EAAc,SAAS;AAAA,MAAa;AAAA,IAEvD,CAAC;AAMD,aAASC,EAAiB,EAAE,OAAApH,KAAuD;AACjF,aAAO,CAACA,EAAM,UAAU,SAAS,EAAEA,EAAM,qBAAqBqH;AAAA,IAChE;AAEA,aAASC,EAAOC,GAAmF;;AACjG,OAAArU,IAAA6M,EAAO,UAAP,QAAA7M,EAAc,QAAQ,QAAQqU,KAAW;AAAA,IAC3C;AAEA,aAASC,IAAmB;AAC1B,YAAMV,IAAW/G,EAAO;AACxB,UAAI,CAAC+G,EAAU;AACf,UAAIA,EAAS,SAAS,MAAM,GAAG;AAC7B,QAAAA,EAAS,QAAQ,MAAA,EAAQ,UAAA,EAAY,IAAA;AACrC;AAAA,MACF;AAEA,YAAMW,IAAO,OAAO,OAAO,KAAK;AAChC,MAAIA,KAAMX,EAAS,MAAA,EAAQ,QAAQ,gBAAgB,MAAM,EAAE,QAAQ,EAAE,MAAAW,EAAA,CAAM,EAAE,IAAA;AAAA,IAC/E;;;AAvJE,aAAAzO,EAAA,GAAAvI,EAsBM,OAtBN2E,IAsBM;AAAA,QArBJR,EAAgC8S,IAAA,EAAlB,QAAQpX,EAAAyP,CAAA,EAAA,GAAM,MAAA,GAAA,CAAA,QAAA,CAAA;AAAA,QAC5BnL,EAAoEtE,EAAAqX,EAAA,GAAA;AAAA,UAApD,OAAM;AAAA,UAA4B,QAAQrX,EAAAyP,CAAA;AAAA,QAAA;QACvCzP,EAAAyP,CAAA,UAAnB1P,EAkBcC,EAAAsX,EAAA,GAAA;AAAA;UAlBc,QAAQtX,EAAAyP,CAAA;AAAA,UAAS,eAAaqH;AAAA,QAAA;qBACxD,MAgBM;AAAA,YAhBNjS,GAgBM,OAhBNoE,IAgBM;AAAA,cAfJ3E,EAEQuE,GAAA;AAAA,gBAFD,MAAA;AAAA,gBAAK,MAAK;AAAA,gBAAQ,SAAQ;AAAA,gBAAQ,QAAQ+N,EAAA,MAAY;AAAA,gBAAO,gCAAOI,EAAM,YAAA;AAAA,cAAA;2BAC/E,MAAsC;AAAA,kBAAtC1S,EAAsCtE,EAAAM,CAAA,GAAA,EAAzB,MAAK,mBAAiB;AAAA,gBAAA;;;cAErCgE,EAEQuE,GAAA;AAAA,gBAFD,MAAA;AAAA,gBAAK,MAAK;AAAA,gBAAQ,SAAQ;AAAA,gBAAQ,QAAQ+N,EAAA,MAAY;AAAA,gBAAS,gCAAOI,EAAM,cAAA;AAAA,cAAA;2BACjF,MAAwC;AAAA,kBAAxC1S,EAAwCtE,EAAAM,CAAA,GAAA,EAA3B,MAAK,qBAAmB;AAAA,gBAAA;;;cAEvCgE,EAEQuE,GAAA;AAAA,gBAFD,MAAA;AAAA,gBAAK,MAAK;AAAA,gBAAQ,SAAQ;AAAA,gBAAQ,QAAQ+N,EAAA,MAAY;AAAA,gBAAO,SAAOM;AAAA,cAAA;2BACzE,MAAuC;AAAA,kBAAvC5S,EAAuCtE,EAAAM,CAAA,GAAA,EAA1B,MAAK,oBAAkB;AAAA,gBAAA;;;cAEtCgE,EAEQuE,GAAA;AAAA,gBAFD,MAAA;AAAA,gBAAK,MAAK;AAAA,gBAAQ,SAAQ;AAAA,gBAAQ,QAAQ+N,EAAA,MAAY;AAAA,gBAAa,gCAAOI,EAAM,kBAAA;AAAA,cAAA;2BACrF,MAA+C;AAAA,kBAA/C1S,EAA+CtE,EAAAM,CAAA,GAAA,EAAlC,MAAK,4BAA0B;AAAA,gBAAA;;;cAE9CgE,EAEQuE,GAAA;AAAA,gBAFD,MAAA;AAAA,gBAAK,MAAK;AAAA,gBAAQ,SAAQ;AAAA,gBAAQ,QAAQ+N,EAAA,MAAY;AAAA,gBAAc,gCAAOI,EAAM,mBAAA;AAAA,cAAA;2BACtF,MAA+C;AAAA,kBAA/C1S,EAA+CtE,EAAAM,CAAA,GAAA,EAAlC,MAAK,4BAA0B;AAAA,gBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACGtD,UAAMb,IAAQC,GAGRiE,IAAQC,GAER,EAAE,cAAAuF,GAAc,OAAA9M,GAAO,iBAAAwH,MAAoB5C,GAAaxB,GAAOkE,CAAK;2BA1BxE5D,EAaaC,EAAA8L,EAAA,GAbbhD,EAaarJ,GAbY;AAAA,MAAE,OAAK,CAAC,cAAqBO,EAAAmJ,CAAA,CAAY;AAAA,IAAA;MACrD,SAAO/E,EAChB,CASEQ,MAVyB;AAAA,QAC3BN,EASEiT,IATFzO,EASE;AAAA,UARA,KAAI;AAAA,sBACK9I,EAAA3D,CAAA;AAAA,gEAAAA,EAAK,QAAAqN,IAAA;AAAA,UACb,mBAAmBhK,EAAA,MAAA;AAAA,UACnB,cAAYA,EAAA;AAAA,UACZ,UAAUM,EAAA6D,CAAA,EAAgB;AAAA,QAAA,GACnBnE,EAAA,kBAAgB;AAAA,UACvB,WAAO,CAAAgK,MAAE9E,EAAU,MAAA;AAAA,UACnB,YAAQ,CAAA8E,MAAE9E,EAAU,KAAA;AAAA,QAAI;;;;;;ACN1B,SAAS4S,GAAaC,GAAuB;AAClD,SAAOA,EAAM,IAAI,CAAC5G,OAAU,EAAE,OAAOA,EAAK,IAAI,OAAOA,EAAK,MAAM,MAAMA,EAAK,OAAO;AACpF;AAUO,SAAS6G,GAAuBrb,GAAYsb,GAAwB;;AAKzE,SAHItb,KAAS,QAGTub,GAAQvb,CAAK,KAAKA,EAAM,WAAW,IAAU,OAG7Csb,IAAiBE,GAAUxb,CAAK,IAG7Bub,GAAQvb,CAAK,KAAKuG,IAAAkV,GAAMzb,CAAK,MAAX,OAAAuG,IAAgB,OAAQvG;AACnD;AAEO,SAAS0b,GAAmBC,GAA+BC,GAA0C;AAC1G,MAAIA,KAAwB,KAAM,QAAO,CAAA;AACzC,QAAMC,IAAUL,GAAUI,CAAoB;AAC9C,SAAOD,EAAc,OAAO,CAACG,MAAWD,EAAQ,KAAK,CAACtd,MAAaA,MAAQud,EAAO,EAAE,CAAC;AACvF;AAKO,SAASC,GACdC,GACAC,GACAX,GACAY,GACAP,GACA;;AACA,QAAME,IAAUR,GAAuBW,GAAgBV,CAAQ;AAE/D,MAAIO,KAAW,MAAM;AACnB,IAAAI,EAAS,QAAQX,IAAW,CAAA,IAAK;AACjC;AAAA,EACF;AAEA,MAAIA;AACF,IAAIY,IAEFD,EAAS,QAAQJ,IAGjBI,EAAS,QAAQP,GAAmBC,GAAeE,CAAO,EAAE,IAAI,CAACC,MAAWA,EAAO,EAAE;AAAA,WAGnFI;AAEF,IAAAD,EAAS,QAAQJ;AAAA,OACZ;AAEL,UAAMM,IAAiBV,GAAMC,GAAmBC,GAAeE,CAAO,CAAC;AACvE,IAAAI,EAAS,SAAQ1V,IAAA4V,KAAA,gBAAAA,EAAgB,OAAhB,OAAA5V,IAAsB;AAAA,EACzC;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACUA,UAAM6V,IAAoB/Y,GASpB,EAAE,SAAAgZ,GAAS,UAAAf,GAAU,WAAWY,GAAU,WAAAI,GAAW,UAAAxV,EAAA,IAAamH,GAAOmO,CAAiB,GAM1F9U,IAAQC,GAMRgV,IAAczZ,EAAgF,IAAI,GAElG;AAAA,MACJ,cAAAgK;AAAA,MACA,YAAA3G;AAAA,MACA,OAAAK;AAAA,MACA,YAAAR;AAAA,MACA,SAAAN;AAAA,MACA,OAAOsW;AAAA,MACP,iBAAA5V;AAAA,MACA,iBAAAoB;AAAA,IAAA,IACE5C,GAAawX,GAAmB9U,CAAK,GAEnC2U,IAAWnZ,EAAS,IAAI,GACxB0Z,IAAa1Z,EAAI,EAAK,GACtB6N,IAAS7N,EAAoB,EAAE,GAC/B6Y,IAAgBpY,EAAyB,MAAOmE,EAAM8U,CAAU,IAAI9U,EAAMiJ,CAAM,IAAIjJ,EAAM2U,CAAO,KAAK,CAAA,CAAG,GACzGlM,IAAUrN,EAAa,EAAK,GAE5BjE,IAAU0E,EAAS,MAAM4X,GAAaQ,EAAc,KAAK,CAAC,GAC1Dc,IAAa3Z,EAAmB,IAAI,GACpC4Z,IAAqB5Z,EAAI,CAAC,GAC1B6Z,IAAc7Z,EAAI,EAAK;AAE7B,KAAIyD,KAAA8V,EAAQ,UAAR,QAAA9V,GAAe,UAAU6V,EAAkB,iBAAiB,UAC9D,QAAQ,KAAK,wEAAwE;AAGvF,aAASQ,EAAsBC,GAAY;AACzC,MAAAvV,EAAM,4BAA4BoU,GAAmBC,EAAc,OAAOkB,CAAK,CAAC;AAAA,IAClF;AAEA,UAAMC,IAAyBha,EAAI,EAAK;AAExC,aAASia,EAAkB1X,GAAe;AACxC,MAAAyX,EAAuB,QAAQ;AAC/B,UAAI;AACF,QAAAd,EAAe,QAAQ3W;AAAA,MACzB,UAAA;AAOE,QAAK2X,GAAQ3B,GAAuBW,EAAe,OAAOV,EAAS,KAAK,GAAGjW,CAAQ,KACjF0W;AAAA,UACEV,GAAuBW,EAAe,OAAOV,EAAS,KAAK;AAAA,UAC3DW;AAAA,UACAX,EAAS;AAAA,UACTY,EAAS;AAAA,UACTP,EAAc;AAAA,QAAA,GAGlBpW,GAAS,MAAM;AACb,UAAAuX,EAAuB,QAAQ;AAAA,QACjC,CAAC;AAAA,MACH;AAAA,IACF;AAEA,aAASG,EAAazI,GAA0B;AAC9C,UAAI,CAACA,EAAM,QAAO;AAClB,YAAM0I,IAAO1I,EAAK,sBAAA,GACZ8E,KAAQ,OAAO,iBAAiB9E,CAAI;AAE1C,aAAO0I,EAAK,QAAQ,WAAW5D,GAAM,UAAU,IAAI,WAAWA,GAAM,WAAW;AAAA,IACjF;AAEA,aAAS6D,KAAiB;;AACxB,UAAI7B,EAAS,SAASgB,EAAU,SAASL,EAAS,SAAS,QAAQA,EAAS,MAAM,SAAS,KAAKM,EAAY,OAAO;AACjH,cAAMa,IAAWb,EAAY,MAAM,KAC7Bc,MAAa9W,IAAA6W,EAAS,cAAc,mBAAmB,MAA1C,gBAAA7W,EAA6C,aAC1D+W,KAAYF,EAAS,cAAc,iBAAiB,GACpDhC,IAAQkC,GAAU,iBAAiB,oDAAoD,GAEvFhE,KAAQ,OAAO,iBAAiBgE,EAAS;AAC/C,YAAIC,KAAgB,WAAWjE,GAAM,WAAW,IAAI,WAAWA,GAAM,YAAY;AAEjF,QAAA8B,EAAM,QAAQ,CAAC5G,OAAsB;AACnC,UAAA+I,MAAiBN,EAAazI,EAAI;AAAA,QACpC,CAAC;AAED,cAAMgJ,KAAiBP,EAAaG,EAAS,cAAc,8BAA8B,CAAC,GACpFK,KAAcR,EAAaG,EAAS,cAAc,iCAAiC,CAAC,GACpFM,KAAU;AAChB,QAAAf,EAAY,QAAQU,KAAaE,KAAgBnC,EAAM,SAASsC,KAAUD,KAAcD;AAAA,MAC1F;AACE,QAAAb,EAAY,QAAQ;AAAA,IAExB;AAEA,aAASgB,EAAYhR,GAAmB;AAEtC,YAAMiR,IAASjR,EAAM;AACrB,MAAIiR,aAAkB,eAAeA,EAAO,QAAQ,gBAAgB,MAClEjR,EAAM,gBAAA,GACNA,EAAM,eAAA;AAAA,IAEV;AAEA,IAAAd;AAAA,MACEoQ;AAAA,MACA,CAAC5W,MAAa;AACZ,QAAImC,EAAgB,MAAM,YAC1BjC,GAAS,MAAM;AACb,gBAAMsX,IAAQxB,GAAuBhW,GAAUiW,EAAS,KAAK;AAC7D,UAAAsB,EAAsBC,CAAK,GAC3BE,EAAkBF,CAAK;AAAA,QACzB,CAAC;AAAA,MACH;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAEfhR;AAAA,MACEmQ;AAAA,MACA,CAAC3W,MAAkB;AACjB,YAAI,CAACyX,EAAuB,OAAO;AACjC,gBAAMD,IAAQxB,GAAuBhW,GAAUiW,EAAS,KAAK;AAC7D,UAAAS,GAAwBc,GAAOZ,GAAUX,EAAS,OAAO,IAAOK,EAAc,KAAK;AAAA,QACrF;AAAA,MACF;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAGf9P,GAAMiR,GAAwB,MAAM;AAClC,MAAKA,EAAuB,SAC1BK,GAAA;AAAA,IAEJ,CAAC;AAED,aAASU,IAAa;AACpB,MAAIpB,EAAW,SAAS,QAAQA,EAAW,MAAM,SAAS,MACxDA,EAAW,QAAQ,MACnBqB,EAAA;AAAA,IAEJ;AAEA,aAASC,IAAyB;AAEhC,UADAF,EAAA,GACIrW,EAAgB,MAAM,YAAY0U,EAAS,MAAO;AACtD,YAAMW,IAAQxB,GAAuBY,EAAS,OAAOX,EAAS,KAAK;AACnE,MAAAS,GAAwBc,GAAOZ,GAAUX,EAAS,OAAO,IAAOK,EAAc,KAAK,GACnFoB,EAAkBF,CAAK;AAAA,IACzB;AAEA,aAASmB,GAAUrR,GAAmBsR,GAAgB;AAEpD,UADAtR,EAAM,gBAAA,GACFnF,EAAgB,MAAM,YAAY0U,EAAS,OAAO;AACpD,QAAIA,EAAS,UACXD,EAAS,QAAQA,EAAS,MAAM,OAAO,CAACiC,OAAWA,OAAMD,CAAS;AAEpE;AAAA,MACF;AACA,UAAIpB;AACJ,MAAIvB,EAAS,SAAS,MAAM,QAAQW,EAAS,KAAK,IAChDY,KAAQxB;AAAA,QACNY,EAAS,MAAM,OAAO,CAACiC,OAAMA,OAAMD,CAAS;AAAA,QAC5C3C,EAAS;AAAA,MAAA,IAGXuB,KAAQ,MAEVd,GAAwBc,IAAOZ,GAAUX,EAAS,OAAO,IAAOK,EAAc,KAAK,GACnFoB,EAAkBF,EAAK;AAAA,IACzB;AAEA,aAAeiB,EAAaK,GAAkBC,GAA8B;AAAA,aAAA5N,GAAA;AAG1E,YAFIhJ,EAAgB,MAAM,aAC1BiV,EAAW,QAAQ0B,GACf9B,EAAQ,SAASD,EAAkB,iBAAiB,QAAW;AACnE,cAAMiC,KAAe,EAAE3B,EAAmB;AAC1C,QAAAvM,EAAQ,QAAQ;AAChB,YAAI;AACF,gBAAMmO,KAAkB5C;AAAA,YACtBC,EAAc;AAAA,YACdN,GAAuBY,EAAS,OAAOX,EAAS,KAAK;AAAA,UAAA,GAEjDiD,IAAa,MAAMnC,EAAkB,aAAa+B,GAAYC,CAAO;AAC3E,cAAIC,OAAiB3B,EAAmB,MAAO;AAC/C,UAAA/L,EAAO,QAAQ6N,GAAQ,CAAC,GAAGF,IAAiB,GAAGC,CAAU,GAAG,IAAI,GAChE/B,EAAW,QAAQ;AAAA,QACrB,UAAA;AACE,UAAArM,EAAQ,QAAQ;AAAA,QAClB;AAAA,MACF;AAAA;AAEA,aAASsO,IAAoB;AAC3B,UAAIlgB,IAAMyd,EAAe;AACzB,MAAI,CAACM,EAAU,SAAS/d,KAAO,QAAQM,EAAQ,MAAM,WAEnDN,IAAMM,EAAQ,MAAM,CAAC,EAAE,QAEzBN,IAAM8c,GAAuB9c,GAAK+c,EAAS,KAAK,GAChDS,GAAwBxd,GAAK0d,GAAUX,EAAS,OAAOY,EAAS,OAAOP,EAAc,KAAK,GAC1FiB,EAAsBre,CAAG,GACzBwe,EAAkBxe,CAAG;AAAA,IACvB;AAEA,WAAAkgB,EAAA,GAGIrC,EAAkB,iBAAiB,UACrC0B,EAAa,QAAW9B,EAAe,KAAK,EAAE,KAAK,MAAM;AACvD,MAAAyC,EAAA;AAAA,IACF,CAAC;;aA/SO9a,EAAAwC,CAAA,UAFRzC,EA+DYS,GA9DLR,EAAAuY,CAAA,IAAQ,eAAA,gBAAA,GADfzP,EA+DY;AAAA;iBA5DN;AAAA,QAAJ,KAAI8P;AAAA,oBACKN,EAAA;AAAA,sDAAAA,EAAQ,QAAA5O;AAAA,QAChB,QAAQ1J,EAAAmD,CAAA,GAAUnD,MAAcA,EAAAyC,CAAA,2BAAyCuW,EAAA,OAAW;AAAA,QACpF,OAAO9d,EAAA;AAAA,QACP,iBAAe;AAAA,QAChB,OAAA;AAAA,QACC,qBAAmB;AAAA,QACnB,kBAAgB8E,EAAA2Y,CAAA,KAAc3Y,QAAYsY,EAAA,MAAS,SAAM;AAAA,QACzD,WAAWtY,EAAA2Y,CAAA;AAAA,QACX,UAAU3Y,EAAA2X,CAAA;AAAA,QACV,SAASnL,EAAA;AAAA,QACT,iBAAe;AAAA,QACf,oBAAkBxM,EAAA6D,CAAA,EAAgB,WAAQ,GAAM7D,EAAA6D,CAAA,EAAgB,IAAI,UAAA;AAAA,QACpE,cAAY,EAAA,WAAA,MAAA;AAAA,QACZ,QAAQiV,EAAA;AAAA,MAAA,GACD9Y,EAAA6D,CAAA,GAAe;AAAA,QACtB,oCAAgBkX,MAAeZ,EAAaY,GAAO,MAAS;AAAA,QAC5D,uBAAoBX;AAAA,QACpB,wCAAa9B,EAAA,QAAQ;AAAA,QACrB,+BAAMvW,EAAA,QAAO;AAAA,QACM,oBAAA0C,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAiF,MAAAsQ,EAAYtQ,CAAM;AAAA,MAAA;QAE3B,MAAItF,EACb,CAaS,EAdQ,MAAAyM,QAAI;AAAA,gBACrB9Q,EAaSib,IAAA;AAAA,YAZN,KAAKnK,EAAK;AAAA,YACX,OAAA;AAAA,YACA,MAAK;AAAA,YACL,OAAM;AAAA,YACL,SAAS7Q,EAAA2X,CAAA,IAAQ,UAAA;AAAA,YACjB,UAAU3X,EAAA2X,CAAA;AAAA,YACV,yBAAa0C,GAAU3Q,IAAQmH,EAAK,KAAK;AAAA,UAAA;YAE/B,WACT,MAAA;;AAAwE;AAAA,iBAArDjO,KAAAiO,EAAK,QAAL,QAAAjO,GAAU,aAA7B7C,EAAwEC,EAAAM,CAAA,GAAA;AAAA;kBAArC,OAAM;AAAA,kBAAQ,MAAMuQ,EAAK,IAAI;AAAA,gBAAA;;;uBAElE,MAAmE;AAAA,cAAnEhM,GAAmE,QAAA;AAAA,gBAA5D,4BAAyB7E,EAAA2X,CAAA,GAAQ;AAAA,cAAA,GAAOzO,EAAA2H,EAAK,KAAK,GAAA,CAAA;AAAA,YAAA;;;;QAGlD,OAAKzM,EACd,CAA6CM,MADpB;AAAA,UACzBJ,EAA6CtE,EAAA2E,EAAA,GAAA;AAAA,YAAlC,MAAMD;AAAA,YAAY,OAAO1E,EAAA6C,CAAA;AAAA,UAAA;;QAG3B,MAAIuB,EACb,CAMc,EAAA,OAPU6W,GAAM,MAAApK,SAAI;AAAA,UAClCvM,EAMcmQ,UANOwG,CAAI,CAAA,GAAA;AAAA,YACZ,WACT,MAAA;;AAEO;AAAA,iBAFKrY,KAAAiO,GAAK,QAAL,QAAAjO,GAAU,QAAtB8F,KAAAvI,EAEO,QAFP2E,IAEO;AAAA,kBADLR,EAAyDtE,EAAAM,CAAA,GAAA;AAAA,oBAA5C,OAAM;AAAA,oBAAe,MAAMuQ,GAAK,IAAI;AAAA,kBAAA;;;;;;;QAK9C,SAAOzM,EAChB,CAAyD,EADrC,SAAAC,QAAO;AAAA,UAC3BC,EAAyDtE,EAAAuE,EAAA,GAAA;AAAA,YAAzC,SAAAF;AAAA,YAAmB,QAAQrE,EAAAqC,CAAA;AAAA,UAAA;;;;QAE7B6C,EAAAA,OAAM,cAAA;gBAAmB;AAAA,UACvC,IAAAd,EAAA,CADqD3E,MAAK;AAAA,YAC1DsF,GAA2CC,gCAATvF,CAAK,CAAA,GAAA,QAAA,EAAA;AAAA,UAAA;;;QAEzByF,EAAAA,OAAM,eAAA;gBAAoB;AAAA,UACxC,IAAAd,EAAA,CADuD3E,MAAK;AAAA,YAC5DsF,GAA4CC,iCAATvF,CAAK,CAAA,GAAA,QAAA,EAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvC9C,UAAMA,IAAQC,GAORiE,IAAQC,GAER,EAAE,cAAAuF,GAAc,YAAA3G,GAAY,OAAAK,GAAO,YAAAR,GAAY,SAAAN,GAAS,OAAA1F,GAAO,iBAAAoG,GAAiB,iBAAAoB,EAAA,IAAoB5C;AAAA,MACxGxB;AAAA,MACAkE;AAAA,IAAA,GAEI,EAAE,UAAAR,EAAA,IAAamH,GAAO7K,CAAK;;;aAnCpBO,EAAAwC,CAAA,UAAXrC,EAaM,OAAA;AAAA;QAbiB,OAAKC,GAAA,CAAC,yBAAuB,CAAUJ,EAAAmJ,CAAA,GAAcnJ,EAAAyC,CAAA,CAAe,CAAA,CAAA;AAAA,MAAA;QACzF6B,EAWa4W,GAXbpS,EAWa;AAAA,sBAVF9I,EAAA3D,CAAA;AAAA,gEAAAA,EAAK,QAAAqN,IAAA;AAAA,UACb,OAAO1J,EAAAmD,CAAA;AAAA,UACP,MAAMzD,EAAA;AAAA,UACN,cAAYA,EAAA,WAAO,KAAA;AAAA,UACnB,YAAUA,EAAA;AAAA,QAAA,GACHM,EAAA6D,CAAA,GAAe;AAAA,UACtB,+BAAM9B,EAAA,QAAO;AAAA,QAAA;UAEH,OAAKqC,EAAa,CAA6CM,MAA/C;AAAA,YAAEJ,EAA6CtE,EAAA2E,EAAA,GAAA;AAAA,cAAlC,MAAMD;AAAA,cAAY,OAAO1E,EAAA6C,CAAA;AAAA,YAAA;;UACtD,SAAOuB,EAAe,CAAyD,EAApE,SAAAC,QAAO;AAAA,YAAIC,EAAyDtE,EAAAuE,EAAA,GAAA;AAAA,cAAzC,SAAAF;AAAA,cAAmB,QAAQrE,EAAAqC,CAAA;AAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8CCarE8Y,KAAyB;AAAA,EACpC,cAAcC;AAAAA,EACd,eAAeC;AAAAA,EACf,YAAYC;AAAAA,EACZ,gBAAgBC;AAAAA,EAChB,WAAWC;AAAAA,EACX,YAAYC;AAAAA,EACZ,YAAYC;AAAAA,EACZ,iBAAiBnX;AAAAA,EACjB,YAAYI;AAAAA,EACZ,iBAAiBgX;AAAAA,EACjB,aAAaC;AAAA,EACb,gBAAgBC;AAClB;;8CCpBaC,KAAqB;AAAA,EAChC,SAAS,CAACC,GAAU7gB,MAAiD;;AACnE,IAAA6gB,EAAI,QAAQpb,IAA0BzF,KAAA,OAAAA,IAAW,CAAA,CAAE,IAC/C0H,IAAA1H,KAAA,gBAAAA,EAAS,uBAAT,QAAA0H,KACF,OAAO,QAAQoZ,EAAM,EAAE,IAAI,CAAC,CAAChN,GAAMiN,CAAS,MAAMF,EAAI,UAAU/M,GAAMiN,CAAS,CAAC,IAE9EtZ,IAAAzH,KAAA,gBAAAA,EAAS,8BAAT,QAAAyH,KACF,OAAO,QAAQuZ,EAAiB,EAAE,IAAI,CAAC,CAAClN,GAAMiN,CAAS,MAAMF,EAAI,UAAU/M,GAAMiN,CAAS,CAAC;AAAA,EAE/F;AACF;","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}