@stonecrop/desktop 0.8.1 → 0.8.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.
- package/dist/desktop.css +1 -1
- package/dist/desktop.js +175 -175
- package/dist/desktop.js.map +1 -1
- package/dist/desktop.umd.cjs +3 -3
- package/dist/desktop.umd.cjs.map +1 -1
- package/package.json +5 -5
package/dist/desktop.umd.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"desktop.umd.cjs","sources":["../src/components/ActionSet.vue","../src/components/CommandPalette.vue","../../stonecrop/dist/stonecrop.js","../../aform/dist/aform.js","../src/components/SheetNav.vue","../src/components/Desktop.vue","../src/plugins/index.ts"],"sourcesContent":["<template>\n\t<div\n\t\t:class=\"{ 'open-set': isOpen, 'hovered-and-closed': closeClicked }\"\n\t\tclass=\"action-set collapse\"\n\t\t@mouseover=\"onHover\"\n\t\t@mouseleave=\"onHoverLeave\">\n\t\t<div class=\"action-menu-icon\">\n\t\t\t<div id=\"chevron\" @click=\"closeClicked = !closeClicked\">\n\t\t\t\t<svg\n\t\t\t\t\tid=\"Layer_1\"\n\t\t\t\t\tclass=\"leftBar\"\n\t\t\t\t\tversion=\"1.1\"\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\t\t\t\t\tx=\"0px\"\n\t\t\t\t\ty=\"0px\"\n\t\t\t\t\tviewBox=\"0 0 100 100\"\n\t\t\t\t\txml:space=\"preserve\"\n\t\t\t\t\twidth=\"50\"\n\t\t\t\t\theight=\"50\">\n\t\t\t\t\t<polygon points=\"54.2,33.4 29.2,58.8 25,54.6 50,29.2 \" />\n\t\t\t\t</svg>\n\n\t\t\t\t<svg\n\t\t\t\t\tid=\"Layer_1\"\n\t\t\t\t\tclass=\"rightBar\"\n\t\t\t\t\tversion=\"1.1\"\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\t\t\t\t\tx=\"0px\"\n\t\t\t\t\ty=\"0px\"\n\t\t\t\t\tviewBox=\"0 0 100 100\"\n\t\t\t\t\txml:space=\"preserve\"\n\t\t\t\t\twidth=\"50\"\n\t\t\t\t\theight=\"50\">\n\t\t\t\t\t<polygon points=\"70.8,58.8 45.8,33.4 50,29.2 75,54.6 \" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t\t<div style=\"margin-right: 30px\"></div>\n\t\t<div v-for=\"(el, index) in elements\" :key=\"el.label\" class=\"action-element\">\n\t\t\t<button\n\t\t\t\tv-if=\"el.type == 'button'\"\n\t\t\t\t:disabled=\"el.disabled\"\n\t\t\t\tclass=\"button-default\"\n\t\t\t\t@click=\"handleClick(el.action, el.label)\">\n\t\t\t\t{{ el.label }}\n\t\t\t</button>\n\t\t\t<div v-if=\"el.type == 'dropdown'\">\n\t\t\t\t<button class=\"button-default\" @click=\"toggleDropdown(index)\">{{ el.label }}</button>\n\t\t\t\t<div v-show=\"dropdownStates[index]\" class=\"dropdown-container\">\n\t\t\t\t\t<div class=\"dropdown\">\n\t\t\t\t\t\t<div v-for=\"(item, itemIndex) in el.actions\" :key=\"item.label\">\n\t\t\t\t\t\t\t<button v-if=\"item.action != null\" class=\"dropdown-item\" @click=\"handleClick(item.action, item.label)\">\n\t\t\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<a v-else-if=\"item.link != null\" :href=\"item.link\"\n\t\t\t\t\t\t\t\t><button class=\"dropdown-item\">{{ item.label }}</button></a\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue'\n\nimport type { ActionElements } from '../types'\n\nconst { elements = [] } = defineProps<{ elements?: ActionElements[] }>()\nconst emit = defineEmits<{\n\tactionClick: [label: string, action: (() => void | Promise<void>) | undefined]\n}>()\n\n// Track dropdown open state separately (index -> boolean)\nconst dropdownStates = ref<Record<number, boolean>>({})\n\nconst isOpen = ref(false)\nconst timeoutId = ref<number>(-1)\nconst hover = ref(false)\nconst closeClicked = ref(false)\n\nonMounted(() => {\n\tcloseDropdowns()\n})\n\nconst closeDropdowns = () => {\n\tdropdownStates.value = {}\n}\n\nconst onHover = () => {\n\thover.value = true\n\ttimeoutId.value = setTimeout(() => {\n\t\tif (hover.value) {\n\t\t\tisOpen.value = true\n\t\t}\n\t}, 500)\n}\n\nconst onHoverLeave = () => {\n\thover.value = false\n\tcloseClicked.value = false\n\tclearTimeout(timeoutId.value)\n\tisOpen.value = false\n}\n\nconst toggleDropdown = (index: number) => {\n\tconst showDropdown = !dropdownStates.value[index]\n\tcloseDropdowns()\n\tif (showDropdown) {\n\t\tdropdownStates.value[index] = true\n\t}\n}\n\nconst handleClick = (action: (() => void | Promise<void>) | undefined, label: string) => {\n\t// Emit event to parent - parent will handle execution\n\temit('actionClick', label, action)\n}\n</script>\n\n<style scoped>\n#chevron {\n\tposition: relative;\n\ttransform: rotate(90deg);\n}\n\n.leftBar,\n.rightBar {\n\ttransition-duration: 0.225s;\n\ttransition-property: transform;\n}\n\n.leftBar,\n.action-set.collapse.hovered-and-closed:hover .leftBar {\n\ttransform-origin: 33.4% 50%;\n\ttransform: rotate(90deg);\n}\n\n.rightBar,\n.action-set.collapse.hovered-and-closed:hover .rightBar {\n\ttransform-origin: 67% 50%;\n\ttransform: rotate(-90deg);\n}\n\n.rightBar {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n}\n\n.action-set.collapse:hover .leftBar {\n\ttransform: rotate(0);\n}\n\n.action-set.collapse:hover .rightBar {\n\ttransform: rotate(0);\n}\n\n.action-set {\n\tposition: fixed;\n\ttop: 10px;\n\tright: 10px;\n\tpadding: 20px;\n\tbox-shadow: 0px 1px 2px rgba(25, 39, 52, 0.05), 0px 0px 4px rgba(25, 39, 52, 0.1);\n\tborder-radius: 10px;\n\tdisplay: flex;\n\tflex-direction: row-reverse;\n\tbackground-color: white;\n\toverflow: hidden;\n\tz-index: 1001; /* Above SheetNav (100) and operation log button (999) */\n}\n\n.action-menu-icon {\n\tposition: absolute;\n\ttop: 6px;\n\tright: 4px;\n}\n\n.action-menu-icon svg {\n\tfill: #333333;\n}\n\n.action-set.collapse,\n.action-set.collapse.hovered-and-closed:hover {\n\tmax-width: 25px;\n\toverflow: hidden;\n\n\t-webkit-transition: max-width 0.5s ease-in-out;\n\t-moz-transition: max-width 0.5s ease-in-out;\n\t-o-transition: max-width 0.5s ease-in-out;\n\ttransition: max-width 0.5s ease-in-out;\n}\n\n.action-set.collapse .action-element,\n.action-set.collapse.hovered-and-closed:hover .action-element {\n\topacity: 0;\n\t-webkit-transition: opacity 0.25s ease-in-out;\n\t-moz-transition: opacity 0.25s ease-in-out;\n\t-o-transition: opacity 0.25s ease-in-out;\n\ttransition: opacity 0.25s ease-in-out;\n\ttransition-delay: 0s;\n}\n\n.action-set.collapse:hover {\n\tmax-width: 500px;\n}\n\n.action-set.collapse.open-set:hover {\n\toverflow: visible !important;\n}\n\n.action-set.collapse.hovered-and-closed:hover .action-element {\n\topacity: 0 !important;\n\t/* transition-delay: 0.5s; */\n}\n\n.action-set.collapse:hover .action-element {\n\topacity: 100 !important;\n\t/* transition-delay: 0.5s; */\n}\n\n.action-element {\n\tmargin-left: 5px;\n\tmargin-right: 5px;\n\tposition: relative; /* Make this the positioning context for absolute children */\n}\nbutton.button-default {\n\tbackground-color: #ffffff;\n\tpadding: 5px 12px;\n\tborder-radius: 3px;\n\tbox-shadow: rgba(0, 0, 0, 0.05) 0px 0.5px 0px 0px, rgba(0, 0, 0, 0.08) 0px 0px 0px 1px,\n\t\trgba(0, 0, 0, 0.05) 0px 2px 4px 0px;\n\tborder: none;\n\tcursor: pointer;\n\twhite-space: nowrap;\n}\n\nbutton.button-default:hover {\n\tbackground-color: #f2f2f2;\n}\n\nbutton.button-default:disabled {\n\topacity: 0.5;\n\tcursor: not-allowed;\n\tbackground-color: #f5f5f5;\n\tcolor: #999;\n}\n\nbutton.button-default:disabled:hover {\n\tbackground-color: #f5f5f5;\n}\n\n.dropdown-container {\n\tposition: relative;\n}\n\n.dropdown {\n\tposition: absolute;\n\tright: 0;\n\tmin-width: 200px;\n\tbox-shadow: 0 0.5rem 1rem rgb(0 0 0 / 18%);\n\tborder-radius: 10px;\n\tbackground-color: #ffffff;\n\tpadding: 10px;\n\tz-index: 1000;\n}\n\nbutton.dropdown-item {\n\twidth: 100%;\n\tpadding: 8px 5px;\n\ttext-align: left;\n\tborder: none;\n\tbackground-color: #ffffff;\n\tcursor: pointer;\n\tborder-radius: 5px;\n}\n\nbutton.dropdown-item:hover {\n\tbackground-color: #f2f2f2;\n}\n</style>\n","<template>\n\t<Teleport to=\"body\">\n\t\t<Transition name=\"fade\">\n\t\t\t<div v-if=\"isOpen\" class=\"command-palette-overlay\" @click=\"closeModal\">\n\t\t\t\t<div class=\"command-palette\" @click.stop>\n\t\t\t\t\t<div class=\"command-palette-header\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tref=\"input\"\n\t\t\t\t\t\t\tv-model=\"query\"\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tclass=\"command-palette-input\"\n\t\t\t\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t\t\t\tautofocus\n\t\t\t\t\t\t\t@keydown=\"handleKeydown\" />\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div v-if=\"results.length\" class=\"command-palette-results\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-for=\"(result, index) in results\"\n\t\t\t\t\t\t\t:key=\"index\"\n\t\t\t\t\t\t\tclass=\"command-palette-result\"\n\t\t\t\t\t\t\t:class=\"{ selected: index === selectedIndex }\"\n\t\t\t\t\t\t\t@click=\"selectResult(result)\"\n\t\t\t\t\t\t\t@mouseover=\"selectedIndex = index\">\n\t\t\t\t\t\t\t<div class=\"result-title\">\n\t\t\t\t\t\t\t\t<slot name=\"title\" :result=\"result\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"result-content\">\n\t\t\t\t\t\t\t\t<slot name=\"content\" :result=\"result\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div v-else-if=\"query && !results.length\" class=\"command-palette-no-results\">\n\t\t\t\t\t\t<slot name=\"empty\"> No results found for \"{{ query }}\" </slot>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Transition>\n\t</Teleport>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport { ref, computed, watch, nextTick, useTemplateRef } from 'vue'\n\ndefineSlots<{\n\ttitle?: { result: T }\n\tcontent?: { result: T }\n\tempty?: null\n}>()\n\nconst {\n\tsearch,\n\tisOpen = false,\n\tplaceholder = 'Type a command or search...',\n\tmaxResults = 10,\n} = defineProps<{\n\tsearch: (query: string) => T[]\n\tisOpen?: boolean\n\tplaceholder?: string\n\tmaxResults?: number\n}>()\n\nconst emit = defineEmits<{\n\tselect: [T]\n\tclose: []\n}>()\n\nconst query = ref('')\nconst selectedIndex = ref(0)\nconst inputRef = useTemplateRef('input')\n\nconst results = computed(() => {\n\tif (!query.value) return []\n\tconst results = search(query.value)\n\treturn results.slice(0, maxResults)\n})\n\n// reset search query when modal opens\nwatch(\n\t() => isOpen,\n\tasync isOpen => {\n\t\tif (isOpen) {\n\t\t\tquery.value = ''\n\t\t\tselectedIndex.value = 0\n\t\t\tawait nextTick()\n\t\t\t;(inputRef.value as HTMLInputElement)?.focus()\n\t\t}\n\t}\n)\n\n// reset selected index when results change\nwatch(results, () => {\n\tselectedIndex.value = 0\n})\n\nconst closeModal = () => {\n\temit('close')\n}\n\nconst handleKeydown = (e: KeyboardEvent) => {\n\tswitch (e.key) {\n\t\tcase 'Escape':\n\t\t\tcloseModal()\n\t\t\tbreak\n\t\tcase 'ArrowDown':\n\t\t\te.preventDefault()\n\t\t\tif (results.value.length) {\n\t\t\t\tselectedIndex.value = (selectedIndex.value + 1) % results.value.length\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'ArrowUp':\n\t\t\te.preventDefault()\n\t\t\tif (results.value.length) {\n\t\t\t\tselectedIndex.value = (selectedIndex.value - 1 + results.value.length) % results.value.length\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'Enter':\n\t\t\tif (results.value.length && selectedIndex.value >= 0) {\n\t\t\t\tselectResult(results.value[selectedIndex.value])\n\t\t\t}\n\t\t\tbreak\n\t}\n}\n\nconst selectResult = (result: T) => {\n\temit('select', result)\n\tcloseModal()\n}\n</script>\n\n<style>\n.fade-enter-active,\n.fade-leave-active {\n\ttransition: opacity 0.2s ease;\n}\n\n.fade-enter-from,\n.fade-leave-to {\n\topacity: 0;\n}\n\n.command-palette-overlay {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: rgba(0, 0, 0, 0.5);\n\tdisplay: flex;\n\talign-items: flex-start;\n\tjustify-content: center;\n\tz-index: 9999;\n\tpadding-top: 100px;\n}\n\n.command-palette {\n\twidth: 600px;\n\tmax-width: 90%;\n\tbackground-color: white;\n\tborder-radius: 8px;\n\tbox-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n\toverflow: hidden;\n\tmax-height: 80vh;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.command-palette-header {\n\tdisplay: flex;\n\tborder-bottom: 1px solid #eaeaea;\n\tpadding: 12px;\n}\n\n.command-palette-input {\n\tflex: 1;\n\tborder: none;\n\toutline: none;\n\tfont-size: 16px;\n\tpadding: 8px 12px;\n\tbackground-color: transparent;\n}\n\n.command-palette-close {\n\tbackground: transparent;\n\tborder: none;\n\tfont-size: 24px;\n\tcursor: pointer;\n\tcolor: #666;\n\tpadding: 0 8px;\n}\n\n.command-palette-close:hover {\n\tcolor: #333;\n}\n\n.command-palette-results {\n\toverflow-y: auto;\n\tmax-height: 60vh;\n}\n\n.command-palette-result {\n\tpadding: 12px 16px;\n\tcursor: pointer;\n\tborder-bottom: 1px solid #f0f0f0;\n}\n\n.command-palette-result:hover,\n.command-palette-result.selected {\n\tbackground-color: #f5f5f5;\n}\n\n.command-palette-result.selected {\n\tbackground-color: rgba(132, 60, 3, 0.1);\n}\n\n.result-title {\n\tfont-weight: 500;\n\tmargin-bottom: 4px;\n\tcolor: #333;\n}\n\n.result-content {\n\tfont-size: 14px;\n\tcolor: #666;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n.command-palette-no-results {\n\tpadding: 20px 16px;\n\ttext-align: center;\n\tcolor: #666;\n}\n</style>\n","import { hasInjectionContext as Ae, inject as oe, getCurrentInstance as Me, toRaw as Fe, computed as W, isRef as se, isReactive as be, toRef as ce, ref as B, reactive as ye, markRaw as ae, effectScope as Ye, nextTick as de, getCurrentScope as Xe, onScopeDispose as et, watch as U, toRefs as $e, onMounted as Be, readonly as je, customRef as tt, toValue as q, shallowRef as We, unref as rt, provide as De } from \"vue\";\nconst te = typeof window < \"u\";\nlet G;\nconst me = (n) => G = n;\nprocess.env.NODE_ENV;\nconst Pe = process.env.NODE_ENV !== \"production\" ? /* @__PURE__ */ Symbol(\"pinia\") : (\n /* istanbul ignore next */\n /* @__PURE__ */ Symbol()\n);\nfunction Y(n) {\n return n && typeof n == \"object\" && Object.prototype.toString.call(n) === \"[object Object]\" && typeof n.toJSON != \"function\";\n}\nvar le;\n(function(n) {\n n.direct = \"direct\", n.patchObject = \"patch object\", n.patchFunction = \"patch function\";\n})(le || (le = {}));\nfunction He(n, e) {\n for (const t in e) {\n const r = e[t];\n if (!(t in n))\n continue;\n const o = n[t];\n Y(o) && Y(r) && !se(r) && !be(r) ? n[t] = He(o, r) : n[t] = r;\n }\n return n;\n}\nconst ze = () => {\n};\nfunction Te(n, e, t, r = ze) {\n n.add(e);\n const o = () => {\n n.delete(e) && r();\n };\n return !t && Xe() && et(o), o;\n}\nfunction ee(n, ...e) {\n n.forEach((t) => {\n t(...e);\n });\n}\nconst nt = (n) => n(), Ie = /* @__PURE__ */ Symbol(), Ee = /* @__PURE__ */ Symbol();\nfunction Ne(n, e) {\n n instanceof Map && e instanceof Map ? e.forEach((t, r) => n.set(r, t)) : n instanceof Set && e instanceof Set && e.forEach(n.add, n);\n for (const t in e) {\n if (!e.hasOwnProperty(t))\n continue;\n const r = e[t], o = n[t];\n Y(o) && Y(r) && n.hasOwnProperty(t) && !se(r) && !be(r) ? n[t] = Ne(o, r) : n[t] = r;\n }\n return n;\n}\nconst ot = process.env.NODE_ENV !== \"production\" ? /* @__PURE__ */ Symbol(\"pinia:skipHydration\") : (\n /* istanbul ignore next */\n /* @__PURE__ */ Symbol()\n);\nfunction st(n) {\n return !Y(n) || !Object.prototype.hasOwnProperty.call(n, ot);\n}\nconst { assign: z } = Object;\nfunction Ce(n) {\n return !!(se(n) && n.effect);\n}\nfunction ke(n, e, t, r) {\n const { state: o, actions: s, getters: i } = e, a = t.state.value[n];\n let c;\n function f() {\n !a && (process.env.NODE_ENV === \"production\" || !r) && (t.state.value[n] = o ? o() : {});\n const g = process.env.NODE_ENV !== \"production\" && r ? (\n // use ref() to unwrap refs inside state TODO: check if this is still necessary\n $e(B(o ? o() : {}).value)\n ) : $e(t.state.value[n]);\n return z(g, s, Object.keys(i || {}).reduce((b, A) => (process.env.NODE_ENV !== \"production\" && A in g && console.warn(`[🍍]: A getter cannot have the same name as another state property. Rename one of them. Found with \"${A}\" in store \"${n}\".`), b[A] = ae(W(() => {\n me(t);\n const $ = t._s.get(n);\n return i[A].call($, $);\n })), b), {}));\n }\n return c = _e(n, f, e, t, r, !0), c;\n}\nfunction _e(n, e, t = {}, r, o, s) {\n let i;\n const a = z({ actions: {} }, t);\n if (process.env.NODE_ENV !== \"production\" && !r._e.active)\n throw new Error(\"Pinia destroyed\");\n const c = { deep: !0 };\n process.env.NODE_ENV !== \"production\" && (c.onTrigger = (d) => {\n f ? $ = d : f == !1 && !v._hotUpdating && (Array.isArray($) ? $.push(d) : console.error(\"🍍 debuggerEvents should be an array. This is most likely an internal Pinia bug.\"));\n });\n let f, g, b = /* @__PURE__ */ new Set(), A = /* @__PURE__ */ new Set(), $;\n const k = r.state.value[n];\n !s && !k && (process.env.NODE_ENV === \"production\" || !o) && (r.state.value[n] = {});\n const x = B({});\n let N;\n function D(d) {\n let p;\n f = g = !1, process.env.NODE_ENV !== \"production\" && ($ = []), typeof d == \"function\" ? (d(r.state.value[n]), p = {\n type: le.patchFunction,\n storeId: n,\n events: $\n }) : (Ne(r.state.value[n], d), p = {\n type: le.patchObject,\n payload: d,\n storeId: n,\n events: $\n });\n const R = N = /* @__PURE__ */ Symbol();\n de().then(() => {\n N === R && (f = !0);\n }), g = !0, ee(b, p, r.state.value[n]);\n }\n const P = s ? function() {\n const { state: p } = t, R = p ? p() : {};\n this.$patch((F) => {\n z(F, R);\n });\n } : (\n /* istanbul ignore next */\n process.env.NODE_ENV !== \"production\" ? () => {\n throw new Error(`🍍: Store \"${n}\" is built using the setup syntax and does not implement $reset().`);\n } : ze\n );\n function S() {\n i.stop(), b.clear(), A.clear(), r._s.delete(n);\n }\n const C = (d, p = \"\") => {\n if (Ie in d)\n return d[Ee] = p, d;\n const R = function() {\n me(r);\n const F = Array.from(arguments), w = /* @__PURE__ */ new Set(), T = /* @__PURE__ */ new Set();\n function L(m) {\n w.add(m);\n }\n function y(m) {\n T.add(m);\n }\n ee(A, {\n args: F,\n name: R[Ee],\n store: v,\n after: L,\n onError: y\n });\n let E;\n try {\n E = d.apply(this && this.$id === n ? this : v, F);\n } catch (m) {\n throw ee(T, m), m;\n }\n return E instanceof Promise ? E.then((m) => (ee(w, m), m)).catch((m) => (ee(T, m), Promise.reject(m))) : (ee(w, E), E);\n };\n return R[Ie] = !0, R[Ee] = p, R;\n }, O = /* @__PURE__ */ ae({\n actions: {},\n getters: {},\n state: [],\n hotState: x\n }), _ = {\n _p: r,\n // _s: scope,\n $id: n,\n $onAction: Te.bind(null, A),\n $patch: D,\n $reset: P,\n $subscribe(d, p = {}) {\n const R = Te(b, d, p.detached, () => F()), F = i.run(() => U(() => r.state.value[n], (w) => {\n (p.flush === \"sync\" ? g : f) && d({\n storeId: n,\n type: le.direct,\n events: $\n }, w);\n }, z({}, c, p)));\n return R;\n },\n $dispose: S\n }, v = ye(process.env.NODE_ENV !== \"production\" || process.env.NODE_ENV !== \"production\" && process.env.NODE_ENV !== \"test\" && te ? z(\n {\n _hmrPayload: O,\n _customProperties: ae(/* @__PURE__ */ new Set())\n // devtools custom properties\n },\n _\n // must be added later\n // setupStore\n ) : _);\n r._s.set(n, v);\n const M = (r._a && r._a.runWithContext || nt)(() => r._e.run(() => (i = Ye()).run(() => e({ action: C }))));\n for (const d in M) {\n const p = M[d];\n if (se(p) && !Ce(p) || be(p))\n process.env.NODE_ENV !== \"production\" && o ? x.value[d] = ce(M, d) : s || (k && st(p) && (se(p) ? p.value = k[d] : Ne(p, k[d])), r.state.value[n][d] = p), process.env.NODE_ENV !== \"production\" && O.state.push(d);\n else if (typeof p == \"function\") {\n const R = process.env.NODE_ENV !== \"production\" && o ? p : C(p, d);\n M[d] = R, process.env.NODE_ENV !== \"production\" && (O.actions[d] = p), a.actions[d] = p;\n } else process.env.NODE_ENV !== \"production\" && Ce(p) && (O.getters[d] = s ? (\n // @ts-expect-error\n t.getters[d]\n ) : p, te && (M._getters || // @ts-expect-error: same\n (M._getters = ae([]))).push(d));\n }\n if (z(v, M), z(Fe(v), M), Object.defineProperty(v, \"$state\", {\n get: () => process.env.NODE_ENV !== \"production\" && o ? x.value : r.state.value[n],\n set: (d) => {\n if (process.env.NODE_ENV !== \"production\" && o)\n throw new Error(\"cannot set hotState\");\n D((p) => {\n z(p, d);\n });\n }\n }), process.env.NODE_ENV !== \"production\" && (v._hotUpdate = ae((d) => {\n v._hotUpdating = !0, d._hmrPayload.state.forEach((p) => {\n if (p in v.$state) {\n const R = d.$state[p], F = v.$state[p];\n typeof R == \"object\" && Y(R) && Y(F) ? He(R, F) : d.$state[p] = F;\n }\n v[p] = ce(d.$state, p);\n }), Object.keys(v.$state).forEach((p) => {\n p in d.$state || delete v[p];\n }), f = !1, g = !1, r.state.value[n] = ce(d._hmrPayload, \"hotState\"), g = !0, de().then(() => {\n f = !0;\n });\n for (const p in d._hmrPayload.actions) {\n const R = d[p];\n v[p] = //\n C(R, p);\n }\n for (const p in d._hmrPayload.getters) {\n const R = d._hmrPayload.getters[p], F = s ? (\n // special handling of options api\n W(() => (me(r), R.call(v, v)))\n ) : R;\n v[p] = //\n F;\n }\n Object.keys(v._hmrPayload.getters).forEach((p) => {\n p in d._hmrPayload.getters || delete v[p];\n }), Object.keys(v._hmrPayload.actions).forEach((p) => {\n p in d._hmrPayload.actions || delete v[p];\n }), v._hmrPayload = d._hmrPayload, v._getters = d._getters, v._hotUpdating = !1;\n })), process.env.NODE_ENV !== \"production\" && process.env.NODE_ENV !== \"test\" && te) {\n const d = {\n writable: !0,\n configurable: !0,\n // avoid warning on devtools trying to display this property\n enumerable: !1\n };\n [\"_p\", \"_hmrPayload\", \"_getters\", \"_customProperties\"].forEach((p) => {\n Object.defineProperty(v, p, z({ value: v[p] }, d));\n });\n }\n return r._p.forEach((d) => {\n if (process.env.NODE_ENV !== \"production\" && process.env.NODE_ENV !== \"test\" && te) {\n const p = i.run(() => d({\n store: v,\n app: r._a,\n pinia: r,\n options: a\n }));\n Object.keys(p || {}).forEach((R) => v._customProperties.add(R)), z(v, p);\n } else\n z(v, i.run(() => d({\n store: v,\n app: r._a,\n pinia: r,\n options: a\n })));\n }), process.env.NODE_ENV !== \"production\" && v.$state && typeof v.$state == \"object\" && typeof v.$state.constructor == \"function\" && !v.$state.constructor.toString().includes(\"[native code]\") && console.warn(`[🍍]: The \"state\" must be a plain object. It cannot be\n\tstate: () => new MyClass()\nFound in store \"${v.$id}\".`), k && s && t.hydrate && t.hydrate(v.$state, k), f = !0, g = !0, v;\n}\n// @__NO_SIDE_EFFECTS__\nfunction it(n, e, t) {\n let r;\n const o = typeof e == \"function\";\n r = o ? t : e;\n function s(i, a) {\n const c = Ae();\n if (i = // in test mode, ignore the argument provided as we can always retrieve a\n // pinia instance with getActivePinia()\n (process.env.NODE_ENV === \"test\" && G && G._testing ? null : i) || (c ? oe(Pe, null) : null), i && me(i), process.env.NODE_ENV !== \"production\" && !G)\n throw new Error(`[🍍]: \"getActivePinia()\" was called but there was no active Pinia. Are you trying to use a store before calling \"app.use(pinia)\"?\nSee https://pinia.vuejs.org/core-concepts/outside-component-usage.html for help.\nThis will fail in production.`);\n i = G, i._s.has(n) || (o ? _e(n, e, r, i) : ke(n, r, i), process.env.NODE_ENV !== \"production\" && (s._pinia = i));\n const f = i._s.get(n);\n if (process.env.NODE_ENV !== \"production\" && a) {\n const g = \"__hot:\" + n, b = o ? _e(g, e, r, i, !0) : ke(g, z({}, r), i, !0);\n a._hotUpdate(b), delete i.state.value[g], i._s.delete(g);\n }\n if (process.env.NODE_ENV !== \"production\" && te) {\n const g = Me();\n if (g && g.proxy && // avoid adding stores that are just built for hot module replacement\n !a) {\n const b = g.proxy, A = \"_pStores\" in b ? b._pStores : b._pStores = {};\n A[n] = f;\n }\n }\n return f;\n }\n return s.$id = n, s;\n}\nfunction Ue(n) {\n const e = Fe(n), t = {};\n for (const r in e) {\n const o = e[r];\n o.effect ? t[r] = // ...\n W({\n get: () => n[r],\n set(s) {\n n[r] = s;\n }\n }) : (se(o) || be(o)) && (t[r] = // ---\n ce(n, r));\n }\n return t;\n}\nconst at = typeof window < \"u\" && typeof document < \"u\";\ntypeof WorkerGlobalScope < \"u\" && globalThis instanceof WorkerGlobalScope;\nconst ct = Object.prototype.toString, lt = (n) => ct.call(n) === \"[object Object]\", Je = () => {\n};\nfunction ut(...n) {\n if (n.length !== 1) return ce(...n);\n const e = n[0];\n return typeof e == \"function\" ? je(tt(() => ({\n get: e,\n set: Je\n }))) : B(e);\n}\nfunction ft(n, e) {\n function t(...r) {\n return new Promise((o, s) => {\n Promise.resolve(n(() => e.apply(this, r), {\n fn: e,\n thisArg: this,\n args: r\n })).then(o).catch(s);\n });\n }\n return t;\n}\nconst qe = (n) => n();\nfunction dt(n = qe, e = {}) {\n const { initialState: t = \"active\" } = e, r = ut(t === \"active\");\n function o() {\n r.value = !1;\n }\n function s() {\n r.value = !0;\n }\n const i = (...a) => {\n r.value && n(...a);\n };\n return {\n isActive: je(r),\n pause: o,\n resume: s,\n eventFilter: i\n };\n}\nfunction Oe(n) {\n return Array.isArray(n) ? n : [n];\n}\nfunction pt(n) {\n return Me();\n}\nfunction ht(n, e, t = {}) {\n const { eventFilter: r = qe, ...o } = t;\n return U(n, ft(r, e), o);\n}\nfunction gt(n, e, t = {}) {\n const { eventFilter: r, initialState: o = \"active\", ...s } = t, { eventFilter: i, pause: a, resume: c, isActive: f } = dt(r, { initialState: o });\n return {\n stop: ht(n, e, {\n ...s,\n eventFilter: i\n }),\n pause: a,\n resume: c,\n isActive: f\n };\n}\nconst vt = gt;\nfunction yt(n, e = !0, t) {\n pt() ? Be(n, t) : e ? n() : de(n);\n}\nfunction mt(n, e, t) {\n return U(n, e, {\n ...t,\n immediate: !0\n });\n}\nfunction ie(n, e, t) {\n return U(n, (o, s, i) => {\n o && e(o, s, i);\n }, {\n ...t,\n once: !1\n });\n}\nconst Q = at ? window : void 0;\nfunction St(n) {\n var e;\n const t = q(n);\n return (e = t?.$el) !== null && e !== void 0 ? e : t;\n}\nfunction re(...n) {\n const e = (r, o, s, i) => (r.addEventListener(o, s, i), () => r.removeEventListener(o, s, i)), t = W(() => {\n const r = Oe(q(n[0])).filter((o) => o != null);\n return r.every((o) => typeof o != \"string\") ? r : void 0;\n });\n return mt(() => {\n var r, o;\n return [\n (r = (o = t.value) === null || o === void 0 ? void 0 : o.map((s) => St(s))) !== null && r !== void 0 ? r : [Q].filter((s) => s != null),\n Oe(q(t.value ? n[1] : n[0])),\n Oe(rt(t.value ? n[2] : n[1])),\n q(t.value ? n[3] : n[2])\n ];\n }, ([r, o, s, i], a, c) => {\n if (!r?.length || !o?.length || !s?.length) return;\n const f = lt(i) ? { ...i } : i, g = r.flatMap((b) => o.flatMap((A) => s.map(($) => e(b, A, $, f))));\n c(() => {\n g.forEach((b) => b());\n });\n }, { flush: \"post\" });\n}\nconst he = typeof globalThis < \"u\" ? globalThis : typeof window < \"u\" ? window : typeof global < \"u\" ? global : typeof self < \"u\" ? self : {}, ge = \"__vueuse_ssr_handlers__\", bt = /* @__PURE__ */ wt();\nfunction wt() {\n return ge in he || (he[ge] = he[ge] || {}), he[ge];\n}\nfunction Et(n, e) {\n return bt[n] || e;\n}\nfunction Ot(n) {\n return n == null ? \"any\" : n instanceof Set ? \"set\" : n instanceof Map ? \"map\" : n instanceof Date ? \"date\" : typeof n == \"boolean\" ? \"boolean\" : typeof n == \"string\" ? \"string\" : typeof n == \"object\" ? \"object\" : Number.isNaN(n) ? \"any\" : \"number\";\n}\nconst Rt = {\n boolean: {\n read: (n) => n === \"true\",\n write: (n) => String(n)\n },\n object: {\n read: (n) => JSON.parse(n),\n write: (n) => JSON.stringify(n)\n },\n number: {\n read: (n) => Number.parseFloat(n),\n write: (n) => String(n)\n },\n any: {\n read: (n) => n,\n write: (n) => String(n)\n },\n string: {\n read: (n) => n,\n write: (n) => String(n)\n },\n map: {\n read: (n) => new Map(JSON.parse(n)),\n write: (n) => JSON.stringify(Array.from(n.entries()))\n },\n set: {\n read: (n) => new Set(JSON.parse(n)),\n write: (n) => JSON.stringify(Array.from(n))\n },\n date: {\n read: (n) => new Date(n),\n write: (n) => n.toISOString()\n }\n}, Le = \"vueuse-storage\";\nfunction At(n, e, t, r = {}) {\n var o;\n const { flush: s = \"pre\", deep: i = !0, listenToStorageChanges: a = !0, writeDefaults: c = !0, mergeDefaults: f = !1, shallow: g, window: b = Q, eventFilter: A, onError: $ = (w) => {\n console.error(w);\n }, initOnMounted: k } = r, x = (g ? We : B)(e), N = W(() => q(n));\n if (!t) try {\n t = Et(\"getDefaultStorage\", () => Q?.localStorage)();\n } catch (w) {\n $(w);\n }\n if (!t) return x;\n const D = q(e), P = Ot(D), S = (o = r.serializer) !== null && o !== void 0 ? o : Rt[P], { pause: C, resume: O } = vt(x, (w) => d(w), {\n flush: s,\n deep: i,\n eventFilter: A\n });\n U(N, () => R(), { flush: s });\n let _ = !1;\n const v = (w) => {\n k && !_ || R(w);\n }, j = (w) => {\n k && !_ || F(w);\n };\n b && a && (t instanceof Storage ? re(b, \"storage\", v, { passive: !0 }) : re(b, Le, j)), k ? yt(() => {\n _ = !0, R();\n }) : R();\n function M(w, T) {\n if (b) {\n const L = {\n key: N.value,\n oldValue: w,\n newValue: T,\n storageArea: t\n };\n b.dispatchEvent(t instanceof Storage ? new StorageEvent(\"storage\", L) : new CustomEvent(Le, { detail: L }));\n }\n }\n function d(w) {\n try {\n const T = t.getItem(N.value);\n if (w == null)\n M(T, null), t.removeItem(N.value);\n else {\n const L = S.write(w);\n T !== L && (t.setItem(N.value, L), M(T, L));\n }\n } catch (T) {\n $(T);\n }\n }\n function p(w) {\n const T = w ? w.newValue : t.getItem(N.value);\n if (T == null)\n return c && D != null && t.setItem(N.value, S.write(D)), D;\n if (!w && f) {\n const L = S.read(T);\n return typeof f == \"function\" ? f(L, D) : P === \"object\" && !Array.isArray(L) ? {\n ...D,\n ...L\n } : L;\n } else return typeof T != \"string\" ? T : S.read(T);\n }\n function R(w) {\n if (!(w && w.storageArea !== t)) {\n if (w && w.key == null) {\n x.value = D;\n return;\n }\n if (!(w && w.key !== N.value)) {\n C();\n try {\n const T = S.write(x.value);\n (w === void 0 || w?.newValue !== T) && (x.value = p(w));\n } catch (T) {\n $(T);\n } finally {\n w ? de(O) : O();\n }\n }\n }\n }\n function F(w) {\n R(w.detail);\n }\n return x;\n}\nfunction Pt(n, e, t = {}) {\n const { window: r = Q } = t;\n return At(n, e, r?.localStorage, t);\n}\nconst Nt = {\n ctrl: \"control\",\n command: \"meta\",\n cmd: \"meta\",\n option: \"alt\",\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\"\n};\nfunction _t(n = {}) {\n const { reactive: e = !1, target: t = Q, aliasMap: r = Nt, passive: o = !0, onEventFired: s = Je } = n, i = ye(/* @__PURE__ */ new Set()), a = {\n toJSON() {\n return {};\n },\n current: i\n }, c = e ? ye(a) : a, f = /* @__PURE__ */ new Set(), g = /* @__PURE__ */ new Map([\n [\"Meta\", f],\n [\"Shift\", /* @__PURE__ */ new Set()],\n [\"Alt\", /* @__PURE__ */ new Set()]\n ]), b = /* @__PURE__ */ new Set();\n function A(P, S) {\n P in c && (e ? c[P] = S : c[P].value = S);\n }\n function $() {\n i.clear();\n for (const P of b) A(P, !1);\n }\n function k(P, S, C) {\n if (!(!P || typeof S.getModifierState != \"function\")) {\n for (const [O, _] of g) if (S.getModifierState(O)) {\n C.forEach((v) => _.add(v));\n break;\n }\n }\n }\n function x(P, S) {\n if (P) return;\n const C = `${S[0].toUpperCase()}${S.slice(1)}`, O = g.get(C);\n if (![\"shift\", \"alt\"].includes(S) || !O) return;\n const _ = Array.from(O), v = _.indexOf(S);\n _.forEach((j, M) => {\n M >= v && (i.delete(j), A(j, !1));\n }), O.clear();\n }\n function N(P, S) {\n var C, O;\n const _ = (C = P.key) === null || C === void 0 ? void 0 : C.toLowerCase(), v = [(O = P.code) === null || O === void 0 ? void 0 : O.toLowerCase(), _].filter(Boolean);\n if (_ !== \"\") {\n _ && (S ? i.add(_) : i.delete(_));\n for (const j of v)\n b.add(j), A(j, S);\n k(S, P, [...i, ...v]), x(S, _), _ === \"meta\" && !S && (f.forEach((j) => {\n i.delete(j), A(j, !1);\n }), f.clear());\n }\n }\n re(t, \"keydown\", (P) => (N(P, !0), s(P)), { passive: o }), re(t, \"keyup\", (P) => (N(P, !1), s(P)), { passive: o }), re(\"blur\", $, { passive: o }), re(\"focus\", $, { passive: o });\n const D = new Proxy(c, { get(P, S, C) {\n if (typeof S != \"string\") return Reflect.get(P, S, C);\n if (S = S.toLowerCase(), S in r && (S = r[S]), !(S in c)) if (/[+_-]/.test(S)) {\n const _ = S.split(/[+_-]/g).map((v) => v.trim());\n c[S] = W(() => _.map((v) => q(D[v])).every(Boolean));\n } else c[S] = We(!1);\n const O = Reflect.get(P, S, C);\n return e ? q(O) : O;\n } });\n return D;\n}\nfunction Re() {\n return typeof crypto < \"u\" && crypto.randomUUID ? crypto.randomUUID() : `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n}\nfunction ve(n) {\n const e = {\n type: n.type,\n clientId: n.clientId,\n timestamp: n.timestamp.toISOString()\n };\n return n.operation && (e.operation = {\n ...n.operation,\n timestamp: n.operation.timestamp.toISOString()\n }), n.operations && (e.operations = n.operations.map((t) => ({\n ...t,\n timestamp: t.timestamp.toISOString()\n }))), e;\n}\nfunction $t(n) {\n const e = {\n type: n.type,\n clientId: n.clientId,\n timestamp: new Date(n.timestamp)\n };\n return n.operation && (e.operation = {\n ...n.operation,\n timestamp: new Date(n.operation.timestamp)\n }), n.operations && (e.operations = n.operations.map((t) => ({\n ...t,\n timestamp: new Date(t.timestamp)\n }))), e;\n}\nconst pe = /* @__PURE__ */ it(\"hst-operation-log\", () => {\n const n = B({\n maxOperations: 100,\n enableCrossTabSync: !0,\n autoSyncInterval: 3e4,\n enablePersistence: !1,\n persistenceKeyPrefix: \"stonecrop-ops\"\n }), e = B([]), t = B(-1), r = B(Re()), o = B(!1), s = B([]), i = B(null), a = W(() => t.value < 0 ? !1 : e.value[t.value]?.reversible ?? !1), c = W(() => t.value < e.value.length - 1), f = W(() => {\n let u = 0;\n for (let l = t.value; l >= 0 && e.value[l]?.reversible; l--)\n u++;\n return u;\n }), g = W(() => e.value.length - 1 - t.value), b = W(() => ({\n canUndo: a.value,\n canRedo: c.value,\n undoCount: f.value,\n redoCount: g.value,\n currentIndex: t.value\n }));\n function A(u) {\n n.value = { ...n.value, ...u }, n.value.enablePersistence && (y(), m()), n.value.enableCrossTabSync && p();\n }\n function $(u, l = \"user\") {\n const h = {\n ...u,\n id: Re(),\n timestamp: /* @__PURE__ */ new Date(),\n source: l,\n userId: n.value.userId\n };\n if (n.value.operationFilter && !n.value.operationFilter(h))\n return h.id;\n if (o.value)\n return s.value.push(h), h.id;\n if (t.value < e.value.length - 1 && (e.value = e.value.slice(0, t.value + 1)), e.value.push(h), t.value++, n.value.maxOperations && e.value.length > n.value.maxOperations) {\n const I = e.value.length - n.value.maxOperations;\n e.value = e.value.slice(I), t.value -= I;\n }\n return n.value.enableCrossTabSync && R(h), h.id;\n }\n function k() {\n o.value = !0, s.value = [], i.value = Re();\n }\n function x(u) {\n if (!o.value || s.value.length === 0)\n return o.value = !1, s.value = [], i.value = null, null;\n const l = i.value, h = s.value.every((V) => V.reversible), I = {\n id: l,\n type: \"batch\",\n path: \"\",\n // Batch doesn't have a single path\n fieldname: \"\",\n beforeValue: null,\n afterValue: null,\n doctype: s.value[0]?.doctype || \"\",\n timestamp: /* @__PURE__ */ new Date(),\n source: \"user\",\n reversible: h,\n irreversibleReason: h ? void 0 : \"Contains irreversible operations\",\n childOperationIds: s.value.map((V) => V.id),\n metadata: { description: u }\n };\n s.value.forEach((V) => {\n V.parentOperationId = l;\n }), e.value.push(...s.value, I), t.value = e.value.length - 1, n.value.enableCrossTabSync && F(s.value, I);\n const H = l;\n return o.value = !1, s.value = [], i.value = null, H;\n }\n function N() {\n o.value = !1, s.value = [], i.value = null;\n }\n function D(u) {\n if (!a.value) return !1;\n const l = e.value[t.value];\n if (!l.reversible)\n return typeof console < \"u\" && l.irreversibleReason && console.warn(\"Cannot undo irreversible operation:\", l.irreversibleReason), !1;\n try {\n if (l.type === \"batch\" && l.childOperationIds)\n for (let h = l.childOperationIds.length - 1; h >= 0; h--) {\n const I = l.childOperationIds[h], H = e.value.find((V) => V.id === I);\n H && S(H, u);\n }\n else\n S(l, u);\n return t.value--, n.value.enableCrossTabSync && w(l), !0;\n } catch (h) {\n return typeof console < \"u\" && console.error(\"Undo failed:\", h), !1;\n }\n }\n function P(u) {\n if (!c.value) return !1;\n const l = e.value[t.value + 1];\n try {\n if (l.type === \"batch\" && l.childOperationIds)\n for (const h of l.childOperationIds) {\n const I = e.value.find((H) => H.id === h);\n I && C(I, u);\n }\n else\n C(l, u);\n return t.value++, n.value.enableCrossTabSync && T(l), !0;\n } catch (h) {\n return typeof console < \"u\" && console.error(\"Redo failed:\", h), !1;\n }\n }\n function S(u, l) {\n (u.type === \"set\" || u.type === \"delete\") && l && typeof l.set == \"function\" && l.set(u.path, u.beforeValue, \"undo\");\n }\n function C(u, l) {\n (u.type === \"set\" || u.type === \"delete\") && l && typeof l.set == \"function\" && l.set(u.path, u.afterValue, \"redo\");\n }\n function O() {\n const u = e.value.filter((h) => h.reversible).length, l = e.value.map((h) => h.timestamp);\n return {\n operations: [...e.value],\n currentIndex: t.value,\n totalOperations: e.value.length,\n reversibleOperations: u,\n irreversibleOperations: e.value.length - u,\n oldestOperation: l.length > 0 ? new Date(Math.min(...l.map((h) => h.getTime()))) : void 0,\n newestOperation: l.length > 0 ? new Date(Math.max(...l.map((h) => h.getTime()))) : void 0\n };\n }\n function _() {\n e.value = [], t.value = -1;\n }\n function v(u, l) {\n return e.value.filter((h) => h.doctype === u && (l === void 0 || h.recordId === l));\n }\n function j(u, l) {\n const h = e.value.find((I) => I.id === u);\n h && (h.reversible = !1, h.irreversibleReason = l);\n }\n function M(u, l, h, I = \"success\", H) {\n const V = {\n type: \"action\",\n path: h && h.length > 0 ? `${u}.${h[0]}` : u,\n fieldname: \"\",\n beforeValue: null,\n afterValue: null,\n doctype: u,\n recordId: h && h.length > 0 ? h[0] : void 0,\n reversible: !1,\n // Actions are typically not reversible\n actionName: l,\n actionRecordIds: h,\n actionResult: I,\n actionError: H\n };\n return $(V);\n }\n let d = null;\n function p() {\n typeof window > \"u\" || !window.BroadcastChannel || (d = new BroadcastChannel(\"stonecrop-operation-log\"), d.addEventListener(\"message\", (u) => {\n const l = u.data;\n if (!l || typeof l != \"object\") return;\n const h = $t(l);\n h.clientId !== r.value && (h.type === \"operation\" && h.operation ? (e.value.push({ ...h.operation, source: \"sync\" }), t.value = e.value.length - 1) : h.type === \"operation\" && h.operations && (e.value.push(...h.operations.map((I) => ({ ...I, source: \"sync\" }))), t.value = e.value.length - 1));\n }));\n }\n function R(u) {\n if (!d) return;\n const l = {\n type: \"operation\",\n operation: u,\n clientId: r.value,\n timestamp: /* @__PURE__ */ new Date()\n };\n d.postMessage(ve(l));\n }\n function F(u, l) {\n if (!d) return;\n const h = {\n type: \"operation\",\n operations: [...u, l],\n clientId: r.value,\n timestamp: /* @__PURE__ */ new Date()\n };\n d.postMessage(ve(h));\n }\n function w(u) {\n if (!d) return;\n const l = {\n type: \"undo\",\n operation: u,\n clientId: r.value,\n timestamp: /* @__PURE__ */ new Date()\n };\n d.postMessage(ve(l));\n }\n function T(u) {\n if (!d) return;\n const l = {\n type: \"redo\",\n operation: u,\n clientId: r.value,\n timestamp: /* @__PURE__ */ new Date()\n };\n d.postMessage(ve(l));\n }\n const L = Pt(\"stonecrop-ops-operations\", null, {\n serializer: {\n read: (u) => {\n try {\n return JSON.parse(u);\n } catch {\n return null;\n }\n },\n write: (u) => u ? JSON.stringify(u) : \"\"\n }\n });\n function y() {\n if (!(typeof window > \"u\"))\n try {\n const u = L.value;\n u && Array.isArray(u.operations) && (e.value = u.operations.map((l) => ({\n ...l,\n timestamp: new Date(l.timestamp)\n })), t.value = u.currentIndex ?? -1);\n } catch (u) {\n typeof console < \"u\" && console.error(\"Failed to load operations from persistence:\", u);\n }\n }\n function E() {\n if (!(typeof window > \"u\"))\n try {\n L.value = {\n operations: e.value.map((u) => ({\n ...u,\n timestamp: u.timestamp.toISOString()\n })),\n currentIndex: t.value\n };\n } catch (u) {\n typeof console < \"u\" && console.error(\"Failed to save operations to persistence:\", u);\n }\n }\n function m() {\n U(\n [e, t],\n () => {\n n.value.enablePersistence && E();\n },\n { deep: !0 }\n );\n }\n return {\n // State\n operations: e,\n currentIndex: t,\n config: n,\n clientId: r,\n undoRedoState: b,\n // Computed\n canUndo: a,\n canRedo: c,\n undoCount: f,\n redoCount: g,\n // Methods\n configure: A,\n addOperation: $,\n startBatch: k,\n commitBatch: x,\n cancelBatch: N,\n undo: D,\n redo: P,\n clear: _,\n getOperationsFor: v,\n getSnapshot: O,\n markIrreversible: j,\n logAction: M\n };\n});\nclass ue {\n /**\n * The root FieldTriggerEngine instance\n */\n static _root;\n options;\n doctypeActions = /* @__PURE__ */ new Map();\n // doctype -> action/field -> functions\n doctypeTransitions = /* @__PURE__ */ new Map();\n // doctype -> transition -> functions\n fieldRollbackConfig = /* @__PURE__ */ new Map();\n // doctype -> field -> rollback enabled\n globalActions = /* @__PURE__ */ new Map();\n // action name -> function\n globalTransitionActions = /* @__PURE__ */ new Map();\n // transition action name -> function\n /**\n * Creates a new FieldTriggerEngine instance (singleton pattern)\n * @param options - Configuration options for the field trigger engine\n */\n constructor(e = {}) {\n if (ue._root)\n return ue._root;\n ue._root = this, this.options = {\n defaultTimeout: e.defaultTimeout ?? 5e3,\n debug: e.debug ?? !1,\n enableRollback: e.enableRollback ?? !0,\n errorHandler: e.errorHandler\n };\n }\n /**\n * Register a global action function\n * @param name - The name of the action\n * @param fn - The action function\n */\n registerAction(e, t) {\n this.globalActions.set(e, t);\n }\n /**\n * Register a global XState transition action function\n * @param name - The name of the transition action\n * @param fn - The transition action function\n */\n registerTransitionAction(e, t) {\n this.globalTransitionActions.set(e, t);\n }\n /**\n * Configure rollback behavior for a specific field trigger\n * @param doctype - The doctype name\n * @param fieldname - The field name\n * @param enableRollback - Whether to enable rollback\n */\n setFieldRollback(e, t, r) {\n this.fieldRollbackConfig.has(e) || this.fieldRollbackConfig.set(e, /* @__PURE__ */ new Map()), this.fieldRollbackConfig.get(e).set(t, r);\n }\n /**\n * Get rollback configuration for a specific field trigger\n */\n getFieldRollback(e, t) {\n return this.fieldRollbackConfig.get(e)?.get(t);\n }\n /**\n * Register actions from a doctype - both regular actions and field triggers\n * Separates XState transitions (uppercase) from field triggers (lowercase)\n * @param doctype - The doctype name\n * @param actions - The actions to register (supports Immutable Map, Map, or plain object)\n */\n registerDoctypeActions(e, t) {\n if (!t) return;\n const r = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map();\n if (typeof t.entrySeq == \"function\")\n t.entrySeq().forEach(([s, i]) => {\n this.categorizeAction(s, i, r, o);\n });\n else if (t instanceof Map)\n for (const [s, i] of t)\n this.categorizeAction(s, i, r, o);\n else t && typeof t == \"object\" && Object.entries(t).forEach(([s, i]) => {\n this.categorizeAction(s, i, r, o);\n });\n this.doctypeActions.set(e, r), this.doctypeTransitions.set(e, o);\n }\n /**\n * Categorize an action as either a field trigger or XState transition\n * Uses uppercase convention: UPPERCASE = transition, lowercase/mixed = field trigger\n */\n categorizeAction(e, t, r, o) {\n this.isTransitionKey(e) ? o.set(e, t) : r.set(e, t);\n }\n /**\n * Determine if a key represents an XState transition\n * Transitions are identified by being all uppercase\n */\n isTransitionKey(e) {\n return /^[A-Z0-9_]+$/.test(e) && e.length > 0;\n }\n /**\n * Execute field triggers for a changed field\n * @param context - The field change context\n * @param options - Execution options (timeout and enableRollback)\n */\n async executeFieldTriggers(e, t = {}) {\n const { doctype: r, fieldname: o } = e, s = this.findFieldTriggers(r, o);\n if (s.length === 0)\n return {\n path: e.path,\n actionResults: [],\n totalExecutionTime: 0,\n allSucceeded: !0,\n stoppedOnError: !1,\n rolledBack: !1\n };\n const i = performance.now(), a = [];\n let c = !1, f = !1, g;\n const b = this.getFieldRollback(r, o), A = t.enableRollback ?? b ?? this.options.enableRollback;\n A && e.store && (g = this.captureSnapshot(e));\n for (const N of s)\n try {\n const D = await this.executeAction(N, e, t.timeout);\n if (a.push(D), !D.success) {\n c = !0;\n break;\n }\n } catch (D) {\n const S = {\n success: !1,\n error: D instanceof Error ? D : new Error(String(D)),\n executionTime: 0,\n action: N\n };\n a.push(S), c = !0;\n break;\n }\n if (A && c && g && e.store)\n try {\n this.restoreSnapshot(e, g), f = !0;\n } catch (N) {\n console.error(\"[FieldTriggers] Rollback failed:\", N);\n }\n const $ = performance.now() - i, k = a.filter((N) => !N.success);\n if (k.length > 0 && this.options.errorHandler)\n for (const N of k)\n try {\n this.options.errorHandler(N.error, e, N.action);\n } catch (D) {\n console.error(\"[FieldTriggers] Error in global error handler:\", D);\n }\n return {\n path: e.path,\n actionResults: a,\n totalExecutionTime: $,\n allSucceeded: a.every((N) => N.success),\n stoppedOnError: c,\n rolledBack: f,\n snapshot: this.options.debug && A ? g : void 0\n // Only include snapshot in debug mode if rollback is enabled\n };\n }\n /**\n * Execute XState transition actions\n * Similar to field triggers but specifically for FSM state transitions\n * @param context - The transition change context\n * @param options - Execution options (timeout)\n */\n async executeTransitionActions(e, t = {}) {\n const { doctype: r, transition: o } = e, s = this.findTransitionActions(r, o);\n if (s.length === 0)\n return [];\n const i = [];\n for (const c of s)\n try {\n const f = await this.executeTransitionAction(c, e, t.timeout);\n if (i.push(f), !f.success)\n break;\n } catch (f) {\n const b = {\n success: !1,\n error: f instanceof Error ? f : new Error(String(f)),\n executionTime: 0,\n action: c,\n transition: o\n };\n i.push(b);\n break;\n }\n const a = i.filter((c) => !c.success);\n if (a.length > 0 && this.options.errorHandler)\n for (const c of a)\n try {\n this.options.errorHandler(c.error, e, c.action);\n } catch (f) {\n console.error(\"[FieldTriggers] Error in global error handler:\", f);\n }\n return i;\n }\n /**\n * Find transition actions for a specific doctype and transition\n */\n findTransitionActions(e, t) {\n const r = this.doctypeTransitions.get(e);\n return r ? r.get(t) || [] : [];\n }\n /**\n * Execute a single transition action by name\n */\n async executeTransitionAction(e, t, r) {\n const o = performance.now(), s = r ?? this.options.defaultTimeout;\n try {\n let i = this.globalTransitionActions.get(e);\n if (!i) {\n const c = this.globalActions.get(e);\n c && (i = c);\n }\n if (!i)\n throw new Error(`Transition action \"${e}\" not found in registry`);\n return await this.executeWithTimeout(i, t, s), {\n success: !0,\n executionTime: performance.now() - o,\n action: e,\n transition: t.transition\n };\n } catch (i) {\n const a = performance.now() - o;\n return {\n success: !1,\n error: i instanceof Error ? i : new Error(String(i)),\n executionTime: a,\n action: e,\n transition: t.transition\n };\n }\n }\n /**\n * Find field triggers for a specific doctype and field\n * Field triggers are identified by keys that look like field paths (contain dots or match field names)\n */\n findFieldTriggers(e, t) {\n const r = this.doctypeActions.get(e);\n if (!r) return [];\n const o = [];\n for (const [s, i] of r)\n this.isFieldTriggerKey(s, t) && o.push(...i);\n return o;\n }\n /**\n * Determine if an action key represents a field trigger\n * Field triggers can be:\n * - Exact field name match: \"emailAddress\"\n * - Wildcard patterns: \"emailAddress.*\", \"*.is_primary\"\n * - Nested field paths: \"address.street\", \"contact.email\"\n */\n isFieldTriggerKey(e, t) {\n return e === t ? !0 : e.includes(\".\") ? this.matchFieldPattern(e, t) : e.includes(\"*\") ? this.matchFieldPattern(e, t) : !1;\n }\n /**\n * Match a field pattern against a field name\n * Supports wildcards (*) for dynamic segments\n */\n matchFieldPattern(e, t) {\n const r = e.split(\".\"), o = t.split(\".\");\n if (r.length !== o.length)\n return !1;\n for (let s = 0; s < r.length; s++) {\n const i = r[s], a = o[s];\n if (i !== \"*\" && i !== a)\n return !1;\n }\n return !0;\n }\n /**\n * Execute a single action by name\n */\n async executeAction(e, t, r) {\n const o = performance.now(), s = r ?? this.options.defaultTimeout;\n try {\n const i = this.globalActions.get(e);\n if (!i)\n throw new Error(`Action \"${e}\" not found in registry`);\n return await this.executeWithTimeout(i, t, s), {\n success: !0,\n executionTime: performance.now() - o,\n action: e\n };\n } catch (i) {\n const a = performance.now() - o;\n return {\n success: !1,\n error: i instanceof Error ? i : new Error(String(i)),\n executionTime: a,\n action: e\n };\n }\n }\n /**\n * Execute a function with timeout\n */\n async executeWithTimeout(e, t, r) {\n return new Promise((o, s) => {\n const i = setTimeout(() => {\n s(new Error(`Action timeout after ${r}ms`));\n }, r);\n Promise.resolve(e(t)).then((a) => {\n clearTimeout(i), o(a);\n }).catch((a) => {\n clearTimeout(i), s(a);\n });\n });\n }\n /**\n * Capture a snapshot of the record state before executing actions\n * This creates a deep copy of the record data for potential rollback\n */\n captureSnapshot(e) {\n if (!(!e.store || !e.doctype || !e.recordId))\n try {\n const t = `${e.doctype}.${e.recordId}`, r = e.store.get(t);\n return !r || typeof r != \"object\" ? void 0 : JSON.parse(JSON.stringify(r));\n } catch (t) {\n this.options.debug && console.warn(\"[FieldTriggers] Failed to capture snapshot:\", t);\n return;\n }\n }\n /**\n * Restore a previously captured snapshot\n * This reverts the record to its state before actions were executed\n */\n restoreSnapshot(e, t) {\n if (!(!e.store || !e.doctype || !e.recordId || !t))\n try {\n const r = `${e.doctype}.${e.recordId}`;\n e.store.set(r, t), this.options.debug && console.log(`[FieldTriggers] Rolled back ${r} to previous state`);\n } catch (r) {\n throw console.error(\"[FieldTriggers] Failed to restore snapshot:\", r), r;\n }\n }\n}\nfunction K(n) {\n return new ue(n);\n}\nfunction xt(n, e) {\n K().registerAction(n, e);\n}\nfunction Mt(n, e) {\n K().registerTransitionAction(n, e);\n}\nfunction Ft(n, e, t) {\n K().setFieldRollback(n, e, t);\n}\nasync function Bt(n, e, t) {\n const r = K(), o = {\n path: t?.path || (t?.recordId ? `${n}.${t.recordId}` : n),\n fieldname: \"\",\n beforeValue: void 0,\n afterValue: void 0,\n operation: \"set\",\n doctype: n,\n recordId: t?.recordId,\n timestamp: /* @__PURE__ */ new Date(),\n transition: e,\n currentState: t?.currentState,\n targetState: t?.targetState,\n fsmContext: t?.fsmContext\n };\n return await r.executeTransitionActions(o);\n}\nfunction jt(n, e) {\n if (n)\n try {\n pe().markIrreversible(n, e);\n } catch {\n }\n}\nfunction Ve() {\n try {\n return pe();\n } catch {\n return null;\n }\n}\nclass ne {\n static instance;\n /**\n * Gets the singleton instance of HST\n * @returns The HST singleton instance\n */\n static getInstance() {\n return ne.instance || (ne.instance = new ne()), ne.instance;\n }\n /**\n * Gets the global registry instance\n * @returns The global registry object or undefined if not found\n */\n getRegistry() {\n if (typeof globalThis < \"u\") {\n const e = globalThis.Registry?._root;\n if (e)\n return e;\n }\n if (typeof window < \"u\") {\n const e = window.Registry?._root;\n if (e)\n return e;\n }\n if (typeof global < \"u\" && global) {\n const e = global.Registry?._root;\n if (e)\n return e;\n }\n }\n /**\n * Helper method to get doctype metadata from the registry\n * @param doctype - The name of the doctype to retrieve metadata for\n * @returns The doctype metadata object or undefined if not found\n */\n getDoctypeMeta(e) {\n const t = this.getRegistry();\n if (t && typeof t == \"object\" && \"registry\" in t)\n return t.registry[e];\n }\n}\nclass Se {\n target;\n parentPath;\n rootNode;\n doctype;\n parentDoctype;\n hst;\n constructor(e, t, r = \"\", o = null, s) {\n return this.target = e, this.parentPath = r, this.rootNode = o || this, this.doctype = t, this.parentDoctype = s, this.hst = ne.getInstance(), new Proxy(this, {\n get(i, a) {\n if (a in i) return i[a];\n const c = String(a);\n return i.getNode(c);\n },\n set(i, a, c) {\n const f = String(a);\n return i.set(f, c), !0;\n }\n });\n }\n get(e) {\n return this.resolveValue(e);\n }\n // Method to get a tree-wrapped node for navigation\n getNode(e) {\n const t = this.resolvePath(e), r = this.resolveValue(e), o = t.split(\".\");\n let s = this.doctype;\n return this.doctype === \"StonecropStore\" && o.length >= 1 && (s = o[0]), typeof r == \"object\" && r !== null && !this.isPrimitive(r) ? new Se(r, s, t, this.rootNode, this.parentDoctype) : new Se(r, s, t, this.rootNode, this.parentDoctype);\n }\n set(e, t, r = \"user\") {\n const o = this.resolvePath(e), s = this.has(e) ? this.get(e) : void 0;\n if (r !== \"undo\" && r !== \"redo\") {\n const i = Ve();\n if (i && typeof i.addOperation == \"function\") {\n const a = o.split(\".\"), c = this.doctype === \"StonecropStore\" && a.length >= 1 ? a[0] : this.doctype, f = a.length >= 2 ? a[1] : void 0, g = a.slice(2).join(\".\") || a[a.length - 1], A = t === void 0 && s !== void 0 ? \"delete\" : \"set\";\n i.addOperation(\n {\n type: A,\n path: o,\n fieldname: g,\n beforeValue: s,\n afterValue: t,\n doctype: c,\n recordId: f,\n reversible: !0\n // Default to reversible, can be changed by field triggers\n },\n r\n );\n }\n }\n this.updateValue(e, t), this.triggerFieldActions(o, s, t);\n }\n has(e) {\n try {\n if (e === \"\")\n return !0;\n const t = this.parsePath(e);\n let r = this.target;\n for (let o = 0; o < t.length; o++) {\n const s = t[o];\n if (r == null)\n return !1;\n if (o === t.length - 1)\n return this.isImmutable(r) ? r.has(s) : this.isPiniaStore(r) && r.$state && s in r.$state || s in r;\n r = this.getProperty(r, s);\n }\n return !1;\n } catch {\n return !1;\n }\n }\n // Tree navigation methods\n getParent() {\n if (!this.parentPath) return null;\n const t = this.parentPath.split(\".\").slice(0, -1).join(\".\");\n return t === \"\" ? this.rootNode : this.rootNode.getNode(t);\n }\n getRoot() {\n return this.rootNode;\n }\n getPath() {\n return this.parentPath;\n }\n getDepth() {\n return this.parentPath ? this.parentPath.split(\".\").length : 0;\n }\n getBreadcrumbs() {\n return this.parentPath ? this.parentPath.split(\".\") : [];\n }\n /**\n * Trigger an XState transition with optional context data\n */\n async triggerTransition(e, t) {\n const r = K(), o = this.parentPath.split(\".\");\n let s = this.doctype, i;\n this.doctype === \"StonecropStore\" && o.length >= 1 && (s = o[0]), o.length >= 2 && (i = o[1]);\n const a = {\n path: this.parentPath,\n fieldname: \"\",\n // No specific field for transitions\n beforeValue: void 0,\n afterValue: void 0,\n operation: \"set\",\n doctype: s,\n recordId: i,\n timestamp: /* @__PURE__ */ new Date(),\n store: this.rootNode || void 0,\n transition: e,\n currentState: t?.currentState,\n targetState: t?.targetState,\n fsmContext: t?.fsmContext\n }, c = Ve();\n return c && typeof c.addOperation == \"function\" && c.addOperation(\n {\n type: \"transition\",\n path: this.parentPath,\n fieldname: e,\n beforeValue: t?.currentState,\n afterValue: t?.targetState,\n doctype: s,\n recordId: i,\n reversible: !1,\n // FSM transitions are generally not reversible\n metadata: {\n transition: e,\n currentState: t?.currentState,\n targetState: t?.targetState,\n fsmContext: t?.fsmContext\n }\n },\n \"user\"\n ), await r.executeTransitionActions(a);\n }\n // Private helper methods\n resolvePath(e) {\n return e === \"\" ? this.parentPath : this.parentPath ? `${this.parentPath}.${e}` : e;\n }\n resolveValue(e) {\n if (e === \"\")\n return this.target;\n const t = this.parsePath(e);\n let r = this.target;\n for (const o of t) {\n if (r == null)\n return;\n r = this.getProperty(r, o);\n }\n return r;\n }\n updateValue(e, t) {\n if (e === \"\")\n throw new Error(\"Cannot set value on empty path\");\n const r = this.parsePath(e), o = r.pop();\n let s = this.target;\n for (const i of r)\n if (s = this.getProperty(s, i), s == null)\n throw new Error(`Cannot set property on null/undefined path: ${e}`);\n this.setProperty(s, o, t);\n }\n getProperty(e, t) {\n return this.isImmutable(e) ? e.get(t) : this.isVueReactive(e) ? e[t] : this.isPiniaStore(e) ? e.$state?.[t] ?? e[t] : e[t];\n }\n setProperty(e, t, r) {\n if (this.isImmutable(e))\n throw new Error(\"Cannot directly mutate immutable objects. Use immutable update methods instead.\");\n if (this.isPiniaStore(e)) {\n e.$patch ? e.$patch({ [t]: r }) : e[t] = r;\n return;\n }\n e[t] = r;\n }\n async triggerFieldActions(e, t, r) {\n try {\n if (!e || typeof e != \"string\")\n return;\n const o = e.split(\".\");\n if (o.length < 3)\n return;\n const s = K(), i = o.slice(2).join(\".\") || o[o.length - 1];\n let a = this.doctype;\n this.doctype === \"StonecropStore\" && o.length >= 1 && (a = o[0]);\n let c;\n o.length >= 2 && (c = o[1]);\n const f = {\n path: e,\n fieldname: i,\n beforeValue: t,\n afterValue: r,\n operation: \"set\",\n doctype: a,\n recordId: c,\n timestamp: /* @__PURE__ */ new Date(),\n store: this.rootNode || void 0\n // Pass the root store for snapshot/rollback capabilities\n };\n await s.executeFieldTriggers(f);\n } catch (o) {\n o instanceof Error && console.warn(\"Field trigger error:\", o.message);\n }\n }\n isVueReactive(e) {\n return e && typeof e == \"object\" && \"__v_isReactive\" in e && e.__v_isReactive === !0;\n }\n isPiniaStore(e) {\n return e && typeof e == \"object\" && (\"$state\" in e || \"$patch\" in e || \"$id\" in e);\n }\n isImmutable(e) {\n if (!e || typeof e != \"object\")\n return !1;\n const t = \"get\" in e && typeof e.get == \"function\", r = \"set\" in e && typeof e.set == \"function\", o = \"has\" in e && typeof e.has == \"function\", s = \"__ownerID\" in e || \"_map\" in e || \"_list\" in e || \"_origin\" in e || \"_capacity\" in e || \"_defaultValues\" in e || \"_tail\" in e || \"_root\" in e || \"size\" in e && t && r;\n let i;\n try {\n const c = e;\n if (\"constructor\" in c && c.constructor && typeof c.constructor == \"object\" && \"name\" in c.constructor) {\n const f = c.constructor.name;\n i = typeof f == \"string\" ? f : void 0;\n }\n } catch {\n i = void 0;\n }\n const a = i && (i.includes(\"Map\") || i.includes(\"List\") || i.includes(\"Set\") || i.includes(\"Stack\") || i.includes(\"Seq\")) && (t || r);\n return !!(t && r && o && s || t && r && a);\n }\n isPrimitive(e) {\n return e == null || typeof e == \"string\" || typeof e == \"number\" || typeof e == \"boolean\" || typeof e == \"function\" || typeof e == \"symbol\" || typeof e == \"bigint\";\n }\n /**\n * Parse a path string into segments, handling both dot notation and array bracket notation\n * @param path - The path string to parse (e.g., \"order.456.line_items[0].product\")\n * @returns Array of path segments (e.g., ['order', '456', 'line_items', '0', 'product'])\n */\n parsePath(e) {\n return e ? e.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\").filter((r) => r.length > 0) : [];\n }\n}\nfunction Dt(n, e, t) {\n return new Se(n, e, \"\", null, t);\n}\nclass Ke {\n hstStore;\n _operationLogStore;\n _operationLogConfig;\n /** The registry instance containing all doctype definitions */\n registry;\n /**\n * Creates a new Stonecrop instance with HST integration\n * @param registry - The Registry instance containing doctype definitions\n * @param operationLogConfig - Optional configuration for the operation log\n */\n constructor(e, t) {\n this.registry = e, this._operationLogConfig = t, this.initializeHSTStore(), this.setupRegistrySync();\n }\n /**\n * Get the operation log store (lazy initialization)\n * @internal\n */\n getOperationLogStore() {\n return this._operationLogStore || (this._operationLogStore = pe(), this._operationLogConfig && this._operationLogStore.configure(this._operationLogConfig)), this._operationLogStore;\n }\n /**\n * Initialize the HST store structure\n */\n initializeHSTStore() {\n const e = {};\n Object.keys(this.registry.registry).forEach((t) => {\n e[t] = {};\n }), this.hstStore = Dt(ye(e), \"StonecropStore\");\n }\n /**\n * Setup automatic sync with Registry when doctypes are added\n */\n setupRegistrySync() {\n const e = this.registry.addDoctype.bind(this.registry);\n this.registry.addDoctype = (t) => {\n e(t), this.hstStore.has(t.slug) || this.hstStore.set(t.slug, {});\n };\n }\n /**\n * Get records hash for a doctype\n * @param doctype - The doctype to get records for\n * @returns HST node containing records hash\n */\n records(e) {\n const t = typeof e == \"string\" ? e : e.slug;\n return this.ensureDoctypeExists(t), this.hstStore.getNode(t);\n }\n /**\n * Add a record to the store\n * @param doctype - The doctype\n * @param recordId - The record ID\n * @param recordData - The record data\n */\n addRecord(e, t, r) {\n const o = typeof e == \"string\" ? e : e.slug;\n this.ensureDoctypeExists(o), this.hstStore.set(`${o}.${t}`, r);\n }\n /**\n * Get a specific record\n * @param doctype - The doctype\n * @param recordId - The record ID\n * @returns HST node for the record or undefined\n */\n getRecordById(e, t) {\n const r = typeof e == \"string\" ? e : e.slug;\n if (this.ensureDoctypeExists(r), !(!this.hstStore.has(`${r}.${t}`) || this.hstStore.get(`${r}.${t}`) === void 0))\n return this.hstStore.getNode(`${r}.${t}`);\n }\n /**\n * Remove a record from the store\n * @param doctype - The doctype\n * @param recordId - The record ID\n */\n removeRecord(e, t) {\n const r = typeof e == \"string\" ? e : e.slug;\n this.ensureDoctypeExists(r), this.hstStore.has(`${r}.${t}`) && this.hstStore.set(`${r}.${t}`, void 0);\n }\n /**\n * Get all record IDs for a doctype\n * @param doctype - The doctype\n * @returns Array of record IDs\n */\n getRecordIds(e) {\n const t = typeof e == \"string\" ? e : e.slug;\n this.ensureDoctypeExists(t);\n const r = this.hstStore.get(t);\n return !r || typeof r != \"object\" ? [] : Object.keys(r).filter((o) => r[o] !== void 0);\n }\n /**\n * Clear all records for a doctype\n * @param doctype - The doctype\n */\n clearRecords(e) {\n const t = typeof e == \"string\" ? e : e.slug;\n this.ensureDoctypeExists(t), this.getRecordIds(t).forEach((o) => {\n this.hstStore.set(`${t}.${o}`, void 0);\n });\n }\n /**\n * Setup method for doctype initialization\n * @param doctype - The doctype to setup\n */\n setup(e) {\n this.ensureDoctypeExists(e.slug);\n }\n /**\n * Run action on doctype\n * Executes the action and logs it to the operation log for audit tracking\n * @param doctype - The doctype\n * @param action - The action to run\n * @param args - Action arguments (typically record IDs)\n */\n runAction(e, t, r) {\n const s = this.registry.registry[e.slug]?.actions?.get(t), i = Array.isArray(r) ? r.filter((g) => typeof g == \"string\") : void 0, a = this.getOperationLogStore();\n let c = \"success\", f;\n try {\n s && s.length > 0 && s.forEach((g) => {\n try {\n new Function(\"args\", g)(r);\n } catch (b) {\n throw c = \"failure\", f = b instanceof Error ? b.message : \"Unknown error\", b;\n }\n });\n } catch {\n } finally {\n a.logAction(e.doctype, t, i, c, f);\n }\n }\n /**\n * Get records from server (maintains compatibility)\n * @param doctype - The doctype\n */\n async getRecords(e) {\n (await (await fetch(`/${e.slug}`)).json()).forEach((o) => {\n o.id && this.addRecord(e, o.id, o);\n });\n }\n /**\n * Get single record from server (maintains compatibility)\n * @param doctype - The doctype\n * @param recordId - The record ID\n */\n async getRecord(e, t) {\n const o = await (await fetch(`/${e.slug}/${t}`)).json();\n this.addRecord(e, t, o);\n }\n /**\n * Ensure doctype section exists in HST store\n * @param slug - The doctype slug\n */\n ensureDoctypeExists(e) {\n this.hstStore.has(e) || this.hstStore.set(e, {});\n }\n /**\n * Get doctype metadata from the registry\n * @param context - The route context\n * @returns The doctype metadata\n */\n async getMeta(e) {\n if (!this.registry.getMeta)\n throw new Error(\"No getMeta function provided to Registry\");\n return await this.registry.getMeta(e);\n }\n /**\n * Get the root HST store node for advanced usage\n * @returns Root HST node\n */\n getStore() {\n return this.hstStore;\n }\n}\nfunction Wt(n) {\n n || (n = {});\n const e = n.registry || oe(\"$registry\"), t = oe(\"$stonecrop\"), r = B(), o = B(), s = B({}), i = B(), a = B(), c = B([]);\n if (n.doctype && e) {\n const y = n.doctype.schema ? Array.isArray(n.doctype.schema) ? n.doctype.schema : Array.from(n.doctype.schema) : [];\n c.value = e.resolveSchema(y);\n }\n const f = B([]), g = B(-1), b = W(() => r.value?.getOperationLogStore().canUndo ?? !1), A = W(() => r.value?.getOperationLogStore().canRedo ?? !1), $ = W(() => r.value?.getOperationLogStore().undoCount ?? 0), k = W(() => r.value?.getOperationLogStore().redoCount ?? 0), x = W(\n () => r.value?.getOperationLogStore().undoRedoState ?? {\n canUndo: !1,\n canRedo: !1,\n undoCount: 0,\n redoCount: 0,\n currentIndex: -1\n }\n ), N = (y) => r.value?.getOperationLogStore().undo(y) ?? !1, D = (y) => r.value?.getOperationLogStore().redo(y) ?? !1, P = () => {\n r.value?.getOperationLogStore().startBatch();\n }, S = (y) => r.value?.getOperationLogStore().commitBatch(y) ?? null, C = () => {\n r.value?.getOperationLogStore().cancelBatch();\n }, O = () => {\n r.value?.getOperationLogStore().clear();\n }, _ = (y, E) => r.value?.getOperationLogStore().getOperationsFor(y, E) ?? [], v = () => r.value?.getOperationLogStore().getSnapshot() ?? {\n operations: [],\n currentIndex: -1,\n totalOperations: 0,\n reversibleOperations: 0,\n irreversibleOperations: 0\n }, j = (y, E) => {\n r.value?.getOperationLogStore().markIrreversible(y, E);\n }, M = (y, E, m, u = \"success\", l) => r.value?.getOperationLogStore().logAction(y, E, m, u, l) ?? \"\", d = (y) => {\n r.value?.getOperationLogStore().configure(y);\n };\n Be(async () => {\n if (e) {\n r.value = t || new Ke(e);\n try {\n const y = r.value.getOperationLogStore(), E = Ue(y);\n f.value = E.operations.value, g.value = E.currentIndex.value, U(\n () => E.operations.value,\n (m) => {\n f.value = m;\n }\n ), U(\n () => E.currentIndex.value,\n (m) => {\n g.value = m;\n }\n );\n } catch {\n }\n if (!n.doctype && e.router) {\n const y = e.router.currentRoute.value;\n if (!y.path) return;\n const E = y.path.split(\"/\").filter((u) => u.length > 0), m = E[1]?.toLowerCase();\n if (E.length > 0) {\n const u = {\n path: y.path,\n segments: E\n }, l = await e.getMeta?.(u);\n if (l) {\n if (e.addDoctype(l), r.value.setup(l), i.value = l, a.value = m, o.value = r.value.getStore(), e) {\n const h = l.schema ? Array.isArray(l.schema) ? l.schema : Array.from(l.schema) : [];\n c.value = e.resolveSchema(h);\n }\n if (m && m !== \"new\") {\n const h = r.value.getRecordById(l, m);\n if (h)\n s.value = h.get(\"\") || {};\n else\n try {\n await r.value.getRecord(l, m);\n const I = r.value.getRecordById(l, m);\n I && (s.value = I.get(\"\") || {});\n } catch {\n s.value = J(l);\n }\n } else\n s.value = J(l);\n o.value && xe(l, m || \"new\", s, o.value), r.value.runAction(l, \"load\", m ? [m] : void 0);\n }\n }\n }\n if (n.doctype) {\n o.value = r.value.getStore();\n const y = n.doctype, E = n.recordId;\n if (E && E !== \"new\") {\n const m = r.value.getRecordById(y, E);\n if (m)\n s.value = m.get(\"\") || {};\n else\n try {\n await r.value.getRecord(y, E);\n const u = r.value.getRecordById(y, E);\n u && (s.value = u.get(\"\") || {});\n } catch {\n s.value = J(y);\n }\n } else\n s.value = J(y);\n o.value && xe(y, E || \"new\", s, o.value);\n }\n }\n });\n const p = (y, E) => {\n const m = n.doctype || i.value;\n if (!m) return \"\";\n const u = E || n.recordId || a.value || \"new\";\n return `${m.slug}.${u}.${y}`;\n }, R = (y) => {\n const E = n.doctype || i.value;\n if (!(!o.value || !r.value || !E))\n try {\n const m = y.path.split(\".\");\n if (m.length >= 2) {\n const h = m[0], I = m[1];\n if (o.value.has(`${h}.${I}`) || r.value.addRecord(E, I, { ...s.value }), m.length > 3) {\n const H = `${h}.${I}`, V = m.slice(2);\n let Z = H;\n for (let X = 0; X < V.length - 1; X++)\n if (Z += `.${V[X]}`, !o.value.has(Z)) {\n const we = V[X + 1], Qe = !isNaN(Number(we));\n o.value.set(Z, Qe ? [] : {});\n }\n }\n }\n o.value.set(y.path, y.value);\n const u = y.fieldname.split(\".\"), l = { ...s.value };\n u.length === 1 ? l[u[0]] = y.value : Tt(l, u, y.value), s.value = l;\n } catch {\n }\n };\n (n.doctype || e?.router) && (De(\"hstPathProvider\", p), De(\"hstChangeHandler\", R));\n const F = (y, E, m) => {\n if (!r.value)\n return J(E);\n if (m)\n try {\n const u = o.value?.get(y);\n return u && typeof u == \"object\" ? u : J(E);\n } catch {\n return J(E);\n }\n return J(E);\n }, w = async (y, E) => {\n if (!o.value || !r.value)\n throw new Error(\"HST store not initialized\");\n const m = `${y.slug}.${E}`, l = { ...o.value.get(m) || {} }, h = y.schema ? Array.isArray(y.schema) ? y.schema : Array.from(y.schema) : [], H = (e ? e.resolveSchema(h) : h).filter(\n (V) => \"fieldtype\" in V && V.fieldtype === \"Doctype\" && \"schema\" in V && Array.isArray(V.schema)\n );\n for (const V of H) {\n const Z = V, X = `${m}.${Z.fieldname}`, we = Ze(Z.schema, X, o.value);\n l[Z.fieldname] = we;\n }\n return l;\n }, T = (y, E) => ({\n provideHSTPath: (l) => `${y}.${l}`,\n handleHSTChange: (l) => {\n const h = l.path.startsWith(y) ? l.path : `${y}.${l.fieldname}`;\n R({\n ...l,\n path: h\n });\n }\n }), L = {\n operations: f,\n currentIndex: g,\n undoRedoState: x,\n canUndo: b,\n canRedo: A,\n undoCount: $,\n redoCount: k,\n undo: N,\n redo: D,\n startBatch: P,\n commitBatch: S,\n cancelBatch: C,\n clear: O,\n getOperationsFor: _,\n getSnapshot: v,\n markIrreversible: j,\n logAction: M,\n configure: d\n };\n return n.doctype ? {\n stonecrop: r,\n operationLog: L,\n provideHSTPath: p,\n handleHSTChange: R,\n hstStore: o,\n formData: s,\n resolvedSchema: c,\n loadNestedData: F,\n saveRecursive: w,\n createNestedContext: T\n } : !n.doctype && e?.router ? {\n stonecrop: r,\n operationLog: L,\n provideHSTPath: p,\n handleHSTChange: R,\n hstStore: o,\n formData: s,\n resolvedSchema: c,\n loadNestedData: F,\n saveRecursive: w,\n createNestedContext: T\n } : {\n stonecrop: r,\n operationLog: L\n };\n}\nfunction J(n) {\n const e = {};\n return n.schema && n.schema.forEach((t) => {\n switch (\"fieldtype\" in t ? t.fieldtype : \"Data\") {\n case \"Data\":\n case \"Text\":\n e[t.fieldname] = \"\";\n break;\n case \"Check\":\n e[t.fieldname] = !1;\n break;\n case \"Int\":\n case \"Float\":\n e[t.fieldname] = 0;\n break;\n case \"Table\":\n e[t.fieldname] = [];\n break;\n case \"JSON\":\n e[t.fieldname] = {};\n break;\n default:\n e[t.fieldname] = null;\n }\n }), e;\n}\nfunction xe(n, e, t, r) {\n U(\n t,\n (o) => {\n const s = `${n.slug}.${e}`;\n Object.keys(o).forEach((i) => {\n const a = `${s}.${i}`;\n try {\n r.set(a, o[i]);\n } catch {\n }\n });\n },\n { deep: !0 }\n );\n}\nfunction Tt(n, e, t) {\n let r = n;\n for (let s = 0; s < e.length - 1; s++) {\n const i = e[s];\n (!(i in r) || typeof r[i] != \"object\") && (r[i] = isNaN(Number(e[s + 1])) ? {} : []), r = r[i];\n }\n const o = e[e.length - 1];\n r[o] = t;\n}\nfunction Ze(n, e, t) {\n const o = { ...t.get(e) || {} }, s = n.filter(\n (i) => \"fieldtype\" in i && i.fieldtype === \"Doctype\" && \"schema\" in i && Array.isArray(i.schema)\n );\n for (const i of s) {\n const a = i, c = `${e}.${a.fieldname}`, f = Ze(a.schema, c, t);\n o[a.fieldname] = f;\n }\n return o;\n}\nfunction Ge(n) {\n const t = oe(\"$operationLogStore\", void 0) || pe();\n n && t.configure(n);\n const { operations: r, currentIndex: o, undoRedoState: s, canUndo: i, canRedo: a, undoCount: c, redoCount: f } = Ue(t);\n function g(O) {\n return t.undo(O);\n }\n function b(O) {\n return t.redo(O);\n }\n function A() {\n t.startBatch();\n }\n function $(O) {\n return t.commitBatch(O);\n }\n function k() {\n t.cancelBatch();\n }\n function x() {\n t.clear();\n }\n function N(O, _) {\n return t.getOperationsFor(O, _);\n }\n function D() {\n return t.getSnapshot();\n }\n function P(O, _) {\n t.markIrreversible(O, _);\n }\n function S(O, _, v, j = \"success\", M) {\n return t.logAction(O, _, v, j, M);\n }\n function C(O) {\n t.configure(O);\n }\n return {\n // State\n operations: r,\n currentIndex: o,\n undoRedoState: s,\n canUndo: i,\n canRedo: a,\n undoCount: c,\n redoCount: f,\n // Methods\n undo: g,\n redo: b,\n startBatch: A,\n commitBatch: $,\n cancelBatch: k,\n clear: x,\n getOperationsFor: N,\n getSnapshot: D,\n markIrreversible: P,\n logAction: S,\n configure: C\n };\n}\nfunction Ht(n, e = !0) {\n if (!e) return;\n const { undo: t, redo: r, canUndo: o, canRedo: s } = Ge(), i = _t();\n ie(i[\"Ctrl+Z\"], () => {\n o.value && t(n);\n }), ie(i[\"Meta+Z\"], () => {\n o.value && t(n);\n }), ie(i[\"Ctrl+Shift+Z\"], () => {\n s.value && r(n);\n }), ie(i[\"Meta+Shift+Z\"], () => {\n s.value && r(n);\n }), ie(i[\"Ctrl+Y\"], () => {\n s.value && r(n);\n });\n}\nasync function zt(n, e) {\n const { startBatch: t, commitBatch: r, cancelBatch: o } = Ge();\n t();\n try {\n return await n(), r(e);\n } catch (s) {\n throw o(), s;\n }\n}\nclass Ut {\n /**\n * The doctype name\n * @public\n * @readonly\n */\n doctype;\n /**\n * The doctype schema\n * @public\n * @readonly\n */\n schema;\n /**\n * The doctype workflow\n * @public\n * @readonly\n */\n workflow;\n /**\n * The doctype actions and field triggers\n * @public\n * @readonly\n */\n actions;\n /**\n * The doctype component\n * @public\n * @readonly\n */\n component;\n /**\n * Creates a new DoctypeMeta instance\n * @param doctype - The doctype name\n * @param schema - The doctype schema definition\n * @param workflow - The doctype workflow configuration (XState machine)\n * @param actions - The doctype actions and field triggers\n * @param component - Optional Vue component for rendering the doctype\n */\n constructor(e, t, r, o, s) {\n this.doctype = e, this.schema = t, this.workflow = r, this.actions = o, this.component = s;\n }\n /**\n * Converts the registered doctype string to a slug (kebab-case). The following conversions are made:\n * - It replaces camelCase and PascalCase with kebab-case strings\n * - It replaces spaces and underscores with hyphens\n * - It converts the string to lowercase\n *\n * @returns The slugified doctype string\n *\n * @example\n * ```ts\n * const doctype = new DoctypeMeta('TaskItem', schema, workflow, actions\n * console.log(doctype.slug) // 'task-item'\n * ```\n *\n * @public\n */\n get slug() {\n return this.doctype.replace(/([a-z])([A-Z])/g, \"$1-$2\").replace(/[\\s_]+/g, \"-\").toLowerCase();\n }\n}\nclass fe {\n /**\n * The root Registry instance\n */\n static _root;\n /**\n * The name of the Registry instance\n *\n * @defaultValue 'Registry'\n */\n name;\n /**\n * The registry property contains a collection of doctypes\n * @see {@link DoctypeMeta}\n */\n registry;\n /**\n * The Vue router instance\n * @see {@link https://router.vuejs.org/}\n */\n router;\n /**\n * Creates a new Registry instance (singleton pattern)\n * @param router - Optional Vue router instance for route management\n * @param getMeta - Optional function to fetch doctype metadata from an API\n */\n constructor(e, t) {\n if (fe._root)\n return fe._root;\n fe._root = this, this.name = \"Registry\", this.registry = {}, this.router = e, this.getMeta = t;\n }\n /**\n * The getMeta function fetches doctype metadata from an API based on route context\n * @see {@link DoctypeMeta}\n */\n getMeta;\n /**\n * Get doctype metadata\n * @param doctype - The doctype to fetch metadata for\n * @returns The doctype metadata\n * @see {@link DoctypeMeta}\n */\n addDoctype(e) {\n e.doctype in Object.keys(this.registry) || (this.registry[e.slug] = e);\n const t = K();\n t.registerDoctypeActions(e.doctype, e.actions), e.slug !== e.doctype && t.registerDoctypeActions(e.slug, e.actions), e.component && this.router && !this.router.hasRoute(e.doctype) && this.router.addRoute({\n path: `/${e.slug}`,\n name: e.slug,\n component: e.component\n });\n }\n /**\n * Resolve nested Doctype and Table fields in a schema by embedding child schemas inline.\n *\n * @remarks\n * Walks the schema array and for each field with `fieldtype: 'Doctype'` and a string\n * `options` value, looks up the referenced doctype in the registry and embeds its schema\n * as the field's `schema` property. Recurses for deeply nested doctypes.\n *\n * For fields with `fieldtype: 'Table'`, looks up the referenced child doctype and\n * auto-derives `columns` from its schema fields (unless columns are already provided).\n * Also sets sensible defaults for `component` (`'ATable'`) and `config` (`{ view: 'list' }`).\n * Row data is expected to come from the parent form's data model at `data[fieldname]`.\n *\n * Returns a new array — does not mutate the original schema.\n *\n * @param schema - The schema array to resolve\n * @returns A new schema array with nested Doctype fields resolved\n *\n * @example\n * ```ts\n * registry.addDoctype(addressDoctype)\n * registry.addDoctype(customerDoctype)\n *\n * // Before: customer schema has { fieldname: 'address', fieldtype: 'Doctype', options: 'address' }\n * const resolved = registry.resolveSchema(customerSchema)\n * // After: address field now has schema: [...address fields...]\n * ```\n *\n * @public\n */\n resolveSchema(e, t) {\n const r = t || /* @__PURE__ */ new Set();\n return e.map((o) => {\n if (\"fieldtype\" in o && o.fieldtype === \"Doctype\" && \"options\" in o && typeof o.options == \"string\") {\n const s = o.options;\n if (r.has(s))\n return { ...o };\n const i = this.registry[s];\n if (i && i.schema) {\n const a = Array.isArray(i.schema) ? i.schema : Array.from(i.schema);\n r.add(s);\n const c = this.resolveSchema(a, r);\n return r.delete(s), { ...o, schema: c };\n }\n }\n if (\"fieldtype\" in o && o.fieldtype === \"Table\" && \"options\" in o && typeof o.options == \"string\") {\n const s = o.options;\n if (r.has(s))\n return { ...o };\n const i = this.registry[s];\n if (i && i.schema) {\n const a = Array.isArray(i.schema) ? i.schema : Array.from(i.schema), c = { ...o };\n return (!(\"columns\" in o) || !o.columns) && (c.columns = a.map((f) => ({\n name: f.fieldname,\n fieldname: f.fieldname,\n label: \"label\" in f && f.label || f.fieldname,\n fieldtype: \"fieldtype\" in f ? f.fieldtype : \"Data\",\n align: \"align\" in f && f.align || \"left\",\n edit: \"edit\" in f ? f.edit : !0,\n width: \"width\" in f && f.width || \"20ch\"\n }))), c.component || (c.component = \"ATable\"), (!(\"config\" in o) || !o.config) && (c.config = { view: \"list\" }), (!(\"rows\" in o) || !o.rows) && (c.rows = []), c;\n }\n }\n return { ...o };\n });\n }\n /**\n * Initialize a new record with default values based on a schema.\n *\n * @remarks\n * Creates a plain object with keys from the schema's fieldnames and default values\n * derived from each field's `fieldtype`:\n * - Data, Text → `''`\n * - Check → `false`\n * - Int, Float, Decimal, Currency, Quantity → `0`\n * - Table → `[]`\n * - JSON, Doctype → `{}`\n * - All others → `null`\n *\n * For Doctype fields with a resolved `schema` array, recursively initializes the nested record.\n *\n * @param schema - The schema array to derive defaults from\n * @returns A plain object with default values for each field\n *\n * @example\n * ```ts\n * const defaults = registry.initializeRecord(addressSchema)\n * // { street: '', city: '', state: '', zip_code: '' }\n * ```\n *\n * @public\n */\n initializeRecord(e) {\n const t = {};\n return e.forEach((r) => {\n switch (\"fieldtype\" in r ? r.fieldtype : \"Data\") {\n case \"Data\":\n case \"Text\":\n case \"Code\":\n t[r.fieldname] = \"\";\n break;\n case \"Check\":\n t[r.fieldname] = !1;\n break;\n case \"Int\":\n case \"Float\":\n case \"Decimal\":\n case \"Currency\":\n case \"Quantity\":\n t[r.fieldname] = 0;\n break;\n case \"Table\":\n t[r.fieldname] = [];\n break;\n case \"JSON\":\n t[r.fieldname] = {};\n break;\n case \"Doctype\":\n \"schema\" in r && Array.isArray(r.schema) ? t[r.fieldname] = this.initializeRecord(r.schema) : t[r.fieldname] = {};\n break;\n default:\n t[r.fieldname] = null;\n }\n }), t;\n }\n // TODO: should we allow clearing the registry at all?\n // clear() {\n // \tthis.registry = {}\n // \tif (this.router) {\n // \t\tconst routes = this.router.getRoutes()\n // \t\tfor (const route of routes) {\n // \t\t\tif (route.name) {\n // \t\t\t\tthis.router.removeRoute(route.name)\n // \t\t\t}\n // \t\t}\n // \t}\n // }\n}\nasync function It(n, e, t) {\n await de();\n try {\n await t(n, e);\n } catch {\n }\n}\nconst Jt = {\n install: (n, e) => {\n const t = n.config.globalProperties.$router, r = e?.router, o = t || r;\n !t && r && n.use(r);\n const s = new fe(o, e?.getMeta);\n n.provide(\"$registry\", s), n.config.globalProperties.$registry = s;\n const i = new Ke(s);\n n.provide(\"$stonecrop\", i), n.config.globalProperties.$stonecrop = i;\n try {\n const a = n.config.globalProperties.$pinia;\n if (a) {\n const c = pe(a);\n n.provide(\"$operationLogStore\", c), n.config.globalProperties.$operationLogStore = c;\n }\n } catch (a) {\n console.warn(\"Pinia not available - operation log features will be disabled:\", a);\n }\n if (e?.components)\n for (const [a, c] of Object.entries(e.components))\n n.component(a, c);\n e?.autoInitializeRouter && e.onRouterInitialized && It(s, i, e.onRouterInitialized);\n }\n};\nvar Ct = /* @__PURE__ */ ((n) => (n.ERROR = \"error\", n.WARNING = \"warning\", n.INFO = \"info\", n))(Ct || {});\nclass kt {\n options;\n /**\n * Creates a new SchemaValidator instance\n * @param options - Validator configuration options\n */\n constructor(e = {}) {\n this.options = {\n registry: e.registry || null,\n validateLinkTargets: e.validateLinkTargets ?? !0,\n validateActions: e.validateActions ?? !0,\n validateWorkflows: e.validateWorkflows ?? !0,\n validateRequiredProperties: e.validateRequiredProperties ?? !0\n };\n }\n /**\n * Validates a complete doctype schema\n * @param doctype - Doctype name\n * @param schema - Schema fields (List or Array)\n * @param workflow - Optional workflow configuration\n * @param actions - Optional actions map\n * @returns Validation result\n */\n validate(e, t, r, o) {\n const s = [], i = t ? Array.isArray(t) ? t : t.toArray() : [];\n if (this.options.validateRequiredProperties && s.push(...this.validateRequiredProperties(e, i)), this.options.validateLinkTargets && this.options.registry && s.push(...this.validateLinkFields(e, i, this.options.registry)), this.options.validateWorkflows && r && s.push(...this.validateWorkflow(e, r)), this.options.validateActions && o) {\n const g = o instanceof Map ? o : o.toObject();\n s.push(...this.validateActionRegistration(e, g));\n }\n const a = s.filter(\n (g) => g.severity === \"error\"\n /* ERROR */\n ).length, c = s.filter(\n (g) => g.severity === \"warning\"\n /* WARNING */\n ).length, f = s.filter(\n (g) => g.severity === \"info\"\n /* INFO */\n ).length;\n return {\n valid: a === 0,\n issues: s,\n errorCount: a,\n warningCount: c,\n infoCount: f\n };\n }\n /**\n * Validates that required schema properties are present\n * @internal\n */\n validateRequiredProperties(e, t) {\n const r = [];\n for (const o of t) {\n if (!o.fieldname) {\n r.push({\n severity: \"error\",\n rule: \"required-fieldname\",\n message: \"Field is missing required property: fieldname\",\n doctype: e,\n context: { field: o }\n });\n continue;\n }\n if (!o.component && !(\"fieldtype\" in o) && r.push({\n severity: \"error\",\n rule: \"required-component-or-fieldtype\",\n message: `Field \"${o.fieldname}\" must have either component or fieldtype property`,\n doctype: e,\n fieldname: o.fieldname\n }), \"schema\" in o) {\n const s = o.schema, i = Array.isArray(s) ? s : s.toArray?.() || [];\n r.push(...this.validateRequiredProperties(e, i));\n }\n }\n return r;\n }\n /**\n * Validates Link field targets exist in registry\n * @internal\n */\n validateLinkFields(e, t, r) {\n const o = [];\n for (const s of t) {\n if ((\"fieldtype\" in s ? s.fieldtype : void 0) === \"Link\") {\n const a = \"options\" in s ? s.options : void 0;\n if (!a) {\n o.push({\n severity: \"error\",\n rule: \"link-missing-options\",\n message: `Link field \"${s.fieldname}\" is missing options property (target doctype)`,\n doctype: e,\n fieldname: s.fieldname\n });\n continue;\n }\n const c = typeof a == \"string\" ? a : \"\";\n if (!c) {\n o.push({\n severity: \"error\",\n rule: \"link-invalid-options\",\n message: `Link field \"${s.fieldname}\" has invalid options format (expected string doctype name)`,\n doctype: e,\n fieldname: s.fieldname\n });\n continue;\n }\n r.registry[c] || r.registry[c.toLowerCase()] || o.push({\n severity: \"error\",\n rule: \"link-invalid-target\",\n message: `Link field \"${s.fieldname}\" references non-existent doctype: \"${c}\"`,\n doctype: e,\n fieldname: s.fieldname,\n context: { targetDoctype: c }\n });\n }\n if (\"schema\" in s) {\n const a = s.schema, c = Array.isArray(a) ? a : a.toArray?.() || [];\n o.push(...this.validateLinkFields(e, c, r));\n }\n }\n return o;\n }\n /**\n * Validates workflow state machine configuration\n * @internal\n */\n validateWorkflow(e, t) {\n const r = [];\n if (!t.initial && !t.type && r.push({\n severity: \"warning\",\n rule: \"workflow-missing-initial\",\n message: \"Workflow is missing initial state property\",\n doctype: e\n }), !t.states || Object.keys(t.states).length === 0)\n return r.push({\n severity: \"warning\",\n rule: \"workflow-no-states\",\n message: \"Workflow has no states defined\",\n doctype: e\n }), r;\n t.initial && typeof t.initial == \"string\" && !t.states[t.initial] && r.push({\n severity: \"error\",\n rule: \"workflow-invalid-initial\",\n message: `Workflow initial state \"${t.initial}\" does not exist in states`,\n doctype: e,\n context: { initialState: t.initial }\n });\n const o = Object.keys(t.states), s = /* @__PURE__ */ new Set();\n t.initial && typeof t.initial == \"string\" && s.add(t.initial);\n for (const [i, a] of Object.entries(t.states)) {\n const c = a;\n if (c.on) {\n for (const [f, g] of Object.entries(c.on))\n if (typeof g == \"string\")\n s.add(g);\n else if (g && typeof g == \"object\") {\n const b = \"target\" in g ? g.target : void 0;\n typeof b == \"string\" ? s.add(b) : Array.isArray(b) && b.forEach((A) => {\n typeof A == \"string\" && s.add(A);\n });\n }\n }\n }\n for (const i of o)\n s.has(i) || r.push({\n severity: \"warning\",\n rule: \"workflow-unreachable-state\",\n message: `Workflow state \"${i}\" may not be reachable`,\n doctype: e,\n context: { stateName: i }\n });\n return r;\n }\n /**\n * Validates that actions are registered in the FieldTriggerEngine\n * @internal\n */\n validateActionRegistration(e, t) {\n const r = [], o = K();\n for (const [s, i] of Object.entries(t)) {\n if (!Array.isArray(i)) {\n r.push({\n severity: \"error\",\n rule: \"action-invalid-format\",\n message: `Action configuration for \"${s}\" must be an array`,\n doctype: e,\n context: { triggerName: s, actionNames: i }\n });\n continue;\n }\n for (const a of i) {\n const c = o;\n c.globalActions?.has(a) || c.globalTransitionActions?.has(a) || r.push({\n severity: \"warning\",\n rule: \"action-not-registered\",\n message: `Action \"${a}\" referenced in \"${s}\" is not registered in FieldTriggerEngine`,\n doctype: e,\n context: { triggerName: s, actionName: a }\n });\n }\n }\n return r;\n }\n}\nfunction Lt(n, e) {\n return new kt({\n registry: n,\n ...e\n });\n}\nfunction qt(n, e, t, r, o) {\n return Lt(t).validate(n, e, r, o);\n}\nexport {\n Ut as DoctypeMeta,\n ne as HST,\n fe as Registry,\n kt as SchemaValidator,\n Ke as Stonecrop,\n Ct as ValidationSeverity,\n Dt as createHST,\n Lt as createValidator,\n Jt as default,\n K as getGlobalTriggerEngine,\n jt as markOperationIrreversible,\n xt as registerGlobalAction,\n Mt as registerTransitionAction,\n Ft as setFieldRollback,\n Bt as triggerTransition,\n Ge as useOperationLog,\n pe as useOperationLogStore,\n Wt as useStonecrop,\n Ht as useUndoRedoShortcuts,\n qt as validateSchema,\n zt as withBatch\n};\n//# sourceMappingURL=stonecrop.js.map\n","import { defineComponent as j, useTemplateRef as ne, ref as S, computed as M, createElementBlock as k, openBlock as x, unref as $, normalizeClass as ee, normalizeStyle as ce, createBlock as re, resolveDynamicComponent as Ae, mergeProps as et, toDisplayString as W, createCommentVNode as K, createElementVNode as y, Fragment as te, renderList as ae, withDirectives as U, renderSlot as oe, createTextVNode as Ct, withModifiers as $e, onMounted as ve, watch as Y, onBeforeUnmount as tn, nextTick as tt, useCssVars as xn, onUnmounted as bn, vShow as be, mergeModels as de, useModel as fe, createVNode as Ze, withCtx as It, shallowRef as J, toValue as T, reactive as nn, vModelText as se, vModelCheckbox as on, vModelSelect as In, isRef as kn, toRefs as Cn, customRef as Et, getCurrentScope as nt, onScopeDispose as ot, getCurrentInstance as lt, watchEffect as Ce, toRef as ln, readonly as Dt, resolveComponent as an, withKeys as De } from \"vue\";\nimport { defineStore as En } from \"pinia\";\nimport './assets/index.css';function rn(e, t) {\n return nt() ? (ot(e, t), !0) : !1;\n}\nconst Dn = typeof window < \"u\" && typeof document < \"u\";\ntypeof WorkerGlobalScope < \"u\" && globalThis instanceof WorkerGlobalScope;\nconst Tn = (e) => e != null, An = Object.prototype.toString, $n = (e) => An.call(e) === \"[object Object]\", Mn = () => {\n};\nfunction Je(e) {\n return Array.isArray(e) ? e : [e];\n}\nfunction Sn(e, t, n) {\n return Y(e, t, {\n ...n,\n immediate: !0\n });\n}\nconst Le = Dn ? window : void 0;\nfunction Me(e) {\n var t;\n const n = T(e);\n return (t = n?.$el) !== null && t !== void 0 ? t : n;\n}\nfunction Oe(...e) {\n const t = (o, a, s, l) => (o.addEventListener(a, s, l), () => o.removeEventListener(a, s, l)), n = M(() => {\n const o = Je(T(e[0])).filter((a) => a != null);\n return o.every((a) => typeof a != \"string\") ? o : void 0;\n });\n return Sn(() => {\n var o, a;\n return [\n (o = (a = n.value) === null || a === void 0 ? void 0 : a.map((s) => Me(s))) !== null && o !== void 0 ? o : [Le].filter((s) => s != null),\n Je(T(n.value ? e[1] : e[0])),\n Je($(n.value ? e[2] : e[1])),\n T(n.value ? e[3] : e[2])\n ];\n }, ([o, a, s, l], r, i) => {\n if (!o?.length || !a?.length || !s?.length) return;\n const u = $n(l) ? { ...l } : l, c = o.flatMap((m) => a.flatMap((g) => s.map((p) => t(m, g, p, u))));\n i(() => {\n c.forEach((m) => m());\n });\n }, { flush: \"post\" });\n}\n// @__NO_SIDE_EFFECTS__\nfunction Ln() {\n const e = J(!1), t = lt();\n return t && ve(() => {\n e.value = !0;\n }, t), e;\n}\n// @__NO_SIDE_EFFECTS__\nfunction Rn(e) {\n const t = /* @__PURE__ */ Ln();\n return M(() => (t.value, !!e()));\n}\nfunction Vn(e, t, n = {}) {\n const { window: o = Le, ...a } = n;\n let s;\n const l = /* @__PURE__ */ Rn(() => o && \"MutationObserver\" in o), r = () => {\n s && (s.disconnect(), s = void 0);\n }, i = Y(M(() => {\n const m = Je(T(e)).map(Me).filter(Tn);\n return new Set(m);\n }), (m) => {\n r(), l.value && m.size && (s = new MutationObserver(t), m.forEach((g) => s.observe(g, a)));\n }, {\n immediate: !0,\n flush: \"post\"\n }), u = () => s?.takeRecords(), c = () => {\n i(), r();\n };\n return rn(c), {\n isSupported: l,\n stop: c,\n takeRecords: u\n };\n}\nfunction Pn(e, t, n = {}) {\n const { window: o = Le, document: a = o?.document, flush: s = \"sync\" } = n;\n if (!o || !a) return Mn;\n let l;\n const r = (c) => {\n l?.(), l = c;\n }, i = Ce(() => {\n const c = Me(e);\n if (c) {\n const { stop: m } = Vn(a, (g) => {\n g.map((p) => [...p.removedNodes]).flat().some((p) => p === c || p.contains(c)) && t(g);\n }, {\n window: o,\n childList: !0,\n subtree: !0\n });\n r(m);\n }\n }, { flush: s }), u = () => {\n i(), r();\n };\n return rn(u), u;\n}\n// @__NO_SIDE_EFFECTS__\nfunction On(e = {}) {\n var t;\n const { window: n = Le, deep: o = !0, triggerOnRemoval: a = !1 } = e, s = (t = e.document) !== null && t !== void 0 ? t : n?.document, l = () => {\n let u = s?.activeElement;\n if (o)\n for (var c; u?.shadowRoot; ) u = u == null || (c = u.shadowRoot) === null || c === void 0 ? void 0 : c.activeElement;\n return u;\n }, r = J(), i = () => {\n r.value = l();\n };\n if (n) {\n const u = {\n capture: !0,\n passive: !0\n };\n Oe(n, \"blur\", (c) => {\n c.relatedTarget === null && i();\n }, u), Oe(n, \"focus\", i, u);\n }\n return a && Pn(r, i, { document: s }), i(), r;\n}\nconst _n = \"focusin\", Hn = \"focusout\", Fn = \":focus-within\";\nfunction Nn(e, t = {}) {\n const { window: n = Le } = t, o = M(() => Me(e)), a = J(!1), s = M(() => a.value);\n if (!n || !(/* @__PURE__ */ On(t)).value) return { focused: s };\n const l = { passive: !0 };\n return Oe(o, _n, () => a.value = !0, l), Oe(o, Hn, () => {\n var r, i, u;\n return a.value = (r = (i = o.value) === null || i === void 0 || (u = i.matches) === null || u === void 0 ? void 0 : u.call(i, Fn)) !== null && r !== void 0 ? r : !1;\n }, l), { focused: s };\n}\nfunction Bn(e, { window: t = Le, scrollTarget: n } = {}) {\n const o = S(!1), a = () => {\n if (!t) return;\n const s = t.document, l = Me(e);\n if (!l)\n o.value = !1;\n else {\n const r = l.getBoundingClientRect();\n o.value = r.top <= (t.innerHeight || s.documentElement.clientHeight) && r.left <= (t.innerWidth || s.documentElement.clientWidth) && r.bottom >= 0 && r.right >= 0;\n }\n };\n return Y(\n () => Me(e),\n () => a(),\n { immediate: !0, flush: \"post\" }\n ), t && Oe(n || t, \"scroll\", a, {\n capture: !1,\n passive: !0\n }), o;\n}\nconst me = (e) => {\n let t = Bn(e).value;\n return t = t && e.offsetHeight > 0, t;\n}, pe = (e) => e.tabIndex >= 0, Ht = (e) => {\n const t = e.target;\n return Tt(t);\n}, Tt = (e) => {\n let t;\n if (e instanceof HTMLTableCellElement) {\n const n = e.parentElement?.previousElementSibling;\n if (n) {\n const o = Array.from(n.children)[e.cellIndex];\n o && (t = o);\n }\n } else if (e instanceof HTMLTableRowElement) {\n const n = e.previousElementSibling;\n n && (t = n);\n }\n return t && (!pe(t) || !me(t)) ? Tt(t) : t;\n}, Gn = (e) => {\n const t = e.target;\n let n;\n if (t instanceof HTMLTableCellElement) {\n const o = t.parentElement?.parentElement;\n if (o) {\n const a = o.firstElementChild?.children[t.cellIndex];\n a && (n = a);\n }\n } else if (t instanceof HTMLTableRowElement) {\n const o = t.parentElement;\n if (o) {\n const a = o.firstElementChild;\n a && (n = a);\n }\n }\n return n && (!pe(n) || !me(n)) ? At(n) : n;\n}, Ft = (e) => {\n const t = e.target;\n return At(t);\n}, At = (e) => {\n let t;\n if (e instanceof HTMLTableCellElement) {\n const n = e.parentElement?.nextElementSibling;\n if (n) {\n const o = Array.from(n.children)[e.cellIndex];\n o && (t = o);\n }\n } else if (e instanceof HTMLTableRowElement) {\n const n = e.nextElementSibling;\n n && (t = n);\n }\n return t && (!pe(t) || !me(t)) ? At(t) : t;\n}, Un = (e) => {\n const t = e.target;\n let n;\n if (t instanceof HTMLTableCellElement) {\n const o = t.parentElement?.parentElement;\n if (o) {\n const a = o.lastElementChild?.children[t.cellIndex];\n a && (n = a);\n }\n } else if (t instanceof HTMLTableRowElement) {\n const o = t.parentElement;\n if (o) {\n const a = o.lastElementChild;\n a && (n = a);\n }\n }\n return n && (!pe(n) || !me(n)) ? Tt(n) : n;\n}, Nt = (e) => {\n const t = e.target;\n return $t(t);\n}, $t = (e) => {\n let t;\n return e.previousElementSibling ? t = e.previousElementSibling : t = e.parentElement?.previousElementSibling?.lastElementChild, t && (!pe(t) || !me(t)) ? $t(t) : t;\n}, Bt = (e) => {\n const t = e.target;\n return Mt(t);\n}, Mt = (e) => {\n let t;\n return e.nextElementSibling ? t = e.nextElementSibling : t = e.parentElement?.nextElementSibling?.firstElementChild, t && (!pe(t) || !me(t)) ? Mt(t) : t;\n}, Gt = (e) => {\n const t = e.target.parentElement?.firstElementChild;\n return t && (!pe(t) || !me(t)) ? Mt(t) : t;\n}, Ut = (e) => {\n const t = e.target.parentElement?.lastElementChild;\n return t && (!pe(t) || !me(t)) ? $t(t) : t;\n}, je = [\"alt\", \"control\", \"shift\", \"meta\"], zn = {\n ArrowUp: \"up\",\n ArrowDown: \"down\",\n ArrowLeft: \"left\",\n ArrowRight: \"right\"\n}, at = {\n \"keydown.up\": (e) => {\n const t = Ht(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.down\": (e) => {\n const t = Ft(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.left\": (e) => {\n const t = Nt(e);\n e.preventDefault(), e.stopPropagation(), t && t.focus();\n },\n \"keydown.right\": (e) => {\n const t = Bt(e);\n e.preventDefault(), e.stopPropagation(), t && t.focus();\n },\n \"keydown.control.up\": (e) => {\n const t = Gn(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.down\": (e) => {\n const t = Un(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.left\": (e) => {\n const t = Gt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.right\": (e) => {\n const t = Ut(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.end\": (e) => {\n const t = Ut(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.enter\": (e) => {\n if (e.target instanceof HTMLTableCellElement) {\n e.preventDefault(), e.stopPropagation();\n const t = Ft(e);\n t && t.focus();\n }\n },\n \"keydown.shift.enter\": (e) => {\n if (e.target instanceof HTMLTableCellElement) {\n e.preventDefault(), e.stopPropagation();\n const t = Ht(e);\n t && t.focus();\n }\n },\n \"keydown.home\": (e) => {\n const t = Gt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.tab\": (e) => {\n const t = Bt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.shift.tab\": (e) => {\n const t = Nt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n }\n};\nfunction St(e) {\n const t = (l) => {\n let r = null;\n return l.parent && (typeof l.parent == \"string\" ? r = document.querySelector(l.parent) : l.parent instanceof HTMLElement ? r = l.parent : r = l.parent.value), r;\n }, n = (l) => {\n const r = t(l);\n let i = [];\n if (typeof l.selectors == \"string\")\n i = Array.from(r ? r.querySelectorAll(l.selectors) : document.querySelectorAll(l.selectors));\n else if (Array.isArray(l.selectors))\n for (const u of l.selectors)\n u instanceof HTMLElement ? i.push(u) : i.push(u.$el);\n else if (l.selectors instanceof HTMLElement)\n i.push(l.selectors);\n else if (l.selectors?.value)\n if (Array.isArray(l.selectors.value))\n for (const u of l.selectors.value)\n u instanceof HTMLElement ? i.push(u) : i.push(u.$el);\n else\n i.push(l.selectors.value);\n return i;\n }, o = (l) => {\n const r = t(l);\n let i = [];\n return l.selectors ? i = n(l) : r && (i = Array.from(r.children).filter((u) => pe(u) && me(u))), i;\n }, a = (l) => (r) => {\n const i = zn[r.key] || r.key.toLowerCase();\n if (je.includes(i)) return;\n const u = l.handlers || at;\n for (const c of Object.keys(u)) {\n const [m, ...g] = c.split(\".\");\n if (m === \"keydown\" && g.includes(i)) {\n const p = u[c], D = g.filter((f) => je.includes(f)), w = je.some((f) => {\n const h = f.charAt(0).toUpperCase() + f.slice(1);\n return r.getModifierState(h);\n });\n if (D.length > 0) {\n if (w) {\n for (const f of je)\n if (g.includes(f)) {\n const h = f.charAt(0).toUpperCase() + f.slice(1);\n r.getModifierState(h) && p(r);\n }\n }\n } else\n w || p(r);\n }\n }\n }, s = [];\n ve(() => {\n for (const l of e) {\n const r = t(l), i = o(l), u = a(l), c = r ? [r] : i;\n for (const m of c) {\n const { focused: g } = Nn(S(m)), p = Y(g, (D) => {\n D ? m.addEventListener(\"keydown\", u) : m.removeEventListener(\"keydown\", u);\n });\n s.push(p);\n }\n }\n }), tn(() => {\n for (const l of s)\n l();\n });\n}\nfunction Lt(e, t) {\n return nt() ? (ot(e, t), !0) : !1;\n}\nconst sn = typeof window < \"u\" && typeof document < \"u\";\ntypeof WorkerGlobalScope < \"u\" && globalThis instanceof WorkerGlobalScope;\nconst Wn = (e) => e != null, Xn = Object.prototype.toString, jn = (e) => Xn.call(e) === \"[object Object]\", Ee = () => {\n};\nfunction qn(...e) {\n if (e.length !== 1) return ln(...e);\n const t = e[0];\n return typeof t == \"function\" ? Dt(Et(() => ({\n get: t,\n set: Ee\n }))) : S(t);\n}\nfunction Yn(e, t) {\n function n(...o) {\n return new Promise((a, s) => {\n Promise.resolve(e(() => t.apply(this, o), {\n fn: t,\n thisArg: this,\n args: o\n })).then(a).catch(s);\n });\n }\n return n;\n}\nfunction Jn(e, t = {}) {\n let n, o, a = Ee;\n const s = (r) => {\n clearTimeout(r), a(), a = Ee;\n };\n let l;\n return (r) => {\n const i = T(e), u = T(t.maxWait);\n return n && s(n), i <= 0 || u !== void 0 && u <= 0 ? (o && (s(o), o = void 0), Promise.resolve(r())) : new Promise((c, m) => {\n a = t.rejectOnCancel ? m : c, l = r, u && !o && (o = setTimeout(() => {\n n && s(n), o = void 0, c(l());\n }, u)), n = setTimeout(() => {\n o && s(o), o = void 0, c(r());\n }, i);\n });\n };\n}\nfunction Ke(e) {\n return Array.isArray(e) ? e : [e];\n}\nfunction Kn(e) {\n return lt();\n}\n// @__NO_SIDE_EFFECTS__\nfunction Qn(e, t = 200, n = {}) {\n return Yn(Jn(t, n), e);\n}\nfunction Zn(e, t = {}) {\n if (!kn(e)) return Cn(e);\n const n = Array.isArray(e.value) ? Array.from({ length: e.value.length }) : {};\n for (const o in e.value) n[o] = Et(() => ({\n get() {\n return e.value[o];\n },\n set(a) {\n var s;\n if (!((s = T(t.replaceRef)) !== null && s !== void 0) || s) if (Array.isArray(e.value)) {\n const l = [...e.value];\n l[o] = a, e.value = l;\n } else {\n const l = {\n ...e.value,\n [o]: a\n };\n Object.setPrototypeOf(l, Object.getPrototypeOf(e.value)), e.value = l;\n }\n else e.value[o] = a;\n }\n }));\n return n;\n}\nfunction eo(e, t = !0, n) {\n Kn() ? ve(e, n) : t ? e() : tt(e);\n}\nfunction to(e, t, n) {\n return Y(e, t, {\n ...n,\n immediate: !0\n });\n}\nconst He = sn ? window : void 0;\nfunction ue(e) {\n var t;\n const n = T(e);\n return (t = n?.$el) !== null && t !== void 0 ? t : n;\n}\nfunction xe(...e) {\n const t = (o, a, s, l) => (o.addEventListener(a, s, l), () => o.removeEventListener(a, s, l)), n = M(() => {\n const o = Ke(T(e[0])).filter((a) => a != null);\n return o.every((a) => typeof a != \"string\") ? o : void 0;\n });\n return to(() => {\n var o, a;\n return [\n (o = (a = n.value) === null || a === void 0 ? void 0 : a.map((s) => ue(s))) !== null && o !== void 0 ? o : [He].filter((s) => s != null),\n Ke(T(n.value ? e[1] : e[0])),\n Ke($(n.value ? e[2] : e[1])),\n T(n.value ? e[3] : e[2])\n ];\n }, ([o, a, s, l], r, i) => {\n if (!o?.length || !a?.length || !s?.length) return;\n const u = jn(l) ? { ...l } : l, c = o.flatMap((m) => a.flatMap((g) => s.map((p) => t(m, g, p, u))));\n i(() => {\n c.forEach((m) => m());\n });\n }, { flush: \"post\" });\n}\nfunction zt(e, t, n = {}) {\n const { window: o = He, ignore: a = [], capture: s = !0, detectIframe: l = !1, controls: r = !1 } = n;\n if (!o) return r ? {\n stop: Ee,\n cancel: Ee,\n trigger: Ee\n } : Ee;\n let i = !0;\n const u = (f) => T(a).some((h) => {\n if (typeof h == \"string\") return Array.from(o.document.querySelectorAll(h)).some((I) => I === f.target || f.composedPath().includes(I));\n {\n const I = ue(h);\n return I && (f.target === I || f.composedPath().includes(I));\n }\n });\n function c(f) {\n const h = T(f);\n return h && h.$.subTree.shapeFlag === 16;\n }\n function m(f, h) {\n const I = T(f), E = I.$.subTree && I.$.subTree.children;\n return E == null || !Array.isArray(E) ? !1 : E.some((L) => L.el === h.target || h.composedPath().includes(L.el));\n }\n const g = (f) => {\n const h = ue(e);\n if (f.target != null && !(!(h instanceof Element) && c(e) && m(e, f)) && !(!h || h === f.target || f.composedPath().includes(h))) {\n if (\"detail\" in f && f.detail === 0 && (i = !u(f)), !i) {\n i = !0;\n return;\n }\n t(f);\n }\n };\n let p = !1;\n const D = [\n xe(o, \"click\", (f) => {\n p || (p = !0, setTimeout(() => {\n p = !1;\n }, 0), g(f));\n }, {\n passive: !0,\n capture: s\n }),\n xe(o, \"pointerdown\", (f) => {\n const h = ue(e);\n i = !u(f) && !!(h && !f.composedPath().includes(h));\n }, { passive: !0 }),\n l && xe(o, \"blur\", (f) => {\n setTimeout(() => {\n var h;\n const I = ue(e);\n ((h = o.document.activeElement) === null || h === void 0 ? void 0 : h.tagName) === \"IFRAME\" && !I?.contains(o.document.activeElement) && t(f);\n }, 0);\n }, { passive: !0 })\n ].filter(Boolean), w = () => D.forEach((f) => f());\n return r ? {\n stop: w,\n cancel: () => {\n i = !1;\n },\n trigger: (f) => {\n i = !0, g(f), i = !1;\n }\n } : w;\n}\n// @__NO_SIDE_EFFECTS__\nfunction no() {\n const e = J(!1), t = lt();\n return t && ve(() => {\n e.value = !0;\n }, t), e;\n}\n// @__NO_SIDE_EFFECTS__\nfunction un(e) {\n const t = /* @__PURE__ */ no();\n return M(() => (t.value, !!e()));\n}\nfunction cn(e, t, n = {}) {\n const { window: o = He, ...a } = n;\n let s;\n const l = /* @__PURE__ */ un(() => o && \"MutationObserver\" in o), r = () => {\n s && (s.disconnect(), s = void 0);\n }, i = Y(M(() => {\n const m = Ke(T(e)).map(ue).filter(Wn);\n return new Set(m);\n }), (m) => {\n r(), l.value && m.size && (s = new MutationObserver(t), m.forEach((g) => s.observe(g, a)));\n }, {\n immediate: !0,\n flush: \"post\"\n }), u = () => s?.takeRecords(), c = () => {\n i(), r();\n };\n return Lt(c), {\n isSupported: l,\n stop: c,\n takeRecords: u\n };\n}\nfunction vt(e, t = {}) {\n var n;\n const { pointerTypes: o, preventDefault: a, stopPropagation: s, exact: l, onMove: r, onEnd: i, onStart: u, initialValue: c, axis: m = \"both\", draggingElement: g = He, containerElement: p, handle: D = e, buttons: w = [0] } = t, f = S((n = T(c)) !== null && n !== void 0 ? n : {\n x: 0,\n y: 0\n }), h = S(), I = (C) => o ? o.includes(C.pointerType) : !0, E = (C) => {\n T(a) && C.preventDefault(), T(s) && C.stopPropagation();\n }, L = (C) => {\n var O;\n if (!T(w).includes(C.button) || T(t.disabled) || !I(C) || T(l) && C.target !== T(e)) return;\n const q = T(p), G = q == null || (O = q.getBoundingClientRect) === null || O === void 0 ? void 0 : O.call(q), F = T(e).getBoundingClientRect(), le = {\n x: C.clientX - (q ? F.left - G.left + q.scrollLeft : F.left),\n y: C.clientY - (q ? F.top - G.top + q.scrollTop : F.top)\n };\n u?.(le, C) !== !1 && (h.value = le, E(C));\n }, z = (C) => {\n if (T(t.disabled) || !I(C) || !h.value) return;\n const O = T(p), q = T(e).getBoundingClientRect();\n let { x: G, y: F } = f.value;\n (m === \"x\" || m === \"both\") && (G = C.clientX - h.value.x, O && (G = Math.min(Math.max(0, G), O.scrollWidth - q.width))), (m === \"y\" || m === \"both\") && (F = C.clientY - h.value.y, O && (F = Math.min(Math.max(0, F), O.scrollHeight - q.height))), f.value = {\n x: G,\n y: F\n }, r?.(f.value, C), E(C);\n }, R = (C) => {\n T(t.disabled) || !I(C) || h.value && (h.value = void 0, i?.(f.value, C), E(C));\n };\n if (sn) {\n const C = () => {\n var O;\n return {\n capture: (O = t.capture) !== null && O !== void 0 ? O : !0,\n passive: !T(a)\n };\n };\n xe(D, \"pointerdown\", L, C), xe(g, \"pointermove\", z, C), xe(g, \"pointerup\", R, C);\n }\n return {\n ...Zn(f),\n position: f,\n isDragging: M(() => !!h.value),\n style: M(() => `left:${f.value.x}px;top:${f.value.y}px;`)\n };\n}\nfunction kt(e, t, n = {}) {\n const { window: o = He, ...a } = n;\n let s;\n const l = /* @__PURE__ */ un(() => o && \"ResizeObserver\" in o), r = () => {\n s && (s.disconnect(), s = void 0);\n }, i = Y(M(() => {\n const c = T(e);\n return Array.isArray(c) ? c.map((m) => ue(m)) : [ue(c)];\n }), (c) => {\n if (r(), l.value && o) {\n s = new ResizeObserver(t);\n for (const m of c) m && s.observe(m, a);\n }\n }, {\n immediate: !0,\n flush: \"post\"\n }), u = () => {\n r(), i();\n };\n return Lt(u), {\n isSupported: l,\n stop: u\n };\n}\nfunction ke(e, t = {}) {\n const { reset: n = !0, windowResize: o = !0, windowScroll: a = !0, immediate: s = !0, updateTiming: l = \"sync\" } = t, r = J(0), i = J(0), u = J(0), c = J(0), m = J(0), g = J(0), p = J(0), D = J(0);\n function w() {\n const h = ue(e);\n if (!h) {\n n && (r.value = 0, i.value = 0, u.value = 0, c.value = 0, m.value = 0, g.value = 0, p.value = 0, D.value = 0);\n return;\n }\n const I = h.getBoundingClientRect();\n r.value = I.height, i.value = I.bottom, u.value = I.left, c.value = I.right, m.value = I.top, g.value = I.width, p.value = I.x, D.value = I.y;\n }\n function f() {\n l === \"sync\" ? w() : l === \"next-frame\" && requestAnimationFrame(() => w());\n }\n return kt(e, f), Y(() => ue(e), (h) => !h && f()), cn(e, f, { attributeFilter: [\"style\", \"class\"] }), a && xe(\"scroll\", f, {\n capture: !0,\n passive: !0\n }), o && xe(\"resize\", f, { passive: !0 }), eo(() => {\n s && f();\n }), {\n height: r,\n bottom: i,\n left: u,\n right: c,\n top: m,\n width: g,\n x: p,\n y: D,\n update: f\n };\n}\nfunction mt(e) {\n return typeof Window < \"u\" && e instanceof Window ? e.document.documentElement : typeof Document < \"u\" && e instanceof Document ? e.documentElement : e;\n}\nconst pt = /* @__PURE__ */ new WeakMap();\nfunction oo(e, t = !1) {\n const n = J(t);\n let o = \"\";\n Y(qn(e), (l) => {\n const r = mt(T(l));\n if (r) {\n const i = r;\n if (pt.get(i) || pt.set(i, i.style.overflow), i.style.overflow !== \"hidden\" && (o = i.style.overflow), i.style.overflow === \"hidden\") return n.value = !0;\n if (n.value) return i.style.overflow = \"hidden\";\n }\n }, { immediate: !0 });\n const a = () => {\n const l = mt(T(e));\n !l || n.value || (l.style.overflow = \"hidden\", n.value = !0);\n }, s = () => {\n const l = mt(T(e));\n !l || !n.value || (l.style.overflow = o, pt.delete(l), n.value = !1);\n };\n return Lt(s), M({\n get() {\n return n.value;\n },\n set(l) {\n l ? a() : s();\n }\n });\n}\nconst lo = (e) => {\n const t = new DOMParser().parseFromString(e, \"text/html\");\n return Array.from(t.body.childNodes).some((n) => n.nodeType === 1);\n}, ao = (e = 8) => Array.from({ length: e }, () => Math.floor(Math.random() * 16).toString(16)).join(\"\"), ro = [\"data-colindex\", \"data-rowindex\", \"data-editable\", \"contenteditable\", \"tabindex\"], so = [\"innerHTML\"], io = { key: 2 }, uo = /* @__PURE__ */ j({\n __name: \"ACell\",\n props: {\n colIndex: {},\n rowIndex: {},\n store: {},\n addNavigation: { type: [Boolean, Object], default: !0 },\n tabIndex: { default: 0 },\n pinned: { type: Boolean, default: !1 },\n debounce: { default: 300 }\n },\n setup(e, { expose: t }) {\n const n = ne(\"cell\"), o = e.store.getCellData(e.colIndex, e.rowIndex), a = S(\"\"), s = S(!1), l = e.store.columns[e.colIndex], r = e.store.rows[e.rowIndex], i = l.align || \"center\", u = l.width || \"40ch\", c = M(() => e.store.getCellDisplayValue(e.colIndex, e.rowIndex)), m = M(() => typeof c.value == \"string\" ? lo(c.value) : !1), g = M(() => ({\n textAlign: i,\n width: u,\n fontWeight: s.value ? \"bold\" : \"inherit\",\n paddingLeft: e.store.getIndent(e.colIndex, e.store.display[e.rowIndex]?.indent)\n })), p = M(() => ({\n \"sticky-column\": e.pinned,\n \"cell-modified\": s.value\n })), D = () => {\n f(), w();\n }, w = () => {\n const { left: R, bottom: C, width: O, height: q } = ke(n);\n l.mask, l.modalComponent && e.store.$patch((G) => {\n G.modal.visible = !0, G.modal.colIndex = e.colIndex, G.modal.rowIndex = e.rowIndex, G.modal.left = R, G.modal.bottom = C, G.modal.width = O, G.modal.height = q, G.modal.cell = n.value, typeof l.modalComponent == \"function\" ? G.modal.component = l.modalComponent({ table: G.table, row: r, column: l }) : G.modal.component = l.modalComponent, G.modal.componentProps = l.modalComponentExtraProps;\n });\n };\n if (e.addNavigation) {\n let R = {\n ...at,\n \"keydown.f2\": w,\n \"keydown.alt.up\": w,\n \"keydown.alt.down\": w,\n \"keydown.alt.left\": w,\n \"keydown.alt.right\": w\n };\n typeof e.addNavigation == \"object\" && (R = {\n ...R,\n ...e.addNavigation\n }), St([\n {\n selectors: n,\n handlers: R\n }\n ]);\n }\n const f = () => {\n if (n.value && l.edit) {\n const R = window.getSelection();\n if (R)\n try {\n const C = document.createRange();\n C.selectNodeContents && (C.selectNodeContents(n.value), R.removeAllRanges(), R.addRange(C));\n } catch {\n }\n }\n }, h = () => {\n n.value && (a.value = n.value.textContent, f());\n }, I = () => {\n try {\n const R = window.getSelection();\n if (R && R.rangeCount > 0 && n.value) {\n const C = R.getRangeAt(0), O = C.cloneRange();\n if (O.selectNodeContents && O.setEnd)\n return O.selectNodeContents(n.value), O.setEnd(C.endContainer, C.endOffset), O.toString().length;\n }\n } catch {\n }\n return 0;\n }, E = (R) => {\n if (n.value)\n try {\n const C = window.getSelection();\n if (!C) return;\n let O = 0;\n const q = document.createTreeWalker ? document.createTreeWalker(n.value, NodeFilter.SHOW_TEXT, null) : null;\n if (!q) return;\n let G, F = null;\n for (; G = q.nextNode(); ) {\n const le = G, we = O + le.textContent.length;\n if (R <= we && (F = document.createRange(), F.setStart && F.setEnd)) {\n F.setStart(le, R - O), F.setEnd(le, R - O);\n break;\n }\n O = we;\n }\n F && C.removeAllRanges && C.addRange && (C.removeAllRanges(), C.addRange(F));\n } catch {\n }\n }, L = (R) => {\n if (!l.edit) return;\n const C = R.target;\n if (C.textContent === a.value)\n return;\n const O = I();\n a.value = C.textContent, l.format ? (s.value = C.textContent !== e.store.getFormattedValue(e.colIndex, e.rowIndex, o), e.store.setCellText(e.colIndex, e.rowIndex, C.textContent)) : (s.value = C.textContent !== o, e.store.setCellData(e.colIndex, e.rowIndex, C.textContent)), tt().then(() => {\n E(O);\n });\n }, z = /* @__PURE__ */ Qn(L, e.debounce);\n return t({\n currentData: a\n }), (R, C) => (x(), k(\"td\", {\n ref: \"cell\",\n \"data-colindex\": e.colIndex,\n \"data-rowindex\": e.rowIndex,\n \"data-editable\": $(l).edit,\n contenteditable: $(l).edit,\n tabindex: e.tabIndex,\n spellcheck: !1,\n style: ce(g.value),\n class: ee([\"atable-cell\", p.value]),\n onFocus: h,\n onPaste: L,\n onInput: C[0] || (C[0] = //@ts-ignore\n (...O) => $(z) && $(z)(...O)),\n onClick: D\n }, [\n $(l).cellComponent ? (x(), re(Ae($(l).cellComponent), et({\n key: 0,\n value: c.value\n }, $(l).cellComponentProps), null, 16, [\"value\"])) : m.value ? (x(), k(\"span\", {\n key: 1,\n innerHTML: c.value\n }, null, 8, so)) : (x(), k(\"span\", io, W(c.value), 1))\n ], 46, ro));\n }\n}), co = [\"tabindex\"], fo = [\"tabindex\"], vo = [\"colspan\"], mo = /* @__PURE__ */ j({\n __name: \"AExpansionRow\",\n props: {\n rowIndex: {},\n store: {},\n tabIndex: { default: () => -1 },\n addNavigation: { type: [Boolean, Object], default: () => at }\n },\n setup(e) {\n const t = ne(\"rowEl\"), n = M(() => e.store.display[e.rowIndex].expanded ? \"▼\" : \"►\");\n if (e.addNavigation) {\n const o = {\n \"keydown.control.g\": (a) => {\n a.stopPropagation(), a.preventDefault(), e.store.toggleRowExpand(e.rowIndex);\n }\n };\n typeof e.addNavigation == \"object\" && Object.assign(o, e.addNavigation), St([\n {\n selectors: t,\n handlers: o\n }\n ]);\n }\n return (o, a) => (x(), k(te, null, [\n y(\"tr\", et(o.$attrs, {\n ref: \"rowEl\",\n tabindex: e.tabIndex,\n class: \"expandable-row\"\n }), [\n y(\"td\", {\n tabIndex: -1,\n class: \"row-index\",\n onClick: a[0] || (a[0] = (s) => e.store.toggleRowExpand(e.rowIndex))\n }, W(n.value), 1),\n oe(o.$slots, \"row\", {}, void 0, !0)\n ], 16, co),\n e.store.display[e.rowIndex].expanded ? (x(), k(\"tr\", {\n key: 0,\n ref: \"rowExpanded\",\n tabindex: e.tabIndex,\n class: \"expanded-row\"\n }, [\n y(\"td\", {\n tabIndex: -1,\n colspan: e.store.columns.length + 1,\n class: \"expanded-row-content\"\n }, [\n oe(o.$slots, \"content\", {}, void 0, !0)\n ], 8, vo)\n ], 8, fo)) : K(\"\", !0)\n ], 64));\n }\n}), Ie = (e, t) => {\n const n = e.__vccOpts || e;\n for (const [o, a] of t)\n n[o] = a;\n return n;\n}, po = /* @__PURE__ */ Ie(mo, [[\"__scopeId\", \"data-v-a42297c7\"]]), ho = [\"colspan\"], go = {\n ref: \"container\",\n class: \"gantt-container\"\n}, yo = [\"data-rowindex\", \"data-colindex\"], wo = {\n key: 2,\n class: \"gantt-label\"\n}, xo = [\"x1\", \"y1\", \"x2\", \"y2\"], bo = /* @__PURE__ */ j({\n __name: \"AGanttCell\",\n props: {\n store: {},\n columnsCount: {},\n rowIndex: {},\n colIndex: {},\n start: { default: 0 },\n end: { default: 0 },\n colspan: { default: 1 },\n label: { default: \"\" },\n color: { default: \"#cccccc\" }\n },\n emits: [\"connection:create\"],\n setup(e, { expose: t, emit: n }) {\n xn((V) => ({\n v6d722296: a.value,\n v260b36f8: V.colspan\n }));\n const o = n, a = S(e.color.length >= 6 ? e.color : \"#cccccc\"), s = `gantt-bar-row-${e.rowIndex}-col-${e.colIndex}`, l = ne(\"container\"), r = ne(\"bar\"), i = ne(\"leftResizeHandle\"), u = ne(\"rightResizeHandle\"), c = ne(\"leftConnectionHandle\"), m = ne(\"rightConnectionHandle\"), { width: g } = ke(l), { left: p, right: D } = ke(r), w = S(e.start), f = S(e.end || w.value + e.colspan), h = S(!1), I = S(!1), E = S(!1), L = S(!1), z = S(!1), R = S({ startX: 0, startY: 0, endX: 0, endY: 0 }), C = M(() => Fe.value || le.value || we.value), O = M(() => e.colspan > 0 ? g.value / e.colspan : 0), q = M(() => {\n const V = w.value / e.colspan * 100, P = f.value / e.colspan * 100;\n return {\n left: `${V}%`,\n width: `${P - V}%`,\n backgroundColor: a.value\n };\n }), G = M(\n () => ({\n position: \"fixed\",\n top: 0,\n left: 0,\n width: \"100vw\",\n height: \"100vh\",\n pointerEvents: \"none\",\n zIndex: 1e3\n })\n ), F = S({ startX: 0, startPos: 0 }), { isDragging: le } = vt(i, {\n axis: \"x\",\n onStart: () => Ve(p.value, w.value),\n onMove: ({ x: V }) => rt(V),\n onEnd: ({ x: V }) => st(V)\n }), { isDragging: we } = vt(u, {\n axis: \"x\",\n onStart: () => Ve(D.value, f.value),\n onMove: ({ x: V }) => Ne(V),\n onEnd: ({ x: V }) => it(V)\n }), { isDragging: Fe } = vt(r, {\n exact: !0,\n axis: \"x\",\n onStart: () => Ve(p.value, w.value),\n onMove: ({ x: V }) => Be(V),\n onEnd: ({ x: V }) => ut(V)\n });\n ve(() => {\n ct();\n }), bn(() => {\n dt();\n });\n function Ve(V, P) {\n r.value && (r.value.style.transition = \"none\"), F.value = { startX: V, startPos: P };\n }\n function rt(V) {\n if (!le.value || !r.value) return;\n const P = (V - F.value.startX) / O.value, N = Math.max(0, Math.min(f.value - 1, F.value.startPos + P));\n r.value.style.left = `${N / e.colspan * 100}%`, r.value.style.width = `${(f.value - N) / e.colspan * 100}%`;\n }\n function st(V) {\n if (!r.value) return;\n const P = V - F.value.startX, N = Math.round(P / O.value), X = w.value, Q = Math.max(0, Math.min(f.value - 1, F.value.startPos + N));\n w.value = Q, e.store.updateGanttBar({\n rowIndex: e.rowIndex,\n colIndex: e.colIndex,\n type: \"resize\",\n edge: \"start\",\n oldStart: X,\n newStart: Q,\n end: f.value,\n delta: N,\n oldColspan: f.value - X,\n newColspan: f.value - Q\n });\n }\n function Ne(V) {\n if (!we.value || !r.value) return;\n const P = (V - F.value.startX) / O.value, N = Math.max(w.value + 1, Math.min(e.columnsCount, F.value.startPos + P));\n r.value.style.width = `${(N - w.value) / e.colspan * 100}%`;\n }\n function it(V) {\n if (!r.value) return;\n const P = V - F.value.startX, N = Math.round(P / O.value), X = f.value, Q = Math.max(w.value + 1, Math.min(e.columnsCount, F.value.startPos + N));\n f.value = Q, e.store.updateGanttBar({\n rowIndex: e.rowIndex,\n colIndex: e.colIndex,\n type: \"resize\",\n edge: \"end\",\n oldEnd: X,\n newEnd: Q,\n start: w.value,\n delta: N,\n oldColspan: X - w.value,\n newColspan: Q - w.value\n });\n }\n function Be(V) {\n if (!Fe.value || !r.value) return;\n const P = (V - F.value.startX) / O.value, N = f.value - w.value, X = Math.max(0, Math.min(F.value.startPos + P, e.columnsCount - N));\n r.value.style.left = `${X / e.colspan * 100}%`;\n }\n function ut(V) {\n if (!r.value) return;\n const P = V - F.value.startX, N = Math.round(P / O.value), X = f.value - w.value, Q = w.value, d = f.value;\n let v = F.value.startPos + N, b = v + X;\n v < 0 ? (v = 0, b = X) : b > e.columnsCount && (b = e.columnsCount, v = b - X), w.value = v, f.value = b, e.store.updateGanttBar({\n rowIndex: e.rowIndex,\n colIndex: e.colIndex,\n type: \"bar\",\n oldStart: Q,\n oldEnd: d,\n newStart: v,\n newEnd: b,\n delta: N,\n colspan: b - v\n });\n }\n function ct() {\n const { x: V, y: P } = ke(r), { x: N, y: X } = ke(c), { x: Q, y: d } = ke(m);\n e.store.registerGanttBar({\n id: s,\n rowIndex: e.rowIndex,\n colIndex: e.colIndex,\n startIndex: w,\n endIndex: f,\n color: a,\n label: e.label,\n position: { x: V, y: P }\n }), e.store.isDependencyGraphEnabled && (e.store.registerConnectionHandle({\n id: `${s}-connection-left`,\n rowIndex: e.rowIndex,\n colIndex: e.colIndex,\n side: \"left\",\n position: { x: N, y: X },\n visible: h,\n barId: s\n }), e.store.registerConnectionHandle({\n id: `${s}-connection-right`,\n rowIndex: e.rowIndex,\n colIndex: e.colIndex,\n side: \"right\",\n position: { x: Q, y: d },\n visible: I,\n barId: s\n }));\n }\n function dt() {\n e.store.unregisterGanttBar(s), e.store.isDependencyGraphEnabled && (e.store.unregisterConnectionHandle(`${s}-connection-left`), e.store.unregisterConnectionHandle(`${s}-connection-right`));\n }\n function ft() {\n e.store.isDependencyGraphEnabled && (h.value = !0, I.value = !0);\n }\n function Ge() {\n !E.value && !L.value && (h.value = !1, I.value = !1);\n }\n function Ue(V, P) {\n P.preventDefault(), P.stopPropagation(), z.value = !0, V === \"left\" ? E.value = !0 : L.value = !0;\n const N = V === \"left\" ? c.value : m.value;\n if (N) {\n const d = N.getBoundingClientRect(), v = d.left + d.width / 2, b = d.top + d.height / 2;\n R.value = { startX: v, startY: b, endX: v, endY: b };\n }\n const X = (d) => {\n R.value.endX = d.clientX, R.value.endY = d.clientY;\n }, Q = (d) => {\n ze(d, V), We(X, Q);\n };\n document.addEventListener(\"mousemove\", X), document.addEventListener(\"mouseup\", Q);\n }\n function ze(V, P) {\n const N = document.elementFromPoint(V.clientX, V.clientY)?.closest(\".connection-handle\");\n if (N && N !== (P === \"left\" ? c.value : m.value)) {\n const X = N.closest(\".gantt-bar\");\n if (X) {\n const Q = parseInt(X.getAttribute(\"data-rowindex\") || \"0\"), d = parseInt(X.getAttribute(\"data-colindex\") || \"0\"), v = N.classList.contains(\"left-connection-handle\") ? \"left\" : \"right\", b = `gantt-bar-row-${Q}-col-${d}`, H = e.store.createConnection(\n `${s}-connection-${P}`,\n `${b}-connection-${v}`\n );\n H && o(\"connection:create\", H);\n }\n }\n }\n function We(V, P) {\n z.value = !1, E.value = !1, L.value = !1, document.removeEventListener(\"mousemove\", V), document.removeEventListener(\"mouseup\", P), r.value?.matches(\":hover\") || Ge();\n }\n return t({\n barStyle: q,\n cleanupConnectionDrag: We,\n currentEnd: f,\n handleConnectionDrop: ze,\n isLeftConnectionDragging: E,\n isLeftConnectionVisible: h,\n isRightConnectionDragging: L,\n isRightConnectionVisible: I,\n showDragPreview: z\n }), (V, P) => (x(), k(\"td\", {\n class: \"aganttcell\",\n colspan: e.colspan\n }, [\n y(\"div\", go, [\n y(\"div\", {\n ref: \"bar\",\n \"data-rowindex\": e.rowIndex,\n \"data-colindex\": e.colIndex,\n class: ee([\"gantt-bar\", { \"is-dragging\": C.value }]),\n style: ce(q.value),\n onMouseenter: ft,\n onMouseleave: Ge\n }, [\n e.store.isDependencyGraphEnabled ? (x(), k(\"div\", {\n key: 0,\n ref: \"leftConnectionHandle\",\n class: ee([\"connection-handle left-connection-handle\", { visible: h.value, \"is-dragging\": E.value }]),\n onMousedown: P[0] || (P[0] = $e((N) => Ue(\"left\", N), [\"stop\"]))\n }, [...P[2] || (P[2] = [\n y(\"div\", { class: \"connection-dot\" }, null, -1)\n ])], 34)) : K(\"\", !0),\n e.store.isDependencyGraphEnabled ? (x(), k(\"div\", {\n key: 1,\n ref: \"rightConnectionHandle\",\n class: ee([\"connection-handle right-connection-handle\", { visible: I.value, \"is-dragging\": L.value }]),\n onMousedown: P[1] || (P[1] = $e((N) => Ue(\"right\", N), [\"stop\"]))\n }, [...P[3] || (P[3] = [\n y(\"div\", { class: \"connection-dot\" }, null, -1)\n ])], 34)) : K(\"\", !0),\n y(\"div\", {\n ref: \"leftResizeHandle\",\n class: ee([\"resize-handle left-resize-handle\", { \"is-dragging\": $(le) }])\n }, [...P[4] || (P[4] = [\n y(\"div\", { class: \"handle-grip\" }, null, -1),\n y(\"div\", { class: \"vertical-indicator left-indicator\" }, null, -1)\n ])], 2),\n e.label ? (x(), k(\"label\", wo, W(e.label), 1)) : K(\"\", !0),\n y(\"div\", {\n ref: \"rightResizeHandle\",\n class: ee([\"resize-handle right-resize-handle\", { \"is-dragging\": $(we) }])\n }, [...P[5] || (P[5] = [\n y(\"div\", { class: \"handle-grip\" }, null, -1),\n y(\"div\", { class: \"vertical-indicator right-indicator\" }, null, -1)\n ])], 2)\n ], 46, yo)\n ], 512),\n e.store.isDependencyGraphEnabled && z.value ? (x(), k(\"svg\", {\n key: 0,\n style: ce(G.value)\n }, [\n y(\"line\", {\n x1: R.value.startX,\n y1: R.value.startY,\n x2: R.value.endX,\n y2: R.value.endY,\n stroke: \"#2196f3\",\n \"stroke-width\": \"2\",\n \"stroke-dasharray\": \"5,5\"\n }, null, 8, xo)\n ], 4)) : K(\"\", !0)\n ], 8, ho));\n }\n}), Io = /* @__PURE__ */ Ie(bo, [[\"__scopeId\", \"data-v-8917a8a3\"]]), ko = [\"tabindex\"], Co = /* @__PURE__ */ j({\n __name: \"ARow\",\n props: {\n rowIndex: {},\n store: {},\n tabIndex: { default: () => -1 },\n addNavigation: { type: [Boolean, Object], default: !1 }\n },\n setup(e) {\n const t = ne(\"rowEl\"), n = M(() => e.store.isRowVisible(e.rowIndex)), o = M(() => e.store.getRowExpandSymbol(e.rowIndex));\n if (e.addNavigation) {\n let a = at;\n typeof e.addNavigation == \"object\" && (a = {\n ...a,\n ...e.addNavigation\n }), St([\n {\n selectors: t,\n handlers: a\n }\n ]);\n }\n return (a, s) => U((x(), k(\"tr\", {\n ref: \"rowEl\",\n tabindex: e.tabIndex,\n class: \"atable-row\"\n }, [\n e.store.config.view !== \"uncounted\" ? oe(a.$slots, \"index\", { key: 0 }, () => [\n e.store.config.view === \"list\" ? (x(), k(\"td\", {\n key: 0,\n tabIndex: -1,\n class: ee([\"list-index\", e.store.hasPinnedColumns ? \"sticky-index\" : \"\"])\n }, W(e.rowIndex + 1), 3)) : e.store.isTreeView ? (x(), k(\"td\", {\n key: 1,\n tabIndex: -1,\n class: ee([\"tree-index\", e.store.hasPinnedColumns ? \"sticky-index\" : \"\"]),\n onClick: s[0] || (s[0] = (l) => e.store.toggleRowExpand(e.rowIndex))\n }, W(o.value), 3)) : K(\"\", !0)\n ], !0) : K(\"\", !0),\n oe(a.$slots, \"default\", {}, void 0, !0)\n ], 8, ko)), [\n [be, n.value]\n ]);\n }\n}), dn = /* @__PURE__ */ Ie(Co, [[\"__scopeId\", \"data-v-0fa91f83\"]]), ht = /* @__PURE__ */ new WeakMap(), Eo = {\n mounted(e, t) {\n const n = !t.modifiers.bubble;\n let o;\n if (typeof t.value == \"function\") o = zt(e, t.value, { capture: n });\n else {\n const [a, s] = t.value;\n o = zt(e, a, Object.assign({ capture: n }, s));\n }\n ht.set(e, o);\n },\n unmounted(e) {\n const t = ht.get(e);\n t && typeof t == \"function\" ? t() : t?.stop(), ht.delete(e);\n }\n}, Do = { mounted(e, t) {\n typeof t.value == \"function\" ? kt(e, t.value) : kt(e, ...t.value);\n} };\nfunction To() {\n let e = !1;\n const t = J(!1);\n return (n, o) => {\n if (t.value = o.value, e) return;\n e = !0;\n const a = oo(n, o.value);\n Y(t, (s) => a.value = s);\n };\n}\nTo();\nconst Ao = { class: \"gantt-connection-overlay\" }, $o = {\n class: \"connection-svg\",\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n zIndex: 1\n }\n}, Mo = [\"d\", \"stroke-width\", \"onDblclick\"], So = [\"id\", \"d\", \"stroke\", \"stroke-width\", \"onDblclick\"], Lo = 0.25, qe = 16, Ro = /* @__PURE__ */ j({\n __name: \"AGanttConnection\",\n props: {\n store: {}\n },\n emits: [\"connection:delete\"],\n setup(e, { emit: t }) {\n const n = t, o = M(() => e.store.connectionPaths.filter((l) => {\n const r = e.store.ganttBars.find((u) => u.id === l.from.barId), i = e.store.ganttBars.find((u) => u.id === l.to.barId);\n return r && i;\n })), a = (l) => {\n const r = e.store.connectionHandles.find(\n (C) => C.barId === l.from.barId && C.side === l.from.side\n ), i = e.store.connectionHandles.find(\n (C) => C.barId === l.to.barId && C.side === l.to.side\n );\n if (!r || !i) return \"\";\n const u = r.position.x + qe / 2, c = r.position.y + qe / 2, m = i.position.x + qe / 2, g = i.position.y + qe / 2, p = Math.abs(m - u), D = Math.max(p * Lo, 50), w = u + (l.from.side === \"left\" ? -D : D), f = m + (l.to.side === \"left\" ? -D : D), h = { x: 0.5 * u + 0.5 * w, y: 0.5 * c + 0.5 * c }, I = { x: 0.5 * w + 0.5 * f, y: 0.5 * c + 0.5 * g }, E = { x: 0.5 * f + 0.5 * m, y: 0.5 * g + 0.5 * g }, L = { x: 0.5 * h.x + 0.5 * I.x, y: 0.5 * h.y + 0.5 * I.y }, z = { x: 0.5 * I.x + 0.5 * E.x, y: 0.5 * I.y + 0.5 * E.y }, R = { x: 0.5 * L.x + 0.5 * z.x, y: 0.5 * L.y + 0.5 * z.y };\n return `M ${u} ${c} Q ${w} ${c}, ${R.x} ${R.y} Q ${f} ${g}, ${m} ${g}`;\n }, s = (l) => {\n e.store.deleteConnection(l.id) && n(\"connection:delete\", l);\n };\n return (l, r) => (x(), k(\"div\", Ao, [\n (x(), k(\"svg\", $o, [\n r[0] || (r[0] = y(\"defs\", null, [\n y(\"path\", {\n id: \"arrowhead\",\n d: \"M 0 -7 L 20 0 L 0 7Z\",\n stroke: \"black\",\n \"stroke-width\": \"1\",\n fill: \"currentColor\"\n }),\n y(\"marker\", {\n id: \"arrowhead-marker\",\n markerWidth: \"10\",\n markerHeight: \"7\",\n refX: \"5\",\n refY: \"3.5\",\n orient: \"auto\",\n markerUnits: \"strokeWidth\"\n }, [\n y(\"polygon\", {\n points: \"0 0, 10 3.5, 0 7\",\n fill: \"currentColor\"\n })\n ])\n ], -1)),\n (x(!0), k(te, null, ae(o.value, (i) => (x(), k(\"path\", {\n key: `${i.id}-hitbox`,\n d: a(i),\n stroke: \"transparent\",\n \"stroke-width\": (i.style?.width || 2) + 10,\n fill: \"none\",\n class: \"connection-hitbox\",\n onDblclick: (u) => s(i)\n }, null, 40, Mo))), 128)),\n (x(!0), k(te, null, ae(o.value, (i) => (x(), k(\"path\", {\n id: i.id,\n key: i.id,\n d: a(i),\n stroke: i.style?.color || \"#666\",\n \"stroke-width\": i.style?.width || 2,\n fill: \"none\",\n \"marker-mid\": \"url(#arrowhead-marker)\",\n class: \"connection-path animated-path\",\n onDblclick: (u) => s(i)\n }, null, 40, So))), 128))\n ]))\n ]));\n }\n}), Vo = /* @__PURE__ */ Ie(Ro, [[\"__scopeId\", \"data-v-71911260\"]]), Po = { class: \"column-filter\" }, Oo = {\n key: 2,\n class: \"checkbox-filter\"\n}, _o = [\"value\"], Ho = {\n key: 5,\n class: \"date-range-filter\"\n}, Fo = /* @__PURE__ */ j({\n __name: \"ATableColumnFilter\",\n props: {\n column: {},\n colIndex: {},\n store: {}\n },\n setup(e) {\n const t = S(\"\"), n = nn({\n startValue: \"\",\n endValue: \"\"\n }), o = (i) => {\n if (i.filterOptions) return i.filterOptions;\n const u = /* @__PURE__ */ new Set();\n return e.store.rows.forEach((c) => {\n const m = c[i.name];\n m != null && m !== \"\" && u.add(m);\n }), Array.from(u).map((c) => ({\n value: c,\n label: String(c)\n }));\n }, a = M(() => !!(t.value || n.startValue || n.endValue)), s = (i) => {\n !i && e.column.filterType !== \"checkbox\" ? (e.store.clearFilter(e.colIndex), t.value = \"\") : (t.value = i, e.store.setFilter(e.colIndex, { value: i }));\n }, l = (i, u) => {\n i === \"start\" ? n.startValue = u : n.endValue = u, !n.startValue && !n.endValue ? e.store.clearFilter(e.colIndex) : e.store.setFilter(e.colIndex, {\n value: null,\n startValue: n.startValue,\n endValue: n.endValue\n });\n }, r = () => {\n t.value = \"\", n.startValue = \"\", n.endValue = \"\", e.store.clearFilter(e.colIndex);\n };\n return (i, u) => (x(), k(\"div\", Po, [\n (e.column.filterType || \"text\") === \"text\" ? U((x(), k(\"input\", {\n key: 0,\n \"onUpdate:modelValue\": u[0] || (u[0] = (c) => t.value = c),\n type: \"text\",\n class: \"filter-input\",\n onInput: u[1] || (u[1] = (c) => s(t.value))\n }, null, 544)), [\n [se, t.value]\n ]) : e.column.filterType === \"number\" ? U((x(), k(\"input\", {\n key: 1,\n \"onUpdate:modelValue\": u[2] || (u[2] = (c) => t.value = c),\n type: \"number\",\n class: \"filter-input\",\n onInput: u[3] || (u[3] = (c) => s(t.value))\n }, null, 544)), [\n [se, t.value]\n ]) : e.column.filterType === \"checkbox\" ? (x(), k(\"label\", Oo, [\n U(y(\"input\", {\n \"onUpdate:modelValue\": u[4] || (u[4] = (c) => t.value = c),\n type: \"checkbox\",\n class: \"filter-checkbox\",\n onChange: u[5] || (u[5] = (c) => s(t.value))\n }, null, 544), [\n [on, t.value]\n ]),\n y(\"span\", null, W(e.column.label), 1)\n ])) : e.column.filterType === \"select\" ? U((x(), k(\"select\", {\n key: 3,\n \"onUpdate:modelValue\": u[6] || (u[6] = (c) => t.value = c),\n class: \"filter-select\",\n onChange: u[7] || (u[7] = (c) => s(t.value))\n }, [\n u[15] || (u[15] = y(\"option\", { value: \"\" }, \"All\", -1)),\n (x(!0), k(te, null, ae(o(e.column), (c) => (x(), k(\"option\", {\n key: c.value || c,\n value: c.value || c\n }, W(c.label || c), 9, _o))), 128))\n ], 544)), [\n [In, t.value]\n ]) : e.column.filterType === \"date\" ? U((x(), k(\"input\", {\n key: 4,\n \"onUpdate:modelValue\": u[8] || (u[8] = (c) => t.value = c),\n type: \"date\",\n class: \"filter-input\",\n onChange: u[9] || (u[9] = (c) => s(t.value))\n }, null, 544)), [\n [se, t.value]\n ]) : e.column.filterType === \"dateRange\" ? (x(), k(\"div\", Ho, [\n U(y(\"input\", {\n \"onUpdate:modelValue\": u[10] || (u[10] = (c) => n.startValue = c),\n type: \"date\",\n class: \"filter-input\",\n onChange: u[11] || (u[11] = (c) => l(\"start\", n.startValue))\n }, null, 544), [\n [se, n.startValue]\n ]),\n u[16] || (u[16] = y(\"span\", { class: \"date-separator\" }, \"-\", -1)),\n U(y(\"input\", {\n \"onUpdate:modelValue\": u[12] || (u[12] = (c) => n.endValue = c),\n type: \"date\",\n class: \"filter-input\",\n onChange: u[13] || (u[13] = (c) => l(\"end\", n.endValue))\n }, null, 544), [\n [se, n.endValue]\n ])\n ])) : e.column.filterType === \"component\" && e.column.filterComponent ? (x(), re(Ae(e.column.filterComponent), {\n key: 6,\n value: t.value,\n column: e.column,\n colIndex: e.colIndex,\n store: e.store,\n \"onUpdate:value\": u[14] || (u[14] = (c) => s(c))\n }, null, 40, [\"value\", \"column\", \"colIndex\", \"store\"])) : K(\"\", !0),\n a.value ? (x(), k(\"button\", {\n key: 7,\n onClick: r,\n class: \"clear-btn\",\n title: \"Clear\"\n }, \"×\")) : K(\"\", !0)\n ]));\n }\n}), No = /* @__PURE__ */ Ie(Fo, [[\"__scopeId\", \"data-v-8487462d\"]]), Bo = { key: 0 }, Go = {\n class: \"atable-header-row\",\n tabindex: \"-1\"\n}, Uo = [\"data-colindex\", \"onClick\"], zo = {\n key: 0,\n class: \"atable-filters-row\"\n}, fn = /* @__PURE__ */ j({\n __name: \"ATableHeader\",\n props: {\n columns: {},\n store: {}\n },\n setup(e) {\n const t = M(() => e.columns.filter((a) => a.filterable)), n = (a) => e.store.sortByColumn(a), o = (a) => {\n for (const s of a) {\n if (s.borderBoxSize.length === 0) continue;\n const l = s.borderBoxSize[0].inlineSize, r = Number(s.target.dataset.colindex), i = e.store.columns[r]?.width;\n typeof i == \"number\" && i !== l && e.store.resizeColumn(r, l);\n }\n };\n return (a, s) => e.columns.length ? (x(), k(\"thead\", Bo, [\n y(\"tr\", Go, [\n e.store.zeroColumn ? (x(), k(\"th\", {\n key: 0,\n id: \"header-index\",\n class: ee([[\n e.store.hasPinnedColumns ? \"sticky-index\" : \"\",\n e.store.isTreeView ? \"tree-index\" : \"\",\n e.store.config.view === \"list-expansion\" ? \"list-expansion-index\" : \"\"\n ], \"list-index\"])\n }, null, 2)) : K(\"\", !0),\n (x(!0), k(te, null, ae(e.columns, (l, r) => U((x(), k(\"th\", {\n key: l.name,\n \"data-colindex\": r,\n tabindex: \"-1\",\n style: ce(e.store.getHeaderCellStyle(l)),\n class: ee(`${l.pinned ? \"sticky-column\" : \"\"} ${l.sortable === !1 ? \"\" : \"cursor-pointer\"}`),\n onClick: (i) => l.sortable !== !1 ? n(r) : void 0\n }, [\n oe(a.$slots, \"default\", {}, () => [\n Ct(W(l.label || String.fromCharCode(r + 97).toUpperCase()), 1)\n ])\n ], 14, Uo)), [\n [$(Do), o]\n ])), 128))\n ]),\n t.value.length > 0 ? (x(), k(\"tr\", zo, [\n e.store.zeroColumn ? (x(), k(\"th\", {\n key: 0,\n class: ee([[\n e.store.hasPinnedColumns ? \"sticky-index\" : \"\",\n e.store.isTreeView ? \"tree-index\" : \"\",\n e.store.config.view === \"list-expansion\" ? \"list-expansion-index\" : \"\"\n ], \"list-index\"])\n }, null, 2)) : K(\"\", !0),\n (x(!0), k(te, null, ae(e.columns, (l, r) => (x(), k(\"th\", {\n key: `filter-${l.name}`,\n class: ee(`${l.pinned ? \"sticky-column\" : \"\"}`),\n style: ce(e.store.getHeaderCellStyle(l))\n }, [\n l.filterable ? (x(), re(No, {\n key: 0,\n column: l,\n \"col-index\": r,\n store: e.store\n }, null, 8, [\"column\", \"col-index\", \"store\"])) : K(\"\", !0)\n ], 6))), 128))\n ])) : K(\"\", !0)\n ])) : K(\"\", !0);\n }\n}), vn = /* @__PURE__ */ j({\n __name: \"ATableModal\",\n props: {\n store: {}\n },\n setup(e) {\n const t = ne(\"amodal\"), { width: n, height: o } = ke(t), a = M(() => {\n if (!(e.store.modal.height && e.store.modal.width && e.store.modal.left && e.store.modal.bottom)) return;\n const s = e.store.modal.cell?.closest(\"table\");\n if (!s) return {};\n const l = s.offsetHeight || 0, r = s.offsetWidth || 0;\n let i = e.store.modal.cell?.offsetTop || 0;\n const u = s.querySelector(\"thead\")?.offsetHeight || 0;\n i += u, i = i + o.value < l ? i : i - (o.value + e.store.modal.height);\n let c = e.store.modal.cell?.offsetLeft || 0;\n return c = c + n.value <= r ? c : c - (n.value - e.store.modal.width), {\n left: `${c}px`,\n top: `${i}px`\n };\n });\n return (s, l) => (x(), k(\"div\", {\n ref: \"amodal\",\n class: \"amodal\",\n tabindex: \"-1\",\n style: ce(a.value),\n onClick: l[0] || (l[0] = $e(() => {\n }, [\"stop\"])),\n onInput: l[1] || (l[1] = $e(() => {\n }, [\"stop\"]))\n }, [\n oe(s.$slots, \"default\")\n ], 36));\n }\n}), Wo = (e) => {\n const t = e.id || ao();\n return En(`table-${t}`, () => {\n const n = () => {\n const d = [Object.assign({}, { rowModified: !1 })], v = /* @__PURE__ */ new Set();\n for (let A = 0; A < a.value.length; A++) {\n const _ = a.value[A];\n _.parent !== null && _.parent !== void 0 && v.add(_.parent);\n }\n const b = (A) => a.value[A]?.gantt !== void 0, H = (A) => {\n for (let _ = 0; _ < a.value.length; _++)\n if (a.value[_].parent === A && (b(_) || H(_)))\n return !0;\n return !1;\n }, B = (A) => {\n const _ = s.value, Z = _.view === \"tree\" || _.view === \"tree-gantt\" ? _.defaultTreeExpansion : void 0;\n if (!Z) return !0;\n switch (Z) {\n case \"root\":\n return !1;\n // Only root nodes are visible, all children start collapsed\n case \"branch\":\n return H(A);\n case \"leaf\":\n return !0;\n // All nodes should be expanded\n default:\n return !0;\n }\n };\n for (let A = 0; A < a.value.length; A++) {\n const _ = a.value[A], Z = _.parent === null || _.parent === void 0, ie = v.has(A);\n d[A] = {\n childrenOpen: B(A),\n expanded: !1,\n indent: _.indent || 0,\n isParent: ie,\n isRoot: Z,\n rowModified: !1,\n open: Z,\n // This will be recalculated later for non-root nodes\n parent: _.parent\n };\n }\n return d;\n }, o = S(e.columns), a = S(e.rows), s = S(e.config || {}), l = S({}), r = S({}), i = M(() => {\n const d = {};\n for (const [v, b] of o.value.entries())\n for (const [H, B] of a.value.entries())\n d[`${v}:${H}`] = B[b.name];\n return d;\n }), u = M({\n get: () => {\n const d = n();\n for (let v = 0; v < d.length; v++)\n l.value[v] && (d[v].rowModified = l.value[v]), r.value[v] && (r.value[v].childrenOpen !== void 0 && (d[v].childrenOpen = r.value[v].childrenOpen), r.value[v].expanded !== void 0 && (d[v].expanded = r.value[v].expanded));\n if (E.value) {\n const v = (b, H) => {\n const B = H[b];\n if (B.isRoot || B.parent === null || B.parent === void 0)\n return !0;\n const A = B.parent;\n return A < 0 || A >= H.length ? !1 : (H[A].childrenOpen || !1) && v(A, H);\n };\n for (let b = 0; b < d.length; b++)\n d[b].isRoot || (d[b].open = v(b, d));\n }\n return d;\n },\n set: (d) => {\n JSON.stringify(d) !== JSON.stringify(u.value) && (u.value = d);\n }\n }), c = S(e.modal || { visible: !1 }), m = S({}), g = S([]), p = S([]), D = S([]), w = S({\n column: null,\n direction: null\n }), f = S({}), h = M(() => o.value.some((d) => d.pinned)), I = M(() => s.value.view === \"gantt\" || s.value.view === \"tree-gantt\"), E = M(() => s.value.view === \"tree\" || s.value.view === \"tree-gantt\"), L = M(() => {\n const d = s.value;\n return d.view === \"gantt\" || d.view === \"tree-gantt\" ? d.dependencyGraph !== !1 : !0;\n }), z = M(() => `${Math.ceil(a.value.length / 100 + 1)}ch`), R = M(\n () => s.value.view ? [\"list\", \"tree\", \"tree-gantt\", \"list-expansion\"].includes(s.value.view) : !1\n ), C = M(() => {\n let d = a.value.map((v, b) => ({\n ...v,\n originalIndex: b\n }));\n if (Object.entries(f.value).forEach(([v, b]) => {\n const H = parseInt(v), B = o.value[H];\n !B || !(b.value || b.startValue || b.endValue || B.filterType === \"checkbox\" && b.value !== void 0) || (d = d.filter((A) => {\n const _ = A[B.name];\n return Q(_, b, B);\n }));\n }), w.value.column !== null && w.value.direction) {\n const v = o.value[w.value.column], b = w.value.direction;\n d.sort((H, B) => {\n let A = H[v.name], _ = B[v.name];\n A == null && (A = \"\"), _ == null && (_ = \"\");\n const Z = Number(A), ie = Number(_);\n if (!isNaN(Z) && !isNaN(ie) && A !== \"\" && _ !== \"\")\n return b === \"asc\" ? Z - ie : ie - Z;\n {\n const Xe = String(A).toLowerCase(), _t = String(_).toLowerCase();\n return b === \"asc\" ? Xe.localeCompare(_t) : _t.localeCompare(Xe);\n }\n });\n }\n return d;\n }), O = (d, v) => i.value[`${d}:${v}`], q = (d, v, b) => {\n const H = `${d}:${v}`, B = o.value[d];\n i.value[H] !== b && (l.value[v] = !0), i.value[H] = b, a.value[v] = {\n ...a.value[v],\n [B.name]: b\n };\n }, G = (d) => {\n a.value = d;\n }, F = (d, v, b) => {\n const H = `${d}:${v}`;\n i.value[H] !== b && (l.value[v] = !0, m.value[H] = b);\n }, le = (d) => {\n const v = o.value.indexOf(d) === o.value.length - 1, b = s.value.fullWidth ? d.resizable && !v : d.resizable;\n return {\n width: d.width || \"40ch\",\n textAlign: d.align || \"center\",\n ...b && {\n resize: \"horizontal\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\"\n }\n };\n }, we = (d, v) => {\n if (d < 0 || d >= o.value.length) return;\n const b = Math.max(v, 40);\n o.value[d] = {\n ...o.value[d],\n width: `${b}px`\n };\n }, Fe = (d) => {\n const v = a.value[d];\n return I.value && v.gantt !== void 0;\n }, Ve = (d) => !E.value || u.value[d].isRoot || u.value[d].open, rt = (d) => !E.value && s.value.view !== \"list-expansion\" ? \"\" : E.value && (u.value[d].isRoot || u.value[d].isParent) ? u.value[d].childrenOpen ? \"▼\" : \"►\" : s.value.view === \"list-expansion\" ? u.value[d].expanded ? \"▼\" : \"►\" : \"\", st = (d) => {\n if (E.value) {\n const v = r.value[d] || {}, b = !(v.childrenOpen ?? u.value[d].childrenOpen);\n r.value[d] = {\n ...v,\n childrenOpen: b\n }, b || Ne(d);\n } else if (s.value.view === \"list-expansion\") {\n const v = r.value[d] || {}, b = v.expanded ?? u.value[d].expanded;\n r.value[d] = {\n ...v,\n expanded: !b\n };\n }\n }, Ne = (d) => {\n for (let v = 0; v < a.value.length; v++)\n if (u.value[v].parent === d) {\n const b = r.value[v] || {};\n r.value[v] = {\n ...b,\n childrenOpen: !1\n }, Ne(v);\n }\n }, it = (d, v) => {\n const b = O(d, v);\n return Be(d, v, b);\n }, Be = (d, v, b) => {\n const H = o.value[d], B = a.value[v], A = H.format;\n return A ? typeof A == \"function\" ? A(b, { table: i.value, row: B, column: H }) : typeof A == \"string\" ? Function(`\"use strict\";return (${A})`)()(b, { table: i.value, row: B, column: H }) : b : b;\n }, ut = (d) => {\n d.target instanceof Node && c.value.parent?.contains(d.target) || c.value.visible && (c.value.visible = !1);\n }, ct = (d, v) => v && d === 0 && v > 0 ? `${v}ch` : \"inherit\", dt = (d) => {\n const v = a.value[d.rowIndex]?.gantt;\n v && (d.type === \"resize\" ? d.edge === \"start\" ? (v.startIndex = d.newStart, v.endIndex = d.end, v.colspan = v.endIndex - v.startIndex) : d.edge === \"end\" && (v.startIndex = d.start, v.endIndex = d.newEnd, v.colspan = v.endIndex - v.startIndex) : d.type === \"bar\" && (v.startIndex = d.newStart, v.endIndex = d.newEnd, v.colspan = v.endIndex - v.startIndex));\n }, ft = (d) => {\n const v = g.value.findIndex((b) => b.id === d.id);\n v >= 0 ? g.value[v] = d : g.value.push(d);\n }, Ge = (d) => {\n const v = g.value.findIndex((b) => b.id === d);\n v >= 0 && g.value.splice(v, 1);\n }, Ue = (d) => {\n const v = p.value.findIndex((b) => b.id === d.id);\n v >= 0 ? p.value[v] = d : p.value.push(d);\n }, ze = (d) => {\n const v = p.value.findIndex((b) => b.id === d);\n v >= 0 && p.value.splice(v, 1);\n }, We = (d, v, b) => {\n const H = p.value.find((_) => _.id === d), B = p.value.find((_) => _.id === v);\n if (!H || !B)\n return console.warn(\"Cannot create connection: handle not found\"), null;\n const A = {\n id: `connection-${d}-${v}`,\n from: {\n barId: H.barId,\n side: H.side\n },\n to: {\n barId: B.barId,\n side: B.side\n },\n style: b?.style,\n label: b?.label\n };\n return D.value.push(A), A;\n }, V = (d) => {\n const v = D.value.findIndex((b) => b.id === d);\n return v >= 0 ? (D.value.splice(v, 1), !0) : !1;\n }, P = (d) => D.value.filter((v) => v.from.barId === d || v.to.barId === d), N = (d) => p.value.filter((v) => v.barId === d), X = (d) => {\n if (o.value[d].sortable === !1) return;\n let v;\n w.value.column === d && w.value.direction === \"asc\" ? v = \"desc\" : v = \"asc\", w.value.column = d, w.value.direction = v;\n }, Q = (d, v, b) => {\n const H = b.filterType || \"text\", B = v.value;\n if (!B && H !== \"dateRange\" && H !== \"checkbox\") return !0;\n switch (H) {\n case \"text\": {\n let A = \"\";\n return typeof d == \"object\" && d !== null ? A = Object.values(d).join(\" \") : A = String(d || \"\"), A.toLowerCase().includes(String(B).toLowerCase());\n }\n case \"number\": {\n const A = Number(d), _ = Number(B);\n return !isNaN(A) && !isNaN(_) && A === _;\n }\n case \"select\":\n return d === B;\n case \"checkbox\":\n return B === !0 ? !!d : !0;\n case \"date\": {\n let A;\n if (typeof d == \"number\") {\n const Z = new Date(d), ie = (/* @__PURE__ */ new Date()).getFullYear();\n A = new Date(ie, Z.getMonth(), Z.getDate());\n } else\n A = new Date(String(d));\n const _ = new Date(String(B));\n return A.toDateString() === _.toDateString();\n }\n case \"dateRange\": {\n const A = v.startValue, _ = v.endValue;\n if (!A && !_) return !0;\n let Z;\n if (typeof d == \"number\") {\n const ie = new Date(d), Xe = (/* @__PURE__ */ new Date()).getFullYear();\n Z = new Date(Xe, ie.getMonth(), ie.getDate());\n } else\n Z = new Date(String(d));\n return !(A && Z < new Date(String(A)) || _ && Z > new Date(String(_)));\n }\n default:\n return !0;\n }\n };\n return {\n // state\n columns: o,\n config: s,\n connectionHandles: p,\n connectionPaths: D,\n display: u,\n filterState: f,\n ganttBars: g,\n modal: c,\n rows: a,\n sortState: w,\n table: i,\n updates: m,\n // getters\n filteredRows: C,\n hasPinnedColumns: h,\n isGanttView: I,\n isTreeView: E,\n isDependencyGraphEnabled: L,\n numberedRowWidth: z,\n zeroColumn: R,\n // actions\n clearFilter: (d) => {\n delete f.value[d];\n },\n closeModal: ut,\n createConnection: We,\n deleteConnection: V,\n getCellData: O,\n getCellDisplayValue: it,\n getConnectionsForBar: P,\n getFormattedValue: Be,\n getHandlesForBar: N,\n getHeaderCellStyle: le,\n getIndent: ct,\n getRowExpandSymbol: rt,\n isRowGantt: Fe,\n isRowVisible: Ve,\n registerConnectionHandle: Ue,\n registerGanttBar: ft,\n resizeColumn: we,\n setCellData: q,\n setCellText: F,\n setFilter: (d, v) => {\n !v.value && !v.startValue && !v.endValue ? delete f.value[d] : f.value[d] = v;\n },\n sortByColumn: X,\n toggleRowExpand: st,\n unregisterConnectionHandle: ze,\n unregisterGanttBar: Ge,\n updateGanttBar: dt,\n updateRows: G\n };\n })();\n}, Xo = {\n class: \"atable-container\",\n style: { position: \"relative\" }\n}, jo = /* @__PURE__ */ j({\n __name: \"ATable\",\n props: /* @__PURE__ */ de({\n id: { default: \"\" },\n config: { default: () => new Object() }\n }, {\n rows: { required: !0 },\n rowsModifiers: {},\n columns: { required: !0 },\n columnsModifiers: {}\n }),\n emits: /* @__PURE__ */ de([\"cellUpdate\", \"gantt:drag\", \"connection:event\", \"columns:update\"], [\"update:rows\", \"update:columns\"]),\n setup(e, { expose: t, emit: n }) {\n const o = fe(e, \"rows\"), a = fe(e, \"columns\"), s = n, l = ne(\"table\"), r = Wo({ columns: a.value, rows: o.value, id: e.id, config: e.config });\n r.$onAction(({ name: p, store: D, args: w, after: f }) => {\n if (p === \"setCellData\" || p === \"setCellText\") {\n const [h, I, E] = w, L = D.getCellData(h, I);\n f(() => {\n o.value = [...D.rows], s(\"cellUpdate\", { colIndex: h, rowIndex: I, newValue: E, oldValue: L });\n });\n } else if (p === \"updateGanttBar\") {\n const [h] = w;\n let I = !1;\n h.type === \"resize\" ? I = h.oldColspan !== h.newColspan : h.type === \"bar\" && (I = h.oldStart !== h.newStart || h.oldEnd !== h.newEnd), I && f(() => {\n s(\"gantt:drag\", h);\n });\n } else p === \"resizeColumn\" && f(() => {\n a.value = [...D.columns], s(\"columns:update\", [...D.columns]);\n });\n }), Y(\n () => o.value,\n (p) => {\n JSON.stringify(p) !== JSON.stringify(r.rows) && (r.rows = [...p]);\n },\n { deep: !0 }\n ), Y(\n a,\n (p) => {\n JSON.stringify(p) !== JSON.stringify(r.columns) && (r.columns = [...p], s(\"columns:update\", [...p]));\n },\n { deep: !0 }\n ), ve(() => {\n a.value.some((p) => p.pinned) && (u(), r.isTreeView && cn(l, u, { childList: !0, subtree: !0 }));\n });\n const i = M(() => r.columns.filter((p) => p.pinned).length), u = () => {\n const p = l.value, D = p?.rows[0], w = p?.rows[1], f = D ? Array.from(D.cells) : [];\n for (const [h, I] of f.entries()) {\n const E = w?.cells[h];\n E && (I.style.width = `${E.offsetWidth}px`);\n }\n for (const h of p?.rows || []) {\n let I = 0;\n const E = [];\n for (const L of h.cells)\n (L.classList.contains(\"sticky-column\") || L.classList.contains(\"sticky-index\")) && (L.style.left = `${I}px`, I += L.offsetWidth, E.push(L));\n E.length > 0 && E[E.length - 1].classList.add(\"sticky-column-edge\");\n }\n };\n window.addEventListener(\"keydown\", (p) => {\n if (p.key === \"Escape\" && r.modal.visible) {\n r.modal.visible = !1;\n const D = r.modal.parent;\n D && tt().then(() => {\n D.focus();\n });\n }\n });\n const c = (p) => {\n if (!p.gantt || i.value === 0)\n return r.columns;\n const D = [];\n for (let w = 0; w < i.value; w++) {\n const f = { ...r.columns[w] };\n f.originalIndex = w, D.push(f);\n }\n return D.push({\n ...r.columns[i.value],\n isGantt: !0,\n colspan: p.gantt?.colspan || r.columns.length - i.value,\n originalIndex: i.value,\n width: \"auto\"\n // TODO: refactor to API that can detect when data exists in a cell. Might have be custom and not generalizable\n }), D;\n }, m = (p) => {\n s(\"connection:event\", { type: \"create\", connection: p });\n }, g = (p) => {\n s(\"connection:event\", { type: \"delete\", connection: p });\n };\n return t({\n store: r,\n createConnection: r.createConnection,\n deleteConnection: r.deleteConnection,\n getConnectionsForBar: r.getConnectionsForBar,\n getHandlesForBar: r.getHandlesForBar\n }), (p, D) => (x(), k(\"div\", Xo, [\n U((x(), k(\"table\", {\n ref: \"table\",\n class: \"atable\",\n style: ce({\n width: $(r).config.fullWidth ? \"100%\" : \"auto\"\n })\n }, [\n oe(p.$slots, \"header\", { data: $(r) }, () => [\n Ze(fn, {\n columns: $(r).columns,\n store: $(r)\n }, null, 8, [\"columns\", \"store\"])\n ], !0),\n y(\"tbody\", null, [\n oe(p.$slots, \"body\", { data: $(r) }, () => [\n (x(!0), k(te, null, ae($(r).filteredRows, (w, f) => (x(), re(dn, {\n key: `${w.originalIndex}-${f}`,\n row: w,\n rowIndex: w.originalIndex,\n store: $(r)\n }, {\n default: It(() => [\n (x(!0), k(te, null, ae(c(w), (h, I) => (x(), k(te, {\n key: h.name\n }, [\n h.isGantt ? (x(), re(Ae(h.ganttComponent || \"AGanttCell\"), {\n key: 0,\n store: $(r),\n \"columns-count\": $(r).columns.length - i.value,\n color: w.gantt?.color,\n start: w.gantt?.startIndex,\n end: w.gantt?.endIndex,\n colspan: h.colspan,\n pinned: h.pinned,\n rowIndex: w.originalIndex,\n colIndex: h.originalIndex ?? I,\n style: ce({\n textAlign: h?.align || \"center\",\n minWidth: h?.width || \"40ch\",\n width: $(r).config.fullWidth ? \"auto\" : null\n }),\n \"onConnection:create\": m\n }, null, 40, [\"store\", \"columns-count\", \"color\", \"start\", \"end\", \"colspan\", \"pinned\", \"rowIndex\", \"colIndex\", \"style\"])) : (x(), re(Ae(h.cellComponent || \"ACell\"), {\n key: 1,\n store: $(r),\n pinned: h.pinned,\n rowIndex: w.originalIndex,\n colIndex: I,\n style: ce({\n textAlign: h?.align || \"center\",\n width: $(r).config.fullWidth ? \"auto\" : null\n }),\n spellcheck: \"false\"\n }, null, 8, [\"store\", \"pinned\", \"rowIndex\", \"colIndex\", \"style\"]))\n ], 64))), 128))\n ]),\n _: 2\n }, 1032, [\"row\", \"rowIndex\", \"store\"]))), 128))\n ], !0)\n ]),\n oe(p.$slots, \"footer\", { data: $(r) }, void 0, !0),\n oe(p.$slots, \"modal\", { data: $(r) }, () => [\n U(Ze(vn, { store: $(r) }, {\n default: It(() => [\n (x(), re(Ae($(r).modal.component), et({\n key: `${$(r).modal.rowIndex}:${$(r).modal.colIndex}`,\n \"col-index\": $(r).modal.colIndex,\n \"row-index\": $(r).modal.rowIndex,\n store: $(r)\n }, $(r).modal.componentProps), null, 16, [\"col-index\", \"row-index\", \"store\"]))\n ]),\n _: 1\n }, 8, [\"store\"]), [\n [be, $(r).modal.visible]\n ])\n ], !0)\n ], 4)), [\n [$(Eo), $(r).closeModal]\n ]),\n $(r).isGanttView && $(r).isDependencyGraphEnabled ? (x(), re(Vo, {\n key: 0,\n store: $(r),\n \"onConnection:delete\": g\n }, null, 8, [\"store\"])) : K(\"\", !0)\n ]));\n }\n}), qo = /* @__PURE__ */ Ie(jo, [[\"__scopeId\", \"data-v-c0a0032f\"]]), Yo = {}, Jo = { class: \"aloading\" }, Ko = { class: \"aloading-header\" };\nfunction Qo(e, t) {\n return x(), k(\"div\", Jo, [\n y(\"h2\", Ko, [\n oe(e.$slots, \"default\", {}, void 0, !0)\n ]),\n t[0] || (t[0] = y(\"div\", { class: \"aloading-bar\" }, null, -1))\n ]);\n}\nconst Zo = /* @__PURE__ */ Ie(Yo, [[\"render\", Qo], [\"__scopeId\", \"data-v-a930a25b\"]]), el = {}, tl = { class: \"aloading\" }, nl = { class: \"aloading-header\" };\nfunction ol(e, t) {\n return x(), k(\"div\", tl, [\n y(\"h2\", nl, [\n oe(e.$slots, \"default\", {}, void 0, !0)\n ]),\n t[0] || (t[0] = y(\"div\", { class: \"aloading-bar\" }, null, -1))\n ]);\n}\nconst ll = /* @__PURE__ */ Ie(el, [[\"render\", ol], [\"__scopeId\", \"data-v-e1165876\"]]);\nfunction al(e) {\n e.component(\"ACell\", uo), e.component(\"AExpansionRow\", po), e.component(\"AGanttCell\", Io), e.component(\"ARow\", dn), e.component(\"ATable\", qo), e.component(\"ATableHeader\", fn), e.component(\"ATableLoading\", Zo), e.component(\"ATableLoadingBar\", ll), e.component(\"ATableModal\", vn);\n}\nconst rl = { class: \"aform_form-element\" }, sl = [\"for\"], il = { class: \"aform_checkbox-container aform_input-field\" }, ul = [\"id\", \"readonly\", \"required\"], cl = [\"innerHTML\"], dl = /* @__PURE__ */ j({\n __name: \"ACheckbox\",\n props: /* @__PURE__ */ de({\n schema: {},\n label: {},\n mask: {},\n required: { type: Boolean },\n readOnly: { type: Boolean },\n uuid: {},\n validation: { default: () => ({ errorMessage: \" \" }) }\n }, {\n modelValue: {},\n modelModifiers: {}\n }),\n emits: [\"update:modelValue\"],\n setup(e) {\n const t = fe(e, \"modelValue\");\n return (n, o) => (x(), k(\"div\", rl, [\n y(\"label\", {\n class: \"aform_field-label\",\n for: e.uuid\n }, W(e.label), 9, sl),\n y(\"span\", il, [\n U(y(\"input\", {\n id: e.uuid,\n \"onUpdate:modelValue\": o[0] || (o[0] = (a) => t.value = a),\n type: \"checkbox\",\n class: \"aform_checkbox\",\n readonly: e.readOnly,\n required: e.required\n }, null, 8, ul), [\n [on, t.value]\n ])\n ]),\n U(y(\"p\", {\n class: \"aform_error\",\n innerHTML: e.validation.errorMessage\n }, null, 8, cl), [\n [be, e.validation.errorMessage]\n ])\n ]));\n }\n}), he = (e, t) => {\n const n = e.__vccOpts || e;\n for (const [o, a] of t)\n n[o] = a;\n return n;\n}, fl = /* @__PURE__ */ he(dl, [[\"__scopeId\", \"data-v-f13fd4d6\"]]), vl = /* @__PURE__ */ j({\n __name: \"AComboBox\",\n props: [\"event\", \"cellData\", \"tableID\"],\n setup(e) {\n return (t, n) => {\n const o = an(\"ATableModal\");\n return x(), re(o, {\n event: e.event,\n \"cell-data\": e.cellData,\n class: \"amodal\"\n }, {\n default: It(() => [...n[0] || (n[0] = [\n y(\"div\", null, [\n y(\"input\", { type: \"text\" }),\n y(\"input\", { type: \"text\" }),\n y(\"input\", { type: \"text\" })\n ], -1)\n ])]),\n _: 1\n }, 8, [\"event\", \"cell-data\"]);\n };\n }\n}), ml = [\"id\", \"disabled\", \"required\"], pl = [\"for\"], hl = [\"innerHTML\"], gl = /* @__PURE__ */ j({\n __name: \"ADate\",\n props: /* @__PURE__ */ de({\n schema: {},\n label: { default: \"Date\" },\n mask: {},\n required: { type: Boolean },\n readOnly: { type: Boolean },\n uuid: {},\n validation: { default: () => ({ errorMessage: \" \" }) }\n }, {\n modelValue: {\n // format the date to be compatible with the native input datepicker\n },\n modelModifiers: {}\n }),\n emits: [\"update:modelValue\"],\n setup(e) {\n const t = fe(e, \"modelValue\", {\n // format the date to be compatible with the native input datepicker\n set: (a) => new Date(a).toISOString().split(\"T\")[0]\n }), n = ne(\"date\"), o = () => {\n n.value && \"showPicker\" in HTMLInputElement.prototype && n.value.showPicker();\n };\n return (a, s) => (x(), k(\"div\", null, [\n U(y(\"input\", {\n id: e.uuid,\n ref: \"date\",\n \"onUpdate:modelValue\": s[0] || (s[0] = (l) => t.value = l),\n type: \"date\",\n disabled: e.readOnly,\n required: e.required,\n onClick: o\n }, null, 8, ml), [\n [se, t.value]\n ]),\n y(\"label\", { for: e.uuid }, W(e.label), 9, pl),\n U(y(\"p\", {\n innerHTML: e.validation.errorMessage\n }, null, 8, hl), [\n [be, e.validation.errorMessage]\n ])\n ]));\n }\n}), yl = /* @__PURE__ */ he(gl, [[\"__scopeId\", \"data-v-a15ed922\"]]);\nfunction mn(e, t) {\n return nt() ? (ot(e, t), !0) : !1;\n}\n// @__NO_SIDE_EFFECTS__\nfunction Wt() {\n const e = /* @__PURE__ */ new Set(), t = (s) => {\n e.delete(s);\n };\n return {\n on: (s) => {\n e.add(s);\n const l = () => t(s);\n return mn(l), { off: l };\n },\n off: t,\n trigger: (...s) => Promise.all(Array.from(e).map((l) => l(...s))),\n clear: () => {\n e.clear();\n }\n };\n}\nconst pn = typeof window < \"u\" && typeof document < \"u\";\ntypeof WorkerGlobalScope < \"u\" && globalThis instanceof WorkerGlobalScope;\nconst wl = Object.prototype.toString, xl = (e) => wl.call(e) === \"[object Object]\", Pe = () => {\n}, bl = (e, t) => Object.prototype.hasOwnProperty.call(e, t);\nfunction Il(...e) {\n if (e.length !== 1) return ln(...e);\n const t = e[0];\n return typeof t == \"function\" ? Dt(Et(() => ({\n get: t,\n set: Pe\n }))) : S(t);\n}\nfunction gt(e) {\n return Array.isArray(e) ? e : [e];\n}\nfunction kl(e, t, n) {\n return Y(e, t, {\n ...n,\n immediate: !0\n });\n}\nconst hn = pn ? window : void 0, Cl = pn ? window.document : void 0;\nfunction Te(e) {\n var t;\n const n = T(e);\n return (t = n?.$el) !== null && t !== void 0 ? t : n;\n}\nfunction yt(...e) {\n const t = (o, a, s, l) => (o.addEventListener(a, s, l), () => o.removeEventListener(a, s, l)), n = M(() => {\n const o = gt(T(e[0])).filter((a) => a != null);\n return o.every((a) => typeof a != \"string\") ? o : void 0;\n });\n return kl(() => {\n var o, a;\n return [\n (o = (a = n.value) === null || a === void 0 ? void 0 : a.map((s) => Te(s))) !== null && o !== void 0 ? o : [hn].filter((s) => s != null),\n gt(T(n.value ? e[1] : e[0])),\n gt($(n.value ? e[2] : e[1])),\n T(n.value ? e[3] : e[2])\n ];\n }, ([o, a, s, l], r, i) => {\n if (!o?.length || !a?.length || !s?.length) return;\n const u = xl(l) ? { ...l } : l, c = o.flatMap((m) => a.flatMap((g) => s.map((p) => t(m, g, p, u))));\n i(() => {\n c.forEach((m) => m());\n });\n }, { flush: \"post\" });\n}\nfunction Xt(e, t, n = {}) {\n const { window: o = hn, ignore: a = [], capture: s = !0, detectIframe: l = !1, controls: r = !1 } = n;\n if (!o) return r ? {\n stop: Pe,\n cancel: Pe,\n trigger: Pe\n } : Pe;\n let i = !0;\n const u = (f) => T(a).some((h) => {\n if (typeof h == \"string\") return Array.from(o.document.querySelectorAll(h)).some((I) => I === f.target || f.composedPath().includes(I));\n {\n const I = Te(h);\n return I && (f.target === I || f.composedPath().includes(I));\n }\n });\n function c(f) {\n const h = T(f);\n return h && h.$.subTree.shapeFlag === 16;\n }\n function m(f, h) {\n const I = T(f), E = I.$.subTree && I.$.subTree.children;\n return E == null || !Array.isArray(E) ? !1 : E.some((L) => L.el === h.target || h.composedPath().includes(L.el));\n }\n const g = (f) => {\n const h = Te(e);\n if (f.target != null && !(!(h instanceof Element) && c(e) && m(e, f)) && !(!h || h === f.target || f.composedPath().includes(h))) {\n if (\"detail\" in f && f.detail === 0 && (i = !u(f)), !i) {\n i = !0;\n return;\n }\n t(f);\n }\n };\n let p = !1;\n const D = [\n yt(o, \"click\", (f) => {\n p || (p = !0, setTimeout(() => {\n p = !1;\n }, 0), g(f));\n }, {\n passive: !0,\n capture: s\n }),\n yt(o, \"pointerdown\", (f) => {\n const h = Te(e);\n i = !u(f) && !!(h && !f.composedPath().includes(h));\n }, { passive: !0 }),\n l && yt(o, \"blur\", (f) => {\n setTimeout(() => {\n var h;\n const I = Te(e);\n ((h = o.document.activeElement) === null || h === void 0 ? void 0 : h.tagName) === \"IFRAME\" && !I?.contains(o.document.activeElement) && t(f);\n }, 0);\n }, { passive: !0 })\n ].filter(Boolean), w = () => D.forEach((f) => f());\n return r ? {\n stop: w,\n cancel: () => {\n i = !1;\n },\n trigger: (f) => {\n i = !0, g(f), i = !1;\n }\n } : w;\n}\nconst El = {\n multiple: !0,\n accept: \"*\",\n reset: !1,\n directory: !1\n};\nfunction Dl(e) {\n if (!e) return null;\n if (e instanceof FileList) return e;\n const t = new DataTransfer();\n for (const n of e) t.items.add(n);\n return t.files;\n}\nfunction Tl(e = {}) {\n const { document: t = Cl } = e, n = S(Dl(e.initialFiles)), { on: o, trigger: a } = /* @__PURE__ */ Wt(), { on: s, trigger: l } = /* @__PURE__ */ Wt(), r = M(() => {\n var m;\n const g = (m = Te(e.input)) !== null && m !== void 0 ? m : t ? t.createElement(\"input\") : void 0;\n return g && (g.type = \"file\", g.onchange = (p) => {\n n.value = p.target.files, a(n.value);\n }, g.oncancel = () => {\n l();\n }), g;\n }), i = () => {\n n.value = null, r.value && r.value.value && (r.value.value = \"\", a(null));\n }, u = (m) => {\n const g = r.value;\n g && (g.multiple = T(m.multiple), g.accept = T(m.accept), g.webkitdirectory = T(m.directory), bl(m, \"capture\") && (g.capture = T(m.capture)));\n }, c = (m) => {\n const g = r.value;\n if (!g) return;\n const p = {\n ...El,\n ...e,\n ...m\n };\n u(p), T(p.reset) && i(), g.click();\n };\n return Ce(() => {\n u(e);\n }), {\n files: Dt(n),\n open: c,\n reset: i,\n onCancel: s,\n onChange: o\n };\n}\nfunction wt(e) {\n return typeof Window < \"u\" && e instanceof Window ? e.document.documentElement : typeof Document < \"u\" && e instanceof Document ? e.documentElement : e;\n}\nconst xt = /* @__PURE__ */ new WeakMap();\nfunction Al(e, t = !1) {\n const n = J(t);\n let o = \"\";\n Y(Il(e), (l) => {\n const r = wt(T(l));\n if (r) {\n const i = r;\n if (xt.get(i) || xt.set(i, i.style.overflow), i.style.overflow !== \"hidden\" && (o = i.style.overflow), i.style.overflow === \"hidden\") return n.value = !0;\n if (n.value) return i.style.overflow = \"hidden\";\n }\n }, { immediate: !0 });\n const a = () => {\n const l = wt(T(e));\n !l || n.value || (l.style.overflow = \"hidden\", n.value = !0);\n }, s = () => {\n const l = wt(T(e));\n !l || !n.value || (l.style.overflow = o, xt.delete(l), n.value = !1);\n };\n return mn(s), M({\n get() {\n return n.value;\n },\n set(l) {\n l ? a() : s();\n }\n });\n}\nconst bt = /* @__PURE__ */ new WeakMap(), $l = {\n mounted(e, t) {\n const n = !t.modifiers.bubble;\n let o;\n if (typeof t.value == \"function\") o = Xt(e, t.value, { capture: n });\n else {\n const [a, s] = t.value;\n o = Xt(e, a, Object.assign({ capture: n }, s));\n }\n bt.set(e, o);\n },\n unmounted(e) {\n const t = bt.get(e);\n t && typeof t == \"function\" ? t() : t?.stop(), bt.delete(e);\n }\n};\nfunction Ml() {\n let e = !1;\n const t = J(!1);\n return (n, o) => {\n if (t.value = o.value, e) return;\n e = !0;\n const a = Al(n, o.value);\n Y(t, (s) => a.value = s);\n };\n}\nMl();\nconst Sl = { class: \"input-wrapper\" }, Ll = {\n id: \"autocomplete-results\",\n class: \"autocomplete-results\"\n}, Rl = {\n key: 0,\n class: \"loading autocomplete-result\"\n}, Vl = [\"onClick\"], Pl = /* @__PURE__ */ j({\n __name: \"ADropdown\",\n props: /* @__PURE__ */ de({\n label: {},\n items: { default: () => [] },\n isAsync: { type: Boolean, default: !1 },\n filterFunction: { type: Function, default: void 0 }\n }, {\n modelValue: {},\n modelModifiers: {}\n }),\n emits: [\"update:modelValue\"],\n setup(e) {\n const t = fe(e, \"modelValue\"), n = nn({\n activeItemIndex: null,\n open: !1,\n loading: !1,\n results: e.items\n }), o = () => r(), a = async () => {\n if (n.open = !0, n.activeItemIndex = null, e.filterFunction) {\n e.isAsync && (n.loading = !0);\n try {\n const g = await e.filterFunction(t.value || \"\");\n n.results = g || [];\n } catch {\n n.results = [];\n } finally {\n e.isAsync && (n.loading = !1);\n }\n } else\n i();\n }, s = (g) => {\n t.value = g, r(g);\n }, l = () => {\n n.activeItemIndex = e.isAsync ? null : t.value && e.items?.indexOf(t.value) || null, n.open = !0, n.results = e.isAsync ? [] : e.items;\n }, r = (g) => {\n n.activeItemIndex = null, n.open = !1, e.items?.includes(g || t.value || \"\") || (t.value = \"\");\n }, i = () => {\n t.value ? n.results = e.items?.filter((g) => g.toLowerCase().includes((t.value ?? \"\").toLowerCase())) : n.results = e.items;\n }, u = () => {\n const g = n.results?.length || 0;\n if (n.activeItemIndex != null) {\n const p = isNaN(n.activeItemIndex) ? 0 : n.activeItemIndex;\n n.activeItemIndex = (p + 1) % g;\n } else\n n.activeItemIndex = 0;\n }, c = () => {\n const g = n.results?.length || 0;\n if (n.activeItemIndex != null) {\n const p = isNaN(n.activeItemIndex) ? 0 : n.activeItemIndex;\n p === 0 ? n.activeItemIndex = null : n.activeItemIndex = p - 1;\n } else\n n.activeItemIndex = g - 1;\n }, m = () => {\n if (n.results) {\n const g = n.activeItemIndex || 0, p = n.results[g];\n s(p);\n }\n n.activeItemIndex = 0;\n };\n return (g, p) => U((x(), k(\"div\", {\n class: ee([\"autocomplete\", { isOpen: n.open }])\n }, [\n y(\"div\", Sl, [\n U(y(\"input\", {\n \"onUpdate:modelValue\": p[0] || (p[0] = (D) => t.value = D),\n type: \"text\",\n onInput: a,\n onFocus: l,\n onKeydown: [\n De(u, [\"down\"]),\n De(c, [\"up\"]),\n De(m, [\"enter\"]),\n De(o, [\"esc\"]),\n De(o, [\"tab\"])\n ]\n }, null, 544), [\n [se, t.value]\n ]),\n U(y(\"ul\", Ll, [\n n.loading ? (x(), k(\"li\", Rl, \"Loading results...\")) : (x(!0), k(te, { key: 1 }, ae(n.results, (D, w) => (x(), k(\"li\", {\n key: D,\n class: ee([\"autocomplete-result\", { \"is-active\": w === n.activeItemIndex }]),\n onClick: $e((f) => s(D), [\"stop\"])\n }, W(D), 11, Vl))), 128))\n ], 512), [\n [be, n.open]\n ]),\n y(\"label\", null, W(e.label), 1)\n ])\n ], 2)), [\n [$($l), o]\n ]);\n }\n}), Ol = /* @__PURE__ */ he(Pl, [[\"__scopeId\", \"data-v-31a6db8c\"]]);\nfunction gn(e, t) {\n return nt() ? (ot(e, t), !0) : !1;\n}\nconst _l = typeof window < \"u\" && typeof document < \"u\";\ntypeof WorkerGlobalScope < \"u\" && globalThis instanceof WorkerGlobalScope;\nconst Hl = (e) => e != null, Fl = Object.prototype.toString, Nl = (e) => Fl.call(e) === \"[object Object]\", Bl = () => {\n};\nfunction Qe(e) {\n return Array.isArray(e) ? e : [e];\n}\nfunction Gl(e, t, n) {\n return Y(e, t, {\n ...n,\n immediate: !0\n });\n}\nconst Re = _l ? window : void 0;\nfunction Se(e) {\n var t;\n const n = T(e);\n return (t = n?.$el) !== null && t !== void 0 ? t : n;\n}\nfunction _e(...e) {\n const t = (o, a, s, l) => (o.addEventListener(a, s, l), () => o.removeEventListener(a, s, l)), n = M(() => {\n const o = Qe(T(e[0])).filter((a) => a != null);\n return o.every((a) => typeof a != \"string\") ? o : void 0;\n });\n return Gl(() => {\n var o, a;\n return [\n (o = (a = n.value) === null || a === void 0 ? void 0 : a.map((s) => Se(s))) !== null && o !== void 0 ? o : [Re].filter((s) => s != null),\n Qe(T(n.value ? e[1] : e[0])),\n Qe($(n.value ? e[2] : e[1])),\n T(n.value ? e[3] : e[2])\n ];\n }, ([o, a, s, l], r, i) => {\n if (!o?.length || !a?.length || !s?.length) return;\n const u = Nl(l) ? { ...l } : l, c = o.flatMap((m) => a.flatMap((g) => s.map((p) => t(m, g, p, u))));\n i(() => {\n c.forEach((m) => m());\n });\n }, { flush: \"post\" });\n}\n// @__NO_SIDE_EFFECTS__\nfunction Ul() {\n const e = J(!1), t = lt();\n return t && ve(() => {\n e.value = !0;\n }, t), e;\n}\n// @__NO_SIDE_EFFECTS__\nfunction zl(e) {\n const t = /* @__PURE__ */ Ul();\n return M(() => (t.value, !!e()));\n}\nfunction Wl(e, t, n = {}) {\n const { window: o = Re, ...a } = n;\n let s;\n const l = /* @__PURE__ */ zl(() => o && \"MutationObserver\" in o), r = () => {\n s && (s.disconnect(), s = void 0);\n }, i = Y(M(() => {\n const m = Qe(T(e)).map(Se).filter(Hl);\n return new Set(m);\n }), (m) => {\n r(), l.value && m.size && (s = new MutationObserver(t), m.forEach((g) => s.observe(g, a)));\n }, {\n immediate: !0,\n flush: \"post\"\n }), u = () => s?.takeRecords(), c = () => {\n i(), r();\n };\n return gn(c), {\n isSupported: l,\n stop: c,\n takeRecords: u\n };\n}\nfunction Xl(e, t, n = {}) {\n const { window: o = Re, document: a = o?.document, flush: s = \"sync\" } = n;\n if (!o || !a) return Bl;\n let l;\n const r = (c) => {\n l?.(), l = c;\n }, i = Ce(() => {\n const c = Se(e);\n if (c) {\n const { stop: m } = Wl(a, (g) => {\n g.map((p) => [...p.removedNodes]).flat().some((p) => p === c || p.contains(c)) && t(g);\n }, {\n window: o,\n childList: !0,\n subtree: !0\n });\n r(m);\n }\n }, { flush: s }), u = () => {\n i(), r();\n };\n return gn(u), u;\n}\n// @__NO_SIDE_EFFECTS__\nfunction jl(e = {}) {\n var t;\n const { window: n = Re, deep: o = !0, triggerOnRemoval: a = !1 } = e, s = (t = e.document) !== null && t !== void 0 ? t : n?.document, l = () => {\n let u = s?.activeElement;\n if (o)\n for (var c; u?.shadowRoot; ) u = u == null || (c = u.shadowRoot) === null || c === void 0 ? void 0 : c.activeElement;\n return u;\n }, r = J(), i = () => {\n r.value = l();\n };\n if (n) {\n const u = {\n capture: !0,\n passive: !0\n };\n _e(n, \"blur\", (c) => {\n c.relatedTarget === null && i();\n }, u), _e(n, \"focus\", i, u);\n }\n return a && Xl(r, i, { document: s }), i(), r;\n}\nconst ql = \"focusin\", Yl = \"focusout\", Jl = \":focus-within\";\nfunction Kl(e, t = {}) {\n const { window: n = Re } = t, o = M(() => Se(e)), a = J(!1), s = M(() => a.value);\n if (!n || !(/* @__PURE__ */ jl(t)).value) return { focused: s };\n const l = { passive: !0 };\n return _e(o, ql, () => a.value = !0, l), _e(o, Yl, () => {\n var r, i, u;\n return a.value = (r = (i = o.value) === null || i === void 0 || (u = i.matches) === null || u === void 0 ? void 0 : u.call(i, Jl)) !== null && r !== void 0 ? r : !1;\n }, l), { focused: s };\n}\nfunction Ql(e, { window: t = Re, scrollTarget: n } = {}) {\n const o = S(!1), a = () => {\n if (!t) return;\n const s = t.document, l = Se(e);\n if (!l)\n o.value = !1;\n else {\n const r = l.getBoundingClientRect();\n o.value = r.top <= (t.innerHeight || s.documentElement.clientHeight) && r.left <= (t.innerWidth || s.documentElement.clientWidth) && r.bottom >= 0 && r.right >= 0;\n }\n };\n return Y(\n () => Se(e),\n () => a(),\n { immediate: !0, flush: \"post\" }\n ), t && _e(n || t, \"scroll\", a, {\n capture: !1,\n passive: !0\n }), o;\n}\nconst ge = (e) => {\n let t = Ql(e).value;\n return t = t && e.offsetHeight > 0, t;\n}, ye = (e) => e.tabIndex >= 0, jt = (e) => {\n const t = e.target;\n return Rt(t);\n}, Rt = (e) => {\n let t;\n if (e instanceof HTMLTableCellElement) {\n const n = e.parentElement?.previousElementSibling;\n if (n) {\n const o = Array.from(n.children)[e.cellIndex];\n o && (t = o);\n }\n } else if (e instanceof HTMLTableRowElement) {\n const n = e.previousElementSibling;\n n && (t = n);\n }\n return t && (!ye(t) || !ge(t)) ? Rt(t) : t;\n}, Zl = (e) => {\n const t = e.target;\n let n;\n if (t instanceof HTMLTableCellElement) {\n const o = t.parentElement?.parentElement;\n if (o) {\n const a = o.firstElementChild?.children[t.cellIndex];\n a && (n = a);\n }\n } else if (t instanceof HTMLTableRowElement) {\n const o = t.parentElement;\n if (o) {\n const a = o.firstElementChild;\n a && (n = a);\n }\n }\n return n && (!ye(n) || !ge(n)) ? Vt(n) : n;\n}, qt = (e) => {\n const t = e.target;\n return Vt(t);\n}, Vt = (e) => {\n let t;\n if (e instanceof HTMLTableCellElement) {\n const n = e.parentElement?.nextElementSibling;\n if (n) {\n const o = Array.from(n.children)[e.cellIndex];\n o && (t = o);\n }\n } else if (e instanceof HTMLTableRowElement) {\n const n = e.nextElementSibling;\n n && (t = n);\n }\n return t && (!ye(t) || !ge(t)) ? Vt(t) : t;\n}, ea = (e) => {\n const t = e.target;\n let n;\n if (t instanceof HTMLTableCellElement) {\n const o = t.parentElement?.parentElement;\n if (o) {\n const a = o.lastElementChild?.children[t.cellIndex];\n a && (n = a);\n }\n } else if (t instanceof HTMLTableRowElement) {\n const o = t.parentElement;\n if (o) {\n const a = o.lastElementChild;\n a && (n = a);\n }\n }\n return n && (!ye(n) || !ge(n)) ? Rt(n) : n;\n}, Yt = (e) => {\n const t = e.target;\n return Pt(t);\n}, Pt = (e) => {\n let t;\n return e.previousElementSibling ? t = e.previousElementSibling : t = e.parentElement?.previousElementSibling?.lastElementChild, t && (!ye(t) || !ge(t)) ? Pt(t) : t;\n}, Jt = (e) => {\n const t = e.target;\n return Ot(t);\n}, Ot = (e) => {\n let t;\n return e.nextElementSibling ? t = e.nextElementSibling : t = e.parentElement?.nextElementSibling?.firstElementChild, t && (!ye(t) || !ge(t)) ? Ot(t) : t;\n}, Kt = (e) => {\n const t = e.target.parentElement?.firstElementChild;\n return t && (!ye(t) || !ge(t)) ? Ot(t) : t;\n}, Qt = (e) => {\n const t = e.target.parentElement?.lastElementChild;\n return t && (!ye(t) || !ge(t)) ? Pt(t) : t;\n}, Ye = [\"alt\", \"control\", \"shift\", \"meta\"], ta = {\n ArrowUp: \"up\",\n ArrowDown: \"down\",\n ArrowLeft: \"left\",\n ArrowRight: \"right\"\n}, yn = {\n \"keydown.up\": (e) => {\n const t = jt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.down\": (e) => {\n const t = qt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.left\": (e) => {\n const t = Yt(e);\n e.preventDefault(), e.stopPropagation(), t && t.focus();\n },\n \"keydown.right\": (e) => {\n const t = Jt(e);\n e.preventDefault(), e.stopPropagation(), t && t.focus();\n },\n \"keydown.control.up\": (e) => {\n const t = Zl(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.down\": (e) => {\n const t = ea(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.left\": (e) => {\n const t = Kt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.right\": (e) => {\n const t = Qt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.end\": (e) => {\n const t = Qt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.enter\": (e) => {\n if (e.target instanceof HTMLTableCellElement) {\n e.preventDefault(), e.stopPropagation();\n const t = qt(e);\n t && t.focus();\n }\n },\n \"keydown.shift.enter\": (e) => {\n if (e.target instanceof HTMLTableCellElement) {\n e.preventDefault(), e.stopPropagation();\n const t = jt(e);\n t && t.focus();\n }\n },\n \"keydown.home\": (e) => {\n const t = Kt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.tab\": (e) => {\n const t = Jt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.shift.tab\": (e) => {\n const t = Yt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n }\n};\nfunction na(e) {\n const t = (l) => {\n let r = null;\n return l.parent && (typeof l.parent == \"string\" ? r = document.querySelector(l.parent) : l.parent instanceof HTMLElement ? r = l.parent : r = l.parent.value), r;\n }, n = (l) => {\n const r = t(l);\n let i = [];\n if (typeof l.selectors == \"string\")\n i = Array.from(r ? r.querySelectorAll(l.selectors) : document.querySelectorAll(l.selectors));\n else if (Array.isArray(l.selectors))\n for (const u of l.selectors)\n u instanceof HTMLElement ? i.push(u) : i.push(u.$el);\n else if (l.selectors instanceof HTMLElement)\n i.push(l.selectors);\n else if (l.selectors?.value)\n if (Array.isArray(l.selectors.value))\n for (const u of l.selectors.value)\n u instanceof HTMLElement ? i.push(u) : i.push(u.$el);\n else\n i.push(l.selectors.value);\n return i;\n }, o = (l) => {\n const r = t(l);\n let i = [];\n return l.selectors ? i = n(l) : r && (i = Array.from(r.children).filter((u) => ye(u) && ge(u))), i;\n }, a = (l) => (r) => {\n const i = ta[r.key] || r.key.toLowerCase();\n if (Ye.includes(i)) return;\n const u = l.handlers || yn;\n for (const c of Object.keys(u)) {\n const [m, ...g] = c.split(\".\");\n if (m === \"keydown\" && g.includes(i)) {\n const p = u[c], D = g.filter((f) => Ye.includes(f)), w = Ye.some((f) => {\n const h = f.charAt(0).toUpperCase() + f.slice(1);\n return r.getModifierState(h);\n });\n if (D.length > 0) {\n if (w) {\n for (const f of Ye)\n if (g.includes(f)) {\n const h = f.charAt(0).toUpperCase() + f.slice(1);\n r.getModifierState(h) && p(r);\n }\n }\n } else\n w || p(r);\n }\n }\n }, s = [];\n ve(() => {\n for (const l of e) {\n const r = t(l), i = o(l), u = a(l), c = r ? [r] : i;\n for (const m of c) {\n const { focused: g } = Kl(S(m)), p = Y(g, (D) => {\n D ? m.addEventListener(\"keydown\", u) : m.removeEventListener(\"keydown\", u);\n });\n s.push(p);\n }\n }\n }), tn(() => {\n for (const l of s)\n l();\n });\n}\nconst oa = {\n ref: \"datepicker\",\n class: \"adatepicker\",\n tabindex: \"0\"\n}, la = {\n colspan: \"5\",\n tabindex: -1\n}, aa = [\"onClick\", \"onKeydown\"], ra = 6, Zt = 7, sa = /* @__PURE__ */ j({\n __name: \"ADatePicker\",\n props: {\n modelValue: { default: /* @__PURE__ */ new Date() },\n modelModifiers: {}\n },\n emits: [\"update:modelValue\"],\n setup(e, { expose: t }) {\n const n = fe(e, \"modelValue\"), o = S(new Date(n.value)), a = S(o.value.getMonth()), s = S(o.value.getFullYear()), l = S([]), r = ne(\"datepicker\");\n ve(async () => {\n i(), await tt();\n const E = document.getElementsByClassName(\"selectedDate\");\n if (E.length > 0)\n E[0].focus();\n else {\n const L = document.getElementsByClassName(\"todaysDate\");\n L.length > 0 && L[0].focus();\n }\n });\n const i = () => {\n l.value = [];\n const E = new Date(s.value, a.value, 1), L = E.getDay(), z = E.setDate(E.getDate() - L);\n for (const R of Array(43).keys())\n l.value.push(z + R * 864e5);\n };\n Y([a, s], i);\n const u = () => s.value -= 1, c = () => s.value += 1, m = () => {\n a.value == 0 ? (a.value = 11, u()) : a.value -= 1;\n }, g = () => {\n a.value == 11 ? (a.value = 0, c()) : a.value += 1;\n }, p = (E) => {\n const L = /* @__PURE__ */ new Date();\n if (a.value === L.getMonth())\n return L.toDateString() === new Date(E).toDateString();\n }, D = (E) => new Date(E).toDateString() === new Date(o.value).toDateString(), w = (E, L) => (E - 1) * Zt + L, f = (E, L) => l.value[w(E, L)], h = (E) => {\n n.value = o.value = new Date(l.value[E]);\n }, I = M(() => new Date(s.value, a.value, 1).toLocaleDateString(void 0, {\n year: \"numeric\",\n month: \"long\"\n }));\n return na([\n {\n parent: r,\n selectors: \"td\",\n handlers: {\n ...yn,\n \"keydown.pageup\": m,\n \"keydown.shift.pageup\": u,\n \"keydown.pagedown\": g,\n \"keydown.shift.pagedown\": c,\n // TODO: this is a hack to override the stonecrop enter handler;\n // store context inside the component so that handlers can be setup consistently\n \"keydown.enter\": () => {\n }\n }\n }\n ]), t({ currentMonth: a, currentYear: s, selectedDate: o }), (E, L) => (x(), k(\"div\", oa, [\n y(\"table\", null, [\n y(\"tbody\", null, [\n y(\"tr\", null, [\n y(\"td\", {\n id: \"previous-month-btn\",\n tabindex: -1,\n onClick: m\n }, \"<\"),\n y(\"th\", la, W(I.value), 1),\n y(\"td\", {\n id: \"next-month-btn\",\n tabindex: -1,\n onClick: g\n }, \">\")\n ]),\n L[0] || (L[0] = y(\"tr\", { class: \"days-header\" }, [\n y(\"td\", null, \"M\"),\n y(\"td\", null, \"T\"),\n y(\"td\", null, \"W\"),\n y(\"td\", null, \"T\"),\n y(\"td\", null, \"F\"),\n y(\"td\", null, \"S\"),\n y(\"td\", null, \"S\")\n ], -1)),\n (x(), k(te, null, ae(ra, (z) => y(\"tr\", { key: z }, [\n (x(), k(te, null, ae(Zt, (R) => y(\"td\", {\n ref_for: !0,\n ref: \"celldate\",\n key: w(z, R),\n contenteditable: !1,\n spellcheck: !1,\n tabindex: 0,\n class: ee({\n todaysDate: p(f(z, R)),\n selectedDate: D(f(z, R))\n }),\n onClick: $e((C) => h(w(z, R)), [\"prevent\", \"stop\"]),\n onKeydown: De((C) => h(w(z, R)), [\"enter\"])\n }, W(new Date(f(z, R)).getDate()), 43, aa)), 64))\n ])), 64))\n ])\n ])\n ], 512));\n }\n}), ia = /* @__PURE__ */ he(sa, [[\"__scopeId\", \"data-v-056d2b5e\"]]), ua = /* @__PURE__ */ j({\n __name: \"CollapseButton\",\n props: {\n collapsed: { type: Boolean }\n },\n setup(e) {\n return (t, n) => (x(), k(\"button\", {\n class: ee([\"collapse-button\", e.collapsed ? \"rotated\" : \"unrotated\"])\n }, \"×\", 2));\n }\n}), ca = /* @__PURE__ */ he(ua, [[\"__scopeId\", \"data-v-6f1c1b45\"]]), da = { class: \"aform\" }, fa = {\n key: 0,\n class: \"aform-nested-section\"\n}, va = {\n key: 0,\n class: \"aform-nested-label\"\n}, ma = /* @__PURE__ */ j({\n __name: \"AForm\",\n props: /* @__PURE__ */ de({\n schema: {},\n readOnly: { type: Boolean }\n }, {\n data: { required: !0 },\n dataModifiers: {}\n }),\n emits: /* @__PURE__ */ de([\"update:schema\", \"update:data\"], [\"update:data\"]),\n setup(e, { emit: t }) {\n const n = t, o = fe(e, \"data\"), a = S({});\n Ce(() => {\n !e.schema || !o.value || e.schema.forEach((i) => {\n \"schema\" in i && Array.isArray(i.schema) && i.schema.length > 0 && (!a.value[i.fieldname] && o.value[i.fieldname] ? a.value[i.fieldname] = o.value[i.fieldname] : a.value[i.fieldname] || (a.value[i.fieldname] = {}));\n });\n }), Ce(() => {\n Object.keys(a.value).forEach((i) => {\n o.value && a.value[i] !== o.value[i] && (o.value[i] = a.value[i], n(\"update:data\", o.value));\n });\n }), Ce(() => {\n o.value && e.schema && e.schema.forEach((i) => {\n i.fieldname && o.value[i.fieldname] !== void 0 && (i.value = o.value[i.fieldname]);\n });\n });\n const s = (i) => {\n const u = {};\n for (const [c, m] of Object.entries(i))\n [\"component\", \"fieldtype\"].includes(c) || (u[c] = m), c === \"rows\" && (!m || Array.isArray(m) && m.length === 0) && (u.rows = o.value[i.fieldname] || []);\n return u;\n }, l = S([]);\n Ce(() => {\n e.schema && l.value.length !== e.schema.length && (l.value = e.schema.map((i, u) => M({\n get() {\n return i.value;\n },\n set: (c) => {\n const m = e.schema[u].fieldname;\n e.schema[u].value = c, m && o.value && (o.value[m] = c, n(\"update:data\", o.value)), n(\"update:schema\", e.schema);\n }\n })));\n });\n const r = M(() => l.value);\n return (i, u) => {\n const c = an(\"AForm\", !0);\n return x(), k(\"form\", da, [\n (x(!0), k(te, null, ae(e.schema, (m, g) => (x(), k(te, { key: g }, [\n \"schema\" in m && Array.isArray(m.schema) && m.schema.length > 0 ? (x(), k(\"div\", fa, [\n m.label ? (x(), k(\"h4\", va, W(m.label), 1)) : K(\"\", !0),\n Ze(c, {\n data: a.value[m.fieldname],\n \"onUpdate:data\": (p) => a.value[m.fieldname] = p,\n schema: m.schema,\n \"read-only\": e.readOnly || m.readOnly\n }, null, 8, [\"data\", \"onUpdate:data\", \"schema\", \"read-only\"])\n ])) : (x(), re(Ae(m.component), et({\n key: 1,\n modelValue: r.value[g].value,\n \"onUpdate:modelValue\": (p) => r.value[g].value = p,\n schema: m,\n data: o.value[m.fieldname],\n \"read-only\": e.readOnly\n }, { ref_for: !0 }, s(m)), null, 16, [\"modelValue\", \"onUpdate:modelValue\", \"schema\", \"data\", \"read-only\"]))\n ], 64))), 128))\n ]);\n };\n }\n}), wn = /* @__PURE__ */ he(ma, [[\"__scopeId\", \"data-v-06e17c5b\"]]), pa = /* @__PURE__ */ j({\n __name: \"AFieldset\",\n props: {\n schema: {},\n label: {},\n collapsible: { type: Boolean },\n data: { default: () => ({}) }\n },\n setup(e, { expose: t }) {\n const n = S(!1), o = S(e.data || []), a = S(e.schema), s = (l) => {\n l.preventDefault(), e.collapsible && (n.value = !n.value);\n };\n return t({ collapsed: n }), (l, r) => (x(), k(\"fieldset\", null, [\n y(\"legend\", {\n onClick: s,\n onSubmit: s\n }, [\n Ct(W(e.label) + \" \", 1),\n e.collapsible ? (x(), re(ca, {\n key: 0,\n collapsed: n.value\n }, null, 8, [\"collapsed\"])) : K(\"\", !0)\n ], 32),\n oe(l.$slots, \"default\", { collapsed: n.value }, () => [\n U(Ze(wn, {\n schema: a.value,\n data: o.value,\n \"onUpdate:data\": r[0] || (r[0] = (i) => o.value = i)\n }, null, 8, [\"schema\", \"data\"]), [\n [be, !n.value]\n ])\n ], !0)\n ]));\n }\n}), ha = /* @__PURE__ */ he(pa, [[\"__scopeId\", \"data-v-18fd6c61\"]]), ga = { class: \"aform_form-element aform_file-attach aform__grid--full\" }, ya = {\n key: 0,\n class: \"aform_file-attach-feedback\"\n}, wa = [\"disabled\"], xa = /* @__PURE__ */ j({\n __name: \"AFileAttach\",\n props: {\n label: {}\n },\n setup(e) {\n const { files: t, open: n, reset: o, onChange: a } = Tl(), s = M(() => `${t.value.length} ${t.value.length === 1 ? \"file\" : \"files\"}`);\n return a((l) => l), (l, r) => (x(), k(\"div\", ga, [\n $(t) ? (x(), k(\"div\", ya, [\n y(\"p\", null, [\n r[2] || (r[2] = Ct(\" You have selected: \", -1)),\n y(\"b\", null, W(s.value), 1)\n ]),\n (x(!0), k(te, null, ae($(t), (i) => (x(), k(\"li\", {\n key: i.name\n }, W(i.name), 1))), 128))\n ])) : K(\"\", !0),\n y(\"button\", {\n type: \"button\",\n class: \"aform_form-btn\",\n onClick: r[0] || (r[0] = (i) => $(n)())\n }, W(e.label), 1),\n y(\"button\", {\n type: \"button\",\n disabled: !$(t),\n class: \"aform_form-btn\",\n onClick: r[1] || (r[1] = (i) => $(o)())\n }, \"Reset\", 8, wa)\n ]));\n }\n}), ba = /* @__PURE__ */ he(xa, [[\"__scopeId\", \"data-v-b700734f\"]]), Ia = { class: \"aform_form-element\" }, ka = [\"id\", \"disabled\", \"required\"], Ca = [\"for\"], Ea = [\"innerHTML\"], Da = /* @__PURE__ */ j({\n __name: \"ANumericInput\",\n props: /* @__PURE__ */ de({\n schema: {},\n label: {},\n mask: {},\n required: { type: Boolean },\n readOnly: { type: Boolean },\n uuid: {},\n validation: { default: () => ({ errorMessage: \" \" }) }\n }, {\n modelValue: {},\n modelModifiers: {}\n }),\n emits: [\"update:modelValue\"],\n setup(e) {\n const t = fe(e, \"modelValue\");\n return (n, o) => (x(), k(\"div\", Ia, [\n U(y(\"input\", {\n id: e.uuid,\n \"onUpdate:modelValue\": o[0] || (o[0] = (a) => t.value = a),\n class: \"aform_input-field\",\n type: \"number\",\n disabled: e.readOnly,\n required: e.required\n }, null, 8, ka), [\n [se, t.value]\n ]),\n y(\"label\", {\n class: \"aform_field-label\",\n for: e.uuid\n }, W(e.label), 9, Ca),\n U(y(\"p\", {\n class: \"aform_error\",\n innerHTML: e.validation.errorMessage\n }, null, 8, Ea), [\n [be, e.validation.errorMessage]\n ])\n ]));\n }\n}), en = {\n date: \"##/##/####\",\n datetime: \"####/##/## ##:##\",\n time: \"##:##\",\n fulltime: \"##:##:##\",\n phone: \"(###) ### - ####\",\n card: \"#### #### #### ####\"\n};\nfunction Ta(e) {\n try {\n return Function(`\"use strict\";return (${e})`)();\n } catch {\n }\n}\nfunction Aa(e) {\n let t = e.value;\n if (t) {\n const n = Ta(t);\n if (n) {\n const o = e.instance?.locale;\n t = n(o);\n }\n } else {\n const o = e.instance?.schema?.fieldtype?.toLowerCase();\n o && en[o] && (t = en[o]);\n }\n return t;\n}\nfunction $a(e, t) {\n let n = e;\n const o = [t, \"/\", \"-\", \"(\", \")\", \" \"];\n for (const a of o)\n n = n.replaceAll(a, \"\");\n return n;\n}\nfunction Ma(e, t, n) {\n let o = t;\n for (const a of e) {\n const s = o.indexOf(n);\n if (s !== -1) {\n const l = o.substring(0, s), r = o.substring(s + 1);\n o = l + a + r;\n }\n }\n return o.slice(0, t.length);\n}\nfunction Sa(e, t) {\n const n = Aa(t);\n if (!n) return;\n const o = \"#\", a = e.value, s = $a(a, o);\n if (s) {\n const l = Ma(s, n, o);\n t.instance?.maskFilled && (t.instance.maskFilled = !l.includes(o)), e.value = l;\n } else\n e.value = n;\n}\nconst La = { class: \"aform_form-element\" }, Ra = [\"id\", \"disabled\", \"maxlength\", \"required\"], Va = [\"for\"], Pa = [\"innerHTML\"], Oa = /* @__PURE__ */ j({\n __name: \"ATextInput\",\n props: /* @__PURE__ */ de({\n schema: {},\n label: {},\n mask: {},\n required: { type: Boolean },\n readOnly: { type: Boolean },\n uuid: {},\n validation: { default: () => ({ errorMessage: \" \" }) }\n }, {\n modelValue: {},\n modelModifiers: {}\n }),\n emits: [\"update:modelValue\"],\n setup(e) {\n const t = S(!0), n = fe(e, \"modelValue\");\n return (o, a) => (x(), k(\"div\", La, [\n U(y(\"input\", {\n id: e.uuid,\n \"onUpdate:modelValue\": a[0] || (a[0] = (s) => n.value = s),\n class: \"aform_input-field\",\n disabled: e.readOnly,\n maxlength: e.mask && t.value ? e.mask.length : void 0,\n required: e.required\n }, null, 8, Ra), [\n [se, n.value],\n [$(Sa), e.mask]\n ]),\n y(\"label\", {\n class: \"aform_field-label\",\n for: e.uuid\n }, W(e.label), 9, Va),\n U(y(\"p\", {\n class: \"aform_error\",\n innerHTML: e.validation.errorMessage\n }, null, 8, Pa), [\n [be, e.validation.errorMessage]\n ])\n ]));\n }\n}), _a = { class: \"login-container\" }, Ha = { class: \"account-container\" }, Fa = { class: \"account-header\" }, Na = { id: \"account-title\" }, Ba = { id: \"account-subtitle\" }, Ga = { class: \"login-form-container\" }, Ua = { class: \"login-form-email aform_form-element\" }, za = [\"disabled\"], Wa = { class: \"login-form-password aform_form-element\" }, Xa = [\"disabled\"], ja = [\"disabled\"], qa = {\n key: 0,\n class: \"material-symbols-outlined loading-icon\"\n}, Ya = /* @__PURE__ */ j({\n __name: \"Login\",\n props: {\n headerTitle: { default: \"Login\" },\n headerSubtitle: { default: \"Enter your email and password to login\" }\n },\n emits: [\"loginFailed\", \"loginSuccess\"],\n setup(e, { emit: t }) {\n const n = t, o = S(\"\"), a = S(\"\"), s = S(!1), l = S(!1);\n function r(i) {\n if (i.preventDefault(), s.value = !0, l.value) {\n s.value = !1, n(\"loginFailed\");\n return;\n }\n s.value = !1, n(\"loginSuccess\");\n }\n return (i, u) => (x(), k(\"div\", _a, [\n y(\"div\", null, [\n y(\"div\", Ha, [\n y(\"div\", Fa, [\n y(\"h1\", Na, W(e.headerTitle), 1),\n y(\"p\", Ba, W(e.headerSubtitle), 1)\n ]),\n y(\"form\", { onSubmit: r }, [\n y(\"div\", Ga, [\n y(\"div\", Ua, [\n u[2] || (u[2] = y(\"label\", {\n id: \"login-email\",\n for: \"email\",\n class: \"aform_field-label\"\n }, \"Email\", -1)),\n U(y(\"input\", {\n id: \"email\",\n \"onUpdate:modelValue\": u[0] || (u[0] = (c) => o.value = c),\n class: \"aform_input-field\",\n name: \"email\",\n placeholder: \"name@example.com\",\n type: \"email\",\n \"auto-capitalize\": \"none\",\n \"auto-complete\": \"email\",\n \"auto-correct\": \"off\",\n disabled: s.value\n }, null, 8, za), [\n [se, o.value]\n ])\n ]),\n y(\"div\", Wa, [\n u[3] || (u[3] = y(\"label\", {\n id: \"login-password\",\n for: \"password\",\n class: \"aform_field-label\"\n }, \"Password\", -1)),\n U(y(\"input\", {\n id: \"password\",\n \"onUpdate:modelValue\": u[1] || (u[1] = (c) => a.value = c),\n class: \"aform_input-field\",\n name: \"password\",\n type: \"password\",\n disabled: s.value\n }, null, 8, Xa), [\n [se, a.value]\n ])\n ]),\n y(\"button\", {\n class: \"btn\",\n disabled: s.value || !o.value || !a.value,\n onClick: r\n }, [\n s.value ? (x(), k(\"span\", qa, \"progress_activity\")) : K(\"\", !0),\n u[4] || (u[4] = y(\"span\", { id: \"login-form-button\" }, \"Login\", -1))\n ], 8, ja)\n ])\n ], 32),\n u[5] || (u[5] = y(\"button\", { class: \"btn\" }, [\n y(\"span\", { id: \"forgot-password-button\" }, \"Forgot password?\")\n ], -1))\n ])\n ])\n ]));\n }\n}), Qa = /* @__PURE__ */ he(Ya, [[\"__scopeId\", \"data-v-d9ffd0a7\"]]);\nfunction Za(e) {\n e.use(al), e.component(\"ACheckbox\", fl), e.component(\"ACombobox\", vl), e.component(\"ADate\", yl), e.component(\"ADropdown\", Ol), e.component(\"ADatePicker\", ia), e.component(\"AFieldset\", ha), e.component(\"AFileAttach\", ba), e.component(\"AForm\", wn), e.component(\"ANumericInput\", Da), e.component(\"ATextInput\", Oa);\n}\nexport {\n fl as ACheckbox,\n vl as AComboBox,\n yl as ADate,\n ia as ADatePicker,\n Ol as ADropdown,\n ha as AFieldset,\n ba as AFileAttach,\n wn as AForm,\n Da as ANumericInput,\n Oa as ATextInput,\n Qa as Login,\n Za as install\n};\n//# sourceMappingURL=aform.js.map\n","<template>\n\t<footer>\n\t\t<ul class=\"tabs\">\n\t\t\t<li class=\"hidebreadcrumbs\" @click=\"toggleBreadcrumbs\" @keydown.enter=\"toggleBreadcrumbs\">\n\t\t\t\t<a tabindex=\"0\"><div :class=\"rotateHideTabIcon\">×</div></a>\n\t\t\t</li>\n\t\t\t<li\n\t\t\t\tclass=\"hometab\"\n\t\t\t\t:style=\"{ display: breadcrumbsVisibile ? 'block' : 'none' }\"\n\t\t\t\t@click=\"navigateHome\"\n\t\t\t\t@keydown.enter=\"navigateHome\">\n\t\t\t\t<router-link to=\"/\" tabindex=\"0\">\n\t\t\t\t\t<svg class=\"icon\" aria-label=\"Home\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n\t\t\t\t\t\t<path d=\"M3 12l9-9 9 9\" />\n\t\t\t\t\t\t<path d=\"M9 21V12h6v9\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</router-link>\n\t\t\t</li>\n\t\t\t<li\n\t\t\t\t:class=\"['searchtab', { 'search-active': searchVisible }]\"\n\t\t\t\t:style=\"{ display: breadcrumbsVisibile ? 'block' : 'none' }\">\n\t\t\t\t<a tabindex=\"0\">\n\t\t\t\t\t<svg\n\t\t\t\t\t\tv-show=\"!searchVisible\"\n\t\t\t\t\t\tclass=\"icon search-icon\"\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\taria-label=\"Search\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t@click=\"toggleSearch\"\n\t\t\t\t\t\t@keydown.enter=\"toggleSearch\">\n\t\t\t\t\t\t<circle cx=\"11\" cy=\"11\" r=\"7\" />\n\t\t\t\t\t\t<path d=\"M21 21l-4.35-4.35\" />\n\t\t\t\t\t</svg>\n\t\t\t\t\t<input\n\t\t\t\t\t\tv-show=\"searchVisible\"\n\t\t\t\t\t\tref=\"searchinput\"\n\t\t\t\t\t\tv-model=\"searchText\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tplaceholder=\"Search...\"\n\t\t\t\t\t\t@click.stop\n\t\t\t\t\t\t@input=\"handleSearchInput($event)\"\n\t\t\t\t\t\t@blur=\"handleSearch($event)\"\n\t\t\t\t\t\t@keydown.enter=\"handleSearch($event)\"\n\t\t\t\t\t\t@keydown.escape=\"toggleSearch\" />\n\t\t\t\t</a>\n\t\t\t</li>\n\t\t\t<li\n\t\t\t\tv-for=\"breadcrumb in breadcrumbs\"\n\t\t\t\t:key=\"breadcrumb.title\"\n\t\t\t\t:style=\"{ display: breadcrumbsVisibile ? 'block' : 'none' }\">\n\t\t\t\t<router-link tabindex=\"0\" :to=\"breadcrumb.to\"> {{ breadcrumb.title }} </router-link>\n\t\t\t</li>\n\t\t</ul>\n\t</footer>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, ref, useTemplateRef } from 'vue'\n\nconst { breadcrumbs = [] } = defineProps<{ breadcrumbs?: { title: string; to: string }[] }>()\n\nconst breadcrumbsVisibile = ref(true)\nconst searchVisible = ref(false)\nconst searchText = ref('')\nconst inputRef = useTemplateRef<HTMLInputElement>('searchinput')\n\nconst rotateHideTabIcon = computed(() => {\n\treturn breadcrumbsVisibile.value ? 'unrotated' : 'rotated'\n})\n\nconst toggleBreadcrumbs = () => {\n\tbreadcrumbsVisibile.value = !breadcrumbsVisibile.value\n}\n\nconst toggleSearch = async () => {\n\tsearchVisible.value = !searchVisible.value\n\tawait nextTick(() => {\n\t\tinputRef.value?.focus()\n\t})\n}\n\nconst handleSearchInput = (event: Event | MouseEvent) => {\n\tevent.preventDefault()\n\tevent.stopPropagation()\n}\n\nconst handleSearch = async (event: FocusEvent | KeyboardEvent) => {\n\tevent.preventDefault()\n\tevent.stopPropagation()\n\tawait toggleSearch()\n}\n\nconst navigateHome = (/* event: MouseEvent | KeyboardEvent */) => {\n\t// navigate home\n}\n</script>\n\n<style scoped>\nfooter {\n\tposition: fixed;\n\tbottom: 0px;\n\twidth: 100%;\n\tbackground-color: transparent;\n\theight: auto;\n\tmin-height: 2.4rem;\n\tz-index: 100;\n\ttext-align: left;\n\tfont-size: 100%;\n\tdisplay: flex;\n\tjustify-content: right;\n\tpadding: 0 0.75rem 0 0;\n\tbox-sizing: border-box;\n}\nul {\n\tdisplay: flex;\n\tflex-direction: row-reverse;\n\tmargin: 0;\n\tpadding: 0;\n\tlist-style: none;\n}\n\n.tabs li {\n\tfloat: left;\n\tlist-style-type: none;\n\tposition: relative;\n\tmargin-left: -1px;\n}\n\n/* Base tab styling */\n.tabs a {\n\tfloat: left;\n\tpadding: 0.5rem 1rem;\n\theight: 2.4rem;\n\tbox-sizing: border-box;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\ttext-decoration: none;\n\tcolor: var(--sc-gray-60, #666);\n\tbackground: var(--sc-btn-color, #ffffff);\n\tborder: 1px solid var(--sc-btn-border, #ccc);\n\tfont-size: 0.85rem;\n\tfont-family: var(--sc-font-family, system-ui, sans-serif);\n\ttransition: all 0.15s ease;\n\n\t/* Minimal ornamentation - subtle top radius only */\n\tborder-top-left-radius: 2px;\n\tborder-top-right-radius: 2px;\n}\n\n.tabs a:hover {\n\tbackground: var(--sc-btn-hover, #f2f2f2);\n}\n\n.tabs .router-link-active {\n\tz-index: 3;\n\tbackground: var(--sc-primary-color, #827553) !important;\n\tborder-color: var(--sc-primary-color, #827553) !important;\n\tcolor: var(--sc-primary-text-color, #fff) !important;\n}\n\n/* Pseudo-elements removed - minimal ornamentation style */\n\n/* Hide breadcrumbs tab */\n.hidebreadcrumbs a {\n\tmin-width: 2.4rem;\n\twidth: 2.4rem;\n\theight: 2.4rem;\n\tpadding: 0.5rem;\n\tbackground: var(--sc-btn-color, #ffffff);\n\tborder: 1px solid var(--sc-btn-border, #ccc);\n\tcolor: var(--sc-gray-60, #666);\n}\n\n.hidebreadcrumbs a div {\n\tfont-size: 1.2rem;\n}\n\n.rotated {\n\ttransform: rotate(45deg);\n\t-webkit-transform: rotate(45deg);\n\t-moz-transform: rotate(45deg);\n\t-ms-transform: rotate(45deg);\n\t-o-transform: rotate(45deg);\n\ttransition: transform 250ms ease;\n}\n.unrotated {\n\ttransform: rotate(0deg);\n\t-webkit-transform: rotate(0deg);\n\t-moz-transform: rotate(0deg);\n\t-ms-transform: rotate(0deg);\n\t-o-transform: rotate(0deg);\n\ttransition: transform 250ms ease;\n}\n\nli:active,\nli:hover,\nli:focus,\nli > a:active,\nli > a:hover,\nli > a:focus {\n\tz-index: 3;\n}\n\na:active,\na:hover,\na:focus {\n\toutline: 2px solid var(--sc-input-active-border-color, black);\n\tz-index: 3;\n}\n\n/* Home tab */\n.hometab a {\n\tmin-width: 2.4rem;\n\twidth: 2.4rem;\n\theight: 2.4rem;\n\tpadding: 0.5rem;\n\tbackground: var(--sc-btn-color, #ffffff);\n\tborder: 1px solid var(--sc-btn-border, #ccc);\n\tcolor: var(--sc-gray-60, #666);\n}\n\n/* SVG icon styling */\n.icon {\n\twidth: 1rem;\n\theight: 1rem;\n\tstroke: currentColor;\n\tflex-shrink: 0;\n}\n\n/* Search tab with animation */\n.searchtab {\n\toverflow: hidden;\n}\n\n.searchtab a {\n\tmin-width: 2.4rem;\n\theight: 2.4rem;\n\tpadding: 0.5rem;\n\tbackground: var(--sc-btn-color, #ffffff);\n\tborder: 1px solid var(--sc-btn-border, #ccc);\n\tcolor: var(--sc-gray-60, #666);\n\toverflow: hidden;\n\t/* Animation for smooth expand/collapse */\n\tmax-width: 2.4rem;\n\ttransition: max-width 0.35s ease-in-out, padding 0.35s ease-in-out, background 0.2s ease;\n}\n\n.searchtab .search-icon {\n\tcursor: pointer;\n}\n\n.searchtab input {\n\toutline: none;\n\tborder: 1px solid var(--sc-input-border-color, #ccc);\n\tborder-radius: 0.25rem;\n\tbackground-color: var(--sc-form-background, #ffffff);\n\tcolor: var(--sc-gray-80, #333);\n\ttext-align: left;\n\tfont-size: 0.875rem;\n\tpadding: 0.25rem 0.5rem;\n\twidth: 180px;\n\theight: 1.5rem;\n\tflex-shrink: 0;\n\topacity: 0;\n\ttransition: opacity 0.2s ease-in-out;\n\ttransition-delay: 0s;\n}\n\n.searchtab input:focus {\n\tborder-color: var(--sc-input-active-border-color, #4f46e5);\n\toutline: none;\n}\n\n.searchtab input::placeholder {\n\tcolor: var(--sc-input-label-color, #999);\n}\n\n/* Search active state - expanded with animation */\n.searchtab.search-active a {\n\tmax-width: 200px;\n\tmin-width: auto;\n\twidth: auto;\n\tpadding: 0.5rem 0.75rem;\n}\n\n.searchtab.search-active input {\n\topacity: 1;\n\ttransition-delay: 0.15s;\n}\n</style>\n","<template>\n\t<div class=\"desktop\" @click=\"handleClick\">\n\t\t<!-- Action Set -->\n\t\t<ActionSet :elements=\"actionElements\" @action-click=\"handleActionClick\" />\n\n\t\t<!-- Main content using AForm -->\n\t\t<AForm v-if=\"writableSchema.length > 0\" v-model=\"writableSchema\" :data=\"currentViewData\" />\n\t\t<div v-else-if=\"!stonecrop\" class=\"loading\"><p>Initializing Stonecrop...</p></div>\n\t\t<div v-else class=\"loading\">\n\t\t\t<p>Loading {{ currentView }} data...</p>\n\t\t</div>\n\n\t\t<!-- Sheet Navigation -->\n\t\t<SheetNav :breadcrumbs=\"navigationBreadcrumbs\" />\n\n\t\t<!-- Command Palette -->\n\t\t<CommandPalette\n\t\t\t:is-open=\"commandPaletteOpen\"\n\t\t\t:search=\"searchCommands\"\n\t\t\tplaceholder=\"Type a command or search...\"\n\t\t\t@select=\"executeCommand\"\n\t\t\t@close=\"commandPaletteOpen = false\">\n\t\t\t<template #title=\"{ result }\">\n\t\t\t\t{{ result.title }}\n\t\t\t</template>\n\t\t\t<template #content=\"{ result }\">\n\t\t\t\t{{ result.description }}\n\t\t\t</template>\n\t\t</CommandPalette>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useStonecrop } from '@stonecrop/stonecrop'\nimport { AForm, type SchemaTypes, type TableColumn, type TableConfig } from '@stonecrop/aform'\nimport { computed, nextTick, onMounted, provide, ref, unref, watch } from 'vue'\n\nimport ActionSet from './ActionSet.vue'\nimport SheetNav from './SheetNav.vue'\nimport CommandPalette from './CommandPalette.vue'\nimport type { ActionElements } from '../types'\n\nconst { availableDoctypes = [] } = defineProps<{ availableDoctypes?: string[] }>()\n\nconst { stonecrop } = useStonecrop()\n\n// State\nconst loading = ref(false)\nconst saving = ref(false)\nconst commandPaletteOpen = ref(false)\n\n// HST-based form data management - field triggers are handled automatically by HST\n\n// Computed property that reads from HST store for reactive form data\nconst currentViewData = computed<Record<string, any>>({\n\tget() {\n\t\tif (!stonecrop.value || !currentDoctype.value || !currentRecordId.value) {\n\t\t\treturn {}\n\t\t}\n\n\t\ttry {\n\t\t\tconst record = stonecrop.value.getRecordById(currentDoctype.value, currentRecordId.value)\n\t\t\treturn record?.get('') || {}\n\t\t} catch {\n\t\t\treturn {}\n\t\t}\n\t},\n\tset(newData: Record<string, any>) {\n\t\tif (!stonecrop.value || !currentDoctype.value || !currentRecordId.value) {\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\t// Update each field in HST, which will automatically trigger field actions\n\t\t\tconst hstStore = stonecrop.value.getStore()\n\t\t\tfor (const [fieldname, value] of Object.entries(newData)) {\n\t\t\t\tconst fieldPath = `${currentDoctype.value}.${currentRecordId.value}.${fieldname}`\n\t\t\t\thstStore.set(fieldPath, value)\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('HST update failed:', error)\n\t\t}\n\t},\n})\n\n// HST-based form data management - field triggers are handled automatically by HST\n\n// Computed properties for current route context\nconst route = computed(() => unref(stonecrop.value?.registry.router?.currentRoute))\nconst router = computed(() => stonecrop.value?.registry.router)\nconst currentDoctype = computed(() => {\n\tif (!route.value) return ''\n\n\t// First check if we have actualDoctype in meta (from registered routes)\n\tif (route.value.meta?.actualDoctype) {\n\t\treturn route.value.meta.actualDoctype as string\n\t}\n\n\t// For named routes, use params.doctype\n\tif (route.value.params.doctype) {\n\t\treturn route.value.params.doctype as string\n\t}\n\n\t// For catch-all routes that haven't been registered yet, extract from path\n\tconst pathMatch = route.value.params.pathMatch as string[] | undefined\n\tif (pathMatch && pathMatch.length > 0) {\n\t\treturn pathMatch[0]\n\t}\n\n\treturn ''\n})\n\n// The route doctype for display and navigation (e.g., 'todo')\nconst routeDoctype = computed(() => {\n\tif (!route.value) return ''\n\n\t// Check route meta first\n\tif (route.value.meta?.doctype) {\n\t\treturn route.value.meta.doctype as string\n\t}\n\n\t// For named routes, use params.doctype\n\tif (route.value.params.doctype) {\n\t\treturn route.value.params.doctype as string\n\t}\n\n\t// For catch-all routes, extract from path\n\tconst pathMatch = route.value.params.pathMatch as string[] | undefined\n\tif (pathMatch && pathMatch.length > 0) {\n\t\treturn pathMatch[0]\n\t}\n\n\treturn ''\n})\n\nconst currentRecordId = computed(() => {\n\tif (!route.value) return ''\n\n\t// For named routes, use params.recordId\n\tif (route.value.params.recordId) {\n\t\treturn route.value.params.recordId as string\n\t}\n\n\t// For catch-all routes that haven't been registered yet, extract from path\n\tconst pathMatch = route.value.params.pathMatch as string[] | undefined\n\tif (pathMatch && pathMatch.length > 1) {\n\t\treturn pathMatch[1]\n\t}\n\n\treturn ''\n})\nconst isNewRecord = computed(() => currentRecordId.value?.startsWith('new-'))\n\n// Determine current view based on route\nconst currentView = computed(() => {\n\tif (!route.value) {\n\t\treturn 'doctypes'\n\t}\n\n\t// Home route\n\tif (route.value.name === 'home' || route.value.path === '/') {\n\t\treturn 'doctypes'\n\t}\n\n\t// Named routes from registered doctypes\n\tif (route.value.name && route.value.name !== 'catch-all') {\n\t\tconst routeName = route.value.name as string\n\t\tif (routeName.includes('form') || route.value.params.recordId) {\n\t\t\treturn 'record'\n\t\t} else if (routeName.includes('list') || route.value.params.doctype) {\n\t\t\treturn 'records'\n\t\t}\n\t}\n\n\t// Catch-all route - determine from path structure\n\tconst pathMatch = route.value.params.pathMatch as string[] | undefined\n\tif (pathMatch && pathMatch.length > 0) {\n\t\tconst view = pathMatch.length === 1 ? 'records' : 'record'\n\t\treturn view\n\t}\n\n\treturn 'doctypes'\n})\n\n// Computed properties (now that all helper functions are defined)\n// Helper function to get available transitions for current record\nconst getAvailableTransitions = () => {\n\tif (!stonecrop.value || !currentDoctype.value || !currentRecordId.value) {\n\t\treturn []\n\t}\n\n\ttry {\n\t\tconst registry = stonecrop.value.registry\n\t\tconst meta = registry.registry[currentDoctype.value]\n\n\t\tif (!meta?.workflow?.states) {\n\t\t\treturn []\n\t\t}\n\n\t\t// Get current FSM state (for now, use workflow initial state or 'editing')\n\t\t// In a full implementation, this would track actual FSM state\n\t\tconst currentState = isNewRecord.value ? 'creating' : 'editing'\n\t\tconst stateConfig = meta.workflow.states[currentState]\n\n\t\tif (!stateConfig?.on) {\n\t\t\treturn []\n\t\t}\n\n\t\t// Get available transitions from current state\n\t\tconst transitions = Object.keys(stateConfig.on)\n\n\t\t// Create action elements for each transition\n\t\tconst actionElements = transitions.map(transition => {\n\t\t\tconst targetState = stateConfig.on?.[transition]\n\t\t\tconst targetStateName = typeof targetState === 'string' ? targetState : 'unknown'\n\n\t\t\tconst actionFn = async () => {\n\t\t\t\tconst node = stonecrop.value?.getRecordById(currentDoctype.value, currentRecordId.value)\n\t\t\t\tif (node) {\n\t\t\t\t\tconst recordData = currentViewData.value || {}\n\t\t\t\t\tawait node.triggerTransition(transition, {\n\t\t\t\t\t\tcurrentState,\n\t\t\t\t\t\ttargetState: targetStateName,\n\t\t\t\t\t\tfsmContext: recordData,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst element = {\n\t\t\t\tlabel: `${transition} (→ ${targetStateName})`,\n\t\t\t\taction: actionFn,\n\t\t\t}\n\n\t\t\treturn element\n\t\t})\n\n\t\treturn actionElements\n\t} catch (error) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn('Error getting available transitions:', error)\n\t\treturn []\n\t}\n}\n\n// New component reactive properties// New component reactive properties\nconst actionElements = computed<ActionElements[]>(() => {\n\tconst elements: ActionElements[] = []\n\n\tswitch (currentView.value) {\n\t\tcase 'doctypes':\n\t\t\telements.push({\n\t\t\t\ttype: 'button',\n\t\t\t\tlabel: 'Refresh',\n\t\t\t\taction: () => {\n\t\t\t\t\t// Refresh doctypes\n\t\t\t\t\twindow.location.reload()\n\t\t\t\t},\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'records':\n\t\t\telements.push(\n\t\t\t\t{\n\t\t\t\t\ttype: 'button',\n\t\t\t\t\tlabel: 'New Record',\n\t\t\t\t\taction: () => void createNewRecord(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: 'button',\n\t\t\t\t\tlabel: 'Refresh',\n\t\t\t\t\taction: () => {\n\t\t\t\t\t\t// Refresh records\n\t\t\t\t\t\twindow.location.reload()\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t)\n\t\t\tbreak\n\t\tcase 'record': {\n\t\t\t// Add XState Transitions dropdown for record view\n\t\t\tconst transitionActions = getAvailableTransitions()\n\t\t\tif (transitionActions.length > 0) {\n\t\t\t\telements.push({\n\t\t\t\t\ttype: 'dropdown',\n\t\t\t\t\tlabel: 'Actions',\n\t\t\t\t\tactions: transitionActions,\n\t\t\t\t})\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn elements\n})\n\nconst navigationBreadcrumbs = computed(() => {\n\tconst breadcrumbs: { title: string; to: string }[] = []\n\n\tif (currentView.value === 'records' && routeDoctype.value) {\n\t\tbreadcrumbs.push(\n\t\t\t{ title: 'Home', to: '/' },\n\t\t\t{ title: formatDoctypeName(routeDoctype.value), to: `/${routeDoctype.value}` }\n\t\t)\n\t} else if (currentView.value === 'record' && routeDoctype.value) {\n\t\tbreadcrumbs.push(\n\t\t\t{ title: 'Home', to: '/' },\n\t\t\t{ title: formatDoctypeName(routeDoctype.value), to: `/${routeDoctype.value}` },\n\t\t\t{ title: isNewRecord.value ? 'New Record' : 'Edit Record', to: route.value?.fullPath || '' }\n\t\t)\n\t}\n\n\treturn breadcrumbs\n})\n\n// Command palette functionality\ntype Command = {\n\ttitle: string\n\tdescription: string\n\taction: () => void\n}\n\nconst searchCommands = (query: string): Command[] => {\n\tconst commands: Command[] = [\n\t\t{\n\t\t\ttitle: 'Go Home',\n\t\t\tdescription: 'Navigate to the home page',\n\t\t\taction: () => void router.value?.push('/'),\n\t\t},\n\t\t{\n\t\t\ttitle: 'Toggle Command Palette',\n\t\t\tdescription: 'Open/close the command palette',\n\t\t\taction: () => (commandPaletteOpen.value = !commandPaletteOpen.value),\n\t\t},\n\t]\n\n\t// Add doctype-specific commands\n\tif (routeDoctype.value) {\n\t\tcommands.push({\n\t\t\ttitle: `View ${formatDoctypeName(routeDoctype.value)} Records`,\n\t\t\tdescription: `Navigate to ${routeDoctype.value} list`,\n\t\t\taction: () => void router.value?.push(`/${routeDoctype.value}`),\n\t\t})\n\n\t\tcommands.push({\n\t\t\ttitle: `Create New ${formatDoctypeName(routeDoctype.value)}`,\n\t\t\tdescription: `Create a new ${routeDoctype.value} record`,\n\t\t\taction: () => void createNewRecord(),\n\t\t})\n\t}\n\n\t// Add available doctypes as commands\n\tavailableDoctypes.forEach(doctype => {\n\t\tcommands.push({\n\t\t\ttitle: `View ${formatDoctypeName(doctype)}`,\n\t\t\tdescription: `Navigate to ${doctype} list`,\n\t\t\taction: () => void router.value?.push(`/${doctype}`),\n\t\t})\n\t})\n\n\t// Filter commands based on query\n\tif (!query) return commands\n\n\treturn commands.filter(\n\t\tcmd =>\n\t\t\tcmd.title.toLowerCase().includes(query.toLowerCase()) ||\n\t\t\tcmd.description.toLowerCase().includes(query.toLowerCase())\n\t)\n}\n\nconst executeCommand = (command: Command) => {\n\tcommand.action()\n\tcommandPaletteOpen.value = false\n}\n\n// Helper functions - moved here to avoid \"before initialization\" errors\nconst formatDoctypeName = (doctype: string): string => {\n\treturn doctype\n\t\t.split('-')\n\t\t.map(word => word.charAt(0).toUpperCase() + word.slice(1))\n\t\t.join(' ')\n}\n\nconst getRecordCount = (doctype: string): number => {\n\tif (!stonecrop.value) return 0\n\tconst recordIds = stonecrop.value.getRecordIds(doctype)\n\treturn recordIds.length\n}\n\nconst navigateToDoctype = async (doctype: string) => {\n\tawait router.value?.push(`/${doctype}`)\n}\n\nconst openRecord = async (recordId: string) => {\n\tawait router.value?.push(`/${routeDoctype.value}/${recordId}`)\n}\n\nconst createNewRecord = async () => {\n\tconst newId = `new-${Date.now()}`\n\tawait router.value?.push(`/${routeDoctype.value}/${newId}`)\n}\n\n// Doctype metadata loader - simplified since router handles most of this\nconst loadDoctypeMetadata = (doctype: string) => {\n\tif (!stonecrop.value) return\n\n\t// Ensure the doctype structure exists in HST\n\t// The router should have already loaded the metadata, but this ensures the HST structure exists\n\ttry {\n\t\tstonecrop.value.records(doctype)\n\t} catch (error) {\n\t\t// Silent error handling - structure will be created if needed\n\t}\n}\n\n// Schema generator functions - moved here to be available to computed properties\nconst getDoctypesSchema = (): SchemaTypes[] => {\n\tif (!availableDoctypes.length) return []\n\n\tconst rows = availableDoctypes.map(doctype => ({\n\t\tid: doctype,\n\t\tdoctype,\n\t\tdisplay_name: formatDoctypeName(doctype),\n\t\trecord_count: getRecordCount(doctype),\n\t\tactions: 'View Records',\n\t}))\n\n\treturn [\n\t\t{\n\t\t\tfieldname: 'header',\n\t\t\tcomponent: 'div',\n\t\t\tvalue: `\n\t\t\t\t<div class=\"view-header\">\n\t\t\t\t\t<h1>Available Doctypes</h1>\n\t\t\t\t</div>\n\t\t\t`,\n\t\t},\n\t\t{\n\t\t\tfieldname: 'doctypes_table',\n\t\t\tcomponent: 'ATable',\n\t\t\tcolumns: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Doctype',\n\t\t\t\t\tname: 'doctype',\n\t\t\t\t\tfieldtype: 'Data',\n\t\t\t\t\talign: 'left',\n\t\t\t\t\tedit: false,\n\t\t\t\t\twidth: '20ch',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Name',\n\t\t\t\t\tname: 'display_name',\n\t\t\t\t\tfieldtype: 'Data',\n\t\t\t\t\talign: 'left',\n\t\t\t\t\tedit: false,\n\t\t\t\t\twidth: '30ch',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Records',\n\t\t\t\t\tname: 'record_count',\n\t\t\t\t\tfieldtype: 'Int',\n\t\t\t\t\talign: 'center',\n\t\t\t\t\tedit: false,\n\t\t\t\t\twidth: '15ch',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Actions',\n\t\t\t\t\tname: 'actions',\n\t\t\t\t\tfieldtype: 'Data',\n\t\t\t\t\talign: 'center',\n\t\t\t\t\tedit: false,\n\t\t\t\t\twidth: '20ch',\n\t\t\t\t},\n\t\t\t] as TableColumn[],\n\t\t\tconfig: {\n\t\t\t\tview: 'list',\n\t\t\t\tfullWidth: true,\n\t\t\t} as TableConfig,\n\t\t\trows,\n\t\t},\n\t]\n}\n\nconst getRecordsSchema = (): SchemaTypes[] => {\n\tif (!currentDoctype.value) return []\n\tif (!stonecrop.value) return []\n\n\tconst records = getRecords()\n\tconst columns = getColumns()\n\n\t// If no columns are available, show a loading or empty state\n\tif (columns.length === 0) {\n\t\treturn [\n\t\t\t{\n\t\t\t\tfieldname: 'header',\n\t\t\t\tcomponent: 'div',\n\t\t\t\tvalue: `\n\t\t\t\t\t<div class=\"view-header\">\n\t\t\t\t\t\t<nav class=\"breadcrumbs\">\n\t\t\t\t\t\t\t<a href=\"/\">Home</a>\n\t\t\t\t\t\t\t<span class=\"separator\">/</span>\n\t\t\t\t\t\t\t<span class=\"current\">${formatDoctypeName(routeDoctype.value || currentDoctype.value)}</span>\n\t\t\t\t\t\t</nav>\n\t\t\t\t\t\t<h1>${formatDoctypeName(routeDoctype.value || currentDoctype.value)} Records</h1>\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tfieldname: 'loading',\n\t\t\t\tcomponent: 'div',\n\t\t\t\tvalue: `\n\t\t\t\t\t<div class=\"loading-state\">\n\t\t\t\t\t\t<p>Loading ${formatDoctypeName(routeDoctype.value || currentDoctype.value)} schema...</p>\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t},\n\t\t]\n\t}\n\n\tconst rows = records.map((record: any) => ({\n\t\t...record,\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\tid: record.id || '',\n\t\tactions: 'Edit | Delete',\n\t}))\n\n\treturn [\n\t\t{\n\t\t\tfieldname: 'header',\n\t\t\tcomponent: 'div',\n\t\t\tvalue: `\n\t\t\t\t<div class=\"view-header\">\n\t\t\t\t\t<nav class=\"breadcrumbs\">\n\t\t\t\t\t\t<a href=\"/\">Home</a>\n\t\t\t\t\t\t<span class=\"separator\">/</span>\n\t\t\t\t\t\t<span class=\"current\">${formatDoctypeName(routeDoctype.value || currentDoctype.value)}</span>\n\t\t\t\t\t</nav>\n\t\t\t\t\t<h1>${formatDoctypeName(routeDoctype.value || currentDoctype.value)} Records</h1>\n\t\t\t\t</div>\n\t\t\t`,\n\t\t},\n\t\t{\n\t\t\tfieldname: 'actions',\n\t\t\tcomponent: 'div',\n\t\t\tvalue: `\n\t\t\t\t<div class=\"view-actions\">\n\t\t\t\t\t<button class=\"btn-primary\" data-action=\"create\">\n\t\t\t\t\t\tNew ${formatDoctypeName(routeDoctype.value || currentDoctype.value)}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t`,\n\t\t},\n\t\t...(records.length === 0\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tfieldname: 'empty_state',\n\t\t\t\t\t\tcomponent: 'div',\n\t\t\t\t\t\tvalue: `\n\t\t\t\t\t\t\t<div class=\"empty-state\">\n\t\t\t\t\t\t\t\t<p>No ${routeDoctype.value || currentDoctype.value} records found.</p>\n\t\t\t\t\t\t\t\t<button class=\"btn-primary\" data-action=\"create\">\n\t\t\t\t\t\t\t\t\tCreate First Record\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`,\n\t\t\t\t\t},\n\t\t\t ]\n\t\t\t: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfieldname: 'records_table',\n\t\t\t\t\t\tcomponent: 'ATable',\n\t\t\t\t\t\tcolumns: [\n\t\t\t\t\t\t\t...columns.map(col => ({\n\t\t\t\t\t\t\t\tlabel: col.label,\n\t\t\t\t\t\t\t\tname: col.fieldname,\n\t\t\t\t\t\t\t\tfieldtype: col.fieldtype,\n\t\t\t\t\t\t\t\talign: 'left',\n\t\t\t\t\t\t\t\tedit: false,\n\t\t\t\t\t\t\t\twidth: '20ch',\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlabel: 'Actions',\n\t\t\t\t\t\t\t\tname: 'actions',\n\t\t\t\t\t\t\t\tfieldtype: 'Data',\n\t\t\t\t\t\t\t\talign: 'center',\n\t\t\t\t\t\t\t\tedit: false,\n\t\t\t\t\t\t\t\twidth: '20ch',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t] as TableColumn[],\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tview: 'list',\n\t\t\t\t\t\t\tfullWidth: true,\n\t\t\t\t\t\t} as TableConfig,\n\t\t\t\t\t\trows,\n\t\t\t\t\t},\n\t\t\t ]),\n\t]\n}\n\nconst getRecordFormSchema = (): SchemaTypes[] => {\n\tif (!currentDoctype.value) return []\n\tif (!stonecrop.value) return []\n\n\ttry {\n\t\tconst registry = stonecrop.value?.registry\n\t\tconst meta = registry?.registry[currentDoctype.value]\n\n\t\tif (!meta?.schema) {\n\t\t\t// Return loading state if schema isn't available yet\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tfieldname: 'header',\n\t\t\t\t\tcomponent: 'div',\n\t\t\t\t\tvalue: `\n\t\t\t\t\t\t<div class=\"view-header\">\n\t\t\t\t\t\t\t<nav class=\"breadcrumbs\">\n\t\t\t\t\t\t\t\t<a href=\"/\">Home</a>\n\t\t\t\t\t\t\t\t<span class=\"separator\">/</span>\n\t\t\t\t\t\t\t\t<a href=\"/${routeDoctype.value || currentDoctype.value}\">${formatDoctypeName(\n\t\t\t\t\t\trouteDoctype.value || currentDoctype.value\n\t\t\t\t\t)}</a>\n\t\t\t\t\t\t\t\t<span class=\"separator\">/</span>\n\t\t\t\t\t\t\t\t<span class=\"current\">${isNewRecord.value ? 'New Record' : currentRecordId.value}</span>\n\t\t\t\t\t\t\t</nav>\n\t\t\t\t\t\t\t<h1>${\n\t\t\t\t\t\t\t\tisNewRecord.value\n\t\t\t\t\t\t\t\t\t? `New ${formatDoctypeName(routeDoctype.value || currentDoctype.value)}`\n\t\t\t\t\t\t\t\t\t: `Edit ${formatDoctypeName(routeDoctype.value || currentDoctype.value)}`\n\t\t\t\t\t\t\t}</h1>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfieldname: 'loading',\n\t\t\t\t\tcomponent: 'div',\n\t\t\t\t\tvalue: `\n\t\t\t\t\t\t<div class=\"loading-state\">\n\t\t\t\t\t\t\t<p>Loading ${formatDoctypeName(routeDoctype.value || currentDoctype.value)} form...</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`,\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\n\t\tconst schemaArray = 'toArray' in meta.schema ? meta.schema.toArray() : meta.schema\n\t\tconst currentRecord = getCurrentRecord()\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tfieldname: 'header',\n\t\t\t\tcomponent: 'div',\n\t\t\t\tvalue: `\n\t\t\t\t\t<div class=\"view-header\">\n\t\t\t\t\t\t<nav class=\"breadcrumbs\">\n\t\t\t\t\t\t\t<a href=\"/\">Home</a>\n\t\t\t\t\t\t\t<span class=\"separator\">/</span>\n\t\t\t\t\t\t\t<a href=\"/${routeDoctype.value || currentDoctype.value}\">${formatDoctypeName(\n\t\t\t\t\trouteDoctype.value || currentDoctype.value\n\t\t\t\t)}</a>\n\t\t\t\t\t\t\t<span class=\"separator\">/</span>\n\t\t\t\t\t\t\t<span class=\"current\">${isNewRecord.value ? 'New Record' : currentRecordId.value}</span>\n\t\t\t\t\t\t</nav>\n\t\t\t\t\t\t<h1>\n\t\t\t\t\t\t\t${\n\t\t\t\t\t\t\t\tisNewRecord.value\n\t\t\t\t\t\t\t\t\t? `New ${formatDoctypeName(routeDoctype.value || currentDoctype.value)}`\n\t\t\t\t\t\t\t\t\t: `Edit ${formatDoctypeName(routeDoctype.value || currentDoctype.value)}`\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</h1>\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tfieldname: 'actions',\n\t\t\t\tcomponent: 'div',\n\t\t\t\tvalue: `\n\t\t\t\t\t<div class=\"view-actions\">\n\t\t\t\t\t\t<button class=\"btn-primary\" data-action=\"save\" ${saving.value ? 'disabled' : ''}>\n\t\t\t\t\t\t\t${saving.value ? 'Saving...' : 'Save'}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button class=\"btn-secondary\" data-action=\"cancel\">Cancel</button>\n\t\t\t\t\t\t${!isNewRecord.value ? '<button class=\"btn-danger\" data-action=\"delete\">Delete</button>' : ''}\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t},\n\t\t\t...schemaArray.map(field => ({\n\t\t\t\t...field,\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tvalue: currentRecord[field.fieldname] || '',\n\t\t\t})),\n\t\t]\n\t} catch (error) {\n\t\treturn [\n\t\t\t{\n\t\t\t\tfieldname: 'error',\n\t\t\t\tcomponent: 'div',\n\t\t\t\tvalue: `\n\t\t\t\t\t<div class=\"error-state\">\n\t\t\t\t\t\t<p>Unable to load form schema for ${formatDoctypeName(routeDoctype.value || currentDoctype.value)}</p>\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t},\n\t\t]\n\t}\n}\n\n// Additional data helper functions\nconst getRecords = () => {\n\tif (!stonecrop.value || !currentDoctype.value) {\n\t\treturn []\n\t}\n\n\tconst recordsNode = stonecrop.value.records(currentDoctype.value)\n\tconst recordsData = recordsNode?.get('')\n\n\tif (recordsData && typeof recordsData === 'object' && !Array.isArray(recordsData)) {\n\t\treturn Object.values(recordsData as Record<string, any>)\n\t}\n\n\treturn []\n}\n\nconst getColumns = () => {\n\tif (!stonecrop.value || !currentDoctype.value) return []\n\n\ttry {\n\t\tconst registry = stonecrop.value.registry\n\t\tconst meta = registry.registry[currentDoctype.value]\n\n\t\tif (meta?.schema) {\n\t\t\tconst schemaArray = 'toArray' in meta.schema ? meta.schema.toArray() : meta.schema\n\t\t\treturn schemaArray.map(field => ({\n\t\t\t\tfieldname: field.fieldname,\n\t\t\t\tlabel: ('label' in field && field.label) || field.fieldname,\n\t\t\t\tfieldtype: ('fieldtype' in field && field.fieldtype) || 'Data',\n\t\t\t}))\n\t\t}\n\t} catch (error) {\n\t\t// Error getting schema - return empty array\n\t}\n\n\treturn []\n}\n\nconst getCurrentRecord = () => {\n\tif (!stonecrop.value || !currentDoctype.value || isNewRecord.value) return {}\n\n\tconst record = stonecrop.value.getRecordById(currentDoctype.value, currentRecordId.value)\n\treturn record?.get('') || {}\n}\n\n// Schema for different views - defined here after all helper functions are available\nconst currentViewSchema = computed<SchemaTypes[]>(() => {\n\tswitch (currentView.value) {\n\t\tcase 'doctypes':\n\t\t\treturn getDoctypesSchema()\n\t\tcase 'records':\n\t\t\treturn getRecordsSchema()\n\t\tcase 'record':\n\t\t\treturn getRecordFormSchema()\n\t\tdefault:\n\t\t\treturn []\n\t}\n})\n\n// Writable schema for AForm v-model binding\nconst writableSchema = ref<SchemaTypes[]>([])\n\n// Sync computed schema to writable schema when it changes\nwatch(\n\tcurrentViewSchema,\n\tnewSchema => {\n\t\twritableSchema.value = [...newSchema]\n\t},\n\t{ immediate: true, deep: true }\n)\n\n// Watch for field changes in writable schema and sync to HST\nwatch(\n\twritableSchema,\n\tnewSchema => {\n\t\tif (!stonecrop.value || !currentDoctype.value || !currentRecordId.value || isNewRecord.value) {\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\tconst hstStore = stonecrop.value.getStore()\n\n\t\t\t// Process form field updates from schema\n\t\t\tnewSchema.forEach(field => {\n\t\t\t\t// Only process fields that have a fieldname and value (form fields)\n\t\t\t\tif (\n\t\t\t\t\tfield.fieldname &&\n\t\t\t\t\t'value' in field &&\n\t\t\t\t\t!['header', 'actions', 'loading', 'error'].includes(field.fieldname)\n\t\t\t\t) {\n\t\t\t\t\tconst fieldPath = `${currentDoctype.value}.${currentRecordId.value}.${field.fieldname}`\n\t\t\t\t\tconst currentValue = hstStore.has(fieldPath) ? hstStore.get(fieldPath) : undefined\n\n\t\t\t\t\t// Only update if value actually changed to avoid infinite loops\n\t\t\t\t\tif (currentValue !== field.value) {\n\t\t\t\t\t\thstStore.set(fieldPath, field.value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('HST schema sync failed:', error)\n\t\t}\n\t},\n\t{ deep: true }\n)\n\n// Action handlers (will be triggered by button clicks in the UI)\nconst handleSave = async () => {\n\t// eslint-disable-next-line no-console\n\tif (!stonecrop.value) return\n\n\tsaving.value = true\n\n\ttry {\n\t\tconst formData = currentViewData.value || {}\n\n\t\tif (isNewRecord.value) {\n\t\t\tconst newId = `record-${Date.now()}`\n\t\t\tconst recordData = { id: newId, ...formData }\n\n\t\t\tstonecrop.value.addRecord(currentDoctype.value, newId, recordData)\n\n\t\t\t// Trigger SAVE transition for new record\n\t\t\tconst node = stonecrop.value.getRecordById(currentDoctype.value, newId)\n\t\t\tif (node) {\n\t\t\t\tawait node.triggerTransition('SAVE', {\n\t\t\t\t\tcurrentState: 'creating',\n\t\t\t\t\ttargetState: 'saved',\n\t\t\t\t\tfsmContext: recordData,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tawait router.value?.replace(`/${routeDoctype.value}/${newId}`)\n\t\t} else {\n\t\t\tconst recordData = { id: currentRecordId.value, ...formData }\n\t\t\tstonecrop.value.addRecord(currentDoctype.value, currentRecordId.value, recordData)\n\n\t\t\t// Trigger SAVE transition for existing record\n\t\t\tconst node = stonecrop.value.getRecordById(currentDoctype.value, currentRecordId.value)\n\t\t\tif (node) {\n\t\t\t\tawait node.triggerTransition('SAVE', {\n\t\t\t\t\tcurrentState: 'editing',\n\t\t\t\t\ttargetState: 'saved',\n\t\t\t\t\tfsmContext: recordData,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\t// Silently handle error\n\t} finally {\n\t\tsaving.value = false\n\t}\n}\n\nconst handleCancel = async () => {\n\tif (isNewRecord.value) {\n\t\t// For new records, we don't have a specific record node yet\n\t\t// Just navigate back without triggering transition\n\t\tawait router.value?.push(`/${routeDoctype.value}`)\n\t} else {\n\t\t// Trigger CANCEL transition for existing record\n\t\tif (stonecrop.value) {\n\t\t\tconst node = stonecrop.value.getRecordById(currentDoctype.value, currentRecordId.value)\n\t\t\tif (node) {\n\t\t\t\tawait node.triggerTransition('CANCEL', {\n\t\t\t\t\tcurrentState: 'editing',\n\t\t\t\t\ttargetState: 'cancelled',\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\t// Reload current record data\n\t\tloadRecordData()\n\t}\n}\n\nconst handleActionClick = (label: string, action: (() => void | Promise<void>) | undefined) => {\n\t// eslint-disable-next-line no-console\n\tif (action) {\n\t\tvoid action()\n\t}\n}\n\nconst handleDelete = async (recordId?: string) => {\n\tif (!stonecrop.value) return\n\n\tconst targetRecordId = recordId || currentRecordId.value\n\tif (!targetRecordId) return\n\n\tif (confirm('Are you sure you want to delete this record?')) {\n\t\t// Trigger DELETE transition before removing\n\t\tconst node = stonecrop.value.getRecordById(currentDoctype.value, targetRecordId)\n\t\tif (node) {\n\t\t\tawait node.triggerTransition('DELETE', {\n\t\t\t\tcurrentState: 'editing',\n\t\t\t\ttargetState: 'deleted',\n\t\t\t})\n\t\t}\n\n\t\tstonecrop.value.removeRecord(currentDoctype.value, targetRecordId)\n\n\t\tif (currentView.value === 'record') {\n\t\t\tawait router.value?.push(`/${routeDoctype.value}`)\n\t\t}\n\t}\n}\n\n// Event handlers\nconst handleClick = async (event: Event) => {\n\tconst target = event.target as HTMLElement\n\tconst action = target.getAttribute('data-action')\n\n\tif (action) {\n\t\tswitch (action) {\n\t\t\tcase 'create':\n\t\t\t\tawait createNewRecord()\n\t\t\t\tbreak\n\t\t\tcase 'save':\n\t\t\t\tawait handleSave()\n\t\t\t\tbreak\n\t\t\tcase 'cancel':\n\t\t\t\tawait handleCancel()\n\t\t\t\tbreak\n\t\t\tcase 'delete':\n\t\t\t\tawait handleDelete()\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\t// Handle table cell clicks for actions\n\tconst cell = target.closest('td, th')\n\tif (cell) {\n\t\tconst cellText = cell.textContent?.trim()\n\t\tconst row = cell.closest('tr')\n\n\t\tif (cellText === 'View Records' && row) {\n\t\t\t// Get the doctype from the row data\n\t\t\tconst cells = row.querySelectorAll('td')\n\t\t\tif (cells.length > 0) {\n\t\t\t\tconst doctypeCell = cells[1] // Assuming doctype is in second column (first column is index)\n\t\t\t\tconst doctype = doctypeCell.textContent?.trim()\n\t\t\t\tif (doctype) {\n\t\t\t\t\tawait navigateToDoctype(doctype)\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (cellText?.includes('Edit') && row) {\n\t\t\t// Get the record ID from the row\n\t\t\tconst cells = row.querySelectorAll('td')\n\t\t\tif (cells.length > 0) {\n\t\t\t\tconst idCell = cells[0] // Assuming ID is in first column\n\t\t\t\tconst recordId = idCell.textContent?.trim()\n\t\t\t\tif (recordId) {\n\t\t\t\t\tawait openRecord(recordId)\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (cellText?.includes('Delete') && row) {\n\t\t\t// Get the record ID from the row\n\t\t\tconst cells = row.querySelectorAll('td')\n\t\t\tif (cells.length > 0) {\n\t\t\t\tconst idCell = cells[0] // Assuming ID is in first column\n\t\t\t\tconst recordId = idCell.textContent?.trim()\n\t\t\t\tif (recordId) {\n\t\t\t\t\tawait handleDelete(recordId)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Watch for route changes to load appropriate data\nwatch(\n\t[currentView, currentDoctype, currentRecordId],\n\t() => {\n\t\tif (currentView.value === 'record') {\n\t\t\tloadRecordData()\n\t\t}\n\t},\n\t{ immediate: true }\n)\n\n// Watch for Stonecrop instance to become available\nwatch(\n\tstonecrop,\n\tnewStonecrop => {\n\t\tif (newStonecrop) {\n\t\t\t// Force a re-evaluation of the current view schema when Stonecrop becomes available\n\t\t\t// This is handled automatically by the reactive computed properties\n\t\t}\n\t},\n\t{ immediate: true }\n)\n\n// Watch for when we need to load data for records view\nwatch(\n\t[currentView, currentDoctype, stonecrop],\n\t([view, doctype, stonecropInstance]) => {\n\t\tif (view === 'records' && doctype && stonecropInstance) {\n\t\t\t// Ensure doctype metadata is loaded\n\t\t\tloadDoctypeMetadata(doctype)\n\t\t}\n\t},\n\t{ immediate: true }\n)\n\nconst loadRecordData = () => {\n\tif (!stonecrop.value || !currentDoctype.value) return\n\n\tloading.value = true\n\n\ttry {\n\t\tif (!isNewRecord.value) {\n\t\t\t// For existing records, ensure the record exists in HST\n\t\t\t// The computed currentViewData will automatically read from HST\n\t\t\tstonecrop.value.getRecordById(currentDoctype.value, currentRecordId.value)\n\t\t}\n\t\t// For new records, currentViewData computed property will return {} automatically\n\t} catch (error) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn('Error loading record data:', error)\n\t} finally {\n\t\tloading.value = false\n\t}\n}\n\n// Provide methods for action components\nconst desktopMethods = {\n\tnavigateToDoctype,\n\topenRecord,\n\tcreateNewRecord,\n\thandleSave,\n\thandleCancel,\n\thandleDelete,\n}\n\nprovide('desktopMethods', desktopMethods)\n\n// Register action components in Vue app\nonMounted(() => {\n\t// Wait a tick for stonecrop to be ready, then load initial data\n\tvoid nextTick(() => {\n\t\tif (currentView.value === 'records' && currentDoctype.value && stonecrop.value) {\n\t\t\tloadDoctypeMetadata(currentDoctype.value)\n\t\t}\n\t})\n\n\t// Components will be automatically registered via the global component system\n\n\t// Add keyboard shortcuts\n\tconst handleKeydown = (event: KeyboardEvent) => {\n\t\t// Ctrl+K or Cmd+K to open command palette\n\t\tif ((event.ctrlKey || event.metaKey) && event.key === 'k') {\n\t\t\tevent.preventDefault()\n\t\t\tcommandPaletteOpen.value = true\n\t\t}\n\t\t// Escape to close command palette\n\t\tif (event.key === 'Escape' && commandPaletteOpen.value) {\n\t\t\tcommandPaletteOpen.value = false\n\t\t}\n\t}\n\n\tdocument.addEventListener('keydown', handleKeydown)\n\n\t// Cleanup event listener on unmount\n\treturn () => {\n\t\tdocument.removeEventListener('keydown', handleKeydown)\n\t}\n})\n</script>\n","import { App, type Plugin } from 'vue'\n\nimport ActionSet from '../components/ActionSet.vue'\nimport CommandPalette from '../components/CommandPalette.vue'\nimport Desktop from '../components/Desktop.vue'\nimport SheetNav from '../components/SheetNav.vue'\n\n/**\n * This is the main plugin that will be used to register all the desktop components.\n * @public\n */\nconst plugin: Plugin = {\n\tinstall: (app: App) => {\n\t\tapp.component('ActionSet', ActionSet)\n\t\tapp.component('CommandPalette', CommandPalette)\n\t\tapp.component('Desktop', Desktop)\n\t\tapp.component('SheetNav', SheetNav)\n\t},\n}\n\nexport default plugin\n"],"names":["emit","__emit","dropdownStates","ref","isOpen","timeoutId","hover","closeClicked","onMounted","closeDropdowns","onHover","onHoverLeave","toggleDropdown","index","showDropdown","handleClick","action","label","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_1","_cache","$event","_openBlock","_Fragment","_renderList","__props","el","_toDisplayString","_hoisted_2","_hoisted_3","_hoisted_4","_withDirectives","_hoisted_5","_hoisted_6","item","itemIndex","_hoisted_7","_hoisted_9","_vShow","query","selectedIndex","inputRef","useTemplateRef","results","computed","watch","nextTick","closeModal","handleKeydown","e","selectResult","result","_createBlock","_Teleport","_createVNode","_Transition","_renderSlot","_ctx","te","G","me","n","Pe","Y","le","He","t","r","o","se","be","ze","Te","Xe","et","ee","Ie","Ee","Ne","ot","Ce","ke","s","i","a","c","f","g","$e","B","b","A","ae","W","$","_e","d","v","k","x","N","D","p","R","de","P","F","S","C","w","T","L","m","y","E","O","_","U","ye","Ye","ce","Fe","it","Ae","oe","Me","Ue","at","ct","lt","Je","ut","je","tt","ft","qe","dt","Oe","pt","ht","gt","vt","yt","Be","mt","Q","St","q","re","rt","he","ge","bt","wt","Et","Ot","Le","At","We","j","M","Pt","Re","ve","$t","pe","u","l","h","I","V","H","ue","K","Ve","ne","Se","Dt","Ke","Wt","J","xe","Z","X","we","Qe","Tt","De","Ze","Lt","nt","qn","ln","oo","To","mn","Il","xt","Al","Ml","da","fa","va","ma","fe","an","wn","breadcrumbsVisibile","searchVisible","searchText","rotateHideTabIcon","toggleBreadcrumbs","toggleSearch","handleSearchInput","event","handleSearch","navigateHome","_component_router_link","_withKeys","breadcrumb","_createTextVNode","stonecrop","useStonecrop","loading","saving","commandPaletteOpen","currentViewData","currentDoctype","currentRecordId","newData","hstStore","fieldname","value","fieldPath","error","route","unref","router","pathMatch","routeDoctype","isNewRecord","currentView","routeName","getAvailableTransitions","meta","currentState","stateConfig","transition","targetState","targetStateName","actionFn","node","recordData","actionElements","elements","createNewRecord","transitionActions","navigationBreadcrumbs","breadcrumbs","formatDoctypeName","searchCommands","commands","doctype","cmd","executeCommand","command","word","getRecordCount","navigateToDoctype","openRecord","recordId","newId","loadDoctypeMetadata","getDoctypesSchema","rows","getRecordsSchema","records","getRecords","columns","getColumns","record","col","getRecordFormSchema","schemaArray","currentRecord","getCurrentRecord","field","recordsData","currentViewSchema","writableSchema","newSchema","handleSave","formData","handleCancel","loadRecordData","handleActionClick","handleDelete","targetRecordId","target","cell","cellText","row","cells","newStonecrop","view","stonecropInstance","desktopMethods","provide","ActionSet","_unref","AForm","SheetNav","CommandPalette","_withCtx","plugin","app","Desktop"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"desktop.umd.cjs","sources":["../src/components/ActionSet.vue","../src/components/CommandPalette.vue","../../stonecrop/dist/stonecrop.js","../../aform/dist/aform.js","../src/components/SheetNav.vue","../src/components/Desktop.vue","../src/plugins/index.ts"],"sourcesContent":["<template>\n\t<div\n\t\t:class=\"{ 'open-set': isOpen, 'hovered-and-closed': closeClicked }\"\n\t\tclass=\"action-set collapse\"\n\t\t@mouseover=\"onHover\"\n\t\t@mouseleave=\"onHoverLeave\">\n\t\t<div class=\"action-menu-icon\">\n\t\t\t<div id=\"chevron\" @click=\"closeClicked = !closeClicked\">\n\t\t\t\t<svg\n\t\t\t\t\tid=\"Layer_1\"\n\t\t\t\t\tclass=\"leftBar\"\n\t\t\t\t\tversion=\"1.1\"\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\t\t\t\t\tx=\"0px\"\n\t\t\t\t\ty=\"0px\"\n\t\t\t\t\tviewBox=\"0 0 100 100\"\n\t\t\t\t\txml:space=\"preserve\"\n\t\t\t\t\twidth=\"50\"\n\t\t\t\t\theight=\"50\">\n\t\t\t\t\t<polygon points=\"54.2,33.4 29.2,58.8 25,54.6 50,29.2 \" />\n\t\t\t\t</svg>\n\n\t\t\t\t<svg\n\t\t\t\t\tid=\"Layer_1\"\n\t\t\t\t\tclass=\"rightBar\"\n\t\t\t\t\tversion=\"1.1\"\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\t\t\t\t\tx=\"0px\"\n\t\t\t\t\ty=\"0px\"\n\t\t\t\t\tviewBox=\"0 0 100 100\"\n\t\t\t\t\txml:space=\"preserve\"\n\t\t\t\t\twidth=\"50\"\n\t\t\t\t\theight=\"50\">\n\t\t\t\t\t<polygon points=\"70.8,58.8 45.8,33.4 50,29.2 75,54.6 \" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t\t<div style=\"margin-right: 30px\"></div>\n\t\t<div v-for=\"(el, index) in elements\" :key=\"el.label\" class=\"action-element\">\n\t\t\t<button\n\t\t\t\tv-if=\"el.type == 'button'\"\n\t\t\t\t:disabled=\"el.disabled\"\n\t\t\t\tclass=\"button-default\"\n\t\t\t\t@click=\"handleClick(el.action, el.label)\">\n\t\t\t\t{{ el.label }}\n\t\t\t</button>\n\t\t\t<div v-if=\"el.type == 'dropdown'\">\n\t\t\t\t<button class=\"button-default\" @click=\"toggleDropdown(index)\">{{ el.label }}</button>\n\t\t\t\t<div v-show=\"dropdownStates[index]\" class=\"dropdown-container\">\n\t\t\t\t\t<div class=\"dropdown\">\n\t\t\t\t\t\t<div v-for=\"(item, itemIndex) in el.actions\" :key=\"item.label\">\n\t\t\t\t\t\t\t<button v-if=\"item.action != null\" class=\"dropdown-item\" @click=\"handleClick(item.action, item.label)\">\n\t\t\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<a v-else-if=\"item.link != null\" :href=\"item.link\"\n\t\t\t\t\t\t\t\t><button class=\"dropdown-item\">{{ item.label }}</button></a\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue'\n\nimport type { ActionElements } from '../types'\n\nconst { elements = [] } = defineProps<{ elements?: ActionElements[] }>()\nconst emit = defineEmits<{\n\tactionClick: [label: string, action: (() => void | Promise<void>) | undefined]\n}>()\n\n// Track dropdown open state separately (index -> boolean)\nconst dropdownStates = ref<Record<number, boolean>>({})\n\nconst isOpen = ref(false)\nconst timeoutId = ref<number>(-1)\nconst hover = ref(false)\nconst closeClicked = ref(false)\n\nonMounted(() => {\n\tcloseDropdowns()\n})\n\nconst closeDropdowns = () => {\n\tdropdownStates.value = {}\n}\n\nconst onHover = () => {\n\thover.value = true\n\ttimeoutId.value = setTimeout(() => {\n\t\tif (hover.value) {\n\t\t\tisOpen.value = true\n\t\t}\n\t}, 500)\n}\n\nconst onHoverLeave = () => {\n\thover.value = false\n\tcloseClicked.value = false\n\tclearTimeout(timeoutId.value)\n\tisOpen.value = false\n}\n\nconst toggleDropdown = (index: number) => {\n\tconst showDropdown = !dropdownStates.value[index]\n\tcloseDropdowns()\n\tif (showDropdown) {\n\t\tdropdownStates.value[index] = true\n\t}\n}\n\nconst handleClick = (action: (() => void | Promise<void>) | undefined, label: string) => {\n\t// Emit event to parent - parent will handle execution\n\temit('actionClick', label, action)\n}\n</script>\n\n<style scoped>\n#chevron {\n\tposition: relative;\n\ttransform: rotate(90deg);\n}\n\n.leftBar,\n.rightBar {\n\ttransition-duration: 0.225s;\n\ttransition-property: transform;\n}\n\n.leftBar,\n.action-set.collapse.hovered-and-closed:hover .leftBar {\n\ttransform-origin: 33.4% 50%;\n\ttransform: rotate(90deg);\n}\n\n.rightBar,\n.action-set.collapse.hovered-and-closed:hover .rightBar {\n\ttransform-origin: 67% 50%;\n\ttransform: rotate(-90deg);\n}\n\n.rightBar {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n}\n\n.action-set.collapse:hover .leftBar {\n\ttransform: rotate(0);\n}\n\n.action-set.collapse:hover .rightBar {\n\ttransform: rotate(0);\n}\n\n.action-set {\n\tposition: fixed;\n\ttop: 10px;\n\tright: 10px;\n\tpadding: 20px;\n\tbox-shadow: 0px 1px 2px rgba(25, 39, 52, 0.05), 0px 0px 4px rgba(25, 39, 52, 0.1);\n\tborder-radius: 10px;\n\tdisplay: flex;\n\tflex-direction: row-reverse;\n\tbackground-color: white;\n\toverflow: hidden;\n\tz-index: 1001; /* Above SheetNav (100) and operation log button (999) */\n}\n\n.action-menu-icon {\n\tposition: absolute;\n\ttop: 6px;\n\tright: 4px;\n}\n\n.action-menu-icon svg {\n\tfill: #333333;\n}\n\n.action-set.collapse,\n.action-set.collapse.hovered-and-closed:hover {\n\tmax-width: 25px;\n\toverflow: hidden;\n\n\t-webkit-transition: max-width 0.5s ease-in-out;\n\t-moz-transition: max-width 0.5s ease-in-out;\n\t-o-transition: max-width 0.5s ease-in-out;\n\ttransition: max-width 0.5s ease-in-out;\n}\n\n.action-set.collapse .action-element,\n.action-set.collapse.hovered-and-closed:hover .action-element {\n\topacity: 0;\n\t-webkit-transition: opacity 0.25s ease-in-out;\n\t-moz-transition: opacity 0.25s ease-in-out;\n\t-o-transition: opacity 0.25s ease-in-out;\n\ttransition: opacity 0.25s ease-in-out;\n\ttransition-delay: 0s;\n}\n\n.action-set.collapse:hover {\n\tmax-width: 500px;\n}\n\n.action-set.collapse.open-set:hover {\n\toverflow: visible !important;\n}\n\n.action-set.collapse.hovered-and-closed:hover .action-element {\n\topacity: 0 !important;\n\t/* transition-delay: 0.5s; */\n}\n\n.action-set.collapse:hover .action-element {\n\topacity: 100 !important;\n\t/* transition-delay: 0.5s; */\n}\n\n.action-element {\n\tmargin-left: 5px;\n\tmargin-right: 5px;\n\tposition: relative; /* Make this the positioning context for absolute children */\n}\nbutton.button-default {\n\tbackground-color: #ffffff;\n\tpadding: 5px 12px;\n\tborder-radius: 3px;\n\tbox-shadow: rgba(0, 0, 0, 0.05) 0px 0.5px 0px 0px, rgba(0, 0, 0, 0.08) 0px 0px 0px 1px,\n\t\trgba(0, 0, 0, 0.05) 0px 2px 4px 0px;\n\tborder: none;\n\tcursor: pointer;\n\twhite-space: nowrap;\n}\n\nbutton.button-default:hover {\n\tbackground-color: #f2f2f2;\n}\n\nbutton.button-default:disabled {\n\topacity: 0.5;\n\tcursor: not-allowed;\n\tbackground-color: #f5f5f5;\n\tcolor: #999;\n}\n\nbutton.button-default:disabled:hover {\n\tbackground-color: #f5f5f5;\n}\n\n.dropdown-container {\n\tposition: relative;\n}\n\n.dropdown {\n\tposition: absolute;\n\tright: 0;\n\tmin-width: 200px;\n\tbox-shadow: 0 0.5rem 1rem rgb(0 0 0 / 18%);\n\tborder-radius: 10px;\n\tbackground-color: #ffffff;\n\tpadding: 10px;\n\tz-index: 1000;\n}\n\nbutton.dropdown-item {\n\twidth: 100%;\n\tpadding: 8px 5px;\n\ttext-align: left;\n\tborder: none;\n\tbackground-color: #ffffff;\n\tcursor: pointer;\n\tborder-radius: 5px;\n}\n\nbutton.dropdown-item:hover {\n\tbackground-color: #f2f2f2;\n}\n</style>\n","<template>\n\t<Teleport to=\"body\">\n\t\t<Transition name=\"fade\">\n\t\t\t<div v-if=\"isOpen\" class=\"command-palette-overlay\" @click=\"closeModal\">\n\t\t\t\t<div class=\"command-palette\" @click.stop>\n\t\t\t\t\t<div class=\"command-palette-header\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tref=\"input\"\n\t\t\t\t\t\t\tv-model=\"query\"\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tclass=\"command-palette-input\"\n\t\t\t\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t\t\t\tautofocus\n\t\t\t\t\t\t\t@keydown=\"handleKeydown\" />\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div v-if=\"results.length\" class=\"command-palette-results\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-for=\"(result, index) in results\"\n\t\t\t\t\t\t\t:key=\"index\"\n\t\t\t\t\t\t\tclass=\"command-palette-result\"\n\t\t\t\t\t\t\t:class=\"{ selected: index === selectedIndex }\"\n\t\t\t\t\t\t\t@click=\"selectResult(result)\"\n\t\t\t\t\t\t\t@mouseover=\"selectedIndex = index\">\n\t\t\t\t\t\t\t<div class=\"result-title\">\n\t\t\t\t\t\t\t\t<slot name=\"title\" :result=\"result\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"result-content\">\n\t\t\t\t\t\t\t\t<slot name=\"content\" :result=\"result\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div v-else-if=\"query && !results.length\" class=\"command-palette-no-results\">\n\t\t\t\t\t\t<slot name=\"empty\"> No results found for \"{{ query }}\" </slot>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Transition>\n\t</Teleport>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport { ref, computed, watch, nextTick, useTemplateRef } from 'vue'\n\ndefineSlots<{\n\ttitle?: { result: T }\n\tcontent?: { result: T }\n\tempty?: null\n}>()\n\nconst {\n\tsearch,\n\tisOpen = false,\n\tplaceholder = 'Type a command or search...',\n\tmaxResults = 10,\n} = defineProps<{\n\tsearch: (query: string) => T[]\n\tisOpen?: boolean\n\tplaceholder?: string\n\tmaxResults?: number\n}>()\n\nconst emit = defineEmits<{\n\tselect: [T]\n\tclose: []\n}>()\n\nconst query = ref('')\nconst selectedIndex = ref(0)\nconst inputRef = useTemplateRef('input')\n\nconst results = computed(() => {\n\tif (!query.value) return []\n\tconst results = search(query.value)\n\treturn results.slice(0, maxResults)\n})\n\n// reset search query when modal opens\nwatch(\n\t() => isOpen,\n\tasync isOpen => {\n\t\tif (isOpen) {\n\t\t\tquery.value = ''\n\t\t\tselectedIndex.value = 0\n\t\t\tawait nextTick()\n\t\t\t;(inputRef.value as HTMLInputElement)?.focus()\n\t\t}\n\t}\n)\n\n// reset selected index when results change\nwatch(results, () => {\n\tselectedIndex.value = 0\n})\n\nconst closeModal = () => {\n\temit('close')\n}\n\nconst handleKeydown = (e: KeyboardEvent) => {\n\tswitch (e.key) {\n\t\tcase 'Escape':\n\t\t\tcloseModal()\n\t\t\tbreak\n\t\tcase 'ArrowDown':\n\t\t\te.preventDefault()\n\t\t\tif (results.value.length) {\n\t\t\t\tselectedIndex.value = (selectedIndex.value + 1) % results.value.length\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'ArrowUp':\n\t\t\te.preventDefault()\n\t\t\tif (results.value.length) {\n\t\t\t\tselectedIndex.value = (selectedIndex.value - 1 + results.value.length) % results.value.length\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'Enter':\n\t\t\tif (results.value.length && selectedIndex.value >= 0) {\n\t\t\t\tselectResult(results.value[selectedIndex.value])\n\t\t\t}\n\t\t\tbreak\n\t}\n}\n\nconst selectResult = (result: T) => {\n\temit('select', result)\n\tcloseModal()\n}\n</script>\n\n<style>\n.fade-enter-active,\n.fade-leave-active {\n\ttransition: opacity 0.2s ease;\n}\n\n.fade-enter-from,\n.fade-leave-to {\n\topacity: 0;\n}\n\n.command-palette-overlay {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: rgba(0, 0, 0, 0.5);\n\tdisplay: flex;\n\talign-items: flex-start;\n\tjustify-content: center;\n\tz-index: 9999;\n\tpadding-top: 100px;\n}\n\n.command-palette {\n\twidth: 600px;\n\tmax-width: 90%;\n\tbackground-color: white;\n\tborder-radius: 8px;\n\tbox-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n\toverflow: hidden;\n\tmax-height: 80vh;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.command-palette-header {\n\tdisplay: flex;\n\tborder-bottom: 1px solid #eaeaea;\n\tpadding: 12px;\n}\n\n.command-palette-input {\n\tflex: 1;\n\tborder: none;\n\toutline: none;\n\tfont-size: 16px;\n\tpadding: 8px 12px;\n\tbackground-color: transparent;\n}\n\n.command-palette-close {\n\tbackground: transparent;\n\tborder: none;\n\tfont-size: 24px;\n\tcursor: pointer;\n\tcolor: #666;\n\tpadding: 0 8px;\n}\n\n.command-palette-close:hover {\n\tcolor: #333;\n}\n\n.command-palette-results {\n\toverflow-y: auto;\n\tmax-height: 60vh;\n}\n\n.command-palette-result {\n\tpadding: 12px 16px;\n\tcursor: pointer;\n\tborder-bottom: 1px solid #f0f0f0;\n}\n\n.command-palette-result:hover,\n.command-palette-result.selected {\n\tbackground-color: #f5f5f5;\n}\n\n.command-palette-result.selected {\n\tbackground-color: rgba(132, 60, 3, 0.1);\n}\n\n.result-title {\n\tfont-weight: 500;\n\tmargin-bottom: 4px;\n\tcolor: #333;\n}\n\n.result-content {\n\tfont-size: 14px;\n\tcolor: #666;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n.command-palette-no-results {\n\tpadding: 20px 16px;\n\ttext-align: center;\n\tcolor: #666;\n}\n</style>\n","import { hasInjectionContext as Ae, inject as oe, getCurrentInstance as Me, toRaw as Fe, computed as W, isRef as se, isReactive as be, toRef as ce, ref as B, reactive as ye, markRaw as ae, effectScope as Ye, nextTick as de, getCurrentScope as Xe, onScopeDispose as et, watch as U, toRefs as $e, onMounted as Be, readonly as je, customRef as tt, toValue as q, shallowRef as We, unref as rt, provide as De } from \"vue\";\nconst te = typeof window < \"u\";\nlet G;\nconst me = (n) => G = n;\nprocess.env.NODE_ENV;\nconst Pe = process.env.NODE_ENV !== \"production\" ? /* @__PURE__ */ Symbol(\"pinia\") : (\n /* istanbul ignore next */\n /* @__PURE__ */ Symbol()\n);\nfunction Y(n) {\n return n && typeof n == \"object\" && Object.prototype.toString.call(n) === \"[object Object]\" && typeof n.toJSON != \"function\";\n}\nvar le;\n(function(n) {\n n.direct = \"direct\", n.patchObject = \"patch object\", n.patchFunction = \"patch function\";\n})(le || (le = {}));\nfunction He(n, e) {\n for (const t in e) {\n const r = e[t];\n if (!(t in n))\n continue;\n const o = n[t];\n Y(o) && Y(r) && !se(r) && !be(r) ? n[t] = He(o, r) : n[t] = r;\n }\n return n;\n}\nconst ze = () => {\n};\nfunction Te(n, e, t, r = ze) {\n n.add(e);\n const o = () => {\n n.delete(e) && r();\n };\n return !t && Xe() && et(o), o;\n}\nfunction ee(n, ...e) {\n n.forEach((t) => {\n t(...e);\n });\n}\nconst nt = (n) => n(), Ie = /* @__PURE__ */ Symbol(), Ee = /* @__PURE__ */ Symbol();\nfunction Ne(n, e) {\n n instanceof Map && e instanceof Map ? e.forEach((t, r) => n.set(r, t)) : n instanceof Set && e instanceof Set && e.forEach(n.add, n);\n for (const t in e) {\n if (!e.hasOwnProperty(t))\n continue;\n const r = e[t], o = n[t];\n Y(o) && Y(r) && n.hasOwnProperty(t) && !se(r) && !be(r) ? n[t] = Ne(o, r) : n[t] = r;\n }\n return n;\n}\nconst ot = process.env.NODE_ENV !== \"production\" ? /* @__PURE__ */ Symbol(\"pinia:skipHydration\") : (\n /* istanbul ignore next */\n /* @__PURE__ */ Symbol()\n);\nfunction st(n) {\n return !Y(n) || !Object.prototype.hasOwnProperty.call(n, ot);\n}\nconst { assign: z } = Object;\nfunction Ce(n) {\n return !!(se(n) && n.effect);\n}\nfunction ke(n, e, t, r) {\n const { state: o, actions: s, getters: i } = e, a = t.state.value[n];\n let c;\n function f() {\n !a && (process.env.NODE_ENV === \"production\" || !r) && (t.state.value[n] = o ? o() : {});\n const g = process.env.NODE_ENV !== \"production\" && r ? (\n // use ref() to unwrap refs inside state TODO: check if this is still necessary\n $e(B(o ? o() : {}).value)\n ) : $e(t.state.value[n]);\n return z(g, s, Object.keys(i || {}).reduce((b, A) => (process.env.NODE_ENV !== \"production\" && A in g && console.warn(`[🍍]: A getter cannot have the same name as another state property. Rename one of them. Found with \"${A}\" in store \"${n}\".`), b[A] = ae(W(() => {\n me(t);\n const $ = t._s.get(n);\n return i[A].call($, $);\n })), b), {}));\n }\n return c = _e(n, f, e, t, r, !0), c;\n}\nfunction _e(n, e, t = {}, r, o, s) {\n let i;\n const a = z({ actions: {} }, t);\n if (process.env.NODE_ENV !== \"production\" && !r._e.active)\n throw new Error(\"Pinia destroyed\");\n const c = { deep: !0 };\n process.env.NODE_ENV !== \"production\" && (c.onTrigger = (d) => {\n f ? $ = d : f == !1 && !v._hotUpdating && (Array.isArray($) ? $.push(d) : console.error(\"🍍 debuggerEvents should be an array. This is most likely an internal Pinia bug.\"));\n });\n let f, g, b = /* @__PURE__ */ new Set(), A = /* @__PURE__ */ new Set(), $;\n const k = r.state.value[n];\n !s && !k && (process.env.NODE_ENV === \"production\" || !o) && (r.state.value[n] = {});\n const x = B({});\n let N;\n function D(d) {\n let p;\n f = g = !1, process.env.NODE_ENV !== \"production\" && ($ = []), typeof d == \"function\" ? (d(r.state.value[n]), p = {\n type: le.patchFunction,\n storeId: n,\n events: $\n }) : (Ne(r.state.value[n], d), p = {\n type: le.patchObject,\n payload: d,\n storeId: n,\n events: $\n });\n const R = N = /* @__PURE__ */ Symbol();\n de().then(() => {\n N === R && (f = !0);\n }), g = !0, ee(b, p, r.state.value[n]);\n }\n const P = s ? function() {\n const { state: p } = t, R = p ? p() : {};\n this.$patch((F) => {\n z(F, R);\n });\n } : (\n /* istanbul ignore next */\n process.env.NODE_ENV !== \"production\" ? () => {\n throw new Error(`🍍: Store \"${n}\" is built using the setup syntax and does not implement $reset().`);\n } : ze\n );\n function S() {\n i.stop(), b.clear(), A.clear(), r._s.delete(n);\n }\n const C = (d, p = \"\") => {\n if (Ie in d)\n return d[Ee] = p, d;\n const R = function() {\n me(r);\n const F = Array.from(arguments), w = /* @__PURE__ */ new Set(), T = /* @__PURE__ */ new Set();\n function L(m) {\n w.add(m);\n }\n function y(m) {\n T.add(m);\n }\n ee(A, {\n args: F,\n name: R[Ee],\n store: v,\n after: L,\n onError: y\n });\n let E;\n try {\n E = d.apply(this && this.$id === n ? this : v, F);\n } catch (m) {\n throw ee(T, m), m;\n }\n return E instanceof Promise ? E.then((m) => (ee(w, m), m)).catch((m) => (ee(T, m), Promise.reject(m))) : (ee(w, E), E);\n };\n return R[Ie] = !0, R[Ee] = p, R;\n }, O = /* @__PURE__ */ ae({\n actions: {},\n getters: {},\n state: [],\n hotState: x\n }), _ = {\n _p: r,\n // _s: scope,\n $id: n,\n $onAction: Te.bind(null, A),\n $patch: D,\n $reset: P,\n $subscribe(d, p = {}) {\n const R = Te(b, d, p.detached, () => F()), F = i.run(() => U(() => r.state.value[n], (w) => {\n (p.flush === \"sync\" ? g : f) && d({\n storeId: n,\n type: le.direct,\n events: $\n }, w);\n }, z({}, c, p)));\n return R;\n },\n $dispose: S\n }, v = ye(process.env.NODE_ENV !== \"production\" || process.env.NODE_ENV !== \"production\" && process.env.NODE_ENV !== \"test\" && te ? z(\n {\n _hmrPayload: O,\n _customProperties: ae(/* @__PURE__ */ new Set())\n // devtools custom properties\n },\n _\n // must be added later\n // setupStore\n ) : _);\n r._s.set(n, v);\n const M = (r._a && r._a.runWithContext || nt)(() => r._e.run(() => (i = Ye()).run(() => e({ action: C }))));\n for (const d in M) {\n const p = M[d];\n if (se(p) && !Ce(p) || be(p))\n process.env.NODE_ENV !== \"production\" && o ? x.value[d] = ce(M, d) : s || (k && st(p) && (se(p) ? p.value = k[d] : Ne(p, k[d])), r.state.value[n][d] = p), process.env.NODE_ENV !== \"production\" && O.state.push(d);\n else if (typeof p == \"function\") {\n const R = process.env.NODE_ENV !== \"production\" && o ? p : C(p, d);\n M[d] = R, process.env.NODE_ENV !== \"production\" && (O.actions[d] = p), a.actions[d] = p;\n } else process.env.NODE_ENV !== \"production\" && Ce(p) && (O.getters[d] = s ? (\n // @ts-expect-error\n t.getters[d]\n ) : p, te && (M._getters || // @ts-expect-error: same\n (M._getters = ae([]))).push(d));\n }\n if (z(v, M), z(Fe(v), M), Object.defineProperty(v, \"$state\", {\n get: () => process.env.NODE_ENV !== \"production\" && o ? x.value : r.state.value[n],\n set: (d) => {\n if (process.env.NODE_ENV !== \"production\" && o)\n throw new Error(\"cannot set hotState\");\n D((p) => {\n z(p, d);\n });\n }\n }), process.env.NODE_ENV !== \"production\" && (v._hotUpdate = ae((d) => {\n v._hotUpdating = !0, d._hmrPayload.state.forEach((p) => {\n if (p in v.$state) {\n const R = d.$state[p], F = v.$state[p];\n typeof R == \"object\" && Y(R) && Y(F) ? He(R, F) : d.$state[p] = F;\n }\n v[p] = ce(d.$state, p);\n }), Object.keys(v.$state).forEach((p) => {\n p in d.$state || delete v[p];\n }), f = !1, g = !1, r.state.value[n] = ce(d._hmrPayload, \"hotState\"), g = !0, de().then(() => {\n f = !0;\n });\n for (const p in d._hmrPayload.actions) {\n const R = d[p];\n v[p] = //\n C(R, p);\n }\n for (const p in d._hmrPayload.getters) {\n const R = d._hmrPayload.getters[p], F = s ? (\n // special handling of options api\n W(() => (me(r), R.call(v, v)))\n ) : R;\n v[p] = //\n F;\n }\n Object.keys(v._hmrPayload.getters).forEach((p) => {\n p in d._hmrPayload.getters || delete v[p];\n }), Object.keys(v._hmrPayload.actions).forEach((p) => {\n p in d._hmrPayload.actions || delete v[p];\n }), v._hmrPayload = d._hmrPayload, v._getters = d._getters, v._hotUpdating = !1;\n })), process.env.NODE_ENV !== \"production\" && process.env.NODE_ENV !== \"test\" && te) {\n const d = {\n writable: !0,\n configurable: !0,\n // avoid warning on devtools trying to display this property\n enumerable: !1\n };\n [\"_p\", \"_hmrPayload\", \"_getters\", \"_customProperties\"].forEach((p) => {\n Object.defineProperty(v, p, z({ value: v[p] }, d));\n });\n }\n return r._p.forEach((d) => {\n if (process.env.NODE_ENV !== \"production\" && process.env.NODE_ENV !== \"test\" && te) {\n const p = i.run(() => d({\n store: v,\n app: r._a,\n pinia: r,\n options: a\n }));\n Object.keys(p || {}).forEach((R) => v._customProperties.add(R)), z(v, p);\n } else\n z(v, i.run(() => d({\n store: v,\n app: r._a,\n pinia: r,\n options: a\n })));\n }), process.env.NODE_ENV !== \"production\" && v.$state && typeof v.$state == \"object\" && typeof v.$state.constructor == \"function\" && !v.$state.constructor.toString().includes(\"[native code]\") && console.warn(`[🍍]: The \"state\" must be a plain object. It cannot be\n\tstate: () => new MyClass()\nFound in store \"${v.$id}\".`), k && s && t.hydrate && t.hydrate(v.$state, k), f = !0, g = !0, v;\n}\n// @__NO_SIDE_EFFECTS__\nfunction it(n, e, t) {\n let r;\n const o = typeof e == \"function\";\n r = o ? t : e;\n function s(i, a) {\n const c = Ae();\n if (i = // in test mode, ignore the argument provided as we can always retrieve a\n // pinia instance with getActivePinia()\n (process.env.NODE_ENV === \"test\" && G && G._testing ? null : i) || (c ? oe(Pe, null) : null), i && me(i), process.env.NODE_ENV !== \"production\" && !G)\n throw new Error(`[🍍]: \"getActivePinia()\" was called but there was no active Pinia. Are you trying to use a store before calling \"app.use(pinia)\"?\nSee https://pinia.vuejs.org/core-concepts/outside-component-usage.html for help.\nThis will fail in production.`);\n i = G, i._s.has(n) || (o ? _e(n, e, r, i) : ke(n, r, i), process.env.NODE_ENV !== \"production\" && (s._pinia = i));\n const f = i._s.get(n);\n if (process.env.NODE_ENV !== \"production\" && a) {\n const g = \"__hot:\" + n, b = o ? _e(g, e, r, i, !0) : ke(g, z({}, r), i, !0);\n a._hotUpdate(b), delete i.state.value[g], i._s.delete(g);\n }\n if (process.env.NODE_ENV !== \"production\" && te) {\n const g = Me();\n if (g && g.proxy && // avoid adding stores that are just built for hot module replacement\n !a) {\n const b = g.proxy, A = \"_pStores\" in b ? b._pStores : b._pStores = {};\n A[n] = f;\n }\n }\n return f;\n }\n return s.$id = n, s;\n}\nfunction Ue(n) {\n const e = Fe(n), t = {};\n for (const r in e) {\n const o = e[r];\n o.effect ? t[r] = // ...\n W({\n get: () => n[r],\n set(s) {\n n[r] = s;\n }\n }) : (se(o) || be(o)) && (t[r] = // ---\n ce(n, r));\n }\n return t;\n}\nconst at = typeof window < \"u\" && typeof document < \"u\";\ntypeof WorkerGlobalScope < \"u\" && globalThis instanceof WorkerGlobalScope;\nconst ct = Object.prototype.toString, lt = (n) => ct.call(n) === \"[object Object]\", Je = () => {\n};\nfunction ut(...n) {\n if (n.length !== 1) return ce(...n);\n const e = n[0];\n return typeof e == \"function\" ? je(tt(() => ({\n get: e,\n set: Je\n }))) : B(e);\n}\nfunction ft(n, e) {\n function t(...r) {\n return new Promise((o, s) => {\n Promise.resolve(n(() => e.apply(this, r), {\n fn: e,\n thisArg: this,\n args: r\n })).then(o).catch(s);\n });\n }\n return t;\n}\nconst qe = (n) => n();\nfunction dt(n = qe, e = {}) {\n const { initialState: t = \"active\" } = e, r = ut(t === \"active\");\n function o() {\n r.value = !1;\n }\n function s() {\n r.value = !0;\n }\n const i = (...a) => {\n r.value && n(...a);\n };\n return {\n isActive: je(r),\n pause: o,\n resume: s,\n eventFilter: i\n };\n}\nfunction Oe(n) {\n return Array.isArray(n) ? n : [n];\n}\nfunction pt(n) {\n return Me();\n}\nfunction ht(n, e, t = {}) {\n const { eventFilter: r = qe, ...o } = t;\n return U(n, ft(r, e), o);\n}\nfunction gt(n, e, t = {}) {\n const { eventFilter: r, initialState: o = \"active\", ...s } = t, { eventFilter: i, pause: a, resume: c, isActive: f } = dt(r, { initialState: o });\n return {\n stop: ht(n, e, {\n ...s,\n eventFilter: i\n }),\n pause: a,\n resume: c,\n isActive: f\n };\n}\nconst vt = gt;\nfunction yt(n, e = !0, t) {\n pt() ? Be(n, t) : e ? n() : de(n);\n}\nfunction mt(n, e, t) {\n return U(n, e, {\n ...t,\n immediate: !0\n });\n}\nfunction ie(n, e, t) {\n return U(n, (o, s, i) => {\n o && e(o, s, i);\n }, {\n ...t,\n once: !1\n });\n}\nconst Q = at ? window : void 0;\nfunction St(n) {\n var e;\n const t = q(n);\n return (e = t?.$el) !== null && e !== void 0 ? e : t;\n}\nfunction re(...n) {\n const e = (r, o, s, i) => (r.addEventListener(o, s, i), () => r.removeEventListener(o, s, i)), t = W(() => {\n const r = Oe(q(n[0])).filter((o) => o != null);\n return r.every((o) => typeof o != \"string\") ? r : void 0;\n });\n return mt(() => {\n var r, o;\n return [\n (r = (o = t.value) === null || o === void 0 ? void 0 : o.map((s) => St(s))) !== null && r !== void 0 ? r : [Q].filter((s) => s != null),\n Oe(q(t.value ? n[1] : n[0])),\n Oe(rt(t.value ? n[2] : n[1])),\n q(t.value ? n[3] : n[2])\n ];\n }, ([r, o, s, i], a, c) => {\n if (!r?.length || !o?.length || !s?.length) return;\n const f = lt(i) ? { ...i } : i, g = r.flatMap((b) => o.flatMap((A) => s.map(($) => e(b, A, $, f))));\n c(() => {\n g.forEach((b) => b());\n });\n }, { flush: \"post\" });\n}\nconst he = typeof globalThis < \"u\" ? globalThis : typeof window < \"u\" ? window : typeof global < \"u\" ? global : typeof self < \"u\" ? self : {}, ge = \"__vueuse_ssr_handlers__\", bt = /* @__PURE__ */ wt();\nfunction wt() {\n return ge in he || (he[ge] = he[ge] || {}), he[ge];\n}\nfunction Et(n, e) {\n return bt[n] || e;\n}\nfunction Ot(n) {\n return n == null ? \"any\" : n instanceof Set ? \"set\" : n instanceof Map ? \"map\" : n instanceof Date ? \"date\" : typeof n == \"boolean\" ? \"boolean\" : typeof n == \"string\" ? \"string\" : typeof n == \"object\" ? \"object\" : Number.isNaN(n) ? \"any\" : \"number\";\n}\nconst Rt = {\n boolean: {\n read: (n) => n === \"true\",\n write: (n) => String(n)\n },\n object: {\n read: (n) => JSON.parse(n),\n write: (n) => JSON.stringify(n)\n },\n number: {\n read: (n) => Number.parseFloat(n),\n write: (n) => String(n)\n },\n any: {\n read: (n) => n,\n write: (n) => String(n)\n },\n string: {\n read: (n) => n,\n write: (n) => String(n)\n },\n map: {\n read: (n) => new Map(JSON.parse(n)),\n write: (n) => JSON.stringify(Array.from(n.entries()))\n },\n set: {\n read: (n) => new Set(JSON.parse(n)),\n write: (n) => JSON.stringify(Array.from(n))\n },\n date: {\n read: (n) => new Date(n),\n write: (n) => n.toISOString()\n }\n}, Le = \"vueuse-storage\";\nfunction At(n, e, t, r = {}) {\n var o;\n const { flush: s = \"pre\", deep: i = !0, listenToStorageChanges: a = !0, writeDefaults: c = !0, mergeDefaults: f = !1, shallow: g, window: b = Q, eventFilter: A, onError: $ = (w) => {\n console.error(w);\n }, initOnMounted: k } = r, x = (g ? We : B)(e), N = W(() => q(n));\n if (!t) try {\n t = Et(\"getDefaultStorage\", () => Q?.localStorage)();\n } catch (w) {\n $(w);\n }\n if (!t) return x;\n const D = q(e), P = Ot(D), S = (o = r.serializer) !== null && o !== void 0 ? o : Rt[P], { pause: C, resume: O } = vt(x, (w) => d(w), {\n flush: s,\n deep: i,\n eventFilter: A\n });\n U(N, () => R(), { flush: s });\n let _ = !1;\n const v = (w) => {\n k && !_ || R(w);\n }, j = (w) => {\n k && !_ || F(w);\n };\n b && a && (t instanceof Storage ? re(b, \"storage\", v, { passive: !0 }) : re(b, Le, j)), k ? yt(() => {\n _ = !0, R();\n }) : R();\n function M(w, T) {\n if (b) {\n const L = {\n key: N.value,\n oldValue: w,\n newValue: T,\n storageArea: t\n };\n b.dispatchEvent(t instanceof Storage ? new StorageEvent(\"storage\", L) : new CustomEvent(Le, { detail: L }));\n }\n }\n function d(w) {\n try {\n const T = t.getItem(N.value);\n if (w == null)\n M(T, null), t.removeItem(N.value);\n else {\n const L = S.write(w);\n T !== L && (t.setItem(N.value, L), M(T, L));\n }\n } catch (T) {\n $(T);\n }\n }\n function p(w) {\n const T = w ? w.newValue : t.getItem(N.value);\n if (T == null)\n return c && D != null && t.setItem(N.value, S.write(D)), D;\n if (!w && f) {\n const L = S.read(T);\n return typeof f == \"function\" ? f(L, D) : P === \"object\" && !Array.isArray(L) ? {\n ...D,\n ...L\n } : L;\n } else return typeof T != \"string\" ? T : S.read(T);\n }\n function R(w) {\n if (!(w && w.storageArea !== t)) {\n if (w && w.key == null) {\n x.value = D;\n return;\n }\n if (!(w && w.key !== N.value)) {\n C();\n try {\n const T = S.write(x.value);\n (w === void 0 || w?.newValue !== T) && (x.value = p(w));\n } catch (T) {\n $(T);\n } finally {\n w ? de(O) : O();\n }\n }\n }\n }\n function F(w) {\n R(w.detail);\n }\n return x;\n}\nfunction Pt(n, e, t = {}) {\n const { window: r = Q } = t;\n return At(n, e, r?.localStorage, t);\n}\nconst Nt = {\n ctrl: \"control\",\n command: \"meta\",\n cmd: \"meta\",\n option: \"alt\",\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\"\n};\nfunction _t(n = {}) {\n const { reactive: e = !1, target: t = Q, aliasMap: r = Nt, passive: o = !0, onEventFired: s = Je } = n, i = ye(/* @__PURE__ */ new Set()), a = {\n toJSON() {\n return {};\n },\n current: i\n }, c = e ? ye(a) : a, f = /* @__PURE__ */ new Set(), g = /* @__PURE__ */ new Map([\n [\"Meta\", f],\n [\"Shift\", /* @__PURE__ */ new Set()],\n [\"Alt\", /* @__PURE__ */ new Set()]\n ]), b = /* @__PURE__ */ new Set();\n function A(P, S) {\n P in c && (e ? c[P] = S : c[P].value = S);\n }\n function $() {\n i.clear();\n for (const P of b) A(P, !1);\n }\n function k(P, S, C) {\n if (!(!P || typeof S.getModifierState != \"function\")) {\n for (const [O, _] of g) if (S.getModifierState(O)) {\n C.forEach((v) => _.add(v));\n break;\n }\n }\n }\n function x(P, S) {\n if (P) return;\n const C = `${S[0].toUpperCase()}${S.slice(1)}`, O = g.get(C);\n if (![\"shift\", \"alt\"].includes(S) || !O) return;\n const _ = Array.from(O), v = _.indexOf(S);\n _.forEach((j, M) => {\n M >= v && (i.delete(j), A(j, !1));\n }), O.clear();\n }\n function N(P, S) {\n var C, O;\n const _ = (C = P.key) === null || C === void 0 ? void 0 : C.toLowerCase(), v = [(O = P.code) === null || O === void 0 ? void 0 : O.toLowerCase(), _].filter(Boolean);\n if (_ !== \"\") {\n _ && (S ? i.add(_) : i.delete(_));\n for (const j of v)\n b.add(j), A(j, S);\n k(S, P, [...i, ...v]), x(S, _), _ === \"meta\" && !S && (f.forEach((j) => {\n i.delete(j), A(j, !1);\n }), f.clear());\n }\n }\n re(t, \"keydown\", (P) => (N(P, !0), s(P)), { passive: o }), re(t, \"keyup\", (P) => (N(P, !1), s(P)), { passive: o }), re(\"blur\", $, { passive: o }), re(\"focus\", $, { passive: o });\n const D = new Proxy(c, { get(P, S, C) {\n if (typeof S != \"string\") return Reflect.get(P, S, C);\n if (S = S.toLowerCase(), S in r && (S = r[S]), !(S in c)) if (/[+_-]/.test(S)) {\n const _ = S.split(/[+_-]/g).map((v) => v.trim());\n c[S] = W(() => _.map((v) => q(D[v])).every(Boolean));\n } else c[S] = We(!1);\n const O = Reflect.get(P, S, C);\n return e ? q(O) : O;\n } });\n return D;\n}\nfunction Re() {\n return typeof crypto < \"u\" && crypto.randomUUID ? crypto.randomUUID() : `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n}\nfunction ve(n) {\n const e = {\n type: n.type,\n clientId: n.clientId,\n timestamp: n.timestamp.toISOString()\n };\n return n.operation && (e.operation = {\n ...n.operation,\n timestamp: n.operation.timestamp.toISOString()\n }), n.operations && (e.operations = n.operations.map((t) => ({\n ...t,\n timestamp: t.timestamp.toISOString()\n }))), e;\n}\nfunction $t(n) {\n const e = {\n type: n.type,\n clientId: n.clientId,\n timestamp: new Date(n.timestamp)\n };\n return n.operation && (e.operation = {\n ...n.operation,\n timestamp: new Date(n.operation.timestamp)\n }), n.operations && (e.operations = n.operations.map((t) => ({\n ...t,\n timestamp: new Date(t.timestamp)\n }))), e;\n}\nconst pe = /* @__PURE__ */ it(\"hst-operation-log\", () => {\n const n = B({\n maxOperations: 100,\n enableCrossTabSync: !0,\n autoSyncInterval: 3e4,\n enablePersistence: !1,\n persistenceKeyPrefix: \"stonecrop-ops\"\n }), e = B([]), t = B(-1), r = B(Re()), o = B(!1), s = B([]), i = B(null), a = W(() => t.value < 0 ? !1 : e.value[t.value]?.reversible ?? !1), c = W(() => t.value < e.value.length - 1), f = W(() => {\n let u = 0;\n for (let l = t.value; l >= 0 && e.value[l]?.reversible; l--)\n u++;\n return u;\n }), g = W(() => e.value.length - 1 - t.value), b = W(() => ({\n canUndo: a.value,\n canRedo: c.value,\n undoCount: f.value,\n redoCount: g.value,\n currentIndex: t.value\n }));\n function A(u) {\n n.value = { ...n.value, ...u }, n.value.enablePersistence && (y(), m()), n.value.enableCrossTabSync && p();\n }\n function $(u, l = \"user\") {\n const h = {\n ...u,\n id: Re(),\n timestamp: /* @__PURE__ */ new Date(),\n source: l,\n userId: n.value.userId\n };\n if (n.value.operationFilter && !n.value.operationFilter(h))\n return h.id;\n if (o.value)\n return s.value.push(h), h.id;\n if (t.value < e.value.length - 1 && (e.value = e.value.slice(0, t.value + 1)), e.value.push(h), t.value++, n.value.maxOperations && e.value.length > n.value.maxOperations) {\n const I = e.value.length - n.value.maxOperations;\n e.value = e.value.slice(I), t.value -= I;\n }\n return n.value.enableCrossTabSync && R(h), h.id;\n }\n function k() {\n o.value = !0, s.value = [], i.value = Re();\n }\n function x(u) {\n if (!o.value || s.value.length === 0)\n return o.value = !1, s.value = [], i.value = null, null;\n const l = i.value, h = s.value.every((V) => V.reversible), I = {\n id: l,\n type: \"batch\",\n path: \"\",\n // Batch doesn't have a single path\n fieldname: \"\",\n beforeValue: null,\n afterValue: null,\n doctype: s.value[0]?.doctype || \"\",\n timestamp: /* @__PURE__ */ new Date(),\n source: \"user\",\n reversible: h,\n irreversibleReason: h ? void 0 : \"Contains irreversible operations\",\n childOperationIds: s.value.map((V) => V.id),\n metadata: { description: u }\n };\n s.value.forEach((V) => {\n V.parentOperationId = l;\n }), e.value.push(...s.value, I), t.value = e.value.length - 1, n.value.enableCrossTabSync && F(s.value, I);\n const H = l;\n return o.value = !1, s.value = [], i.value = null, H;\n }\n function N() {\n o.value = !1, s.value = [], i.value = null;\n }\n function D(u) {\n if (!a.value) return !1;\n const l = e.value[t.value];\n if (!l.reversible)\n return typeof console < \"u\" && l.irreversibleReason && console.warn(\"Cannot undo irreversible operation:\", l.irreversibleReason), !1;\n try {\n if (l.type === \"batch\" && l.childOperationIds)\n for (let h = l.childOperationIds.length - 1; h >= 0; h--) {\n const I = l.childOperationIds[h], H = e.value.find((V) => V.id === I);\n H && S(H, u);\n }\n else\n S(l, u);\n return t.value--, n.value.enableCrossTabSync && w(l), !0;\n } catch (h) {\n return typeof console < \"u\" && console.error(\"Undo failed:\", h), !1;\n }\n }\n function P(u) {\n if (!c.value) return !1;\n const l = e.value[t.value + 1];\n try {\n if (l.type === \"batch\" && l.childOperationIds)\n for (const h of l.childOperationIds) {\n const I = e.value.find((H) => H.id === h);\n I && C(I, u);\n }\n else\n C(l, u);\n return t.value++, n.value.enableCrossTabSync && T(l), !0;\n } catch (h) {\n return typeof console < \"u\" && console.error(\"Redo failed:\", h), !1;\n }\n }\n function S(u, l) {\n (u.type === \"set\" || u.type === \"delete\") && l && typeof l.set == \"function\" && l.set(u.path, u.beforeValue, \"undo\");\n }\n function C(u, l) {\n (u.type === \"set\" || u.type === \"delete\") && l && typeof l.set == \"function\" && l.set(u.path, u.afterValue, \"redo\");\n }\n function O() {\n const u = e.value.filter((h) => h.reversible).length, l = e.value.map((h) => h.timestamp);\n return {\n operations: [...e.value],\n currentIndex: t.value,\n totalOperations: e.value.length,\n reversibleOperations: u,\n irreversibleOperations: e.value.length - u,\n oldestOperation: l.length > 0 ? new Date(Math.min(...l.map((h) => h.getTime()))) : void 0,\n newestOperation: l.length > 0 ? new Date(Math.max(...l.map((h) => h.getTime()))) : void 0\n };\n }\n function _() {\n e.value = [], t.value = -1;\n }\n function v(u, l) {\n return e.value.filter((h) => h.doctype === u && (l === void 0 || h.recordId === l));\n }\n function j(u, l) {\n const h = e.value.find((I) => I.id === u);\n h && (h.reversible = !1, h.irreversibleReason = l);\n }\n function M(u, l, h, I = \"success\", H) {\n const V = {\n type: \"action\",\n path: h && h.length > 0 ? `${u}.${h[0]}` : u,\n fieldname: \"\",\n beforeValue: null,\n afterValue: null,\n doctype: u,\n recordId: h && h.length > 0 ? h[0] : void 0,\n reversible: !1,\n // Actions are typically not reversible\n actionName: l,\n actionRecordIds: h,\n actionResult: I,\n actionError: H\n };\n return $(V);\n }\n let d = null;\n function p() {\n typeof window > \"u\" || !window.BroadcastChannel || (d = new BroadcastChannel(\"stonecrop-operation-log\"), d.addEventListener(\"message\", (u) => {\n const l = u.data;\n if (!l || typeof l != \"object\") return;\n const h = $t(l);\n h.clientId !== r.value && (h.type === \"operation\" && h.operation ? (e.value.push({ ...h.operation, source: \"sync\" }), t.value = e.value.length - 1) : h.type === \"operation\" && h.operations && (e.value.push(...h.operations.map((I) => ({ ...I, source: \"sync\" }))), t.value = e.value.length - 1));\n }));\n }\n function R(u) {\n if (!d) return;\n const l = {\n type: \"operation\",\n operation: u,\n clientId: r.value,\n timestamp: /* @__PURE__ */ new Date()\n };\n d.postMessage(ve(l));\n }\n function F(u, l) {\n if (!d) return;\n const h = {\n type: \"operation\",\n operations: [...u, l],\n clientId: r.value,\n timestamp: /* @__PURE__ */ new Date()\n };\n d.postMessage(ve(h));\n }\n function w(u) {\n if (!d) return;\n const l = {\n type: \"undo\",\n operation: u,\n clientId: r.value,\n timestamp: /* @__PURE__ */ new Date()\n };\n d.postMessage(ve(l));\n }\n function T(u) {\n if (!d) return;\n const l = {\n type: \"redo\",\n operation: u,\n clientId: r.value,\n timestamp: /* @__PURE__ */ new Date()\n };\n d.postMessage(ve(l));\n }\n const L = Pt(\"stonecrop-ops-operations\", null, {\n serializer: {\n read: (u) => {\n try {\n return JSON.parse(u);\n } catch {\n return null;\n }\n },\n write: (u) => u ? JSON.stringify(u) : \"\"\n }\n });\n function y() {\n if (!(typeof window > \"u\"))\n try {\n const u = L.value;\n u && Array.isArray(u.operations) && (e.value = u.operations.map((l) => ({\n ...l,\n timestamp: new Date(l.timestamp)\n })), t.value = u.currentIndex ?? -1);\n } catch (u) {\n typeof console < \"u\" && console.error(\"Failed to load operations from persistence:\", u);\n }\n }\n function E() {\n if (!(typeof window > \"u\"))\n try {\n L.value = {\n operations: e.value.map((u) => ({\n ...u,\n timestamp: u.timestamp.toISOString()\n })),\n currentIndex: t.value\n };\n } catch (u) {\n typeof console < \"u\" && console.error(\"Failed to save operations to persistence:\", u);\n }\n }\n function m() {\n U(\n [e, t],\n () => {\n n.value.enablePersistence && E();\n },\n { deep: !0 }\n );\n }\n return {\n // State\n operations: e,\n currentIndex: t,\n config: n,\n clientId: r,\n undoRedoState: b,\n // Computed\n canUndo: a,\n canRedo: c,\n undoCount: f,\n redoCount: g,\n // Methods\n configure: A,\n addOperation: $,\n startBatch: k,\n commitBatch: x,\n cancelBatch: N,\n undo: D,\n redo: P,\n clear: _,\n getOperationsFor: v,\n getSnapshot: O,\n markIrreversible: j,\n logAction: M\n };\n});\nclass ue {\n /**\n * The root FieldTriggerEngine instance\n */\n static _root;\n options;\n doctypeActions = /* @__PURE__ */ new Map();\n // doctype -> action/field -> functions\n doctypeTransitions = /* @__PURE__ */ new Map();\n // doctype -> transition -> functions\n fieldRollbackConfig = /* @__PURE__ */ new Map();\n // doctype -> field -> rollback enabled\n globalActions = /* @__PURE__ */ new Map();\n // action name -> function\n globalTransitionActions = /* @__PURE__ */ new Map();\n // transition action name -> function\n /**\n * Creates a new FieldTriggerEngine instance (singleton pattern)\n * @param options - Configuration options for the field trigger engine\n */\n constructor(e = {}) {\n if (ue._root)\n return ue._root;\n ue._root = this, this.options = {\n defaultTimeout: e.defaultTimeout ?? 5e3,\n debug: e.debug ?? !1,\n enableRollback: e.enableRollback ?? !0,\n errorHandler: e.errorHandler\n };\n }\n /**\n * Register a global action function\n * @param name - The name of the action\n * @param fn - The action function\n */\n registerAction(e, t) {\n this.globalActions.set(e, t);\n }\n /**\n * Register a global XState transition action function\n * @param name - The name of the transition action\n * @param fn - The transition action function\n */\n registerTransitionAction(e, t) {\n this.globalTransitionActions.set(e, t);\n }\n /**\n * Configure rollback behavior for a specific field trigger\n * @param doctype - The doctype name\n * @param fieldname - The field name\n * @param enableRollback - Whether to enable rollback\n */\n setFieldRollback(e, t, r) {\n this.fieldRollbackConfig.has(e) || this.fieldRollbackConfig.set(e, /* @__PURE__ */ new Map()), this.fieldRollbackConfig.get(e).set(t, r);\n }\n /**\n * Get rollback configuration for a specific field trigger\n */\n getFieldRollback(e, t) {\n return this.fieldRollbackConfig.get(e)?.get(t);\n }\n /**\n * Register actions from a doctype - both regular actions and field triggers\n * Separates XState transitions (uppercase) from field triggers (lowercase)\n * @param doctype - The doctype name\n * @param actions - The actions to register (supports Immutable Map, Map, or plain object)\n */\n registerDoctypeActions(e, t) {\n if (!t) return;\n const r = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map();\n if (typeof t.entrySeq == \"function\")\n t.entrySeq().forEach(([s, i]) => {\n this.categorizeAction(s, i, r, o);\n });\n else if (t instanceof Map)\n for (const [s, i] of t)\n this.categorizeAction(s, i, r, o);\n else t && typeof t == \"object\" && Object.entries(t).forEach(([s, i]) => {\n this.categorizeAction(s, i, r, o);\n });\n this.doctypeActions.set(e, r), this.doctypeTransitions.set(e, o);\n }\n /**\n * Categorize an action as either a field trigger or XState transition\n * Uses uppercase convention: UPPERCASE = transition, lowercase/mixed = field trigger\n */\n categorizeAction(e, t, r, o) {\n this.isTransitionKey(e) ? o.set(e, t) : r.set(e, t);\n }\n /**\n * Determine if a key represents an XState transition\n * Transitions are identified by being all uppercase\n */\n isTransitionKey(e) {\n return /^[A-Z0-9_]+$/.test(e) && e.length > 0;\n }\n /**\n * Execute field triggers for a changed field\n * @param context - The field change context\n * @param options - Execution options (timeout and enableRollback)\n */\n async executeFieldTriggers(e, t = {}) {\n const { doctype: r, fieldname: o } = e, s = this.findFieldTriggers(r, o);\n if (s.length === 0)\n return {\n path: e.path,\n actionResults: [],\n totalExecutionTime: 0,\n allSucceeded: !0,\n stoppedOnError: !1,\n rolledBack: !1\n };\n const i = performance.now(), a = [];\n let c = !1, f = !1, g;\n const b = this.getFieldRollback(r, o), A = t.enableRollback ?? b ?? this.options.enableRollback;\n A && e.store && (g = this.captureSnapshot(e));\n for (const N of s)\n try {\n const D = await this.executeAction(N, e, t.timeout);\n if (a.push(D), !D.success) {\n c = !0;\n break;\n }\n } catch (D) {\n const S = {\n success: !1,\n error: D instanceof Error ? D : new Error(String(D)),\n executionTime: 0,\n action: N\n };\n a.push(S), c = !0;\n break;\n }\n if (A && c && g && e.store)\n try {\n this.restoreSnapshot(e, g), f = !0;\n } catch (N) {\n console.error(\"[FieldTriggers] Rollback failed:\", N);\n }\n const $ = performance.now() - i, k = a.filter((N) => !N.success);\n if (k.length > 0 && this.options.errorHandler)\n for (const N of k)\n try {\n this.options.errorHandler(N.error, e, N.action);\n } catch (D) {\n console.error(\"[FieldTriggers] Error in global error handler:\", D);\n }\n return {\n path: e.path,\n actionResults: a,\n totalExecutionTime: $,\n allSucceeded: a.every((N) => N.success),\n stoppedOnError: c,\n rolledBack: f,\n snapshot: this.options.debug && A ? g : void 0\n // Only include snapshot in debug mode if rollback is enabled\n };\n }\n /**\n * Execute XState transition actions\n * Similar to field triggers but specifically for FSM state transitions\n * @param context - The transition change context\n * @param options - Execution options (timeout)\n */\n async executeTransitionActions(e, t = {}) {\n const { doctype: r, transition: o } = e, s = this.findTransitionActions(r, o);\n if (s.length === 0)\n return [];\n const i = [];\n for (const c of s)\n try {\n const f = await this.executeTransitionAction(c, e, t.timeout);\n if (i.push(f), !f.success)\n break;\n } catch (f) {\n const b = {\n success: !1,\n error: f instanceof Error ? f : new Error(String(f)),\n executionTime: 0,\n action: c,\n transition: o\n };\n i.push(b);\n break;\n }\n const a = i.filter((c) => !c.success);\n if (a.length > 0 && this.options.errorHandler)\n for (const c of a)\n try {\n this.options.errorHandler(c.error, e, c.action);\n } catch (f) {\n console.error(\"[FieldTriggers] Error in global error handler:\", f);\n }\n return i;\n }\n /**\n * Find transition actions for a specific doctype and transition\n */\n findTransitionActions(e, t) {\n const r = this.doctypeTransitions.get(e);\n return r ? r.get(t) || [] : [];\n }\n /**\n * Execute a single transition action by name\n */\n async executeTransitionAction(e, t, r) {\n const o = performance.now(), s = r ?? this.options.defaultTimeout;\n try {\n let i = this.globalTransitionActions.get(e);\n if (!i) {\n const c = this.globalActions.get(e);\n c && (i = c);\n }\n if (!i)\n throw new Error(`Transition action \"${e}\" not found in registry`);\n return await this.executeWithTimeout(i, t, s), {\n success: !0,\n executionTime: performance.now() - o,\n action: e,\n transition: t.transition\n };\n } catch (i) {\n const a = performance.now() - o;\n return {\n success: !1,\n error: i instanceof Error ? i : new Error(String(i)),\n executionTime: a,\n action: e,\n transition: t.transition\n };\n }\n }\n /**\n * Find field triggers for a specific doctype and field\n * Field triggers are identified by keys that look like field paths (contain dots or match field names)\n */\n findFieldTriggers(e, t) {\n const r = this.doctypeActions.get(e);\n if (!r) return [];\n const o = [];\n for (const [s, i] of r)\n this.isFieldTriggerKey(s, t) && o.push(...i);\n return o;\n }\n /**\n * Determine if an action key represents a field trigger\n * Field triggers can be:\n * - Exact field name match: \"emailAddress\"\n * - Wildcard patterns: \"emailAddress.*\", \"*.is_primary\"\n * - Nested field paths: \"address.street\", \"contact.email\"\n */\n isFieldTriggerKey(e, t) {\n return e === t ? !0 : e.includes(\".\") ? this.matchFieldPattern(e, t) : e.includes(\"*\") ? this.matchFieldPattern(e, t) : !1;\n }\n /**\n * Match a field pattern against a field name\n * Supports wildcards (*) for dynamic segments\n */\n matchFieldPattern(e, t) {\n const r = e.split(\".\"), o = t.split(\".\");\n if (r.length !== o.length)\n return !1;\n for (let s = 0; s < r.length; s++) {\n const i = r[s], a = o[s];\n if (i !== \"*\" && i !== a)\n return !1;\n }\n return !0;\n }\n /**\n * Execute a single action by name\n */\n async executeAction(e, t, r) {\n const o = performance.now(), s = r ?? this.options.defaultTimeout;\n try {\n const i = this.globalActions.get(e);\n if (!i)\n throw new Error(`Action \"${e}\" not found in registry`);\n return await this.executeWithTimeout(i, t, s), {\n success: !0,\n executionTime: performance.now() - o,\n action: e\n };\n } catch (i) {\n const a = performance.now() - o;\n return {\n success: !1,\n error: i instanceof Error ? i : new Error(String(i)),\n executionTime: a,\n action: e\n };\n }\n }\n /**\n * Execute a function with timeout\n */\n async executeWithTimeout(e, t, r) {\n return new Promise((o, s) => {\n const i = setTimeout(() => {\n s(new Error(`Action timeout after ${r}ms`));\n }, r);\n Promise.resolve(e(t)).then((a) => {\n clearTimeout(i), o(a);\n }).catch((a) => {\n clearTimeout(i), s(a);\n });\n });\n }\n /**\n * Capture a snapshot of the record state before executing actions\n * This creates a deep copy of the record data for potential rollback\n */\n captureSnapshot(e) {\n if (!(!e.store || !e.doctype || !e.recordId))\n try {\n const t = `${e.doctype}.${e.recordId}`, r = e.store.get(t);\n return !r || typeof r != \"object\" ? void 0 : JSON.parse(JSON.stringify(r));\n } catch (t) {\n this.options.debug && console.warn(\"[FieldTriggers] Failed to capture snapshot:\", t);\n return;\n }\n }\n /**\n * Restore a previously captured snapshot\n * This reverts the record to its state before actions were executed\n */\n restoreSnapshot(e, t) {\n if (!(!e.store || !e.doctype || !e.recordId || !t))\n try {\n const r = `${e.doctype}.${e.recordId}`;\n e.store.set(r, t), this.options.debug && console.log(`[FieldTriggers] Rolled back ${r} to previous state`);\n } catch (r) {\n throw console.error(\"[FieldTriggers] Failed to restore snapshot:\", r), r;\n }\n }\n}\nfunction K(n) {\n return new ue(n);\n}\nfunction xt(n, e) {\n K().registerAction(n, e);\n}\nfunction Mt(n, e) {\n K().registerTransitionAction(n, e);\n}\nfunction Ft(n, e, t) {\n K().setFieldRollback(n, e, t);\n}\nasync function Bt(n, e, t) {\n const r = K(), o = {\n path: t?.path || (t?.recordId ? `${n}.${t.recordId}` : n),\n fieldname: \"\",\n beforeValue: void 0,\n afterValue: void 0,\n operation: \"set\",\n doctype: n,\n recordId: t?.recordId,\n timestamp: /* @__PURE__ */ new Date(),\n transition: e,\n currentState: t?.currentState,\n targetState: t?.targetState,\n fsmContext: t?.fsmContext\n };\n return await r.executeTransitionActions(o);\n}\nfunction jt(n, e) {\n if (n)\n try {\n pe().markIrreversible(n, e);\n } catch {\n }\n}\nfunction Ve() {\n try {\n return pe();\n } catch {\n return null;\n }\n}\nclass ne {\n static instance;\n /**\n * Gets the singleton instance of HST\n * @returns The HST singleton instance\n */\n static getInstance() {\n return ne.instance || (ne.instance = new ne()), ne.instance;\n }\n /**\n * Gets the global registry instance\n * @returns The global registry object or undefined if not found\n */\n getRegistry() {\n if (typeof globalThis < \"u\") {\n const e = globalThis.Registry?._root;\n if (e)\n return e;\n }\n if (typeof window < \"u\") {\n const e = window.Registry?._root;\n if (e)\n return e;\n }\n if (typeof global < \"u\" && global) {\n const e = global.Registry?._root;\n if (e)\n return e;\n }\n }\n /**\n * Helper method to get doctype metadata from the registry\n * @param doctype - The name of the doctype to retrieve metadata for\n * @returns The doctype metadata object or undefined if not found\n */\n getDoctypeMeta(e) {\n const t = this.getRegistry();\n if (t && typeof t == \"object\" && \"registry\" in t)\n return t.registry[e];\n }\n}\nclass Se {\n target;\n parentPath;\n rootNode;\n doctype;\n parentDoctype;\n hst;\n constructor(e, t, r = \"\", o = null, s) {\n return this.target = e, this.parentPath = r, this.rootNode = o || this, this.doctype = t, this.parentDoctype = s, this.hst = ne.getInstance(), new Proxy(this, {\n get(i, a) {\n if (a in i) return i[a];\n const c = String(a);\n return i.getNode(c);\n },\n set(i, a, c) {\n const f = String(a);\n return i.set(f, c), !0;\n }\n });\n }\n get(e) {\n return this.resolveValue(e);\n }\n // Method to get a tree-wrapped node for navigation\n getNode(e) {\n const t = this.resolvePath(e), r = this.resolveValue(e), o = t.split(\".\");\n let s = this.doctype;\n return this.doctype === \"StonecropStore\" && o.length >= 1 && (s = o[0]), typeof r == \"object\" && r !== null && !this.isPrimitive(r) ? new Se(r, s, t, this.rootNode, this.parentDoctype) : new Se(r, s, t, this.rootNode, this.parentDoctype);\n }\n set(e, t, r = \"user\") {\n const o = this.resolvePath(e), s = this.has(e) ? this.get(e) : void 0;\n if (r !== \"undo\" && r !== \"redo\") {\n const i = Ve();\n if (i && typeof i.addOperation == \"function\") {\n const a = o.split(\".\"), c = this.doctype === \"StonecropStore\" && a.length >= 1 ? a[0] : this.doctype, f = a.length >= 2 ? a[1] : void 0, g = a.slice(2).join(\".\") || a[a.length - 1], A = t === void 0 && s !== void 0 ? \"delete\" : \"set\";\n i.addOperation(\n {\n type: A,\n path: o,\n fieldname: g,\n beforeValue: s,\n afterValue: t,\n doctype: c,\n recordId: f,\n reversible: !0\n // Default to reversible, can be changed by field triggers\n },\n r\n );\n }\n }\n this.updateValue(e, t), this.triggerFieldActions(o, s, t);\n }\n has(e) {\n try {\n if (e === \"\")\n return !0;\n const t = this.parsePath(e);\n let r = this.target;\n for (let o = 0; o < t.length; o++) {\n const s = t[o];\n if (r == null)\n return !1;\n if (o === t.length - 1)\n return this.isImmutable(r) ? r.has(s) : this.isPiniaStore(r) && r.$state && s in r.$state || s in r;\n r = this.getProperty(r, s);\n }\n return !1;\n } catch {\n return !1;\n }\n }\n // Tree navigation methods\n getParent() {\n if (!this.parentPath) return null;\n const t = this.parentPath.split(\".\").slice(0, -1).join(\".\");\n return t === \"\" ? this.rootNode : this.rootNode.getNode(t);\n }\n getRoot() {\n return this.rootNode;\n }\n getPath() {\n return this.parentPath;\n }\n getDepth() {\n return this.parentPath ? this.parentPath.split(\".\").length : 0;\n }\n getBreadcrumbs() {\n return this.parentPath ? this.parentPath.split(\".\") : [];\n }\n /**\n * Trigger an XState transition with optional context data\n */\n async triggerTransition(e, t) {\n const r = K(), o = this.parentPath.split(\".\");\n let s = this.doctype, i;\n this.doctype === \"StonecropStore\" && o.length >= 1 && (s = o[0]), o.length >= 2 && (i = o[1]);\n const a = {\n path: this.parentPath,\n fieldname: \"\",\n // No specific field for transitions\n beforeValue: void 0,\n afterValue: void 0,\n operation: \"set\",\n doctype: s,\n recordId: i,\n timestamp: /* @__PURE__ */ new Date(),\n store: this.rootNode || void 0,\n transition: e,\n currentState: t?.currentState,\n targetState: t?.targetState,\n fsmContext: t?.fsmContext\n }, c = Ve();\n return c && typeof c.addOperation == \"function\" && c.addOperation(\n {\n type: \"transition\",\n path: this.parentPath,\n fieldname: e,\n beforeValue: t?.currentState,\n afterValue: t?.targetState,\n doctype: s,\n recordId: i,\n reversible: !1,\n // FSM transitions are generally not reversible\n metadata: {\n transition: e,\n currentState: t?.currentState,\n targetState: t?.targetState,\n fsmContext: t?.fsmContext\n }\n },\n \"user\"\n ), await r.executeTransitionActions(a);\n }\n // Private helper methods\n resolvePath(e) {\n return e === \"\" ? this.parentPath : this.parentPath ? `${this.parentPath}.${e}` : e;\n }\n resolveValue(e) {\n if (e === \"\")\n return this.target;\n const t = this.parsePath(e);\n let r = this.target;\n for (const o of t) {\n if (r == null)\n return;\n r = this.getProperty(r, o);\n }\n return r;\n }\n updateValue(e, t) {\n if (e === \"\")\n throw new Error(\"Cannot set value on empty path\");\n const r = this.parsePath(e), o = r.pop();\n let s = this.target;\n for (const i of r)\n if (s = this.getProperty(s, i), s == null)\n throw new Error(`Cannot set property on null/undefined path: ${e}`);\n this.setProperty(s, o, t);\n }\n getProperty(e, t) {\n return this.isImmutable(e) ? e.get(t) : this.isVueReactive(e) ? e[t] : this.isPiniaStore(e) ? e.$state?.[t] ?? e[t] : e[t];\n }\n setProperty(e, t, r) {\n if (this.isImmutable(e))\n throw new Error(\"Cannot directly mutate immutable objects. Use immutable update methods instead.\");\n if (this.isPiniaStore(e)) {\n e.$patch ? e.$patch({ [t]: r }) : e[t] = r;\n return;\n }\n e[t] = r;\n }\n async triggerFieldActions(e, t, r) {\n try {\n if (!e || typeof e != \"string\")\n return;\n const o = e.split(\".\");\n if (o.length < 3)\n return;\n const s = K(), i = o.slice(2).join(\".\") || o[o.length - 1];\n let a = this.doctype;\n this.doctype === \"StonecropStore\" && o.length >= 1 && (a = o[0]);\n let c;\n o.length >= 2 && (c = o[1]);\n const f = {\n path: e,\n fieldname: i,\n beforeValue: t,\n afterValue: r,\n operation: \"set\",\n doctype: a,\n recordId: c,\n timestamp: /* @__PURE__ */ new Date(),\n store: this.rootNode || void 0\n // Pass the root store for snapshot/rollback capabilities\n };\n await s.executeFieldTriggers(f);\n } catch (o) {\n o instanceof Error && console.warn(\"Field trigger error:\", o.message);\n }\n }\n isVueReactive(e) {\n return e && typeof e == \"object\" && \"__v_isReactive\" in e && e.__v_isReactive === !0;\n }\n isPiniaStore(e) {\n return e && typeof e == \"object\" && (\"$state\" in e || \"$patch\" in e || \"$id\" in e);\n }\n isImmutable(e) {\n if (!e || typeof e != \"object\")\n return !1;\n const t = \"get\" in e && typeof e.get == \"function\", r = \"set\" in e && typeof e.set == \"function\", o = \"has\" in e && typeof e.has == \"function\", s = \"__ownerID\" in e || \"_map\" in e || \"_list\" in e || \"_origin\" in e || \"_capacity\" in e || \"_defaultValues\" in e || \"_tail\" in e || \"_root\" in e || \"size\" in e && t && r;\n let i;\n try {\n const c = e;\n if (\"constructor\" in c && c.constructor && typeof c.constructor == \"object\" && \"name\" in c.constructor) {\n const f = c.constructor.name;\n i = typeof f == \"string\" ? f : void 0;\n }\n } catch {\n i = void 0;\n }\n const a = i && (i.includes(\"Map\") || i.includes(\"List\") || i.includes(\"Set\") || i.includes(\"Stack\") || i.includes(\"Seq\")) && (t || r);\n return !!(t && r && o && s || t && r && a);\n }\n isPrimitive(e) {\n return e == null || typeof e == \"string\" || typeof e == \"number\" || typeof e == \"boolean\" || typeof e == \"function\" || typeof e == \"symbol\" || typeof e == \"bigint\";\n }\n /**\n * Parse a path string into segments, handling both dot notation and array bracket notation\n * @param path - The path string to parse (e.g., \"order.456.line_items[0].product\")\n * @returns Array of path segments (e.g., ['order', '456', 'line_items', '0', 'product'])\n */\n parsePath(e) {\n return e ? e.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\").filter((r) => r.length > 0) : [];\n }\n}\nfunction Dt(n, e, t) {\n return new Se(n, e, \"\", null, t);\n}\nclass Ke {\n hstStore;\n _operationLogStore;\n _operationLogConfig;\n /** The registry instance containing all doctype definitions */\n registry;\n /**\n * Creates a new Stonecrop instance with HST integration\n * @param registry - The Registry instance containing doctype definitions\n * @param operationLogConfig - Optional configuration for the operation log\n */\n constructor(e, t) {\n this.registry = e, this._operationLogConfig = t, this.initializeHSTStore(), this.setupRegistrySync();\n }\n /**\n * Get the operation log store (lazy initialization)\n * @internal\n */\n getOperationLogStore() {\n return this._operationLogStore || (this._operationLogStore = pe(), this._operationLogConfig && this._operationLogStore.configure(this._operationLogConfig)), this._operationLogStore;\n }\n /**\n * Initialize the HST store structure\n */\n initializeHSTStore() {\n const e = {};\n Object.keys(this.registry.registry).forEach((t) => {\n e[t] = {};\n }), this.hstStore = Dt(ye(e), \"StonecropStore\");\n }\n /**\n * Setup automatic sync with Registry when doctypes are added\n */\n setupRegistrySync() {\n const e = this.registry.addDoctype.bind(this.registry);\n this.registry.addDoctype = (t) => {\n e(t), this.hstStore.has(t.slug) || this.hstStore.set(t.slug, {});\n };\n }\n /**\n * Get records hash for a doctype\n * @param doctype - The doctype to get records for\n * @returns HST node containing records hash\n */\n records(e) {\n const t = typeof e == \"string\" ? e : e.slug;\n return this.ensureDoctypeExists(t), this.hstStore.getNode(t);\n }\n /**\n * Add a record to the store\n * @param doctype - The doctype\n * @param recordId - The record ID\n * @param recordData - The record data\n */\n addRecord(e, t, r) {\n const o = typeof e == \"string\" ? e : e.slug;\n this.ensureDoctypeExists(o), this.hstStore.set(`${o}.${t}`, r);\n }\n /**\n * Get a specific record\n * @param doctype - The doctype\n * @param recordId - The record ID\n * @returns HST node for the record or undefined\n */\n getRecordById(e, t) {\n const r = typeof e == \"string\" ? e : e.slug;\n if (this.ensureDoctypeExists(r), !(!this.hstStore.has(`${r}.${t}`) || this.hstStore.get(`${r}.${t}`) === void 0))\n return this.hstStore.getNode(`${r}.${t}`);\n }\n /**\n * Remove a record from the store\n * @param doctype - The doctype\n * @param recordId - The record ID\n */\n removeRecord(e, t) {\n const r = typeof e == \"string\" ? e : e.slug;\n this.ensureDoctypeExists(r), this.hstStore.has(`${r}.${t}`) && this.hstStore.set(`${r}.${t}`, void 0);\n }\n /**\n * Get all record IDs for a doctype\n * @param doctype - The doctype\n * @returns Array of record IDs\n */\n getRecordIds(e) {\n const t = typeof e == \"string\" ? e : e.slug;\n this.ensureDoctypeExists(t);\n const r = this.hstStore.get(t);\n return !r || typeof r != \"object\" ? [] : Object.keys(r).filter((o) => r[o] !== void 0);\n }\n /**\n * Clear all records for a doctype\n * @param doctype - The doctype\n */\n clearRecords(e) {\n const t = typeof e == \"string\" ? e : e.slug;\n this.ensureDoctypeExists(t), this.getRecordIds(t).forEach((o) => {\n this.hstStore.set(`${t}.${o}`, void 0);\n });\n }\n /**\n * Setup method for doctype initialization\n * @param doctype - The doctype to setup\n */\n setup(e) {\n this.ensureDoctypeExists(e.slug);\n }\n /**\n * Run action on doctype\n * Executes the action and logs it to the operation log for audit tracking\n * @param doctype - The doctype\n * @param action - The action to run\n * @param args - Action arguments (typically record IDs)\n */\n runAction(e, t, r) {\n const s = this.registry.registry[e.slug]?.actions?.get(t), i = Array.isArray(r) ? r.filter((g) => typeof g == \"string\") : void 0, a = this.getOperationLogStore();\n let c = \"success\", f;\n try {\n s && s.length > 0 && s.forEach((g) => {\n try {\n new Function(\"args\", g)(r);\n } catch (b) {\n throw c = \"failure\", f = b instanceof Error ? b.message : \"Unknown error\", b;\n }\n });\n } catch {\n } finally {\n a.logAction(e.doctype, t, i, c, f);\n }\n }\n /**\n * Get records from server (maintains compatibility)\n * @param doctype - The doctype\n */\n async getRecords(e) {\n (await (await fetch(`/${e.slug}`)).json()).forEach((o) => {\n o.id && this.addRecord(e, o.id, o);\n });\n }\n /**\n * Get single record from server (maintains compatibility)\n * @param doctype - The doctype\n * @param recordId - The record ID\n */\n async getRecord(e, t) {\n const o = await (await fetch(`/${e.slug}/${t}`)).json();\n this.addRecord(e, t, o);\n }\n /**\n * Ensure doctype section exists in HST store\n * @param slug - The doctype slug\n */\n ensureDoctypeExists(e) {\n this.hstStore.has(e) || this.hstStore.set(e, {});\n }\n /**\n * Get doctype metadata from the registry\n * @param context - The route context\n * @returns The doctype metadata\n */\n async getMeta(e) {\n if (!this.registry.getMeta)\n throw new Error(\"No getMeta function provided to Registry\");\n return await this.registry.getMeta(e);\n }\n /**\n * Get the root HST store node for advanced usage\n * @returns Root HST node\n */\n getStore() {\n return this.hstStore;\n }\n}\nfunction Wt(n) {\n n || (n = {});\n const e = n.registry || oe(\"$registry\"), t = oe(\"$stonecrop\"), r = B(), o = B(), s = B({}), i = B(), a = B(), c = B([]);\n if (n.doctype && e) {\n const y = n.doctype.schema ? Array.isArray(n.doctype.schema) ? n.doctype.schema : Array.from(n.doctype.schema) : [];\n c.value = e.resolveSchema(y);\n }\n const f = B([]), g = B(-1), b = W(() => r.value?.getOperationLogStore().canUndo ?? !1), A = W(() => r.value?.getOperationLogStore().canRedo ?? !1), $ = W(() => r.value?.getOperationLogStore().undoCount ?? 0), k = W(() => r.value?.getOperationLogStore().redoCount ?? 0), x = W(\n () => r.value?.getOperationLogStore().undoRedoState ?? {\n canUndo: !1,\n canRedo: !1,\n undoCount: 0,\n redoCount: 0,\n currentIndex: -1\n }\n ), N = (y) => r.value?.getOperationLogStore().undo(y) ?? !1, D = (y) => r.value?.getOperationLogStore().redo(y) ?? !1, P = () => {\n r.value?.getOperationLogStore().startBatch();\n }, S = (y) => r.value?.getOperationLogStore().commitBatch(y) ?? null, C = () => {\n r.value?.getOperationLogStore().cancelBatch();\n }, O = () => {\n r.value?.getOperationLogStore().clear();\n }, _ = (y, E) => r.value?.getOperationLogStore().getOperationsFor(y, E) ?? [], v = () => r.value?.getOperationLogStore().getSnapshot() ?? {\n operations: [],\n currentIndex: -1,\n totalOperations: 0,\n reversibleOperations: 0,\n irreversibleOperations: 0\n }, j = (y, E) => {\n r.value?.getOperationLogStore().markIrreversible(y, E);\n }, M = (y, E, m, u = \"success\", l) => r.value?.getOperationLogStore().logAction(y, E, m, u, l) ?? \"\", d = (y) => {\n r.value?.getOperationLogStore().configure(y);\n };\n Be(async () => {\n if (e) {\n r.value = t || new Ke(e);\n try {\n const y = r.value.getOperationLogStore(), E = Ue(y);\n f.value = E.operations.value, g.value = E.currentIndex.value, U(\n () => E.operations.value,\n (m) => {\n f.value = m;\n }\n ), U(\n () => E.currentIndex.value,\n (m) => {\n g.value = m;\n }\n );\n } catch {\n }\n if (!n.doctype && e.router) {\n const y = e.router.currentRoute.value;\n if (!y.path) return;\n const E = y.path.split(\"/\").filter((u) => u.length > 0), m = E[1]?.toLowerCase();\n if (E.length > 0) {\n const u = {\n path: y.path,\n segments: E\n }, l = await e.getMeta?.(u);\n if (l) {\n if (e.addDoctype(l), r.value.setup(l), i.value = l, a.value = m, o.value = r.value.getStore(), e) {\n const h = l.schema ? Array.isArray(l.schema) ? l.schema : Array.from(l.schema) : [];\n c.value = e.resolveSchema(h);\n }\n if (m && m !== \"new\") {\n const h = r.value.getRecordById(l, m);\n if (h)\n s.value = h.get(\"\") || {};\n else\n try {\n await r.value.getRecord(l, m);\n const I = r.value.getRecordById(l, m);\n I && (s.value = I.get(\"\") || {});\n } catch {\n s.value = J(l);\n }\n } else\n s.value = J(l);\n o.value && xe(l, m || \"new\", s, o.value), r.value.runAction(l, \"load\", m ? [m] : void 0);\n }\n }\n }\n if (n.doctype) {\n o.value = r.value.getStore();\n const y = n.doctype, E = n.recordId;\n if (E && E !== \"new\") {\n const m = r.value.getRecordById(y, E);\n if (m)\n s.value = m.get(\"\") || {};\n else\n try {\n await r.value.getRecord(y, E);\n const u = r.value.getRecordById(y, E);\n u && (s.value = u.get(\"\") || {});\n } catch {\n s.value = J(y);\n }\n } else\n s.value = J(y);\n o.value && xe(y, E || \"new\", s, o.value);\n }\n }\n });\n const p = (y, E) => {\n const m = n.doctype || i.value;\n if (!m) return \"\";\n const u = E || n.recordId || a.value || \"new\";\n return `${m.slug}.${u}.${y}`;\n }, R = (y) => {\n const E = n.doctype || i.value;\n if (!(!o.value || !r.value || !E))\n try {\n const m = y.path.split(\".\");\n if (m.length >= 2) {\n const h = m[0], I = m[1];\n if (o.value.has(`${h}.${I}`) || r.value.addRecord(E, I, { ...s.value }), m.length > 3) {\n const H = `${h}.${I}`, V = m.slice(2);\n let Z = H;\n for (let X = 0; X < V.length - 1; X++)\n if (Z += `.${V[X]}`, !o.value.has(Z)) {\n const we = V[X + 1], Qe = !isNaN(Number(we));\n o.value.set(Z, Qe ? [] : {});\n }\n }\n }\n o.value.set(y.path, y.value);\n const u = y.fieldname.split(\".\"), l = { ...s.value };\n u.length === 1 ? l[u[0]] = y.value : Tt(l, u, y.value), s.value = l;\n } catch {\n }\n };\n (n.doctype || e?.router) && (De(\"hstPathProvider\", p), De(\"hstChangeHandler\", R));\n const F = (y, E, m) => {\n if (!r.value)\n return J(E);\n if (m)\n try {\n const u = o.value?.get(y);\n return u && typeof u == \"object\" ? u : J(E);\n } catch {\n return J(E);\n }\n return J(E);\n }, w = async (y, E) => {\n if (!o.value || !r.value)\n throw new Error(\"HST store not initialized\");\n const m = `${y.slug}.${E}`, l = { ...o.value.get(m) || {} }, h = y.schema ? Array.isArray(y.schema) ? y.schema : Array.from(y.schema) : [], H = (e ? e.resolveSchema(h) : h).filter(\n (V) => \"fieldtype\" in V && V.fieldtype === \"Doctype\" && \"schema\" in V && Array.isArray(V.schema)\n );\n for (const V of H) {\n const Z = V, X = `${m}.${Z.fieldname}`, we = Ze(Z.schema, X, o.value);\n l[Z.fieldname] = we;\n }\n return l;\n }, T = (y, E) => ({\n provideHSTPath: (l) => `${y}.${l}`,\n handleHSTChange: (l) => {\n const h = l.path.startsWith(y) ? l.path : `${y}.${l.fieldname}`;\n R({\n ...l,\n path: h\n });\n }\n }), L = {\n operations: f,\n currentIndex: g,\n undoRedoState: x,\n canUndo: b,\n canRedo: A,\n undoCount: $,\n redoCount: k,\n undo: N,\n redo: D,\n startBatch: P,\n commitBatch: S,\n cancelBatch: C,\n clear: O,\n getOperationsFor: _,\n getSnapshot: v,\n markIrreversible: j,\n logAction: M,\n configure: d\n };\n return n.doctype ? {\n stonecrop: r,\n operationLog: L,\n provideHSTPath: p,\n handleHSTChange: R,\n hstStore: o,\n formData: s,\n resolvedSchema: c,\n loadNestedData: F,\n saveRecursive: w,\n createNestedContext: T\n } : !n.doctype && e?.router ? {\n stonecrop: r,\n operationLog: L,\n provideHSTPath: p,\n handleHSTChange: R,\n hstStore: o,\n formData: s,\n resolvedSchema: c,\n loadNestedData: F,\n saveRecursive: w,\n createNestedContext: T\n } : {\n stonecrop: r,\n operationLog: L\n };\n}\nfunction J(n) {\n const e = {};\n return n.schema && n.schema.forEach((t) => {\n switch (\"fieldtype\" in t ? t.fieldtype : \"Data\") {\n case \"Data\":\n case \"Text\":\n e[t.fieldname] = \"\";\n break;\n case \"Check\":\n e[t.fieldname] = !1;\n break;\n case \"Int\":\n case \"Float\":\n e[t.fieldname] = 0;\n break;\n case \"Table\":\n e[t.fieldname] = [];\n break;\n case \"JSON\":\n e[t.fieldname] = {};\n break;\n default:\n e[t.fieldname] = null;\n }\n }), e;\n}\nfunction xe(n, e, t, r) {\n U(\n t,\n (o) => {\n const s = `${n.slug}.${e}`;\n Object.keys(o).forEach((i) => {\n const a = `${s}.${i}`;\n try {\n r.set(a, o[i]);\n } catch {\n }\n });\n },\n { deep: !0 }\n );\n}\nfunction Tt(n, e, t) {\n let r = n;\n for (let s = 0; s < e.length - 1; s++) {\n const i = e[s];\n (!(i in r) || typeof r[i] != \"object\") && (r[i] = isNaN(Number(e[s + 1])) ? {} : []), r = r[i];\n }\n const o = e[e.length - 1];\n r[o] = t;\n}\nfunction Ze(n, e, t) {\n const o = { ...t.get(e) || {} }, s = n.filter(\n (i) => \"fieldtype\" in i && i.fieldtype === \"Doctype\" && \"schema\" in i && Array.isArray(i.schema)\n );\n for (const i of s) {\n const a = i, c = `${e}.${a.fieldname}`, f = Ze(a.schema, c, t);\n o[a.fieldname] = f;\n }\n return o;\n}\nfunction Ge(n) {\n const t = oe(\"$operationLogStore\", void 0) || pe();\n n && t.configure(n);\n const { operations: r, currentIndex: o, undoRedoState: s, canUndo: i, canRedo: a, undoCount: c, redoCount: f } = Ue(t);\n function g(O) {\n return t.undo(O);\n }\n function b(O) {\n return t.redo(O);\n }\n function A() {\n t.startBatch();\n }\n function $(O) {\n return t.commitBatch(O);\n }\n function k() {\n t.cancelBatch();\n }\n function x() {\n t.clear();\n }\n function N(O, _) {\n return t.getOperationsFor(O, _);\n }\n function D() {\n return t.getSnapshot();\n }\n function P(O, _) {\n t.markIrreversible(O, _);\n }\n function S(O, _, v, j = \"success\", M) {\n return t.logAction(O, _, v, j, M);\n }\n function C(O) {\n t.configure(O);\n }\n return {\n // State\n operations: r,\n currentIndex: o,\n undoRedoState: s,\n canUndo: i,\n canRedo: a,\n undoCount: c,\n redoCount: f,\n // Methods\n undo: g,\n redo: b,\n startBatch: A,\n commitBatch: $,\n cancelBatch: k,\n clear: x,\n getOperationsFor: N,\n getSnapshot: D,\n markIrreversible: P,\n logAction: S,\n configure: C\n };\n}\nfunction Ht(n, e = !0) {\n if (!e) return;\n const { undo: t, redo: r, canUndo: o, canRedo: s } = Ge(), i = _t();\n ie(i[\"Ctrl+Z\"], () => {\n o.value && t(n);\n }), ie(i[\"Meta+Z\"], () => {\n o.value && t(n);\n }), ie(i[\"Ctrl+Shift+Z\"], () => {\n s.value && r(n);\n }), ie(i[\"Meta+Shift+Z\"], () => {\n s.value && r(n);\n }), ie(i[\"Ctrl+Y\"], () => {\n s.value && r(n);\n });\n}\nasync function zt(n, e) {\n const { startBatch: t, commitBatch: r, cancelBatch: o } = Ge();\n t();\n try {\n return await n(), r(e);\n } catch (s) {\n throw o(), s;\n }\n}\nclass Ut {\n /**\n * The doctype name\n * @public\n * @readonly\n */\n doctype;\n /**\n * The doctype schema\n * @public\n * @readonly\n */\n schema;\n /**\n * The doctype workflow\n * @public\n * @readonly\n */\n workflow;\n /**\n * The doctype actions and field triggers\n * @public\n * @readonly\n */\n actions;\n /**\n * The doctype component\n * @public\n * @readonly\n */\n component;\n /**\n * Creates a new DoctypeMeta instance\n * @param doctype - The doctype name\n * @param schema - The doctype schema definition\n * @param workflow - The doctype workflow configuration (XState machine)\n * @param actions - The doctype actions and field triggers\n * @param component - Optional Vue component for rendering the doctype\n */\n constructor(e, t, r, o, s) {\n this.doctype = e, this.schema = t, this.workflow = r, this.actions = o, this.component = s;\n }\n /**\n * Converts the registered doctype string to a slug (kebab-case). The following conversions are made:\n * - It replaces camelCase and PascalCase with kebab-case strings\n * - It replaces spaces and underscores with hyphens\n * - It converts the string to lowercase\n *\n * @returns The slugified doctype string\n *\n * @example\n * ```ts\n * const doctype = new DoctypeMeta('TaskItem', schema, workflow, actions\n * console.log(doctype.slug) // 'task-item'\n * ```\n *\n * @public\n */\n get slug() {\n return this.doctype.replace(/([a-z])([A-Z])/g, \"$1-$2\").replace(/[\\s_]+/g, \"-\").toLowerCase();\n }\n}\nclass fe {\n /**\n * The root Registry instance\n */\n static _root;\n /**\n * The name of the Registry instance\n *\n * @defaultValue 'Registry'\n */\n name;\n /**\n * The registry property contains a collection of doctypes\n * @see {@link DoctypeMeta}\n */\n registry;\n /**\n * The Vue router instance\n * @see {@link https://router.vuejs.org/}\n */\n router;\n /**\n * Creates a new Registry instance (singleton pattern)\n * @param router - Optional Vue router instance for route management\n * @param getMeta - Optional function to fetch doctype metadata from an API\n */\n constructor(e, t) {\n if (fe._root)\n return fe._root;\n fe._root = this, this.name = \"Registry\", this.registry = {}, this.router = e, this.getMeta = t;\n }\n /**\n * The getMeta function fetches doctype metadata from an API based on route context\n * @see {@link DoctypeMeta}\n */\n getMeta;\n /**\n * Get doctype metadata\n * @param doctype - The doctype to fetch metadata for\n * @returns The doctype metadata\n * @see {@link DoctypeMeta}\n */\n addDoctype(e) {\n e.doctype in Object.keys(this.registry) || (this.registry[e.slug] = e);\n const t = K();\n t.registerDoctypeActions(e.doctype, e.actions), e.slug !== e.doctype && t.registerDoctypeActions(e.slug, e.actions), e.component && this.router && !this.router.hasRoute(e.doctype) && this.router.addRoute({\n path: `/${e.slug}`,\n name: e.slug,\n component: e.component\n });\n }\n /**\n * Resolve nested Doctype and Table fields in a schema by embedding child schemas inline.\n *\n * @remarks\n * Walks the schema array and for each field with `fieldtype: 'Doctype'` and a string\n * `options` value, looks up the referenced doctype in the registry and embeds its schema\n * as the field's `schema` property. Recurses for deeply nested doctypes.\n *\n * For fields with `fieldtype: 'Table'`, looks up the referenced child doctype and\n * auto-derives `columns` from its schema fields (unless columns are already provided).\n * Also sets sensible defaults for `component` (`'ATable'`) and `config` (`{ view: 'list' }`).\n * Row data is expected to come from the parent form's data model at `data[fieldname]`.\n *\n * Returns a new array — does not mutate the original schema.\n *\n * @param schema - The schema array to resolve\n * @returns A new schema array with nested Doctype fields resolved\n *\n * @example\n * ```ts\n * registry.addDoctype(addressDoctype)\n * registry.addDoctype(customerDoctype)\n *\n * // Before: customer schema has { fieldname: 'address', fieldtype: 'Doctype', options: 'address' }\n * const resolved = registry.resolveSchema(customerSchema)\n * // After: address field now has schema: [...address fields...]\n * ```\n *\n * @public\n */\n resolveSchema(e, t) {\n const r = t || /* @__PURE__ */ new Set();\n return e.map((o) => {\n if (\"fieldtype\" in o && o.fieldtype === \"Doctype\" && \"options\" in o && typeof o.options == \"string\") {\n const s = o.options;\n if (r.has(s))\n return { ...o };\n const i = this.registry[s];\n if (i && i.schema) {\n const a = Array.isArray(i.schema) ? i.schema : Array.from(i.schema);\n r.add(s);\n const c = this.resolveSchema(a, r);\n return r.delete(s), { ...o, schema: c };\n }\n }\n if (\"fieldtype\" in o && o.fieldtype === \"Table\" && \"options\" in o && typeof o.options == \"string\") {\n const s = o.options;\n if (r.has(s))\n return { ...o };\n const i = this.registry[s];\n if (i && i.schema) {\n const a = Array.isArray(i.schema) ? i.schema : Array.from(i.schema), c = { ...o };\n return (!(\"columns\" in o) || !o.columns) && (c.columns = a.map((f) => ({\n name: f.fieldname,\n fieldname: f.fieldname,\n label: \"label\" in f && f.label || f.fieldname,\n fieldtype: \"fieldtype\" in f ? f.fieldtype : \"Data\",\n align: \"align\" in f && f.align || \"left\",\n edit: \"edit\" in f ? f.edit : !0,\n width: \"width\" in f && f.width || \"20ch\"\n }))), c.component || (c.component = \"ATable\"), (!(\"config\" in o) || !o.config) && (c.config = { view: \"list\" }), (!(\"rows\" in o) || !o.rows) && (c.rows = []), c;\n }\n }\n return { ...o };\n });\n }\n /**\n * Initialize a new record with default values based on a schema.\n *\n * @remarks\n * Creates a plain object with keys from the schema's fieldnames and default values\n * derived from each field's `fieldtype`:\n * - Data, Text → `''`\n * - Check → `false`\n * - Int, Float, Decimal, Currency, Quantity → `0`\n * - Table → `[]`\n * - JSON, Doctype → `{}`\n * - All others → `null`\n *\n * For Doctype fields with a resolved `schema` array, recursively initializes the nested record.\n *\n * @param schema - The schema array to derive defaults from\n * @returns A plain object with default values for each field\n *\n * @example\n * ```ts\n * const defaults = registry.initializeRecord(addressSchema)\n * // { street: '', city: '', state: '', zip_code: '' }\n * ```\n *\n * @public\n */\n initializeRecord(e) {\n const t = {};\n return e.forEach((r) => {\n switch (\"fieldtype\" in r ? r.fieldtype : \"Data\") {\n case \"Data\":\n case \"Text\":\n case \"Code\":\n t[r.fieldname] = \"\";\n break;\n case \"Check\":\n t[r.fieldname] = !1;\n break;\n case \"Int\":\n case \"Float\":\n case \"Decimal\":\n case \"Currency\":\n case \"Quantity\":\n t[r.fieldname] = 0;\n break;\n case \"Table\":\n t[r.fieldname] = [];\n break;\n case \"JSON\":\n t[r.fieldname] = {};\n break;\n case \"Doctype\":\n \"schema\" in r && Array.isArray(r.schema) ? t[r.fieldname] = this.initializeRecord(r.schema) : t[r.fieldname] = {};\n break;\n default:\n t[r.fieldname] = null;\n }\n }), t;\n }\n // TODO: should we allow clearing the registry at all?\n // clear() {\n // \tthis.registry = {}\n // \tif (this.router) {\n // \t\tconst routes = this.router.getRoutes()\n // \t\tfor (const route of routes) {\n // \t\t\tif (route.name) {\n // \t\t\t\tthis.router.removeRoute(route.name)\n // \t\t\t}\n // \t\t}\n // \t}\n // }\n}\nasync function It(n, e, t) {\n await de();\n try {\n await t(n, e);\n } catch {\n }\n}\nconst Jt = {\n install: (n, e) => {\n const t = n.config.globalProperties.$router, r = e?.router, o = t || r;\n !t && r && n.use(r);\n const s = new fe(o, e?.getMeta);\n n.provide(\"$registry\", s), n.config.globalProperties.$registry = s;\n const i = new Ke(s);\n n.provide(\"$stonecrop\", i), n.config.globalProperties.$stonecrop = i;\n try {\n const a = n.config.globalProperties.$pinia;\n if (a) {\n const c = pe(a);\n n.provide(\"$operationLogStore\", c), n.config.globalProperties.$operationLogStore = c;\n }\n } catch (a) {\n console.warn(\"Pinia not available - operation log features will be disabled:\", a);\n }\n if (e?.components)\n for (const [a, c] of Object.entries(e.components))\n n.component(a, c);\n e?.autoInitializeRouter && e.onRouterInitialized && It(s, i, e.onRouterInitialized);\n }\n};\nvar Ct = /* @__PURE__ */ ((n) => (n.ERROR = \"error\", n.WARNING = \"warning\", n.INFO = \"info\", n))(Ct || {});\nclass kt {\n options;\n /**\n * Creates a new SchemaValidator instance\n * @param options - Validator configuration options\n */\n constructor(e = {}) {\n this.options = {\n registry: e.registry || null,\n validateLinkTargets: e.validateLinkTargets ?? !0,\n validateActions: e.validateActions ?? !0,\n validateWorkflows: e.validateWorkflows ?? !0,\n validateRequiredProperties: e.validateRequiredProperties ?? !0\n };\n }\n /**\n * Validates a complete doctype schema\n * @param doctype - Doctype name\n * @param schema - Schema fields (List or Array)\n * @param workflow - Optional workflow configuration\n * @param actions - Optional actions map\n * @returns Validation result\n */\n validate(e, t, r, o) {\n const s = [], i = t ? Array.isArray(t) ? t : t.toArray() : [];\n if (this.options.validateRequiredProperties && s.push(...this.validateRequiredProperties(e, i)), this.options.validateLinkTargets && this.options.registry && s.push(...this.validateLinkFields(e, i, this.options.registry)), this.options.validateWorkflows && r && s.push(...this.validateWorkflow(e, r)), this.options.validateActions && o) {\n const g = o instanceof Map ? o : o.toObject();\n s.push(...this.validateActionRegistration(e, g));\n }\n const a = s.filter(\n (g) => g.severity === \"error\"\n /* ERROR */\n ).length, c = s.filter(\n (g) => g.severity === \"warning\"\n /* WARNING */\n ).length, f = s.filter(\n (g) => g.severity === \"info\"\n /* INFO */\n ).length;\n return {\n valid: a === 0,\n issues: s,\n errorCount: a,\n warningCount: c,\n infoCount: f\n };\n }\n /**\n * Validates that required schema properties are present\n * @internal\n */\n validateRequiredProperties(e, t) {\n const r = [];\n for (const o of t) {\n if (!o.fieldname) {\n r.push({\n severity: \"error\",\n rule: \"required-fieldname\",\n message: \"Field is missing required property: fieldname\",\n doctype: e,\n context: { field: o }\n });\n continue;\n }\n if (!o.component && !(\"fieldtype\" in o) && r.push({\n severity: \"error\",\n rule: \"required-component-or-fieldtype\",\n message: `Field \"${o.fieldname}\" must have either component or fieldtype property`,\n doctype: e,\n fieldname: o.fieldname\n }), \"schema\" in o) {\n const s = o.schema, i = Array.isArray(s) ? s : s.toArray?.() || [];\n r.push(...this.validateRequiredProperties(e, i));\n }\n }\n return r;\n }\n /**\n * Validates Link field targets exist in registry\n * @internal\n */\n validateLinkFields(e, t, r) {\n const o = [];\n for (const s of t) {\n if ((\"fieldtype\" in s ? s.fieldtype : void 0) === \"Link\") {\n const a = \"options\" in s ? s.options : void 0;\n if (!a) {\n o.push({\n severity: \"error\",\n rule: \"link-missing-options\",\n message: `Link field \"${s.fieldname}\" is missing options property (target doctype)`,\n doctype: e,\n fieldname: s.fieldname\n });\n continue;\n }\n const c = typeof a == \"string\" ? a : \"\";\n if (!c) {\n o.push({\n severity: \"error\",\n rule: \"link-invalid-options\",\n message: `Link field \"${s.fieldname}\" has invalid options format (expected string doctype name)`,\n doctype: e,\n fieldname: s.fieldname\n });\n continue;\n }\n r.registry[c] || r.registry[c.toLowerCase()] || o.push({\n severity: \"error\",\n rule: \"link-invalid-target\",\n message: `Link field \"${s.fieldname}\" references non-existent doctype: \"${c}\"`,\n doctype: e,\n fieldname: s.fieldname,\n context: { targetDoctype: c }\n });\n }\n if (\"schema\" in s) {\n const a = s.schema, c = Array.isArray(a) ? a : a.toArray?.() || [];\n o.push(...this.validateLinkFields(e, c, r));\n }\n }\n return o;\n }\n /**\n * Validates workflow state machine configuration\n * @internal\n */\n validateWorkflow(e, t) {\n const r = [];\n if (!t.initial && !t.type && r.push({\n severity: \"warning\",\n rule: \"workflow-missing-initial\",\n message: \"Workflow is missing initial state property\",\n doctype: e\n }), !t.states || Object.keys(t.states).length === 0)\n return r.push({\n severity: \"warning\",\n rule: \"workflow-no-states\",\n message: \"Workflow has no states defined\",\n doctype: e\n }), r;\n t.initial && typeof t.initial == \"string\" && !t.states[t.initial] && r.push({\n severity: \"error\",\n rule: \"workflow-invalid-initial\",\n message: `Workflow initial state \"${t.initial}\" does not exist in states`,\n doctype: e,\n context: { initialState: t.initial }\n });\n const o = Object.keys(t.states), s = /* @__PURE__ */ new Set();\n t.initial && typeof t.initial == \"string\" && s.add(t.initial);\n for (const [i, a] of Object.entries(t.states)) {\n const c = a;\n if (c.on) {\n for (const [f, g] of Object.entries(c.on))\n if (typeof g == \"string\")\n s.add(g);\n else if (g && typeof g == \"object\") {\n const b = \"target\" in g ? g.target : void 0;\n typeof b == \"string\" ? s.add(b) : Array.isArray(b) && b.forEach((A) => {\n typeof A == \"string\" && s.add(A);\n });\n }\n }\n }\n for (const i of o)\n s.has(i) || r.push({\n severity: \"warning\",\n rule: \"workflow-unreachable-state\",\n message: `Workflow state \"${i}\" may not be reachable`,\n doctype: e,\n context: { stateName: i }\n });\n return r;\n }\n /**\n * Validates that actions are registered in the FieldTriggerEngine\n * @internal\n */\n validateActionRegistration(e, t) {\n const r = [], o = K();\n for (const [s, i] of Object.entries(t)) {\n if (!Array.isArray(i)) {\n r.push({\n severity: \"error\",\n rule: \"action-invalid-format\",\n message: `Action configuration for \"${s}\" must be an array`,\n doctype: e,\n context: { triggerName: s, actionNames: i }\n });\n continue;\n }\n for (const a of i) {\n const c = o;\n c.globalActions?.has(a) || c.globalTransitionActions?.has(a) || r.push({\n severity: \"warning\",\n rule: \"action-not-registered\",\n message: `Action \"${a}\" referenced in \"${s}\" is not registered in FieldTriggerEngine`,\n doctype: e,\n context: { triggerName: s, actionName: a }\n });\n }\n }\n return r;\n }\n}\nfunction Lt(n, e) {\n return new kt({\n registry: n,\n ...e\n });\n}\nfunction qt(n, e, t, r, o) {\n return Lt(t).validate(n, e, r, o);\n}\nexport {\n Ut as DoctypeMeta,\n ne as HST,\n fe as Registry,\n kt as SchemaValidator,\n Ke as Stonecrop,\n Ct as ValidationSeverity,\n Dt as createHST,\n Lt as createValidator,\n Jt as default,\n K as getGlobalTriggerEngine,\n jt as markOperationIrreversible,\n xt as registerGlobalAction,\n Mt as registerTransitionAction,\n Ft as setFieldRollback,\n Bt as triggerTransition,\n Ge as useOperationLog,\n pe as useOperationLogStore,\n Wt as useStonecrop,\n Ht as useUndoRedoShortcuts,\n qt as validateSchema,\n zt as withBatch\n};\n//# sourceMappingURL=stonecrop.js.map\n","import { defineComponent as Y, useTemplateRef as ae, ref as S, computed as T, createElementBlock as k, openBlock as w, unref as L, normalizeClass as K, normalizeStyle as fe, createBlock as re, resolveDynamicComponent as Re, mergeProps as at, toDisplayString as j, createElementVNode as y, withDirectives as U, withModifiers as pe, Fragment as oe, renderList as ie, vShow as ge, createCommentVNode as z, renderSlot as ue, createTextVNode as Dt, onMounted as we, watch as Q, onBeforeUnmount as an, nextTick as st, useCssVars as Cn, onUnmounted as Mn, toValue as $, mergeModels as me, useModel as he, createVNode as ot, withCtx as At, shallowRef as ee, getCurrentScope as rt, onScopeDispose as it, reactive as sn, vModelText as de, vModelCheckbox as rn, vModelSelect as En, isRef as An, toRefs as Tn, customRef as $t, getCurrentInstance as ut, watchEffect as Te, toRef as un, readonly as St, resolveComponent as cn, withKeys as $e } from \"vue\";\nimport { defineStore as Dn } from \"pinia\";\nimport './assets/index.css';function dn(e, t) {\n return rt() ? (it(e, t), !0) : !1;\n}\nconst $n = typeof window < \"u\" && typeof document < \"u\";\ntypeof WorkerGlobalScope < \"u\" && globalThis instanceof WorkerGlobalScope;\nconst Sn = (e) => e != null, Rn = Object.prototype.toString, Ln = (e) => Rn.call(e) === \"[object Object]\", Hn = () => {\n};\nfunction Qe(e) {\n return Array.isArray(e) ? e : [e];\n}\nfunction _n(e, t, n) {\n return Q(e, t, {\n ...n,\n immediate: !0\n });\n}\nconst _e = $n ? window : void 0;\nfunction Le(e) {\n var t;\n const n = $(e);\n return (t = n?.$el) !== null && t !== void 0 ? t : n;\n}\nfunction Be(...e) {\n const t = (o, a, r, s) => (o.addEventListener(a, r, s), () => o.removeEventListener(a, r, s)), n = T(() => {\n const o = Qe($(e[0])).filter((a) => a != null);\n return o.every((a) => typeof a != \"string\") ? o : void 0;\n });\n return _n(() => {\n var o, a;\n return [\n (o = (a = n.value) === null || a === void 0 ? void 0 : a.map((r) => Le(r))) !== null && o !== void 0 ? o : [_e].filter((r) => r != null),\n Qe($(n.value ? e[1] : e[0])),\n Qe(L(n.value ? e[2] : e[1])),\n $(n.value ? e[3] : e[2])\n ];\n }, ([o, a, r, s], l, i) => {\n if (!o?.length || !a?.length || !r?.length) return;\n const u = Ln(s) ? { ...s } : s, c = o.flatMap((p) => a.flatMap((h) => r.map((b) => t(p, h, b, u))));\n i(() => {\n c.forEach((p) => p());\n });\n }, { flush: \"post\" });\n}\n// @__NO_SIDE_EFFECTS__\nfunction Vn() {\n const e = ee(!1), t = ut();\n return t && we(() => {\n e.value = !0;\n }, t), e;\n}\n// @__NO_SIDE_EFFECTS__\nfunction On(e) {\n const t = /* @__PURE__ */ Vn();\n return T(() => (t.value, !!e()));\n}\nfunction Pn(e, t, n = {}) {\n const { window: o = _e, ...a } = n;\n let r;\n const s = /* @__PURE__ */ On(() => o && \"MutationObserver\" in o), l = () => {\n r && (r.disconnect(), r = void 0);\n }, i = Q(T(() => {\n const p = Qe($(e)).map(Le).filter(Sn);\n return new Set(p);\n }), (p) => {\n l(), s.value && p.size && (r = new MutationObserver(t), p.forEach((h) => r.observe(h, a)));\n }, {\n immediate: !0,\n flush: \"post\"\n }), u = () => r?.takeRecords(), c = () => {\n i(), l();\n };\n return dn(c), {\n isSupported: s,\n stop: c,\n takeRecords: u\n };\n}\nfunction Bn(e, t, n = {}) {\n const { window: o = _e, document: a = o?.document, flush: r = \"sync\" } = n;\n if (!o || !a) return Hn;\n let s;\n const l = (c) => {\n s?.(), s = c;\n }, i = Te(() => {\n const c = Le(e);\n if (c) {\n const { stop: p } = Pn(a, (h) => {\n h.map((b) => [...b.removedNodes]).flat().some((b) => b === c || b.contains(c)) && t(h);\n }, {\n window: o,\n childList: !0,\n subtree: !0\n });\n l(p);\n }\n }, { flush: r }), u = () => {\n i(), l();\n };\n return dn(u), u;\n}\n// @__NO_SIDE_EFFECTS__\nfunction Fn(e = {}) {\n var t;\n const { window: n = _e, deep: o = !0, triggerOnRemoval: a = !1 } = e, r = (t = e.document) !== null && t !== void 0 ? t : n?.document, s = () => {\n let u = r?.activeElement;\n if (o)\n for (var c; u?.shadowRoot; ) u = u == null || (c = u.shadowRoot) === null || c === void 0 ? void 0 : c.activeElement;\n return u;\n }, l = ee(), i = () => {\n l.value = s();\n };\n if (n) {\n const u = {\n capture: !0,\n passive: !0\n };\n Be(n, \"blur\", (c) => {\n c.relatedTarget === null && i();\n }, u), Be(n, \"focus\", i, u);\n }\n return a && Bn(l, i, { document: r }), i(), l;\n}\nconst Zn = \"focusin\", Nn = \"focusout\", Wn = \":focus-within\";\nfunction zn(e, t = {}) {\n const { window: n = _e } = t, o = T(() => Le(e)), a = ee(!1), r = T(() => a.value);\n if (!n || !(/* @__PURE__ */ Fn(t)).value) return { focused: r };\n const s = { passive: !0 };\n return Be(o, Zn, () => a.value = !0, s), Be(o, Nn, () => {\n var l, i, u;\n return a.value = (l = (i = o.value) === null || i === void 0 || (u = i.matches) === null || u === void 0 ? void 0 : u.call(i, Wn)) !== null && l !== void 0 ? l : !1;\n }, s), { focused: r };\n}\nfunction Gn(e, { window: t = _e, scrollTarget: n } = {}) {\n const o = S(!1), a = () => {\n if (!t) return;\n const r = t.document, s = Le(e);\n if (!s)\n o.value = !1;\n else {\n const l = s.getBoundingClientRect();\n o.value = l.top <= (t.innerHeight || r.documentElement.clientHeight) && l.left <= (t.innerWidth || r.documentElement.clientWidth) && l.bottom >= 0 && l.right >= 0;\n }\n };\n return Q(\n () => Le(e),\n () => a(),\n { immediate: !0, flush: \"post\" }\n ), t && Be(n || t, \"scroll\", a, {\n capture: !1,\n passive: !0\n }), o;\n}\nconst ye = (e) => {\n let t = Gn(e).value;\n return t = t && e.offsetHeight > 0, t;\n}, xe = (e) => e.tabIndex >= 0, Wt = (e) => {\n const t = e.target;\n return Rt(t);\n}, Rt = (e) => {\n let t;\n if (e instanceof HTMLTableCellElement) {\n const n = e.parentElement?.previousElementSibling;\n if (n) {\n const o = Array.from(n.children)[e.cellIndex];\n o && (t = o);\n }\n } else if (e instanceof HTMLTableRowElement) {\n const n = e.previousElementSibling;\n n && (t = n);\n }\n return t && (!xe(t) || !ye(t)) ? Rt(t) : t;\n}, Un = (e) => {\n const t = e.target;\n let n;\n if (t instanceof HTMLTableCellElement) {\n const o = t.parentElement?.parentElement;\n if (o) {\n const a = o.firstElementChild?.children[t.cellIndex];\n a && (n = a);\n }\n } else if (t instanceof HTMLTableRowElement) {\n const o = t.parentElement;\n if (o) {\n const a = o.firstElementChild;\n a && (n = a);\n }\n }\n return n && (!xe(n) || !ye(n)) ? Lt(n) : n;\n}, zt = (e) => {\n const t = e.target;\n return Lt(t);\n}, Lt = (e) => {\n let t;\n if (e instanceof HTMLTableCellElement) {\n const n = e.parentElement?.nextElementSibling;\n if (n) {\n const o = Array.from(n.children)[e.cellIndex];\n o && (t = o);\n }\n } else if (e instanceof HTMLTableRowElement) {\n const n = e.nextElementSibling;\n n && (t = n);\n }\n return t && (!xe(t) || !ye(t)) ? Lt(t) : t;\n}, jn = (e) => {\n const t = e.target;\n let n;\n if (t instanceof HTMLTableCellElement) {\n const o = t.parentElement?.parentElement;\n if (o) {\n const a = o.lastElementChild?.children[t.cellIndex];\n a && (n = a);\n }\n } else if (t instanceof HTMLTableRowElement) {\n const o = t.parentElement;\n if (o) {\n const a = o.lastElementChild;\n a && (n = a);\n }\n }\n return n && (!xe(n) || !ye(n)) ? Rt(n) : n;\n}, Gt = (e) => {\n const t = e.target;\n return Ht(t);\n}, Ht = (e) => {\n let t;\n return e.previousElementSibling ? t = e.previousElementSibling : t = e.parentElement?.previousElementSibling?.lastElementChild, t && (!xe(t) || !ye(t)) ? Ht(t) : t;\n}, Ut = (e) => {\n const t = e.target;\n return _t(t);\n}, _t = (e) => {\n let t;\n return e.nextElementSibling ? t = e.nextElementSibling : t = e.parentElement?.nextElementSibling?.firstElementChild, t && (!xe(t) || !ye(t)) ? _t(t) : t;\n}, jt = (e) => {\n const t = e.target.parentElement?.firstElementChild;\n return t && (!xe(t) || !ye(t)) ? _t(t) : t;\n}, qt = (e) => {\n const t = e.target.parentElement?.lastElementChild;\n return t && (!xe(t) || !ye(t)) ? Ht(t) : t;\n}, Xe = [\"alt\", \"control\", \"shift\", \"meta\"], qn = {\n ArrowUp: \"up\",\n ArrowDown: \"down\",\n ArrowLeft: \"left\",\n ArrowRight: \"right\"\n}, ct = {\n \"keydown.up\": (e) => {\n const t = Wt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.down\": (e) => {\n const t = zt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.left\": (e) => {\n const t = Gt(e);\n e.preventDefault(), e.stopPropagation(), t && t.focus();\n },\n \"keydown.right\": (e) => {\n const t = Ut(e);\n e.preventDefault(), e.stopPropagation(), t && t.focus();\n },\n \"keydown.control.up\": (e) => {\n const t = Un(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.down\": (e) => {\n const t = jn(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.left\": (e) => {\n const t = jt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.right\": (e) => {\n const t = qt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.end\": (e) => {\n const t = qt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.enter\": (e) => {\n if (e.target instanceof HTMLTableCellElement) {\n e.preventDefault(), e.stopPropagation();\n const t = zt(e);\n t && t.focus();\n }\n },\n \"keydown.shift.enter\": (e) => {\n if (e.target instanceof HTMLTableCellElement) {\n e.preventDefault(), e.stopPropagation();\n const t = Wt(e);\n t && t.focus();\n }\n },\n \"keydown.home\": (e) => {\n const t = jt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.tab\": (e) => {\n const t = Ut(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.shift.tab\": (e) => {\n const t = Gt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n }\n};\nfunction Vt(e) {\n const t = (s) => {\n let l = null;\n return s.parent && (typeof s.parent == \"string\" ? l = document.querySelector(s.parent) : s.parent instanceof HTMLElement ? l = s.parent : l = s.parent.value), l;\n }, n = (s) => {\n const l = t(s);\n let i = [];\n if (typeof s.selectors == \"string\")\n i = Array.from(l ? l.querySelectorAll(s.selectors) : document.querySelectorAll(s.selectors));\n else if (Array.isArray(s.selectors))\n for (const u of s.selectors)\n u instanceof HTMLElement ? i.push(u) : i.push(u.$el);\n else if (s.selectors instanceof HTMLElement)\n i.push(s.selectors);\n else if (s.selectors?.value)\n if (Array.isArray(s.selectors.value))\n for (const u of s.selectors.value)\n u instanceof HTMLElement ? i.push(u) : i.push(u.$el);\n else\n i.push(s.selectors.value);\n return i;\n }, o = (s) => {\n const l = t(s);\n let i = [];\n return s.selectors ? i = n(s) : l && (i = Array.from(l.children).filter((u) => xe(u) && ye(u))), i;\n }, a = (s) => (l) => {\n const i = qn[l.key] || l.key.toLowerCase();\n if (Xe.includes(i)) return;\n const u = s.handlers || ct;\n for (const c of Object.keys(u)) {\n const [p, ...h] = c.split(\".\");\n if (p === \"keydown\" && h.includes(i)) {\n const b = u[c], C = h.filter((v) => Xe.includes(v)), x = Xe.some((v) => {\n const m = v.charAt(0).toUpperCase() + v.slice(1);\n return l.getModifierState(m);\n });\n if (C.length > 0) {\n if (x) {\n for (const v of Xe)\n if (h.includes(v)) {\n const m = v.charAt(0).toUpperCase() + v.slice(1);\n l.getModifierState(m) && b(l);\n }\n }\n } else\n x || b(l);\n }\n }\n }, r = [];\n we(() => {\n for (const s of e) {\n const l = t(s), i = o(s), u = a(s), c = l ? [l] : i;\n for (const p of c) {\n const { focused: h } = zn(S(p)), b = Q(h, (C) => {\n C ? p.addEventListener(\"keydown\", u) : p.removeEventListener(\"keydown\", u);\n });\n r.push(b);\n }\n }\n }), an(() => {\n for (const s of r)\n s();\n });\n}\nfunction Ot(e, t) {\n return rt() ? (it(e, t), !0) : !1;\n}\nconst vn = typeof window < \"u\" && typeof document < \"u\";\ntypeof WorkerGlobalScope < \"u\" && globalThis instanceof WorkerGlobalScope;\nconst Yn = (e) => e != null, Xn = Object.prototype.toString, Jn = (e) => Xn.call(e) === \"[object Object]\", De = () => {\n};\nfunction Kn(...e) {\n if (e.length !== 1) return un(...e);\n const t = e[0];\n return typeof t == \"function\" ? St($t(() => ({\n get: t,\n set: De\n }))) : S(t);\n}\nfunction Qn(e, t) {\n function n(...o) {\n return new Promise((a, r) => {\n Promise.resolve(e(() => t.apply(this, o), {\n fn: t,\n thisArg: this,\n args: o\n })).then(a).catch(r);\n });\n }\n return n;\n}\nfunction eo(e, t = {}) {\n let n, o, a = De;\n const r = (l) => {\n clearTimeout(l), a(), a = De;\n };\n let s;\n return (l) => {\n const i = $(e), u = $(t.maxWait);\n return n && r(n), i <= 0 || u !== void 0 && u <= 0 ? (o && (r(o), o = void 0), Promise.resolve(l())) : new Promise((c, p) => {\n a = t.rejectOnCancel ? p : c, s = l, u && !o && (o = setTimeout(() => {\n n && r(n), o = void 0, c(s());\n }, u)), n = setTimeout(() => {\n o && r(o), o = void 0, c(l());\n }, i);\n });\n };\n}\nfunction et(e) {\n return Array.isArray(e) ? e : [e];\n}\nfunction to(e) {\n return ut();\n}\n// @__NO_SIDE_EFFECTS__\nfunction no(e, t = 200, n = {}) {\n return Qn(eo(t, n), e);\n}\nfunction oo(e, t = {}) {\n if (!An(e)) return Tn(e);\n const n = Array.isArray(e.value) ? Array.from({ length: e.value.length }) : {};\n for (const o in e.value) n[o] = $t(() => ({\n get() {\n return e.value[o];\n },\n set(a) {\n var r;\n if (!((r = $(t.replaceRef)) !== null && r !== void 0) || r) if (Array.isArray(e.value)) {\n const s = [...e.value];\n s[o] = a, e.value = s;\n } else {\n const s = {\n ...e.value,\n [o]: a\n };\n Object.setPrototypeOf(s, Object.getPrototypeOf(e.value)), e.value = s;\n }\n else e.value[o] = a;\n }\n }));\n return n;\n}\nfunction lo(e, t = !0, n) {\n to() ? we(e, n) : t ? e() : st(e);\n}\nfunction ao(e, t, n) {\n return Q(e, t, {\n ...n,\n immediate: !0\n });\n}\nconst Ze = vn ? window : void 0;\nfunction ve(e) {\n var t;\n const n = $(e);\n return (t = n?.$el) !== null && t !== void 0 ? t : n;\n}\nfunction Me(...e) {\n const t = (o, a, r, s) => (o.addEventListener(a, r, s), () => o.removeEventListener(a, r, s)), n = T(() => {\n const o = et($(e[0])).filter((a) => a != null);\n return o.every((a) => typeof a != \"string\") ? o : void 0;\n });\n return ao(() => {\n var o, a;\n return [\n (o = (a = n.value) === null || a === void 0 ? void 0 : a.map((r) => ve(r))) !== null && o !== void 0 ? o : [Ze].filter((r) => r != null),\n et($(n.value ? e[1] : e[0])),\n et(L(n.value ? e[2] : e[1])),\n $(n.value ? e[3] : e[2])\n ];\n }, ([o, a, r, s], l, i) => {\n if (!o?.length || !a?.length || !r?.length) return;\n const u = Jn(s) ? { ...s } : s, c = o.flatMap((p) => a.flatMap((h) => r.map((b) => t(p, h, b, u))));\n i(() => {\n c.forEach((p) => p());\n });\n }, { flush: \"post\" });\n}\nfunction Tt(e, t, n = {}) {\n const { window: o = Ze, ignore: a = [], capture: r = !0, detectIframe: s = !1, controls: l = !1 } = n;\n if (!o) return l ? {\n stop: De,\n cancel: De,\n trigger: De\n } : De;\n let i = !0;\n const u = (v) => $(a).some((m) => {\n if (typeof m == \"string\") return Array.from(o.document.querySelectorAll(m)).some((g) => g === v.target || v.composedPath().includes(g));\n {\n const g = ve(m);\n return g && (v.target === g || v.composedPath().includes(g));\n }\n });\n function c(v) {\n const m = $(v);\n return m && m.$.subTree.shapeFlag === 16;\n }\n function p(v, m) {\n const g = $(v), M = g.$.subTree && g.$.subTree.children;\n return M == null || !Array.isArray(M) ? !1 : M.some((D) => D.el === m.target || m.composedPath().includes(D.el));\n }\n const h = (v) => {\n const m = ve(e);\n if (v.target != null && !(!(m instanceof Element) && c(e) && p(e, v)) && !(!m || m === v.target || v.composedPath().includes(m))) {\n if (\"detail\" in v && v.detail === 0 && (i = !u(v)), !i) {\n i = !0;\n return;\n }\n t(v);\n }\n };\n let b = !1;\n const C = [\n Me(o, \"click\", (v) => {\n b || (b = !0, setTimeout(() => {\n b = !1;\n }, 0), h(v));\n }, {\n passive: !0,\n capture: r\n }),\n Me(o, \"pointerdown\", (v) => {\n const m = ve(e);\n i = !u(v) && !!(m && !v.composedPath().includes(m));\n }, { passive: !0 }),\n s && Me(o, \"blur\", (v) => {\n setTimeout(() => {\n var m;\n const g = ve(e);\n ((m = o.document.activeElement) === null || m === void 0 ? void 0 : m.tagName) === \"IFRAME\" && !g?.contains(o.document.activeElement) && t(v);\n }, 0);\n }, { passive: !0 })\n ].filter(Boolean), x = () => C.forEach((v) => v());\n return l ? {\n stop: x,\n cancel: () => {\n i = !1;\n },\n trigger: (v) => {\n i = !0, h(v), i = !1;\n }\n } : x;\n}\n// @__NO_SIDE_EFFECTS__\nfunction so() {\n const e = ee(!1), t = ut();\n return t && we(() => {\n e.value = !0;\n }, t), e;\n}\n// @__NO_SIDE_EFFECTS__\nfunction fn(e) {\n const t = /* @__PURE__ */ so();\n return T(() => (t.value, !!e()));\n}\nfunction pn(e, t, n = {}) {\n const { window: o = Ze, ...a } = n;\n let r;\n const s = /* @__PURE__ */ fn(() => o && \"MutationObserver\" in o), l = () => {\n r && (r.disconnect(), r = void 0);\n }, i = Q(T(() => {\n const p = et($(e)).map(ve).filter(Yn);\n return new Set(p);\n }), (p) => {\n l(), s.value && p.size && (r = new MutationObserver(t), p.forEach((h) => r.observe(h, a)));\n }, {\n immediate: !0,\n flush: \"post\"\n }), u = () => r?.takeRecords(), c = () => {\n i(), l();\n };\n return Ot(c), {\n isSupported: s,\n stop: c,\n takeRecords: u\n };\n}\nfunction wt(e, t = {}) {\n var n;\n const { pointerTypes: o, preventDefault: a, stopPropagation: r, exact: s, onMove: l, onEnd: i, onStart: u, initialValue: c, axis: p = \"both\", draggingElement: h = Ze, containerElement: b, handle: C = e, buttons: x = [0] } = t, v = S((n = $(c)) !== null && n !== void 0 ? n : {\n x: 0,\n y: 0\n }), m = S(), g = (E) => o ? o.includes(E.pointerType) : !0, M = (E) => {\n $(a) && E.preventDefault(), $(r) && E.stopPropagation();\n }, D = (E) => {\n var O;\n if (!$(x).includes(E.button) || $(t.disabled) || !g(E) || $(s) && E.target !== $(e)) return;\n const X = $(b), G = X == null || (O = X.getBoundingClientRect) === null || O === void 0 ? void 0 : O.call(X), N = $(e).getBoundingClientRect(), ce = {\n x: E.clientX - (X ? N.left - G.left + X.scrollLeft : N.left),\n y: E.clientY - (X ? N.top - G.top + X.scrollTop : N.top)\n };\n u?.(ce, E) !== !1 && (m.value = ce, M(E));\n }, P = (E) => {\n if ($(t.disabled) || !g(E) || !m.value) return;\n const O = $(b), X = $(e).getBoundingClientRect();\n let { x: G, y: N } = v.value;\n (p === \"x\" || p === \"both\") && (G = E.clientX - m.value.x, O && (G = Math.min(Math.max(0, G), O.scrollWidth - X.width))), (p === \"y\" || p === \"both\") && (N = E.clientY - m.value.y, O && (N = Math.min(Math.max(0, N), O.scrollHeight - X.height))), v.value = {\n x: G,\n y: N\n }, l?.(v.value, E), M(E);\n }, H = (E) => {\n $(t.disabled) || !g(E) || m.value && (m.value = void 0, i?.(v.value, E), M(E));\n };\n if (vn) {\n const E = () => {\n var O;\n return {\n capture: (O = t.capture) !== null && O !== void 0 ? O : !0,\n passive: !$(a)\n };\n };\n Me(C, \"pointerdown\", D, E), Me(h, \"pointermove\", P, E), Me(h, \"pointerup\", H, E);\n }\n return {\n ...oo(v),\n position: v,\n isDragging: T(() => !!m.value),\n style: T(() => `left:${v.value.x}px;top:${v.value.y}px;`)\n };\n}\nfunction lt(e, t, n = {}) {\n const { window: o = Ze, ...a } = n;\n let r;\n const s = /* @__PURE__ */ fn(() => o && \"ResizeObserver\" in o), l = () => {\n r && (r.disconnect(), r = void 0);\n }, i = Q(T(() => {\n const c = $(e);\n return Array.isArray(c) ? c.map((p) => ve(p)) : [ve(c)];\n }), (c) => {\n if (l(), s.value && o) {\n r = new ResizeObserver(t);\n for (const p of c) p && r.observe(p, a);\n }\n }, {\n immediate: !0,\n flush: \"post\"\n }), u = () => {\n l(), i();\n };\n return Ot(u), {\n isSupported: s,\n stop: u\n };\n}\nfunction Ae(e, t = {}) {\n const { reset: n = !0, windowResize: o = !0, windowScroll: a = !0, immediate: r = !0, updateTiming: s = \"sync\" } = t, l = ee(0), i = ee(0), u = ee(0), c = ee(0), p = ee(0), h = ee(0), b = ee(0), C = ee(0);\n function x() {\n const m = ve(e);\n if (!m) {\n n && (l.value = 0, i.value = 0, u.value = 0, c.value = 0, p.value = 0, h.value = 0, b.value = 0, C.value = 0);\n return;\n }\n const g = m.getBoundingClientRect();\n l.value = g.height, i.value = g.bottom, u.value = g.left, c.value = g.right, p.value = g.top, h.value = g.width, b.value = g.x, C.value = g.y;\n }\n function v() {\n s === \"sync\" ? x() : s === \"next-frame\" && requestAnimationFrame(() => x());\n }\n return lt(e, v), Q(() => ve(e), (m) => !m && v()), pn(e, v, { attributeFilter: [\"style\", \"class\"] }), a && Me(\"scroll\", v, {\n capture: !0,\n passive: !0\n }), o && Me(\"resize\", v, { passive: !0 }), lo(() => {\n r && v();\n }), {\n height: l,\n bottom: i,\n left: u,\n right: c,\n top: p,\n width: h,\n x: b,\n y: C,\n update: v\n };\n}\nfunction yt(e) {\n return typeof Window < \"u\" && e instanceof Window ? e.document.documentElement : typeof Document < \"u\" && e instanceof Document ? e.documentElement : e;\n}\nconst xt = /* @__PURE__ */ new WeakMap();\nfunction ro(e, t = !1) {\n const n = ee(t);\n let o = \"\";\n Q(Kn(e), (s) => {\n const l = yt($(s));\n if (l) {\n const i = l;\n if (xt.get(i) || xt.set(i, i.style.overflow), i.style.overflow !== \"hidden\" && (o = i.style.overflow), i.style.overflow === \"hidden\") return n.value = !0;\n if (n.value) return i.style.overflow = \"hidden\";\n }\n }, { immediate: !0 });\n const a = () => {\n const s = yt($(e));\n !s || n.value || (s.style.overflow = \"hidden\", n.value = !0);\n }, r = () => {\n const s = yt($(e));\n !s || !n.value || (s.style.overflow = o, xt.delete(s), n.value = !1);\n };\n return Ot(r), T({\n get() {\n return n.value;\n },\n set(s) {\n s ? a() : r();\n }\n });\n}\nconst io = (e) => {\n const t = new DOMParser().parseFromString(e, \"text/html\");\n return Array.from(t.body.childNodes).some((n) => n.nodeType === 1);\n}, uo = (e = 8) => Array.from({ length: e }, () => Math.floor(Math.random() * 16).toString(16)).join(\"\"), co = [\"data-colindex\", \"data-rowindex\", \"data-editable\", \"contenteditable\", \"tabindex\"], vo = [\"innerHTML\"], fo = { key: 2 }, po = /* @__PURE__ */ Y({\n __name: \"ACell\",\n props: {\n colIndex: {},\n rowIndex: {},\n store: {},\n addNavigation: { type: [Boolean, Object], default: !0 },\n tabIndex: { default: 0 },\n pinned: { type: Boolean, default: !1 },\n debounce: { default: 300 }\n },\n setup(e, { expose: t }) {\n const n = ae(\"cell\"), o = e.store.getCellData(e.colIndex, e.rowIndex), a = S(\"\"), r = S(!1), s = e.store.columns[e.colIndex], l = e.store.rows[e.rowIndex], i = s.align || \"center\", u = s.width || \"40ch\", c = T(() => e.store.getCellDisplayValue(e.colIndex, e.rowIndex)), p = T(() => typeof c.value == \"string\" ? io(c.value) : !1), h = T(() => ({\n textAlign: i,\n width: u,\n fontWeight: r.value ? \"bold\" : \"inherit\",\n paddingLeft: e.store.getIndent(e.colIndex, e.store.display[e.rowIndex]?.indent)\n })), b = T(() => ({\n \"sticky-column\": e.pinned,\n \"cell-modified\": r.value\n })), C = () => {\n v(), x();\n }, x = () => {\n const { left: H, bottom: E, width: O, height: X } = Ae(n);\n s.mask, s.modalComponent && e.store.$patch((G) => {\n G.modal.visible = !0, G.modal.colIndex = e.colIndex, G.modal.rowIndex = e.rowIndex, G.modal.left = H, G.modal.bottom = E, G.modal.width = O, G.modal.height = X, G.modal.cell = n.value, typeof s.modalComponent == \"function\" ? G.modal.component = s.modalComponent({ table: G.table, row: l, column: s }) : G.modal.component = s.modalComponent, G.modal.componentProps = s.modalComponentExtraProps;\n });\n };\n if (e.addNavigation) {\n let H = {\n ...ct,\n \"keydown.f2\": x,\n \"keydown.alt.up\": x,\n \"keydown.alt.down\": x,\n \"keydown.alt.left\": x,\n \"keydown.alt.right\": x\n };\n typeof e.addNavigation == \"object\" && (H = {\n ...H,\n ...e.addNavigation\n }), Vt([\n {\n selectors: n,\n handlers: H\n }\n ]);\n }\n const v = () => {\n if (n.value && s.edit) {\n const H = window.getSelection();\n if (H)\n try {\n const E = document.createRange();\n E.selectNodeContents && (E.selectNodeContents(n.value), H.removeAllRanges(), H.addRange(E));\n } catch {\n }\n }\n }, m = () => {\n n.value && (a.value = n.value.textContent, v());\n }, g = () => {\n try {\n const H = window.getSelection();\n if (H && H.rangeCount > 0 && n.value) {\n const E = H.getRangeAt(0), O = E.cloneRange();\n if (O.selectNodeContents && O.setEnd)\n return O.selectNodeContents(n.value), O.setEnd(E.endContainer, E.endOffset), O.toString().length;\n }\n } catch {\n }\n return 0;\n }, M = (H) => {\n if (n.value)\n try {\n const E = window.getSelection();\n if (!E) return;\n let O = 0;\n const X = document.createTreeWalker ? document.createTreeWalker(n.value, NodeFilter.SHOW_TEXT, null) : null;\n if (!X) return;\n let G, N = null;\n for (; G = X.nextNode(); ) {\n const ce = G, Ce = O + ce.textContent.length;\n if (H <= Ce && (N = document.createRange(), N.setStart && N.setEnd)) {\n N.setStart(ce, H - O), N.setEnd(ce, H - O);\n break;\n }\n O = Ce;\n }\n N && E.removeAllRanges && E.addRange && (E.removeAllRanges(), E.addRange(N));\n } catch {\n }\n }, D = (H) => {\n if (!s.edit) return;\n const E = H.target;\n if (E.textContent === a.value)\n return;\n const O = g();\n a.value = E.textContent, s.format ? (r.value = E.textContent !== e.store.getFormattedValue(e.colIndex, e.rowIndex, o), e.store.setCellText(e.colIndex, e.rowIndex, E.textContent)) : (r.value = E.textContent !== o, e.store.setCellData(e.colIndex, e.rowIndex, E.textContent)), st().then(() => {\n M(O);\n });\n }, P = /* @__PURE__ */ no(D, e.debounce);\n return t({\n currentData: a\n }), (H, E) => (w(), k(\"td\", {\n ref: \"cell\",\n \"data-colindex\": e.colIndex,\n \"data-rowindex\": e.rowIndex,\n \"data-editable\": L(s).edit,\n contenteditable: L(s).edit,\n tabindex: e.tabIndex,\n spellcheck: !1,\n style: fe(h.value),\n class: K([\"atable-cell\", b.value]),\n onFocus: m,\n onPaste: D,\n onInput: E[0] || (E[0] = //@ts-ignore\n (...O) => L(P) && L(P)(...O)),\n onClick: C\n }, [\n L(s).cellComponent ? (w(), re(Re(L(s).cellComponent), at({\n key: 0,\n value: c.value\n }, L(s).cellComponentProps), null, 16, [\"value\"])) : p.value ? (w(), k(\"span\", {\n key: 1,\n innerHTML: c.value\n }, null, 8, vo)) : (w(), k(\"span\", fo, j(c.value), 1))\n ], 46, co));\n }\n}), mo = [\"tabindex\"], ho = [\"tabindex\"], go = [\"colspan\"], wo = /* @__PURE__ */ Y({\n __name: \"AExpansionRow\",\n props: {\n rowIndex: {},\n store: {},\n tabIndex: { default: () => -1 },\n addNavigation: { type: [Boolean, Object], default: () => ct }\n },\n setup(e) {\n const t = ae(\"rowEl\"), n = T(() => e.store.display[e.rowIndex].expanded ? \"▼\" : \"►\");\n if (e.addNavigation) {\n const o = {\n \"keydown.control.g\": (a) => {\n a.stopPropagation(), a.preventDefault(), e.store.toggleRowExpand(e.rowIndex);\n }\n };\n typeof e.addNavigation == \"object\" && Object.assign(o, e.addNavigation), Vt([\n {\n selectors: t,\n handlers: o\n }\n ]);\n }\n return (o, a) => (w(), k(oe, null, [\n y(\"tr\", at(o.$attrs, {\n ref: \"rowEl\",\n tabindex: e.tabIndex,\n class: \"expandable-row\"\n }), [\n y(\"td\", {\n tabIndex: -1,\n class: \"row-index\",\n onClick: a[0] || (a[0] = (r) => e.store.toggleRowExpand(e.rowIndex))\n }, j(n.value), 1),\n ue(o.$slots, \"row\", {}, void 0, !0)\n ], 16, mo),\n e.store.display[e.rowIndex].expanded ? (w(), k(\"tr\", {\n key: 0,\n ref: \"rowExpanded\",\n tabindex: e.tabIndex,\n class: \"expanded-row\"\n }, [\n y(\"td\", {\n tabIndex: -1,\n colspan: e.store.columns.length + 1,\n class: \"expanded-row-content\"\n }, [\n ue(o.$slots, \"content\", {}, void 0, !0)\n ], 8, go)\n ], 8, ho)) : z(\"\", !0)\n ], 64));\n }\n}), Ee = (e, t) => {\n const n = e.__vccOpts || e;\n for (const [o, a] of t)\n n[o] = a;\n return n;\n}, yo = /* @__PURE__ */ Ee(wo, [[\"__scopeId\", \"data-v-a42297c7\"]]), xo = [\"colspan\"], bo = {\n ref: \"container\",\n class: \"gantt-container\"\n}, ko = [\"data-rowindex\", \"data-colindex\"], Io = {\n key: 2,\n class: \"gantt-label\"\n}, Co = [\"x1\", \"y1\", \"x2\", \"y2\"], Mo = /* @__PURE__ */ Y({\n __name: \"AGanttCell\",\n props: {\n store: {},\n columnsCount: {},\n rowIndex: {},\n colIndex: {},\n start: { default: 0 },\n end: { default: 0 },\n colspan: { default: 1 },\n label: { default: \"\" },\n color: { default: \"#cccccc\" }\n },\n emits: [\"connection:create\"],\n setup(e, { expose: t, emit: n }) {\n Cn((V) => ({\n v6d722296: a.value,\n v260b36f8: V.colspan\n }));\n const o = n, a = S(e.color.length >= 6 ? e.color : \"#cccccc\"), r = `gantt-bar-row-${e.rowIndex}-col-${e.colIndex}`, s = ae(\"container\"), l = ae(\"bar\"), i = ae(\"leftResizeHandle\"), u = ae(\"rightResizeHandle\"), c = ae(\"leftConnectionHandle\"), p = ae(\"rightConnectionHandle\"), { width: h } = Ae(s), { left: b, right: C } = Ae(l), x = S(e.start), v = S(e.end || x.value + e.colspan), m = S(!1), g = S(!1), M = S(!1), D = S(!1), P = S(!1), H = S({ startX: 0, startY: 0, endX: 0, endY: 0 }), E = T(() => Ne.value || ce.value || Ce.value), O = T(() => e.colspan > 0 ? h.value / e.colspan : 0), X = T(() => {\n const V = x.value / e.colspan * 100, B = v.value / e.colspan * 100;\n return {\n left: `${V}%`,\n width: `${B - V}%`,\n backgroundColor: a.value\n };\n }), G = T(\n () => ({\n position: \"fixed\",\n top: 0,\n left: 0,\n width: \"100vw\",\n height: \"100vh\",\n pointerEvents: \"none\",\n zIndex: 1e3\n })\n ), N = S({ startX: 0, startPos: 0 }), { isDragging: ce } = wt(i, {\n axis: \"x\",\n onStart: () => Oe(b.value, x.value),\n onMove: ({ x: V }) => dt(V),\n onEnd: ({ x: V }) => vt(V)\n }), { isDragging: Ce } = wt(u, {\n axis: \"x\",\n onStart: () => Oe(C.value, v.value),\n onMove: ({ x: V }) => We(V),\n onEnd: ({ x: V }) => ft(V)\n }), { isDragging: Ne } = wt(l, {\n exact: !0,\n axis: \"x\",\n onStart: () => Oe(b.value, x.value),\n onMove: ({ x: V }) => ze(V),\n onEnd: ({ x: V }) => pt(V)\n });\n we(() => {\n mt();\n }), Mn(() => {\n ht();\n });\n function Oe(V, B) {\n l.value && (l.value.style.transition = \"none\"), N.value = { startX: V, startPos: B };\n }\n function dt(V) {\n if (!ce.value || !l.value) return;\n const B = (V - N.value.startX) / O.value, W = Math.max(0, Math.min(v.value - 1, N.value.startPos + B));\n l.value.style.left = `${W / e.colspan * 100}%`, l.value.style.width = `${(v.value - W) / e.colspan * 100}%`;\n }\n function vt(V) {\n if (!l.value) return;\n const B = V - N.value.startX, W = Math.round(B / O.value), q = x.value, te = Math.max(0, Math.min(v.value - 1, N.value.startPos + W));\n x.value = te, e.store.updateGanttBar({\n rowIndex: e.rowIndex,\n colIndex: e.colIndex,\n type: \"resize\",\n edge: \"start\",\n oldStart: q,\n newStart: te,\n end: v.value,\n delta: W,\n oldColspan: v.value - q,\n newColspan: v.value - te\n });\n }\n function We(V) {\n if (!Ce.value || !l.value) return;\n const B = (V - N.value.startX) / O.value, W = Math.max(x.value + 1, Math.min(e.columnsCount, N.value.startPos + B));\n l.value.style.width = `${(W - x.value) / e.colspan * 100}%`;\n }\n function ft(V) {\n if (!l.value) return;\n const B = V - N.value.startX, W = Math.round(B / O.value), q = v.value, te = Math.max(x.value + 1, Math.min(e.columnsCount, N.value.startPos + W));\n v.value = te, e.store.updateGanttBar({\n rowIndex: e.rowIndex,\n colIndex: e.colIndex,\n type: \"resize\",\n edge: \"end\",\n oldEnd: q,\n newEnd: te,\n start: x.value,\n delta: W,\n oldColspan: q - x.value,\n newColspan: te - x.value\n });\n }\n function ze(V) {\n if (!Ne.value || !l.value) return;\n const B = (V - N.value.startX) / O.value, W = v.value - x.value, q = Math.max(0, Math.min(N.value.startPos + B, e.columnsCount - W));\n l.value.style.left = `${q / e.colspan * 100}%`;\n }\n function pt(V) {\n if (!l.value) return;\n const B = V - N.value.startX, W = Math.round(B / O.value), q = v.value - x.value, te = x.value, ne = v.value;\n let se = N.value.startPos + W, le = se + q;\n se < 0 ? (se = 0, le = q) : le > e.columnsCount && (le = e.columnsCount, se = le - q), x.value = se, v.value = le, e.store.updateGanttBar({\n rowIndex: e.rowIndex,\n colIndex: e.colIndex,\n type: \"bar\",\n oldStart: te,\n oldEnd: ne,\n newStart: se,\n newEnd: le,\n delta: W,\n colspan: le - se\n });\n }\n function mt() {\n const { x: V, y: B } = Ae(l), { x: W, y: q } = Ae(c), { x: te, y: ne } = Ae(p);\n e.store.registerGanttBar({\n id: r,\n rowIndex: e.rowIndex,\n colIndex: e.colIndex,\n startIndex: x,\n endIndex: v,\n color: a,\n label: e.label,\n position: { x: V, y: B }\n }), e.store.isDependencyGraphEnabled && (e.store.registerConnectionHandle({\n id: `${r}-connection-left`,\n rowIndex: e.rowIndex,\n colIndex: e.colIndex,\n side: \"left\",\n position: { x: W, y: q },\n visible: m,\n barId: r\n }), e.store.registerConnectionHandle({\n id: `${r}-connection-right`,\n rowIndex: e.rowIndex,\n colIndex: e.colIndex,\n side: \"right\",\n position: { x: te, y: ne },\n visible: g,\n barId: r\n }));\n }\n function ht() {\n e.store.unregisterGanttBar(r), e.store.isDependencyGraphEnabled && (e.store.unregisterConnectionHandle(`${r}-connection-left`), e.store.unregisterConnectionHandle(`${r}-connection-right`));\n }\n function gt() {\n e.store.isDependencyGraphEnabled && (m.value = !0, g.value = !0);\n }\n function Ge() {\n !M.value && !D.value && (m.value = !1, g.value = !1);\n }\n function Ue(V, B) {\n B.preventDefault(), B.stopPropagation(), P.value = !0, V === \"left\" ? M.value = !0 : D.value = !0;\n const W = V === \"left\" ? c.value : p.value;\n if (W) {\n const ne = W.getBoundingClientRect(), se = ne.left + ne.width / 2, le = ne.top + ne.height / 2;\n H.value = { startX: se, startY: le, endX: se, endY: le };\n }\n const q = (ne) => {\n H.value.endX = ne.clientX, H.value.endY = ne.clientY;\n }, te = (ne) => {\n je(ne, V), qe(q, te);\n };\n document.addEventListener(\"mousemove\", q), document.addEventListener(\"mouseup\", te);\n }\n function je(V, B) {\n const W = document.elementFromPoint(V.clientX, V.clientY)?.closest(\".connection-handle\");\n if (W && W !== (B === \"left\" ? c.value : p.value)) {\n const q = W.closest(\".gantt-bar\");\n if (q) {\n const te = parseInt(q.getAttribute(\"data-rowindex\") || \"0\"), ne = parseInt(q.getAttribute(\"data-colindex\") || \"0\"), se = W.classList.contains(\"left-connection-handle\") ? \"left\" : \"right\", le = `gantt-bar-row-${te}-col-${ne}`, d = e.store.createConnection(\n `${r}-connection-${B}`,\n `${le}-connection-${se}`\n );\n d && o(\"connection:create\", d);\n }\n }\n }\n function qe(V, B) {\n P.value = !1, M.value = !1, D.value = !1, document.removeEventListener(\"mousemove\", V), document.removeEventListener(\"mouseup\", B), l.value?.matches(\":hover\") || Ge();\n }\n return t({\n barStyle: X,\n cleanupConnectionDrag: qe,\n currentEnd: v,\n handleConnectionDrop: je,\n isLeftConnectionDragging: M,\n isLeftConnectionVisible: m,\n isRightConnectionDragging: D,\n isRightConnectionVisible: g,\n showDragPreview: P\n }), (V, B) => (w(), k(\"td\", {\n class: \"aganttcell\",\n colspan: e.colspan\n }, [\n y(\"div\", bo, [\n y(\"div\", {\n ref: \"bar\",\n \"data-rowindex\": e.rowIndex,\n \"data-colindex\": e.colIndex,\n class: K([\"gantt-bar\", { \"is-dragging\": E.value }]),\n style: fe(X.value),\n onMouseenter: gt,\n onMouseleave: Ge\n }, [\n e.store.isDependencyGraphEnabled ? (w(), k(\"div\", {\n key: 0,\n ref: \"leftConnectionHandle\",\n class: K([\"connection-handle left-connection-handle\", { visible: m.value, \"is-dragging\": M.value }]),\n onMousedown: B[0] || (B[0] = pe((W) => Ue(\"left\", W), [\"stop\"]))\n }, [...B[2] || (B[2] = [\n y(\"div\", { class: \"connection-dot\" }, null, -1)\n ])], 34)) : z(\"\", !0),\n e.store.isDependencyGraphEnabled ? (w(), k(\"div\", {\n key: 1,\n ref: \"rightConnectionHandle\",\n class: K([\"connection-handle right-connection-handle\", { visible: g.value, \"is-dragging\": D.value }]),\n onMousedown: B[1] || (B[1] = pe((W) => Ue(\"right\", W), [\"stop\"]))\n }, [...B[3] || (B[3] = [\n y(\"div\", { class: \"connection-dot\" }, null, -1)\n ])], 34)) : z(\"\", !0),\n y(\"div\", {\n ref: \"leftResizeHandle\",\n class: K([\"resize-handle left-resize-handle\", { \"is-dragging\": L(ce) }])\n }, [...B[4] || (B[4] = [\n y(\"div\", { class: \"handle-grip\" }, null, -1),\n y(\"div\", { class: \"vertical-indicator left-indicator\" }, null, -1)\n ])], 2),\n e.label ? (w(), k(\"label\", Io, j(e.label), 1)) : z(\"\", !0),\n y(\"div\", {\n ref: \"rightResizeHandle\",\n class: K([\"resize-handle right-resize-handle\", { \"is-dragging\": L(Ce) }])\n }, [...B[5] || (B[5] = [\n y(\"div\", { class: \"handle-grip\" }, null, -1),\n y(\"div\", { class: \"vertical-indicator right-indicator\" }, null, -1)\n ])], 2)\n ], 46, ko)\n ], 512),\n e.store.isDependencyGraphEnabled && P.value ? (w(), k(\"svg\", {\n key: 0,\n style: fe(G.value)\n }, [\n y(\"line\", {\n x1: H.value.startX,\n y1: H.value.startY,\n x2: H.value.endX,\n y2: H.value.endY,\n stroke: \"#2196f3\",\n \"stroke-width\": \"2\",\n \"stroke-dasharray\": \"5,5\"\n }, null, 8, Co)\n ], 4)) : z(\"\", !0)\n ], 8, xo));\n }\n}), Eo = /* @__PURE__ */ Ee(Mo, [[\"__scopeId\", \"data-v-8917a8a3\"]]), Ao = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg id=\"Layer_1\" data-name=\"Layer 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\">\n <path d=\"M32,64C14.35,64,0,49.65,0,32S14.35,0,32,0s32,14.35,32,32-14.35,32-32,32ZM32,4c-15.44,0-28,12.56-28,28s12.56,28,28,28,28-12.56,28-28S47.44,4,32,4Z\" style=\"fill: #000; stroke-width: 0px;\"/>\n <polygon points=\"34 18 30 18 30 30 18 30 18 34 30 34 30 46 34 46 34 34 46 34 46 30 34 30 34 18\" style=\"fill: #000; stroke-width: 0px;\"/>\n</svg>\n`, To = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg id=\"Layer_1\" data-name=\"Layer 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\">\n <path d=\"M32,64C14.35,64,0,49.65,0,32S14.35,0,32,0s32,14.35,32,32-14.35,32-32,32ZM32,4c-15.44,0-28,12.56-28,28s12.56,28,28,28,28-12.56,28-28S47.44,4,32,4Z\" style=\"fill: #000; stroke-width: 0px;\"/>\n <polygon points=\"46.84 19.99 44.01 17.16 32 29.17 19.99 17.16 17.16 19.99 29.17 32 17.16 44.01 19.99 46.84 32 34.83 44.01 46.84 46.84 44.01 34.83 32 46.84 19.99\" style=\"fill: #000; stroke-width: 0px;\"/>\n</svg>`, Do = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg id=\"Layer_1\" data-name=\"Layer 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 70.67 70.67\">\n <path d=\"M68.67,16.67h-14.67V2c0-1.1-.9-2-2-2H2C.9,0,0,.9,0,2v50c0,1.1.9,2,2,2h14.67v14.67c0,1.1.9,2,2,2h50c1.1,0,2-.9,2-2V18.67c0-1.1-.9-2-2-2ZM4,4h46v46H4V4ZM66.67,66.67H20.67v-12.67h31.33c1.1,0,2-.9,2-2v-31.33h12.67v46Z\" style=\"fill: #000; stroke-width: 0px;\"/>\n <polygon points=\"41 25 29 25 29 13 25 13 25 25 13 25 13 29 25 29 25 41 29 41 29 29 41 29 41 25\" style=\"fill: #000; stroke-width: 0px;\"/>\n</svg>`, $o = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" viewBox=\"0 0 70.6 61.5\">\n <path d=\"M68.6,45.8v13.7H2v-13.7h66.6M70.6,43.8H0v17.7h70.6v-17.7h0Z\"/>\n <path d=\"M68.6,24.2v13.7H2v-13.7h66.6M70.6,22.2H0v17.7h70.6v-17.7h0Z\"/>\n <g>\n <polygon points=\"70.6 2.5 68.6 2.5 68.6 2 68.1 2 68.1 0 70.6 0 70.6 2.5\"/>\n <path d=\"M65.3,2h-2.9V0h2.9v2ZM59.6,2h-2.9V0h2.9v2ZM53.9,2h-2.9V0h2.9v2ZM48.2,2h-2.9V0h2.9v2ZM42.4,2h-2.9V0h2.9v2ZM36.7,2h-2.9V0h2.9v2ZM31,2h-2.9V0h2.9v2ZM25.3,2h-2.9V0h2.9v2ZM19.6,2h-2.9V0h2.9v2ZM13.9,2h-2.9V0h2.9v2ZM8.2,2h-2.9V0h2.9v2Z\"/>\n <polygon points=\"2 2.5 0 2.5 0 0 2.5 0 2.5 2 2 2 2 2.5\"/>\n <path d=\"M2,13.4H0v-2.7h2v2.7ZM2,8H0v-2.7h2v2.7Z\"/>\n <polygon points=\"2.5 18.7 0 18.7 0 16.2 2 16.2 2 16.7 2.5 16.7 2.5 18.7\"/>\n <path d=\"M65.3,18.7h-2.9v-2h2.9v2ZM59.6,18.7h-2.9v-2h2.9v2ZM53.9,18.7h-2.9v-2h2.9v2ZM48.2,18.7h-2.9v-2h2.9v2ZM42.4,18.7h-2.9v-2h2.9v2ZM36.7,18.7h-2.9v-2h2.9v2ZM31,18.7h-2.9v-2h2.9v2ZM25.3,18.7h-2.9v-2h2.9v2ZM19.6,18.7h-2.9v-2h2.9v2ZM13.9,18.7h-2.9v-2h2.9v2ZM8.2,18.7h-2.9v-2h2.9v2Z\"/>\n <polygon points=\"70.6 18.7 68.1 18.7 68.1 16.7 68.6 16.7 68.6 16.2 70.6 16.2 70.6 18.7\"/>\n <path d=\"M70.6,13.4h-2v-2.7h2v2.7ZM70.6,8h-2v-2.7h2v2.7Z\"/>\n </g>\n</svg>`, So = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" viewBox=\"0 0 70.6 61.5\">\n <g>\n <polygon points=\"70.6 45.3 68.6 45.3 68.6 44.8 68.1 44.8 68.1 42.8 70.6 42.8 70.6 45.3\"/>\n <path d=\"M65.3,44.8h-2.9v-2h2.9v2ZM59.6,44.8h-2.9v-2h2.9v2ZM53.9,44.8h-2.9v-2h2.9v2ZM48.2,44.8h-2.9v-2h2.9v2ZM42.4,44.8h-2.9v-2h2.9v2ZM36.7,44.8h-2.9v-2h2.9v2ZM31,44.8h-2.9v-2h2.9v2ZM25.3,44.8h-2.9v-2h2.9v2ZM19.6,44.8h-2.9v-2h2.9v2ZM13.9,44.8h-2.9v-2h2.9v2ZM8.2,44.8h-2.9v-2h2.9v2Z\"/>\n <polygon points=\"2 45.3 0 45.3 0 42.8 2.5 42.8 2.5 44.8 2 44.8 2 45.3\"/>\n <path d=\"M2,56.3H0v-2.7h2v2.7ZM2,50.8H0v-2.7h2v2.7Z\"/>\n <polygon points=\"2.5 61.5 0 61.5 0 59 2 59 2 59.5 2.5 59.5 2.5 61.5\"/>\n <path d=\"M65.3,61.5h-2.9v-2h2.9v2ZM59.6,61.5h-2.9v-2h2.9v2ZM53.9,61.5h-2.9v-2h2.9v2ZM48.2,61.5h-2.9v-2h2.9v2ZM42.4,61.5h-2.9v-2h2.9v2ZM36.7,61.5h-2.9v-2h2.9v2ZM31,61.5h-2.9v-2h2.9v2ZM25.3,61.5h-2.9v-2h2.9v2ZM19.6,61.5h-2.9v-2h2.9v2ZM13.9,61.5h-2.9v-2h2.9v2ZM8.2,61.5h-2.9v-2h2.9v2Z\"/>\n <polygon points=\"70.6 61.5 68.1 61.5 68.1 59.5 68.6 59.5 68.6 59 70.6 59 70.6 61.5\"/>\n <path d=\"M70.6,56.3h-2v-2.7h2v2.7ZM70.6,50.8h-2v-2.7h2v2.7Z\"/>\n </g>\n <path d=\"M68.6,23.7v13.7H2v-13.7h66.6M70.6,21.7H0v17.7h70.6v-17.7h0Z\"/>\n <path d=\"M68.6,2v13.7H2V2h66.6M70.6,0H0v17.7h70.6V0h0Z\"/>\n</svg>`, Ro = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg id=\"Layer_1\" data-name=\"Layer 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 70.67 70.64\">\n <path d=\"M70.08,33.9l-9.75-9.75-2.83,2.83,6.33,6.33h-26.51V6.81l6.33,6.33,2.83-2.83L36.75.56c-.75-.75-2.08-.75-2.83,0l-9.75,9.75,2.83,2.83,6.33-6.33v26.5H6.83l6.33-6.33-2.83-2.83L.59,33.9c-.38.38-.59.88-.59,1.41s.21,1.04.59,1.41l9.75,9.75,2.83-2.83-6.33-6.33h26.5v26.51l-6.33-6.33-2.83,2.83,9.75,9.75c.38.38.88.59,1.41.59s1.04-.21,1.41-.59l9.75-9.75-2.83-2.83-6.33,6.33v-26.51h26.51l-6.33,6.33,2.83,2.83,9.75-9.75c.38-.38.59-.88.59-1.41s-.21-1.04-.59-1.41Z\" style=\"fill: #000; stroke-width: 0px;\"/>\n</svg>`, Lo = {\n add: Ao,\n delete: To,\n duplicate: Do,\n insertAbove: $o,\n insertBelow: So,\n move: Ro\n}, Ho = {\n key: 0,\n class: \"row-actions-dropdown\"\n}, _o = [\"aria-expanded\"], Vo = [\"onClick\"], Oo = [\"innerHTML\"], Po = { class: \"action-label\" }, Bo = {\n key: 1,\n class: \"row-actions-icons\"\n}, Fo = [\"title\", \"aria-label\", \"onClick\"], Zo = [\"innerHTML\"], tt = /* @__PURE__ */ Y({\n __name: \"ARowActions\",\n props: {\n rowIndex: {},\n store: {},\n config: {},\n position: {}\n },\n emits: [\"action\"],\n setup(e, { emit: t }) {\n const n = e, o = t, a = ae(\"actionsCell\"), r = ae(\"toggleButton\"), s = S(0), l = S(!1), i = S(!1), u = S({ top: 0, left: 0 }), c = {\n add: \"Add Row\",\n delete: \"Delete Row\",\n duplicate: \"Duplicate Row\",\n insertAbove: \"Insert Above\",\n insertBelow: \"Insert Below\",\n move: \"Move Row\"\n }, p = T(() => {\n const m = [], g = n.config.actions || {}, M = [\"add\", \"delete\", \"duplicate\", \"insertAbove\", \"insertBelow\", \"move\"];\n for (const D of M) {\n const P = g[D];\n if (P === !1 || P === void 0) continue;\n let H = !0, E = c[D], O = Lo[D];\n typeof P == \"object\" && (H = P.enabled !== !1, E = P.label || E, O = P.icon || O), H && m.push({ type: D, label: E, icon: O });\n }\n return m;\n }), h = T(() => {\n if (n.config.forceDropdown) return !0;\n const m = n.config.dropdownThreshold ?? 150;\n return m === 0 ? !1 : s.value > 0 && s.value < m;\n }), b = T(() => l.value ? i.value ? {\n position: \"fixed\",\n bottom: `${window.innerHeight - u.value.top}px`,\n left: `${u.value.left}px`,\n top: \"auto\"\n } : {\n position: \"fixed\",\n top: `${u.value.top}px`,\n left: `${u.value.left}px`\n } : {});\n lt(a, (m) => {\n const g = m[0];\n g && (s.value = g.contentRect.width);\n });\n const C = () => {\n l.value || x(), l.value = !l.value;\n }, x = () => {\n if (!r.value) return;\n const m = r.value.getBoundingClientRect(), g = window.innerHeight, M = p.value.length * 40 + 16, D = g - m.bottom, P = m.top;\n i.value = D < M && P > M, i.value ? u.value = {\n top: m.top,\n left: m.left\n } : u.value = {\n top: m.bottom,\n left: m.left\n };\n };\n Tt(a, () => {\n l.value = !1;\n });\n const v = (m) => {\n l.value = !1;\n const g = n.config.actions?.[m];\n typeof g == \"object\" && g.handler && g.handler(n.rowIndex, n.store) === !1 || o(\"action\", m, n.rowIndex);\n };\n return (m, g) => (w(), k(\"td\", {\n ref: \"actionsCell\",\n class: K([\"atable-row-actions\", { \"sticky-column\": e.position === \"before-index\", \"dropdown-active\": l.value }])\n }, [\n h.value ? (w(), k(\"div\", Ho, [\n y(\"button\", {\n ref: \"toggleButton\",\n type: \"button\",\n class: \"row-actions-toggle\",\n \"aria-expanded\": l.value,\n \"aria-haspopup\": \"true\",\n onClick: pe(C, [\"stop\"])\n }, [...g[0] || (g[0] = [\n y(\"span\", { class: \"dropdown-icon\" }, \"⋮\", -1)\n ])], 8, _o),\n U(y(\"div\", {\n class: K([\"row-actions-menu\", { \"menu-flipped\": i.value }]),\n style: fe(b.value),\n role: \"menu\"\n }, [\n (w(!0), k(oe, null, ie(p.value, (M) => (w(), k(\"button\", {\n key: M.type,\n type: \"button\",\n class: \"row-action-menu-item\",\n role: \"menuitem\",\n onClick: pe((D) => v(M.type), [\"stop\"])\n }, [\n y(\"span\", {\n class: \"action-icon\",\n innerHTML: M.icon\n }, null, 8, Oo),\n y(\"span\", Po, j(M.label), 1)\n ], 8, Vo))), 128))\n ], 6), [\n [ge, l.value]\n ])\n ])) : (w(), k(\"div\", Bo, [\n (w(!0), k(oe, null, ie(p.value, (M) => (w(), k(\"button\", {\n key: M.type,\n type: \"button\",\n class: \"row-action-btn\",\n title: M.label,\n \"aria-label\": M.label,\n onClick: pe((D) => v(M.type), [\"stop\"])\n }, [\n y(\"span\", {\n class: \"action-icon\",\n innerHTML: M.icon\n }, null, 8, Zo)\n ], 8, Fo))), 128))\n ]))\n ], 2));\n }\n}), No = [\"tabindex\"], Wo = /* @__PURE__ */ Y({\n __name: \"ARow\",\n props: {\n rowIndex: {},\n store: {},\n tabIndex: { default: () => -1 },\n addNavigation: { type: [Boolean, Object], default: !1 }\n },\n emits: [\"row:action\"],\n setup(e, { emit: t }) {\n const n = t, o = ae(\"rowEl\"), a = T(() => e.store.isRowVisible(e.rowIndex)), r = T(() => e.store.getRowExpandSymbol(e.rowIndex)), s = T(() => e.store.config.rowActions || { enabled: !1 }), l = T(() => s.value.enabled), i = T(() => s.value.position || \"before-index\"), u = (c, p) => {\n n(\"row:action\", c, p);\n };\n if (e.addNavigation) {\n let c = ct;\n typeof e.addNavigation == \"object\" && (c = {\n ...c,\n ...e.addNavigation\n }), Vt([\n {\n selectors: o,\n handlers: c\n }\n ]);\n }\n return (c, p) => U((w(), k(\"tr\", {\n ref: \"rowEl\",\n tabindex: e.tabIndex,\n class: \"atable-row\"\n }, [\n l.value && i.value === \"before-index\" ? (w(), re(tt, {\n key: 0,\n \"row-index\": e.rowIndex,\n store: e.store,\n config: s.value,\n position: i.value,\n onAction: u\n }, null, 8, [\"row-index\", \"store\", \"config\", \"position\"])) : z(\"\", !0),\n e.store.config.view !== \"uncounted\" ? ue(c.$slots, \"index\", { key: 1 }, () => [\n e.store.config.view === \"list\" ? (w(), k(\"td\", {\n key: 0,\n tabIndex: -1,\n class: K([\"list-index\", e.store.hasPinnedColumns ? \"sticky-index\" : \"\"])\n }, j(e.rowIndex + 1), 3)) : e.store.isTreeView ? (w(), k(\"td\", {\n key: 1,\n tabIndex: -1,\n class: K([\"tree-index\", e.store.hasPinnedColumns ? \"sticky-index\" : \"\"]),\n onClick: p[0] || (p[0] = (h) => e.store.toggleRowExpand(e.rowIndex))\n }, j(r.value), 3)) : z(\"\", !0)\n ], !0) : z(\"\", !0),\n l.value && i.value === \"after-index\" ? (w(), re(tt, {\n key: 2,\n \"row-index\": e.rowIndex,\n store: e.store,\n config: s.value,\n position: i.value,\n onAction: u\n }, null, 8, [\"row-index\", \"store\", \"config\", \"position\"])) : z(\"\", !0),\n ue(c.$slots, \"default\", {}, void 0, !0),\n l.value && i.value === \"end\" ? (w(), re(tt, {\n key: 3,\n \"row-index\": e.rowIndex,\n store: e.store,\n config: s.value,\n position: i.value,\n onAction: u\n }, null, 8, [\"row-index\", \"store\", \"config\", \"position\"])) : z(\"\", !0)\n ], 8, No)), [\n [ge, a.value]\n ]);\n }\n}), mn = /* @__PURE__ */ Ee(Wo, [[\"__scopeId\", \"data-v-c35a3748\"]]), bt = /* @__PURE__ */ new WeakMap(), zo = {\n mounted(e, t) {\n const n = !t.modifiers.bubble;\n let o;\n if (typeof t.value == \"function\") o = Tt(e, t.value, { capture: n });\n else {\n const [a, r] = t.value;\n o = Tt(e, a, Object.assign({ capture: n }, r));\n }\n bt.set(e, o);\n },\n unmounted(e) {\n const t = bt.get(e);\n t && typeof t == \"function\" ? t() : t?.stop(), bt.delete(e);\n }\n}, Go = { mounted(e, t) {\n typeof t.value == \"function\" ? lt(e, t.value) : lt(e, ...t.value);\n} };\nfunction Uo() {\n let e = !1;\n const t = ee(!1);\n return (n, o) => {\n if (t.value = o.value, e) return;\n e = !0;\n const a = ro(n, o.value);\n Q(t, (r) => a.value = r);\n };\n}\nUo();\nconst jo = { class: \"gantt-connection-overlay\" }, qo = {\n class: \"connection-svg\",\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n zIndex: 1\n }\n}, Yo = [\"d\", \"stroke-width\", \"onDblclick\"], Xo = [\"id\", \"d\", \"stroke\", \"stroke-width\", \"onDblclick\"], Jo = 0.25, Je = 16, Ko = /* @__PURE__ */ Y({\n __name: \"AGanttConnection\",\n props: {\n store: {}\n },\n emits: [\"connection:delete\"],\n setup(e, { emit: t }) {\n const n = t, o = T(() => e.store.connectionPaths.filter((s) => {\n const l = e.store.ganttBars.find((u) => u.id === s.from.barId), i = e.store.ganttBars.find((u) => u.id === s.to.barId);\n return l && i;\n })), a = (s) => {\n const l = e.store.connectionHandles.find(\n (E) => E.barId === s.from.barId && E.side === s.from.side\n ), i = e.store.connectionHandles.find(\n (E) => E.barId === s.to.barId && E.side === s.to.side\n );\n if (!l || !i) return \"\";\n const u = l.position.x + Je / 2, c = l.position.y + Je / 2, p = i.position.x + Je / 2, h = i.position.y + Je / 2, b = Math.abs(p - u), C = Math.max(b * Jo, 50), x = u + (s.from.side === \"left\" ? -C : C), v = p + (s.to.side === \"left\" ? -C : C), m = { x: 0.5 * u + 0.5 * x, y: 0.5 * c + 0.5 * c }, g = { x: 0.5 * x + 0.5 * v, y: 0.5 * c + 0.5 * h }, M = { x: 0.5 * v + 0.5 * p, y: 0.5 * h + 0.5 * h }, D = { x: 0.5 * m.x + 0.5 * g.x, y: 0.5 * m.y + 0.5 * g.y }, P = { x: 0.5 * g.x + 0.5 * M.x, y: 0.5 * g.y + 0.5 * M.y }, H = { x: 0.5 * D.x + 0.5 * P.x, y: 0.5 * D.y + 0.5 * P.y };\n return `M ${u} ${c} Q ${x} ${c}, ${H.x} ${H.y} Q ${v} ${h}, ${p} ${h}`;\n }, r = (s) => {\n e.store.deleteConnection(s.id) && n(\"connection:delete\", s);\n };\n return (s, l) => (w(), k(\"div\", jo, [\n (w(), k(\"svg\", qo, [\n l[0] || (l[0] = y(\"defs\", null, [\n y(\"path\", {\n id: \"arrowhead\",\n d: \"M 0 -7 L 20 0 L 0 7Z\",\n stroke: \"black\",\n \"stroke-width\": \"1\",\n fill: \"currentColor\"\n }),\n y(\"marker\", {\n id: \"arrowhead-marker\",\n markerWidth: \"10\",\n markerHeight: \"7\",\n refX: \"5\",\n refY: \"3.5\",\n orient: \"auto\",\n markerUnits: \"strokeWidth\"\n }, [\n y(\"polygon\", {\n points: \"0 0, 10 3.5, 0 7\",\n fill: \"currentColor\"\n })\n ])\n ], -1)),\n (w(!0), k(oe, null, ie(o.value, (i) => (w(), k(\"path\", {\n key: `${i.id}-hitbox`,\n d: a(i),\n stroke: \"transparent\",\n \"stroke-width\": (i.style?.width || 2) + 10,\n fill: \"none\",\n class: \"connection-hitbox\",\n onDblclick: (u) => r(i)\n }, null, 40, Yo))), 128)),\n (w(!0), k(oe, null, ie(o.value, (i) => (w(), k(\"path\", {\n id: i.id,\n key: i.id,\n d: a(i),\n stroke: i.style?.color || \"#666\",\n \"stroke-width\": i.style?.width || 2,\n fill: \"none\",\n \"marker-mid\": \"url(#arrowhead-marker)\",\n class: \"connection-path animated-path\",\n onDblclick: (u) => r(i)\n }, null, 40, Xo))), 128))\n ]))\n ]));\n }\n}), Qo = /* @__PURE__ */ Ee(Ko, [[\"__scopeId\", \"data-v-71911260\"]]), el = { class: \"column-filter\" }, tl = {\n key: 2,\n class: \"checkbox-filter\"\n}, nl = [\"value\"], ol = {\n key: 5,\n class: \"date-range-filter\"\n}, ll = /* @__PURE__ */ Y({\n __name: \"ATableColumnFilter\",\n props: {\n column: {},\n colIndex: {},\n store: {}\n },\n setup(e) {\n const t = S(\"\"), n = sn({\n startValue: \"\",\n endValue: \"\"\n }), o = (i) => {\n if (i.filterOptions) return i.filterOptions;\n const u = /* @__PURE__ */ new Set();\n return e.store.rows.forEach((c) => {\n const p = c[i.name];\n p != null && p !== \"\" && u.add(p);\n }), Array.from(u).map((c) => ({\n value: c,\n label: String(c)\n }));\n }, a = T(() => !!(t.value || n.startValue || n.endValue)), r = (i) => {\n !i && e.column.filterType !== \"checkbox\" ? (e.store.clearFilter(e.colIndex), t.value = \"\") : (t.value = i, e.store.setFilter(e.colIndex, { value: i }));\n }, s = (i, u) => {\n i === \"start\" ? n.startValue = u : n.endValue = u, !n.startValue && !n.endValue ? e.store.clearFilter(e.colIndex) : e.store.setFilter(e.colIndex, {\n value: null,\n startValue: n.startValue,\n endValue: n.endValue\n });\n }, l = () => {\n t.value = \"\", n.startValue = \"\", n.endValue = \"\", e.store.clearFilter(e.colIndex);\n };\n return (i, u) => (w(), k(\"div\", el, [\n (e.column.filterType || \"text\") === \"text\" ? U((w(), k(\"input\", {\n key: 0,\n \"onUpdate:modelValue\": u[0] || (u[0] = (c) => t.value = c),\n type: \"text\",\n class: \"filter-input\",\n onInput: u[1] || (u[1] = (c) => r(t.value))\n }, null, 544)), [\n [de, t.value]\n ]) : e.column.filterType === \"number\" ? U((w(), k(\"input\", {\n key: 1,\n \"onUpdate:modelValue\": u[2] || (u[2] = (c) => t.value = c),\n type: \"number\",\n class: \"filter-input\",\n onInput: u[3] || (u[3] = (c) => r(t.value))\n }, null, 544)), [\n [de, t.value]\n ]) : e.column.filterType === \"checkbox\" ? (w(), k(\"label\", tl, [\n U(y(\"input\", {\n \"onUpdate:modelValue\": u[4] || (u[4] = (c) => t.value = c),\n type: \"checkbox\",\n class: \"filter-checkbox\",\n onChange: u[5] || (u[5] = (c) => r(t.value))\n }, null, 544), [\n [rn, t.value]\n ]),\n y(\"span\", null, j(e.column.label), 1)\n ])) : e.column.filterType === \"select\" ? U((w(), k(\"select\", {\n key: 3,\n \"onUpdate:modelValue\": u[6] || (u[6] = (c) => t.value = c),\n class: \"filter-select\",\n onChange: u[7] || (u[7] = (c) => r(t.value))\n }, [\n u[15] || (u[15] = y(\"option\", { value: \"\" }, \"All\", -1)),\n (w(!0), k(oe, null, ie(o(e.column), (c) => (w(), k(\"option\", {\n key: c.value || c,\n value: c.value || c\n }, j(c.label || c), 9, nl))), 128))\n ], 544)), [\n [En, t.value]\n ]) : e.column.filterType === \"date\" ? U((w(), k(\"input\", {\n key: 4,\n \"onUpdate:modelValue\": u[8] || (u[8] = (c) => t.value = c),\n type: \"date\",\n class: \"filter-input\",\n onChange: u[9] || (u[9] = (c) => r(t.value))\n }, null, 544)), [\n [de, t.value]\n ]) : e.column.filterType === \"dateRange\" ? (w(), k(\"div\", ol, [\n U(y(\"input\", {\n \"onUpdate:modelValue\": u[10] || (u[10] = (c) => n.startValue = c),\n type: \"date\",\n class: \"filter-input\",\n onChange: u[11] || (u[11] = (c) => s(\"start\", n.startValue))\n }, null, 544), [\n [de, n.startValue]\n ]),\n u[16] || (u[16] = y(\"span\", { class: \"date-separator\" }, \"-\", -1)),\n U(y(\"input\", {\n \"onUpdate:modelValue\": u[12] || (u[12] = (c) => n.endValue = c),\n type: \"date\",\n class: \"filter-input\",\n onChange: u[13] || (u[13] = (c) => s(\"end\", n.endValue))\n }, null, 544), [\n [de, n.endValue]\n ])\n ])) : e.column.filterType === \"component\" && e.column.filterComponent ? (w(), re(Re(e.column.filterComponent), {\n key: 6,\n value: t.value,\n column: e.column,\n colIndex: e.colIndex,\n store: e.store,\n \"onUpdate:value\": u[14] || (u[14] = (c) => r(c))\n }, null, 40, [\"value\", \"column\", \"colIndex\", \"store\"])) : z(\"\", !0),\n a.value ? (w(), k(\"button\", {\n key: 7,\n onClick: l,\n class: \"clear-btn\",\n title: \"Clear\"\n }, \"×\")) : z(\"\", !0)\n ]));\n }\n}), al = /* @__PURE__ */ Ee(ll, [[\"__scopeId\", \"data-v-8487462d\"]]), sl = { key: 0 }, rl = {\n class: \"atable-header-row\",\n tabindex: \"-1\"\n}, il = {\n key: 2,\n class: \"row-actions-header\"\n}, ul = [\"data-colindex\", \"onClick\"], cl = {\n key: 3,\n class: \"row-actions-header\"\n}, dl = {\n key: 0,\n class: \"atable-filters-row\"\n}, vl = {\n key: 2,\n class: \"row-actions-header\"\n}, fl = {\n key: 3,\n class: \"row-actions-header\"\n}, hn = /* @__PURE__ */ Y({\n __name: \"ATableHeader\",\n props: {\n columns: {},\n store: {}\n },\n setup(e) {\n const t = e, n = T(() => t.columns.filter((l) => l.filterable)), o = T(() => t.store.config.value?.rowActions?.enabled ?? !1), a = T(() => t.store.config.value?.rowActions?.position ?? \"before-index\"), r = (l) => t.store.sortByColumn(l), s = (l) => {\n for (const i of l) {\n if (i.borderBoxSize.length === 0) continue;\n const u = i.borderBoxSize[0].inlineSize, c = Number(i.target.dataset.colindex), p = t.store.columns[c]?.width;\n typeof p == \"number\" && p !== u && t.store.resizeColumn(c, u);\n }\n };\n return (l, i) => t.columns.length ? (w(), k(\"thead\", sl, [\n y(\"tr\", rl, [\n o.value && a.value === \"before-index\" ? (w(), k(\"th\", {\n key: 0,\n class: K([\"row-actions-header\", { \"sticky-column\": a.value === \"before-index\" }])\n }, null, 2)) : z(\"\", !0),\n t.store.zeroColumn ? (w(), k(\"th\", {\n key: 1,\n id: \"header-index\",\n class: K([[\n t.store.hasPinnedColumns ? \"sticky-index\" : \"\",\n t.store.isTreeView ? \"tree-index\" : \"\",\n t.store.config.view === \"list-expansion\" ? \"list-expansion-index\" : \"\"\n ], \"list-index\"])\n }, null, 2)) : z(\"\", !0),\n o.value && a.value === \"after-index\" ? (w(), k(\"th\", il)) : z(\"\", !0),\n (w(!0), k(oe, null, ie(t.columns, (u, c) => U((w(), k(\"th\", {\n key: u.name,\n \"data-colindex\": c,\n tabindex: \"-1\",\n style: fe(t.store.getHeaderCellStyle(u)),\n class: K(`${u.pinned ? \"sticky-column\" : \"\"} ${u.sortable === !1 ? \"\" : \"cursor-pointer\"}`),\n onClick: (p) => u.sortable !== !1 ? r(c) : void 0\n }, [\n ue(l.$slots, \"default\", {}, () => [\n Dt(j(u.label || String.fromCharCode(c + 97).toUpperCase()), 1)\n ])\n ], 14, ul)), [\n [L(Go), s]\n ])), 128)),\n o.value && a.value === \"end\" ? (w(), k(\"th\", cl)) : z(\"\", !0)\n ]),\n n.value.length > 0 ? (w(), k(\"tr\", dl, [\n o.value && a.value === \"before-index\" ? (w(), k(\"th\", {\n key: 0,\n class: K([\"row-actions-header\", { \"sticky-column\": a.value === \"before-index\" }])\n }, null, 2)) : z(\"\", !0),\n t.store.zeroColumn ? (w(), k(\"th\", {\n key: 1,\n class: K([[\n t.store.hasPinnedColumns ? \"sticky-index\" : \"\",\n t.store.isTreeView ? \"tree-index\" : \"\",\n t.store.config.view === \"list-expansion\" ? \"list-expansion-index\" : \"\"\n ], \"list-index\"])\n }, null, 2)) : z(\"\", !0),\n o.value && a.value === \"after-index\" ? (w(), k(\"th\", vl)) : z(\"\", !0),\n (w(!0), k(oe, null, ie(t.columns, (u, c) => (w(), k(\"th\", {\n key: `filter-${u.name}`,\n class: K(`${u.pinned ? \"sticky-column\" : \"\"}`),\n style: fe(t.store.getHeaderCellStyle(u))\n }, [\n u.filterable ? (w(), re(al, {\n key: 0,\n column: u,\n \"col-index\": c,\n store: t.store\n }, null, 8, [\"column\", \"col-index\", \"store\"])) : z(\"\", !0)\n ], 6))), 128)),\n o.value && a.value === \"end\" ? (w(), k(\"th\", fl)) : z(\"\", !0)\n ])) : z(\"\", !0)\n ])) : z(\"\", !0);\n }\n}), gn = /* @__PURE__ */ Y({\n __name: \"ATableModal\",\n props: {\n store: {}\n },\n setup(e) {\n const t = ae(\"amodal\"), { width: n, height: o } = Ae(t), a = T(() => {\n if (!(e.store.modal.height && e.store.modal.width && e.store.modal.left && e.store.modal.bottom)) return;\n const r = e.store.modal.cell?.closest(\"table\");\n if (!r) return {};\n const s = r.offsetHeight || 0, l = r.offsetWidth || 0;\n let i = e.store.modal.cell?.offsetTop || 0;\n const u = r.querySelector(\"thead\")?.offsetHeight || 0;\n i += u, i = i + o.value < s ? i : i - (o.value + e.store.modal.height);\n let c = e.store.modal.cell?.offsetLeft || 0;\n return c = c + n.value <= l ? c : c - (n.value - e.store.modal.width), {\n left: `${c}px`,\n top: `${i}px`\n };\n });\n return (r, s) => (w(), k(\"div\", {\n ref: \"amodal\",\n class: \"amodal\",\n tabindex: \"-1\",\n style: fe(a.value),\n onClick: s[0] || (s[0] = pe(() => {\n }, [\"stop\"])),\n onInput: s[1] || (s[1] = pe(() => {\n }, [\"stop\"]))\n }, [\n ue(r.$slots, \"default\")\n ], 36));\n }\n}), pl = (e) => {\n const t = e.id || uo();\n return Dn(`table-${t}`, () => {\n const n = () => {\n const d = [Object.assign({}, { rowModified: !1 })], f = /* @__PURE__ */ new Set();\n for (let A = 0; A < a.value.length; A++) {\n const R = a.value[A];\n R.parent !== null && R.parent !== void 0 && f.add(R.parent);\n }\n const I = (A) => a.value[A]?.gantt !== void 0, _ = (A) => {\n for (let R = 0; R < a.value.length; R++)\n if (a.value[R].parent === A && (I(R) || _(R)))\n return !0;\n return !1;\n }, F = (A) => {\n const R = r.value, Z = R.view === \"tree\" || R.view === \"tree-gantt\" ? R.defaultTreeExpansion : void 0;\n if (!Z) return !0;\n switch (Z) {\n case \"root\":\n return !1;\n // Only root nodes are visible, all children start collapsed\n case \"branch\":\n return _(A);\n case \"leaf\":\n return !0;\n // All nodes should be expanded\n default:\n return !0;\n }\n };\n for (let A = 0; A < a.value.length; A++) {\n const R = a.value[A], Z = R.parent === null || R.parent === void 0, J = f.has(A);\n d[A] = {\n childrenOpen: F(A),\n expanded: !1,\n indent: R.indent || 0,\n isParent: J,\n isRoot: Z,\n rowModified: !1,\n open: Z,\n // This will be recalculated later for non-root nodes\n parent: R.parent\n };\n }\n return d;\n }, o = S(e.columns), a = S(e.rows), r = S(e.config || {}), s = S({}), l = S({}), i = T(() => {\n const d = {};\n for (const [f, I] of o.value.entries())\n for (const [_, F] of a.value.entries())\n d[`${f}:${_}`] = F[I.name];\n return d;\n }), u = T({\n get: () => {\n const d = n();\n for (let f = 0; f < d.length; f++)\n s.value[f] && (d[f].rowModified = s.value[f]), l.value[f] && (l.value[f].childrenOpen !== void 0 && (d[f].childrenOpen = l.value[f].childrenOpen), l.value[f].expanded !== void 0 && (d[f].expanded = l.value[f].expanded));\n if (M.value) {\n const f = (I, _) => {\n const F = _[I];\n if (F.isRoot || F.parent === null || F.parent === void 0)\n return !0;\n const A = F.parent;\n return A < 0 || A >= _.length ? !1 : (_[A].childrenOpen || !1) && f(A, _);\n };\n for (let I = 0; I < d.length; I++)\n d[I].isRoot || (d[I].open = f(I, d));\n }\n return d;\n },\n set: (d) => {\n JSON.stringify(d) !== JSON.stringify(u.value) && (u.value = d);\n }\n }), c = S(e.modal || { visible: !1 }), p = S({}), h = S([]), b = S([]), C = S([]), x = S({\n column: null,\n direction: null\n }), v = S({}), m = T(() => o.value.some((d) => d.pinned)), g = T(() => r.value.view === \"gantt\" || r.value.view === \"tree-gantt\"), M = T(() => r.value.view === \"tree\" || r.value.view === \"tree-gantt\"), D = T(() => {\n const d = r.value;\n return d.view === \"gantt\" || d.view === \"tree-gantt\" ? d.dependencyGraph !== !1 : !0;\n }), P = T(() => `${Math.ceil(a.value.length / 100 + 1)}ch`), H = T(\n () => r.value.view ? [\"list\", \"tree\", \"tree-gantt\", \"list-expansion\"].includes(r.value.view) : !1\n ), E = T(() => {\n let d = a.value.map((f, I) => ({\n ...f,\n originalIndex: I\n }));\n if (Object.entries(v.value).forEach(([f, I]) => {\n const _ = parseInt(f), F = o.value[_];\n !F || !(I.value || I.startValue || I.endValue || F.filterType === \"checkbox\" && I.value !== void 0) || (d = d.filter((A) => {\n const R = A[F.name];\n return te(R, I, F);\n }));\n }), x.value.column !== null && x.value.direction) {\n const f = o.value[x.value.column], I = x.value.direction;\n d.sort((_, F) => {\n let A = _[f.name], R = F[f.name];\n A == null && (A = \"\"), R == null && (R = \"\");\n const Z = Number(A), J = Number(R);\n if (!isNaN(Z) && !isNaN(J) && A !== \"\" && R !== \"\")\n return I === \"asc\" ? Z - J : J - Z;\n {\n const Ye = String(A).toLowerCase(), Nt = String(R).toLowerCase();\n return I === \"asc\" ? Ye.localeCompare(Nt) : Nt.localeCompare(Ye);\n }\n });\n }\n return d;\n }), O = (d, f) => i.value[`${d}:${f}`], X = (d, f, I) => {\n const _ = `${d}:${f}`, F = o.value[d];\n i.value[_] !== I && (s.value[f] = !0), i.value[_] = I, a.value[f] = {\n ...a.value[f],\n [F.name]: I\n };\n }, G = (d) => {\n a.value = d;\n }, N = (d, f, I) => {\n const _ = `${d}:${f}`;\n i.value[_] !== I && (s.value[f] = !0, p.value[_] = I);\n }, ce = (d) => {\n const f = o.value.indexOf(d) === o.value.length - 1, I = r.value.fullWidth ? d.resizable && !f : d.resizable;\n return {\n width: d.width || \"40ch\",\n textAlign: d.align || \"center\",\n ...I && {\n resize: \"horizontal\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\"\n }\n };\n }, Ce = (d, f) => {\n if (d < 0 || d >= o.value.length) return;\n const I = Math.max(f, 40);\n o.value[d] = {\n ...o.value[d],\n width: `${I}px`\n };\n }, Ne = (d) => {\n const f = a.value[d];\n return g.value && f.gantt !== void 0;\n }, Oe = (d) => !M.value || u.value[d].isRoot || u.value[d].open, dt = (d) => !M.value && r.value.view !== \"list-expansion\" ? \"\" : M.value && (u.value[d].isRoot || u.value[d].isParent) ? u.value[d].childrenOpen ? \"▼\" : \"►\" : r.value.view === \"list-expansion\" ? u.value[d].expanded ? \"▼\" : \"►\" : \"\", vt = (d) => {\n if (M.value) {\n const f = l.value[d] || {}, I = !(f.childrenOpen ?? u.value[d].childrenOpen);\n l.value[d] = {\n ...f,\n childrenOpen: I\n }, I || We(d);\n } else if (r.value.view === \"list-expansion\") {\n const f = l.value[d] || {}, I = f.expanded ?? u.value[d].expanded;\n l.value[d] = {\n ...f,\n expanded: !I\n };\n }\n }, We = (d) => {\n for (let f = 0; f < a.value.length; f++)\n if (u.value[f].parent === d) {\n const I = l.value[f] || {};\n l.value[f] = {\n ...I,\n childrenOpen: !1\n }, We(f);\n }\n }, ft = (d, f) => {\n const I = O(d, f);\n return ze(d, f, I);\n }, ze = (d, f, I) => {\n const _ = o.value[d], F = a.value[f], A = _.format;\n return A ? typeof A == \"function\" ? A(I, { table: i.value, row: F, column: _ }) : typeof A == \"string\" ? Function(`\"use strict\";return (${A})`)()(I, { table: i.value, row: F, column: _ }) : I : I;\n }, pt = (d) => {\n d.target instanceof Node && c.value.parent?.contains(d.target) || c.value.visible && (c.value.visible = !1);\n }, mt = (d, f) => f && d === 0 && f > 0 ? `${f}ch` : \"inherit\", ht = (d) => {\n const f = a.value[d.rowIndex]?.gantt;\n f && (d.type === \"resize\" ? d.edge === \"start\" ? (f.startIndex = d.newStart, f.endIndex = d.end, f.colspan = f.endIndex - f.startIndex) : d.edge === \"end\" && (f.startIndex = d.start, f.endIndex = d.newEnd, f.colspan = f.endIndex - f.startIndex) : d.type === \"bar\" && (f.startIndex = d.newStart, f.endIndex = d.newEnd, f.colspan = f.endIndex - f.startIndex));\n }, gt = (d) => {\n const f = h.value.findIndex((I) => I.id === d.id);\n f >= 0 ? h.value[f] = d : h.value.push(d);\n }, Ge = (d) => {\n const f = h.value.findIndex((I) => I.id === d);\n f >= 0 && h.value.splice(f, 1);\n }, Ue = (d) => {\n const f = b.value.findIndex((I) => I.id === d.id);\n f >= 0 ? b.value[f] = d : b.value.push(d);\n }, je = (d) => {\n const f = b.value.findIndex((I) => I.id === d);\n f >= 0 && b.value.splice(f, 1);\n }, qe = (d, f, I) => {\n const _ = b.value.find((R) => R.id === d), F = b.value.find((R) => R.id === f);\n if (!_ || !F)\n return console.warn(\"Cannot create connection: handle not found\"), null;\n const A = {\n id: `connection-${d}-${f}`,\n from: {\n barId: _.barId,\n side: _.side\n },\n to: {\n barId: F.barId,\n side: F.side\n },\n style: I?.style,\n label: I?.label\n };\n return C.value.push(A), A;\n }, V = (d) => {\n const f = C.value.findIndex((I) => I.id === d);\n return f >= 0 ? (C.value.splice(f, 1), !0) : !1;\n }, B = (d) => C.value.filter((f) => f.from.barId === d || f.to.barId === d), W = (d) => b.value.filter((f) => f.barId === d), q = (d) => {\n if (o.value[d].sortable === !1) return;\n let f;\n x.value.column === d && x.value.direction === \"asc\" ? f = \"desc\" : f = \"asc\", x.value.column = d, x.value.direction = f;\n }, te = (d, f, I) => {\n const _ = I.filterType || \"text\", F = f.value;\n if (!F && _ !== \"dateRange\" && _ !== \"checkbox\") return !0;\n switch (_) {\n case \"text\": {\n let A = \"\";\n return typeof d == \"object\" && d !== null ? A = Object.values(d).join(\" \") : A = String(d || \"\"), A.toLowerCase().includes(String(F).toLowerCase());\n }\n case \"number\": {\n const A = Number(d), R = Number(F);\n return !isNaN(A) && !isNaN(R) && A === R;\n }\n case \"select\":\n return d === F;\n case \"checkbox\":\n return F === !0 ? !!d : !0;\n case \"date\": {\n let A;\n if (typeof d == \"number\") {\n const Z = new Date(d), J = (/* @__PURE__ */ new Date()).getFullYear();\n A = new Date(J, Z.getMonth(), Z.getDate());\n } else\n A = new Date(String(d));\n const R = new Date(String(F));\n return A.toDateString() === R.toDateString();\n }\n case \"dateRange\": {\n const A = f.startValue, R = f.endValue;\n if (!A && !R) return !0;\n let Z;\n if (typeof d == \"number\") {\n const J = new Date(d), Ye = (/* @__PURE__ */ new Date()).getFullYear();\n Z = new Date(Ye, J.getMonth(), J.getDate());\n } else\n Z = new Date(String(d));\n return !(A && Z < new Date(String(A)) || R && Z > new Date(String(R)));\n }\n default:\n return !0;\n }\n }, ne = (d, f) => {\n !f.value && !f.startValue && !f.endValue ? delete v.value[d] : v.value[d] = f;\n }, se = (d) => {\n delete v.value[d];\n }, le = (d, f = \"end\") => {\n const I = {};\n for (const F of o.value)\n I[F.name] = \"\";\n d && Object.assign(I, d);\n let _;\n return f === \"start\" ? (_ = 0, a.value.unshift(I)) : f === \"end\" ? (_ = a.value.length, a.value.push(I)) : (_ = Math.max(0, Math.min(f, a.value.length)), a.value.splice(_, 0, I)), _;\n };\n return {\n // state\n columns: o,\n config: r,\n connectionHandles: b,\n connectionPaths: C,\n display: u,\n filterState: v,\n ganttBars: h,\n modal: c,\n rows: a,\n sortState: x,\n table: i,\n updates: p,\n // getters\n filteredRows: E,\n hasPinnedColumns: m,\n isGanttView: g,\n isTreeView: M,\n isDependencyGraphEnabled: D,\n numberedRowWidth: P,\n zeroColumn: H,\n // actions\n addRow: le,\n clearFilter: se,\n closeModal: pt,\n createConnection: qe,\n deleteConnection: V,\n deleteRow: (d) => {\n if (d < 0 || d >= a.value.length)\n return null;\n const [f] = a.value.splice(d, 1);\n delete s.value[d], delete l.value[d];\n const I = {}, _ = {};\n for (const [F, A] of Object.entries(s.value)) {\n const R = parseInt(F);\n R > d ? I[R - 1] = A : I[R] = A;\n }\n for (const [F, A] of Object.entries(l.value)) {\n const R = parseInt(F);\n R > d ? _[R - 1] = A : _[R] = A;\n }\n return s.value = I, l.value = _, f;\n },\n duplicateRow: (d) => {\n if (d < 0 || d >= a.value.length)\n return -1;\n const f = a.value[d], I = JSON.parse(JSON.stringify(f)), _ = d + 1;\n return a.value.splice(_, 0, I), _;\n },\n getCellData: O,\n getCellDisplayValue: ft,\n getConnectionsForBar: B,\n getFormattedValue: ze,\n getHandlesForBar: W,\n getHeaderCellStyle: ce,\n getIndent: mt,\n getRowExpandSymbol: dt,\n insertRowAbove: (d, f) => {\n const I = Math.max(0, d);\n return le(f, I);\n },\n insertRowBelow: (d, f) => {\n const I = Math.min(d + 1, a.value.length);\n return le(f, I);\n },\n isRowGantt: Ne,\n isRowVisible: Oe,\n moveRow: (d, f) => {\n if (d < 0 || d >= a.value.length || f < 0 || f >= a.value.length || d === f)\n return !1;\n const [I] = a.value.splice(d, 1);\n a.value.splice(f, 0, I);\n const _ = {}, F = {};\n for (const [A, R] of Object.entries(s.value)) {\n const Z = parseInt(A);\n let J = Z;\n Z === d ? J = f : d < f ? Z > d && Z <= f && (J = Z - 1) : Z >= f && Z < d && (J = Z + 1), _[J] = R;\n }\n for (const [A, R] of Object.entries(l.value)) {\n const Z = parseInt(A);\n let J = Z;\n Z === d ? J = f : d < f ? Z > d && Z <= f && (J = Z - 1) : Z >= f && Z < d && (J = Z + 1), F[J] = R;\n }\n return s.value = _, l.value = F, !0;\n },\n registerConnectionHandle: Ue,\n registerGanttBar: gt,\n resizeColumn: Ce,\n setCellData: X,\n setCellText: N,\n setFilter: ne,\n sortByColumn: q,\n toggleRowExpand: vt,\n unregisterConnectionHandle: je,\n unregisterGanttBar: Ge,\n updateGanttBar: ht,\n updateRows: G\n };\n })();\n}, ml = {\n class: \"atable-container\",\n style: { position: \"relative\" }\n}, hl = /* @__PURE__ */ Y({\n __name: \"ATable\",\n props: /* @__PURE__ */ me({\n id: { default: \"\" },\n config: { default: () => new Object() }\n }, {\n rows: { required: !0 },\n rowsModifiers: {},\n columns: { required: !0 },\n columnsModifiers: {}\n }),\n emits: /* @__PURE__ */ me([\"cellUpdate\", \"gantt:drag\", \"connection:event\", \"columns:update\", \"row:add\", \"row:delete\", \"row:duplicate\", \"row:insert-above\", \"row:insert-below\", \"row:move\"], [\"update:rows\", \"update:columns\"]),\n setup(e, { expose: t, emit: n }) {\n const o = he(e, \"rows\"), a = he(e, \"columns\"), r = n, s = ae(\"table\"), l = pl({ columns: a.value, rows: o.value, id: e.id, config: e.config });\n l.$onAction(({ name: C, store: x, args: v, after: m }) => {\n if (C === \"setCellData\" || C === \"setCellText\") {\n const [g, M, D] = v, P = x.getCellData(g, M);\n m(() => {\n o.value = [...x.rows], r(\"cellUpdate\", { colIndex: g, rowIndex: M, newValue: D, oldValue: P });\n });\n } else if (C === \"updateGanttBar\") {\n const [g] = v;\n let M = !1;\n g.type === \"resize\" ? M = g.oldColspan !== g.newColspan : g.type === \"bar\" && (M = g.oldStart !== g.newStart || g.oldEnd !== g.newEnd), M && m(() => {\n r(\"gantt:drag\", g);\n });\n } else C === \"resizeColumn\" && m(() => {\n a.value = [...x.columns], r(\"columns:update\", [...x.columns]);\n });\n }), Q(\n () => o.value,\n (C) => {\n JSON.stringify(C) !== JSON.stringify(l.rows) && (l.rows = [...C]);\n },\n { deep: !0 }\n ), Q(\n a,\n (C) => {\n JSON.stringify(C) !== JSON.stringify(l.columns) && (l.columns = [...C], r(\"columns:update\", [...C]));\n },\n { deep: !0 }\n ), we(() => {\n a.value.some((C) => C.pinned) && (u(), l.isTreeView && pn(s, u, { childList: !0, subtree: !0 }));\n });\n const i = T(() => l.columns.filter((C) => C.pinned).length), u = () => {\n const C = s.value, x = C?.rows[0], v = C?.rows[1], m = x ? Array.from(x.cells) : [];\n for (const [g, M] of m.entries()) {\n const D = v?.cells[g];\n D && (M.style.width = `${D.offsetWidth}px`);\n }\n for (const g of C?.rows || []) {\n let M = 0;\n const D = [];\n for (const P of g.cells)\n (P.classList.contains(\"sticky-column\") || P.classList.contains(\"sticky-index\")) && (P.style.left = `${M}px`, M += P.offsetWidth, D.push(P));\n D.length > 0 && D[D.length - 1].classList.add(\"sticky-column-edge\");\n }\n };\n window.addEventListener(\"keydown\", (C) => {\n if (C.key === \"Escape\" && l.modal.visible) {\n l.modal.visible = !1;\n const x = l.modal.parent;\n x && st().then(() => {\n x.focus();\n });\n }\n });\n const c = (C) => {\n if (!C.gantt || i.value === 0)\n return l.columns;\n const x = [];\n for (let v = 0; v < i.value; v++) {\n const m = { ...l.columns[v] };\n m.originalIndex = v, x.push(m);\n }\n return x.push({\n ...l.columns[i.value],\n isGantt: !0,\n colspan: C.gantt?.colspan || l.columns.length - i.value,\n originalIndex: i.value,\n width: \"auto\"\n // TODO: refactor to API that can detect when data exists in a cell. Might have be custom and not generalizable\n }), x;\n }, p = (C) => {\n r(\"connection:event\", { type: \"create\", connection: C });\n }, h = (C) => {\n r(\"connection:event\", { type: \"delete\", connection: C });\n }, b = (C, x) => {\n switch (C) {\n case \"add\": {\n const v = l.addRow({}, x + 1), m = l.rows[v];\n o.value = [...l.rows], r(\"row:add\", { rowIndex: v, row: m });\n break;\n }\n case \"delete\": {\n const v = l.deleteRow(x);\n v && (o.value = [...l.rows], r(\"row:delete\", { rowIndex: x, row: v }));\n break;\n }\n case \"duplicate\": {\n const v = l.duplicateRow(x);\n if (v >= 0) {\n const m = l.rows[v];\n o.value = [...l.rows], r(\"row:duplicate\", { sourceIndex: x, newIndex: v, row: m });\n }\n break;\n }\n case \"insertAbove\": {\n const v = l.insertRowAbove(x), m = l.rows[v];\n o.value = [...l.rows], r(\"row:insert-above\", { targetIndex: x, newIndex: v, row: m });\n break;\n }\n case \"insertBelow\": {\n const v = l.insertRowBelow(x), m = l.rows[v];\n o.value = [...l.rows], r(\"row:insert-below\", { targetIndex: x, newIndex: v, row: m });\n break;\n }\n case \"move\": {\n r(\"row:move\", { fromIndex: x, toIndex: -1 });\n break;\n }\n }\n };\n return t({\n store: l,\n createConnection: l.createConnection,\n deleteConnection: l.deleteConnection,\n getConnectionsForBar: l.getConnectionsForBar,\n getHandlesForBar: l.getHandlesForBar,\n // Row action methods\n addRow: l.addRow,\n deleteRow: l.deleteRow,\n duplicateRow: l.duplicateRow,\n insertRowAbove: l.insertRowAbove,\n insertRowBelow: l.insertRowBelow,\n moveRow: l.moveRow\n }), (C, x) => (w(), k(\"div\", ml, [\n U((w(), k(\"table\", {\n ref: \"table\",\n class: \"atable\",\n style: fe({\n width: L(l).config.fullWidth ? \"100%\" : \"auto\"\n })\n }, [\n ue(C.$slots, \"header\", { data: L(l) }, () => [\n ot(hn, {\n columns: L(l).columns,\n store: L(l)\n }, null, 8, [\"columns\", \"store\"])\n ], !0),\n y(\"tbody\", null, [\n ue(C.$slots, \"body\", { data: L(l) }, () => [\n (w(!0), k(oe, null, ie(L(l).filteredRows, (v, m) => (w(), re(mn, {\n key: `${v.originalIndex}-${m}`,\n row: v,\n rowIndex: v.originalIndex,\n store: L(l),\n \"onRow:action\": b\n }, {\n default: At(() => [\n (w(!0), k(oe, null, ie(c(v), (g, M) => (w(), k(oe, {\n key: g.name\n }, [\n g.isGantt ? (w(), re(Re(g.ganttComponent || \"AGanttCell\"), {\n key: 0,\n store: L(l),\n \"columns-count\": L(l).columns.length - i.value,\n color: v.gantt?.color,\n start: v.gantt?.startIndex,\n end: v.gantt?.endIndex,\n colspan: g.colspan,\n pinned: g.pinned,\n rowIndex: v.originalIndex,\n colIndex: g.originalIndex ?? M,\n style: fe({\n textAlign: g?.align || \"center\",\n minWidth: g?.width || \"40ch\",\n width: L(l).config.fullWidth ? \"auto\" : null\n }),\n \"onConnection:create\": p\n }, null, 40, [\"store\", \"columns-count\", \"color\", \"start\", \"end\", \"colspan\", \"pinned\", \"rowIndex\", \"colIndex\", \"style\"])) : (w(), re(Re(g.cellComponent || \"ACell\"), {\n key: 1,\n store: L(l),\n pinned: g.pinned,\n rowIndex: v.originalIndex,\n colIndex: M,\n style: fe({\n textAlign: g?.align || \"center\",\n width: L(l).config.fullWidth ? \"auto\" : null\n }),\n spellcheck: \"false\"\n }, null, 8, [\"store\", \"pinned\", \"rowIndex\", \"colIndex\", \"style\"]))\n ], 64))), 128))\n ]),\n _: 2\n }, 1032, [\"row\", \"rowIndex\", \"store\"]))), 128))\n ], !0)\n ]),\n ue(C.$slots, \"footer\", { data: L(l) }, void 0, !0),\n ue(C.$slots, \"modal\", { data: L(l) }, () => [\n U(ot(gn, { store: L(l) }, {\n default: At(() => [\n (w(), re(Re(L(l).modal.component), at({\n key: `${L(l).modal.rowIndex}:${L(l).modal.colIndex}`,\n \"col-index\": L(l).modal.colIndex,\n \"row-index\": L(l).modal.rowIndex,\n store: L(l)\n }, L(l).modal.componentProps), null, 16, [\"col-index\", \"row-index\", \"store\"]))\n ]),\n _: 1\n }, 8, [\"store\"]), [\n [ge, L(l).modal.visible]\n ])\n ], !0)\n ], 4)), [\n [L(zo), L(l).closeModal]\n ]),\n L(l).isGanttView && L(l).isDependencyGraphEnabled ? (w(), re(Qo, {\n key: 0,\n store: L(l),\n \"onConnection:delete\": h\n }, null, 8, [\"store\"])) : z(\"\", !0)\n ]));\n }\n}), gl = /* @__PURE__ */ Ee(hl, [[\"__scopeId\", \"data-v-3d00d51b\"]]), wl = {}, yl = { class: \"aloading\" }, xl = { class: \"aloading-header\" };\nfunction bl(e, t) {\n return w(), k(\"div\", yl, [\n y(\"h2\", xl, [\n ue(e.$slots, \"default\", {}, void 0, !0)\n ]),\n t[0] || (t[0] = y(\"div\", { class: \"aloading-bar\" }, null, -1))\n ]);\n}\nconst kl = /* @__PURE__ */ Ee(wl, [[\"render\", bl], [\"__scopeId\", \"data-v-a930a25b\"]]), Il = {}, Cl = { class: \"aloading\" }, Ml = { class: \"aloading-header\" };\nfunction El(e, t) {\n return w(), k(\"div\", Cl, [\n y(\"h2\", Ml, [\n ue(e.$slots, \"default\", {}, void 0, !0)\n ]),\n t[0] || (t[0] = y(\"div\", { class: \"aloading-bar\" }, null, -1))\n ]);\n}\nconst Al = /* @__PURE__ */ Ee(Il, [[\"render\", El], [\"__scopeId\", \"data-v-e1165876\"]]);\nfunction Tl(e) {\n e.component(\"ACell\", po), e.component(\"AExpansionRow\", yo), e.component(\"AGanttCell\", Eo), e.component(\"ARow\", mn), e.component(\"ARowActions\", tt), e.component(\"ATable\", gl), e.component(\"ATableHeader\", hn), e.component(\"ATableLoading\", kl), e.component(\"ATableLoadingBar\", Al), e.component(\"ATableModal\", gn);\n}\nconst Dl = { class: \"aform_form-element\" }, $l = [\"for\"], Sl = { class: \"aform_checkbox-container aform_input-field\" }, Rl = [\"id\", \"readonly\", \"required\"], Ll = [\"innerHTML\"], Hl = /* @__PURE__ */ Y({\n __name: \"ACheckbox\",\n props: /* @__PURE__ */ me({\n schema: {},\n label: {},\n mask: {},\n required: { type: Boolean },\n readOnly: { type: Boolean },\n uuid: {},\n validation: { default: () => ({ errorMessage: \" \" }) }\n }, {\n modelValue: {},\n modelModifiers: {}\n }),\n emits: [\"update:modelValue\"],\n setup(e) {\n const t = he(e, \"modelValue\");\n return (n, o) => (w(), k(\"div\", Dl, [\n y(\"label\", {\n class: \"aform_field-label\",\n for: e.uuid\n }, j(e.label), 9, $l),\n y(\"span\", Sl, [\n U(y(\"input\", {\n id: e.uuid,\n \"onUpdate:modelValue\": o[0] || (o[0] = (a) => t.value = a),\n type: \"checkbox\",\n class: \"aform_checkbox\",\n readonly: e.readOnly,\n required: e.required\n }, null, 8, Rl), [\n [rn, t.value]\n ])\n ]),\n U(y(\"p\", {\n class: \"aform_error\",\n innerHTML: e.validation.errorMessage\n }, null, 8, Ll), [\n [ge, e.validation.errorMessage]\n ])\n ]));\n }\n}), be = (e, t) => {\n const n = e.__vccOpts || e;\n for (const [o, a] of t)\n n[o] = a;\n return n;\n}, _l = /* @__PURE__ */ be(Hl, [[\"__scopeId\", \"data-v-f13fd4d6\"]]), Vl = /* @__PURE__ */ Y({\n __name: \"AComboBox\",\n props: [\"event\", \"cellData\", \"tableID\"],\n setup(e) {\n return (t, n) => {\n const o = cn(\"ATableModal\");\n return w(), re(o, {\n event: e.event,\n \"cell-data\": e.cellData,\n class: \"amodal\"\n }, {\n default: At(() => [...n[0] || (n[0] = [\n y(\"div\", null, [\n y(\"input\", { type: \"text\" }),\n y(\"input\", { type: \"text\" }),\n y(\"input\", { type: \"text\" })\n ], -1)\n ])]),\n _: 1\n }, 8, [\"event\", \"cell-data\"]);\n };\n }\n}), Ol = [\"id\", \"disabled\", \"required\"], Pl = [\"for\"], Bl = [\"innerHTML\"], Fl = /* @__PURE__ */ Y({\n __name: \"ADate\",\n props: /* @__PURE__ */ me({\n schema: {},\n label: { default: \"Date\" },\n mask: {},\n required: { type: Boolean },\n readOnly: { type: Boolean },\n uuid: {},\n validation: { default: () => ({ errorMessage: \" \" }) }\n }, {\n modelValue: {\n // format the date to be compatible with the native input datepicker\n },\n modelModifiers: {}\n }),\n emits: [\"update:modelValue\"],\n setup(e) {\n const t = he(e, \"modelValue\", {\n // format the date to be compatible with the native input datepicker\n set: (a) => new Date(a).toISOString().split(\"T\")[0]\n }), n = ae(\"date\"), o = () => {\n n.value && \"showPicker\" in HTMLInputElement.prototype && n.value.showPicker();\n };\n return (a, r) => (w(), k(\"div\", null, [\n U(y(\"input\", {\n id: e.uuid,\n ref: \"date\",\n \"onUpdate:modelValue\": r[0] || (r[0] = (s) => t.value = s),\n type: \"date\",\n disabled: e.readOnly,\n required: e.required,\n onClick: o\n }, null, 8, Ol), [\n [de, t.value]\n ]),\n y(\"label\", { for: e.uuid }, j(e.label), 9, Pl),\n U(y(\"p\", {\n innerHTML: e.validation.errorMessage\n }, null, 8, Bl), [\n [ge, e.validation.errorMessage]\n ])\n ]));\n }\n}), Zl = /* @__PURE__ */ be(Fl, [[\"__scopeId\", \"data-v-a15ed922\"]]);\nfunction wn(e, t) {\n return rt() ? (it(e, t), !0) : !1;\n}\n// @__NO_SIDE_EFFECTS__\nfunction Yt() {\n const e = /* @__PURE__ */ new Set(), t = (r) => {\n e.delete(r);\n };\n return {\n on: (r) => {\n e.add(r);\n const s = () => t(r);\n return wn(s), { off: s };\n },\n off: t,\n trigger: (...r) => Promise.all(Array.from(e).map((s) => s(...r))),\n clear: () => {\n e.clear();\n }\n };\n}\nconst yn = typeof window < \"u\" && typeof document < \"u\";\ntypeof WorkerGlobalScope < \"u\" && globalThis instanceof WorkerGlobalScope;\nconst Nl = Object.prototype.toString, Wl = (e) => Nl.call(e) === \"[object Object]\", Pe = () => {\n}, zl = (e, t) => Object.prototype.hasOwnProperty.call(e, t);\nfunction Gl(...e) {\n if (e.length !== 1) return un(...e);\n const t = e[0];\n return typeof t == \"function\" ? St($t(() => ({\n get: t,\n set: Pe\n }))) : S(t);\n}\nfunction kt(e) {\n return Array.isArray(e) ? e : [e];\n}\nfunction Ul(e, t, n) {\n return Q(e, t, {\n ...n,\n immediate: !0\n });\n}\nconst xn = yn ? window : void 0, jl = yn ? window.document : void 0;\nfunction Se(e) {\n var t;\n const n = $(e);\n return (t = n?.$el) !== null && t !== void 0 ? t : n;\n}\nfunction It(...e) {\n const t = (o, a, r, s) => (o.addEventListener(a, r, s), () => o.removeEventListener(a, r, s)), n = T(() => {\n const o = kt($(e[0])).filter((a) => a != null);\n return o.every((a) => typeof a != \"string\") ? o : void 0;\n });\n return Ul(() => {\n var o, a;\n return [\n (o = (a = n.value) === null || a === void 0 ? void 0 : a.map((r) => Se(r))) !== null && o !== void 0 ? o : [xn].filter((r) => r != null),\n kt($(n.value ? e[1] : e[0])),\n kt(L(n.value ? e[2] : e[1])),\n $(n.value ? e[3] : e[2])\n ];\n }, ([o, a, r, s], l, i) => {\n if (!o?.length || !a?.length || !r?.length) return;\n const u = Wl(s) ? { ...s } : s, c = o.flatMap((p) => a.flatMap((h) => r.map((b) => t(p, h, b, u))));\n i(() => {\n c.forEach((p) => p());\n });\n }, { flush: \"post\" });\n}\nfunction Xt(e, t, n = {}) {\n const { window: o = xn, ignore: a = [], capture: r = !0, detectIframe: s = !1, controls: l = !1 } = n;\n if (!o) return l ? {\n stop: Pe,\n cancel: Pe,\n trigger: Pe\n } : Pe;\n let i = !0;\n const u = (v) => $(a).some((m) => {\n if (typeof m == \"string\") return Array.from(o.document.querySelectorAll(m)).some((g) => g === v.target || v.composedPath().includes(g));\n {\n const g = Se(m);\n return g && (v.target === g || v.composedPath().includes(g));\n }\n });\n function c(v) {\n const m = $(v);\n return m && m.$.subTree.shapeFlag === 16;\n }\n function p(v, m) {\n const g = $(v), M = g.$.subTree && g.$.subTree.children;\n return M == null || !Array.isArray(M) ? !1 : M.some((D) => D.el === m.target || m.composedPath().includes(D.el));\n }\n const h = (v) => {\n const m = Se(e);\n if (v.target != null && !(!(m instanceof Element) && c(e) && p(e, v)) && !(!m || m === v.target || v.composedPath().includes(m))) {\n if (\"detail\" in v && v.detail === 0 && (i = !u(v)), !i) {\n i = !0;\n return;\n }\n t(v);\n }\n };\n let b = !1;\n const C = [\n It(o, \"click\", (v) => {\n b || (b = !0, setTimeout(() => {\n b = !1;\n }, 0), h(v));\n }, {\n passive: !0,\n capture: r\n }),\n It(o, \"pointerdown\", (v) => {\n const m = Se(e);\n i = !u(v) && !!(m && !v.composedPath().includes(m));\n }, { passive: !0 }),\n s && It(o, \"blur\", (v) => {\n setTimeout(() => {\n var m;\n const g = Se(e);\n ((m = o.document.activeElement) === null || m === void 0 ? void 0 : m.tagName) === \"IFRAME\" && !g?.contains(o.document.activeElement) && t(v);\n }, 0);\n }, { passive: !0 })\n ].filter(Boolean), x = () => C.forEach((v) => v());\n return l ? {\n stop: x,\n cancel: () => {\n i = !1;\n },\n trigger: (v) => {\n i = !0, h(v), i = !1;\n }\n } : x;\n}\nconst ql = {\n multiple: !0,\n accept: \"*\",\n reset: !1,\n directory: !1\n};\nfunction Yl(e) {\n if (!e) return null;\n if (e instanceof FileList) return e;\n const t = new DataTransfer();\n for (const n of e) t.items.add(n);\n return t.files;\n}\nfunction Xl(e = {}) {\n const { document: t = jl } = e, n = S(Yl(e.initialFiles)), { on: o, trigger: a } = /* @__PURE__ */ Yt(), { on: r, trigger: s } = /* @__PURE__ */ Yt(), l = T(() => {\n var p;\n const h = (p = Se(e.input)) !== null && p !== void 0 ? p : t ? t.createElement(\"input\") : void 0;\n return h && (h.type = \"file\", h.onchange = (b) => {\n n.value = b.target.files, a(n.value);\n }, h.oncancel = () => {\n s();\n }), h;\n }), i = () => {\n n.value = null, l.value && l.value.value && (l.value.value = \"\", a(null));\n }, u = (p) => {\n const h = l.value;\n h && (h.multiple = $(p.multiple), h.accept = $(p.accept), h.webkitdirectory = $(p.directory), zl(p, \"capture\") && (h.capture = $(p.capture)));\n }, c = (p) => {\n const h = l.value;\n if (!h) return;\n const b = {\n ...ql,\n ...e,\n ...p\n };\n u(b), $(b.reset) && i(), h.click();\n };\n return Te(() => {\n u(e);\n }), {\n files: St(n),\n open: c,\n reset: i,\n onCancel: r,\n onChange: o\n };\n}\nfunction Ct(e) {\n return typeof Window < \"u\" && e instanceof Window ? e.document.documentElement : typeof Document < \"u\" && e instanceof Document ? e.documentElement : e;\n}\nconst Mt = /* @__PURE__ */ new WeakMap();\nfunction Jl(e, t = !1) {\n const n = ee(t);\n let o = \"\";\n Q(Gl(e), (s) => {\n const l = Ct($(s));\n if (l) {\n const i = l;\n if (Mt.get(i) || Mt.set(i, i.style.overflow), i.style.overflow !== \"hidden\" && (o = i.style.overflow), i.style.overflow === \"hidden\") return n.value = !0;\n if (n.value) return i.style.overflow = \"hidden\";\n }\n }, { immediate: !0 });\n const a = () => {\n const s = Ct($(e));\n !s || n.value || (s.style.overflow = \"hidden\", n.value = !0);\n }, r = () => {\n const s = Ct($(e));\n !s || !n.value || (s.style.overflow = o, Mt.delete(s), n.value = !1);\n };\n return wn(r), T({\n get() {\n return n.value;\n },\n set(s) {\n s ? a() : r();\n }\n });\n}\nconst Et = /* @__PURE__ */ new WeakMap(), Kl = {\n mounted(e, t) {\n const n = !t.modifiers.bubble;\n let o;\n if (typeof t.value == \"function\") o = Xt(e, t.value, { capture: n });\n else {\n const [a, r] = t.value;\n o = Xt(e, a, Object.assign({ capture: n }, r));\n }\n Et.set(e, o);\n },\n unmounted(e) {\n const t = Et.get(e);\n t && typeof t == \"function\" ? t() : t?.stop(), Et.delete(e);\n }\n};\nfunction Ql() {\n let e = !1;\n const t = ee(!1);\n return (n, o) => {\n if (t.value = o.value, e) return;\n e = !0;\n const a = Jl(n, o.value);\n Q(t, (r) => a.value = r);\n };\n}\nQl();\nconst ea = { class: \"input-wrapper\" }, ta = {\n id: \"autocomplete-results\",\n class: \"autocomplete-results\"\n}, na = {\n key: 0,\n class: \"loading autocomplete-result\"\n}, oa = [\"onClick\"], la = /* @__PURE__ */ Y({\n __name: \"ADropdown\",\n props: /* @__PURE__ */ me({\n label: {},\n items: { default: () => [] },\n isAsync: { type: Boolean, default: !1 },\n filterFunction: { type: Function, default: void 0 }\n }, {\n modelValue: {},\n modelModifiers: {}\n }),\n emits: [\"update:modelValue\"],\n setup(e) {\n const t = he(e, \"modelValue\"), n = sn({\n activeItemIndex: null,\n open: !1,\n loading: !1,\n results: e.items\n }), o = () => l(), a = async () => {\n if (n.open = !0, n.activeItemIndex = null, e.filterFunction) {\n e.isAsync && (n.loading = !0);\n try {\n const h = await e.filterFunction(t.value || \"\");\n n.results = h || [];\n } catch {\n n.results = [];\n } finally {\n e.isAsync && (n.loading = !1);\n }\n } else\n i();\n }, r = (h) => {\n t.value = h, l(h);\n }, s = () => {\n n.activeItemIndex = e.isAsync ? null : t.value && e.items?.indexOf(t.value) || null, n.open = !0, n.results = e.isAsync ? [] : e.items;\n }, l = (h) => {\n n.activeItemIndex = null, n.open = !1, e.items?.includes(h || t.value || \"\") || (t.value = \"\");\n }, i = () => {\n t.value ? n.results = e.items?.filter((h) => h.toLowerCase().includes((t.value ?? \"\").toLowerCase())) : n.results = e.items;\n }, u = () => {\n const h = n.results?.length || 0;\n if (n.activeItemIndex != null) {\n const b = isNaN(n.activeItemIndex) ? 0 : n.activeItemIndex;\n n.activeItemIndex = (b + 1) % h;\n } else\n n.activeItemIndex = 0;\n }, c = () => {\n const h = n.results?.length || 0;\n if (n.activeItemIndex != null) {\n const b = isNaN(n.activeItemIndex) ? 0 : n.activeItemIndex;\n b === 0 ? n.activeItemIndex = null : n.activeItemIndex = b - 1;\n } else\n n.activeItemIndex = h - 1;\n }, p = () => {\n if (n.results) {\n const h = n.activeItemIndex || 0, b = n.results[h];\n r(b);\n }\n n.activeItemIndex = 0;\n };\n return (h, b) => U((w(), k(\"div\", {\n class: K([\"autocomplete\", { isOpen: n.open }])\n }, [\n y(\"div\", ea, [\n U(y(\"input\", {\n \"onUpdate:modelValue\": b[0] || (b[0] = (C) => t.value = C),\n type: \"text\",\n onInput: a,\n onFocus: s,\n onKeydown: [\n $e(u, [\"down\"]),\n $e(c, [\"up\"]),\n $e(p, [\"enter\"]),\n $e(o, [\"esc\"]),\n $e(o, [\"tab\"])\n ]\n }, null, 544), [\n [de, t.value]\n ]),\n U(y(\"ul\", ta, [\n n.loading ? (w(), k(\"li\", na, \"Loading results...\")) : (w(!0), k(oe, { key: 1 }, ie(n.results, (C, x) => (w(), k(\"li\", {\n key: C,\n class: K([\"autocomplete-result\", { \"is-active\": x === n.activeItemIndex }]),\n onClick: pe((v) => r(C), [\"stop\"])\n }, j(C), 11, oa))), 128))\n ], 512), [\n [ge, n.open]\n ]),\n y(\"label\", null, j(e.label), 1)\n ])\n ], 2)), [\n [L(Kl), o]\n ]);\n }\n}), aa = /* @__PURE__ */ be(la, [[\"__scopeId\", \"data-v-31a6db8c\"]]);\nfunction bn(e, t) {\n return rt() ? (it(e, t), !0) : !1;\n}\nconst sa = typeof window < \"u\" && typeof document < \"u\";\ntypeof WorkerGlobalScope < \"u\" && globalThis instanceof WorkerGlobalScope;\nconst ra = (e) => e != null, ia = Object.prototype.toString, ua = (e) => ia.call(e) === \"[object Object]\", ca = () => {\n};\nfunction nt(e) {\n return Array.isArray(e) ? e : [e];\n}\nfunction da(e, t, n) {\n return Q(e, t, {\n ...n,\n immediate: !0\n });\n}\nconst Ve = sa ? window : void 0;\nfunction He(e) {\n var t;\n const n = $(e);\n return (t = n?.$el) !== null && t !== void 0 ? t : n;\n}\nfunction Fe(...e) {\n const t = (o, a, r, s) => (o.addEventListener(a, r, s), () => o.removeEventListener(a, r, s)), n = T(() => {\n const o = nt($(e[0])).filter((a) => a != null);\n return o.every((a) => typeof a != \"string\") ? o : void 0;\n });\n return da(() => {\n var o, a;\n return [\n (o = (a = n.value) === null || a === void 0 ? void 0 : a.map((r) => He(r))) !== null && o !== void 0 ? o : [Ve].filter((r) => r != null),\n nt($(n.value ? e[1] : e[0])),\n nt(L(n.value ? e[2] : e[1])),\n $(n.value ? e[3] : e[2])\n ];\n }, ([o, a, r, s], l, i) => {\n if (!o?.length || !a?.length || !r?.length) return;\n const u = ua(s) ? { ...s } : s, c = o.flatMap((p) => a.flatMap((h) => r.map((b) => t(p, h, b, u))));\n i(() => {\n c.forEach((p) => p());\n });\n }, { flush: \"post\" });\n}\n// @__NO_SIDE_EFFECTS__\nfunction va() {\n const e = ee(!1), t = ut();\n return t && we(() => {\n e.value = !0;\n }, t), e;\n}\n// @__NO_SIDE_EFFECTS__\nfunction fa(e) {\n const t = /* @__PURE__ */ va();\n return T(() => (t.value, !!e()));\n}\nfunction pa(e, t, n = {}) {\n const { window: o = Ve, ...a } = n;\n let r;\n const s = /* @__PURE__ */ fa(() => o && \"MutationObserver\" in o), l = () => {\n r && (r.disconnect(), r = void 0);\n }, i = Q(T(() => {\n const p = nt($(e)).map(He).filter(ra);\n return new Set(p);\n }), (p) => {\n l(), s.value && p.size && (r = new MutationObserver(t), p.forEach((h) => r.observe(h, a)));\n }, {\n immediate: !0,\n flush: \"post\"\n }), u = () => r?.takeRecords(), c = () => {\n i(), l();\n };\n return bn(c), {\n isSupported: s,\n stop: c,\n takeRecords: u\n };\n}\nfunction ma(e, t, n = {}) {\n const { window: o = Ve, document: a = o?.document, flush: r = \"sync\" } = n;\n if (!o || !a) return ca;\n let s;\n const l = (c) => {\n s?.(), s = c;\n }, i = Te(() => {\n const c = He(e);\n if (c) {\n const { stop: p } = pa(a, (h) => {\n h.map((b) => [...b.removedNodes]).flat().some((b) => b === c || b.contains(c)) && t(h);\n }, {\n window: o,\n childList: !0,\n subtree: !0\n });\n l(p);\n }\n }, { flush: r }), u = () => {\n i(), l();\n };\n return bn(u), u;\n}\n// @__NO_SIDE_EFFECTS__\nfunction ha(e = {}) {\n var t;\n const { window: n = Ve, deep: o = !0, triggerOnRemoval: a = !1 } = e, r = (t = e.document) !== null && t !== void 0 ? t : n?.document, s = () => {\n let u = r?.activeElement;\n if (o)\n for (var c; u?.shadowRoot; ) u = u == null || (c = u.shadowRoot) === null || c === void 0 ? void 0 : c.activeElement;\n return u;\n }, l = ee(), i = () => {\n l.value = s();\n };\n if (n) {\n const u = {\n capture: !0,\n passive: !0\n };\n Fe(n, \"blur\", (c) => {\n c.relatedTarget === null && i();\n }, u), Fe(n, \"focus\", i, u);\n }\n return a && ma(l, i, { document: r }), i(), l;\n}\nconst ga = \"focusin\", wa = \"focusout\", ya = \":focus-within\";\nfunction xa(e, t = {}) {\n const { window: n = Ve } = t, o = T(() => He(e)), a = ee(!1), r = T(() => a.value);\n if (!n || !(/* @__PURE__ */ ha(t)).value) return { focused: r };\n const s = { passive: !0 };\n return Fe(o, ga, () => a.value = !0, s), Fe(o, wa, () => {\n var l, i, u;\n return a.value = (l = (i = o.value) === null || i === void 0 || (u = i.matches) === null || u === void 0 ? void 0 : u.call(i, ya)) !== null && l !== void 0 ? l : !1;\n }, s), { focused: r };\n}\nfunction ba(e, { window: t = Ve, scrollTarget: n } = {}) {\n const o = S(!1), a = () => {\n if (!t) return;\n const r = t.document, s = He(e);\n if (!s)\n o.value = !1;\n else {\n const l = s.getBoundingClientRect();\n o.value = l.top <= (t.innerHeight || r.documentElement.clientHeight) && l.left <= (t.innerWidth || r.documentElement.clientWidth) && l.bottom >= 0 && l.right >= 0;\n }\n };\n return Q(\n () => He(e),\n () => a(),\n { immediate: !0, flush: \"post\" }\n ), t && Fe(n || t, \"scroll\", a, {\n capture: !1,\n passive: !0\n }), o;\n}\nconst ke = (e) => {\n let t = ba(e).value;\n return t = t && e.offsetHeight > 0, t;\n}, Ie = (e) => e.tabIndex >= 0, Jt = (e) => {\n const t = e.target;\n return Pt(t);\n}, Pt = (e) => {\n let t;\n if (e instanceof HTMLTableCellElement) {\n const n = e.parentElement?.previousElementSibling;\n if (n) {\n const o = Array.from(n.children)[e.cellIndex];\n o && (t = o);\n }\n } else if (e instanceof HTMLTableRowElement) {\n const n = e.previousElementSibling;\n n && (t = n);\n }\n return t && (!Ie(t) || !ke(t)) ? Pt(t) : t;\n}, ka = (e) => {\n const t = e.target;\n let n;\n if (t instanceof HTMLTableCellElement) {\n const o = t.parentElement?.parentElement;\n if (o) {\n const a = o.firstElementChild?.children[t.cellIndex];\n a && (n = a);\n }\n } else if (t instanceof HTMLTableRowElement) {\n const o = t.parentElement;\n if (o) {\n const a = o.firstElementChild;\n a && (n = a);\n }\n }\n return n && (!Ie(n) || !ke(n)) ? Bt(n) : n;\n}, Kt = (e) => {\n const t = e.target;\n return Bt(t);\n}, Bt = (e) => {\n let t;\n if (e instanceof HTMLTableCellElement) {\n const n = e.parentElement?.nextElementSibling;\n if (n) {\n const o = Array.from(n.children)[e.cellIndex];\n o && (t = o);\n }\n } else if (e instanceof HTMLTableRowElement) {\n const n = e.nextElementSibling;\n n && (t = n);\n }\n return t && (!Ie(t) || !ke(t)) ? Bt(t) : t;\n}, Ia = (e) => {\n const t = e.target;\n let n;\n if (t instanceof HTMLTableCellElement) {\n const o = t.parentElement?.parentElement;\n if (o) {\n const a = o.lastElementChild?.children[t.cellIndex];\n a && (n = a);\n }\n } else if (t instanceof HTMLTableRowElement) {\n const o = t.parentElement;\n if (o) {\n const a = o.lastElementChild;\n a && (n = a);\n }\n }\n return n && (!Ie(n) || !ke(n)) ? Pt(n) : n;\n}, Qt = (e) => {\n const t = e.target;\n return Ft(t);\n}, Ft = (e) => {\n let t;\n return e.previousElementSibling ? t = e.previousElementSibling : t = e.parentElement?.previousElementSibling?.lastElementChild, t && (!Ie(t) || !ke(t)) ? Ft(t) : t;\n}, en = (e) => {\n const t = e.target;\n return Zt(t);\n}, Zt = (e) => {\n let t;\n return e.nextElementSibling ? t = e.nextElementSibling : t = e.parentElement?.nextElementSibling?.firstElementChild, t && (!Ie(t) || !ke(t)) ? Zt(t) : t;\n}, tn = (e) => {\n const t = e.target.parentElement?.firstElementChild;\n return t && (!Ie(t) || !ke(t)) ? Zt(t) : t;\n}, nn = (e) => {\n const t = e.target.parentElement?.lastElementChild;\n return t && (!Ie(t) || !ke(t)) ? Ft(t) : t;\n}, Ke = [\"alt\", \"control\", \"shift\", \"meta\"], Ca = {\n ArrowUp: \"up\",\n ArrowDown: \"down\",\n ArrowLeft: \"left\",\n ArrowRight: \"right\"\n}, kn = {\n \"keydown.up\": (e) => {\n const t = Jt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.down\": (e) => {\n const t = Kt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.left\": (e) => {\n const t = Qt(e);\n e.preventDefault(), e.stopPropagation(), t && t.focus();\n },\n \"keydown.right\": (e) => {\n const t = en(e);\n e.preventDefault(), e.stopPropagation(), t && t.focus();\n },\n \"keydown.control.up\": (e) => {\n const t = ka(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.down\": (e) => {\n const t = Ia(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.left\": (e) => {\n const t = tn(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.right\": (e) => {\n const t = nn(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.end\": (e) => {\n const t = nn(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.enter\": (e) => {\n if (e.target instanceof HTMLTableCellElement) {\n e.preventDefault(), e.stopPropagation();\n const t = Kt(e);\n t && t.focus();\n }\n },\n \"keydown.shift.enter\": (e) => {\n if (e.target instanceof HTMLTableCellElement) {\n e.preventDefault(), e.stopPropagation();\n const t = Jt(e);\n t && t.focus();\n }\n },\n \"keydown.home\": (e) => {\n const t = tn(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.tab\": (e) => {\n const t = en(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.shift.tab\": (e) => {\n const t = Qt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n }\n};\nfunction Ma(e) {\n const t = (s) => {\n let l = null;\n return s.parent && (typeof s.parent == \"string\" ? l = document.querySelector(s.parent) : s.parent instanceof HTMLElement ? l = s.parent : l = s.parent.value), l;\n }, n = (s) => {\n const l = t(s);\n let i = [];\n if (typeof s.selectors == \"string\")\n i = Array.from(l ? l.querySelectorAll(s.selectors) : document.querySelectorAll(s.selectors));\n else if (Array.isArray(s.selectors))\n for (const u of s.selectors)\n u instanceof HTMLElement ? i.push(u) : i.push(u.$el);\n else if (s.selectors instanceof HTMLElement)\n i.push(s.selectors);\n else if (s.selectors?.value)\n if (Array.isArray(s.selectors.value))\n for (const u of s.selectors.value)\n u instanceof HTMLElement ? i.push(u) : i.push(u.$el);\n else\n i.push(s.selectors.value);\n return i;\n }, o = (s) => {\n const l = t(s);\n let i = [];\n return s.selectors ? i = n(s) : l && (i = Array.from(l.children).filter((u) => Ie(u) && ke(u))), i;\n }, a = (s) => (l) => {\n const i = Ca[l.key] || l.key.toLowerCase();\n if (Ke.includes(i)) return;\n const u = s.handlers || kn;\n for (const c of Object.keys(u)) {\n const [p, ...h] = c.split(\".\");\n if (p === \"keydown\" && h.includes(i)) {\n const b = u[c], C = h.filter((v) => Ke.includes(v)), x = Ke.some((v) => {\n const m = v.charAt(0).toUpperCase() + v.slice(1);\n return l.getModifierState(m);\n });\n if (C.length > 0) {\n if (x) {\n for (const v of Ke)\n if (h.includes(v)) {\n const m = v.charAt(0).toUpperCase() + v.slice(1);\n l.getModifierState(m) && b(l);\n }\n }\n } else\n x || b(l);\n }\n }\n }, r = [];\n we(() => {\n for (const s of e) {\n const l = t(s), i = o(s), u = a(s), c = l ? [l] : i;\n for (const p of c) {\n const { focused: h } = xa(S(p)), b = Q(h, (C) => {\n C ? p.addEventListener(\"keydown\", u) : p.removeEventListener(\"keydown\", u);\n });\n r.push(b);\n }\n }\n }), an(() => {\n for (const s of r)\n s();\n });\n}\nconst Ea = {\n ref: \"datepicker\",\n class: \"adatepicker\",\n tabindex: \"0\"\n}, Aa = {\n colspan: \"5\",\n tabindex: -1\n}, Ta = [\"onClick\", \"onKeydown\"], Da = 6, on = 7, $a = /* @__PURE__ */ Y({\n __name: \"ADatePicker\",\n props: {\n modelValue: { default: /* @__PURE__ */ new Date() },\n modelModifiers: {}\n },\n emits: [\"update:modelValue\"],\n setup(e, { expose: t }) {\n const n = he(e, \"modelValue\"), o = S(new Date(n.value)), a = S(o.value.getMonth()), r = S(o.value.getFullYear()), s = S([]), l = ae(\"datepicker\");\n we(async () => {\n i(), await st();\n const M = document.getElementsByClassName(\"selectedDate\");\n if (M.length > 0)\n M[0].focus();\n else {\n const D = document.getElementsByClassName(\"todaysDate\");\n D.length > 0 && D[0].focus();\n }\n });\n const i = () => {\n s.value = [];\n const M = new Date(r.value, a.value, 1), D = M.getDay(), P = M.setDate(M.getDate() - D);\n for (const H of Array(43).keys())\n s.value.push(P + H * 864e5);\n };\n Q([a, r], i);\n const u = () => r.value -= 1, c = () => r.value += 1, p = () => {\n a.value == 0 ? (a.value = 11, u()) : a.value -= 1;\n }, h = () => {\n a.value == 11 ? (a.value = 0, c()) : a.value += 1;\n }, b = (M) => {\n const D = /* @__PURE__ */ new Date();\n if (a.value === D.getMonth())\n return D.toDateString() === new Date(M).toDateString();\n }, C = (M) => new Date(M).toDateString() === new Date(o.value).toDateString(), x = (M, D) => (M - 1) * on + D, v = (M, D) => s.value[x(M, D)], m = (M) => {\n n.value = o.value = new Date(s.value[M]);\n }, g = T(() => new Date(r.value, a.value, 1).toLocaleDateString(void 0, {\n year: \"numeric\",\n month: \"long\"\n }));\n return Ma([\n {\n parent: l,\n selectors: \"td\",\n handlers: {\n ...kn,\n \"keydown.pageup\": p,\n \"keydown.shift.pageup\": u,\n \"keydown.pagedown\": h,\n \"keydown.shift.pagedown\": c,\n // TODO: this is a hack to override the stonecrop enter handler;\n // store context inside the component so that handlers can be setup consistently\n \"keydown.enter\": () => {\n }\n }\n }\n ]), t({ currentMonth: a, currentYear: r, selectedDate: o }), (M, D) => (w(), k(\"div\", Ea, [\n y(\"table\", null, [\n y(\"tbody\", null, [\n y(\"tr\", null, [\n y(\"td\", {\n id: \"previous-month-btn\",\n tabindex: -1,\n onClick: p\n }, \"<\"),\n y(\"th\", Aa, j(g.value), 1),\n y(\"td\", {\n id: \"next-month-btn\",\n tabindex: -1,\n onClick: h\n }, \">\")\n ]),\n D[0] || (D[0] = y(\"tr\", { class: \"days-header\" }, [\n y(\"td\", null, \"M\"),\n y(\"td\", null, \"T\"),\n y(\"td\", null, \"W\"),\n y(\"td\", null, \"T\"),\n y(\"td\", null, \"F\"),\n y(\"td\", null, \"S\"),\n y(\"td\", null, \"S\")\n ], -1)),\n (w(), k(oe, null, ie(Da, (P) => y(\"tr\", { key: P }, [\n (w(), k(oe, null, ie(on, (H) => y(\"td\", {\n ref_for: !0,\n ref: \"celldate\",\n key: x(P, H),\n contenteditable: !1,\n spellcheck: !1,\n tabindex: 0,\n class: K({\n todaysDate: b(v(P, H)),\n selectedDate: C(v(P, H))\n }),\n onClick: pe((E) => m(x(P, H)), [\"prevent\", \"stop\"]),\n onKeydown: $e((E) => m(x(P, H)), [\"enter\"])\n }, j(new Date(v(P, H)).getDate()), 43, Ta)), 64))\n ])), 64))\n ])\n ])\n ], 512));\n }\n}), Sa = /* @__PURE__ */ be($a, [[\"__scopeId\", \"data-v-056d2b5e\"]]), Ra = /* @__PURE__ */ Y({\n __name: \"CollapseButton\",\n props: {\n collapsed: { type: Boolean }\n },\n setup(e) {\n return (t, n) => (w(), k(\"button\", {\n class: K([\"collapse-button\", e.collapsed ? \"rotated\" : \"unrotated\"])\n }, \"×\", 2));\n }\n}), La = /* @__PURE__ */ be(Ra, [[\"__scopeId\", \"data-v-6f1c1b45\"]]), Ha = { class: \"aform\" }, _a = {\n key: 0,\n class: \"aform-nested-section\"\n}, Va = {\n key: 0,\n class: \"aform-nested-label\"\n}, Oa = /* @__PURE__ */ Y({\n __name: \"AForm\",\n props: /* @__PURE__ */ me({\n schema: {},\n readOnly: { type: Boolean }\n }, {\n data: { required: !0 },\n dataModifiers: {}\n }),\n emits: /* @__PURE__ */ me([\"update:schema\", \"update:data\"], [\"update:data\"]),\n setup(e, { emit: t }) {\n const n = t, o = he(e, \"data\"), a = S({});\n Te(() => {\n !e.schema || !o.value || e.schema.forEach((i) => {\n \"schema\" in i && Array.isArray(i.schema) && i.schema.length > 0 && (!a.value[i.fieldname] && o.value[i.fieldname] ? a.value[i.fieldname] = o.value[i.fieldname] : a.value[i.fieldname] || (a.value[i.fieldname] = {}));\n });\n }), Te(() => {\n Object.keys(a.value).forEach((i) => {\n o.value && a.value[i] !== o.value[i] && (o.value[i] = a.value[i], n(\"update:data\", o.value));\n });\n }), Te(() => {\n o.value && e.schema && e.schema.forEach((i) => {\n i.fieldname && o.value[i.fieldname] !== void 0 && (i.value = o.value[i.fieldname]);\n });\n });\n const r = (i) => {\n const u = {};\n for (const [c, p] of Object.entries(i))\n [\"component\", \"fieldtype\"].includes(c) || (u[c] = p), c === \"rows\" && (!p || Array.isArray(p) && p.length === 0) && (u.rows = o.value[i.fieldname] || []);\n return u;\n }, s = S([]);\n Te(() => {\n e.schema && s.value.length !== e.schema.length && (s.value = e.schema.map((i, u) => T({\n get() {\n return i.value;\n },\n set: (c) => {\n const p = e.schema[u].fieldname;\n e.schema[u].value = c, p && o.value && (o.value[p] = c, n(\"update:data\", o.value)), n(\"update:schema\", e.schema);\n }\n })));\n });\n const l = T(() => s.value);\n return (i, u) => {\n const c = cn(\"AForm\", !0);\n return w(), k(\"form\", Ha, [\n (w(!0), k(oe, null, ie(e.schema, (p, h) => (w(), k(oe, { key: h }, [\n \"schema\" in p && Array.isArray(p.schema) && p.schema.length > 0 ? (w(), k(\"div\", _a, [\n p.label ? (w(), k(\"h4\", Va, j(p.label), 1)) : z(\"\", !0),\n ot(c, {\n data: a.value[p.fieldname],\n \"onUpdate:data\": (b) => a.value[p.fieldname] = b,\n schema: p.schema,\n \"read-only\": e.readOnly || p.readOnly\n }, null, 8, [\"data\", \"onUpdate:data\", \"schema\", \"read-only\"])\n ])) : (w(), re(Re(p.component), at({\n key: 1,\n modelValue: l.value[h].value,\n \"onUpdate:modelValue\": (b) => l.value[h].value = b,\n schema: p,\n data: o.value[p.fieldname],\n \"read-only\": e.readOnly\n }, { ref_for: !0 }, r(p)), null, 16, [\"modelValue\", \"onUpdate:modelValue\", \"schema\", \"data\", \"read-only\"]))\n ], 64))), 128))\n ]);\n };\n }\n}), In = /* @__PURE__ */ be(Oa, [[\"__scopeId\", \"data-v-06e17c5b\"]]), Pa = /* @__PURE__ */ Y({\n __name: \"AFieldset\",\n props: {\n schema: {},\n label: {},\n collapsible: { type: Boolean },\n data: { default: () => ({}) }\n },\n setup(e, { expose: t }) {\n const n = S(!1), o = S(e.data || []), a = S(e.schema), r = (s) => {\n s.preventDefault(), e.collapsible && (n.value = !n.value);\n };\n return t({ collapsed: n }), (s, l) => (w(), k(\"fieldset\", null, [\n y(\"legend\", {\n onClick: r,\n onSubmit: r\n }, [\n Dt(j(e.label) + \" \", 1),\n e.collapsible ? (w(), re(La, {\n key: 0,\n collapsed: n.value\n }, null, 8, [\"collapsed\"])) : z(\"\", !0)\n ], 32),\n ue(s.$slots, \"default\", { collapsed: n.value }, () => [\n U(ot(In, {\n schema: a.value,\n data: o.value,\n \"onUpdate:data\": l[0] || (l[0] = (i) => o.value = i)\n }, null, 8, [\"schema\", \"data\"]), [\n [ge, !n.value]\n ])\n ], !0)\n ]));\n }\n}), Ba = /* @__PURE__ */ be(Pa, [[\"__scopeId\", \"data-v-18fd6c61\"]]), Fa = { class: \"aform_form-element aform_file-attach aform__grid--full\" }, Za = {\n key: 0,\n class: \"aform_file-attach-feedback\"\n}, Na = [\"disabled\"], Wa = /* @__PURE__ */ Y({\n __name: \"AFileAttach\",\n props: {\n label: {}\n },\n setup(e) {\n const { files: t, open: n, reset: o, onChange: a } = Xl(), r = T(() => `${t.value.length} ${t.value.length === 1 ? \"file\" : \"files\"}`);\n return a((s) => s), (s, l) => (w(), k(\"div\", Fa, [\n L(t) ? (w(), k(\"div\", Za, [\n y(\"p\", null, [\n l[2] || (l[2] = Dt(\" You have selected: \", -1)),\n y(\"b\", null, j(r.value), 1)\n ]),\n (w(!0), k(oe, null, ie(L(t), (i) => (w(), k(\"li\", {\n key: i.name\n }, j(i.name), 1))), 128))\n ])) : z(\"\", !0),\n y(\"button\", {\n type: \"button\",\n class: \"aform_form-btn\",\n onClick: l[0] || (l[0] = (i) => L(n)())\n }, j(e.label), 1),\n y(\"button\", {\n type: \"button\",\n disabled: !L(t),\n class: \"aform_form-btn\",\n onClick: l[1] || (l[1] = (i) => L(o)())\n }, \"Reset\", 8, Na)\n ]));\n }\n}), za = /* @__PURE__ */ be(Wa, [[\"__scopeId\", \"data-v-b700734f\"]]), Ga = { class: \"aform_form-element\" }, Ua = [\"id\", \"disabled\", \"required\"], ja = [\"for\"], qa = [\"innerHTML\"], Ya = /* @__PURE__ */ Y({\n __name: \"ANumericInput\",\n props: /* @__PURE__ */ me({\n schema: {},\n label: {},\n mask: {},\n required: { type: Boolean },\n readOnly: { type: Boolean },\n uuid: {},\n validation: { default: () => ({ errorMessage: \" \" }) }\n }, {\n modelValue: {},\n modelModifiers: {}\n }),\n emits: [\"update:modelValue\"],\n setup(e) {\n const t = he(e, \"modelValue\");\n return (n, o) => (w(), k(\"div\", Ga, [\n U(y(\"input\", {\n id: e.uuid,\n \"onUpdate:modelValue\": o[0] || (o[0] = (a) => t.value = a),\n class: \"aform_input-field\",\n type: \"number\",\n disabled: e.readOnly,\n required: e.required\n }, null, 8, Ua), [\n [de, t.value]\n ]),\n y(\"label\", {\n class: \"aform_field-label\",\n for: e.uuid\n }, j(e.label), 9, ja),\n U(y(\"p\", {\n class: \"aform_error\",\n innerHTML: e.validation.errorMessage\n }, null, 8, qa), [\n [ge, e.validation.errorMessage]\n ])\n ]));\n }\n}), ln = {\n date: \"##/##/####\",\n datetime: \"####/##/## ##:##\",\n time: \"##:##\",\n fulltime: \"##:##:##\",\n phone: \"(###) ### - ####\",\n card: \"#### #### #### ####\"\n};\nfunction Xa(e) {\n try {\n return Function(`\"use strict\";return (${e})`)();\n } catch {\n }\n}\nfunction Ja(e) {\n let t = e.value;\n if (t) {\n const n = Xa(t);\n if (n) {\n const o = e.instance?.locale;\n t = n(o);\n }\n } else {\n const o = e.instance?.schema?.fieldtype?.toLowerCase();\n o && ln[o] && (t = ln[o]);\n }\n return t;\n}\nfunction Ka(e, t) {\n let n = e;\n const o = [t, \"/\", \"-\", \"(\", \")\", \" \"];\n for (const a of o)\n n = n.replaceAll(a, \"\");\n return n;\n}\nfunction Qa(e, t, n) {\n let o = t;\n for (const a of e) {\n const r = o.indexOf(n);\n if (r !== -1) {\n const s = o.substring(0, r), l = o.substring(r + 1);\n o = s + a + l;\n }\n }\n return o.slice(0, t.length);\n}\nfunction es(e, t) {\n const n = Ja(t);\n if (!n) return;\n const o = \"#\", a = e.value, r = Ka(a, o);\n if (r) {\n const s = Qa(r, n, o);\n t.instance?.maskFilled && (t.instance.maskFilled = !s.includes(o)), e.value = s;\n } else\n e.value = n;\n}\nconst ts = { class: \"aform_form-element\" }, ns = [\"id\", \"disabled\", \"maxlength\", \"required\"], os = [\"for\"], ls = [\"innerHTML\"], as = /* @__PURE__ */ Y({\n __name: \"ATextInput\",\n props: /* @__PURE__ */ me({\n schema: {},\n label: {},\n mask: {},\n required: { type: Boolean },\n readOnly: { type: Boolean },\n uuid: {},\n validation: { default: () => ({ errorMessage: \" \" }) }\n }, {\n modelValue: {},\n modelModifiers: {}\n }),\n emits: [\"update:modelValue\"],\n setup(e) {\n const t = S(!0), n = he(e, \"modelValue\");\n return (o, a) => (w(), k(\"div\", ts, [\n U(y(\"input\", {\n id: e.uuid,\n \"onUpdate:modelValue\": a[0] || (a[0] = (r) => n.value = r),\n class: \"aform_input-field\",\n disabled: e.readOnly,\n maxlength: e.mask && t.value ? e.mask.length : void 0,\n required: e.required\n }, null, 8, ns), [\n [de, n.value],\n [L(es), e.mask]\n ]),\n y(\"label\", {\n class: \"aform_field-label\",\n for: e.uuid\n }, j(e.label), 9, os),\n U(y(\"p\", {\n class: \"aform_error\",\n innerHTML: e.validation.errorMessage\n }, null, 8, ls), [\n [ge, e.validation.errorMessage]\n ])\n ]));\n }\n}), ss = { class: \"login-container\" }, rs = { class: \"account-container\" }, is = { class: \"account-header\" }, us = { id: \"account-title\" }, cs = { id: \"account-subtitle\" }, ds = { class: \"login-form-container\" }, vs = { class: \"login-form-email aform_form-element\" }, fs = [\"disabled\"], ps = { class: \"login-form-password aform_form-element\" }, ms = [\"disabled\"], hs = [\"disabled\"], gs = {\n key: 0,\n class: \"material-symbols-outlined loading-icon\"\n}, ws = /* @__PURE__ */ Y({\n __name: \"Login\",\n props: {\n headerTitle: { default: \"Login\" },\n headerSubtitle: { default: \"Enter your email and password to login\" }\n },\n emits: [\"loginFailed\", \"loginSuccess\"],\n setup(e, { emit: t }) {\n const n = t, o = S(\"\"), a = S(\"\"), r = S(!1), s = S(!1);\n function l(i) {\n if (i.preventDefault(), r.value = !0, s.value) {\n r.value = !1, n(\"loginFailed\");\n return;\n }\n r.value = !1, n(\"loginSuccess\");\n }\n return (i, u) => (w(), k(\"div\", ss, [\n y(\"div\", null, [\n y(\"div\", rs, [\n y(\"div\", is, [\n y(\"h1\", us, j(e.headerTitle), 1),\n y(\"p\", cs, j(e.headerSubtitle), 1)\n ]),\n y(\"form\", { onSubmit: l }, [\n y(\"div\", ds, [\n y(\"div\", vs, [\n u[2] || (u[2] = y(\"label\", {\n id: \"login-email\",\n for: \"email\",\n class: \"aform_field-label\"\n }, \"Email\", -1)),\n U(y(\"input\", {\n id: \"email\",\n \"onUpdate:modelValue\": u[0] || (u[0] = (c) => o.value = c),\n class: \"aform_input-field\",\n name: \"email\",\n placeholder: \"name@example.com\",\n type: \"email\",\n \"auto-capitalize\": \"none\",\n \"auto-complete\": \"email\",\n \"auto-correct\": \"off\",\n disabled: r.value\n }, null, 8, fs), [\n [de, o.value]\n ])\n ]),\n y(\"div\", ps, [\n u[3] || (u[3] = y(\"label\", {\n id: \"login-password\",\n for: \"password\",\n class: \"aform_field-label\"\n }, \"Password\", -1)),\n U(y(\"input\", {\n id: \"password\",\n \"onUpdate:modelValue\": u[1] || (u[1] = (c) => a.value = c),\n class: \"aform_input-field\",\n name: \"password\",\n type: \"password\",\n disabled: r.value\n }, null, 8, ms), [\n [de, a.value]\n ])\n ]),\n y(\"button\", {\n class: \"btn\",\n disabled: r.value || !o.value || !a.value,\n onClick: l\n }, [\n r.value ? (w(), k(\"span\", gs, \"progress_activity\")) : z(\"\", !0),\n u[4] || (u[4] = y(\"span\", { id: \"login-form-button\" }, \"Login\", -1))\n ], 8, hs)\n ])\n ], 32),\n u[5] || (u[5] = y(\"button\", { class: \"btn\" }, [\n y(\"span\", { id: \"forgot-password-button\" }, \"Forgot password?\")\n ], -1))\n ])\n ])\n ]));\n }\n}), bs = /* @__PURE__ */ be(ws, [[\"__scopeId\", \"data-v-d9ffd0a7\"]]);\nfunction ks(e) {\n e.use(Tl), e.component(\"ACheckbox\", _l), e.component(\"ACombobox\", Vl), e.component(\"ADate\", Zl), e.component(\"ADropdown\", aa), e.component(\"ADatePicker\", Sa), e.component(\"AFieldset\", Ba), e.component(\"AFileAttach\", za), e.component(\"AForm\", In), e.component(\"ANumericInput\", Ya), e.component(\"ATextInput\", as);\n}\nexport {\n _l as ACheckbox,\n Vl as AComboBox,\n Zl as ADate,\n Sa as ADatePicker,\n aa as ADropdown,\n Ba as AFieldset,\n za as AFileAttach,\n In as AForm,\n Ya as ANumericInput,\n as as ATextInput,\n bs as Login,\n ks as install\n};\n//# sourceMappingURL=aform.js.map\n","<template>\n\t<footer>\n\t\t<ul class=\"tabs\">\n\t\t\t<li class=\"hidebreadcrumbs\" @click=\"toggleBreadcrumbs\" @keydown.enter=\"toggleBreadcrumbs\">\n\t\t\t\t<a tabindex=\"0\"><div :class=\"rotateHideTabIcon\">×</div></a>\n\t\t\t</li>\n\t\t\t<li\n\t\t\t\tclass=\"hometab\"\n\t\t\t\t:style=\"{ display: breadcrumbsVisibile ? 'block' : 'none' }\"\n\t\t\t\t@click=\"navigateHome\"\n\t\t\t\t@keydown.enter=\"navigateHome\">\n\t\t\t\t<router-link to=\"/\" tabindex=\"0\">\n\t\t\t\t\t<svg class=\"icon\" aria-label=\"Home\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n\t\t\t\t\t\t<path d=\"M3 12l9-9 9 9\" />\n\t\t\t\t\t\t<path d=\"M9 21V12h6v9\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</router-link>\n\t\t\t</li>\n\t\t\t<li\n\t\t\t\t:class=\"['searchtab', { 'search-active': searchVisible }]\"\n\t\t\t\t:style=\"{ display: breadcrumbsVisibile ? 'block' : 'none' }\">\n\t\t\t\t<a tabindex=\"0\">\n\t\t\t\t\t<svg\n\t\t\t\t\t\tv-show=\"!searchVisible\"\n\t\t\t\t\t\tclass=\"icon search-icon\"\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\taria-label=\"Search\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t@click=\"toggleSearch\"\n\t\t\t\t\t\t@keydown.enter=\"toggleSearch\">\n\t\t\t\t\t\t<circle cx=\"11\" cy=\"11\" r=\"7\" />\n\t\t\t\t\t\t<path d=\"M21 21l-4.35-4.35\" />\n\t\t\t\t\t</svg>\n\t\t\t\t\t<input\n\t\t\t\t\t\tv-show=\"searchVisible\"\n\t\t\t\t\t\tref=\"searchinput\"\n\t\t\t\t\t\tv-model=\"searchText\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tplaceholder=\"Search...\"\n\t\t\t\t\t\t@click.stop\n\t\t\t\t\t\t@input=\"handleSearchInput($event)\"\n\t\t\t\t\t\t@blur=\"handleSearch($event)\"\n\t\t\t\t\t\t@keydown.enter=\"handleSearch($event)\"\n\t\t\t\t\t\t@keydown.escape=\"toggleSearch\" />\n\t\t\t\t</a>\n\t\t\t</li>\n\t\t\t<li\n\t\t\t\tv-for=\"breadcrumb in breadcrumbs\"\n\t\t\t\t:key=\"breadcrumb.title\"\n\t\t\t\t:style=\"{ display: breadcrumbsVisibile ? 'block' : 'none' }\">\n\t\t\t\t<router-link tabindex=\"0\" :to=\"breadcrumb.to\"> {{ breadcrumb.title }} </router-link>\n\t\t\t</li>\n\t\t</ul>\n\t</footer>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, ref, useTemplateRef } from 'vue'\n\nconst { breadcrumbs = [] } = defineProps<{ breadcrumbs?: { title: string; to: string }[] }>()\n\nconst breadcrumbsVisibile = ref(true)\nconst searchVisible = ref(false)\nconst searchText = ref('')\nconst inputRef = useTemplateRef<HTMLInputElement>('searchinput')\n\nconst rotateHideTabIcon = computed(() => {\n\treturn breadcrumbsVisibile.value ? 'unrotated' : 'rotated'\n})\n\nconst toggleBreadcrumbs = () => {\n\tbreadcrumbsVisibile.value = !breadcrumbsVisibile.value\n}\n\nconst toggleSearch = async () => {\n\tsearchVisible.value = !searchVisible.value\n\tawait nextTick(() => {\n\t\tinputRef.value?.focus()\n\t})\n}\n\nconst handleSearchInput = (event: Event | MouseEvent) => {\n\tevent.preventDefault()\n\tevent.stopPropagation()\n}\n\nconst handleSearch = async (event: FocusEvent | KeyboardEvent) => {\n\tevent.preventDefault()\n\tevent.stopPropagation()\n\tawait toggleSearch()\n}\n\nconst navigateHome = (/* event: MouseEvent | KeyboardEvent */) => {\n\t// navigate home\n}\n</script>\n\n<style scoped>\nfooter {\n\tposition: fixed;\n\tbottom: 0px;\n\twidth: 100%;\n\tbackground-color: transparent;\n\theight: auto;\n\tmin-height: 2.4rem;\n\tz-index: 100;\n\ttext-align: left;\n\tfont-size: 100%;\n\tdisplay: flex;\n\tjustify-content: right;\n\tpadding: 0 0.75rem 0 0;\n\tbox-sizing: border-box;\n}\nul {\n\tdisplay: flex;\n\tflex-direction: row-reverse;\n\tmargin: 0;\n\tpadding: 0;\n\tlist-style: none;\n}\n\n.tabs li {\n\tfloat: left;\n\tlist-style-type: none;\n\tposition: relative;\n\tmargin-left: -1px;\n}\n\n/* Base tab styling */\n.tabs a {\n\tfloat: left;\n\tpadding: 0.5rem 1rem;\n\theight: 2.4rem;\n\tbox-sizing: border-box;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\ttext-decoration: none;\n\tcolor: var(--sc-gray-60, #666);\n\tbackground: var(--sc-btn-color, #ffffff);\n\tborder: 1px solid var(--sc-btn-border, #ccc);\n\tfont-size: 0.85rem;\n\tfont-family: var(--sc-font-family, system-ui, sans-serif);\n\ttransition: all 0.15s ease;\n\n\t/* Minimal ornamentation - subtle top radius only */\n\tborder-top-left-radius: 2px;\n\tborder-top-right-radius: 2px;\n}\n\n.tabs a:hover {\n\tbackground: var(--sc-btn-hover, #f2f2f2);\n}\n\n.tabs .router-link-active {\n\tz-index: 3;\n\tbackground: var(--sc-primary-color, #827553) !important;\n\tborder-color: var(--sc-primary-color, #827553) !important;\n\tcolor: var(--sc-primary-text-color, #fff) !important;\n}\n\n/* Pseudo-elements removed - minimal ornamentation style */\n\n/* Hide breadcrumbs tab */\n.hidebreadcrumbs a {\n\tmin-width: 2.4rem;\n\twidth: 2.4rem;\n\theight: 2.4rem;\n\tpadding: 0.5rem;\n\tbackground: var(--sc-btn-color, #ffffff);\n\tborder: 1px solid var(--sc-btn-border, #ccc);\n\tcolor: var(--sc-gray-60, #666);\n}\n\n.hidebreadcrumbs a div {\n\tfont-size: 1.2rem;\n}\n\n.rotated {\n\ttransform: rotate(45deg);\n\t-webkit-transform: rotate(45deg);\n\t-moz-transform: rotate(45deg);\n\t-ms-transform: rotate(45deg);\n\t-o-transform: rotate(45deg);\n\ttransition: transform 250ms ease;\n}\n.unrotated {\n\ttransform: rotate(0deg);\n\t-webkit-transform: rotate(0deg);\n\t-moz-transform: rotate(0deg);\n\t-ms-transform: rotate(0deg);\n\t-o-transform: rotate(0deg);\n\ttransition: transform 250ms ease;\n}\n\nli:active,\nli:hover,\nli:focus,\nli > a:active,\nli > a:hover,\nli > a:focus {\n\tz-index: 3;\n}\n\na:active,\na:hover,\na:focus {\n\toutline: 2px solid var(--sc-input-active-border-color, black);\n\tz-index: 3;\n}\n\n/* Home tab */\n.hometab a {\n\tmin-width: 2.4rem;\n\twidth: 2.4rem;\n\theight: 2.4rem;\n\tpadding: 0.5rem;\n\tbackground: var(--sc-btn-color, #ffffff);\n\tborder: 1px solid var(--sc-btn-border, #ccc);\n\tcolor: var(--sc-gray-60, #666);\n}\n\n/* SVG icon styling */\n.icon {\n\twidth: 1rem;\n\theight: 1rem;\n\tstroke: currentColor;\n\tflex-shrink: 0;\n}\n\n/* Search tab with animation */\n.searchtab {\n\toverflow: hidden;\n}\n\n.searchtab a {\n\tmin-width: 2.4rem;\n\theight: 2.4rem;\n\tpadding: 0.5rem;\n\tbackground: var(--sc-btn-color, #ffffff);\n\tborder: 1px solid var(--sc-btn-border, #ccc);\n\tcolor: var(--sc-gray-60, #666);\n\toverflow: hidden;\n\t/* Animation for smooth expand/collapse */\n\tmax-width: 2.4rem;\n\ttransition: max-width 0.35s ease-in-out, padding 0.35s ease-in-out, background 0.2s ease;\n}\n\n.searchtab .search-icon {\n\tcursor: pointer;\n}\n\n.searchtab input {\n\toutline: none;\n\tborder: 1px solid var(--sc-input-border-color, #ccc);\n\tborder-radius: 0.25rem;\n\tbackground-color: var(--sc-form-background, #ffffff);\n\tcolor: var(--sc-gray-80, #333);\n\ttext-align: left;\n\tfont-size: 0.875rem;\n\tpadding: 0.25rem 0.5rem;\n\twidth: 180px;\n\theight: 1.5rem;\n\tflex-shrink: 0;\n\topacity: 0;\n\ttransition: opacity 0.2s ease-in-out;\n\ttransition-delay: 0s;\n}\n\n.searchtab input:focus {\n\tborder-color: var(--sc-input-active-border-color, #4f46e5);\n\toutline: none;\n}\n\n.searchtab input::placeholder {\n\tcolor: var(--sc-input-label-color, #999);\n}\n\n/* Search active state - expanded with animation */\n.searchtab.search-active a {\n\tmax-width: 200px;\n\tmin-width: auto;\n\twidth: auto;\n\tpadding: 0.5rem 0.75rem;\n}\n\n.searchtab.search-active input {\n\topacity: 1;\n\ttransition-delay: 0.15s;\n}\n</style>\n","<template>\n\t<div class=\"desktop\" @click=\"handleClick\">\n\t\t<!-- Action Set -->\n\t\t<ActionSet :elements=\"actionElements\" @action-click=\"handleActionClick\" />\n\n\t\t<!-- Main content using AForm -->\n\t\t<AForm v-if=\"writableSchema.length > 0\" v-model=\"writableSchema\" :data=\"currentViewData\" />\n\t\t<div v-else-if=\"!stonecrop\" class=\"loading\"><p>Initializing Stonecrop...</p></div>\n\t\t<div v-else class=\"loading\">\n\t\t\t<p>Loading {{ currentView }} data...</p>\n\t\t</div>\n\n\t\t<!-- Sheet Navigation -->\n\t\t<SheetNav :breadcrumbs=\"navigationBreadcrumbs\" />\n\n\t\t<!-- Command Palette -->\n\t\t<CommandPalette\n\t\t\t:is-open=\"commandPaletteOpen\"\n\t\t\t:search=\"searchCommands\"\n\t\t\tplaceholder=\"Type a command or search...\"\n\t\t\t@select=\"executeCommand\"\n\t\t\t@close=\"commandPaletteOpen = false\">\n\t\t\t<template #title=\"{ result }\">\n\t\t\t\t{{ result.title }}\n\t\t\t</template>\n\t\t\t<template #content=\"{ result }\">\n\t\t\t\t{{ result.description }}\n\t\t\t</template>\n\t\t</CommandPalette>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useStonecrop } from '@stonecrop/stonecrop'\nimport { AForm, type SchemaTypes, type TableColumn, type TableConfig } from '@stonecrop/aform'\nimport { computed, nextTick, onMounted, provide, ref, unref, watch } from 'vue'\n\nimport ActionSet from './ActionSet.vue'\nimport SheetNav from './SheetNav.vue'\nimport CommandPalette from './CommandPalette.vue'\nimport type { ActionElements } from '../types'\n\nconst { availableDoctypes = [] } = defineProps<{ availableDoctypes?: string[] }>()\n\nconst { stonecrop } = useStonecrop()\n\n// State\nconst loading = ref(false)\nconst saving = ref(false)\nconst commandPaletteOpen = ref(false)\n\n// HST-based form data management - field triggers are handled automatically by HST\n\n// Computed property that reads from HST store for reactive form data\nconst currentViewData = computed<Record<string, any>>({\n\tget() {\n\t\tif (!stonecrop.value || !currentDoctype.value || !currentRecordId.value) {\n\t\t\treturn {}\n\t\t}\n\n\t\ttry {\n\t\t\tconst record = stonecrop.value.getRecordById(currentDoctype.value, currentRecordId.value)\n\t\t\treturn record?.get('') || {}\n\t\t} catch {\n\t\t\treturn {}\n\t\t}\n\t},\n\tset(newData: Record<string, any>) {\n\t\tif (!stonecrop.value || !currentDoctype.value || !currentRecordId.value) {\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\t// Update each field in HST, which will automatically trigger field actions\n\t\t\tconst hstStore = stonecrop.value.getStore()\n\t\t\tfor (const [fieldname, value] of Object.entries(newData)) {\n\t\t\t\tconst fieldPath = `${currentDoctype.value}.${currentRecordId.value}.${fieldname}`\n\t\t\t\thstStore.set(fieldPath, value)\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('HST update failed:', error)\n\t\t}\n\t},\n})\n\n// HST-based form data management - field triggers are handled automatically by HST\n\n// Computed properties for current route context\nconst route = computed(() => unref(stonecrop.value?.registry.router?.currentRoute))\nconst router = computed(() => stonecrop.value?.registry.router)\nconst currentDoctype = computed(() => {\n\tif (!route.value) return ''\n\n\t// First check if we have actualDoctype in meta (from registered routes)\n\tif (route.value.meta?.actualDoctype) {\n\t\treturn route.value.meta.actualDoctype as string\n\t}\n\n\t// For named routes, use params.doctype\n\tif (route.value.params.doctype) {\n\t\treturn route.value.params.doctype as string\n\t}\n\n\t// For catch-all routes that haven't been registered yet, extract from path\n\tconst pathMatch = route.value.params.pathMatch as string[] | undefined\n\tif (pathMatch && pathMatch.length > 0) {\n\t\treturn pathMatch[0]\n\t}\n\n\treturn ''\n})\n\n// The route doctype for display and navigation (e.g., 'todo')\nconst routeDoctype = computed(() => {\n\tif (!route.value) return ''\n\n\t// Check route meta first\n\tif (route.value.meta?.doctype) {\n\t\treturn route.value.meta.doctype as string\n\t}\n\n\t// For named routes, use params.doctype\n\tif (route.value.params.doctype) {\n\t\treturn route.value.params.doctype as string\n\t}\n\n\t// For catch-all routes, extract from path\n\tconst pathMatch = route.value.params.pathMatch as string[] | undefined\n\tif (pathMatch && pathMatch.length > 0) {\n\t\treturn pathMatch[0]\n\t}\n\n\treturn ''\n})\n\nconst currentRecordId = computed(() => {\n\tif (!route.value) return ''\n\n\t// For named routes, use params.recordId\n\tif (route.value.params.recordId) {\n\t\treturn route.value.params.recordId as string\n\t}\n\n\t// For catch-all routes that haven't been registered yet, extract from path\n\tconst pathMatch = route.value.params.pathMatch as string[] | undefined\n\tif (pathMatch && pathMatch.length > 1) {\n\t\treturn pathMatch[1]\n\t}\n\n\treturn ''\n})\nconst isNewRecord = computed(() => currentRecordId.value?.startsWith('new-'))\n\n// Determine current view based on route\nconst currentView = computed(() => {\n\tif (!route.value) {\n\t\treturn 'doctypes'\n\t}\n\n\t// Home route\n\tif (route.value.name === 'home' || route.value.path === '/') {\n\t\treturn 'doctypes'\n\t}\n\n\t// Named routes from registered doctypes\n\tif (route.value.name && route.value.name !== 'catch-all') {\n\t\tconst routeName = route.value.name as string\n\t\tif (routeName.includes('form') || route.value.params.recordId) {\n\t\t\treturn 'record'\n\t\t} else if (routeName.includes('list') || route.value.params.doctype) {\n\t\t\treturn 'records'\n\t\t}\n\t}\n\n\t// Catch-all route - determine from path structure\n\tconst pathMatch = route.value.params.pathMatch as string[] | undefined\n\tif (pathMatch && pathMatch.length > 0) {\n\t\tconst view = pathMatch.length === 1 ? 'records' : 'record'\n\t\treturn view\n\t}\n\n\treturn 'doctypes'\n})\n\n// Computed properties (now that all helper functions are defined)\n// Helper function to get available transitions for current record\nconst getAvailableTransitions = () => {\n\tif (!stonecrop.value || !currentDoctype.value || !currentRecordId.value) {\n\t\treturn []\n\t}\n\n\ttry {\n\t\tconst registry = stonecrop.value.registry\n\t\tconst meta = registry.registry[currentDoctype.value]\n\n\t\tif (!meta?.workflow?.states) {\n\t\t\treturn []\n\t\t}\n\n\t\t// Get current FSM state (for now, use workflow initial state or 'editing')\n\t\t// In a full implementation, this would track actual FSM state\n\t\tconst currentState = isNewRecord.value ? 'creating' : 'editing'\n\t\tconst stateConfig = meta.workflow.states[currentState]\n\n\t\tif (!stateConfig?.on) {\n\t\t\treturn []\n\t\t}\n\n\t\t// Get available transitions from current state\n\t\tconst transitions = Object.keys(stateConfig.on)\n\n\t\t// Create action elements for each transition\n\t\tconst actionElements = transitions.map(transition => {\n\t\t\tconst targetState = stateConfig.on?.[transition]\n\t\t\tconst targetStateName = typeof targetState === 'string' ? targetState : 'unknown'\n\n\t\t\tconst actionFn = async () => {\n\t\t\t\tconst node = stonecrop.value?.getRecordById(currentDoctype.value, currentRecordId.value)\n\t\t\t\tif (node) {\n\t\t\t\t\tconst recordData = currentViewData.value || {}\n\t\t\t\t\tawait node.triggerTransition(transition, {\n\t\t\t\t\t\tcurrentState,\n\t\t\t\t\t\ttargetState: targetStateName,\n\t\t\t\t\t\tfsmContext: recordData,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst element = {\n\t\t\t\tlabel: `${transition} (→ ${targetStateName})`,\n\t\t\t\taction: actionFn,\n\t\t\t}\n\n\t\t\treturn element\n\t\t})\n\n\t\treturn actionElements\n\t} catch (error) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn('Error getting available transitions:', error)\n\t\treturn []\n\t}\n}\n\n// New component reactive properties// New component reactive properties\nconst actionElements = computed<ActionElements[]>(() => {\n\tconst elements: ActionElements[] = []\n\n\tswitch (currentView.value) {\n\t\tcase 'doctypes':\n\t\t\telements.push({\n\t\t\t\ttype: 'button',\n\t\t\t\tlabel: 'Refresh',\n\t\t\t\taction: () => {\n\t\t\t\t\t// Refresh doctypes\n\t\t\t\t\twindow.location.reload()\n\t\t\t\t},\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'records':\n\t\t\telements.push(\n\t\t\t\t{\n\t\t\t\t\ttype: 'button',\n\t\t\t\t\tlabel: 'New Record',\n\t\t\t\t\taction: () => void createNewRecord(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: 'button',\n\t\t\t\t\tlabel: 'Refresh',\n\t\t\t\t\taction: () => {\n\t\t\t\t\t\t// Refresh records\n\t\t\t\t\t\twindow.location.reload()\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t)\n\t\t\tbreak\n\t\tcase 'record': {\n\t\t\t// Add XState Transitions dropdown for record view\n\t\t\tconst transitionActions = getAvailableTransitions()\n\t\t\tif (transitionActions.length > 0) {\n\t\t\t\telements.push({\n\t\t\t\t\ttype: 'dropdown',\n\t\t\t\t\tlabel: 'Actions',\n\t\t\t\t\tactions: transitionActions,\n\t\t\t\t})\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn elements\n})\n\nconst navigationBreadcrumbs = computed(() => {\n\tconst breadcrumbs: { title: string; to: string }[] = []\n\n\tif (currentView.value === 'records' && routeDoctype.value) {\n\t\tbreadcrumbs.push(\n\t\t\t{ title: 'Home', to: '/' },\n\t\t\t{ title: formatDoctypeName(routeDoctype.value), to: `/${routeDoctype.value}` }\n\t\t)\n\t} else if (currentView.value === 'record' && routeDoctype.value) {\n\t\tbreadcrumbs.push(\n\t\t\t{ title: 'Home', to: '/' },\n\t\t\t{ title: formatDoctypeName(routeDoctype.value), to: `/${routeDoctype.value}` },\n\t\t\t{ title: isNewRecord.value ? 'New Record' : 'Edit Record', to: route.value?.fullPath || '' }\n\t\t)\n\t}\n\n\treturn breadcrumbs\n})\n\n// Command palette functionality\ntype Command = {\n\ttitle: string\n\tdescription: string\n\taction: () => void\n}\n\nconst searchCommands = (query: string): Command[] => {\n\tconst commands: Command[] = [\n\t\t{\n\t\t\ttitle: 'Go Home',\n\t\t\tdescription: 'Navigate to the home page',\n\t\t\taction: () => void router.value?.push('/'),\n\t\t},\n\t\t{\n\t\t\ttitle: 'Toggle Command Palette',\n\t\t\tdescription: 'Open/close the command palette',\n\t\t\taction: () => (commandPaletteOpen.value = !commandPaletteOpen.value),\n\t\t},\n\t]\n\n\t// Add doctype-specific commands\n\tif (routeDoctype.value) {\n\t\tcommands.push({\n\t\t\ttitle: `View ${formatDoctypeName(routeDoctype.value)} Records`,\n\t\t\tdescription: `Navigate to ${routeDoctype.value} list`,\n\t\t\taction: () => void router.value?.push(`/${routeDoctype.value}`),\n\t\t})\n\n\t\tcommands.push({\n\t\t\ttitle: `Create New ${formatDoctypeName(routeDoctype.value)}`,\n\t\t\tdescription: `Create a new ${routeDoctype.value} record`,\n\t\t\taction: () => void createNewRecord(),\n\t\t})\n\t}\n\n\t// Add available doctypes as commands\n\tavailableDoctypes.forEach(doctype => {\n\t\tcommands.push({\n\t\t\ttitle: `View ${formatDoctypeName(doctype)}`,\n\t\t\tdescription: `Navigate to ${doctype} list`,\n\t\t\taction: () => void router.value?.push(`/${doctype}`),\n\t\t})\n\t})\n\n\t// Filter commands based on query\n\tif (!query) return commands\n\n\treturn commands.filter(\n\t\tcmd =>\n\t\t\tcmd.title.toLowerCase().includes(query.toLowerCase()) ||\n\t\t\tcmd.description.toLowerCase().includes(query.toLowerCase())\n\t)\n}\n\nconst executeCommand = (command: Command) => {\n\tcommand.action()\n\tcommandPaletteOpen.value = false\n}\n\n// Helper functions - moved here to avoid \"before initialization\" errors\nconst formatDoctypeName = (doctype: string): string => {\n\treturn doctype\n\t\t.split('-')\n\t\t.map(word => word.charAt(0).toUpperCase() + word.slice(1))\n\t\t.join(' ')\n}\n\nconst getRecordCount = (doctype: string): number => {\n\tif (!stonecrop.value) return 0\n\tconst recordIds = stonecrop.value.getRecordIds(doctype)\n\treturn recordIds.length\n}\n\nconst navigateToDoctype = async (doctype: string) => {\n\tawait router.value?.push(`/${doctype}`)\n}\n\nconst openRecord = async (recordId: string) => {\n\tawait router.value?.push(`/${routeDoctype.value}/${recordId}`)\n}\n\nconst createNewRecord = async () => {\n\tconst newId = `new-${Date.now()}`\n\tawait router.value?.push(`/${routeDoctype.value}/${newId}`)\n}\n\n// Doctype metadata loader - simplified since router handles most of this\nconst loadDoctypeMetadata = (doctype: string) => {\n\tif (!stonecrop.value) return\n\n\t// Ensure the doctype structure exists in HST\n\t// The router should have already loaded the metadata, but this ensures the HST structure exists\n\ttry {\n\t\tstonecrop.value.records(doctype)\n\t} catch (error) {\n\t\t// Silent error handling - structure will be created if needed\n\t}\n}\n\n// Schema generator functions - moved here to be available to computed properties\nconst getDoctypesSchema = (): SchemaTypes[] => {\n\tif (!availableDoctypes.length) return []\n\n\tconst rows = availableDoctypes.map(doctype => ({\n\t\tid: doctype,\n\t\tdoctype,\n\t\tdisplay_name: formatDoctypeName(doctype),\n\t\trecord_count: getRecordCount(doctype),\n\t\tactions: 'View Records',\n\t}))\n\n\treturn [\n\t\t{\n\t\t\tfieldname: 'header',\n\t\t\tcomponent: 'div',\n\t\t\tvalue: `\n\t\t\t\t<div class=\"view-header\">\n\t\t\t\t\t<h1>Available Doctypes</h1>\n\t\t\t\t</div>\n\t\t\t`,\n\t\t},\n\t\t{\n\t\t\tfieldname: 'doctypes_table',\n\t\t\tcomponent: 'ATable',\n\t\t\tcolumns: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Doctype',\n\t\t\t\t\tname: 'doctype',\n\t\t\t\t\tfieldtype: 'Data',\n\t\t\t\t\talign: 'left',\n\t\t\t\t\tedit: false,\n\t\t\t\t\twidth: '20ch',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Name',\n\t\t\t\t\tname: 'display_name',\n\t\t\t\t\tfieldtype: 'Data',\n\t\t\t\t\talign: 'left',\n\t\t\t\t\tedit: false,\n\t\t\t\t\twidth: '30ch',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Records',\n\t\t\t\t\tname: 'record_count',\n\t\t\t\t\tfieldtype: 'Int',\n\t\t\t\t\talign: 'center',\n\t\t\t\t\tedit: false,\n\t\t\t\t\twidth: '15ch',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Actions',\n\t\t\t\t\tname: 'actions',\n\t\t\t\t\tfieldtype: 'Data',\n\t\t\t\t\talign: 'center',\n\t\t\t\t\tedit: false,\n\t\t\t\t\twidth: '20ch',\n\t\t\t\t},\n\t\t\t] as TableColumn[],\n\t\t\tconfig: {\n\t\t\t\tview: 'list',\n\t\t\t\tfullWidth: true,\n\t\t\t} as TableConfig,\n\t\t\trows,\n\t\t},\n\t]\n}\n\nconst getRecordsSchema = (): SchemaTypes[] => {\n\tif (!currentDoctype.value) return []\n\tif (!stonecrop.value) return []\n\n\tconst records = getRecords()\n\tconst columns = getColumns()\n\n\t// If no columns are available, show a loading or empty state\n\tif (columns.length === 0) {\n\t\treturn [\n\t\t\t{\n\t\t\t\tfieldname: 'header',\n\t\t\t\tcomponent: 'div',\n\t\t\t\tvalue: `\n\t\t\t\t\t<div class=\"view-header\">\n\t\t\t\t\t\t<nav class=\"breadcrumbs\">\n\t\t\t\t\t\t\t<a href=\"/\">Home</a>\n\t\t\t\t\t\t\t<span class=\"separator\">/</span>\n\t\t\t\t\t\t\t<span class=\"current\">${formatDoctypeName(routeDoctype.value || currentDoctype.value)}</span>\n\t\t\t\t\t\t</nav>\n\t\t\t\t\t\t<h1>${formatDoctypeName(routeDoctype.value || currentDoctype.value)} Records</h1>\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tfieldname: 'loading',\n\t\t\t\tcomponent: 'div',\n\t\t\t\tvalue: `\n\t\t\t\t\t<div class=\"loading-state\">\n\t\t\t\t\t\t<p>Loading ${formatDoctypeName(routeDoctype.value || currentDoctype.value)} schema...</p>\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t},\n\t\t]\n\t}\n\n\tconst rows = records.map((record: any) => ({\n\t\t...record,\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\tid: record.id || '',\n\t\tactions: 'Edit | Delete',\n\t}))\n\n\treturn [\n\t\t{\n\t\t\tfieldname: 'header',\n\t\t\tcomponent: 'div',\n\t\t\tvalue: `\n\t\t\t\t<div class=\"view-header\">\n\t\t\t\t\t<nav class=\"breadcrumbs\">\n\t\t\t\t\t\t<a href=\"/\">Home</a>\n\t\t\t\t\t\t<span class=\"separator\">/</span>\n\t\t\t\t\t\t<span class=\"current\">${formatDoctypeName(routeDoctype.value || currentDoctype.value)}</span>\n\t\t\t\t\t</nav>\n\t\t\t\t\t<h1>${formatDoctypeName(routeDoctype.value || currentDoctype.value)} Records</h1>\n\t\t\t\t</div>\n\t\t\t`,\n\t\t},\n\t\t{\n\t\t\tfieldname: 'actions',\n\t\t\tcomponent: 'div',\n\t\t\tvalue: `\n\t\t\t\t<div class=\"view-actions\">\n\t\t\t\t\t<button class=\"btn-primary\" data-action=\"create\">\n\t\t\t\t\t\tNew ${formatDoctypeName(routeDoctype.value || currentDoctype.value)}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t`,\n\t\t},\n\t\t...(records.length === 0\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tfieldname: 'empty_state',\n\t\t\t\t\t\tcomponent: 'div',\n\t\t\t\t\t\tvalue: `\n\t\t\t\t\t\t\t<div class=\"empty-state\">\n\t\t\t\t\t\t\t\t<p>No ${routeDoctype.value || currentDoctype.value} records found.</p>\n\t\t\t\t\t\t\t\t<button class=\"btn-primary\" data-action=\"create\">\n\t\t\t\t\t\t\t\t\tCreate First Record\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`,\n\t\t\t\t\t},\n\t\t\t ]\n\t\t\t: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfieldname: 'records_table',\n\t\t\t\t\t\tcomponent: 'ATable',\n\t\t\t\t\t\tcolumns: [\n\t\t\t\t\t\t\t...columns.map(col => ({\n\t\t\t\t\t\t\t\tlabel: col.label,\n\t\t\t\t\t\t\t\tname: col.fieldname,\n\t\t\t\t\t\t\t\tfieldtype: col.fieldtype,\n\t\t\t\t\t\t\t\talign: 'left',\n\t\t\t\t\t\t\t\tedit: false,\n\t\t\t\t\t\t\t\twidth: '20ch',\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlabel: 'Actions',\n\t\t\t\t\t\t\t\tname: 'actions',\n\t\t\t\t\t\t\t\tfieldtype: 'Data',\n\t\t\t\t\t\t\t\talign: 'center',\n\t\t\t\t\t\t\t\tedit: false,\n\t\t\t\t\t\t\t\twidth: '20ch',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t] as TableColumn[],\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tview: 'list',\n\t\t\t\t\t\t\tfullWidth: true,\n\t\t\t\t\t\t} as TableConfig,\n\t\t\t\t\t\trows,\n\t\t\t\t\t},\n\t\t\t ]),\n\t]\n}\n\nconst getRecordFormSchema = (): SchemaTypes[] => {\n\tif (!currentDoctype.value) return []\n\tif (!stonecrop.value) return []\n\n\ttry {\n\t\tconst registry = stonecrop.value?.registry\n\t\tconst meta = registry?.registry[currentDoctype.value]\n\n\t\tif (!meta?.schema) {\n\t\t\t// Return loading state if schema isn't available yet\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tfieldname: 'header',\n\t\t\t\t\tcomponent: 'div',\n\t\t\t\t\tvalue: `\n\t\t\t\t\t\t<div class=\"view-header\">\n\t\t\t\t\t\t\t<nav class=\"breadcrumbs\">\n\t\t\t\t\t\t\t\t<a href=\"/\">Home</a>\n\t\t\t\t\t\t\t\t<span class=\"separator\">/</span>\n\t\t\t\t\t\t\t\t<a href=\"/${routeDoctype.value || currentDoctype.value}\">${formatDoctypeName(\n\t\t\t\t\t\trouteDoctype.value || currentDoctype.value\n\t\t\t\t\t)}</a>\n\t\t\t\t\t\t\t\t<span class=\"separator\">/</span>\n\t\t\t\t\t\t\t\t<span class=\"current\">${isNewRecord.value ? 'New Record' : currentRecordId.value}</span>\n\t\t\t\t\t\t\t</nav>\n\t\t\t\t\t\t\t<h1>${\n\t\t\t\t\t\t\t\tisNewRecord.value\n\t\t\t\t\t\t\t\t\t? `New ${formatDoctypeName(routeDoctype.value || currentDoctype.value)}`\n\t\t\t\t\t\t\t\t\t: `Edit ${formatDoctypeName(routeDoctype.value || currentDoctype.value)}`\n\t\t\t\t\t\t\t}</h1>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfieldname: 'loading',\n\t\t\t\t\tcomponent: 'div',\n\t\t\t\t\tvalue: `\n\t\t\t\t\t\t<div class=\"loading-state\">\n\t\t\t\t\t\t\t<p>Loading ${formatDoctypeName(routeDoctype.value || currentDoctype.value)} form...</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`,\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\n\t\tconst schemaArray = 'toArray' in meta.schema ? meta.schema.toArray() : meta.schema\n\t\tconst currentRecord = getCurrentRecord()\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tfieldname: 'header',\n\t\t\t\tcomponent: 'div',\n\t\t\t\tvalue: `\n\t\t\t\t\t<div class=\"view-header\">\n\t\t\t\t\t\t<nav class=\"breadcrumbs\">\n\t\t\t\t\t\t\t<a href=\"/\">Home</a>\n\t\t\t\t\t\t\t<span class=\"separator\">/</span>\n\t\t\t\t\t\t\t<a href=\"/${routeDoctype.value || currentDoctype.value}\">${formatDoctypeName(\n\t\t\t\t\trouteDoctype.value || currentDoctype.value\n\t\t\t\t)}</a>\n\t\t\t\t\t\t\t<span class=\"separator\">/</span>\n\t\t\t\t\t\t\t<span class=\"current\">${isNewRecord.value ? 'New Record' : currentRecordId.value}</span>\n\t\t\t\t\t\t</nav>\n\t\t\t\t\t\t<h1>\n\t\t\t\t\t\t\t${\n\t\t\t\t\t\t\t\tisNewRecord.value\n\t\t\t\t\t\t\t\t\t? `New ${formatDoctypeName(routeDoctype.value || currentDoctype.value)}`\n\t\t\t\t\t\t\t\t\t: `Edit ${formatDoctypeName(routeDoctype.value || currentDoctype.value)}`\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</h1>\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t},\n\t\t\t{\n\t\t\t\tfieldname: 'actions',\n\t\t\t\tcomponent: 'div',\n\t\t\t\tvalue: `\n\t\t\t\t\t<div class=\"view-actions\">\n\t\t\t\t\t\t<button class=\"btn-primary\" data-action=\"save\" ${saving.value ? 'disabled' : ''}>\n\t\t\t\t\t\t\t${saving.value ? 'Saving...' : 'Save'}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button class=\"btn-secondary\" data-action=\"cancel\">Cancel</button>\n\t\t\t\t\t\t${!isNewRecord.value ? '<button class=\"btn-danger\" data-action=\"delete\">Delete</button>' : ''}\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t},\n\t\t\t...schemaArray.map(field => ({\n\t\t\t\t...field,\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tvalue: currentRecord[field.fieldname] || '',\n\t\t\t})),\n\t\t]\n\t} catch (error) {\n\t\treturn [\n\t\t\t{\n\t\t\t\tfieldname: 'error',\n\t\t\t\tcomponent: 'div',\n\t\t\t\tvalue: `\n\t\t\t\t\t<div class=\"error-state\">\n\t\t\t\t\t\t<p>Unable to load form schema for ${formatDoctypeName(routeDoctype.value || currentDoctype.value)}</p>\n\t\t\t\t\t</div>\n\t\t\t\t`,\n\t\t\t},\n\t\t]\n\t}\n}\n\n// Additional data helper functions\nconst getRecords = () => {\n\tif (!stonecrop.value || !currentDoctype.value) {\n\t\treturn []\n\t}\n\n\tconst recordsNode = stonecrop.value.records(currentDoctype.value)\n\tconst recordsData = recordsNode?.get('')\n\n\tif (recordsData && typeof recordsData === 'object' && !Array.isArray(recordsData)) {\n\t\treturn Object.values(recordsData as Record<string, any>)\n\t}\n\n\treturn []\n}\n\nconst getColumns = () => {\n\tif (!stonecrop.value || !currentDoctype.value) return []\n\n\ttry {\n\t\tconst registry = stonecrop.value.registry\n\t\tconst meta = registry.registry[currentDoctype.value]\n\n\t\tif (meta?.schema) {\n\t\t\tconst schemaArray = 'toArray' in meta.schema ? meta.schema.toArray() : meta.schema\n\t\t\treturn schemaArray.map(field => ({\n\t\t\t\tfieldname: field.fieldname,\n\t\t\t\tlabel: ('label' in field && field.label) || field.fieldname,\n\t\t\t\tfieldtype: ('fieldtype' in field && field.fieldtype) || 'Data',\n\t\t\t}))\n\t\t}\n\t} catch (error) {\n\t\t// Error getting schema - return empty array\n\t}\n\n\treturn []\n}\n\nconst getCurrentRecord = () => {\n\tif (!stonecrop.value || !currentDoctype.value || isNewRecord.value) return {}\n\n\tconst record = stonecrop.value.getRecordById(currentDoctype.value, currentRecordId.value)\n\treturn record?.get('') || {}\n}\n\n// Schema for different views - defined here after all helper functions are available\nconst currentViewSchema = computed<SchemaTypes[]>(() => {\n\tswitch (currentView.value) {\n\t\tcase 'doctypes':\n\t\t\treturn getDoctypesSchema()\n\t\tcase 'records':\n\t\t\treturn getRecordsSchema()\n\t\tcase 'record':\n\t\t\treturn getRecordFormSchema()\n\t\tdefault:\n\t\t\treturn []\n\t}\n})\n\n// Writable schema for AForm v-model binding\nconst writableSchema = ref<SchemaTypes[]>([])\n\n// Sync computed schema to writable schema when it changes\nwatch(\n\tcurrentViewSchema,\n\tnewSchema => {\n\t\twritableSchema.value = [...newSchema]\n\t},\n\t{ immediate: true, deep: true }\n)\n\n// Watch for field changes in writable schema and sync to HST\nwatch(\n\twritableSchema,\n\tnewSchema => {\n\t\tif (!stonecrop.value || !currentDoctype.value || !currentRecordId.value || isNewRecord.value) {\n\t\t\treturn\n\t\t}\n\n\t\ttry {\n\t\t\tconst hstStore = stonecrop.value.getStore()\n\n\t\t\t// Process form field updates from schema\n\t\t\tnewSchema.forEach(field => {\n\t\t\t\t// Only process fields that have a fieldname and value (form fields)\n\t\t\t\tif (\n\t\t\t\t\tfield.fieldname &&\n\t\t\t\t\t'value' in field &&\n\t\t\t\t\t!['header', 'actions', 'loading', 'error'].includes(field.fieldname)\n\t\t\t\t) {\n\t\t\t\t\tconst fieldPath = `${currentDoctype.value}.${currentRecordId.value}.${field.fieldname}`\n\t\t\t\t\tconst currentValue = hstStore.has(fieldPath) ? hstStore.get(fieldPath) : undefined\n\n\t\t\t\t\t// Only update if value actually changed to avoid infinite loops\n\t\t\t\t\tif (currentValue !== field.value) {\n\t\t\t\t\t\thstStore.set(fieldPath, field.value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('HST schema sync failed:', error)\n\t\t}\n\t},\n\t{ deep: true }\n)\n\n// Action handlers (will be triggered by button clicks in the UI)\nconst handleSave = async () => {\n\t// eslint-disable-next-line no-console\n\tif (!stonecrop.value) return\n\n\tsaving.value = true\n\n\ttry {\n\t\tconst formData = currentViewData.value || {}\n\n\t\tif (isNewRecord.value) {\n\t\t\tconst newId = `record-${Date.now()}`\n\t\t\tconst recordData = { id: newId, ...formData }\n\n\t\t\tstonecrop.value.addRecord(currentDoctype.value, newId, recordData)\n\n\t\t\t// Trigger SAVE transition for new record\n\t\t\tconst node = stonecrop.value.getRecordById(currentDoctype.value, newId)\n\t\t\tif (node) {\n\t\t\t\tawait node.triggerTransition('SAVE', {\n\t\t\t\t\tcurrentState: 'creating',\n\t\t\t\t\ttargetState: 'saved',\n\t\t\t\t\tfsmContext: recordData,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tawait router.value?.replace(`/${routeDoctype.value}/${newId}`)\n\t\t} else {\n\t\t\tconst recordData = { id: currentRecordId.value, ...formData }\n\t\t\tstonecrop.value.addRecord(currentDoctype.value, currentRecordId.value, recordData)\n\n\t\t\t// Trigger SAVE transition for existing record\n\t\t\tconst node = stonecrop.value.getRecordById(currentDoctype.value, currentRecordId.value)\n\t\t\tif (node) {\n\t\t\t\tawait node.triggerTransition('SAVE', {\n\t\t\t\t\tcurrentState: 'editing',\n\t\t\t\t\ttargetState: 'saved',\n\t\t\t\t\tfsmContext: recordData,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\t// Silently handle error\n\t} finally {\n\t\tsaving.value = false\n\t}\n}\n\nconst handleCancel = async () => {\n\tif (isNewRecord.value) {\n\t\t// For new records, we don't have a specific record node yet\n\t\t// Just navigate back without triggering transition\n\t\tawait router.value?.push(`/${routeDoctype.value}`)\n\t} else {\n\t\t// Trigger CANCEL transition for existing record\n\t\tif (stonecrop.value) {\n\t\t\tconst node = stonecrop.value.getRecordById(currentDoctype.value, currentRecordId.value)\n\t\t\tif (node) {\n\t\t\t\tawait node.triggerTransition('CANCEL', {\n\t\t\t\t\tcurrentState: 'editing',\n\t\t\t\t\ttargetState: 'cancelled',\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\t// Reload current record data\n\t\tloadRecordData()\n\t}\n}\n\nconst handleActionClick = (label: string, action: (() => void | Promise<void>) | undefined) => {\n\t// eslint-disable-next-line no-console\n\tif (action) {\n\t\tvoid action()\n\t}\n}\n\nconst handleDelete = async (recordId?: string) => {\n\tif (!stonecrop.value) return\n\n\tconst targetRecordId = recordId || currentRecordId.value\n\tif (!targetRecordId) return\n\n\tif (confirm('Are you sure you want to delete this record?')) {\n\t\t// Trigger DELETE transition before removing\n\t\tconst node = stonecrop.value.getRecordById(currentDoctype.value, targetRecordId)\n\t\tif (node) {\n\t\t\tawait node.triggerTransition('DELETE', {\n\t\t\t\tcurrentState: 'editing',\n\t\t\t\ttargetState: 'deleted',\n\t\t\t})\n\t\t}\n\n\t\tstonecrop.value.removeRecord(currentDoctype.value, targetRecordId)\n\n\t\tif (currentView.value === 'record') {\n\t\t\tawait router.value?.push(`/${routeDoctype.value}`)\n\t\t}\n\t}\n}\n\n// Event handlers\nconst handleClick = async (event: Event) => {\n\tconst target = event.target as HTMLElement\n\tconst action = target.getAttribute('data-action')\n\n\tif (action) {\n\t\tswitch (action) {\n\t\t\tcase 'create':\n\t\t\t\tawait createNewRecord()\n\t\t\t\tbreak\n\t\t\tcase 'save':\n\t\t\t\tawait handleSave()\n\t\t\t\tbreak\n\t\t\tcase 'cancel':\n\t\t\t\tawait handleCancel()\n\t\t\t\tbreak\n\t\t\tcase 'delete':\n\t\t\t\tawait handleDelete()\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\t// Handle table cell clicks for actions\n\tconst cell = target.closest('td, th')\n\tif (cell) {\n\t\tconst cellText = cell.textContent?.trim()\n\t\tconst row = cell.closest('tr')\n\n\t\tif (cellText === 'View Records' && row) {\n\t\t\t// Get the doctype from the row data\n\t\t\tconst cells = row.querySelectorAll('td')\n\t\t\tif (cells.length > 0) {\n\t\t\t\tconst doctypeCell = cells[1] // Assuming doctype is in second column (first column is index)\n\t\t\t\tconst doctype = doctypeCell.textContent?.trim()\n\t\t\t\tif (doctype) {\n\t\t\t\t\tawait navigateToDoctype(doctype)\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (cellText?.includes('Edit') && row) {\n\t\t\t// Get the record ID from the row\n\t\t\tconst cells = row.querySelectorAll('td')\n\t\t\tif (cells.length > 0) {\n\t\t\t\tconst idCell = cells[0] // Assuming ID is in first column\n\t\t\t\tconst recordId = idCell.textContent?.trim()\n\t\t\t\tif (recordId) {\n\t\t\t\t\tawait openRecord(recordId)\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (cellText?.includes('Delete') && row) {\n\t\t\t// Get the record ID from the row\n\t\t\tconst cells = row.querySelectorAll('td')\n\t\t\tif (cells.length > 0) {\n\t\t\t\tconst idCell = cells[0] // Assuming ID is in first column\n\t\t\t\tconst recordId = idCell.textContent?.trim()\n\t\t\t\tif (recordId) {\n\t\t\t\t\tawait handleDelete(recordId)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Watch for route changes to load appropriate data\nwatch(\n\t[currentView, currentDoctype, currentRecordId],\n\t() => {\n\t\tif (currentView.value === 'record') {\n\t\t\tloadRecordData()\n\t\t}\n\t},\n\t{ immediate: true }\n)\n\n// Watch for Stonecrop instance to become available\nwatch(\n\tstonecrop,\n\tnewStonecrop => {\n\t\tif (newStonecrop) {\n\t\t\t// Force a re-evaluation of the current view schema when Stonecrop becomes available\n\t\t\t// This is handled automatically by the reactive computed properties\n\t\t}\n\t},\n\t{ immediate: true }\n)\n\n// Watch for when we need to load data for records view\nwatch(\n\t[currentView, currentDoctype, stonecrop],\n\t([view, doctype, stonecropInstance]) => {\n\t\tif (view === 'records' && doctype && stonecropInstance) {\n\t\t\t// Ensure doctype metadata is loaded\n\t\t\tloadDoctypeMetadata(doctype)\n\t\t}\n\t},\n\t{ immediate: true }\n)\n\nconst loadRecordData = () => {\n\tif (!stonecrop.value || !currentDoctype.value) return\n\n\tloading.value = true\n\n\ttry {\n\t\tif (!isNewRecord.value) {\n\t\t\t// For existing records, ensure the record exists in HST\n\t\t\t// The computed currentViewData will automatically read from HST\n\t\t\tstonecrop.value.getRecordById(currentDoctype.value, currentRecordId.value)\n\t\t}\n\t\t// For new records, currentViewData computed property will return {} automatically\n\t} catch (error) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn('Error loading record data:', error)\n\t} finally {\n\t\tloading.value = false\n\t}\n}\n\n// Provide methods for action components\nconst desktopMethods = {\n\tnavigateToDoctype,\n\topenRecord,\n\tcreateNewRecord,\n\thandleSave,\n\thandleCancel,\n\thandleDelete,\n}\n\nprovide('desktopMethods', desktopMethods)\n\n// Register action components in Vue app\nonMounted(() => {\n\t// Wait a tick for stonecrop to be ready, then load initial data\n\tvoid nextTick(() => {\n\t\tif (currentView.value === 'records' && currentDoctype.value && stonecrop.value) {\n\t\t\tloadDoctypeMetadata(currentDoctype.value)\n\t\t}\n\t})\n\n\t// Components will be automatically registered via the global component system\n\n\t// Add keyboard shortcuts\n\tconst handleKeydown = (event: KeyboardEvent) => {\n\t\t// Ctrl+K or Cmd+K to open command palette\n\t\tif ((event.ctrlKey || event.metaKey) && event.key === 'k') {\n\t\t\tevent.preventDefault()\n\t\t\tcommandPaletteOpen.value = true\n\t\t}\n\t\t// Escape to close command palette\n\t\tif (event.key === 'Escape' && commandPaletteOpen.value) {\n\t\t\tcommandPaletteOpen.value = false\n\t\t}\n\t}\n\n\tdocument.addEventListener('keydown', handleKeydown)\n\n\t// Cleanup event listener on unmount\n\treturn () => {\n\t\tdocument.removeEventListener('keydown', handleKeydown)\n\t}\n})\n</script>\n","import { App, type Plugin } from 'vue'\n\nimport ActionSet from '../components/ActionSet.vue'\nimport CommandPalette from '../components/CommandPalette.vue'\nimport Desktop from '../components/Desktop.vue'\nimport SheetNav from '../components/SheetNav.vue'\n\n/**\n * This is the main plugin that will be used to register all the desktop components.\n * @public\n */\nconst plugin: Plugin = {\n\tinstall: (app: App) => {\n\t\tapp.component('ActionSet', ActionSet)\n\t\tapp.component('CommandPalette', CommandPalette)\n\t\tapp.component('Desktop', Desktop)\n\t\tapp.component('SheetNav', SheetNav)\n\t},\n}\n\nexport default plugin\n"],"names":["emit","__emit","dropdownStates","ref","isOpen","timeoutId","hover","closeClicked","onMounted","closeDropdowns","onHover","onHoverLeave","toggleDropdown","index","showDropdown","handleClick","action","label","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_1","_cache","$event","_openBlock","_Fragment","_renderList","__props","el","_toDisplayString","_hoisted_2","_hoisted_3","_hoisted_4","_withDirectives","_hoisted_5","_hoisted_6","item","itemIndex","_hoisted_7","_hoisted_9","_vShow","query","selectedIndex","inputRef","useTemplateRef","results","computed","watch","nextTick","closeModal","handleKeydown","e","selectResult","result","_createBlock","_Teleport","_createVNode","_Transition","_renderSlot","_ctx","te","G","me","n","Pe","Y","le","He","t","r","o","se","be","ze","Te","Xe","et","ee","Ie","Ee","Ne","ot","Ce","ke","s","i","a","c","f","g","$e","B","b","A","ae","W","$","_e","d","v","k","x","N","D","p","R","de","P","F","S","C","w","T","L","m","y","E","O","_","U","ye","Ye","ce","Fe","it","Ae","oe","Me","Ue","at","ct","lt","Je","ut","je","tt","ft","qe","dt","Oe","pt","ht","gt","vt","yt","Be","mt","Q","St","q","re","rt","he","ge","bt","wt","Et","Ot","Rt","Le","At","We","j","M","Pt","Re","ve","$t","pe","u","l","h","I","V","H","ue","K","Ve","ne","Se","Dt","Ke","Wt","J","xe","Z","X","we","Qe","Tt","De","Ze","Kn","un","xt","ro","Uo","wn","Gl","Ct","Mt","Jl","Ql","Ha","_a","Va","Oa","cn","ie","z","In","breadcrumbsVisibile","searchVisible","searchText","rotateHideTabIcon","toggleBreadcrumbs","toggleSearch","handleSearchInput","event","handleSearch","navigateHome","_component_router_link","_withKeys","breadcrumb","_createTextVNode","stonecrop","useStonecrop","loading","saving","commandPaletteOpen","currentViewData","currentDoctype","currentRecordId","newData","hstStore","fieldname","value","fieldPath","error","route","unref","router","pathMatch","routeDoctype","isNewRecord","currentView","routeName","getAvailableTransitions","meta","currentState","stateConfig","transition","targetState","targetStateName","actionFn","node","recordData","actionElements","elements","createNewRecord","transitionActions","navigationBreadcrumbs","breadcrumbs","formatDoctypeName","searchCommands","commands","doctype","cmd","executeCommand","command","word","getRecordCount","navigateToDoctype","openRecord","recordId","newId","loadDoctypeMetadata","getDoctypesSchema","rows","getRecordsSchema","records","getRecords","columns","getColumns","record","col","getRecordFormSchema","schemaArray","currentRecord","getCurrentRecord","field","recordsData","currentViewSchema","writableSchema","newSchema","handleSave","formData","handleCancel","loadRecordData","handleActionClick","handleDelete","targetRecordId","target","cell","cellText","row","cells","newStonecrop","view","stonecropInstance","desktopMethods","provide","ActionSet","_unref","AForm","SheetNav","CommandPalette","_withCtx","plugin","app","Desktop"],"mappings":"kkBAyEA,MAAMA,EAAOC,EAKPC,EAAiBC,EAAAA,IAA6B,EAAE,EAEhDC,EAASD,EAAAA,IAAI,EAAK,EAClBE,EAAYF,EAAAA,IAAY,EAAE,EAC1BG,EAAQH,EAAAA,IAAI,EAAK,EACjBI,EAAeJ,EAAAA,IAAI,EAAK,EAE9BK,EAAAA,UAAU,IAAM,CACfC,EAAA,CACD,CAAC,EAED,MAAMA,EAAiB,IAAM,CAC5BP,EAAe,MAAQ,CAAA,CACxB,EAEMQ,EAAU,IAAM,CACrBJ,EAAM,MAAQ,GACdD,EAAU,MAAQ,WAAW,IAAM,CAC9BC,EAAM,QACTF,EAAO,MAAQ,GAEjB,EAAG,GAAG,CACP,EAEMO,EAAe,IAAM,CAC1BL,EAAM,MAAQ,GACdC,EAAa,MAAQ,GACrB,aAAaF,EAAU,KAAK,EAC5BD,EAAO,MAAQ,EAChB,EAEMQ,EAAkBC,GAAkB,CACzC,MAAMC,EAAe,CAACZ,EAAe,MAAMW,CAAK,EAChDJ,EAAA,EACIK,IACHZ,EAAe,MAAMW,CAAK,EAAI,GAEhC,EAEME,EAAc,CAACC,EAAkDC,IAAkB,CAExFjB,EAAK,cAAeiB,EAAOD,CAAM,CAClC,8BAvHCE,EAAAA,mBA+DM,MAAA,CA9DJ,MAAKC,EAAAA,eAAA,CAAA,CAAA,WAAgBf,EAAA,MAAM,qBAAwBG,EAAA,KAAA,EAC9C,qBAAqB,CAAA,EAC1B,YAAWG,EACX,aAAYC,CAAA,GACbS,EAAAA,mBAgCM,MAhCNC,GAgCM,CA/BLD,EAAAA,mBA8BM,MAAA,CA9BD,GAAG,UAAW,QAAKE,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEhB,EAAA,MAAY,CAAIA,EAAA,MAAA,mBACzCa,EAAAA,mBAaM,MAAA,CAZL,GAAG,UACH,MAAM,UACN,QAAQ,MACR,MAAM,6BACN,cAAY,+BACZ,EAAE,MACF,EAAE,MACF,QAAQ,cACR,YAAU,WACV,MAAM,KACN,OAAO,IAAA,GACPA,EAAAA,mBAAyD,UAAA,CAAhD,OAAO,uCAAsC,CAAA,MAGvDA,EAAAA,mBAaM,MAAA,CAZL,GAAG,UACH,MAAM,WACN,QAAQ,MACR,MAAM,6BACN,cAAY,+BACZ,EAAE,MACF,EAAE,MACF,QAAQ,cACR,YAAU,WACV,MAAM,KACN,OAAO,IAAA,GACPA,EAAAA,mBAAyD,UAAA,CAAhD,OAAO,uCAAsC,CAAA,wBAIzDA,EAAAA,mBAAsC,MAAA,CAAjC,MAAA,CAAA,eAAA,MAAA,CAAA,EAA0B,KAAA,EAAA,IAC/BI,EAAAA,UAAA,EAAA,EAAAN,EAAAA,mBAuBMO,WAAA,KAAAC,EAAAA,WAvBqBC,EAAA,SAAQ,CAAtBC,EAAIf,mBAAjBK,EAAAA,mBAuBM,MAAA,CAvBgC,IAAKU,EAAG,MAAO,MAAM,gBAAA,GAEnDA,EAAG,MAAI,wBADdV,EAAAA,mBAMS,SAAA,OAJP,SAAUU,EAAG,SACd,MAAM,iBACL,QAAKL,GAAER,EAAYa,EAAG,OAAQA,EAAG,KAAK,CAAA,EACpCC,EAAAA,gBAAAD,EAAG,KAAK,EAAA,EAAAE,EAAA,+BAEDF,EAAG,MAAI,0BAAlBV,EAAAA,mBAcM,MAAAa,GAAA,CAbLX,EAAAA,mBAAqF,SAAA,CAA7E,MAAM,iBAAkB,QAAKG,GAAEX,EAAeC,CAAK,CAAA,EAAMgB,EAAAA,gBAAAD,EAAG,KAAK,EAAA,EAAAI,EAAA,EACzEC,iBAAAb,EAAAA,mBAWM,MAXNc,GAWM,CAVLd,EAAAA,mBASM,MATNe,GASM,EARLX,EAAAA,UAAA,EAAA,EAAAN,EAAAA,mBAOMO,6BAP2BG,EAAG,QAAO,CAA9BQ,EAAMC,mBAAnBnB,EAAAA,mBAOM,MAAA,CAPwC,IAAKkB,EAAK,KAAA,GACzCA,EAAK,QAAM,oBAAzBlB,EAAAA,mBAES,SAAA,OAF0B,MAAM,gBAAiB,QAAKK,GAAER,EAAYqB,EAAK,OAAQA,EAAK,KAAK,CAAA,EAChGP,EAAAA,gBAAAO,EAAK,KAAK,EAAA,EAAAE,EAAA,GAEAF,EAAK,MAAI,oBAAvBlB,EAAAA,mBAEC,IAAA,OAFiC,KAAMkB,EAAK,IAAA,GAC3ChB,EAAAA,mBAAuD,SAAvDmB,GAAuDV,EAAAA,gBAAtBO,EAAK,KAAK,EAAA,CAAA,CAAA,wDAPnC,CAAAI,QAAAtC,EAAA,MAAeW,CAAK,CAAA,CAAA,+mBCYrC,MAAMb,EAAOC,EAKPwC,EAAQtC,EAAAA,IAAI,EAAE,EACduC,EAAgBvC,EAAAA,IAAI,CAAC,EACrBwC,EAAWC,EAAAA,eAAe,OAAO,EAEjCC,EAAUC,EAAAA,SAAS,IACnBL,EAAM,MACKd,EAAA,OAAOc,EAAM,KAAK,EACnB,MAAM,EAAGd,EAAA,UAAU,EAFT,CAAA,CAGzB,EAGDoB,EAAAA,MACC,IAAMpB,EAAA,OACN,MAAMvB,GAAU,CACXA,IACHqC,EAAM,MAAQ,GACdC,EAAc,MAAQ,EACtB,MAAMM,WAAA,EACJL,EAAS,OAA4B,MAAA,EAEzC,CAAA,EAIDI,EAAAA,MAAMF,EAAS,IAAM,CACpBH,EAAc,MAAQ,CACvB,CAAC,EAED,MAAMO,EAAa,IAAM,CACxBjD,EAAK,OAAO,CACb,EAEMkD,EAAiBC,GAAqB,CAC3C,OAAQA,EAAE,IAAA,CACT,IAAK,SACJF,EAAA,EACA,MACD,IAAK,YACJE,EAAE,eAAA,EACEN,EAAQ,MAAM,SACjBH,EAAc,OAASA,EAAc,MAAQ,GAAKG,EAAQ,MAAM,QAEjE,MACD,IAAK,UACJM,EAAE,eAAA,EACEN,EAAQ,MAAM,SACjBH,EAAc,OAASA,EAAc,MAAQ,EAAIG,EAAQ,MAAM,QAAUA,EAAQ,MAAM,QAExF,MACD,IAAK,QACAA,EAAQ,MAAM,QAAUH,EAAc,OAAS,GAClDU,EAAaP,EAAQ,MAAMH,EAAc,KAAK,CAAC,EAEhD,KAAA,CAEH,EAEMU,EAAgBC,GAAc,CACnCrD,EAAK,SAAUqD,CAAM,EACrBJ,EAAA,CACD,8BA9HCK,EAAAA,YAqCWC,EAAAA,SAAA,CArCD,GAAG,QAAM,CAClBC,EAAAA,YAmCaC,EAAAA,WAAA,CAnCD,KAAK,QAAM,mBACtB,IAiCM,CAjCK9B,EAAA,sBAAXT,EAAAA,mBAiCM,MAAA,OAjCa,MAAM,0BAA2B,QAAO+B,CAAA,GAC1D7B,EAAAA,mBA+BM,MAAA,CA/BD,MAAM,kBAAmB,oCAAD,IAAA,CAAA,EAAW,CAAA,MAAA,CAAA,EAAA,GACvCA,EAAAA,mBASM,MATNC,GASM,kBARLD,EAAAA,mBAO4B,QAAA,CAN3B,IAAI,6CACKqB,EAAK,MAAAlB,GACd,KAAK,OACL,MAAM,wBACL,YAAaI,EAAA,YACd,UAAA,GACC,UAASuB,CAAA,6BALDT,EAAA,KAAK,CAAA,KAQLI,EAAA,MAAQ,QAAnBrB,EAAAA,YAAAN,EAAAA,mBAeM,MAfNa,GAeM,EAdLP,EAAAA,UAAA,EAAA,EAAAN,EAAAA,mBAaMO,WAAA,KAAAC,EAAAA,WAZqBmB,EAAA,MAAO,CAAzBQ,EAAQxC,mBADjBK,EAAAA,mBAaM,MAAA,CAXJ,IAAKL,EACN,MAAKM,EAAAA,eAAA,CAAC,yBAAwB,CAAA,SACVN,IAAU6B,EAAA,KAAA,CAAa,CAAA,EAC1C,QAAKnB,GAAE6B,EAAaC,CAAM,EAC1B,YAAS9B,GAAEmB,EAAA,MAAgB7B,CAAA,GAC5BO,EAAAA,mBAEM,MAFNc,GAEM,CADLwB,EAAAA,WAAsCC,EAAA,OAAA,QAAA,CAAlB,OAAAN,EAAc,CAAA,GAEnCjC,EAAAA,mBAEM,MAFNe,GAEM,CADLuB,EAAAA,WAAwCC,EAAA,OAAA,UAAA,CAAlB,OAAAN,EAAc,CAAA,sBAIvBZ,EAAA,OAAK,CAAKI,EAAA,MAAQ,QAAlCrB,YAAA,EAAAN,qBAEM,MAFNoB,GAEM,CADLoB,EAAAA,WAA8DC,oBAA9D,IAA8D,mBAA3C,0BAAuB9B,EAAAA,gBAAGY,EAAA,KAAK,EAAG,KAAE,CAAA,CAAA,iFChCvDmB,GAAK,OAAO,OAAS,IAC3B,IAAIC,GACJ,MAAMC,GAAMC,GAAMF,GAAIE,EACtB,QAAQ,IAAI,SACZ,MAAMC,GAAK,QAAQ,IAAI,WAAa,aAA+B,OAAO,OAAO,EAE/D,OAAM,EAExB,SAASC,EAAEF,EAAG,CACZ,OAAOA,GAAK,OAAOA,GAAK,UAAY,OAAO,UAAU,SAAS,KAAKA,CAAC,IAAM,mBAAqB,OAAOA,EAAE,QAAU,UACpH,CACA,IAAIG,IACH,SAASH,EAAG,CACXA,EAAE,OAAS,SAAUA,EAAE,YAAc,eAAgBA,EAAE,cAAgB,gBACzE,GAAGG,KAAOA,GAAK,CAAA,EAAG,EAClB,SAASC,GAAGJ,EAAG,EAAG,CAChB,UAAWK,KAAK,EAAG,CACjB,MAAMC,EAAI,EAAED,CAAC,EACb,GAAI,EAAEA,KAAKL,GACT,SACF,MAAMO,EAAIP,EAAEK,CAAC,EACbH,EAAEK,CAAC,GAAKL,EAAEI,CAAC,GAAK,CAACE,EAAAA,MAAGF,CAAC,GAAK,CAACG,EAAAA,WAAGH,CAAC,EAAIN,EAAEK,CAAC,EAAID,GAAGG,EAAGD,CAAC,EAAIN,EAAEK,CAAC,EAAIC,CAC9D,CACA,OAAON,CACT,CACA,MAAMU,GAAK,IAAM,CACjB,EACA,SAASC,GAAGX,EAAG,EAAGK,EAAGC,EAAII,GAAI,CAC3BV,EAAE,IAAI,CAAC,EACP,MAAMO,EAAI,IAAM,CACdP,EAAE,OAAO,CAAC,GAAKM,EAAC,CAClB,EACA,MAAO,CAACD,GAAKO,EAAAA,gBAAE,GAAMC,EAAAA,eAAGN,CAAC,EAAGA,CAC9B,CACA,SAASO,EAAGd,KAAM,EAAG,CACnBA,EAAE,QAASK,GAAM,CACfA,EAAE,GAAG,CAAC,CACR,CAAC,CACH,CACA,MAAM,GAAML,GAAMA,EAAC,EAAIe,GAAqB,OAAM,EAAIC,GAAqB,OAAM,EACjF,SAASC,GAAGjB,EAAG,EAAG,CAChBA,aAAa,KAAO,aAAa,IAAM,EAAE,QAAQ,CAACK,EAAGC,IAAMN,EAAE,IAAIM,EAAGD,CAAC,CAAC,EAAIL,aAAa,KAAO,aAAa,KAAO,EAAE,QAAQA,EAAE,IAAKA,CAAC,EACpI,UAAWK,KAAK,EAAG,CACjB,GAAI,CAAC,EAAE,eAAeA,CAAC,EACrB,SACF,MAAMC,EAAI,EAAED,CAAC,EAAGE,EAAIP,EAAEK,CAAC,EACvBH,EAAEK,CAAC,GAAKL,EAAEI,CAAC,GAAKN,EAAE,eAAeK,CAAC,GAAK,CAACG,EAAAA,MAAGF,CAAC,GAAK,CAACG,EAAAA,WAAGH,CAAC,EAAIN,EAAEK,CAAC,EAAIY,GAAGV,EAAGD,CAAC,EAAIN,EAAEK,CAAC,EAAIC,CACrF,CACA,OAAON,CACT,CACA,MAAMkB,GAAK,QAAQ,IAAI,WAAa,aAA+B,OAAO,qBAAqB,EAE7E,OAAM,EAExB,SAAS,GAAGlB,EAAG,CACb,MAAO,CAACE,EAAEF,CAAC,GAAK,CAAC,OAAO,UAAU,eAAe,KAAKA,EAAGkB,EAAE,CAC7D,CACA,KAAM,CAAE,OAAQ,CAAC,EAAK,OACtB,SAASC,GAAGnB,EAAG,CACb,MAAO,CAAC,EAAEQ,EAAAA,MAAGR,CAAC,GAAKA,EAAE,OACvB,CACA,SAASoB,GAAGpB,EAAG,EAAGK,EAAGC,EAAG,CACtB,KAAM,CAAE,MAAOC,EAAG,QAASc,EAAG,QAASC,GAAM,EAAGC,EAAIlB,EAAE,MAAM,MAAML,CAAC,EACnE,IAAIwB,EACJ,SAASC,GAAI,CACX,CAACF,IAAM,QAAQ,IAAI,WAAa,cAAgB,CAACjB,KAAOD,EAAE,MAAM,MAAML,CAAC,EAAIO,EAAIA,EAAC,EAAK,IACrF,MAAMmB,EAAI,QAAQ,IAAI,WAAa,cAAgBpB,EAEjDqB,EAAAA,OAAGC,EAAAA,IAAErB,EAAIA,EAAC,EAAK,CAAA,CAAE,EAAE,KAAK,EACtBoB,EAAAA,OAAGtB,EAAE,MAAM,MAAML,CAAC,CAAC,EACvB,OAAO,EAAE0B,EAAGL,EAAG,OAAO,KAAKC,GAAK,CAAA,CAAE,EAAE,OAAO,CAACO,EAAGC,KAAO,QAAQ,IAAI,WAAa,cAAgBA,KAAKJ,GAAK,QAAQ,KAAK,uGAAuGI,CAAC,eAAe9B,CAAC,IAAI,EAAG6B,EAAEC,CAAC,EAAIC,EAAAA,QAAGC,EAAAA,SAAE,IAAM,CACrQjC,GAAGM,CAAC,EACJ,MAAM4B,EAAI5B,EAAE,GAAG,IAAIL,CAAC,EACpB,OAAOsB,EAAEQ,CAAC,EAAE,KAAKG,EAAGA,CAAC,CACvB,CAAC,CAAC,EAAGJ,GAAI,CAAA,CAAE,CAAC,CACd,CACA,OAAOL,EAAIU,GAAGlC,EAAGyB,EAAG,EAAGpB,EAAGC,EAAG,EAAE,EAAGkB,CACpC,CACA,SAASU,GAAGlC,EAAG,EAAGK,EAAI,CAAA,EAAIC,EAAGC,EAAGc,EAAG,CACjC,IAAIC,EACJ,MAAMC,EAAI,EAAE,CAAE,QAAS,CAAA,CAAE,EAAIlB,CAAC,EAC9B,GAAI,QAAQ,IAAI,WAAa,cAAgB,CAACC,EAAE,GAAG,OACjD,MAAM,IAAI,MAAM,iBAAiB,EACnC,MAAMkB,EAAI,CAAE,KAAM,EAAE,EACpB,QAAQ,IAAI,WAAa,eAAiBA,EAAE,UAAaW,GAAM,CAC7DV,EAAIQ,EAAIE,EAAIV,GAAK,IAAM,CAACW,EAAE,eAAiB,MAAM,QAAQH,CAAC,EAAIA,EAAE,KAAKE,CAAC,EAAI,QAAQ,MAAM,kFAAkF,EAC5K,GACA,IAAIV,EAAGC,EAAGG,EAAoB,IAAI,IAAOC,EAAoB,IAAI,IAAOG,EACxE,MAAMI,EAAI/B,EAAE,MAAM,MAAMN,CAAC,EACzB,CAACqB,GAAK,CAACgB,IAAM,QAAQ,IAAI,WAAa,cAAgB,CAAC9B,KAAOD,EAAE,MAAM,MAAMN,CAAC,EAAI,CAAA,GACjF,MAAMsC,EAAIV,EAAAA,IAAE,EAAE,EACd,IAAIW,EACJ,SAASC,EAAEL,EAAG,CACZ,IAAIM,EACJhB,EAAIC,EAAI,GAAI,QAAQ,IAAI,WAAa,eAAiBO,EAAI,CAAA,GAAK,OAAOE,GAAK,YAAcA,EAAE7B,EAAE,MAAM,MAAMN,CAAC,CAAC,EAAGyC,EAAI,CAChH,KAAMtC,GAAG,cACT,QAASH,EACT,OAAQiC,CACd,IAAUhB,GAAGX,EAAE,MAAM,MAAMN,CAAC,EAAGmC,CAAC,EAAGM,EAAI,CACjC,KAAMtC,GAAG,YACT,QAASgC,EACT,QAASnC,EACT,OAAQiC,CACd,GACI,MAAMS,EAAIH,EAAoB,OAAM,EACpCI,EAAAA,SAAE,EAAG,KAAK,IAAM,CACdJ,IAAMG,IAAMjB,EAAI,GAClB,CAAC,EAAGC,EAAI,GAAIZ,EAAGe,EAAGY,EAAGnC,EAAE,MAAM,MAAMN,CAAC,CAAC,CACvC,CACA,MAAM4C,EAAIvB,EAAI,UAAW,CACvB,KAAM,CAAE,MAAOoB,GAAMpC,EAAGqC,EAAID,EAAIA,EAAC,EAAK,CAAA,EACtC,KAAK,OAAQI,GAAM,CACjB,EAAEA,EAAGH,CAAC,CACR,CAAC,CACH,EAEE,QAAQ,IAAI,WAAa,aAAe,IAAM,CAC5C,MAAM,IAAI,MAAM,cAAc1C,CAAC,oEAAoE,CACrG,EAAIU,GAEN,SAASoC,GAAI,CACXxB,EAAE,KAAI,EAAIO,EAAE,MAAK,EAAIC,EAAE,MAAK,EAAIxB,EAAE,GAAG,OAAON,CAAC,CAC/C,CACA,MAAM+C,EAAI,CAACZ,EAAGM,EAAI,KAAO,CACvB,GAAI1B,MAAMoB,EACR,OAAOA,EAAEnB,EAAE,EAAIyB,EAAGN,EACpB,MAAMO,EAAI,UAAW,CACnB3C,GAAGO,CAAC,EACJ,MAAMuC,EAAI,MAAM,KAAK,SAAS,EAAGG,EAAoB,IAAI,IAAOC,EAAoB,IAAI,IACxF,SAASC,EAAEC,EAAG,CACZH,EAAE,IAAIG,CAAC,CACT,CACA,SAASC,EAAED,EAAG,CACZF,EAAE,IAAIE,CAAC,CACT,CACArC,EAAGgB,EAAG,CACJ,KAAMe,EACN,KAAMH,EAAE1B,EAAE,EACV,MAAOoB,EACP,MAAOc,EACP,QAASE,CACjB,CAAO,EACD,IAAIC,EACJ,GAAI,CACFA,EAAIlB,EAAE,MAAM,MAAQ,KAAK,MAAQnC,EAAI,KAAOoC,EAAGS,CAAC,CAClD,OAASM,EAAG,CACV,MAAMrC,EAAGmC,EAAGE,CAAC,EAAGA,CAClB,CACA,OAAOE,aAAa,QAAUA,EAAE,KAAMF,IAAOrC,EAAGkC,EAAGG,CAAC,EAAGA,EAAE,EAAE,MAAOA,IAAOrC,EAAGmC,EAAGE,CAAC,EAAG,QAAQ,OAAOA,CAAC,EAAE,GAAKrC,EAAGkC,EAAGK,CAAC,EAAGA,EACtH,EACA,OAAOX,EAAE3B,EAAE,EAAI,GAAI2B,EAAE1B,EAAE,EAAIyB,EAAGC,CAChC,EAAGY,EAAoBvB,UAAG,CACxB,QAAS,CAAA,EACT,QAAS,CAAA,EACT,MAAO,CAAA,EACP,SAAUO,CACd,CAAG,EAAGiB,EAAI,CACN,GAAIjD,EAEJ,IAAKN,EACL,UAAWW,GAAG,KAAK,KAAMmB,CAAC,EAC1B,OAAQU,EACR,OAAQI,EACR,WAAWT,EAAGM,EAAI,GAAI,CACpB,MAAMC,EAAI/B,GAAGkB,EAAGM,EAAGM,EAAE,SAAU,IAAMI,EAAC,CAAE,EAAGA,EAAIvB,EAAE,IAAI,IAAMkC,EAAAA,MAAE,IAAMlD,EAAE,MAAM,MAAMN,CAAC,EAAIgD,GAAM,EACzFP,EAAE,QAAU,OAASf,EAAID,IAAMU,EAAE,CAChC,QAASnC,EACT,KAAMG,GAAG,OACT,OAAQ8B,CAClB,EAAWe,CAAC,CACN,EAAG,EAAE,CAAA,EAAIxB,EAAGiB,CAAC,CAAC,CAAC,EACf,OAAOC,CACT,EACA,SAAUI,CACd,EAAKV,EAAIqB,EAAAA,SAAG,QAAQ,IAAI,WAAa,cAAgB,QAAQ,IAAI,WAAa,cAAgB,QAAQ,IAAI,WAAa,QAAU5D,GAAK,EAClI,CACE,YAAayD,EACb,kBAAmBvB,EAAAA,QAAmB,IAAI,GAAK,CAErD,EACIwB,CAGJ,EAAMA,CAAC,EACLjD,EAAE,GAAG,IAAIN,EAAGoC,CAAC,EACb,MAAM,GAAK9B,EAAE,IAAMA,EAAE,GAAG,gBAAkB,IAAI,IAAMA,EAAE,GAAG,IAAI,KAAOgB,EAAIoC,cAAE,GAAI,IAAI,IAAM,EAAE,CAAE,OAAQX,EAAG,CAAC,CAAC,CAAC,EAC1G,UAAWZ,KAAK,EAAG,CACjB,MAAMM,EAAI,EAAEN,CAAC,EACb,GAAI3B,EAAAA,MAAGiC,CAAC,GAAK,CAACtB,GAAGsB,CAAC,GAAKhC,EAAAA,WAAGgC,CAAC,EACzB,QAAQ,IAAI,WAAa,cAAgBlC,EAAI+B,EAAE,MAAMH,CAAC,EAAIwB,EAAAA,MAAG,EAAGxB,CAAC,EAAId,IAAMgB,GAAK,GAAGI,CAAC,IAAMjC,EAAAA,MAAGiC,CAAC,EAAIA,EAAE,MAAQJ,EAAEF,CAAC,EAAIlB,GAAGwB,EAAGJ,EAAEF,CAAC,CAAC,GAAI7B,EAAE,MAAM,MAAMN,CAAC,EAAEmC,CAAC,EAAIM,GAAI,QAAQ,IAAI,WAAa,cAAgBa,EAAE,MAAM,KAAKnB,CAAC,UAC3M,OAAOM,GAAK,WAAY,CAC/B,MAAMC,EAAI,QAAQ,IAAI,WAAa,cAAgBnC,EAAIkC,EAAIM,EAAEN,EAAGN,CAAC,EACjE,EAAEA,CAAC,EAAIO,EAAG,QAAQ,IAAI,WAAa,eAAiBY,EAAE,QAAQnB,CAAC,EAAIM,GAAIlB,EAAE,QAAQY,CAAC,EAAIM,CACxF,MAAO,QAAQ,IAAI,WAAa,cAAgBtB,GAAGsB,CAAC,IAAMa,EAAE,QAAQnB,CAAC,EAAId,EAEvEhB,EAAE,QAAQ8B,CAAC,EACTM,EAAG5C,KAAO,EAAE,WACf,EAAE,SAAWkC,UAAG,CAAA,CAAE,IAAI,KAAKI,CAAC,EAC/B,CACA,GAAI,EAAEC,EAAG,CAAC,EAAG,EAAEwB,EAAAA,MAAGxB,CAAC,EAAG,CAAC,EAAG,OAAO,eAAeA,EAAG,SAAU,CAC3D,IAAK,IAAM,QAAQ,IAAI,WAAa,cAAgB7B,EAAI+B,EAAE,MAAQhC,EAAE,MAAM,MAAMN,CAAC,EACjF,IAAMmC,GAAM,CACV,GAAI,QAAQ,IAAI,WAAa,cAAgB5B,EAC3C,MAAM,IAAI,MAAM,qBAAqB,EACvCiC,EAAGC,GAAM,CACP,EAAEA,EAAGN,CAAC,CACR,CAAC,CACH,CACJ,CAAG,EAAG,QAAQ,IAAI,WAAa,eAAiBC,EAAE,WAAaL,UAAII,GAAM,CACrEC,EAAE,aAAe,GAAID,EAAE,YAAY,MAAM,QAASM,GAAM,CACtD,GAAIA,KAAKL,EAAE,OAAQ,CACjB,MAAMM,EAAIP,EAAE,OAAOM,CAAC,EAAGI,EAAIT,EAAE,OAAOK,CAAC,EACrC,OAAOC,GAAK,UAAYxC,EAAEwC,CAAC,GAAKxC,EAAE2C,CAAC,EAAIzC,GAAGsC,EAAGG,CAAC,EAAIV,EAAE,OAAOM,CAAC,EAAII,CAClE,CACAT,EAAEK,CAAC,EAAIkB,EAAAA,MAAGxB,EAAE,OAAQM,CAAC,CACvB,CAAC,EAAG,OAAO,KAAKL,EAAE,MAAM,EAAE,QAASK,GAAM,CACvCA,KAAKN,EAAE,QAAU,OAAOC,EAAEK,CAAC,CAC7B,CAAC,EAAGhB,EAAI,GAAIC,EAAI,GAAIpB,EAAE,MAAM,MAAMN,CAAC,EAAI2D,EAAAA,MAAGxB,EAAE,YAAa,UAAU,EAAGT,EAAI,GAAIiB,EAAAA,WAAK,KAAK,IAAM,CAC5FlB,EAAI,EACN,CAAC,EACD,UAAWgB,KAAKN,EAAE,YAAY,QAAS,CACrC,MAAMO,EAAIP,EAAEM,CAAC,EACbL,EAAEK,CAAC,EACHM,EAAEL,EAAGD,CAAC,CACR,CACA,UAAWA,KAAKN,EAAE,YAAY,QAAS,CACrC,MAAMO,EAAIP,EAAE,YAAY,QAAQM,CAAC,EAAGI,EAAIxB,EAEtCW,WAAE,KAAOjC,GAAGO,CAAC,EAAGoC,EAAE,KAAKN,EAAGA,CAAC,EAAE,EAC3BM,EACJN,EAAEK,CAAC,EACHI,CACF,CACA,OAAO,KAAKT,EAAE,YAAY,OAAO,EAAE,QAASK,GAAM,CAChDA,KAAKN,EAAE,YAAY,SAAW,OAAOC,EAAEK,CAAC,CAC1C,CAAC,EAAG,OAAO,KAAKL,EAAE,YAAY,OAAO,EAAE,QAASK,GAAM,CACpDA,KAAKN,EAAE,YAAY,SAAW,OAAOC,EAAEK,CAAC,CAC1C,CAAC,EAAGL,EAAE,YAAcD,EAAE,YAAaC,EAAE,SAAWD,EAAE,SAAUC,EAAE,aAAe,EAC/E,CAAC,GAAI,QAAQ,IAAI,WAAa,cAAgB,QAAQ,IAAI,WAAa,QAAUvC,GAAI,CACnF,MAAMsC,EAAI,CACR,SAAU,GACV,aAAc,GAEd,WAAY,EAClB,EACI,CAAC,KAAM,cAAe,WAAY,mBAAmB,EAAE,QAASM,GAAM,CACpE,OAAO,eAAeL,EAAGK,EAAG,EAAE,CAAE,MAAOL,EAAEK,CAAC,CAAC,EAAIN,CAAC,CAAC,CACnD,CAAC,CACH,CACA,OAAO7B,EAAE,GAAG,QAAS6B,GAAM,CACzB,GAAI,QAAQ,IAAI,WAAa,cAAgB,QAAQ,IAAI,WAAa,QAAUtC,GAAI,CAClF,MAAM4C,EAAInB,EAAE,IAAI,IAAMa,EAAE,CACtB,MAAOC,EACP,IAAK9B,EAAE,GACP,MAAOA,EACP,QAASiB,CACjB,CAAO,CAAC,EACF,OAAO,KAAKkB,GAAK,CAAA,CAAE,EAAE,QAASC,GAAMN,EAAE,kBAAkB,IAAIM,CAAC,CAAC,EAAG,EAAEN,EAAGK,CAAC,CACzE,MACE,EAAEL,EAAGd,EAAE,IAAI,IAAMa,EAAE,CACjB,MAAOC,EACP,IAAK9B,EAAE,GACP,MAAOA,EACP,QAASiB,CACjB,CAAO,CAAC,CAAC,CACP,CAAC,EAAG,QAAQ,IAAI,WAAa,cAAgBa,EAAE,QAAU,OAAOA,EAAE,QAAU,UAAY,OAAOA,EAAE,OAAO,aAAe,YAAc,CAACA,EAAE,OAAO,YAAY,SAAQ,EAAG,SAAS,eAAe,GAAK,QAAQ,KAAK;AAAA;AAAA,kBAEhMA,EAAE,GAAG,IAAI,EAAGC,GAAKhB,GAAKhB,EAAE,SAAWA,EAAE,QAAQ+B,EAAE,OAAQC,CAAC,EAAGZ,EAAI,GAAIC,EAAI,GAAIU,CAC7F,CAEA,SAASyB,GAAG7D,EAAG,EAAGK,EAAG,CACnB,IAAIC,EACJ,MAAMC,EAAI,OAAO,GAAK,WACtBD,EAAIC,EAAIF,EAAI,EACZ,SAASgB,EAAEC,EAAGC,EAAG,CACf,MAAMC,EAAIsC,EAAAA,oBAAE,EACZ,GAAIxC,GAEH,QAAQ,IAAI,WAAa,QAAUxB,IAAKA,GAAE,SAAW,KAAOwB,KAAOE,EAAIuC,EAAAA,OAAG9D,GAAI,IAAI,EAAI,MAAOqB,GAAKvB,GAAGuB,CAAC,EAAG,QAAQ,IAAI,WAAa,cAAgB,CAACxB,GAClJ,MAAM,IAAI,MAAM;AAAA;AAAA,8BAEQ,EAC1BwB,EAAIxB,GAAGwB,EAAE,GAAG,IAAItB,CAAC,IAAMO,EAAI2B,GAAGlC,EAAG,EAAGM,EAAGgB,CAAC,EAAIF,GAAGpB,EAAGM,EAAGgB,CAAC,EAAG,QAAQ,IAAI,WAAa,eAAiBD,EAAE,OAASC,IAC9G,MAAMG,EAAIH,EAAE,GAAG,IAAItB,CAAC,EACpB,GAAI,QAAQ,IAAI,WAAa,cAAgBuB,EAAG,CAC9C,MAAMG,EAAI,SAAW1B,EAAG6B,EAAItB,EAAI2B,GAAGR,EAAG,EAAGpB,EAAGgB,EAAG,EAAE,EAAIF,GAAGM,EAAG,EAAE,CAAA,EAAIpB,CAAC,EAAGgB,EAAG,EAAE,EAC1EC,EAAE,WAAWM,CAAC,EAAG,OAAOP,EAAE,MAAM,MAAMI,CAAC,EAAGJ,EAAE,GAAG,OAAOI,CAAC,CACzD,CACA,GAAI,QAAQ,IAAI,WAAa,cAAgB7B,GAAI,CAC/C,MAAM6B,EAAIsC,EAAAA,mBAAE,EACZ,GAAItC,GAAKA,EAAE,OACX,CAACH,EAAG,CACF,MAAMM,EAAIH,EAAE,MAAOI,EAAI,aAAcD,EAAIA,EAAE,SAAWA,EAAE,SAAW,CAAA,EACnEC,EAAE9B,CAAC,EAAIyB,CACT,CACF,CACA,OAAOA,CACT,CACA,OAAOJ,EAAE,IAAMrB,EAAGqB,CACpB,CACA,SAAS4C,GAAGjE,EAAG,CACb,MAAM,EAAI4D,EAAAA,MAAG5D,CAAC,EAAGK,EAAI,CAAA,EACrB,UAAWC,KAAK,EAAG,CACjB,MAAMC,EAAI,EAAED,CAAC,EACbC,EAAE,OAASF,EAAEC,CAAC,EACd0B,WAAE,CACA,IAAK,IAAMhC,EAAEM,CAAC,EACd,IAAIe,EAAG,CACLrB,EAAEM,CAAC,EAAIe,CACT,CACN,CAAK,GAAKb,EAAAA,MAAGD,CAAC,GAAKE,EAAAA,WAAGF,CAAC,KAAOF,EAAEC,CAAC,EAC7BqD,QAAG3D,EAAGM,CAAC,EACT,CACA,OAAOD,CACT,CACA,MAAM6D,GAAK,OAAO,OAAS,KAAO,OAAO,SAAW,IACpD,OAAO,kBAAoB,KAAO,sBAAsB,kBACxD,MAAMC,GAAK,OAAO,UAAU,SAAUC,GAAMpE,GAAMmE,GAAG,KAAKnE,CAAC,IAAM,kBAAmBqE,GAAK,IAAM,CAC/F,EACA,SAASC,MAAMtE,EAAG,CAChB,GAAIA,EAAE,SAAW,EAAG,OAAO2D,EAAAA,MAAG,GAAG3D,CAAC,EAClC,MAAM,EAAIA,EAAE,CAAC,EACb,OAAO,OAAO,GAAK,WAAauE,EAAAA,SAAGC,EAAAA,UAAG,KAAO,CAC3C,IAAK,EACL,IAAKH,EACT,EAAI,CAAC,EAAIzC,EAAAA,IAAE,CAAC,CACZ,CACA,SAAS6C,GAAGzE,EAAG,EAAG,CAChB,SAASK,KAAKC,EAAG,CACf,OAAO,IAAI,QAAQ,CAACC,EAAGc,IAAM,CAC3B,QAAQ,QAAQrB,EAAE,IAAM,EAAE,MAAM,KAAMM,CAAC,EAAG,CACxC,GAAI,EACJ,QAAS,KACT,KAAMA,CACd,CAAO,CAAC,EAAE,KAAKC,CAAC,EAAE,MAAMc,CAAC,CACrB,CAAC,CACH,CACA,OAAOhB,CACT,CACA,MAAMqE,GAAM1E,GAAMA,EAAC,EACnB,SAAS2E,GAAG3E,EAAI0E,GAAI,EAAI,CAAA,EAAI,CAC1B,KAAM,CAAE,aAAcrE,EAAI,QAAQ,EAAK,EAAGC,EAAIgE,GAAGjE,IAAM,QAAQ,EAC/D,SAASE,GAAI,CACXD,EAAE,MAAQ,EACZ,CACA,SAASe,GAAI,CACXf,EAAE,MAAQ,EACZ,CACA,MAAMgB,EAAI,IAAIC,IAAM,CAClBjB,EAAE,OAASN,EAAE,GAAGuB,CAAC,CACnB,EACA,MAAO,CACL,SAAUgD,EAAAA,SAAGjE,CAAC,EACd,MAAOC,EACP,OAAQc,EACR,YAAaC,CACjB,CACA,CACA,SAASsD,GAAG5E,EAAG,CACb,OAAO,MAAM,QAAQA,CAAC,EAAIA,EAAI,CAACA,CAAC,CAClC,CACA,SAAS6E,GAAG7E,EAAG,CACb,OAAOgE,qBAAE,CACX,CACA,SAASc,GAAG9E,EAAG,EAAGK,EAAI,CAAA,EAAI,CACxB,KAAM,CAAE,YAAaC,EAAIoE,GAAI,GAAGnE,CAAC,EAAKF,EACtC,OAAOmD,EAAAA,MAAExD,EAAGyE,GAAGnE,EAAG,CAAC,EAAGC,CAAC,CACzB,CACA,SAASwE,GAAG/E,EAAG,EAAGK,EAAI,CAAA,EAAI,CACxB,KAAM,CAAE,YAAaC,EAAG,aAAcC,EAAI,SAAU,GAAGc,CAAC,EAAKhB,EAAG,CAAE,YAAaiB,EAAG,MAAOC,EAAG,OAAQC,EAAG,SAAUC,GAAMkD,GAAGrE,EAAG,CAAE,aAAcC,CAAC,CAAE,EAChJ,MAAO,CACL,KAAMuE,GAAG9E,EAAG,EAAG,CACb,GAAGqB,EACH,YAAaC,CACnB,CAAK,EACD,MAAOC,EACP,OAAQC,EACR,SAAUC,CACd,CACA,CACA,MAAMuD,GAAKD,GACX,SAASE,GAAGjF,EAAG,EAAI,GAAIK,EAAG,CACxBwE,GAAE,EAAKK,YAAGlF,EAAGK,CAAC,EAAI,EAAIL,EAAC,EAAK2C,EAAAA,SAAG3C,CAAC,CAClC,CACA,SAASmF,GAAGnF,EAAG,EAAGK,EAAG,CACnB,OAAOmD,EAAAA,MAAExD,EAAG,EAAG,CACb,GAAGK,EACH,UAAW,EACf,CAAG,CACH,CASA,MAAM+E,GAAIlB,GAAK,OAAS,OACxB,SAASmB,GAAGrF,EAAG,CACb,IAAI,EACJ,MAAMK,EAAIiF,EAAAA,QAAEtF,CAAC,EACb,OAAQ,EAAIK,GAAG,OAAS,MAAQ,IAAM,OAAS,EAAIA,CACrD,CACA,SAASkF,MAAMvF,EAAG,CAChB,MAAM,EAAI,CAACM,EAAGC,EAAGc,EAAGC,KAAOhB,EAAE,iBAAiBC,EAAGc,EAAGC,CAAC,EAAG,IAAMhB,EAAE,oBAAoBC,EAAGc,EAAGC,CAAC,GAAIjB,EAAI2B,EAAAA,SAAE,IAAM,CACzG,MAAM1B,EAAIsE,GAAGU,EAAAA,QAAEtF,EAAE,CAAC,CAAC,CAAC,EAAE,OAAQO,GAAMA,GAAK,IAAI,EAC7C,OAAOD,EAAE,MAAOC,GAAM,OAAOA,GAAK,QAAQ,EAAID,EAAI,MACpD,CAAC,EACD,OAAO6E,GAAG,IAAM,CACd,IAAI7E,EAAGC,EACP,MAAO,EACJD,GAAKC,EAAIF,EAAE,SAAW,MAAQE,IAAM,OAAS,OAASA,EAAE,IAAKc,GAAMgE,GAAGhE,CAAC,CAAC,KAAO,MAAQf,IAAM,OAASA,EAAI,CAAC8E,EAAC,EAAE,OAAQ/D,GAAMA,GAAK,IAAI,EACtIuD,GAAGU,EAAAA,QAAEjF,EAAE,MAAQL,EAAE,CAAC,EAAIA,EAAE,CAAC,CAAC,CAAC,EAC3B4E,GAAGY,EAAAA,MAAGnF,EAAE,MAAQL,EAAE,CAAC,EAAIA,EAAE,CAAC,CAAC,CAAC,EAC5BsF,EAAAA,QAAEjF,EAAE,MAAQL,EAAE,CAAC,EAAIA,EAAE,CAAC,CAAC,CAC7B,CACE,EAAG,CAAC,CAACM,EAAGC,EAAGc,EAAGC,CAAC,EAAGC,EAAGC,IAAM,CACzB,GAAI,CAAClB,GAAG,QAAU,CAACC,GAAG,QAAU,CAACc,GAAG,OAAQ,OAC5C,MAAMI,EAAI2C,GAAG9C,CAAC,EAAI,CAAE,GAAGA,GAAMA,EAAGI,EAAIpB,EAAE,QAASuB,GAAMtB,EAAE,QAASuB,GAAMT,EAAE,IAAKY,GAAM,EAAEJ,EAAGC,EAAGG,EAAGR,CAAC,CAAC,CAAC,CAAC,EAClGD,EAAE,IAAM,CACNE,EAAE,QAASG,GAAMA,EAAC,CAAE,CACtB,CAAC,CACH,EAAG,CAAE,MAAO,OAAQ,CACtB,CACA,MAAM4D,GAAK,OAAO,WAAa,IAAM,WAAa,OAAO,OAAS,IAAM,OAAS,OAAO,OAAS,IAAM,OAAS,OAAO,KAAO,IAAM,KAAO,CAAA,EAAIC,GAAK,0BAA2BC,GAAqBC,GAAE,EACtM,SAASA,IAAK,CACZ,OAAOF,MAAMD,KAAOA,GAAGC,EAAE,EAAID,GAAGC,EAAE,GAAK,CAAA,GAAKD,GAAGC,EAAE,CACnD,CACA,SAASG,GAAG7F,EAAG,EAAG,CAChB,OAAO2F,GAAG3F,CAAC,GAAK,CAClB,CACA,SAAS8F,GAAG9F,EAAG,CACb,OAAOA,GAAK,KAAO,MAAQA,aAAa,IAAM,MAAQA,aAAa,IAAM,MAAQA,aAAa,KAAO,OAAS,OAAOA,GAAK,UAAY,UAAY,OAAOA,GAAK,SAAW,SAAW,OAAOA,GAAK,SAAW,SAAW,OAAO,MAAMA,CAAC,EAAI,MAAQ,QAClP,CACA,MAAM+F,GAAK,CACT,QAAS,CACP,KAAO/F,GAAMA,IAAM,OACnB,MAAQA,GAAM,OAAOA,CAAC,CAC1B,EACE,OAAQ,CACN,KAAOA,GAAM,KAAK,MAAMA,CAAC,EACzB,MAAQA,GAAM,KAAK,UAAUA,CAAC,CAClC,EACE,OAAQ,CACN,KAAOA,GAAM,OAAO,WAAWA,CAAC,EAChC,MAAQA,GAAM,OAAOA,CAAC,CAC1B,EACE,IAAK,CACH,KAAOA,GAAMA,EACb,MAAQA,GAAM,OAAOA,CAAC,CAC1B,EACE,OAAQ,CACN,KAAOA,GAAMA,EACb,MAAQA,GAAM,OAAOA,CAAC,CAC1B,EACE,IAAK,CACH,KAAOA,GAAM,IAAI,IAAI,KAAK,MAAMA,CAAC,CAAC,EAClC,MAAQA,GAAM,KAAK,UAAU,MAAM,KAAKA,EAAE,SAAS,CAAC,CACxD,EACE,IAAK,CACH,KAAOA,GAAM,IAAI,IAAI,KAAK,MAAMA,CAAC,CAAC,EAClC,MAAQA,GAAM,KAAK,UAAU,MAAM,KAAKA,CAAC,CAAC,CAC9C,EACE,KAAM,CACJ,KAAOA,GAAM,IAAI,KAAKA,CAAC,EACvB,MAAQA,GAAMA,EAAE,YAAW,CAC/B,CACA,EAAGgG,GAAK,iBACR,SAASC,GAAGjG,EAAG,EAAGK,EAAGC,EAAI,CAAA,EAAI,CAC3B,IAAIC,EACJ,KAAM,CAAE,MAAOc,EAAI,MAAO,KAAMC,EAAI,GAAI,uBAAwBC,EAAI,GAAI,cAAeC,EAAI,GAAI,cAAeC,EAAI,GAAI,QAASC,EAAG,OAAQG,EAAIuD,GAAG,YAAatD,EAAG,QAASG,EAAKe,GAAM,CACnL,QAAQ,MAAMA,CAAC,CACjB,EAAG,cAAeX,CAAC,EAAK/B,EAAGgC,GAAKZ,EAAIwE,EAAAA,WAAKtE,EAAAA,KAAG,CAAC,EAAGW,EAAIP,EAAAA,SAAE,IAAMsD,EAAAA,QAAEtF,CAAC,CAAC,EAChE,GAAI,CAACK,EAAG,GAAI,CACVA,EAAIwF,GAAG,oBAAqB,IAAMT,IAAG,YAAY,EAAC,CACpD,OAASpC,EAAG,CACVf,EAAEe,CAAC,CACL,CACA,GAAI,CAAC3C,EAAG,OAAOiC,EACf,MAAME,EAAI8C,EAAAA,QAAE,CAAC,EAAG1C,EAAIkD,GAAGtD,CAAC,EAAGM,GAAKvC,EAAID,EAAE,cAAgB,MAAQC,IAAM,OAASA,EAAIwF,GAAGnD,CAAC,EAAG,CAAE,MAAOG,EAAG,OAAQO,CAAC,EAAK0B,GAAG1C,EAAIU,GAAMb,EAAEa,CAAC,EAAG,CACnI,MAAO3B,EACP,KAAMC,EACN,YAAaQ,CACjB,CAAG,EACD0B,EAAAA,MAAEjB,EAAG,IAAMG,EAAC,EAAI,CAAE,MAAOrB,EAAG,EAC5B,IAAIkC,EAAI,GACR,MAAMnB,EAAKY,GAAM,CACfX,GAAK,CAACkB,GAAKb,EAAEM,CAAC,CAChB,EAAGmD,EAAKnD,GAAM,CACZX,GAAK,CAACkB,GAAKV,EAAEG,CAAC,CAChB,EACAnB,GAAKN,IAAMlB,aAAa,QAAUkF,GAAG1D,EAAG,UAAWO,EAAG,CAAE,QAAS,GAAI,EAAImD,GAAG1D,EAAGmE,GAAIG,CAAC,GAAI9D,EAAI4C,GAAG,IAAM,CACnG1B,EAAI,GAAIb,EAAC,CACX,CAAC,EAAIA,EAAC,EACN,SAAS0D,EAAEpD,EAAGC,EAAG,CACf,GAAIpB,EAAG,CACL,MAAMqB,EAAI,CACR,IAAKX,EAAE,MACP,SAAUS,EACV,SAAUC,EACV,YAAa5C,CACrB,EACMwB,EAAE,cAAcxB,aAAa,QAAU,IAAI,aAAa,UAAW6C,CAAC,EAAI,IAAI,YAAY8C,GAAI,CAAE,OAAQ9C,CAAC,CAAE,CAAC,CAC5G,CACF,CACA,SAASf,EAAEa,EAAG,CACZ,GAAI,CACF,MAAMC,EAAI5C,EAAE,QAAQkC,EAAE,KAAK,EAC3B,GAAIS,GAAK,KACPoD,EAAEnD,EAAG,IAAI,EAAG5C,EAAE,WAAWkC,EAAE,KAAK,MAC7B,CACH,MAAMW,EAAIJ,EAAE,MAAME,CAAC,EACnBC,IAAMC,IAAM7C,EAAE,QAAQkC,EAAE,MAAOW,CAAC,EAAGkD,EAAEnD,EAAGC,CAAC,EAC3C,CACF,OAASD,EAAG,CACVhB,EAAEgB,CAAC,CACL,CACF,CACA,SAASR,EAAEO,EAAG,CACZ,MAAMC,EAAID,EAAIA,EAAE,SAAW3C,EAAE,QAAQkC,EAAE,KAAK,EAC5C,GAAIU,GAAK,KACP,OAAOzB,GAAKgB,GAAK,MAAQnC,EAAE,QAAQkC,EAAE,MAAOO,EAAE,MAAMN,CAAC,CAAC,EAAGA,EAC3D,GAAI,CAACQ,GAAKvB,EAAG,CACX,MAAMyB,EAAIJ,EAAE,KAAKG,CAAC,EAClB,OAAO,OAAOxB,GAAK,WAAaA,EAAEyB,EAAGV,CAAC,EAAII,IAAM,UAAY,CAAC,MAAM,QAAQM,CAAC,EAAI,CAC9E,GAAGV,EACH,GAAGU,CACX,EAAUA,CACN,KAAO,QAAO,OAAOD,GAAK,SAAWA,EAAIH,EAAE,KAAKG,CAAC,CACnD,CACA,SAASP,EAAEM,EAAG,CACZ,GAAI,EAAEA,GAAKA,EAAE,cAAgB3C,GAAI,CAC/B,GAAI2C,GAAKA,EAAE,KAAO,KAAM,CACtBV,EAAE,MAAQE,EACV,MACF,CACA,GAAI,EAAEQ,GAAKA,EAAE,MAAQT,EAAE,OAAQ,CAC7BQ,EAAC,EACD,GAAI,CACF,MAAME,EAAIH,EAAE,MAAMR,EAAE,KAAK,GACxBU,IAAM,QAAUA,GAAG,WAAaC,KAAOX,EAAE,MAAQG,EAAEO,CAAC,EACvD,OAASC,EAAG,CACVhB,EAAEgB,CAAC,CACL,QAAC,CACCD,EAAIL,EAAAA,SAAGW,CAAC,EAAIA,EAAC,CACf,CACF,CACF,CACF,CACA,SAAST,EAAEG,EAAG,CACZN,EAAEM,EAAE,MAAM,CACZ,CACA,OAAOV,CACT,CACA,SAAS+D,GAAGrG,EAAG,EAAGK,EAAI,CAAA,EAAI,CACxB,KAAM,CAAE,OAAQC,EAAI8E,EAAC,EAAK/E,EAC1B,OAAO4F,GAAGjG,EAAG,EAAGM,GAAG,aAAcD,CAAC,CACpC,CAsEA,SAASiG,IAAK,CACZ,OAAO,OAAO,OAAS,KAAO,OAAO,WAAa,OAAO,WAAU,EAAK,GAAG,KAAK,IAAG,CAAE,IAAI,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,UAAU,EAAG,CAAC,CAAC,EACrI,CACA,SAASC,GAAGvG,EAAG,CACb,MAAM,EAAI,CACR,KAAMA,EAAE,KACR,SAAUA,EAAE,SACZ,UAAWA,EAAE,UAAU,YAAW,CACtC,EACE,OAAOA,EAAE,YAAc,EAAE,UAAY,CACnC,GAAGA,EAAE,UACL,UAAWA,EAAE,UAAU,UAAU,YAAW,CAChD,GAAMA,EAAE,aAAe,EAAE,WAAaA,EAAE,WAAW,IAAKK,IAAO,CAC3D,GAAGA,EACH,UAAWA,EAAE,UAAU,YAAW,CACtC,EAAI,GAAI,CACR,CACA,SAASmG,GAAGxG,EAAG,CACb,MAAM,EAAI,CACR,KAAMA,EAAE,KACR,SAAUA,EAAE,SACZ,UAAW,IAAI,KAAKA,EAAE,SAAS,CACnC,EACE,OAAOA,EAAE,YAAc,EAAE,UAAY,CACnC,GAAGA,EAAE,UACL,UAAW,IAAI,KAAKA,EAAE,UAAU,SAAS,CAC7C,GAAMA,EAAE,aAAe,EAAE,WAAaA,EAAE,WAAW,IAAKK,IAAO,CAC3D,GAAGA,EACH,UAAW,IAAI,KAAKA,EAAE,SAAS,CACnC,EAAI,GAAI,CACR,CACA,MAAMoG,GAAqB5C,GAAG,oBAAqB,IAAM,CACvD,MAAM7D,EAAI4B,EAAAA,IAAE,CACV,cAAe,IACf,mBAAoB,GACpB,iBAAkB,IAClB,kBAAmB,GACnB,qBAAsB,eAC1B,CAAG,EAAG,EAAIA,MAAE,CAAA,CAAE,EAAGvB,EAAIuB,EAAAA,IAAE,EAAE,EAAGtB,EAAIsB,EAAAA,IAAE0E,GAAE,CAAE,EAAG/F,EAAIqB,EAAAA,IAAE,EAAE,EAAGP,EAAIO,EAAAA,IAAE,CAAA,CAAE,EAAGN,EAAIM,MAAE,IAAI,EAAGL,EAAIS,WAAE,IAAM3B,EAAE,MAAQ,EAAI,GAAK,EAAE,MAAMA,EAAE,KAAK,GAAG,YAAc,EAAE,EAAGmB,EAAIQ,WAAE,IAAM3B,EAAE,MAAQ,EAAE,MAAM,OAAS,CAAC,EAAGoB,EAAIO,EAAAA,SAAE,IAAM,CACnM,IAAI0E,EAAI,EACR,QAASC,EAAItG,EAAE,MAAOsG,GAAK,GAAK,EAAE,MAAMA,CAAC,GAAG,WAAYA,IACtDD,IACF,OAAOA,CACT,CAAC,EAAGhF,EAAIM,WAAE,IAAM,EAAE,MAAM,OAAS,EAAI3B,EAAE,KAAK,EAAGwB,EAAIG,EAAAA,SAAE,KAAO,CAC1D,QAAST,EAAE,MACX,QAASC,EAAE,MACX,UAAWC,EAAE,MACb,UAAWC,EAAE,MACb,aAAcrB,EAAE,KACpB,EAAI,EACF,SAASyB,EAAE4E,EAAG,CACZ1G,EAAE,MAAQ,CAAE,GAAGA,EAAE,MAAO,GAAG0G,CAAC,EAAI1G,EAAE,MAAM,oBAAsBoD,EAAC,EAAID,EAAC,GAAKnD,EAAE,MAAM,oBAAsByC,EAAC,CAC1G,CACA,SAASR,EAAEyE,EAAGC,EAAI,OAAQ,CACxB,MAAMC,EAAI,CACR,GAAGF,EACH,GAAIJ,GAAE,EACN,UAA2B,IAAI,KAC/B,OAAQK,EACR,OAAQ3G,EAAE,MAAM,MACtB,EACI,GAAIA,EAAE,MAAM,iBAAmB,CAACA,EAAE,MAAM,gBAAgB4G,CAAC,EACvD,OAAOA,EAAE,GACX,GAAIrG,EAAE,MACJ,OAAOc,EAAE,MAAM,KAAKuF,CAAC,EAAGA,EAAE,GAC5B,GAAIvG,EAAE,MAAQ,EAAE,MAAM,OAAS,IAAM,EAAE,MAAQ,EAAE,MAAM,MAAM,EAAGA,EAAE,MAAQ,CAAC,GAAI,EAAE,MAAM,KAAKuG,CAAC,EAAGvG,EAAE,QAASL,EAAE,MAAM,eAAiB,EAAE,MAAM,OAASA,EAAE,MAAM,cAAe,CAC1K,MAAM6G,EAAI,EAAE,MAAM,OAAS7G,EAAE,MAAM,cACnC,EAAE,MAAQ,EAAE,MAAM,MAAM6G,CAAC,EAAGxG,EAAE,OAASwG,CACzC,CACA,OAAO7G,EAAE,MAAM,oBAAsB0C,EAAEkE,CAAC,EAAGA,EAAE,EAC/C,CACA,SAASvE,GAAI,CACX9B,EAAE,MAAQ,GAAIc,EAAE,MAAQ,GAAIC,EAAE,MAAQgF,GAAE,CAC1C,CACA,SAAShE,EAAEoE,EAAG,CACZ,GAAI,CAACnG,EAAE,OAASc,EAAE,MAAM,SAAW,EACjC,OAAOd,EAAE,MAAQ,GAAIc,EAAE,MAAQ,CAAA,EAAIC,EAAE,MAAQ,KAAM,KACrD,MAAMqF,EAAIrF,EAAE,MAAOsF,EAAIvF,EAAE,MAAM,MAAOyF,GAAMA,EAAE,UAAU,EAAGD,EAAI,CAC7D,GAAIF,EACJ,KAAM,QACN,KAAM,GAEN,UAAW,GACX,YAAa,KACb,WAAY,KACZ,QAAStF,EAAE,MAAM,CAAC,GAAG,SAAW,GAChC,UAA2B,IAAI,KAC/B,OAAQ,OACR,WAAYuF,EACZ,mBAAoBA,EAAI,OAAS,mCACjC,kBAAmBvF,EAAE,MAAM,IAAKyF,GAAMA,EAAE,EAAE,EAC1C,SAAU,CAAE,YAAaJ,CAAC,CAChC,EACIrF,EAAE,MAAM,QAASyF,GAAM,CACrBA,EAAE,kBAAoBH,CACxB,CAAC,EAAG,EAAE,MAAM,KAAK,GAAGtF,EAAE,MAAOwF,CAAC,EAAGxG,EAAE,MAAQ,EAAE,MAAM,OAAS,EAAGL,EAAE,MAAM,oBAAsB6C,EAAExB,EAAE,MAAOwF,CAAC,EACzG,MAAME,EAAIJ,EACV,OAAOpG,EAAE,MAAQ,GAAIc,EAAE,MAAQ,CAAA,EAAIC,EAAE,MAAQ,KAAMyF,CACrD,CACA,SAASxE,GAAI,CACXhC,EAAE,MAAQ,GAAIc,EAAE,MAAQ,GAAIC,EAAE,MAAQ,IACxC,CACA,SAASkB,EAAEkE,EAAG,CACZ,GAAI,CAACnF,EAAE,MAAO,MAAO,GACrB,MAAMoF,EAAI,EAAE,MAAMtG,EAAE,KAAK,EACzB,GAAI,CAACsG,EAAE,WACL,OAAO,OAAO,QAAU,KAAOA,EAAE,oBAAsB,QAAQ,KAAK,sCAAuCA,EAAE,kBAAkB,EAAG,GACpI,GAAI,CACF,GAAIA,EAAE,OAAS,SAAWA,EAAE,kBAC1B,QAASC,EAAID,EAAE,kBAAkB,OAAS,EAAGC,GAAK,EAAGA,IAAK,CACxD,MAAMC,EAAIF,EAAE,kBAAkBC,CAAC,EAAGG,EAAI,EAAE,MAAM,KAAMD,GAAMA,EAAE,KAAOD,CAAC,EACpEE,GAAKjE,EAAEiE,EAAGL,CAAC,CACb,MAEA5D,EAAE6D,EAAGD,CAAC,EACR,OAAOrG,EAAE,QAASL,EAAE,MAAM,oBAAsBgD,EAAE2D,CAAC,EAAG,EACxD,OAASC,EAAG,CACV,OAAO,OAAO,QAAU,KAAO,QAAQ,MAAM,eAAgBA,CAAC,EAAG,EACnE,CACF,CACA,SAAShE,EAAE8D,EAAG,CACZ,GAAI,CAAClF,EAAE,MAAO,MAAO,GACrB,MAAMmF,EAAI,EAAE,MAAMtG,EAAE,MAAQ,CAAC,EAC7B,GAAI,CACF,GAAIsG,EAAE,OAAS,SAAWA,EAAE,kBAC1B,UAAWC,KAAKD,EAAE,kBAAmB,CACnC,MAAME,EAAI,EAAE,MAAM,KAAME,GAAMA,EAAE,KAAOH,CAAC,EACxCC,GAAK9D,EAAE8D,EAAGH,CAAC,CACb,MAEA3D,EAAE4D,EAAGD,CAAC,EACR,OAAOrG,EAAE,QAASL,EAAE,MAAM,oBAAsBiD,EAAE0D,CAAC,EAAG,EACxD,OAASC,EAAG,CACV,OAAO,OAAO,QAAU,KAAO,QAAQ,MAAM,eAAgBA,CAAC,EAAG,EACnE,CACF,CACA,SAAS9D,EAAE4D,EAAGC,EAAG,EACdD,EAAE,OAAS,OAASA,EAAE,OAAS,WAAaC,GAAK,OAAOA,EAAE,KAAO,YAAcA,EAAE,IAAID,EAAE,KAAMA,EAAE,YAAa,MAAM,CACrH,CACA,SAAS3D,EAAE2D,EAAGC,EAAG,EACdD,EAAE,OAAS,OAASA,EAAE,OAAS,WAAaC,GAAK,OAAOA,EAAE,KAAO,YAAcA,EAAE,IAAID,EAAE,KAAMA,EAAE,WAAY,MAAM,CACpH,CACA,SAASpD,GAAI,CACX,MAAMoD,EAAI,EAAE,MAAM,OAAQE,GAAMA,EAAE,UAAU,EAAE,OAAQD,EAAI,EAAE,MAAM,IAAKC,GAAMA,EAAE,SAAS,EACxF,MAAO,CACL,WAAY,CAAC,GAAG,EAAE,KAAK,EACvB,aAAcvG,EAAE,MAChB,gBAAiB,EAAE,MAAM,OACzB,qBAAsBqG,EACtB,uBAAwB,EAAE,MAAM,OAASA,EACzC,gBAAiBC,EAAE,OAAS,EAAI,IAAI,KAAK,KAAK,IAAI,GAAGA,EAAE,IAAKC,GAAMA,EAAE,QAAO,CAAE,CAAC,CAAC,EAAI,OACnF,gBAAiBD,EAAE,OAAS,EAAI,IAAI,KAAK,KAAK,IAAI,GAAGA,EAAE,IAAKC,GAAMA,EAAE,QAAO,CAAE,CAAC,CAAC,EAAI,MACzF,CACE,CACA,SAASrD,GAAI,CACX,EAAE,MAAQ,CAAA,EAAIlD,EAAE,MAAQ,EAC1B,CACA,SAAS+B,EAAEsE,EAAGC,EAAG,CACf,OAAO,EAAE,MAAM,OAAQC,GAAMA,EAAE,UAAYF,IAAMC,IAAM,QAAUC,EAAE,WAAaD,EAAE,CACpF,CACA,SAASR,EAAEO,EAAGC,EAAG,CACf,MAAMC,EAAI,EAAE,MAAM,KAAMC,GAAMA,EAAE,KAAOH,CAAC,EACxCE,IAAMA,EAAE,WAAa,GAAIA,EAAE,mBAAqBD,EAClD,CACA,SAASP,EAAEM,EAAGC,EAAGC,EAAGC,EAAI,UAAWE,EAAG,CACpC,MAAMD,EAAI,CACR,KAAM,SACN,KAAMF,GAAKA,EAAE,OAAS,EAAI,GAAGF,CAAC,IAAIE,EAAE,CAAC,CAAC,GAAKF,EAC3C,UAAW,GACX,YAAa,KACb,WAAY,KACZ,QAASA,EACT,SAAUE,GAAKA,EAAE,OAAS,EAAIA,EAAE,CAAC,EAAI,OACrC,WAAY,GAEZ,WAAYD,EACZ,gBAAiBC,EACjB,aAAcC,EACd,YAAaE,CACnB,EACI,OAAO9E,EAAE6E,CAAC,CACZ,CACA,IAAI3E,EAAI,KACR,SAASM,GAAI,CACX,OAAO,OAAS,KAAO,CAAC,OAAO,mBAAqBN,EAAI,IAAI,iBAAiB,yBAAyB,EAAGA,EAAE,iBAAiB,UAAYuE,GAAM,CAC5I,MAAMC,EAAID,EAAE,KACZ,GAAI,CAACC,GAAK,OAAOA,GAAK,SAAU,OAChC,MAAMC,EAAIJ,GAAGG,CAAC,EACdC,EAAE,WAAatG,EAAE,QAAUsG,EAAE,OAAS,aAAeA,EAAE,WAAa,EAAE,MAAM,KAAK,CAAE,GAAGA,EAAE,UAAW,OAAQ,MAAM,CAAE,EAAGvG,EAAE,MAAQ,EAAE,MAAM,OAAS,GAAKuG,EAAE,OAAS,aAAeA,EAAE,aAAe,EAAE,MAAM,KAAK,GAAGA,EAAE,WAAW,IAAKC,IAAO,CAAE,GAAGA,EAAG,OAAQ,MAAM,EAAG,CAAC,EAAGxG,EAAE,MAAQ,EAAE,MAAM,OAAS,GACpS,CAAC,EACH,CACA,SAASqC,EAAEgE,EAAG,CACZ,GAAI,CAACvE,EAAG,OACR,MAAMwE,EAAI,CACR,KAAM,YACN,UAAWD,EACX,SAAUpG,EAAE,MACZ,UAA2B,IAAI,IACrC,EACI6B,EAAE,YAAYoE,GAAGI,CAAC,CAAC,CACrB,CACA,SAAS9D,EAAE6D,EAAGC,EAAG,CACf,GAAI,CAACxE,EAAG,OACR,MAAMyE,EAAI,CACR,KAAM,YACN,WAAY,CAAC,GAAGF,EAAGC,CAAC,EACpB,SAAUrG,EAAE,MACZ,UAA2B,IAAI,IACrC,EACI6B,EAAE,YAAYoE,GAAGK,CAAC,CAAC,CACrB,CACA,SAAS5D,EAAE0D,EAAG,CACZ,GAAI,CAACvE,EAAG,OACR,MAAMwE,EAAI,CACR,KAAM,OACN,UAAWD,EACX,SAAUpG,EAAE,MACZ,UAA2B,IAAI,IACrC,EACI6B,EAAE,YAAYoE,GAAGI,CAAC,CAAC,CACrB,CACA,SAAS1D,EAAEyD,EAAG,CACZ,GAAI,CAACvE,EAAG,OACR,MAAMwE,EAAI,CACR,KAAM,OACN,UAAWD,EACX,SAAUpG,EAAE,MACZ,UAA2B,IAAI,IACrC,EACI6B,EAAE,YAAYoE,GAAGI,CAAC,CAAC,CACrB,CACA,MAAMzD,EAAImD,GAAG,2BAA4B,KAAM,CAC7C,WAAY,CACV,KAAOK,GAAM,CACX,GAAI,CACF,OAAO,KAAK,MAAMA,CAAC,CACrB,MAAQ,CACN,OAAO,IACT,CACF,EACA,MAAQA,GAAMA,EAAI,KAAK,UAAUA,CAAC,EAAI,EAC5C,CACA,CAAG,EACD,SAAStD,GAAI,CACX,GAAI,EAAE,OAAO,OAAS,KACpB,GAAI,CACF,MAAMsD,EAAIxD,EAAE,MACZwD,GAAK,MAAM,QAAQA,EAAE,UAAU,IAAM,EAAE,MAAQA,EAAE,WAAW,IAAKC,IAAO,CACtE,GAAGA,EACH,UAAW,IAAI,KAAKA,EAAE,SAAS,CACzC,EAAU,EAAGtG,EAAE,MAAQqG,EAAE,cAAgB,GACnC,OAASA,EAAG,CACV,OAAO,QAAU,KAAO,QAAQ,MAAM,8CAA+CA,CAAC,CACxF,CACJ,CACA,SAASrD,GAAI,CACX,GAAI,EAAE,OAAO,OAAS,KACpB,GAAI,CACFH,EAAE,MAAQ,CACR,WAAY,EAAE,MAAM,IAAKwD,IAAO,CAC9B,GAAGA,EACH,UAAWA,EAAE,UAAU,YAAW,CAC9C,EAAY,EACF,aAAcrG,EAAE,KAC1B,CACM,OAASqG,EAAG,CACV,OAAO,QAAU,KAAO,QAAQ,MAAM,4CAA6CA,CAAC,CACtF,CACJ,CACA,SAASvD,GAAI,CACXK,EAAAA,MACE,CAAC,EAAGnD,CAAC,EACL,IAAM,CACJL,EAAE,MAAM,mBAAqBqD,EAAC,CAChC,EACA,CAAE,KAAM,EAAE,CAChB,CACE,CACA,MAAO,CAEL,WAAY,EACZ,aAAchD,EACd,OAAQL,EACR,SAAUM,EACV,cAAeuB,EAEf,QAASN,EACT,QAASC,EACT,UAAWC,EACX,UAAWC,EAEX,UAAWI,EACX,aAAcG,EACd,WAAYI,EACZ,YAAaC,EACb,YAAaC,EACb,KAAMC,EACN,KAAMI,EACN,MAAOW,EACP,iBAAkBnB,EAClB,YAAakB,EACb,iBAAkB6C,EAClB,UAAWC,CACf,CACA,CAAC,EACD,MAAMY,EAAG,CAIP,OAAO,MACP,QACA,eAAiC,IAAI,IAErC,mBAAqC,IAAI,IAEzC,oBAAsC,IAAI,IAE1C,cAAgC,IAAI,IAEpC,wBAA0C,IAAI,IAM9C,YAAY,EAAI,GAAI,CAClB,GAAIA,GAAG,MACL,OAAOA,GAAG,MACZA,GAAG,MAAQ,KAAM,KAAK,QAAU,CAC9B,eAAgB,EAAE,gBAAkB,IACpC,MAAO,EAAE,OAAS,GAClB,eAAgB,EAAE,gBAAkB,GACpC,aAAc,EAAE,YACtB,CACE,CAMA,eAAe,EAAG3G,EAAG,CACnB,KAAK,cAAc,IAAI,EAAGA,CAAC,CAC7B,CAMA,yBAAyB,EAAGA,EAAG,CAC7B,KAAK,wBAAwB,IAAI,EAAGA,CAAC,CACvC,CAOA,iBAAiB,EAAGA,EAAGC,EAAG,CACxB,KAAK,oBAAoB,IAAI,CAAC,GAAK,KAAK,oBAAoB,IAAI,EAAmB,IAAI,GAAK,EAAG,KAAK,oBAAoB,IAAI,CAAC,EAAE,IAAID,EAAGC,CAAC,CACzI,CAIA,iBAAiB,EAAGD,EAAG,CACrB,OAAO,KAAK,oBAAoB,IAAI,CAAC,GAAG,IAAIA,CAAC,CAC/C,CAOA,uBAAuB,EAAGA,EAAG,CAC3B,GAAI,CAACA,EAAG,OACR,MAAMC,EAAoB,IAAI,IAAOC,EAAoB,IAAI,IAC7D,GAAI,OAAOF,EAAE,UAAY,WACvBA,EAAE,SAAQ,EAAG,QAAQ,CAAC,CAACgB,EAAGC,CAAC,IAAM,CAC/B,KAAK,iBAAiBD,EAAGC,EAAGhB,EAAGC,CAAC,CAClC,CAAC,UACMF,aAAa,IACpB,SAAW,CAACgB,EAAGC,CAAC,IAAKjB,EACnB,KAAK,iBAAiBgB,EAAGC,EAAGhB,EAAGC,CAAC,OAC/BF,GAAK,OAAOA,GAAK,UAAY,OAAO,QAAQA,CAAC,EAAE,QAAQ,CAAC,CAACgB,EAAGC,CAAC,IAAM,CACtE,KAAK,iBAAiBD,EAAGC,EAAGhB,EAAGC,CAAC,CAClC,CAAC,EACD,KAAK,eAAe,IAAI,EAAGD,CAAC,EAAG,KAAK,mBAAmB,IAAI,EAAGC,CAAC,CACjE,CAKA,iBAAiB,EAAGF,EAAGC,EAAGC,EAAG,CAC3B,KAAK,gBAAgB,CAAC,EAAIA,EAAE,IAAI,EAAGF,CAAC,EAAIC,EAAE,IAAI,EAAGD,CAAC,CACpD,CAKA,gBAAgB,EAAG,CACjB,MAAO,eAAe,KAAK,CAAC,GAAK,EAAE,OAAS,CAC9C,CAMA,MAAM,qBAAqB,EAAGA,EAAI,GAAI,CACpC,KAAM,CAAE,QAASC,EAAG,UAAWC,CAAC,EAAK,EAAGc,EAAI,KAAK,kBAAkBf,EAAGC,CAAC,EACvE,GAAIc,EAAE,SAAW,EACf,MAAO,CACL,KAAM,EAAE,KACR,cAAe,CAAA,EACf,mBAAoB,EACpB,aAAc,GACd,eAAgB,GAChB,WAAY,EACpB,EACI,MAAMC,EAAI,YAAY,IAAG,EAAIC,EAAI,CAAA,EACjC,IAAIC,EAAI,GAAIC,EAAI,GAAIC,EACpB,MAAMG,EAAI,KAAK,iBAAiBvB,EAAGC,CAAC,EAAGuB,EAAIzB,EAAE,gBAAkBwB,GAAK,KAAK,QAAQ,eACjFC,GAAK,EAAE,QAAUJ,EAAI,KAAK,gBAAgB,CAAC,GAC3C,UAAWa,KAAKlB,EACd,GAAI,CACF,MAAMmB,EAAI,MAAM,KAAK,cAAcD,EAAG,EAAGlC,EAAE,OAAO,EAClD,GAAIkB,EAAE,KAAKiB,CAAC,EAAG,CAACA,EAAE,QAAS,CACzBhB,EAAI,GACJ,KACF,CACF,OAASgB,EAAG,CACV,MAAMM,EAAI,CACR,QAAS,GACT,MAAON,aAAa,MAAQA,EAAI,IAAI,MAAM,OAAOA,CAAC,CAAC,EACnD,cAAe,EACf,OAAQD,CAClB,EACQhB,EAAE,KAAKuB,CAAC,EAAGtB,EAAI,GACf,KACF,CACF,GAAIM,GAAKN,GAAKE,GAAK,EAAE,MACnB,GAAI,CACF,KAAK,gBAAgB,EAAGA,CAAC,EAAGD,EAAI,EAClC,OAASc,EAAG,CACV,QAAQ,MAAM,mCAAoCA,CAAC,CACrD,CACF,MAAMN,EAAI,YAAY,IAAG,EAAKX,EAAGe,EAAId,EAAE,OAAQgB,GAAM,CAACA,EAAE,OAAO,EAC/D,GAAIF,EAAE,OAAS,GAAK,KAAK,QAAQ,aAC/B,UAAWE,KAAKF,EACd,GAAI,CACF,KAAK,QAAQ,aAAaE,EAAE,MAAO,EAAGA,EAAE,MAAM,CAChD,OAASC,EAAG,CACV,QAAQ,MAAM,iDAAkDA,CAAC,CACnE,CACJ,MAAO,CACL,KAAM,EAAE,KACR,cAAejB,EACf,mBAAoBU,EACpB,aAAcV,EAAE,MAAOgB,GAAMA,EAAE,OAAO,EACtC,eAAgBf,EAChB,WAAYC,EACZ,SAAU,KAAK,QAAQ,OAASK,EAAIJ,EAAI,MAE9C,CACE,CAOA,MAAM,yBAAyB,EAAGrB,EAAI,GAAI,CACxC,KAAM,CAAE,QAASC,EAAG,WAAYC,CAAC,EAAK,EAAGc,EAAI,KAAK,sBAAsBf,EAAGC,CAAC,EAC5E,GAAIc,EAAE,SAAW,EACf,MAAO,CAAA,EACT,MAAMC,EAAI,CAAA,EACV,UAAWE,KAAKH,EACd,GAAI,CACF,MAAMI,EAAI,MAAM,KAAK,wBAAwBD,EAAG,EAAGnB,EAAE,OAAO,EAC5D,GAAIiB,EAAE,KAAKG,CAAC,EAAG,CAACA,EAAE,QAChB,KACJ,OAASA,EAAG,CACV,MAAMI,EAAI,CACR,QAAS,GACT,MAAOJ,aAAa,MAAQA,EAAI,IAAI,MAAM,OAAOA,CAAC,CAAC,EACnD,cAAe,EACf,OAAQD,EACR,WAAYjB,CACtB,EACQe,EAAE,KAAKO,CAAC,EACR,KACF,CACF,MAAMN,EAAID,EAAE,OAAQE,GAAM,CAACA,EAAE,OAAO,EACpC,GAAID,EAAE,OAAS,GAAK,KAAK,QAAQ,aAC/B,UAAWC,KAAKD,EACd,GAAI,CACF,KAAK,QAAQ,aAAaC,EAAE,MAAO,EAAGA,EAAE,MAAM,CAChD,OAASC,EAAG,CACV,QAAQ,MAAM,iDAAkDA,CAAC,CACnE,CACJ,OAAOH,CACT,CAIA,sBAAsB,EAAGjB,EAAG,CAC1B,MAAMC,EAAI,KAAK,mBAAmB,IAAI,CAAC,EACvC,OAAOA,EAAIA,EAAE,IAAID,CAAC,GAAK,CAAA,EAAK,CAAA,CAC9B,CAIA,MAAM,wBAAwB,EAAGA,EAAGC,EAAG,CACrC,MAAMC,EAAI,YAAY,IAAG,EAAIc,EAAIf,GAAK,KAAK,QAAQ,eACnD,GAAI,CACF,IAAIgB,EAAI,KAAK,wBAAwB,IAAI,CAAC,EAC1C,GAAI,CAACA,EAAG,CACN,MAAME,EAAI,KAAK,cAAc,IAAI,CAAC,EAClCA,IAAMF,EAAIE,EACZ,CACA,GAAI,CAACF,EACH,MAAM,IAAI,MAAM,sBAAsB,CAAC,yBAAyB,EAClE,OAAO,MAAM,KAAK,mBAAmBA,EAAGjB,EAAGgB,CAAC,EAAG,CAC7C,QAAS,GACT,cAAe,YAAY,IAAG,EAAKd,EACnC,OAAQ,EACR,WAAYF,EAAE,UACtB,CACI,OAASiB,EAAG,CACV,MAAMC,EAAI,YAAY,IAAG,EAAKhB,EAC9B,MAAO,CACL,QAAS,GACT,MAAOe,aAAa,MAAQA,EAAI,IAAI,MAAM,OAAOA,CAAC,CAAC,EACnD,cAAeC,EACf,OAAQ,EACR,WAAYlB,EAAE,UACtB,CACI,CACF,CAKA,kBAAkB,EAAGA,EAAG,CACtB,MAAMC,EAAI,KAAK,eAAe,IAAI,CAAC,EACnC,GAAI,CAACA,EAAG,MAAO,CAAA,EACf,MAAMC,EAAI,CAAA,EACV,SAAW,CAACc,EAAGC,CAAC,IAAKhB,EACnB,KAAK,kBAAkBe,EAAGhB,CAAC,GAAKE,EAAE,KAAK,GAAGe,CAAC,EAC7C,OAAOf,CACT,CAQA,kBAAkB,EAAGF,EAAG,CACtB,OAAO,IAAMA,EAAI,GAAK,EAAE,SAAS,GAAG,EAAI,KAAK,kBAAkB,EAAGA,CAAC,EAAI,EAAE,SAAS,GAAG,EAAI,KAAK,kBAAkB,EAAGA,CAAC,EAAI,EAC1H,CAKA,kBAAkB,EAAGA,EAAG,CACtB,MAAMC,EAAI,EAAE,MAAM,GAAG,EAAGC,EAAIF,EAAE,MAAM,GAAG,EACvC,GAAIC,EAAE,SAAWC,EAAE,OACjB,MAAO,GACT,QAASc,EAAI,EAAGA,EAAIf,EAAE,OAAQe,IAAK,CACjC,MAAMC,EAAIhB,EAAEe,CAAC,EAAGE,EAAIhB,EAAEc,CAAC,EACvB,GAAIC,IAAM,KAAOA,IAAMC,EACrB,MAAO,EACX,CACA,MAAO,EACT,CAIA,MAAM,cAAc,EAAGlB,EAAGC,EAAG,CAC3B,MAAMC,EAAI,YAAY,IAAG,EAAIc,EAAIf,GAAK,KAAK,QAAQ,eACnD,GAAI,CACF,MAAMgB,EAAI,KAAK,cAAc,IAAI,CAAC,EAClC,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,WAAW,CAAC,yBAAyB,EACvD,OAAO,MAAM,KAAK,mBAAmBA,EAAGjB,EAAGgB,CAAC,EAAG,CAC7C,QAAS,GACT,cAAe,YAAY,IAAG,EAAKd,EACnC,OAAQ,CAChB,CACI,OAASe,EAAG,CACV,MAAMC,EAAI,YAAY,IAAG,EAAKhB,EAC9B,MAAO,CACL,QAAS,GACT,MAAOe,aAAa,MAAQA,EAAI,IAAI,MAAM,OAAOA,CAAC,CAAC,EACnD,cAAeC,EACf,OAAQ,CAChB,CACI,CACF,CAIA,MAAM,mBAAmB,EAAGlB,EAAGC,EAAG,CAChC,OAAO,IAAI,QAAQ,CAACC,EAAGc,IAAM,CAC3B,MAAMC,EAAI,WAAW,IAAM,CACzBD,EAAE,IAAI,MAAM,wBAAwBf,CAAC,IAAI,CAAC,CAC5C,EAAGA,CAAC,EACJ,QAAQ,QAAQ,EAAED,CAAC,CAAC,EAAE,KAAMkB,GAAM,CAChC,aAAaD,CAAC,EAAGf,EAAEgB,CAAC,CACtB,CAAC,EAAE,MAAOA,GAAM,CACd,aAAaD,CAAC,EAAGD,EAAEE,CAAC,CACtB,CAAC,CACH,CAAC,CACH,CAKA,gBAAgB,EAAG,CACjB,GAAI,EAAE,CAAC,EAAE,OAAS,CAAC,EAAE,SAAW,CAAC,EAAE,UACjC,GAAI,CACF,MAAMlB,EAAI,GAAG,EAAE,OAAO,IAAI,EAAE,QAAQ,GAAIC,EAAI,EAAE,MAAM,IAAID,CAAC,EACzD,MAAO,CAACC,GAAK,OAAOA,GAAK,SAAW,OAAS,KAAK,MAAM,KAAK,UAAUA,CAAC,CAAC,CAC3E,OAASD,EAAG,CACV,KAAK,QAAQ,OAAS,QAAQ,KAAK,8CAA+CA,CAAC,EACnF,MACF,CACJ,CAKA,gBAAgB,EAAGA,EAAG,CACpB,GAAI,EAAE,CAAC,EAAE,OAAS,CAAC,EAAE,SAAW,CAAC,EAAE,UAAY,CAACA,GAC9C,GAAI,CACF,MAAMC,EAAI,GAAG,EAAE,OAAO,IAAI,EAAE,QAAQ,GACpC,EAAE,MAAM,IAAIA,EAAGD,CAAC,EAAG,KAAK,QAAQ,OAAS,QAAQ,IAAI,+BAA+BC,CAAC,oBAAoB,CAC3G,OAASA,EAAG,CACV,MAAM,QAAQ,MAAM,8CAA+CA,CAAC,EAAGA,CACzE,CACJ,CACF,CACA,SAAS2G,GAAEjH,EAAG,CACZ,OAAO,IAAIgH,GAAGhH,CAAC,CACjB,CAkCA,SAASkH,IAAK,CACZ,GAAI,CACF,OAAOT,GAAE,CACX,MAAQ,CACN,OAAO,IACT,CACF,CACA,MAAMU,CAAG,CACP,OAAO,SAKP,OAAO,aAAc,CACnB,OAAOA,EAAG,WAAaA,EAAG,SAAW,IAAIA,GAAOA,EAAG,QACrD,CAKA,aAAc,CACZ,GAAI,OAAO,WAAa,IAAK,CAC3B,MAAM,EAAI,WAAW,UAAU,MAC/B,GAAI,EACF,OAAO,CACX,CACA,GAAI,OAAO,OAAS,IAAK,CACvB,MAAM,EAAI,OAAO,UAAU,MAC3B,GAAI,EACF,OAAO,CACX,CACA,GAAI,OAAO,OAAS,KAAO,OAAQ,CACjC,MAAM,EAAI,OAAO,UAAU,MAC3B,GAAI,EACF,OAAO,CACX,CACF,CAMA,eAAe,EAAG,CAChB,MAAM9G,EAAI,KAAK,YAAW,EAC1B,GAAIA,GAAK,OAAOA,GAAK,UAAY,aAAcA,EAC7C,OAAOA,EAAE,SAAS,CAAC,CACvB,CACF,CACA,MAAM+G,EAAG,CACP,OACA,WACA,SACA,QACA,cACA,IACA,YAAY,EAAG/G,EAAGC,EAAI,GAAIC,EAAI,KAAMc,EAAG,CACrC,OAAO,KAAK,OAAS,EAAG,KAAK,WAAaf,EAAG,KAAK,SAAWC,GAAK,KAAM,KAAK,QAAUF,EAAG,KAAK,cAAgBgB,EAAG,KAAK,IAAM8F,EAAG,YAAW,EAAI,IAAI,MAAM,KAAM,CAC7J,IAAI7F,EAAGC,EAAG,CACR,GAAIA,KAAKD,EAAG,OAAOA,EAAEC,CAAC,EACtB,MAAMC,EAAI,OAAOD,CAAC,EAClB,OAAOD,EAAE,QAAQE,CAAC,CACpB,EACA,IAAIF,EAAGC,EAAGC,EAAG,CACX,MAAMC,EAAI,OAAOF,CAAC,EAClB,OAAOD,EAAE,IAAIG,EAAGD,CAAC,EAAG,EACtB,CACN,CAAK,CACH,CACA,IAAI,EAAG,CACL,OAAO,KAAK,aAAa,CAAC,CAC5B,CAEA,QAAQ,EAAG,CACT,MAAMnB,EAAI,KAAK,YAAY,CAAC,EAAGC,EAAI,KAAK,aAAa,CAAC,EAAGC,EAAIF,EAAE,MAAM,GAAG,EACxE,IAAIgB,EAAI,KAAK,QACb,OAAO,KAAK,UAAY,kBAAoBd,EAAE,QAAU,IAAMc,EAAId,EAAE,CAAC,GAAI,OAAOD,GAAK,UAAYA,IAAM,MAAQ,CAAC,KAAK,YAAYA,CAAC,EAAI,IAAI8G,GAAG9G,EAAGe,EAAGhB,EAAG,KAAK,SAAU,KAAK,aAAa,EAAI,IAAI+G,GAAG9G,EAAGe,EAAGhB,EAAG,KAAK,SAAU,KAAK,aAAa,CAC9O,CACA,IAAI,EAAGA,EAAGC,EAAI,OAAQ,CACpB,MAAMC,EAAI,KAAK,YAAY,CAAC,EAAGc,EAAI,KAAK,IAAI,CAAC,EAAI,KAAK,IAAI,CAAC,EAAI,OAC/D,GAAIf,IAAM,QAAUA,IAAM,OAAQ,CAChC,MAAMgB,EAAI4F,GAAE,EACZ,GAAI5F,GAAK,OAAOA,EAAE,cAAgB,WAAY,CAC5C,MAAMC,EAAIhB,EAAE,MAAM,GAAG,EAAGiB,EAAI,KAAK,UAAY,kBAAoBD,EAAE,QAAU,EAAIA,EAAE,CAAC,EAAI,KAAK,QAASE,EAAIF,EAAE,QAAU,EAAIA,EAAE,CAAC,EAAI,OAAQG,EAAIH,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,GAAKA,EAAEA,EAAE,OAAS,CAAC,EAAGO,EAAIzB,IAAM,QAAUgB,IAAM,OAAS,SAAW,MACpOC,EAAE,aACA,CACE,KAAMQ,EACN,KAAMvB,EACN,UAAWmB,EACX,YAAaL,EACb,WAAYhB,EACZ,QAASmB,EACT,SAAUC,EACV,WAAY,EAExB,EACUnB,CACV,CACM,CACF,CACA,KAAK,YAAY,EAAGD,CAAC,EAAG,KAAK,oBAAoBE,EAAGc,EAAGhB,CAAC,CAC1D,CACA,IAAI,EAAG,CACL,GAAI,CACF,GAAI,IAAM,GACR,MAAO,GACT,MAAMA,EAAI,KAAK,UAAU,CAAC,EAC1B,IAAIC,EAAI,KAAK,OACb,QAASC,EAAI,EAAGA,EAAIF,EAAE,OAAQE,IAAK,CACjC,MAAMc,EAAIhB,EAAEE,CAAC,EACb,GAAID,GAAK,KACP,MAAO,GACT,GAAIC,IAAMF,EAAE,OAAS,EACnB,OAAO,KAAK,YAAYC,CAAC,EAAIA,EAAE,IAAIe,CAAC,EAAI,KAAK,aAAaf,CAAC,GAAKA,EAAE,QAAUe,KAAKf,EAAE,QAAUe,KAAKf,EACpGA,EAAI,KAAK,YAAYA,EAAGe,CAAC,CAC3B,CACA,MAAO,EACT,MAAQ,CACN,MAAO,EACT,CACF,CAEA,WAAY,CACV,GAAI,CAAC,KAAK,WAAY,OAAO,KAC7B,MAAMhB,EAAI,KAAK,WAAW,MAAM,GAAG,EAAE,MAAM,EAAG,EAAE,EAAE,KAAK,GAAG,EAC1D,OAAOA,IAAM,GAAK,KAAK,SAAW,KAAK,SAAS,QAAQA,CAAC,CAC3D,CACA,SAAU,CACR,OAAO,KAAK,QACd,CACA,SAAU,CACR,OAAO,KAAK,UACd,CACA,UAAW,CACT,OAAO,KAAK,WAAa,KAAK,WAAW,MAAM,GAAG,EAAE,OAAS,CAC/D,CACA,gBAAiB,CACf,OAAO,KAAK,WAAa,KAAK,WAAW,MAAM,GAAG,EAAI,CAAA,CACxD,CAIA,MAAM,kBAAkB,EAAGA,EAAG,CAC5B,MAAMC,EAAI2G,KAAK1G,EAAI,KAAK,WAAW,MAAM,GAAG,EAC5C,IAAIc,EAAI,KAAK,QAASC,EACtB,KAAK,UAAY,kBAAoBf,EAAE,QAAU,IAAMc,EAAId,EAAE,CAAC,GAAIA,EAAE,QAAU,IAAMe,EAAIf,EAAE,CAAC,GAC3F,MAAMgB,EAAI,CACR,KAAM,KAAK,WACX,UAAW,GAEX,YAAa,OACb,WAAY,OACZ,UAAW,MACX,QAASF,EACT,SAAUC,EACV,UAA2B,IAAI,KAC/B,MAAO,KAAK,UAAY,OACxB,WAAY,EACZ,aAAcjB,GAAG,aACjB,YAAaA,GAAG,YAChB,WAAYA,GAAG,UACrB,EAAOmB,EAAI0F,GAAE,EACT,OAAO1F,GAAK,OAAOA,EAAE,cAAgB,YAAcA,EAAE,aACnD,CACE,KAAM,aACN,KAAM,KAAK,WACX,UAAW,EACX,YAAanB,GAAG,aAChB,WAAYA,GAAG,YACf,QAASgB,EACT,SAAUC,EACV,WAAY,GAEZ,SAAU,CACR,WAAY,EACZ,aAAcjB,GAAG,aACjB,YAAaA,GAAG,YAChB,WAAYA,GAAG,UACzB,CACA,EACM,MACN,EAAO,MAAMC,EAAE,yBAAyBiB,CAAC,CACvC,CAEA,YAAY,EAAG,CACb,OAAO,IAAM,GAAK,KAAK,WAAa,KAAK,WAAa,GAAG,KAAK,UAAU,IAAI,CAAC,GAAK,CACpF,CACA,aAAa,EAAG,CACd,GAAI,IAAM,GACR,OAAO,KAAK,OACd,MAAMlB,EAAI,KAAK,UAAU,CAAC,EAC1B,IAAIC,EAAI,KAAK,OACb,UAAWC,KAAKF,EAAG,CACjB,GAAIC,GAAK,KACP,OACFA,EAAI,KAAK,YAAYA,EAAGC,CAAC,CAC3B,CACA,OAAOD,CACT,CACA,YAAY,EAAGD,EAAG,CAChB,GAAI,IAAM,GACR,MAAM,IAAI,MAAM,gCAAgC,EAClD,MAAMC,EAAI,KAAK,UAAU,CAAC,EAAGC,EAAID,EAAE,IAAG,EACtC,IAAIe,EAAI,KAAK,OACb,UAAWC,KAAKhB,EACd,GAAIe,EAAI,KAAK,YAAYA,EAAGC,CAAC,EAAGD,GAAK,KACnC,MAAM,IAAI,MAAM,+CAA+C,CAAC,EAAE,EACtE,KAAK,YAAYA,EAAGd,EAAGF,CAAC,CAC1B,CACA,YAAY,EAAGA,EAAG,CAChB,OAAO,KAAK,YAAY,CAAC,EAAI,EAAE,IAAIA,CAAC,EAAI,KAAK,cAAc,CAAC,EAAI,EAAEA,CAAC,EAAI,KAAK,aAAa,CAAC,EAAI,EAAE,SAASA,CAAC,GAAK,EAAEA,CAAC,EAAI,EAAEA,CAAC,CAC3H,CACA,YAAY,EAAGA,EAAGC,EAAG,CACnB,GAAI,KAAK,YAAY,CAAC,EACpB,MAAM,IAAI,MAAM,iFAAiF,EACnG,GAAI,KAAK,aAAa,CAAC,EAAG,CACxB,EAAE,OAAS,EAAE,OAAO,CAAE,CAACD,CAAC,EAAGC,EAAG,EAAI,EAAED,CAAC,EAAIC,EACzC,MACF,CACA,EAAED,CAAC,EAAIC,CACT,CACA,MAAM,oBAAoB,EAAGD,EAAGC,EAAG,CACjC,GAAI,CACF,GAAI,CAAC,GAAK,OAAO,GAAK,SACpB,OACF,MAAMC,EAAI,EAAE,MAAM,GAAG,EACrB,GAAIA,EAAE,OAAS,EACb,OACF,MAAMc,EAAI4F,GAAC,EAAI3F,EAAIf,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,GAAKA,EAAEA,EAAE,OAAS,CAAC,EACzD,IAAIgB,EAAI,KAAK,QACb,KAAK,UAAY,kBAAoBhB,EAAE,QAAU,IAAMgB,EAAIhB,EAAE,CAAC,GAC9D,IAAIiB,EACJjB,EAAE,QAAU,IAAMiB,EAAIjB,EAAE,CAAC,GACzB,MAAMkB,EAAI,CACR,KAAM,EACN,UAAWH,EACX,YAAajB,EACb,WAAYC,EACZ,UAAW,MACX,QAASiB,EACT,SAAUC,EACV,UAA2B,IAAI,KAC/B,MAAO,KAAK,UAAY,MAEhC,EACM,MAAMH,EAAE,qBAAqBI,CAAC,CAChC,OAASlB,EAAG,CACVA,aAAa,OAAS,QAAQ,KAAK,uBAAwBA,EAAE,OAAO,CACtE,CACF,CACA,cAAc,EAAG,CACf,OAAO,GAAK,OAAO,GAAK,UAAY,mBAAoB,GAAK,EAAE,iBAAmB,EACpF,CACA,aAAa,EAAG,CACd,OAAO,GAAK,OAAO,GAAK,WAAa,WAAY,GAAK,WAAY,GAAK,QAAS,EAClF,CACA,YAAY,EAAG,CACb,GAAI,CAAC,GAAK,OAAO,GAAK,SACpB,MAAO,GACT,MAAMF,EAAI,QAAS,GAAK,OAAO,EAAE,KAAO,WAAYC,EAAI,QAAS,GAAK,OAAO,EAAE,KAAO,WAAYC,EAAI,QAAS,GAAK,OAAO,EAAE,KAAO,WAAYc,EAAI,cAAe,GAAK,SAAU,GAAK,UAAW,GAAK,YAAa,GAAK,cAAe,GAAK,mBAAoB,GAAK,UAAW,GAAK,UAAW,GAAK,SAAU,GAAKhB,GAAKC,EAC1T,IAAIgB,EACJ,GAAI,CACF,MAAME,EAAI,EACV,GAAI,gBAAiBA,GAAKA,EAAE,aAAe,OAAOA,EAAE,aAAe,UAAY,SAAUA,EAAE,YAAa,CACtG,MAAMC,EAAID,EAAE,YAAY,KACxBF,EAAI,OAAOG,GAAK,SAAWA,EAAI,MACjC,CACF,MAAQ,CACNH,EAAI,MACN,CACA,MAAMC,EAAID,IAAMA,EAAE,SAAS,KAAK,GAAKA,EAAE,SAAS,MAAM,GAAKA,EAAE,SAAS,KAAK,GAAKA,EAAE,SAAS,OAAO,GAAKA,EAAE,SAAS,KAAK,KAAOjB,GAAKC,GACnI,MAAO,CAAC,EAAED,GAAKC,GAAKC,GAAKc,GAAKhB,GAAKC,GAAKiB,EAC1C,CACA,YAAY,EAAG,CACb,OAAO,GAAK,MAAQ,OAAO,GAAK,UAAY,OAAO,GAAK,UAAY,OAAO,GAAK,WAAa,OAAO,GAAK,YAAc,OAAO,GAAK,UAAY,OAAO,GAAK,QAC7J,CAMA,UAAU,EAAG,CACX,OAAO,EAAI,EAAE,QAAQ,aAAc,KAAK,EAAE,MAAM,GAAG,EAAE,OAAQjB,GAAMA,EAAE,OAAS,CAAC,EAAI,CAAA,CACrF,CACF,CACA,SAAS+G,GAAGrH,EAAG,EAAGK,EAAG,CACnB,OAAO,IAAI+G,GAAGpH,EAAG,EAAG,GAAI,KAAMK,CAAC,CACjC,CACA,MAAMiH,EAAG,CACP,SACA,mBACA,oBAEA,SAMA,YAAY,EAAGjH,EAAG,CAChB,KAAK,SAAW,EAAG,KAAK,oBAAsBA,EAAG,KAAK,mBAAkB,EAAI,KAAK,kBAAiB,CACpG,CAKA,sBAAuB,CACrB,OAAO,KAAK,qBAAuB,KAAK,mBAAqBoG,GAAE,EAAI,KAAK,qBAAuB,KAAK,mBAAmB,UAAU,KAAK,mBAAmB,GAAI,KAAK,kBACpK,CAIA,oBAAqB,CACnB,MAAM,EAAI,CAAA,EACV,OAAO,KAAK,KAAK,SAAS,QAAQ,EAAE,QAASpG,GAAM,CACjD,EAAEA,CAAC,EAAI,CAAA,CACT,CAAC,EAAG,KAAK,SAAWgH,GAAG5D,WAAG,CAAC,EAAG,gBAAgB,CAChD,CAIA,mBAAoB,CAClB,MAAM,EAAI,KAAK,SAAS,WAAW,KAAK,KAAK,QAAQ,EACrD,KAAK,SAAS,WAAcpD,GAAM,CAChC,EAAEA,CAAC,EAAG,KAAK,SAAS,IAAIA,EAAE,IAAI,GAAK,KAAK,SAAS,IAAIA,EAAE,KAAM,CAAA,CAAE,CACjE,CACF,CAMA,QAAQ,EAAG,CACT,MAAMA,EAAI,OAAO,GAAK,SAAW,EAAI,EAAE,KACvC,OAAO,KAAK,oBAAoBA,CAAC,EAAG,KAAK,SAAS,QAAQA,CAAC,CAC7D,CAOA,UAAU,EAAGA,EAAGC,EAAG,CACjB,MAAMC,EAAI,OAAO,GAAK,SAAW,EAAI,EAAE,KACvC,KAAK,oBAAoBA,CAAC,EAAG,KAAK,SAAS,IAAI,GAAGA,CAAC,IAAIF,CAAC,GAAIC,CAAC,CAC/D,CAOA,cAAc,EAAGD,EAAG,CAClB,MAAMC,EAAI,OAAO,GAAK,SAAW,EAAI,EAAE,KACvC,GAAI,KAAK,oBAAoBA,CAAC,EAAG,EAAE,CAAC,KAAK,SAAS,IAAI,GAAGA,CAAC,IAAID,CAAC,EAAE,GAAK,KAAK,SAAS,IAAI,GAAGC,CAAC,IAAID,CAAC,EAAE,IAAM,QACvG,OAAO,KAAK,SAAS,QAAQ,GAAGC,CAAC,IAAID,CAAC,EAAE,CAC5C,CAMA,aAAa,EAAGA,EAAG,CACjB,MAAMC,EAAI,OAAO,GAAK,SAAW,EAAI,EAAE,KACvC,KAAK,oBAAoBA,CAAC,EAAG,KAAK,SAAS,IAAI,GAAGA,CAAC,IAAID,CAAC,EAAE,GAAK,KAAK,SAAS,IAAI,GAAGC,CAAC,IAAID,CAAC,GAAI,MAAM,CACtG,CAMA,aAAa,EAAG,CACd,MAAMA,EAAI,OAAO,GAAK,SAAW,EAAI,EAAE,KACvC,KAAK,oBAAoBA,CAAC,EAC1B,MAAMC,EAAI,KAAK,SAAS,IAAID,CAAC,EAC7B,MAAO,CAACC,GAAK,OAAOA,GAAK,SAAW,CAAA,EAAK,OAAO,KAAKA,CAAC,EAAE,OAAQC,GAAMD,EAAEC,CAAC,IAAM,MAAM,CACvF,CAKA,aAAa,EAAG,CACd,MAAMF,EAAI,OAAO,GAAK,SAAW,EAAI,EAAE,KACvC,KAAK,oBAAoBA,CAAC,EAAG,KAAK,aAAaA,CAAC,EAAE,QAASE,GAAM,CAC/D,KAAK,SAAS,IAAI,GAAGF,CAAC,IAAIE,CAAC,GAAI,MAAM,CACvC,CAAC,CACH,CAKA,MAAM,EAAG,CACP,KAAK,oBAAoB,EAAE,IAAI,CACjC,CAQA,UAAU,EAAGF,EAAGC,EAAG,CACjB,MAAMe,EAAI,KAAK,SAAS,SAAS,EAAE,IAAI,GAAG,SAAS,IAAIhB,CAAC,EAAG,EAAI,MAAM,QAAQC,CAAC,EAAIA,EAAE,OAAQoB,GAAM,OAAOA,GAAK,QAAQ,EAAI,OAAQH,EAAI,KAAK,qBAAoB,EAC/J,IAAIC,EAAI,UAAWC,EACnB,GAAI,CACFJ,GAAKA,EAAE,OAAS,GAAKA,EAAE,QAASK,GAAM,CACpC,GAAI,CACF,IAAI,SAAS,OAAQA,CAAC,EAAEpB,CAAC,CAC3B,OAASuB,EAAG,CACV,MAAML,EAAI,UAAWC,EAAII,aAAa,MAAQA,EAAE,QAAU,gBAAiBA,CAC7E,CACF,CAAC,CACH,MAAQ,CACR,QAAC,CACCN,EAAE,UAAU,EAAE,QAASlB,EAAG,EAAGmB,EAAGC,CAAC,CACnC,CACF,CAKA,MAAM,WAAW,EAAG,EACjB,MAAO,MAAM,MAAM,IAAI,EAAE,IAAI,EAAE,GAAG,KAAI,GAAI,QAASlB,GAAM,CACxDA,EAAE,IAAM,KAAK,UAAU,EAAGA,EAAE,GAAIA,CAAC,CACnC,CAAC,CACH,CAMA,MAAM,UAAU,EAAGF,EAAG,CACpB,MAAME,EAAI,MAAO,MAAM,MAAM,IAAI,EAAE,IAAI,IAAIF,CAAC,EAAE,GAAG,KAAI,EACrD,KAAK,UAAU,EAAGA,EAAGE,CAAC,CACxB,CAKA,oBAAoB,EAAG,CACrB,KAAK,SAAS,IAAI,CAAC,GAAK,KAAK,SAAS,IAAI,EAAG,EAAE,CACjD,CAMA,MAAM,QAAQ,EAAG,CACf,GAAI,CAAC,KAAK,SAAS,QACjB,MAAM,IAAI,MAAM,0CAA0C,EAC5D,OAAO,MAAM,KAAK,SAAS,QAAQ,CAAC,CACtC,CAKA,UAAW,CACT,OAAO,KAAK,QACd,CACF,CACA,SAASgH,GAAGvH,EAAG,CACbA,IAAMA,EAAI,IACV,MAAM,EAAIA,EAAE,UAAY+D,EAAAA,OAAG,WAAW,EAAG1D,EAAI0D,EAAAA,OAAG,YAAY,EAAGzD,EAAIsB,EAAAA,IAAC,EAAIrB,EAAIqB,EAAAA,IAAC,EAAIP,EAAIO,EAAAA,IAAE,CAAA,CAAE,EAAGN,EAAIM,EAAAA,MAAKL,EAAIK,EAAAA,IAAC,EAAIJ,EAAII,EAAAA,IAAE,CAAA,CAAE,EACtH,GAAI5B,EAAE,SAAW,EAAG,CAClB,MAAMoD,EAAIpD,EAAE,QAAQ,OAAS,MAAM,QAAQA,EAAE,QAAQ,MAAM,EAAIA,EAAE,QAAQ,OAAS,MAAM,KAAKA,EAAE,QAAQ,MAAM,EAAI,CAAA,EACjHwB,EAAE,MAAQ,EAAE,cAAc4B,CAAC,CAC7B,CACA,MAAM3B,EAAIG,MAAE,CAAA,CAAE,EAAGF,EAAIE,EAAAA,IAAE,EAAE,EAAGC,EAAIG,WAAE,IAAM1B,EAAE,OAAO,uBAAuB,SAAW,EAAE,EAAGwB,EAAIE,EAAAA,SAAE,IAAM1B,EAAE,OAAO,qBAAoB,EAAG,SAAW,EAAE,EAAG2B,EAAID,EAAAA,SAAE,IAAM1B,EAAE,OAAO,qBAAoB,EAAG,WAAa,CAAC,EAAG+B,EAAIL,EAAAA,SAAE,IAAM1B,EAAE,OAAO,qBAAoB,EAAG,WAAa,CAAC,EAAGgC,EAAIN,EAAAA,SAChR,IAAM1B,EAAE,OAAO,qBAAoB,EAAG,eAAiB,CACrD,QAAS,GACT,QAAS,GACT,UAAW,EACX,UAAW,EACX,aAAc,EACpB,CACA,EAAKiC,EAAKa,GAAM9C,EAAE,OAAO,uBAAuB,KAAK8C,CAAC,GAAK,GAAIZ,EAAKY,GAAM9C,EAAE,OAAO,qBAAoB,EAAG,KAAK8C,CAAC,GAAK,GAAIR,EAAI,IAAM,CAC/HtC,EAAE,OAAO,qBAAoB,EAAG,WAAU,CAC5C,EAAGwC,EAAKM,GAAM9C,EAAE,OAAO,qBAAoB,EAAG,YAAY8C,CAAC,GAAK,KAAML,EAAI,IAAM,CAC9EzC,EAAE,OAAO,qBAAoB,EAAG,YAAW,CAC7C,EAAGgD,EAAI,IAAM,CACXhD,EAAE,OAAO,qBAAoB,EAAG,MAAK,CACvC,EAAGiD,EAAI,CAACH,EAAGC,IAAM/C,EAAE,OAAO,qBAAoB,EAAG,iBAAiB8C,EAAGC,CAAC,GAAK,CAAA,EAAIjB,EAAI,IAAM9B,EAAE,OAAO,uBAAuB,eAAiB,CACxI,WAAY,CAAA,EACZ,aAAc,GACd,gBAAiB,EACjB,qBAAsB,EACtB,uBAAwB,CAC5B,EAAK6F,EAAI,CAAC/C,EAAGC,IAAM,CACf/C,EAAE,OAAO,qBAAoB,EAAG,iBAAiB8C,EAAGC,CAAC,CACvD,EAAG+C,EAAI,CAAChD,EAAGC,EAAGF,EAAGuD,EAAI,UAAWC,IAAMrG,EAAE,OAAO,qBAAoB,EAAG,UAAU8C,EAAGC,EAAGF,EAAGuD,EAAGC,CAAC,GAAK,GAAIxE,EAAKiB,GAAM,CAC/G9C,EAAE,OAAO,uBAAuB,UAAU8C,CAAC,CAC7C,EACA8B,EAAAA,UAAG,SAAY,CACb,GAAI,EAAG,CACL5E,EAAE,MAAQD,GAAK,IAAIiH,GAAG,CAAC,EACvB,GAAI,CACF,MAAMlE,EAAI9C,EAAE,MAAM,qBAAoB,EAAI+C,EAAIY,GAAGb,CAAC,EAClD3B,EAAE,MAAQ4B,EAAE,WAAW,MAAO3B,EAAE,MAAQ2B,EAAE,aAAa,MAAOG,EAAAA,MAC5D,IAAMH,EAAE,WAAW,MAClBF,GAAM,CACL1B,EAAE,MAAQ0B,CACZ,CACV,EAAWK,EAAAA,MACD,IAAMH,EAAE,aAAa,MACpBF,GAAM,CACLzB,EAAE,MAAQyB,CACZ,CACV,CACM,MAAQ,CACR,CACA,GAAI,CAACnD,EAAE,SAAW,EAAE,OAAQ,CAC1B,MAAMoD,EAAI,EAAE,OAAO,aAAa,MAChC,GAAI,CAACA,EAAE,KAAM,OACb,MAAMC,EAAID,EAAE,KAAK,MAAM,GAAG,EAAE,OAAQsD,GAAMA,EAAE,OAAS,CAAC,EAAGvD,EAAIE,EAAE,CAAC,GAAG,YAAW,EAC9E,GAAIA,EAAE,OAAS,EAAG,CAChB,MAAMqD,EAAI,CACR,KAAMtD,EAAE,KACR,SAAUC,CACtB,EAAasD,EAAI,MAAM,EAAE,UAAUD,CAAC,EAC1B,GAAIC,EAAG,CACL,GAAI,EAAE,WAAWA,CAAC,EAAGrG,EAAE,MAAM,MAAMqG,CAAC,EAAGrF,EAAE,MAAQqF,EAAGpF,EAAE,MAAQ4B,EAAG5C,EAAE,MAAQD,EAAE,MAAM,SAAQ,EAAI,EAAG,CAChG,MAAMsG,EAAID,EAAE,OAAS,MAAM,QAAQA,EAAE,MAAM,EAAIA,EAAE,OAAS,MAAM,KAAKA,EAAE,MAAM,EAAI,CAAA,EACjFnF,EAAE,MAAQ,EAAE,cAAcoF,CAAC,CAC7B,CACA,GAAIzD,GAAKA,IAAM,MAAO,CACpB,MAAMyD,EAAItG,EAAE,MAAM,cAAcqG,EAAGxD,CAAC,EACpC,GAAIyD,EACFvF,EAAE,MAAQuF,EAAE,IAAI,EAAE,GAAK,CAAA,MAEvB,IAAI,CACF,MAAMtG,EAAE,MAAM,UAAUqG,EAAGxD,CAAC,EAC5B,MAAM0D,EAAIvG,EAAE,MAAM,cAAcqG,EAAGxD,CAAC,EACpC0D,IAAMxF,EAAE,MAAQwF,EAAE,IAAI,EAAE,GAAK,GAC/B,MAAQ,CACNxF,EAAE,MAAQmG,EAAEb,CAAC,CACf,CACJ,MACEtF,EAAE,MAAQmG,EAAEb,CAAC,EACfpG,EAAE,OAASkH,GAAGd,EAAGxD,GAAK,MAAO9B,EAAGd,EAAE,KAAK,EAAGD,EAAE,MAAM,UAAUqG,EAAG,OAAQxD,EAAI,CAACA,CAAC,EAAI,MAAM,CACzF,CACF,CACF,CACA,GAAInD,EAAE,QAAS,CACbO,EAAE,MAAQD,EAAE,MAAM,SAAQ,EAC1B,MAAM8C,EAAIpD,EAAE,QAASqD,EAAIrD,EAAE,SAC3B,GAAIqD,GAAKA,IAAM,MAAO,CACpB,MAAMF,EAAI7C,EAAE,MAAM,cAAc8C,EAAGC,CAAC,EACpC,GAAIF,EACF9B,EAAE,MAAQ8B,EAAE,IAAI,EAAE,GAAK,CAAA,MAEvB,IAAI,CACF,MAAM7C,EAAE,MAAM,UAAU8C,EAAGC,CAAC,EAC5B,MAAMqD,EAAIpG,EAAE,MAAM,cAAc8C,EAAGC,CAAC,EACpCqD,IAAMrF,EAAE,MAAQqF,EAAE,IAAI,EAAE,GAAK,GAC/B,MAAQ,CACNrF,EAAE,MAAQmG,EAAEpE,CAAC,CACf,CACJ,MACE/B,EAAE,MAAQmG,EAAEpE,CAAC,EACf7C,EAAE,OAASkH,GAAGrE,EAAGC,GAAK,MAAOhC,EAAGd,EAAE,KAAK,CACzC,CACF,CACF,CAAC,EACD,MAAMkC,EAAI,CAACW,EAAGC,IAAM,CAClB,MAAMF,EAAInD,EAAE,SAAWsB,EAAE,MACzB,GAAI,CAAC6B,EAAG,MAAO,GACf,MAAMuD,EAAIrD,GAAKrD,EAAE,UAAYuB,EAAE,OAAS,MACxC,MAAO,GAAG4B,EAAE,IAAI,IAAIuD,CAAC,IAAItD,CAAC,EAC5B,EAAGV,EAAKU,GAAM,CACZ,MAAMC,EAAIrD,EAAE,SAAWsB,EAAE,MACzB,GAAI,EAAE,CAACf,EAAE,OAAS,CAACD,EAAE,OAAS,CAAC+C,GAC7B,GAAI,CACF,MAAMF,EAAIC,EAAE,KAAK,MAAM,GAAG,EAC1B,GAAID,EAAE,QAAU,EAAG,CACjB,MAAMyD,EAAIzD,EAAE,CAAC,EAAG0D,EAAI1D,EAAE,CAAC,EACvB,GAAI5C,EAAE,MAAM,IAAI,GAAGqG,CAAC,IAAIC,CAAC,EAAE,GAAKvG,EAAE,MAAM,UAAU+C,EAAGwD,EAAG,CAAE,GAAGxF,EAAE,KAAK,CAAE,EAAG8B,EAAE,OAAS,EAAG,CACrF,MAAM4D,EAAI,GAAGH,CAAC,IAAIC,CAAC,GAAIC,EAAI3D,EAAE,MAAM,CAAC,EACpC,IAAIuE,EAAIX,EACR,QAASY,EAAI,EAAGA,EAAIb,EAAE,OAAS,EAAGa,IAChC,GAAID,GAAK,IAAIZ,EAAEa,CAAC,CAAC,GAAI,CAACpH,EAAE,MAAM,IAAImH,CAAC,EAAG,CACpC,MAAME,EAAKd,EAAEa,EAAI,CAAC,EAAGE,EAAK,CAAC,MAAM,OAAOD,CAAE,CAAC,EAC3CrH,EAAE,MAAM,IAAImH,EAAGG,EAAK,CAAA,EAAK,EAAE,CAC7B,CACJ,CACF,CACAtH,EAAE,MAAM,IAAI6C,EAAE,KAAMA,EAAE,KAAK,EAC3B,MAAMsD,EAAItD,EAAE,UAAU,MAAM,GAAG,EAAGuD,EAAI,CAAE,GAAGtF,EAAE,KAAK,EAClDqF,EAAE,SAAW,EAAIC,EAAED,EAAE,CAAC,CAAC,EAAItD,EAAE,MAAQ0E,GAAGnB,EAAGD,EAAGtD,EAAE,KAAK,EAAG/B,EAAE,MAAQsF,CACpE,MAAQ,CACR,CACJ,GACC3G,EAAE,SAAW,GAAG,UAAY+H,EAAAA,QAAG,kBAAmBtF,CAAC,EAAGsF,EAAAA,QAAG,mBAAoBrF,CAAC,GAC/E,MAAMG,EAAI,CAACO,EAAGC,EAAGF,IAAM,CACrB,GAAI,CAAC7C,EAAE,MACL,OAAOkH,EAAEnE,CAAC,EACZ,GAAIF,EACF,GAAI,CACF,MAAMuD,EAAInG,EAAE,OAAO,IAAI6C,CAAC,EACxB,OAAOsD,GAAK,OAAOA,GAAK,SAAWA,EAAIc,EAAEnE,CAAC,CAC5C,MAAQ,CACN,OAAOmE,EAAEnE,CAAC,CACZ,CACF,OAAOmE,EAAEnE,CAAC,CACZ,EAAGL,EAAI,MAAOI,EAAGC,IAAM,CACrB,GAAI,CAAC9C,EAAE,OAAS,CAACD,EAAE,MACjB,MAAM,IAAI,MAAM,2BAA2B,EAC7C,MAAM6C,EAAI,GAAGC,EAAE,IAAI,IAAIC,CAAC,GAAIsD,EAAI,CAAE,GAAGpG,EAAE,MAAM,IAAI4C,CAAC,GAAK,CAAA,GAAMyD,EAAIxD,EAAE,OAAS,MAAM,QAAQA,EAAE,MAAM,EAAIA,EAAE,OAAS,MAAM,KAAKA,EAAE,MAAM,EAAI,GAAI2D,GAAK,EAAI,EAAE,cAAcH,CAAC,EAAIA,GAAG,OAC1KE,GAAM,cAAeA,GAAKA,EAAE,YAAc,WAAa,WAAYA,GAAK,MAAM,QAAQA,EAAE,MAAM,CACrG,EACI,UAAWA,KAAKC,EAAG,CACjB,MAAMW,EAAIZ,EAAGa,EAAI,GAAGxE,CAAC,IAAIuE,EAAE,SAAS,GAAIE,EAAKI,GAAGN,EAAE,OAAQC,EAAGpH,EAAE,KAAK,EACpEoG,EAAEe,EAAE,SAAS,EAAIE,CACnB,CACA,OAAOjB,CACT,EAAG1D,EAAI,CAACG,EAAGC,KAAO,CAChB,eAAiBsD,GAAM,GAAGvD,CAAC,IAAIuD,CAAC,GAChC,gBAAkBA,GAAM,CACtB,MAAM,EAAIA,EAAE,KAAK,WAAWvD,CAAC,EAAIuD,EAAE,KAAO,GAAGvD,CAAC,IAAIuD,EAAE,SAAS,GAC7DjE,EAAE,CACA,GAAGiE,EACH,KAAM,CACd,CAAO,CACH,CACJ,GAAMzD,EAAI,CACN,WAAYzB,EACZ,aAAcC,EACd,cAAeY,EACf,QAAST,EACT,QAASC,EACT,UAAWG,EACX,UAAWI,EACX,KAAME,EACN,KAAMC,EACN,WAAYI,EACZ,YAAaE,EACb,YAAaC,EACb,MAAOO,EACP,iBAAkBC,EAClB,YAAanB,EACb,iBAAkB+D,EAClB,UAAWC,EACX,UAAWjE,CACf,EACE,OAAOnC,EAAE,QAAU,CACjB,UAAWM,EACX,aAAc4C,EACd,eAAgBT,EAChB,gBAAiBC,EACjB,SAAUnC,EACV,SAAUc,EACV,eAAgBG,EAChB,eAAgBqB,EAChB,cAAeG,EACf,oBAAqBC,CACzB,EAAM,CAACjD,EAAE,SAAW,GAAG,OAAS,CAC5B,UAAWM,EACX,aAAc4C,EACd,eAAgBT,EAChB,gBAAiBC,EACjB,SAAUnC,EACV,SAAUc,EACV,eAAgBG,EAChB,eAAgBqB,EAChB,cAAeG,EACf,oBAAqBC,CACzB,EAAM,CACF,UAAW3C,EACX,aAAc4C,CAClB,CACA,CACA,SAASsE,EAAExH,EAAG,CACZ,MAAM,EAAI,CAAA,EACV,OAAOA,EAAE,QAAUA,EAAE,OAAO,QAASK,GAAM,CACzC,OAAQ,cAAeA,EAAIA,EAAE,UAAY,OAAM,CAC7C,IAAK,OACL,IAAK,OACH,EAAEA,EAAE,SAAS,EAAI,GACjB,MACF,IAAK,QACH,EAAEA,EAAE,SAAS,EAAI,GACjB,MACF,IAAK,MACL,IAAK,QACH,EAAEA,EAAE,SAAS,EAAI,EACjB,MACF,IAAK,QACH,EAAEA,EAAE,SAAS,EAAI,CAAA,EACjB,MACF,IAAK,OACH,EAAEA,EAAE,SAAS,EAAI,CAAA,EACjB,MACF,QACE,EAAEA,EAAE,SAAS,EAAI,IACzB,CACE,CAAC,EAAG,CACN,CACA,SAASoH,GAAGzH,EAAG,EAAGK,EAAGC,EAAG,CACtBkD,EAAAA,MACEnD,EACCE,GAAM,CACL,MAAMc,EAAI,GAAGrB,EAAE,IAAI,IAAI,CAAC,GACxB,OAAO,KAAKO,CAAC,EAAE,QAASe,GAAM,CAC5B,MAAMC,EAAI,GAAGF,CAAC,IAAIC,CAAC,GACnB,GAAI,CACFhB,EAAE,IAAIiB,EAAGhB,EAAEe,CAAC,CAAC,CACf,MAAQ,CACR,CACF,CAAC,CACH,EACA,CAAE,KAAM,EAAE,CACd,CACA,CACA,SAASwG,GAAG9H,EAAG,EAAGK,EAAG,CACnB,IAAIC,EAAIN,EACR,QAASqB,EAAI,EAAGA,EAAI,EAAE,OAAS,EAAGA,IAAK,CACrC,MAAMC,EAAI,EAAED,CAAC,GACZ,EAAEC,KAAKhB,IAAM,OAAOA,EAAEgB,CAAC,GAAK,YAAchB,EAAEgB,CAAC,EAAI,MAAM,OAAO,EAAED,EAAI,CAAC,CAAC,CAAC,EAAI,GAAK,CAAA,GAAKf,EAAIA,EAAEgB,CAAC,CAC/F,CACA,MAAMf,EAAI,EAAE,EAAE,OAAS,CAAC,EACxBD,EAAEC,CAAC,EAAIF,CACT,CACA,SAAS2H,GAAGhI,EAAG,EAAGK,EAAG,CACnB,MAAME,EAAI,CAAE,GAAGF,EAAE,IAAI,CAAC,GAAK,EAAE,EAAIgB,EAAIrB,EAAE,OACpC,GAAM,cAAe,GAAK,EAAE,YAAc,WAAa,WAAY,GAAK,MAAM,QAAQ,EAAE,MAAM,CACnG,EACE,UAAW,KAAKqB,EAAG,CACjB,MAAME,EAAI,EAAGC,EAAI,GAAG,CAAC,IAAID,EAAE,SAAS,GAAIE,EAAIuG,GAAGzG,EAAE,OAAQC,EAAGnB,CAAC,EAC7DE,EAAEgB,EAAE,SAAS,EAAIE,CACnB,CACA,OAAOlB,CACT,CC7+DA,OAAO,kBAAoB,KAAO,sBAAsB,kBAgXxD,SAASuF,GAAG1G,EAAGiB,EAAG,CAChB,OAAOmF,EAAAA,gBAAE,GAAM3B,EAAAA,eAAGzE,EAAGiB,CAAC,EAAG,IAAM,EACjC,CAEA,OAAO,kBAAoB,KAAO,sBAAsB,kBACnD,MAAsG0H,GAAK,IAAM,CACtH,EACA,SAASE,MAAM7I,EAAG,CAChB,GAAIA,EAAE,SAAW,EAAG,OAAO8I,EAAAA,MAAG,GAAG9I,CAAC,EAClC,MAAMiB,EAAIjB,EAAE,CAAC,EACb,OAAO,OAAOiB,GAAK,WAAagF,EAAAA,SAAGmB,EAAAA,UAAG,KAAO,CAC3C,IAAKnG,EACL,IAAK0H,EACT,EAAI,CAAC,EAAIjF,EAAAA,IAAEzC,CAAC,CACZ,CAySA,SAAS4E,GAAG7F,EAAG,CACb,OAAO,OAAO,OAAS,KAAOA,aAAa,OAASA,EAAE,SAAS,gBAAkB,OAAO,SAAW,KAAOA,aAAa,SAAWA,EAAE,gBAAkBA,CACxJ,CACA,MAAM+I,GAAqB,IAAI,QAC/B,SAASC,GAAGhJ,EAAGiB,EAAI,GAAI,CACrB,MAAML,EAAIc,EAAAA,WAAGT,CAAC,EACd,IAAIE,EAAI,GACR6E,EAAAA,MAAE6C,GAAG7I,CAAC,EAAI,GAAM,CACd,MAAMuH,EAAI1B,GAAGhD,EAAAA,QAAE,CAAC,CAAC,EACjB,GAAI0E,EAAG,CACL,MAAMrF,EAAIqF,EACV,GAAIwB,GAAG,IAAI7G,CAAC,GAAK6G,GAAG,IAAI7G,EAAGA,EAAE,MAAM,QAAQ,EAAGA,EAAE,MAAM,WAAa,WAAaf,EAAIe,EAAE,MAAM,UAAWA,EAAE,MAAM,WAAa,SAAU,OAAOtB,EAAE,MAAQ,GACvJ,GAAIA,EAAE,MAAO,OAAOsB,EAAE,MAAM,SAAW,QACzC,CACF,EAAG,CAAE,UAAW,GAAI,EACpB,MAAMC,EAAI,IAAM,CACd,MAAM,EAAI0D,GAAGhD,EAAAA,QAAE7C,CAAC,CAAC,EACjB,CAAC,GAAKY,EAAE,QAAU,EAAE,MAAM,SAAW,SAAUA,EAAE,MAAQ,GAC3D,EAAGM,EAAI,IAAM,CACX,MAAM,EAAI2E,GAAGhD,EAAAA,QAAE7C,CAAC,CAAC,EACjB,CAAC,GAAK,CAACY,EAAE,QAAU,EAAE,MAAM,SAAWO,EAAG4H,GAAG,OAAO,CAAC,EAAGnI,EAAE,MAAQ,GACnE,EACA,OAAO8F,GAAGxF,CAAC,EAAG2C,WAAE,CACd,KAAM,CACJ,OAAOjD,EAAE,KACX,EACA,IAAI,EAAG,CACL,EAAIuB,EAAC,EAAKjB,EAAC,CACb,CACJ,CAAG,CACH,CAmtBA,SAAS+H,IAAK,CACZ,IAAIjJ,EAAI,GACR,MAAMiB,EAAIS,EAAAA,WAAG,EAAE,EACf,MAAO,CAACd,EAAGO,IAAM,CACf,GAAIF,EAAE,MAAQE,EAAE,MAAOnB,EAAG,OAC1BA,EAAI,GACJ,MAAMmC,EAAI6G,GAAGpI,EAAGO,EAAE,KAAK,EACvB6E,EAAAA,MAAE/E,EAAIC,GAAMiB,EAAE,MAAQjB,CAAC,CACzB,CACF,CACA+H,GAAE,EA26BG,MA0CD5H,GAAK,CAACrB,EAAGiB,IAAM,CACjB,MAAML,EAAIZ,EAAE,WAAaA,EACzB,SAAW,CAACmB,EAAGgB,CAAC,IAAKlB,EACnBL,EAAEO,CAAC,EAAIgB,EACT,OAAOvB,CACT,EAmEA,SAASsI,GAAGlJ,EAAGiB,EAAG,CAChB,OAAOmF,EAAAA,gBAAE,GAAM3B,EAAAA,eAAGzE,EAAGiB,CAAC,EAAG,IAAM,EACjC,CAoBA,OAAO,kBAAoB,KAAO,sBAAsB,kBACnD,MAA+EJ,GAAK,IAAM,CAC/F,EACA,SAASsI,MAAMnJ,EAAG,CAChB,GAAIA,EAAE,SAAW,EAAG,OAAO8I,EAAAA,MAAG,GAAG9I,CAAC,EAClC,MAAMiB,EAAIjB,EAAE,CAAC,EACb,OAAO,OAAOiB,GAAK,WAAagF,EAAAA,SAAGmB,EAAAA,UAAG,KAAO,CAC3C,IAAKnG,EACL,IAAKJ,EACT,EAAI,CAAC,EAAI6C,EAAAA,IAAEzC,CAAC,CACZ,CAqJA,SAASmI,GAAGpJ,EAAG,CACb,OAAO,OAAO,OAAS,KAAOA,aAAa,OAASA,EAAE,SAAS,gBAAkB,OAAO,SAAW,KAAOA,aAAa,SAAWA,EAAE,gBAAkBA,CACxJ,CACA,MAAMqJ,GAAqB,IAAI,QAC/B,SAASC,GAAGtJ,EAAGiB,EAAI,GAAI,CACrB,MAAML,EAAIc,EAAAA,WAAGT,CAAC,EACd,IAAIE,EAAI,GACR6E,EAAAA,MAAEmD,GAAGnJ,CAAC,EAAI,GAAM,CACd,MAAMuH,EAAI6B,GAAGvG,EAAAA,QAAE,CAAC,CAAC,EACjB,GAAI0E,EAAG,CACL,MAAMrF,EAAIqF,EACV,GAAI8B,GAAG,IAAInH,CAAC,GAAKmH,GAAG,IAAInH,EAAGA,EAAE,MAAM,QAAQ,EAAGA,EAAE,MAAM,WAAa,WAAaf,EAAIe,EAAE,MAAM,UAAWA,EAAE,MAAM,WAAa,SAAU,OAAOtB,EAAE,MAAQ,GACvJ,GAAIA,EAAE,MAAO,OAAOsB,EAAE,MAAM,SAAW,QACzC,CACF,EAAG,CAAE,UAAW,GAAI,EACpB,MAAMC,EAAI,IAAM,CACd,MAAM,EAAIiH,GAAGvG,EAAAA,QAAE7C,CAAC,CAAC,EACjB,CAAC,GAAKY,EAAE,QAAU,EAAE,MAAM,SAAW,SAAUA,EAAE,MAAQ,GAC3D,EAAGM,EAAI,IAAM,CACX,MAAM,EAAIkI,GAAGvG,EAAAA,QAAE7C,CAAC,CAAC,EACjB,CAAC,GAAK,CAACY,EAAE,QAAU,EAAE,MAAM,SAAWO,EAAGkI,GAAG,OAAO,CAAC,EAAGzI,EAAE,MAAQ,GACnE,EACA,OAAOsI,GAAGhI,CAAC,EAAG2C,WAAE,CACd,KAAM,CACJ,OAAOjD,EAAE,KACX,EACA,IAAI,EAAG,CACL,EAAIuB,EAAC,EAAKjB,EAAC,CACb,CACJ,CAAG,CACH,CAiBA,SAASqI,IAAK,CACZ,IAAIvJ,EAAI,GACR,MAAMiB,EAAIS,EAAAA,WAAG,EAAE,EACf,MAAO,CAACd,EAAGO,IAAM,CACf,GAAIF,EAAE,MAAQE,EAAE,MAAOnB,EAAG,OAC1BA,EAAI,GACJ,MAAMmC,EAAImH,GAAG1I,EAAGO,EAAE,KAAK,EACvB6E,EAAAA,MAAE/E,EAAIC,GAAMiB,EAAE,MAAQjB,CAAC,CACzB,CACF,CACAqI,GAAE,EA0GF,OAAO,kBAAoB,KAAO,sBAAsB,kBAgXnD,MAsHgEC,GAAK,CAAE,MAAO,OAAO,EAAIC,GAAK,CACjG,IAAK,EACL,MAAO,sBACT,EAAGC,GAAK,CACN,IAAK,EACL,MAAO,oBACT,EAAGC,GAAqB7I,kBAAE,CACxB,OAAQ,QACR,MAAuBH,EAAAA,YAAG,CACxB,OAAQ,CAAA,EACR,SAAU,CAAE,KAAM,OAAO,CAC7B,EAAK,CACD,KAAM,CAAE,SAAU,EAAE,EACpB,cAAe,CAAA,CACnB,CAAG,EACD,MAAuBA,EAAAA,YAAG,CAAC,gBAAiB,aAAa,EAAG,CAAC,aAAa,CAAC,EAC3E,MAAMX,EAAG,CAAE,KAAMiB,CAAC,EAAI,CACpB,MAAML,EAAIK,EAAGE,EAAIkF,EAAAA,SAAGrG,EAAG,MAAM,EAAGmC,EAAIuB,EAAAA,IAAE,EAAE,EACxCnC,EAAAA,YAAG,IAAM,CACP,CAACvB,EAAE,QAAU,CAACmB,EAAE,OAASnB,EAAE,OAAO,QAASkC,GAAM,CAC/C,WAAYA,GAAK,MAAM,QAAQA,EAAE,MAAM,GAAKA,EAAE,OAAO,OAAS,IAAM,CAACC,EAAE,MAAMD,EAAE,SAAS,GAAKf,EAAE,MAAMe,EAAE,SAAS,EAAIC,EAAE,MAAMD,EAAE,SAAS,EAAIf,EAAE,MAAMe,EAAE,SAAS,EAAIC,EAAE,MAAMD,EAAE,SAAS,IAAMC,EAAE,MAAMD,EAAE,SAAS,EAAI,CAAA,GACpN,CAAC,CACH,CAAC,EAAGX,EAAAA,YAAG,IAAM,CACX,OAAO,KAAKY,EAAE,KAAK,EAAE,QAASD,GAAM,CAClCf,EAAE,OAASgB,EAAE,MAAMD,CAAC,IAAMf,EAAE,MAAMe,CAAC,IAAMf,EAAE,MAAMe,CAAC,EAAIC,EAAE,MAAMD,CAAC,EAAGtB,EAAE,cAAeO,EAAE,KAAK,EAC5F,CAAC,CACH,CAAC,EAAGI,EAAAA,YAAG,IAAM,CACXJ,EAAE,OAASnB,EAAE,QAAUA,EAAE,OAAO,QAASkC,GAAM,CAC7CA,EAAE,WAAaf,EAAE,MAAMe,EAAE,SAAS,IAAM,SAAWA,EAAE,MAAQf,EAAE,MAAMe,EAAE,SAAS,EAClF,CAAC,CACH,CAAC,EACD,MAAMhB,EAAKgB,GAAM,CACf,MAAMoF,EAAI,CAAA,EACV,SAAW,CAAClF,EAAGiB,CAAC,IAAK,OAAO,QAAQnB,CAAC,EACnC,CAAC,YAAa,WAAW,EAAE,SAASE,CAAC,IAAMkF,EAAElF,CAAC,EAAIiB,GAAIjB,IAAM,SAAW,CAACiB,GAAK,MAAM,QAAQA,CAAC,GAAKA,EAAE,SAAW,KAAOiE,EAAE,KAAOnG,EAAE,MAAMe,EAAE,SAAS,GAAK,CAAA,GACxJ,OAAOoF,CACT,EAAG,EAAI5D,EAAAA,IAAE,EAAE,EACXnC,EAAAA,YAAG,IAAM,CACPvB,EAAE,QAAU,EAAE,MAAM,SAAWA,EAAE,OAAO,SAAW,EAAE,MAAQA,EAAE,OAAO,IAAI,CAACkC,EAAGoF,IAAMzD,WAAE,CACpF,KAAM,CACJ,OAAO3B,EAAE,KACX,EACA,IAAME,GAAM,CACV,MAAMiB,EAAIrD,EAAE,OAAOsH,CAAC,EAAE,UACtBtH,EAAE,OAAOsH,CAAC,EAAE,MAAQlF,EAAGiB,GAAKlC,EAAE,QAAUA,EAAE,MAAMkC,CAAC,EAAIjB,EAAGxB,EAAE,cAAeO,EAAE,KAAK,GAAIP,EAAE,gBAAiBZ,EAAE,MAAM,CACjH,CACR,CAAO,CAAC,EACJ,CAAC,EACD,MAAMuH,EAAI1D,EAAAA,SAAE,IAAM,EAAE,KAAK,EACzB,MAAO,CAAC3B,EAAGoF,IAAM,CACf,MAAMlF,EAAIwH,EAAAA,iBAAG,QAAS,EAAE,EACxB,OAAOhG,YAAC,EAAIX,qBAAE,OAAQuG,GAAI,EACvB5F,EAAAA,UAAE,EAAE,EAAGX,EAAAA,mBAAE0B,EAAAA,SAAI,KAAMkF,EAAAA,WAAG7J,EAAE,OAAQ,CAACqD,EAAGmE,KAAO5D,EAAAA,YAAKX,EAAAA,mBAAE0B,EAAAA,SAAI,CAAE,IAAK6C,GAAK,CACjE,WAAYnE,GAAK,MAAM,QAAQA,EAAE,MAAM,GAAKA,EAAE,OAAO,OAAS,GAAKO,EAAAA,UAAC,EAAIX,EAAAA,mBAAE,MAAOwG,GAAI,CACnFpG,EAAE,OAASO,EAAAA,UAAC,EAAIX,EAAAA,mBAAE,KAAMyG,GAAI3C,EAAAA,gBAAE1D,EAAE,KAAK,EAAG,CAAC,GAAKyG,EAAAA,mBAAE,GAAI,EAAE,EACtDhI,EAAAA,YAAGM,EAAG,CACJ,KAAMD,EAAE,MAAMkB,EAAE,SAAS,EACzB,gBAAkBZ,GAAMN,EAAE,MAAMkB,EAAE,SAAS,EAAIZ,EAC/C,OAAQY,EAAE,OACV,YAAarD,EAAE,UAAYqD,EAAE,QAC3C,EAAe,KAAM,EAAG,CAAC,OAAQ,gBAAiB,SAAU,WAAW,CAAC,CACxE,CAAW,IAAMO,EAAAA,UAAC,EAAIuC,EAAAA,YAAGe,EAAAA,wBAAG7D,EAAE,SAAS,EAAGyB,aAAG,CACjC,IAAK,EACL,WAAYyC,EAAE,MAAMC,CAAC,EAAE,MACvB,sBAAwB/E,GAAM8E,EAAE,MAAMC,CAAC,EAAE,MAAQ/E,EACjD,OAAQY,EACR,KAAMlC,EAAE,MAAMkC,EAAE,SAAS,EACzB,YAAarD,EAAE,QAC3B,EAAa,CAAE,QAAS,EAAE,EAAIkB,EAAEmC,CAAC,CAAC,EAAG,KAAM,GAAI,CAAC,aAAc,sBAAuB,SAAU,OAAQ,WAAW,CAAC,EACnH,EAAW,EAAE,EAAE,EAAG,GAAG,EACrB,CAAO,CACH,CACF,CACF,CAAC,EAAG0G,GAAqB1I,GAAGsI,GAAI,CAAC,CAAC,YAAa,iBAAiB,CAAC,CAAC,iJC5wGlE,MAAMK,EAAsBhN,EAAAA,IAAI,EAAI,EAC9BiN,EAAgBjN,EAAAA,IAAI,EAAK,EACzBkN,EAAalN,EAAAA,IAAI,EAAE,EACnBwC,EAAWC,EAAAA,eAAiC,aAAa,EAEzD0K,EAAoBxK,EAAAA,SAAS,IAC3BqK,EAAoB,MAAQ,YAAc,SACjD,EAEKI,EAAoB,IAAM,CAC/BJ,EAAoB,MAAQ,CAACA,EAAoB,KAClD,EAEMK,EAAe,SAAY,CAChCJ,EAAc,MAAQ,CAACA,EAAc,MACrC,MAAMpK,EAAAA,SAAS,IAAM,CACpBL,EAAS,OAAO,MAAA,CACjB,CAAC,CACF,EAEM8K,EAAqBC,GAA8B,CACxDA,EAAM,eAAA,EACNA,EAAM,gBAAA,CACP,EAEMC,EAAe,MAAOD,GAAsC,CACjEA,EAAM,eAAA,EACNA,EAAM,gBAAA,EACN,MAAMF,EAAA,CACP,EAEMI,EAAe,IAA6C,CAElE,+EAhGC1M,qBAuDS,SAAA,KAAA,CAtDRE,EAAAA,mBAqDK,KArDLC,GAqDK,CApDJD,EAAAA,mBAEK,KAAA,CAFD,MAAM,kBAAmB,QAAOmM,EAAoB,qBAAeA,EAAiB,CAAA,OAAA,CAAA,CAAA,GACvFnM,EAAAA,mBAA2D,IAA3DU,GAA2D,CAA3CV,EAAAA,mBAAuC,MAAA,CAAjC,uBAAOkM,EAAA,KAAiB,CAAA,EAAE,IAAC,CAAA,CAAA,QAElDlM,EAAAA,mBAWK,KAAA,CAVJ,MAAM,UACL,gCAAkB+L,EAAA,MAAmB,QAAA,OAAA,EACrC,QAAOS,EACP,qBAAeA,EAAY,CAAA,OAAA,CAAA,CAAA,GAC5BpK,EAAAA,YAKcqK,EAAA,CALD,GAAG,IAAI,SAAS,GAAA,qBAC5B,IAGM,CAAA,GAAAvM,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,CAHNF,EAAAA,mBAGM,MAAA,CAHD,MAAM,OAAO,aAAW,OAAO,QAAQ,YAAY,KAAK,OAAO,OAAO,eAAe,eAAa,GAAA,GACtGA,EAAAA,mBAA0B,OAAA,CAApB,EAAE,gBAAe,EACvBA,EAAAA,mBAAyB,OAAA,CAAnB,EAAE,eAAc,CAAA,qBAIzBA,EAAAA,mBA8BK,KAAA,CA7BH,qDAAwCgM,EAAA,KAAA,CAAa,CAAA,EACrD,gCAAkBD,EAAA,MAAmB,QAAA,OAAA,CAAA,GACtC/L,EAAAA,mBA0BI,IA1BJW,GA0BI,iCAzBHb,EAAAA,mBAaM,MAAA,CAXL,MAAM,mBACN,KAAK,SACL,aAAW,SACX,QAAQ,YACR,KAAK,OACL,OAAO,eACP,eAAa,IACZ,QAAOsM,EACP,qBAAeA,EAAY,CAAA,OAAA,CAAA,CAAA,mBAC5BpM,EAAAA,mBAAgC,SAAA,CAAxB,GAAG,KAAK,GAAG,KAAK,EAAE,GAAA,WAC1BA,EAAAA,mBAA8B,OAAA,CAAxB,EAAE,mBAAA,EAAmB,KAAA,EAAA,CAAA,qBAXlBgM,EAAA,KAAa,CAAA,oBAavBhM,EAAAA,mBAUkC,QAAA,CARjC,IAAI,mDACKiM,EAAU,MAAA9L,GACnB,KAAK,OACL,YAAY,YACX,oCAAD,IAAA,CAAA,EAAW,CAAA,MAAA,CAAA,GACV,QAAKD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEkM,EAAkBlM,CAAM,GAC/B,OAAID,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEoM,EAAapM,CAAM,GACzB,UAAO,CAAQD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAwM,EAAAA,SAAAvM,GAAAoM,EAAapM,CAAM,EAAA,CAAA,OAAA,CAAA,cAClBiM,EAAY,CAAA,QAAA,CAAA,CAAA,uBATrBJ,EAAA,KAAa,gBAEZC,EAAA,KAAU,CAAA,0BAUtBnM,EAAAA,mBAKKO,EAAAA,SAAA,KAAAC,EAAAA,WAJiBC,EAAA,YAAdoM,kBADR7M,EAAAA,mBAKK,KAAA,CAHH,IAAK6M,EAAW,MAChB,gCAAkBZ,EAAA,MAAmB,QAAA,OAAA,CAAA,GACtC3J,EAAAA,YAAoFqK,EAAA,CAAvE,SAAS,IAAK,GAAIE,EAAW,EAAA,qBAAK,IAAsB,CAAnBC,EAAAA,gBAAAnM,EAAAA,gBAAAkM,EAAW,KAAK,EAAA,CAAA,CAAA,6NCTtE,KAAM,CAAE,UAAAE,CAAA,EAAcC,GAAA,EAGhBC,EAAUhO,EAAAA,IAAI,EAAK,EACnBiO,EAASjO,EAAAA,IAAI,EAAK,EAClBkO,EAAqBlO,EAAAA,IAAI,EAAK,EAK9BmO,EAAkBxL,EAAAA,SAA8B,CACrD,KAAM,CACL,GAAI,CAACmL,EAAU,OAAS,CAACM,EAAe,OAAS,CAACC,EAAgB,MACjE,MAAO,CAAA,EAGR,GAAI,CAEH,OADeP,EAAU,MAAM,cAAcM,EAAe,MAAOC,EAAgB,KAAK,GACzE,IAAI,EAAE,GAAK,CAAA,CAC3B,MAAQ,CACP,MAAO,CAAA,CACR,CACD,EACA,IAAIC,EAA8B,CACjC,GAAI,GAACR,EAAU,OAAS,CAACM,EAAe,OAAS,CAACC,EAAgB,OAIlE,GAAI,CAEH,MAAME,EAAWT,EAAU,MAAM,SAAA,EACjC,SAAW,CAACU,EAAWC,CAAK,IAAK,OAAO,QAAQH,CAAO,EAAG,CACzD,MAAMI,EAAY,GAAGN,EAAe,KAAK,IAAIC,EAAgB,KAAK,IAAIG,CAAS,GAC/ED,EAAS,IAAIG,EAAWD,CAAK,CAC9B,CACD,OAASE,EAAO,CAEf,QAAQ,KAAK,qBAAsBA,CAAK,CACzC,CACD,CAAA,CACA,EAKKC,EAAQjM,WAAS,IAAMkM,QAAMf,EAAU,OAAO,SAAS,QAAQ,YAAY,CAAC,EAC5EgB,EAASnM,EAAAA,SAAS,IAAMmL,EAAU,OAAO,SAAS,MAAM,EACxDM,EAAiBzL,EAAAA,SAAS,IAAM,CACrC,GAAI,CAACiM,EAAM,MAAO,MAAO,GAGzB,GAAIA,EAAM,MAAM,MAAM,cACrB,OAAOA,EAAM,MAAM,KAAK,cAIzB,GAAIA,EAAM,MAAM,OAAO,QACtB,OAAOA,EAAM,MAAM,OAAO,QAI3B,MAAMG,EAAYH,EAAM,MAAM,OAAO,UACrC,OAAIG,GAAaA,EAAU,OAAS,EAC5BA,EAAU,CAAC,EAGZ,EACR,CAAC,EAGKC,EAAerM,EAAAA,SAAS,IAAM,CACnC,GAAI,CAACiM,EAAM,MAAO,MAAO,GAGzB,GAAIA,EAAM,MAAM,MAAM,QACrB,OAAOA,EAAM,MAAM,KAAK,QAIzB,GAAIA,EAAM,MAAM,OAAO,QACtB,OAAOA,EAAM,MAAM,OAAO,QAI3B,MAAMG,EAAYH,EAAM,MAAM,OAAO,UACrC,OAAIG,GAAaA,EAAU,OAAS,EAC5BA,EAAU,CAAC,EAGZ,EACR,CAAC,EAEKV,EAAkB1L,EAAAA,SAAS,IAAM,CACtC,GAAI,CAACiM,EAAM,MAAO,MAAO,GAGzB,GAAIA,EAAM,MAAM,OAAO,SACtB,OAAOA,EAAM,MAAM,OAAO,SAI3B,MAAMG,EAAYH,EAAM,MAAM,OAAO,UACrC,OAAIG,GAAaA,EAAU,OAAS,EAC5BA,EAAU,CAAC,EAGZ,EACR,CAAC,EACKE,EAActM,EAAAA,SAAS,IAAM0L,EAAgB,OAAO,WAAW,MAAM,CAAC,EAGtEa,EAAcvM,EAAAA,SAAS,IAAM,CAMlC,GALI,CAACiM,EAAM,OAKPA,EAAM,MAAM,OAAS,QAAUA,EAAM,MAAM,OAAS,IACvD,MAAO,WAIR,GAAIA,EAAM,MAAM,MAAQA,EAAM,MAAM,OAAS,YAAa,CACzD,MAAMO,EAAYP,EAAM,MAAM,KAC9B,GAAIO,EAAU,SAAS,MAAM,GAAKP,EAAM,MAAM,OAAO,SACpD,MAAO,SACR,GAAWO,EAAU,SAAS,MAAM,GAAKP,EAAM,MAAM,OAAO,QAC3D,MAAO,SAET,CAGA,MAAMG,EAAYH,EAAM,MAAM,OAAO,UACrC,OAAIG,GAAaA,EAAU,OAAS,EACtBA,EAAU,SAAW,EAAI,UAAY,SAI5C,UACR,CAAC,EAIKK,EAA0B,IAAM,CACrC,GAAI,CAACtB,EAAU,OAAS,CAACM,EAAe,OAAS,CAACC,EAAgB,MACjE,MAAO,CAAA,EAGR,GAAI,CAEH,MAAMgB,EADWvB,EAAU,MAAM,SACX,SAASM,EAAe,KAAK,EAEnD,GAAI,CAACiB,GAAM,UAAU,OACpB,MAAO,CAAA,EAKR,MAAMC,EAAeL,EAAY,MAAQ,WAAa,UAChDM,EAAcF,EAAK,SAAS,OAAOC,CAAY,EAErD,OAAKC,GAAa,GAKE,OAAO,KAAKA,EAAY,EAAE,EAGX,IAAIC,GAAc,CACpD,MAAMC,GAAcF,EAAY,KAAKC,CAAU,EACzCE,EAAkB,OAAOD,IAAgB,SAAWA,GAAc,UAElEE,GAAW,SAAY,CAC5B,MAAMC,GAAO9B,EAAU,OAAO,cAAcM,EAAe,MAAOC,EAAgB,KAAK,EACvF,GAAIuB,GAAM,CACT,MAAMC,GAAa1B,EAAgB,OAAS,CAAA,EAC5C,MAAMyB,GAAK,kBAAkBJ,EAAY,CACxC,aAAAF,EACA,YAAaI,EACb,WAAYG,EAAA,CACZ,CACF,CACD,EAOA,MALgB,CACf,MAAO,GAAGL,CAAU,OAAOE,CAAe,IAC1C,OAAQC,EAAA,CAIV,CAAC,EA7BO,CAAA,CAgCT,OAAShB,EAAO,CAEf,eAAQ,KAAK,uCAAwCA,CAAK,EACnD,CAAA,CACR,CACD,EAGMmB,EAAiBnN,EAAAA,SAA2B,IAAM,CACvD,MAAMoN,EAA6B,CAAA,EAEnC,OAAQb,EAAY,MAAA,CACnB,IAAK,WACJa,EAAS,KAAK,CACb,KAAM,SACN,MAAO,UACP,OAAQ,IAAM,CAEb,OAAO,SAAS,OAAA,CACjB,CAAA,CACA,EACD,MACD,IAAK,UACJA,EAAS,KACR,CACC,KAAM,SACN,MAAO,aACP,OAAQ,IAAA,CAAWC,EAAA,EAAgB,EAEpC,CACC,KAAM,SACN,MAAO,UACP,OAAQ,IAAM,CAEb,OAAO,SAAS,OAAA,CACjB,CAAA,CACD,EAED,MACD,IAAK,SAAU,CAEd,MAAMC,EAAoBb,EAAA,EACtBa,EAAkB,OAAS,GAC9BF,EAAS,KAAK,CACb,KAAM,WACN,MAAO,UACP,QAASE,CAAA,CACT,EAEF,KACD,CAAA,CAGD,OAAOF,CACR,CAAC,EAEKG,EAAwBvN,EAAAA,SAAS,IAAM,CAC5C,MAAMwN,EAA+C,CAAA,EAErD,OAAIjB,EAAY,QAAU,WAAaF,EAAa,MACnDmB,EAAY,KACX,CAAE,MAAO,OAAQ,GAAI,GAAA,EACrB,CAAE,MAAOC,EAAkBpB,EAAa,KAAK,EAAG,GAAI,IAAIA,EAAa,KAAK,EAAA,CAAG,EAEpEE,EAAY,QAAU,UAAYF,EAAa,OACzDmB,EAAY,KACX,CAAE,MAAO,OAAQ,GAAI,GAAA,EACrB,CAAE,MAAOC,EAAkBpB,EAAa,KAAK,EAAG,GAAI,IAAIA,EAAa,KAAK,EAAA,EAC1E,CAAE,MAAOC,EAAY,MAAQ,aAAe,cAAe,GAAIL,EAAM,OAAO,UAAY,EAAA,CAAG,EAItFuB,CACR,CAAC,EASKE,EAAkB/N,GAA6B,CACpD,MAAMgO,EAAsB,CAC3B,CACC,MAAO,UACP,YAAa,4BACb,OAAQ,IAAA,CAAWxB,EAAO,OAAO,KAAK,GAAG,EAAA,EAE1C,CACC,MAAO,yBACP,YAAa,iCACb,OAAQ,IAAOZ,EAAmB,MAAQ,CAACA,EAAmB,KAAA,CAC/D,EA4BD,OAxBIc,EAAa,QAChBsB,EAAS,KAAK,CACb,MAAO,QAAQF,EAAkBpB,EAAa,KAAK,CAAC,WACpD,YAAa,eAAeA,EAAa,KAAK,QAC9C,OAAQ,IAAA,CAAWF,EAAO,OAAO,KAAK,IAAIE,EAAa,KAAK,EAAE,EAAA,CAC9D,EAEDsB,EAAS,KAAK,CACb,MAAO,cAAcF,EAAkBpB,EAAa,KAAK,CAAC,GAC1D,YAAa,gBAAgBA,EAAa,KAAK,UAC/C,OAAQ,IAAA,CAAWgB,EAAA,EAAgB,CACnC,GAIFxO,EAAA,kBAAkB,QAAQ+O,GAAW,CACpCD,EAAS,KAAK,CACb,MAAO,QAAQF,EAAkBG,CAAO,CAAC,GACzC,YAAa,eAAeA,CAAO,QACnC,OAAQ,IAAA,CAAWzB,EAAO,OAAO,KAAK,IAAIyB,CAAO,EAAE,EAAA,CACnD,CACF,CAAC,EAGIjO,EAEEgO,EAAS,UAEdE,EAAI,MAAM,YAAA,EAAc,SAASlO,EAAM,YAAA,CAAa,GACpDkO,EAAI,YAAY,YAAA,EAAc,SAASlO,EAAM,aAAa,CAAA,EALzCgO,CAOpB,EAEMG,EAAkBC,GAAqB,CAC5CA,EAAQ,OAAA,EACRxC,EAAmB,MAAQ,EAC5B,EAGMkC,EAAqBG,GACnBA,EACL,MAAM,GAAG,EACT,IAAII,GAAQA,EAAK,OAAO,CAAC,EAAE,YAAA,EAAgBA,EAAK,MAAM,CAAC,CAAC,EACxD,KAAK,GAAG,EAGLC,EAAkBL,GAClBzC,EAAU,MACGA,EAAU,MAAM,aAAayC,CAAO,EACrC,OAFY,EAKxBM,EAAoB,MAAON,GAAoB,CACpD,MAAMzB,EAAO,OAAO,KAAK,IAAIyB,CAAO,EAAE,CACvC,EAEMO,EAAa,MAAOC,GAAqB,CAC9C,MAAMjC,EAAO,OAAO,KAAK,IAAIE,EAAa,KAAK,IAAI+B,CAAQ,EAAE,CAC9D,EAEMf,EAAkB,SAAY,CACnC,MAAMgB,EAAQ,OAAO,KAAK,IAAA,CAAK,GAC/B,MAAMlC,EAAO,OAAO,KAAK,IAAIE,EAAa,KAAK,IAAIgC,CAAK,EAAE,CAC3D,EAGMC,EAAuBV,GAAoB,CAChD,GAAKzC,EAAU,MAIf,GAAI,CACHA,EAAU,MAAM,QAAQyC,CAAO,CAChC,MAAgB,CAEhB,CACD,EAGMW,EAAoB,IAAqB,CAC9C,GAAI,CAAC1P,EAAA,kBAAkB,aAAe,CAAA,EAEtC,MAAM2P,EAAO3P,EAAA,kBAAkB,IAAI+O,IAAY,CAC9C,GAAIA,EACJ,QAAAA,EACA,aAAcH,EAAkBG,CAAO,EACvC,aAAcK,EAAeL,CAAO,EACpC,QAAS,cAAA,EACR,EAEF,MAAO,CACN,CACC,UAAW,SACX,UAAW,MACX,MAAO;AAAA;AAAA;AAAA;AAAA,IAAA,EAMR,CACC,UAAW,iBACX,UAAW,SACX,QAAS,CACR,CACC,MAAO,UACP,KAAM,UACN,UAAW,OACX,MAAO,OACP,KAAM,GACN,MAAO,MAAA,EAER,CACC,MAAO,OACP,KAAM,eACN,UAAW,OACX,MAAO,OACP,KAAM,GACN,MAAO,MAAA,EAER,CACC,MAAO,UACP,KAAM,eACN,UAAW,MACX,MAAO,SACP,KAAM,GACN,MAAO,MAAA,EAER,CACC,MAAO,UACP,KAAM,UACN,UAAW,OACX,MAAO,SACP,KAAM,GACN,MAAO,MAAA,CACR,EAED,OAAQ,CACP,KAAM,OACN,UAAW,EAAA,EAEZ,KAAAY,CAAA,CACD,CAEF,EAEMC,EAAmB,IAAqB,CAC7C,GAAI,CAAChD,EAAe,MAAO,MAAO,CAAA,EAClC,GAAI,CAACN,EAAU,MAAO,MAAO,CAAA,EAE7B,MAAMuD,EAAUC,EAAA,EACVC,EAAUC,EAAA,EAGhB,GAAID,EAAQ,SAAW,EACtB,MAAO,CACN,CACC,UAAW,SACX,UAAW,MACX,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,+BAKoBnB,EAAkBpB,EAAa,OAASZ,EAAe,KAAK,CAAC;AAAA;AAAA,YAEhFgC,EAAkBpB,EAAa,OAASZ,EAAe,KAAK,CAAC;AAAA;AAAA,KAAA,EAItE,CACC,UAAW,UACX,UAAW,MACX,MAAO;AAAA;AAAA,mBAEQgC,EAAkBpB,EAAa,OAASZ,EAAe,KAAK,CAAC;AAAA;AAAA,KAAA,CAG7E,EAIF,MAAM+C,EAAOE,EAAQ,IAAKI,IAAiB,CAC1C,GAAGA,EAEH,GAAIA,EAAO,IAAM,GACjB,QAAS,eAAA,EACR,EAEF,MAAO,CACN,CACC,UAAW,SACX,UAAW,MACX,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,8BAKoBrB,EAAkBpB,EAAa,OAASZ,EAAe,KAAK,CAAC;AAAA;AAAA,WAEhFgC,EAAkBpB,EAAa,OAASZ,EAAe,KAAK,CAAC;AAAA;AAAA,IAAA,EAItE,CACC,UAAW,UACX,UAAW,MACX,MAAO;AAAA;AAAA;AAAA,YAGEgC,EAAkBpB,EAAa,OAASZ,EAAe,KAAK,CAAC;AAAA;AAAA;AAAA,IAAA,EAKvE,GAAIiD,EAAQ,SAAW,EACpB,CACA,CACC,UAAW,cACX,UAAW,MACX,MAAO;AAAA;AAAA,gBAEGrC,EAAa,OAASZ,EAAe,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,OAAA,CAMrD,EAEA,CACA,CACC,UAAW,gBACX,UAAW,SACX,QAAS,CACR,GAAGmD,EAAQ,IAAIG,IAAQ,CACtB,MAAOA,EAAI,MACX,KAAMA,EAAI,UACV,UAAWA,EAAI,UACf,MAAO,OACP,KAAM,GACN,MAAO,MAAA,EACN,EACF,CACC,MAAO,UACP,KAAM,UACN,UAAW,OACX,MAAO,SACP,KAAM,GACN,MAAO,MAAA,CACR,EAED,OAAQ,CACP,KAAM,OACN,UAAW,EAAA,EAEZ,KAAAP,CAAA,CACD,CACA,CAEL,EAEMQ,EAAsB,IAAqB,CAChD,GAAI,CAACvD,EAAe,MAAO,MAAO,CAAA,EAClC,GAAI,CAACN,EAAU,MAAO,MAAO,CAAA,EAE7B,GAAI,CAEH,MAAMuB,EADWvB,EAAU,OAAO,UACX,SAASM,EAAe,KAAK,EAEpD,GAAI,CAACiB,GAAM,OAEV,MAAO,CACN,CACC,UAAW,SACX,UAAW,MACX,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKQL,EAAa,OAASZ,EAAe,KAAK,KAAKgC,EAC7DpB,EAAa,OAASZ,EAAe,KAAA,CACrC;AAAA;AAAA,gCAE0Ba,EAAY,MAAQ,aAAeZ,EAAgB,KAAK;AAAA;AAAA,aAGhFY,EAAY,MACT,OAAOmB,EAAkBpB,EAAa,OAASZ,EAAe,KAAK,CAAC,GACpE,QAAQgC,EAAkBpB,EAAa,OAASZ,EAAe,KAAK,CAAC,EACzE;AAAA;AAAA,MAAA,EAIH,CACC,UAAW,UACX,UAAW,MACX,MAAO;AAAA;AAAA,oBAEQgC,EAAkBpB,EAAa,OAASZ,EAAe,KAAK,CAAC;AAAA;AAAA,MAAA,CAG7E,EAIF,MAAMwD,EAAc,YAAavC,EAAK,OAASA,EAAK,OAAO,UAAYA,EAAK,OACtEwC,EAAgBC,EAAA,EAEtB,MAAO,CACN,CACC,UAAW,SACX,UAAW,MACX,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,mBAKQ9C,EAAa,OAASZ,EAAe,KAAK,KAAKgC,EAC7DpB,EAAa,OAASZ,EAAe,KAAA,CACrC;AAAA;AAAA,+BAE0Ba,EAAY,MAAQ,aAAeZ,EAAgB,KAAK;AAAA;AAAA;AAAA,SAI/EY,EAAY,MACT,OAAOmB,EAAkBpB,EAAa,OAASZ,EAAe,KAAK,CAAC,GACpE,QAAQgC,EAAkBpB,EAAa,OAASZ,EAAe,KAAK,CAAC,EACzE;AAAA;AAAA;AAAA,KAAA,EAKJ,CACC,UAAW,UACX,UAAW,MACX,MAAO;AAAA;AAAA,uDAE4CH,EAAO,MAAQ,WAAa,EAAE;AAAA,SAC5EA,EAAO,MAAQ,YAAc,MAAM;AAAA;AAAA;AAAA,QAGnCgB,EAAY,MAA4E,GAApE,iEAAsE;AAAA;AAAA,KAAA,EAIhG,GAAG2C,EAAY,IAAIG,IAAU,CAC5B,GAAGA,EAEH,MAAOF,EAAcE,EAAM,SAAS,GAAK,EAAA,EACxC,CAAA,CAEJ,MAAgB,CACf,MAAO,CACN,CACC,UAAW,QACX,UAAW,MACX,MAAO;AAAA;AAAA,0CAE+B3B,EAAkBpB,EAAa,OAASZ,EAAe,KAAK,CAAC;AAAA;AAAA,KAAA,CAGpG,CAEF,CACD,EAGMkD,EAAa,IAAM,CACxB,GAAI,CAACxD,EAAU,OAAS,CAACM,EAAe,MACvC,MAAO,CAAA,EAIR,MAAM4D,EADclE,EAAU,MAAM,QAAQM,EAAe,KAAK,GAC/B,IAAI,EAAE,EAEvC,OAAI4D,GAAe,OAAOA,GAAgB,UAAY,CAAC,MAAM,QAAQA,CAAW,EACxE,OAAO,OAAOA,CAAkC,EAGjD,CAAA,CACR,EAEMR,EAAa,IAAM,CACxB,GAAI,CAAC1D,EAAU,OAAS,CAACM,EAAe,YAAc,CAAA,EAEtD,GAAI,CAEH,MAAMiB,EADWvB,EAAU,MAAM,SACX,SAASM,EAAe,KAAK,EAEnD,GAAIiB,GAAM,OAET,OADoB,YAAaA,EAAK,OAASA,EAAK,OAAO,UAAYA,EAAK,QACzD,IAAI0C,IAAU,CAChC,UAAWA,EAAM,UACjB,MAAQ,UAAWA,GAASA,EAAM,OAAUA,EAAM,UAClD,UAAY,cAAeA,GAASA,EAAM,WAAc,MAAA,EACvD,CAEJ,MAAgB,CAEhB,CAEA,MAAO,CAAA,CACR,EAEMD,EAAmB,IACpB,CAAChE,EAAU,OAAS,CAACM,EAAe,OAASa,EAAY,MAAc,CAAA,EAE5DnB,EAAU,MAAM,cAAcM,EAAe,MAAOC,EAAgB,KAAK,GACzE,IAAI,EAAE,GAAK,CAAA,EAIrB4D,EAAoBtP,EAAAA,SAAwB,IAAM,CACvD,OAAQuM,EAAY,MAAA,CACnB,IAAK,WACJ,OAAOgC,EAAA,EACR,IAAK,UACJ,OAAOE,EAAA,EACR,IAAK,SACJ,OAAOO,EAAA,EACR,QACC,MAAO,CAAA,CAAC,CAEX,CAAC,EAGKO,EAAiBlS,EAAAA,IAAmB,EAAE,EAG5C4C,EAAAA,MACCqP,EACAE,GAAa,CACZD,EAAe,MAAQ,CAAC,GAAGC,CAAS,CACrC,EACA,CAAE,UAAW,GAAM,KAAM,EAAA,CAAK,EAI/BvP,EAAAA,MACCsP,EACAC,GAAa,CACZ,GAAI,GAACrE,EAAU,OAAS,CAACM,EAAe,OAAS,CAACC,EAAgB,OAASY,EAAY,OAIvF,GAAI,CACH,MAAMV,EAAWT,EAAU,MAAM,SAAA,EAGjCqE,EAAU,QAAQJ,GAAS,CAE1B,GACCA,EAAM,WACN,UAAWA,GACX,CAAC,CAAC,SAAU,UAAW,UAAW,OAAO,EAAE,SAASA,EAAM,SAAS,EAClE,CACD,MAAMrD,EAAY,GAAGN,EAAe,KAAK,IAAIC,EAAgB,KAAK,IAAI0D,EAAM,SAAS,IAChExD,EAAS,IAAIG,CAAS,EAAIH,EAAS,IAAIG,CAAS,EAAI,UAGpDqD,EAAM,OAC1BxD,EAAS,IAAIG,EAAWqD,EAAM,KAAK,CAErC,CACD,CAAC,CACF,OAASpD,EAAO,CAEf,QAAQ,KAAK,0BAA2BA,CAAK,CAC9C,CACD,EACA,CAAE,KAAM,EAAA,CAAK,EAId,MAAMyD,EAAa,SAAY,CAE9B,GAAKtE,EAAU,MAEf,CAAAG,EAAO,MAAQ,GAEf,GAAI,CACH,MAAMoE,EAAWlE,EAAgB,OAAS,CAAA,EAE1C,GAAIc,EAAY,MAAO,CACtB,MAAM+B,EAAQ,UAAU,KAAK,IAAA,CAAK,GAC5BnB,EAAa,CAAE,GAAImB,EAAO,GAAGqB,CAAA,EAEnCvE,EAAU,MAAM,UAAUM,EAAe,MAAO4C,EAAOnB,CAAU,EAGjE,MAAMD,EAAO9B,EAAU,MAAM,cAAcM,EAAe,MAAO4C,CAAK,EAClEpB,GACH,MAAMA,EAAK,kBAAkB,OAAQ,CACpC,aAAc,WACd,YAAa,QACb,WAAYC,CAAA,CACZ,EAGF,MAAMf,EAAO,OAAO,QAAQ,IAAIE,EAAa,KAAK,IAAIgC,CAAK,EAAE,CAC9D,KAAO,CACN,MAAMnB,EAAa,CAAE,GAAIxB,EAAgB,MAAO,GAAGgE,CAAA,EACnDvE,EAAU,MAAM,UAAUM,EAAe,MAAOC,EAAgB,MAAOwB,CAAU,EAGjF,MAAMD,EAAO9B,EAAU,MAAM,cAAcM,EAAe,MAAOC,EAAgB,KAAK,EAClFuB,GACH,MAAMA,EAAK,kBAAkB,OAAQ,CACpC,aAAc,UACd,YAAa,QACb,WAAYC,CAAA,CACZ,CAEH,CACD,MAAgB,CAEhB,QAAA,CACC5B,EAAO,MAAQ,EAChB,EACD,EAEMqE,EAAe,SAAY,CAChC,GAAIrD,EAAY,MAGf,MAAMH,EAAO,OAAO,KAAK,IAAIE,EAAa,KAAK,EAAE,MAC3C,CAEN,GAAIlB,EAAU,MAAO,CACpB,MAAM8B,EAAO9B,EAAU,MAAM,cAAcM,EAAe,MAAOC,EAAgB,KAAK,EAClFuB,GACH,MAAMA,EAAK,kBAAkB,SAAU,CACtC,aAAc,UACd,YAAa,WAAA,CACb,CAEH,CAEA2C,EAAA,CACD,CACD,EAEMC,EAAoB,CAAC1R,EAAeD,IAAqD,CAE1FA,GACEA,EAAA,CAEP,EAEM4R,EAAe,MAAO1B,GAAsB,CACjD,GAAI,CAACjD,EAAU,MAAO,OAEtB,MAAM4E,EAAiB3B,GAAY1C,EAAgB,MACnD,GAAKqE,GAED,QAAQ,8CAA8C,EAAG,CAE5D,MAAM9C,EAAO9B,EAAU,MAAM,cAAcM,EAAe,MAAOsE,CAAc,EAC3E9C,GACH,MAAMA,EAAK,kBAAkB,SAAU,CACtC,aAAc,UACd,YAAa,SAAA,CACb,EAGF9B,EAAU,MAAM,aAAaM,EAAe,MAAOsE,CAAc,EAE7DxD,EAAY,QAAU,UACzB,MAAMJ,EAAO,OAAO,KAAK,IAAIE,EAAa,KAAK,EAAE,CAEnD,CACD,EAGMpO,EAAc,MAAO2M,GAAiB,CAC3C,MAAMoF,EAASpF,EAAM,OACf1M,EAAS8R,EAAO,aAAa,aAAa,EAEhD,GAAI9R,EACH,OAAQA,EAAA,CACP,IAAK,SACJ,MAAMmP,EAAA,EACN,MACD,IAAK,OACJ,MAAMoC,EAAA,EACN,MACD,IAAK,SACJ,MAAME,EAAA,EACN,MACD,IAAK,SACJ,MAAMG,EAAA,EACN,KAAA,CAKH,MAAMG,EAAOD,EAAO,QAAQ,QAAQ,EACpC,GAAIC,EAAM,CACT,MAAMC,EAAWD,EAAK,aAAa,KAAA,EAC7BE,EAAMF,EAAK,QAAQ,IAAI,EAE7B,GAAIC,IAAa,gBAAkBC,EAAK,CAEvC,MAAMC,EAAQD,EAAI,iBAAiB,IAAI,EACvC,GAAIC,EAAM,OAAS,EAAG,CAErB,MAAMxC,EADcwC,EAAM,CAAC,EACC,aAAa,KAAA,EACrCxC,GACH,MAAMM,EAAkBN,CAAO,CAEjC,CACD,SAAWsC,GAAU,SAAS,MAAM,GAAKC,EAAK,CAE7C,MAAMC,EAAQD,EAAI,iBAAiB,IAAI,EACvC,GAAIC,EAAM,OAAS,EAAG,CAErB,MAAMhC,EADSgC,EAAM,CAAC,EACE,aAAa,KAAA,EACjChC,GACH,MAAMD,EAAWC,CAAQ,CAE3B,CACD,SAAW8B,GAAU,SAAS,QAAQ,GAAKC,EAAK,CAE/C,MAAMC,EAAQD,EAAI,iBAAiB,IAAI,EACvC,GAAIC,EAAM,OAAS,EAAG,CAErB,MAAMhC,EADSgC,EAAM,CAAC,EACE,aAAa,KAAA,EACjChC,GACH,MAAM0B,EAAa1B,CAAQ,CAE7B,CACD,CACD,CACD,EAGAnO,EAAAA,MACC,CAACsM,EAAad,EAAgBC,CAAe,EAC7C,IAAM,CACDa,EAAY,QAAU,UACzBqD,EAAA,CAEF,EACA,CAAE,UAAW,EAAA,CAAK,EAInB3P,EAAAA,MACCkL,EACAkF,GAAgB,CAKhB,EACA,CAAE,UAAW,EAAA,CAAK,EAInBpQ,EAAAA,MACC,CAACsM,EAAad,EAAgBN,CAAS,EACvC,CAAC,CAACmF,EAAM1C,EAAS2C,CAAiB,IAAM,CACnCD,IAAS,WAAa1C,GAAW2C,GAEpCjC,EAAoBV,CAAO,CAE7B,EACA,CAAE,UAAW,EAAA,CAAK,EAGnB,MAAMgC,EAAiB,IAAM,CAC5B,GAAI,GAACzE,EAAU,OAAS,CAACM,EAAe,OAExC,CAAAJ,EAAQ,MAAQ,GAEhB,GAAI,CACEiB,EAAY,OAGhBnB,EAAU,MAAM,cAAcM,EAAe,MAAOC,EAAgB,KAAK,CAG3E,OAASM,EAAO,CAEf,QAAQ,KAAK,6BAA8BA,CAAK,CACjD,QAAA,CACCX,EAAQ,MAAQ,EACjB,EACD,EAGMmF,EAAiB,CACtB,kBAAAtC,EACA,WAAAC,EACA,gBAAAd,EACA,WAAAoC,EACA,aAAAE,EACA,aAAAG,CAAA,EAGDW,OAAAA,EAAAA,QAAQ,iBAAkBD,CAAc,EAGxC9S,EAAAA,UAAU,IAAM,CAEVwC,EAAAA,SAAS,IAAM,CACfqM,EAAY,QAAU,WAAad,EAAe,OAASN,EAAU,OACxEmD,EAAoB7C,EAAe,KAAK,CAE1C,CAAC,EAKD,MAAMrL,EAAiBwK,GAAyB,EAE1CA,EAAM,SAAWA,EAAM,UAAYA,EAAM,MAAQ,MACrDA,EAAM,eAAA,EACNW,EAAmB,MAAQ,IAGxBX,EAAM,MAAQ,UAAYW,EAAmB,QAChDA,EAAmB,MAAQ,GAE7B,EAEA,gBAAS,iBAAiB,UAAWnL,CAAa,EAG3C,IAAM,CACZ,SAAS,oBAAoB,UAAWA,CAAa,CACtD,CACD,CAAC,wBA7iCAhC,EAAAA,mBA4BM,MAAA,CA5BD,MAAM,UAAW,QAAOH,CAAA,GAE5ByC,EAAAA,YAA0EgQ,GAAA,CAA9D,SAAUvD,EAAA,MAAiB,cAAc0C,CAAA,uBAGxCN,EAAA,MAAe,OAAM,iBAAlC/O,EAAAA,YAA2FmQ,QAAAC,EAAA,EAAA,kBAA1CrB,EAAA,2CAAAA,EAAc,MAAA9Q,GAAG,KAAM+M,EAAA,KAAA,iCACvDmF,QAAAxF,CAAA,GACjBzM,EAAAA,YAAAN,EAAAA,mBAEM,MAFNY,GAEM,CADLV,qBAAwC,IAAA,KAArC,WAAQS,EAAAA,gBAAGwN,EAAA,KAAW,EAAG,WAAQ,CAAA,CAAA,KAFrC7N,EAAAA,YAAAN,qBAAkF,MAAlFG,GAAkF,CAAA,GAAAC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,CAAtCF,EAAAA,mBAAgC,SAA7B,4BAAyB,EAAA,CAAA,MAMxEoC,cAAiDmQ,GAAA,CAAtC,YAAatD,EAAA,KAAA,EAAqB,KAAA,EAAA,CAAA,aAAA,CAAA,EAG7C7M,EAAAA,YAYiBoQ,GAAA,CAXf,UAASvF,EAAA,MACT,OAAQmC,EACT,YAAY,8BACX,SAAQI,EACR,uBAAOvC,EAAA,MAAkB,GAAA,GACf,MAAKwF,EAAAA,QACf,CAAkB,CADC,OAAAxQ,KAAM,CACtB2K,EAAAA,gBAAAnM,EAAAA,gBAAAwB,EAAO,KAAK,EAAA,CAAA,CAAA,GAEL,QAAOwQ,EAAAA,QACjB,CAAwB,CADH,OAAAxQ,KAAM,CACxB2K,EAAAA,gBAAAnM,EAAAA,gBAAAwB,EAAO,WAAW,EAAA,CAAA,CAAA,6BCfnByQ,GAAiB,CACtB,QAAUC,GAAa,CACtBA,EAAI,UAAU,YAAaP,EAAS,EACpCO,EAAI,UAAU,iBAAkBH,EAAc,EAC9CG,EAAI,UAAU,UAAWC,EAAO,EAChCD,EAAI,UAAU,WAAYJ,EAAQ,CACnC,CACD"}
|