@stonecrop/desktop 0.6.2 → 0.6.3
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/actions-Bg0Mh5s7.js +137 -0
- package/dist/actions-Bg0Mh5s7.js.map +1 -0
- package/dist/desktop.css +1 -1
- package/dist/desktop.js +1103 -1104
- package/dist/desktop.js.map +1 -1
- package/dist/desktop.umd.cjs +26 -30
- package/dist/desktop.umd.cjs.map +1 -1
- package/dist/index-C3nXTrEd.js +1895 -0
- package/dist/index-C3nXTrEd.js.map +1 -0
- package/dist/operation-log-DB-dGNT9-C9cIr4-e.js +592 -0
- package/dist/operation-log-DB-dGNT9-C9cIr4-e.js.map +1 -0
- package/dist/src/tsdoc-metadata.json +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-C3nXTrEd.js","sources":["../src/components/ActionSet.vue","../src/components/CommandPalette.vue","../../stonecrop/dist/stonecrop.js","../../aform/dist/aform.js","../src/components/SheetNav.vue","../src/components/FieldTriggerNotifications.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\tclass=\"leftBar\"\n\t\t\t\t\tversion=\"1.1\"\n\t\t\t\t\tid=\"Layer_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\tclass=\"rightBar\"\n\t\t\t\t\tversion=\"1.1\"\n\t\t\t\t\tid=\"Layer_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 class=\"action-element\" v-for=\"(el, index) in _elements\" :key=\"el.label\">\n\t\t\t<button v-if=\"el.type == 'button'\" :onclick=\"el.action\" class=\"button-default\">{{ el.label }}</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 class=\"dropdown-container\" v-show=\"el.show\">\n\t\t\t\t\t<div class=\"dropdown\">\n\t\t\t\t\t\t<div v-for=\"item in el.actions\" :key=\"item.label\">\n\t\t\t\t\t\t\t<button v-if=\"item.action != null\" :onclick=\"item.action\" class=\"dropdown-item\">{{ item.label }}</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[] }>()\n\nconst _elements = ref(elements)\nconst isOpen = ref(false)\nconst timeoutId = ref<number | null>(null)\nconst hover = ref(false)\nconst closeClicked = ref(false)\n\nonMounted(() => {\n\tcloseDropdowns()\n})\n\nconst closeDropdowns = () => {\n\tfor (const element of _elements.value) {\n\t\tif (element.type === 'dropdown') {\n\t\t\telement.show = false\n\t\t}\n\t}\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\tif (timeoutId.value) clearTimeout(timeoutId.value)\n\tisOpen.value = false\n}\n\nconst toggleDropdown = (index: number) => {\n\tconst showDropdown = !_elements.value[index].show\n\tcloseDropdowns()\n\t_elements.value[index].show = showDropdown\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}\n\n.action-menu-icon {\n\tposition: absolute;\n\ttop: 6px;\n\tright: 8px;\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}\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\n.dropdown-container {\n\tposition: relative;\n}\n\n.dropdown {\n\tposition: absolute;\n\ttop: 5px;\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}\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 { inject as x, ref as P, onMounted as _, provide as D, watch as k, nextTick as O } from \"vue\";\nlet b;\nfunction I(i) {\n return b || (b = new V(i)), b;\n}\nfunction L(i, t) {\n I().registerAction(i, t);\n}\nclass V {\n options;\n doctypeActions = /* @__PURE__ */ new Map();\n // doctype -> action/field -> functions\n globalActions = /* @__PURE__ */ new Map();\n // action name -> function\n constructor(t = {}) {\n this.options = {\n defaultTimeout: t.defaultTimeout ?? 5e3,\n debug: t.debug ?? !1,\n errorHandler: t.errorHandler\n };\n }\n /**\n * Register a global action function\n */\n registerAction(t, e) {\n this.globalActions.set(t, e);\n }\n /**\n * Register actions from a doctype - both regular actions and field triggers\n */\n registerDoctypeActions(t, e) {\n if (!e) return;\n const r = /* @__PURE__ */ new Map();\n if (typeof e.entrySeq == \"function\")\n e.entrySeq().forEach(([s, o]) => {\n r.set(s, o);\n });\n else if (e instanceof Map)\n for (const [s, o] of e)\n r.set(s, o);\n else e && typeof e == \"object\" && Object.entries(e).forEach(([s, o]) => {\n r.set(s, o);\n });\n this.doctypeActions.set(t, r);\n }\n /**\n * Execute field triggers for a changed field\n */\n async executeFieldTriggers(t, e = {}) {\n const { doctype: r, fieldname: s } = t, o = this.findFieldTriggers(r, s);\n if (o.length === 0)\n return {\n path: t.path,\n actionResults: [],\n totalExecutionTime: 0,\n allSucceeded: !0,\n stoppedOnError: !1\n };\n const n = performance.now(), a = [];\n let l = !1;\n for (const u of o)\n try {\n const c = await this.executeAction(u, t, e.timeout);\n if (a.push(c), !c.success) {\n l = !0;\n break;\n }\n } catch (c) {\n const m = {\n success: !1,\n error: c instanceof Error ? c : new Error(String(c)),\n executionTime: 0,\n action: u\n };\n a.push(m), l = !0;\n break;\n }\n const d = performance.now() - n, h = a.filter((u) => !u.success);\n if (h.length > 0 && this.options.errorHandler)\n for (const u of h)\n try {\n this.options.errorHandler(u.error, t, u.action);\n } catch (c) {\n console.error(\"[FieldTriggers] Error in global error handler:\", c);\n }\n return {\n path: t.path,\n actionResults: a,\n totalExecutionTime: d,\n allSucceeded: a.every((u) => u.success),\n stoppedOnError: l\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(t, e) {\n const r = this.doctypeActions.get(t);\n if (!r) return [];\n const s = [];\n for (const [o, n] of r)\n this.isFieldTriggerKey(o, e) && s.push(...n);\n return s;\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(t, e) {\n return t === e ? !0 : t.includes(\".\") ? this.matchFieldPattern(t, e) : t.includes(\"*\") ? this.matchFieldPattern(t, e) : !1;\n }\n /**\n * Match a field pattern against a field name\n * Supports wildcards (*) for dynamic segments\n */\n matchFieldPattern(t, e) {\n const r = t.split(\".\"), s = e.split(\".\");\n if (r.length !== s.length)\n return !1;\n for (let o = 0; o < r.length; o++) {\n const n = r[o], a = s[o];\n if (n !== \"*\" && n !== a)\n return !1;\n }\n return !0;\n }\n /**\n * Execute a single action by name\n */\n async executeAction(t, e, r) {\n const s = performance.now(), o = r ?? this.options.defaultTimeout;\n try {\n const n = this.globalActions.get(t);\n if (!n)\n throw new Error(`Action \"${t}\" not found in registry`);\n return await this.executeWithTimeout(n, e, o), {\n success: !0,\n executionTime: performance.now() - s,\n action: t\n };\n } catch (n) {\n const a = performance.now() - s;\n return {\n success: !1,\n error: n instanceof Error ? n : new Error(String(n)),\n executionTime: a,\n action: t\n };\n }\n }\n /**\n * Execute a function with timeout\n */\n async executeWithTimeout(t, e, r) {\n return new Promise((s, o) => {\n const n = setTimeout(() => {\n o(new Error(`Action timeout after ${r}ms`));\n }, r);\n Promise.resolve(t(e)).then((a) => {\n clearTimeout(n), s(a);\n }).catch((a) => {\n clearTimeout(n), o(a);\n });\n });\n }\n}\nclass S {\n static instance;\n /**\n * Gets the singleton instance of HST\n * @returns The HST singleton instance\n */\n static getInstance() {\n return S.instance || (S.instance = new S()), S.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 t = globalThis.Registry?._root;\n if (t)\n return t;\n }\n if (typeof window < \"u\") {\n const t = window.Registry?._root;\n if (t)\n return t;\n }\n if (typeof global < \"u\" && global) {\n const t = global.Registry?._root;\n if (t)\n return t;\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(t) {\n const e = this.getRegistry();\n if (e && typeof e == \"object\" && \"registry\" in e)\n return e.registry[t];\n }\n}\nclass T {\n target;\n parentPath;\n rootNode;\n doctype;\n parentDoctype;\n hst;\n constructor(t, e, r = \"\", s = null, o) {\n return this.target = t, this.parentPath = r, this.rootNode = s || this, this.doctype = e, this.parentDoctype = o, this.hst = S.getInstance(), new Proxy(this, {\n get(n, a) {\n if (a in n) return n[a];\n const l = String(a);\n return n.getNode(l);\n },\n set(n, a, l) {\n const d = String(a);\n return n.set(d, l), !0;\n }\n });\n }\n get(t) {\n return this.resolveValue(t);\n }\n // Method to get a tree-wrapped node for navigation\n getNode(t) {\n const e = this.resolvePath(t), r = this.resolveValue(t);\n return typeof r == \"object\" && r !== null && !this.isPrimitive(r) ? new T(r, this.doctype, e, this.rootNode, this.parentDoctype) : new T(r, this.doctype, e, this.rootNode, this.parentDoctype);\n }\n set(t, e) {\n const r = this.resolvePath(t), s = this.has(t) ? this.get(t) : void 0;\n this.updateValue(t, e), this.triggerFieldActions(r, s, e);\n }\n has(t) {\n try {\n if (t === \"\")\n return !0;\n const e = this.parsePath(t);\n let r = this.target;\n for (let s = 0; s < e.length; s++) {\n const o = e[s];\n if (r == null)\n return !1;\n if (s === e.length - 1)\n return this.isImmutable(r) ? r.has(o) : this.isPiniaStore(r) && r.$state && o in r.$state || o in r;\n r = this.getProperty(r, o);\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 e = this.parentPath.split(\".\").slice(0, -1).join(\".\");\n return e === \"\" ? this.rootNode : this.rootNode.getNode(e);\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 // Private helper methods\n resolvePath(t) {\n return t === \"\" ? this.parentPath : this.parentPath ? `${this.parentPath}.${t}` : t;\n }\n resolveValue(t) {\n if (t === \"\")\n return this.target;\n const e = this.parsePath(t);\n let r = this.target;\n for (const s of e) {\n if (r == null)\n return;\n r = this.getProperty(r, s);\n }\n return r;\n }\n updateValue(t, e) {\n if (t === \"\")\n throw new Error(\"Cannot set value on empty path\");\n const r = this.parsePath(t), s = r.pop();\n let o = this.target;\n for (const n of r)\n if (o = this.getProperty(o, n), o == null)\n throw new Error(`Cannot set property on null/undefined path: ${t}`);\n this.setProperty(o, s, e);\n }\n getProperty(t, e) {\n return this.isImmutable(t) ? t.get(e) : this.isVueReactive(t) ? t[e] : this.isPiniaStore(t) ? t.$state?.[e] ?? t[e] : t[e];\n }\n setProperty(t, e, r) {\n if (this.isImmutable(t))\n throw new Error(\"Cannot directly mutate immutable objects. Use immutable update methods instead.\");\n if (this.isPiniaStore(t)) {\n t.$patch ? t.$patch({ [e]: r }) : t[e] = r;\n return;\n }\n t[e] = r;\n }\n async triggerFieldActions(t, e, r) {\n try {\n const s = I(), o = t.split(\".\"), n = o.slice(2).join(\".\") || o[o.length - 1], a = this.doctype;\n let l;\n o.length >= 2 && (l = o[1]);\n const d = {\n path: t,\n fieldname: n,\n beforeValue: e,\n afterValue: r,\n operation: \"set\",\n doctype: a,\n recordId: l,\n timestamp: /* @__PURE__ */ new Date()\n };\n await s.executeFieldTriggers(d);\n } catch (s) {\n s instanceof Error && console.warn(\"Field trigger error:\", s.message);\n }\n }\n isVueReactive(t) {\n return t && typeof t == \"object\" && \"__v_isReactive\" in t && t.__v_isReactive === !0;\n }\n isPiniaStore(t) {\n return t && typeof t == \"object\" && (\"$state\" in t || \"$patch\" in t || \"$id\" in t);\n }\n isImmutable(t) {\n if (!t || typeof t != \"object\")\n return !1;\n const e = \"get\" in t && typeof t.get == \"function\", r = \"set\" in t && typeof t.set == \"function\", s = \"has\" in t && typeof t.has == \"function\", o = \"__ownerID\" in t || \"_map\" in t || \"_list\" in t || \"_origin\" in t || \"_capacity\" in t || \"_defaultValues\" in t || \"_tail\" in t || \"_root\" in t || \"size\" in t && e && r;\n let n;\n try {\n const l = t;\n if (\"constructor\" in l && l.constructor && typeof l.constructor == \"object\" && \"name\" in l.constructor) {\n const d = l.constructor.name;\n n = typeof d == \"string\" ? d : void 0;\n }\n } catch {\n n = void 0;\n }\n const a = n && (n.includes(\"Map\") || n.includes(\"List\") || n.includes(\"Set\") || n.includes(\"Stack\") || n.includes(\"Seq\")) && (e || r);\n return !!(e && r && s && o || e && r && a);\n }\n isPrimitive(t) {\n return t == null || typeof t == \"string\" || typeof t == \"number\" || typeof t == \"boolean\" || typeof t == \"function\" || typeof t == \"symbol\" || typeof t == \"bigint\";\n }\n parsePath(t) {\n return t ? t.split(\".\").filter((e) => e.length > 0) : [];\n }\n}\nfunction C(i, t, e) {\n return new T(i, t, \"\", null, e);\n}\nclass N {\n hstStore;\n registry;\n constructor(t) {\n this.registry = t, this.initializeHSTStore(), this.setupRegistrySync();\n }\n /**\n * Initialize the HST store structure\n */\n initializeHSTStore() {\n const t = {};\n Object.keys(this.registry.registry).forEach((e) => {\n t[e] = {};\n }), this.hstStore = C(t, \"StonecropStore\");\n }\n /**\n * Setup automatic sync with Registry when doctypes are added\n */\n setupRegistrySync() {\n const t = this.registry.addDoctype.bind(this.registry);\n this.registry.addDoctype = (e) => {\n t(e), this.hstStore.has(e.slug) || this.hstStore.set(e.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(t) {\n const e = typeof t == \"string\" ? t : t.slug;\n return this.ensureDoctypeExists(e), this.hstStore.getNode(e);\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(t, e, r) {\n const s = typeof t == \"string\" ? t : t.slug;\n this.ensureDoctypeExists(s), this.hstStore.set(`${s}.${e}`, 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(t, e) {\n const r = typeof t == \"string\" ? t : t.slug;\n if (this.ensureDoctypeExists(r), !(!this.hstStore.has(`${r}.${e}`) || this.hstStore.get(`${r}.${e}`) === void 0))\n return this.hstStore.getNode(`${r}.${e}`);\n }\n /**\n * Remove a record from the store\n * @param doctype - The doctype\n * @param recordId - The record ID\n */\n removeRecord(t, e) {\n const r = typeof t == \"string\" ? t : t.slug;\n this.ensureDoctypeExists(r), this.hstStore.has(`${r}.${e}`) && this.hstStore.set(`${r}.${e}`, 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(t) {\n const e = typeof t == \"string\" ? t : t.slug;\n this.ensureDoctypeExists(e);\n const r = this.hstStore.get(e);\n return !r || typeof r != \"object\" ? [] : Object.keys(r).filter((s) => r[s] !== void 0);\n }\n /**\n * Clear all records for a doctype\n * @param doctype - The doctype\n */\n clearRecords(t) {\n const e = typeof t == \"string\" ? t : t.slug;\n this.ensureDoctypeExists(e), this.getRecordIds(e).forEach((s) => {\n this.hstStore.set(`${e}.${s}`, void 0);\n });\n }\n /**\n * Setup method for doctype initialization\n * @param doctype - The doctype to setup\n */\n setup(t) {\n this.ensureDoctypeExists(t.slug);\n }\n /**\n * Run action on doctype (maintains compatibility)\n * @param _doctype - The doctype\n * @param _action - The action to run\n * @param _args - Action arguments\n */\n runAction(t, e, r) {\n }\n /**\n * Get records from server (maintains compatibility)\n * @param doctype - The doctype\n */\n async getRecords(t) {\n (await (await fetch(`/${t.slug}`)).json()).forEach((s) => {\n s.id && this.addRecord(t, s.id, s);\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(t, e) {\n const s = await (await fetch(`/${t.slug}/${e}`)).json();\n this.addRecord(t, e, s);\n }\n /**\n * Ensure doctype section exists in HST store\n * @param slug - The doctype slug\n */\n ensureDoctypeExists(t) {\n this.hstStore.has(t) || this.hstStore.set(t, {});\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 q(i) {\n i || (i = {});\n const t = i.registry || x(\"$registry\"), e = x(\"$stonecrop\"), r = P(), s = P(), o = P({}), n = P(), a = P();\n _(async () => {\n if (console.log(\"🚀 [useStonecrop] Initializing Stonecrop composable\", { options: i, registry: t }), !!t) {\n if (r.value = e || new N(t), !i.doctype && t.router) {\n console.log(\"🌍 [useStonecrop] Setting up router-based doctype loading\");\n const h = t.router.currentRoute.value;\n if (!h.path) return;\n console.log(\"🔍 [useStonecrop] Current route path:\", h.path);\n const g = h.path.split(\"/\").filter((p) => p.length > 0), u = g[0]?.toLowerCase(), c = g[1]?.toLowerCase();\n if (u) {\n console.log(\"📄 [useStonecrop] Loading doctype from slug:\", u, { recordId: c });\n const p = c && c !== \"new\", m = p ? `${u}-form` : `${u}-list`;\n console.log(\"🎯 [useStonecrop] Resolved doctype:\", {\n originalSlug: u,\n actualSlug: m,\n isFormView: p,\n recordId: c\n });\n const f = await t.getMeta?.(m);\n if (f) {\n if (t.addDoctype(f), r.value.setup(f), n.value = f, a.value = c, s.value = r.value.getStore(), c && c !== \"new\") {\n const v = r.value.getRecordById(f, c);\n if (v)\n o.value = v.get(\"\") || {};\n else\n try {\n await r.value.getRecord(f, c);\n const y = r.value.getRecordById(f, c);\n y && (o.value = y.get(\"\") || {});\n } catch {\n o.value = E(f);\n }\n } else\n o.value = E(f);\n if (console.log(\"🗄️ [useStonecrop] HST Store initialized:\", s.value), s.value && (A(f, c || \"new\", o, s.value), Object.keys(o.value).length > 0)) {\n const v = `${f.slug}.${c || \"new\"}`;\n Object.keys(o.value).forEach((y) => {\n const w = `${v}.${y}`;\n try {\n s.value.set(w, o.value[y]);\n } catch {\n }\n });\n }\n r.value.runAction(f, \"load\", c ? [c] : void 0);\n }\n }\n }\n if (i.doctype) {\n s.value = r.value.getStore();\n const h = i.doctype, g = i.recordId;\n if (g && g !== \"new\") {\n const u = r.value.getRecordById(h, g);\n if (u)\n o.value = u.get(\"\") || {};\n else\n try {\n await r.value.getRecord(h, g);\n const c = r.value.getRecordById(h, g);\n c && (o.value = c.get(\"\") || {});\n } catch {\n o.value = E(h);\n }\n } else\n o.value = E(h);\n if (s.value && (A(h, g || \"new\", o, s.value), Object.keys(o.value).length > 0)) {\n const u = `${h.slug}.${g || \"new\"}`;\n Object.keys(o.value).forEach((c) => {\n const p = `${u}.${c}`;\n try {\n s.value.set(p, o.value[c]);\n } catch {\n }\n });\n }\n }\n }\n });\n const l = (h, g) => {\n const u = i.doctype || n.value;\n if (!u) return \"\";\n const c = g || i.recordId || a.value || \"new\";\n return `${u.slug}.${c}.${h}`;\n }, d = (h) => {\n const g = i.doctype || n.value;\n if (!(!s.value || !r.value || !g))\n try {\n const u = h.path.split(\".\");\n if (u.length >= 2) {\n const m = u[0], f = u[1];\n if (s.value.has(`${m}.${f}`) || r.value.addRecord(g, f, { ...o.value }), u.length > 3) {\n const v = `${m}.${f}`, y = u.slice(2);\n let w = v;\n for (let $ = 0; $ < y.length - 1; $++)\n if (w += `.${y[$]}`, !s.value.has(w)) {\n const F = y[$ + 1], M = !isNaN(Number(F));\n s.value.set(w, M ? [] : {});\n }\n }\n }\n s.value.set(h.path, h.value);\n const c = h.fieldname.split(\".\"), p = { ...o.value };\n c.length === 1 ? p[c[0]] = h.value : z(p, c, h.value), o.value = p;\n } catch {\n }\n };\n return (i.doctype || t?.router) && (D(\"hstPathProvider\", l), D(\"hstChangeHandler\", d)), i.doctype ? {\n stonecrop: r,\n provideHSTPath: l,\n handleHSTChange: d,\n hstStore: s,\n formData: o\n } : !i.doctype && t?.router ? {\n stonecrop: r,\n provideHSTPath: l,\n handleHSTChange: d,\n hstStore: s,\n formData: o\n } : { stonecrop: r };\n}\nfunction E(i) {\n const t = {};\n return i.schema && i.schema.forEach((e) => {\n switch (\"fieldtype\" in e ? e.fieldtype : \"Data\") {\n case \"Data\":\n case \"Text\":\n t[e.fieldname] = \"\";\n break;\n case \"Check\":\n t[e.fieldname] = !1;\n break;\n case \"Int\":\n case \"Float\":\n t[e.fieldname] = 0;\n break;\n case \"Table\":\n t[e.fieldname] = [];\n break;\n case \"JSON\":\n t[e.fieldname] = {};\n break;\n default:\n t[e.fieldname] = null;\n }\n }), t;\n}\nfunction A(i, t, e, r) {\n console.log(\"🔗 [useStonecrop] Setting up deep reactivity\", { doctype: i.slug, recordId: t, formData: e }), k(\n e,\n (s) => {\n console.log(\"🔄 [useStonecrop] formData changed:\", s);\n const o = `${i.slug}.${t}`;\n Object.keys(s).forEach((n) => {\n const a = `${o}.${n}`;\n try {\n r.set(a, s[n]);\n } catch {\n }\n });\n },\n { deep: !0 }\n );\n}\nfunction z(i, t, e) {\n let r = i;\n for (let o = 0; o < t.length - 1; o++) {\n const n = t[o];\n (!(n in r) || typeof r[n] != \"object\") && (r[n] = isNaN(Number(t[o + 1])) ? {} : []), r = r[n];\n }\n const s = t[t.length - 1];\n r[s] = e;\n}\nclass G {\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 // TODO: allow different components for different views; probably\n // should be defined in the schema instead?\n constructor(t, e, r, s, o) {\n this.doctype = t, this.schema = e, this.workflow = r, this.actions = s, this.component = o;\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 R {\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 constructor(t, e) {\n if (R._root)\n return R._root;\n R._root = this, this.name = \"Registry\", this.registry = {}, this.router = t, this.getMeta = e;\n }\n /**\n * The getMeta function fetches doctype metadata from an API\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(t) {\n t.doctype in Object.keys(this.registry) || (this.registry[t.slug] = t), I().registerDoctypeActions(t.doctype, t.actions), t.component && this.router && !this.router.hasRoute(t.doctype) && this.router.addRoute({\n path: `/${t.slug}`,\n name: t.slug,\n component: t.component\n });\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 H(i, t, e) {\n await O();\n try {\n await e(i, t);\n } catch {\n }\n}\nconst K = {\n install: (i, t) => {\n const e = i.config.globalProperties.$router, r = t?.router, s = e || r;\n !e && r && i.use(r);\n const o = new R(s, t?.getMeta);\n i.provide(\"$registry\", o), i.config.globalProperties.$registry = o;\n const n = new N(o);\n if (i.provide(\"$stonecrop\", n), i.config.globalProperties.$stonecrop = n, t?.components)\n for (const [a, l] of Object.entries(t.components))\n i.component(a, l);\n t?.autoInitializeRouter && t.onRouterInitialized && H(o, n, t.onRouterInitialized);\n }\n};\nexport {\n G as DoctypeMeta,\n S as HST,\n R as Registry,\n N as Stonecrop,\n C as createHST,\n K as default,\n I as getGlobalTriggerEngine,\n L as registerGlobalAction,\n q as useStonecrop\n};\n//# sourceMappingURL=stonecrop.js.map\n","import { defineComponent as C, mergeModels as z, useModel as q, createElementBlock as w, openBlock as g, createElementVNode as c, withDirectives as M, toDisplayString as A, vModelCheckbox as Re, vShow as W, resolveComponent as He, createBlock as se, withCtx as Be, useTemplateRef as Ae, vModelText as H, watch as O, getCurrentScope as Ie, onScopeDispose as Te, toRef as qe, readonly as Ce, ref as D, customRef as We, computed as T, watchEffect as Se, toValue as b, unref as $, shallowRef as G, reactive as Ue, normalizeClass as Z, withKeys as R, Fragment as Y, renderList as j, withModifiers as $e, onMounted as ae, onBeforeUnmount as Ne, getCurrentInstance as Ye, nextTick as je, resolveDynamicComponent as Ke, mergeProps as ze, renderSlot as Ge, createTextVNode as Le, createCommentVNode as re, createVNode as Xe } from \"vue\";\nimport './assets/index.css';const Je = { class: \"aform_form-element\" }, Qe = [\"for\"], Ze = { class: \"aform_checkbox-container aform_input-field\" }, et = [\"id\", \"readonly\", \"required\"], tt = [\"innerHTML\"], nt = /* @__PURE__ */ C({\n __name: \"ACheckbox\",\n props: /* @__PURE__ */ z({\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 = q(e, \"modelValue\");\n return (n, o) => (g(), w(\"div\", Je, [\n c(\"label\", {\n class: \"aform_field-label\",\n for: n.uuid\n }, A(n.label), 9, Qe),\n c(\"span\", Ze, [\n M(c(\"input\", {\n \"onUpdate:modelValue\": o[0] || (o[0] = (s) => t.value = s),\n type: \"checkbox\",\n id: n.uuid,\n class: \"aform_checkbox\",\n readonly: n.readonly,\n required: n.required\n }, null, 8, et), [\n [Re, t.value]\n ])\n ]),\n M(c(\"p\", {\n class: \"aform_error\",\n innerHTML: n.validation.errorMessage\n }, null, 8, tt), [\n [W, n.validation.errorMessage]\n ])\n ]));\n }\n}), L = (e, t) => {\n const n = e.__vccOpts || e;\n for (const [o, s] of t)\n n[o] = s;\n return n;\n}, ot = /* @__PURE__ */ L(nt, [[\"__scopeId\", \"data-v-9f382ad4\"]]), lt = /* @__PURE__ */ C({\n __name: \"AComboBox\",\n props: [\"event\", \"cellData\", \"tableID\"],\n setup(e) {\n return (t, n) => {\n const o = He(\"ATableModal\");\n return g(), se(o, {\n event: e.event,\n cellData: e.cellData,\n class: \"amodal\"\n }, {\n default: Be(() => n[0] || (n[0] = [\n c(\"div\", null, [\n c(\"input\", { type: \"text\" }),\n c(\"input\", { type: \"text\" }),\n c(\"input\", { type: \"text\" })\n ], -1)\n ])),\n _: 1,\n __: [0]\n }, 8, [\"event\", \"cellData\"]);\n };\n }\n}), st = [\"id\", \"disabled\", \"required\"], at = [\"for\"], rt = [\"innerHTML\"], it = /* @__PURE__ */ C({\n __name: \"ADate\",\n props: /* @__PURE__ */ z({\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 = q(e, \"modelValue\", {\n // format the date to be compatible with the native input datepicker\n set: (s) => new Date(s).toISOString().split(\"T\")[0]\n }), n = Ae(\"date\"), o = () => {\n n.value && \"showPicker\" in HTMLInputElement.prototype && n.value.showPicker();\n };\n return (s, u) => (g(), w(\"div\", null, [\n M(c(\"input\", {\n \"onUpdate:modelValue\": u[0] || (u[0] = (r) => t.value = r),\n ref: \"date\",\n type: \"date\",\n id: s.uuid,\n disabled: s.readonly,\n required: s.required,\n onClick: o\n }, null, 8, st), [\n [H, t.value]\n ]),\n c(\"label\", { for: s.uuid }, A(s.label), 9, at),\n M(c(\"p\", {\n innerHTML: s.validation.errorMessage\n }, null, 8, rt), [\n [W, s.validation.errorMessage]\n ])\n ]));\n }\n}), ut = /* @__PURE__ */ L(it, [[\"__scopeId\", \"data-v-280b3d1a\"]]);\nfunction ie(e) {\n return Ie() ? (Te(e), !0) : !1;\n}\n// @__NO_SIDE_EFFECTS__\nfunction ve() {\n const e = /* @__PURE__ */ new Set(), t = (u) => {\n e.delete(u);\n };\n return {\n on: (u) => {\n e.add(u);\n const r = () => t(u);\n return ie(r), {\n off: r\n };\n },\n off: t,\n trigger: (...u) => Promise.all(Array.from(e).map((r) => r(...u))),\n clear: () => {\n e.clear();\n }\n };\n}\nconst ue = typeof window < \"u\" && typeof document < \"u\";\ntypeof WorkerGlobalScope < \"u\" && globalThis instanceof WorkerGlobalScope;\nconst ct = Object.prototype.toString, dt = (e) => ct.call(e) === \"[object Object]\", F = () => {\n}, ft = (e, t) => Object.prototype.hasOwnProperty.call(e, t), le = /* @__PURE__ */ mt();\nfunction mt() {\n var e, t;\n return ue && ((e = window?.navigator) == null ? void 0 : e.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((t = window?.navigator) == null ? void 0 : t.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window?.navigator.userAgent));\n}\nfunction pt(...e) {\n if (e.length !== 1)\n return qe(...e);\n const t = e[0];\n return typeof t == \"function\" ? Ce(We(() => ({ get: t, set: F }))) : D(t);\n}\nfunction ee(e) {\n return Array.isArray(e) ? e : [e];\n}\nfunction vt(e, t, n) {\n return O(\n e,\n t,\n {\n ...n,\n immediate: !0\n }\n );\n}\nconst ht = ue ? window.document : void 0;\nfunction gt(e) {\n var t;\n const n = b(e);\n return (t = n?.$el) != null ? t : n;\n}\nconst yt = {\n multiple: !0,\n accept: \"*\",\n reset: !1,\n directory: !1\n};\nfunction bt(e) {\n if (!e)\n return null;\n if (e instanceof FileList)\n return e;\n const t = new DataTransfer();\n for (const n of e)\n t.items.add(n);\n return t.files;\n}\nfunction wt(e = {}) {\n const {\n document: t = ht\n } = e, n = D(bt(e.initialFiles)), { on: o, trigger: s } = /* @__PURE__ */ ve(), { on: u, trigger: r } = /* @__PURE__ */ ve(), l = T(() => {\n var v;\n const d = (v = gt(e.input)) != null ? v : t ? t.createElement(\"input\") : void 0;\n return d && (d.type = \"file\", d.onchange = (p) => {\n const k = p.target;\n n.value = k.files, s(n.value);\n }, d.oncancel = () => {\n r();\n }), d;\n }), a = () => {\n n.value = null, l.value && l.value.value && (l.value.value = \"\", s(null));\n }, i = (v) => {\n const d = l.value;\n d && (d.multiple = b(v.multiple), d.accept = b(v.accept), d.webkitdirectory = b(v.directory), ft(v, \"capture\") && (d.capture = b(v.capture)));\n }, f = (v) => {\n const d = l.value;\n if (!d)\n return;\n const p = {\n ...yt,\n ...e,\n ...v\n };\n i(p), b(p.reset) && a(), d.click();\n };\n return Se(() => {\n i(e);\n }), {\n files: Ce(n),\n open: f,\n reset: a,\n onCancel: u,\n onChange: o\n };\n}\nconst xe = ue ? window : void 0;\nfunction N(e) {\n var t;\n const n = b(e);\n return (t = n?.$el) != null ? t : n;\n}\nfunction J(...e) {\n const t = [], n = () => {\n t.forEach((l) => l()), t.length = 0;\n }, o = (l, a, i, f) => (l.addEventListener(a, i, f), () => l.removeEventListener(a, i, f)), s = T(() => {\n const l = ee(b(e[0])).filter((a) => a != null);\n return l.every((a) => typeof a != \"string\") ? l : void 0;\n }), u = vt(\n () => {\n var l, a;\n return [\n (a = (l = s.value) == null ? void 0 : l.map((i) => N(i))) != null ? a : [xe].filter((i) => i != null),\n ee(b(s.value ? e[1] : e[0])),\n ee($(s.value ? e[2] : e[1])),\n // @ts-expect-error - TypeScript gets the correct types, but somehow still complains\n b(s.value ? e[3] : e[2])\n ];\n },\n ([l, a, i, f]) => {\n if (n(), !l?.length || !a?.length || !i?.length)\n return;\n const v = dt(f) ? { ...f } : f;\n t.push(\n ...l.flatMap(\n (d) => a.flatMap(\n (p) => i.map((k) => o(d, p, k, v))\n )\n )\n );\n },\n { flush: \"post\" }\n ), r = () => {\n u(), n();\n };\n return ie(n), r;\n}\nlet he = !1;\nfunction ge(e, t, n = {}) {\n const { window: o = xe, ignore: s = [], capture: u = !0, detectIframe: r = !1, controls: l = !1 } = n;\n if (!o)\n return l ? { stop: F, cancel: F, trigger: F } : F;\n if (le && !he) {\n he = !0;\n const m = { passive: !0 };\n Array.from(o.document.body.children).forEach((h) => h.addEventListener(\"click\", F, m)), o.document.documentElement.addEventListener(\"click\", F, m);\n }\n let a = !0;\n const i = (m) => b(s).some((h) => {\n if (typeof h == \"string\")\n return Array.from(o.document.querySelectorAll(h)).some((E) => E === m.target || m.composedPath().includes(E));\n {\n const E = N(h);\n return E && (m.target === E || m.composedPath().includes(E));\n }\n });\n function f(m) {\n const h = b(m);\n return h && h.$.subTree.shapeFlag === 16;\n }\n function v(m, h) {\n const E = b(m), y = E.$.subTree && E.$.subTree.children;\n return y == null || !Array.isArray(y) ? !1 : y.some((_) => _.el === h.target || h.composedPath().includes(_.el));\n }\n const d = (m) => {\n const h = N(e);\n if (m.target != null && !(!(h instanceof Element) && f(e) && v(e, m)) && !(!h || h === m.target || m.composedPath().includes(h))) {\n if (\"detail\" in m && m.detail === 0 && (a = !i(m)), !a) {\n a = !0;\n return;\n }\n t(m);\n }\n };\n let p = !1;\n const k = [\n J(o, \"click\", (m) => {\n p || (p = !0, setTimeout(() => {\n p = !1;\n }, 0), d(m));\n }, { passive: !0, capture: u }),\n J(o, \"pointerdown\", (m) => {\n const h = N(e);\n a = !i(m) && !!(h && !m.composedPath().includes(h));\n }, { passive: !0 }),\n r && J(o, \"blur\", (m) => {\n setTimeout(() => {\n var h;\n const E = N(e);\n ((h = o.document.activeElement) == null ? void 0 : h.tagName) === \"IFRAME\" && !E?.contains(o.document.activeElement) && t(m);\n }, 0);\n }, { passive: !0 })\n ].filter(Boolean), I = () => k.forEach((m) => m());\n return l ? {\n stop: I,\n cancel: () => {\n a = !1;\n },\n trigger: (m) => {\n a = !0, d(m), a = !1;\n }\n } : I;\n}\nconst te = /* @__PURE__ */ new WeakMap(), kt = {\n mounted(e, t) {\n const n = !t.modifiers.bubble;\n let o;\n if (typeof t.value == \"function\")\n o = ge(e, t.value, { capture: n });\n else {\n const [s, u] = t.value;\n o = ge(e, s, Object.assign({ capture: n }, u));\n }\n te.set(e, o);\n },\n unmounted(e) {\n const t = te.get(e);\n t && typeof t == \"function\" ? t() : t?.stop(), te.delete(e);\n }\n};\nfunction ne(e) {\n return typeof Window < \"u\" && e instanceof Window ? e.document.documentElement : typeof Document < \"u\" && e instanceof Document ? e.documentElement : e;\n}\nfunction Ve(e) {\n const t = window.getComputedStyle(e);\n if (t.overflowX === \"scroll\" || t.overflowY === \"scroll\" || t.overflowX === \"auto\" && e.clientWidth < e.scrollWidth || t.overflowY === \"auto\" && e.clientHeight < e.scrollHeight)\n return !0;\n {\n const n = e.parentNode;\n return !n || n.tagName === \"BODY\" ? !1 : Ve(n);\n }\n}\nfunction _t(e) {\n const t = e || window.event, n = t.target;\n return Ve(n) ? !1 : t.touches.length > 1 ? !0 : (t.preventDefault && t.preventDefault(), !1);\n}\nconst oe = /* @__PURE__ */ new WeakMap();\nfunction Dt(e, t = !1) {\n const n = G(t);\n let o = null, s = \"\";\n O(pt(e), (l) => {\n const a = ne(b(l));\n if (a) {\n const i = a;\n if (oe.get(i) || oe.set(i, i.style.overflow), i.style.overflow !== \"hidden\" && (s = i.style.overflow), i.style.overflow === \"hidden\")\n return n.value = !0;\n if (n.value)\n return i.style.overflow = \"hidden\";\n }\n }, {\n immediate: !0\n });\n const u = () => {\n const l = ne(b(e));\n !l || n.value || (le && (o = J(\n l,\n \"touchmove\",\n (a) => {\n _t(a);\n },\n { passive: !1 }\n )), l.style.overflow = \"hidden\", n.value = !0);\n }, r = () => {\n const l = ne(b(e));\n !l || !n.value || (le && o?.(), l.style.overflow = s, oe.delete(l), n.value = !1);\n };\n return ie(r), T({\n get() {\n return n.value;\n },\n set(l) {\n l ? u() : r();\n }\n });\n}\nfunction Et() {\n let e = !1;\n const t = G(!1);\n return (n, o) => {\n if (t.value = o.value, e)\n return;\n e = !0;\n const s = Dt(n, o.value);\n O(t, (u) => s.value = u);\n };\n}\nEt();\nconst Mt = { class: \"input-wrapper\" }, At = {\n id: \"autocomplete-results\",\n class: \"autocomplete-results\"\n}, It = {\n key: 0,\n class: \"loading autocomplete-result\"\n}, Tt = [\"onClick\"], Ct = /* @__PURE__ */ C({\n __name: \"ADropdown\",\n props: /* @__PURE__ */ z({\n label: {},\n items: {},\n isAsync: { type: Boolean },\n filterFunction: { type: Function }\n }, {\n modelValue: {},\n modelModifiers: {}\n }),\n emits: [\"update:modelValue\"],\n setup(e) {\n const t = q(e, \"modelValue\"), n = Ue({\n activeItemIndex: null,\n open: !1,\n loading: !1,\n results: e.items\n }), o = () => l(), s = async () => {\n if (n.open = !0, e.filterFunction) {\n e.isAsync && (n.loading = !0);\n try {\n const d = await e.filterFunction(t.value || \"\");\n n.results = d;\n } catch {\n n.results = [];\n } finally {\n e.isAsync && (n.loading = !1);\n }\n } else\n a();\n }, u = (d) => {\n t.value = d, l(d);\n }, r = () => {\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 = (d) => {\n n.activeItemIndex = null, n.open = !1, e.items?.includes(d || t.value || \"\") || (t.value = \"\");\n }, a = () => {\n t.value ? n.results = e.items?.filter((d) => d.toLowerCase().includes((t.value ?? \"\").toLowerCase())) : n.results = e.items;\n }, i = () => {\n const d = n.results?.length || 0;\n if (n.activeItemIndex != null) {\n const p = isNaN(n.activeItemIndex) ? 0 : n.activeItemIndex;\n n.activeItemIndex = (p + 1) % d;\n } else\n n.activeItemIndex = 0;\n }, f = () => {\n const d = n.results?.length || 0;\n if (n.activeItemIndex != null) {\n const p = isNaN(n.activeItemIndex) ? 0 : n.activeItemIndex;\n n.activeItemIndex = (p - 1 + d) % d;\n } else\n n.activeItemIndex = d - 1;\n }, v = () => {\n if (n.results) {\n const d = n.activeItemIndex || 0, p = n.results[d];\n u(p);\n }\n n.activeItemIndex = 0;\n };\n return (d, p) => M((g(), w(\"div\", {\n class: Z([\"autocomplete\", { isOpen: n.open }])\n }, [\n c(\"div\", Mt, [\n M(c(\"input\", {\n \"onUpdate:modelValue\": p[0] || (p[0] = (k) => t.value = k),\n type: \"text\",\n onInput: s,\n onFocus: r,\n onKeydown: [\n R(i, [\"down\"]),\n R(f, [\"up\"]),\n R(v, [\"enter\"]),\n R(o, [\"esc\"]),\n R(o, [\"tab\"])\n ]\n }, null, 544), [\n [H, t.value]\n ]),\n M(c(\"ul\", At, [\n n.loading ? (g(), w(\"li\", It, \"Loading results...\")) : (g(!0), w(Y, { key: 1 }, j(n.results, (k, I) => (g(), w(\"li\", {\n key: k,\n onClick: $e((m) => u(k), [\"stop\"]),\n class: Z([\"autocomplete-result\", { \"is-active\": I === n.activeItemIndex }])\n }, A(k), 11, Tt))), 128))\n ], 512), [\n [W, n.open]\n ]),\n c(\"label\", null, A(d.label), 1)\n ])\n ], 2)), [\n [$(kt), o]\n ]);\n }\n}), St = /* @__PURE__ */ L(Ct, [[\"__scopeId\", \"data-v-16c329d1\"]]);\nfunction ce(e) {\n return Ie() ? (Te(e), !0) : !1;\n}\nconst $t = typeof window < \"u\" && typeof document < \"u\";\ntypeof WorkerGlobalScope < \"u\" && globalThis instanceof WorkerGlobalScope;\nconst Lt = (e) => e != null, xt = Object.prototype.toString, Vt = (e) => xt.call(e) === \"[object Object]\", Pt = () => {\n};\nfunction Q(e) {\n return Array.isArray(e) ? e : [e];\n}\nfunction Ot(e, t, n) {\n return O(\n e,\n t,\n {\n ...n,\n immediate: !0\n }\n );\n}\nconst U = $t ? window : void 0;\nfunction B(e) {\n var t;\n const n = b(e);\n return (t = n?.$el) != null ? t : n;\n}\nfunction K(...e) {\n const t = [], n = () => {\n t.forEach((l) => l()), t.length = 0;\n }, o = (l, a, i, f) => (l.addEventListener(a, i, f), () => l.removeEventListener(a, i, f)), s = T(() => {\n const l = Q(b(e[0])).filter((a) => a != null);\n return l.every((a) => typeof a != \"string\") ? l : void 0;\n }), u = Ot(\n () => {\n var l, a;\n return [\n (a = (l = s.value) == null ? void 0 : l.map((i) => B(i))) != null ? a : [U].filter((i) => i != null),\n Q(b(s.value ? e[1] : e[0])),\n Q($(s.value ? e[2] : e[1])),\n // @ts-expect-error - TypeScript gets the correct types, but somehow still complains\n b(s.value ? e[3] : e[2])\n ];\n },\n ([l, a, i, f]) => {\n if (n(), !l?.length || !a?.length || !i?.length)\n return;\n const v = Vt(f) ? { ...f } : f;\n t.push(\n ...l.flatMap(\n (d) => a.flatMap(\n (p) => i.map((k) => o(d, p, k, v))\n )\n )\n );\n },\n { flush: \"post\" }\n ), r = () => {\n u(), n();\n };\n return ce(n), r;\n}\n// @__NO_SIDE_EFFECTS__\nfunction Ft() {\n const e = G(!1), t = Ye();\n return t && ae(() => {\n e.value = !0;\n }, t), e;\n}\n// @__NO_SIDE_EFFECTS__\nfunction Rt(e) {\n const t = /* @__PURE__ */ Ft();\n return T(() => (t.value, !!e()));\n}\nfunction Ht(e, t, n = {}) {\n const { window: o = U, ...s } = n;\n let u;\n const r = /* @__PURE__ */ Rt(() => o && \"MutationObserver\" in o), l = () => {\n u && (u.disconnect(), u = void 0);\n }, a = T(() => {\n const d = b(e), p = Q(d).map(B).filter(Lt);\n return new Set(p);\n }), i = O(\n () => a.value,\n (d) => {\n l(), r.value && d.size && (u = new MutationObserver(t), d.forEach((p) => u.observe(p, s)));\n },\n { immediate: !0, flush: \"post\" }\n ), f = () => u?.takeRecords(), v = () => {\n i(), l();\n };\n return ce(v), {\n isSupported: r,\n stop: v,\n takeRecords: f\n };\n}\nfunction Bt(e, t, n = {}) {\n const {\n window: o = U,\n document: s = o?.document,\n flush: u = \"sync\"\n } = n;\n if (!o || !s)\n return Pt;\n let r;\n const l = (f) => {\n r?.(), r = f;\n }, a = Se(() => {\n const f = B(e);\n if (f) {\n const { stop: v } = Ht(\n s,\n (d) => {\n d.map((p) => [...p.removedNodes]).flat().some((p) => p === f || p.contains(f)) && t(d);\n },\n {\n window: o,\n childList: !0,\n subtree: !0\n }\n );\n l(v);\n }\n }, { flush: u }), i = () => {\n a(), l();\n };\n return ce(i), i;\n}\n// @__NO_SIDE_EFFECTS__\nfunction qt(e = {}) {\n var t;\n const {\n window: n = U,\n deep: o = !0,\n triggerOnRemoval: s = !1\n } = e, u = (t = e.document) != null ? t : n?.document, r = () => {\n var i;\n let f = u?.activeElement;\n if (o)\n for (; f?.shadowRoot; )\n f = (i = f?.shadowRoot) == null ? void 0 : i.activeElement;\n return f;\n }, l = G(), a = () => {\n l.value = r();\n };\n if (n) {\n const i = {\n capture: !0,\n passive: !0\n };\n K(\n n,\n \"blur\",\n (f) => {\n f.relatedTarget === null && a();\n },\n i\n ), K(\n n,\n \"focus\",\n a,\n i\n );\n }\n return s && Bt(l, a, { document: u }), a(), l;\n}\nconst Wt = \"focusin\", Ut = \"focusout\", Nt = \":focus-within\";\nfunction Yt(e, t = {}) {\n const { window: n = U } = t, o = T(() => B(e)), s = G(!1), u = T(() => s.value);\n if (!n || !(/* @__PURE__ */ qt(t)).value)\n return { focused: u };\n const r = { passive: !0 };\n return K(o, Wt, () => s.value = !0, r), K(o, Ut, () => {\n var l, a, i;\n return s.value = (i = (a = (l = o.value) == null ? void 0 : l.matches) == null ? void 0 : a.call(l, Nt)) != null ? i : !1;\n }, r), { focused: u };\n}\nfunction jt(e, { window: t = U, scrollTarget: n } = {}) {\n const o = D(!1), s = () => {\n if (!t) return;\n const u = t.document, r = B(e);\n if (!r)\n o.value = !1;\n else {\n const l = r.getBoundingClientRect();\n o.value = l.top <= (t.innerHeight || u.documentElement.clientHeight) && l.left <= (t.innerWidth || u.documentElement.clientWidth) && l.bottom >= 0 && l.right >= 0;\n }\n };\n return O(\n () => B(e),\n () => s(),\n { immediate: !0, flush: \"post\" }\n ), t && K(n || t, \"scroll\", s, {\n capture: !1,\n passive: !0\n }), o;\n}\nconst x = (e) => {\n let t = jt(e).value;\n return t = t && e.offsetHeight > 0, t;\n}, V = (e) => e.tabIndex >= 0, ye = (e) => {\n const t = e.target;\n return de(t);\n}, de = (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 && (!V(t) || !x(t)) ? de(t) : t;\n}, Kt = (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 s = o.firstElementChild?.children[t.cellIndex];\n s && (n = s);\n }\n } else if (t instanceof HTMLTableRowElement) {\n const o = t.parentElement;\n if (o) {\n const s = o.firstElementChild;\n s && (n = s);\n }\n }\n return n && (!V(n) || !x(n)) ? fe(n) : n;\n}, be = (e) => {\n const t = e.target;\n return fe(t);\n}, fe = (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 && (!V(t) || !x(t)) ? fe(t) : t;\n}, zt = (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 s = o.lastElementChild?.children[t.cellIndex];\n s && (n = s);\n }\n } else if (t instanceof HTMLTableRowElement) {\n const o = t.parentElement;\n if (o) {\n const s = o.lastElementChild;\n s && (n = s);\n }\n }\n return n && (!V(n) || !x(n)) ? de(n) : n;\n}, we = (e) => {\n const t = e.target;\n return me(t);\n}, me = (e) => {\n let t;\n return e.previousElementSibling ? t = e.previousElementSibling : t = e.parentElement?.previousElementSibling?.lastElementChild, t && (!V(t) || !x(t)) ? me(t) : t;\n}, ke = (e) => {\n const t = e.target;\n return pe(t);\n}, pe = (e) => {\n let t;\n return e.nextElementSibling ? t = e.nextElementSibling : t = e.parentElement?.nextElementSibling?.firstElementChild, t && (!V(t) || !x(t)) ? pe(t) : t;\n}, _e = (e) => {\n const t = e.target.parentElement?.firstElementChild;\n return t && (!V(t) || !x(t)) ? pe(t) : t;\n}, De = (e) => {\n const t = e.target.parentElement?.lastElementChild;\n return t && (!V(t) || !x(t)) ? me(t) : t;\n}, X = [\"alt\", \"control\", \"shift\", \"meta\"], Gt = {\n ArrowUp: \"up\",\n ArrowDown: \"down\",\n ArrowLeft: \"left\",\n ArrowRight: \"right\"\n}, Pe = {\n \"keydown.up\": (e) => {\n const t = ye(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.down\": (e) => {\n const t = be(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.left\": (e) => {\n const t = we(e);\n e.preventDefault(), e.stopPropagation(), t && t.focus();\n },\n \"keydown.right\": (e) => {\n const t = ke(e);\n e.preventDefault(), e.stopPropagation(), t && t.focus();\n },\n \"keydown.control.up\": (e) => {\n const t = Kt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.down\": (e) => {\n const t = zt(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.left\": (e) => {\n const t = _e(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.right\": (e) => {\n const t = De(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.end\": (e) => {\n const t = De(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 = be(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 = ye(e);\n t && t.focus();\n }\n },\n \"keydown.home\": (e) => {\n const t = _e(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.tab\": (e) => {\n const t = ke(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.shift.tab\": (e) => {\n const t = we(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n }\n};\nfunction Xt(e) {\n const t = (r) => {\n let l = null;\n return r.parent && (typeof r.parent == \"string\" ? l = document.querySelector(r.parent) : r.parent instanceof HTMLElement ? l = r.parent : l = r.parent.value), l;\n }, n = (r) => {\n const l = t(r);\n let a = [];\n if (typeof r.selectors == \"string\")\n a = l ? Array.from(l.querySelectorAll(r.selectors)) : Array.from(document.querySelectorAll(r.selectors));\n else if (Array.isArray(r.selectors))\n for (const i of r.selectors)\n i instanceof HTMLElement ? a.push(i) : a.push(i.$el);\n else if (r.selectors instanceof HTMLElement)\n a.push(r.selectors);\n else if (r.selectors?.value)\n if (Array.isArray(r.selectors.value))\n for (const i of r.selectors.value)\n i instanceof HTMLElement ? a.push(i) : a.push(i.$el);\n else\n a.push(r.selectors.value);\n return a;\n }, o = (r) => {\n const l = t(r);\n let a = [];\n return r.selectors ? a = n(r) : l && (a = Array.from(l.children).filter((i) => V(i) && x(i))), a;\n }, s = (r) => (l) => {\n const a = Gt[l.key] || l.key.toLowerCase();\n if (X.includes(a)) return;\n const i = r.handlers || Pe;\n for (const f of Object.keys(i)) {\n const [v, ...d] = f.split(\".\");\n if (v === \"keydown\" && d.includes(a)) {\n const p = i[f], k = d.filter((m) => X.includes(m)), I = X.some((m) => {\n const h = m.charAt(0).toUpperCase() + m.slice(1);\n return l.getModifierState(h);\n });\n if (k.length > 0) {\n if (I) {\n for (const m of X)\n if (d.includes(m)) {\n const h = m.charAt(0).toUpperCase() + m.slice(1);\n l.getModifierState(h) && p(l);\n }\n }\n } else\n I || p(l);\n }\n }\n }, u = [];\n ae(() => {\n for (const r of e) {\n const l = t(r), a = o(r), i = s(r), f = l ? [l] : a;\n for (const v of f) {\n const { focused: d } = Yt(D(v)), p = O(d, (k) => {\n k ? v.addEventListener(\"keydown\", i) : v.removeEventListener(\"keydown\", i);\n });\n u.push(p);\n }\n }\n }), Ne(() => {\n for (const r of u)\n r();\n });\n}\nconst Jt = {\n class: \"adatepicker\",\n tabindex: \"0\",\n ref: \"datepicker\"\n}, Qt = {\n colspan: \"5\",\n tabindex: -1\n}, Zt = [\"onClick\", \"onKeydown\"], en = 6, Ee = 7, tn = /* @__PURE__ */ C({\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 = q(e, \"modelValue\"), o = D(new Date(n.value)), s = D(o.value.getMonth()), u = D(o.value.getFullYear()), r = D([]), l = Ae(\"datepicker\");\n ae(async () => {\n a(), await je();\n const y = document.getElementsByClassName(\"selectedDate\");\n if (y.length > 0)\n y[0].focus();\n else {\n const _ = document.getElementsByClassName(\"todaysDate\");\n _.length > 0 && _[0].focus();\n }\n });\n const a = () => {\n r.value = [];\n const y = new Date(u.value, s.value, 1), _ = y.getDay(), S = y.setDate(y.getDate() - _);\n for (const P of Array(43).keys())\n r.value.push(S + P * 864e5);\n };\n O([s, u], a);\n const i = () => u.value -= 1, f = () => u.value += 1, v = () => {\n s.value == 0 ? (s.value = 11, i()) : s.value -= 1;\n }, d = () => {\n s.value == 11 ? (s.value = 0, f()) : s.value += 1;\n }, p = (y) => {\n const _ = /* @__PURE__ */ new Date();\n if (s.value === _.getMonth())\n return _.toDateString() === new Date(y).toDateString();\n }, k = (y) => new Date(y).toDateString() === new Date(o.value).toDateString(), I = (y, _) => (y - 1) * Ee + _, m = (y, _) => r.value[I(y, _)], h = (y) => {\n n.value = o.value = new Date(r.value[y]);\n }, E = T(() => new Date(u.value, s.value, 1).toLocaleDateString(void 0, {\n year: \"numeric\",\n month: \"long\"\n }));\n return Xt([\n {\n parent: l,\n selectors: \"td\",\n handlers: {\n ...Pe,\n \"keydown.pageup\": v,\n \"keydown.shift.pageup\": i,\n \"keydown.pagedown\": d,\n \"keydown.shift.pagedown\": f,\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 // eslint-disable-next-line @typescript-eslint/no-empty-function\n \"keydown.enter\": () => {\n }\n }\n }\n ]), t({ currentMonth: s, currentYear: u, selectedDate: o }), (y, _) => (g(), w(\"div\", Jt, [\n c(\"table\", null, [\n c(\"tbody\", null, [\n c(\"tr\", null, [\n c(\"td\", {\n id: \"previous-month-btn\",\n onClick: v,\n tabindex: -1\n }, \"<\"),\n c(\"th\", Qt, A(E.value), 1),\n c(\"td\", {\n id: \"next-month-btn\",\n onClick: d,\n tabindex: -1\n }, \">\")\n ]),\n _[0] || (_[0] = c(\"tr\", { class: \"days-header\" }, [\n c(\"td\", null, \"M\"),\n c(\"td\", null, \"T\"),\n c(\"td\", null, \"W\"),\n c(\"td\", null, \"T\"),\n c(\"td\", null, \"F\"),\n c(\"td\", null, \"S\"),\n c(\"td\", null, \"S\")\n ], -1)),\n (g(), w(Y, null, j(en, (S) => c(\"tr\", { key: S }, [\n (g(), w(Y, null, j(Ee, (P) => c(\"td\", {\n ref_for: !0,\n ref: \"celldate\",\n key: I(S, P),\n contenteditable: !1,\n spellcheck: !1,\n tabindex: 0,\n onClick: $e((Fe) => h(I(S, P)), [\"prevent\", \"stop\"]),\n onKeydown: R((Fe) => h(I(S, P)), [\"enter\"]),\n class: Z({\n todaysDate: p(m(S, P)),\n selectedDate: k(m(S, P))\n })\n }, A(new Date(m(S, P)).getDate()), 43, Zt)), 64))\n ])), 64))\n ])\n ])\n ], 512));\n }\n}), nn = /* @__PURE__ */ L(tn, [[\"__scopeId\", \"data-v-f49cfd40\"]]), on = /* @__PURE__ */ C({\n __name: \"CollapseButton\",\n props: {\n collapsed: { type: Boolean }\n },\n setup(e) {\n return (t, n) => (g(), w(\"button\", {\n class: Z([\"collapse-button\", t.collapsed ? \"rotated\" : \"unrotated\"])\n }, \"×\", 2));\n }\n}), ln = /* @__PURE__ */ L(on, [[\"__scopeId\", \"data-v-6f1c1b45\"]]), sn = { class: \"aform\" }, an = /* @__PURE__ */ C({\n __name: \"AForm\",\n props: {\n modelValue: {},\n data: {},\n readonly: { type: Boolean }\n },\n emits: [\"update:modelValue\"],\n setup(e, { emit: t }) {\n const n = t, o = D(e.data || {}), s = (r) => {\n let l = {};\n for (const [a, i] of Object.entries(r))\n [\"component\", \"fieldtype\"].includes(a) || (l[a] = i), a === \"rows\" && i && i.length === 0 && (l.rows = o.value[r.fieldname]);\n return l;\n }, u = T({\n get: () => e.modelValue.map((r, l) => T({\n get() {\n return r.value;\n },\n set: (a) => {\n e.modelValue[l].value = a, n(\"update:modelValue\", e.modelValue);\n }\n })),\n set: () => {\n }\n });\n return (r, l) => (g(), w(\"form\", sn, [\n (g(!0), w(Y, null, j(r.modelValue, (a, i) => (g(), se(Ke(a.component), ze({\n key: i,\n schema: a,\n modelValue: u.value[i].value,\n \"onUpdate:modelValue\": (f) => u.value[i].value = f,\n data: o.value[a.fieldname],\n readonly: r.readonly\n }, { ref_for: !0 }, s(a)), null, 16, [\"schema\", \"modelValue\", \"onUpdate:modelValue\", \"data\", \"readonly\"]))), 128))\n ]));\n }\n}), Oe = /* @__PURE__ */ L(an, [[\"__scopeId\", \"data-v-68845234\"]]), rn = /* @__PURE__ */ C({\n __name: \"AFieldset\",\n props: {\n schema: {},\n label: {},\n collapsible: { type: Boolean },\n data: {}\n },\n setup(e, { expose: t }) {\n const n = D(!1), o = D(e.data || []), s = D(e.schema), u = (r) => {\n r.preventDefault(), e.collapsible && (n.value = !n.value);\n };\n return t({ collapsed: n }), (r, l) => (g(), w(\"fieldset\", null, [\n c(\"legend\", {\n onClick: u,\n onSubmit: u\n }, [\n Le(A(r.label) + \" \", 1),\n r.collapsible ? (g(), se(ln, {\n key: 0,\n collapsed: n.value\n }, null, 8, [\"collapsed\"])) : re(\"\", !0)\n ], 32),\n Ge(r.$slots, \"default\", { collapsed: n.value }, () => [\n M(Xe(Oe, {\n modelValue: s.value,\n \"onUpdate:modelValue\": l[0] || (l[0] = (a) => s.value = a),\n data: o.value\n }, null, 8, [\"modelValue\", \"data\"]), [\n [W, !n.value]\n ])\n ], !0)\n ]));\n }\n}), un = /* @__PURE__ */ L(rn, [[\"__scopeId\", \"data-v-e7ea7e12\"]]), cn = { class: \"aform_form-element aform_file-attach aform__grid--full\" }, dn = {\n key: 0,\n class: \"aform_file-attach-feedback\"\n}, fn = [\"disabled\"], mn = /* @__PURE__ */ C({\n __name: \"AFileAttach\",\n props: {\n label: {}\n },\n setup(e) {\n const { files: t, open: n, reset: o, onChange: s } = wt(), u = T(() => `${t.value.length} ${t.value.length === 1 ? \"file\" : \"files\"}`);\n return s((r) => r), (r, l) => (g(), w(\"div\", cn, [\n $(t) ? (g(), w(\"div\", dn, [\n c(\"p\", null, [\n l[2] || (l[2] = Le(\" You have selected: \", -1)),\n c(\"b\", null, A(u.value), 1)\n ]),\n (g(!0), w(Y, null, j($(t), (a) => (g(), w(\"li\", {\n key: a.name\n }, A(a.name), 1))), 128))\n ])) : re(\"\", !0),\n c(\"button\", {\n type: \"button\",\n onClick: l[0] || (l[0] = (a) => $(n)()),\n class: \"aform_form-btn\"\n }, A(r.label), 1),\n c(\"button\", {\n type: \"button\",\n disabled: !$(t),\n onClick: l[1] || (l[1] = (a) => $(o)()),\n class: \"aform_form-btn\"\n }, \"Reset\", 8, fn)\n ]));\n }\n}), pn = /* @__PURE__ */ L(mn, [[\"__scopeId\", \"data-v-0b3a11cc\"]]), vn = { class: \"aform_form-element\" }, hn = [\"id\", \"disabled\", \"required\"], gn = [\"for\"], yn = [\"innerHTML\"], bn = /* @__PURE__ */ C({\n __name: \"ANumericInput\",\n props: /* @__PURE__ */ z({\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 = q(e, \"modelValue\");\n return (n, o) => (g(), w(\"div\", vn, [\n M(c(\"input\", {\n class: \"aform_input-field\",\n \"onUpdate:modelValue\": o[0] || (o[0] = (s) => t.value = s),\n type: \"number\",\n id: n.uuid,\n disabled: n.readonly,\n required: n.required\n }, null, 8, hn), [\n [H, t.value]\n ]),\n c(\"label\", {\n class: \"aform_field-label\",\n for: n.uuid\n }, A(n.label), 9, gn),\n M(c(\"p\", {\n class: \"aform_error\",\n innerHTML: n.validation.errorMessage\n }, null, 8, yn), [\n [W, n.validation.errorMessage]\n ])\n ]));\n }\n}), Me = {\n date: \"##/##/####\",\n datetime: \"####/##/## ##:##\",\n time: \"##:##\",\n fulltime: \"##:##:##\",\n phone: \"(###) ### - ####\",\n card: \"#### #### #### ####\"\n};\nfunction wn(e) {\n try {\n return Function(`\"use strict\";return (${e})`)();\n } catch {\n }\n}\nfunction kn(e) {\n let t = e.value;\n if (t) {\n const n = wn(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 && Me[o] && (t = Me[o]);\n }\n return t;\n}\nfunction _n(e, t) {\n let n = e;\n const o = [t, \"/\", \"-\", \"(\", \")\", \" \"];\n for (const s of o)\n n = n.replaceAll(s, \"\");\n return n;\n}\nfunction Dn(e, t, n) {\n let o = t;\n for (const s of e) {\n const u = o.indexOf(n);\n if (u !== -1) {\n const r = o.substring(0, u), l = o.substring(u + 1);\n o = r + s + l;\n }\n }\n return o.slice(0, t.length);\n}\nfunction En(e, t) {\n const n = kn(t);\n if (!n) return;\n const o = \"#\", s = e.value, u = _n(s, o);\n if (u) {\n const r = Dn(u, n, o);\n t.instance?.maskFilled && (t.instance.maskFilled = !r.includes(o)), e.value = r;\n } else\n e.value = n;\n}\nconst Mn = { class: \"aform_form-element\" }, An = [\"id\", \"disabled\", \"maxlength\", \"required\"], In = [\"for\"], Tn = [\"innerHTML\"], Cn = /* @__PURE__ */ C({\n __name: \"ATextInput\",\n props: /* @__PURE__ */ z({\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 = D(!0), n = q(e, \"modelValue\");\n return (o, s) => (g(), w(\"div\", Mn, [\n M(c(\"input\", {\n class: \"aform_input-field\",\n \"onUpdate:modelValue\": s[0] || (s[0] = (u) => n.value = u),\n id: o.uuid,\n disabled: o.readonly,\n maxlength: o.mask ? t.value && o.mask.length : void 0,\n required: o.required\n }, null, 8, An), [\n [H, n.value],\n [$(En), o.mask]\n ]),\n c(\"label\", {\n class: \"aform_field-label\",\n for: o.uuid\n }, A(o.label), 9, In),\n M(c(\"p\", {\n class: \"aform_error\",\n innerHTML: o.validation.errorMessage\n }, null, 8, Tn), [\n [W, o.validation.errorMessage]\n ])\n ]));\n }\n}), Sn = { class: \"login-container\" }, $n = { class: \"account-container\" }, Ln = { class: \"account-header\" }, xn = { id: \"account-title\" }, Vn = { id: \"account-subtitle\" }, Pn = { class: \"login-form-container\" }, On = { class: \"login-form-email aform_form-element\" }, Fn = [\"disabled\"], Rn = { class: \"login-form-password aform_form-element\" }, Hn = [\"disabled\"], Bn = [\"disabled\"], qn = {\n key: 0,\n class: \"material-symbols-outlined loading-icon\"\n}, Wn = /* @__PURE__ */ C({\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 = D(\"\"), s = D(\"\"), u = D(!1), r = D(!1);\n function l(a) {\n if (a.preventDefault(), u.value = !0, r.value) {\n u.value = !1, n(\"loginFailed\");\n return;\n }\n u.value = !1, n(\"loginSuccess\");\n }\n return (a, i) => (g(), w(\"div\", Sn, [\n c(\"div\", null, [\n c(\"div\", $n, [\n c(\"div\", Ln, [\n c(\"h1\", xn, A(a.headerTitle), 1),\n c(\"p\", Vn, A(a.headerSubtitle), 1)\n ]),\n c(\"form\", { onSubmit: l }, [\n c(\"div\", Pn, [\n c(\"div\", On, [\n i[2] || (i[2] = c(\"label\", {\n id: \"login-email\",\n for: \"email\",\n class: \"aform_field-label\"\n }, \"Email\", -1)),\n M(c(\"input\", {\n id: \"email\",\n class: \"aform_input-field\",\n name: \"email\",\n placeholder: \"name@example.com\",\n type: \"email\",\n \"onUpdate:modelValue\": i[0] || (i[0] = (f) => o.value = f),\n \"auto-capitalize\": \"none\",\n \"auto-complete\": \"email\",\n \"auto-correct\": \"off\",\n disabled: u.value\n }, null, 8, Fn), [\n [H, o.value]\n ])\n ]),\n c(\"div\", Rn, [\n i[3] || (i[3] = c(\"label\", {\n id: \"login-password\",\n for: \"password\",\n class: \"aform_field-label\"\n }, \"Password\", -1)),\n M(c(\"input\", {\n id: \"password\",\n class: \"aform_input-field\",\n name: \"password\",\n type: \"password\",\n \"onUpdate:modelValue\": i[1] || (i[1] = (f) => s.value = f),\n disabled: u.value\n }, null, 8, Hn), [\n [H, s.value]\n ])\n ]),\n c(\"button\", {\n class: \"btn\",\n onClick: l,\n disabled: u.value || !o.value || !s.value\n }, [\n u.value ? (g(), w(\"span\", qn, \"progress_activity\")) : re(\"\", !0),\n i[4] || (i[4] = c(\"span\", { id: \"login-form-button\" }, \"Login\", -1))\n ], 8, Bn)\n ])\n ], 32),\n i[5] || (i[5] = c(\"button\", { class: \"btn\" }, [\n c(\"span\", { id: \"forgot-password-button\" }, \"Forgot password?\")\n ], -1))\n ])\n ])\n ]));\n }\n}), Nn = /* @__PURE__ */ L(Wn, [[\"__scopeId\", \"data-v-6cbd3add\"]]);\nfunction Yn(e) {\n e.component(\"ACheckbox\", ot), e.component(\"ACombobox\", lt), e.component(\"ADate\", ut), e.component(\"ADropdown\", St), e.component(\"ADatePicker\", nn), e.component(\"AFieldset\", un), e.component(\"AFileAttach\", pn), e.component(\"AForm\", Oe), e.component(\"ANumericInput\", bn), e.component(\"ATextInput\", Cn);\n}\nexport {\n ot as ACheckbox,\n lt as AComboBox,\n ut as ADate,\n nn as ADatePicker,\n St as ADropdown,\n un as AFieldset,\n pn as AFileAttach,\n Oe as AForm,\n bn as ANumericInput,\n Cn as ATextInput,\n Nn as Login,\n Yn 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@click=\"navigateHome\"\n\t\t\t\t@keydown.enter=\"navigateHome\"\n\t\t\t\t:style=\"{ display: breadcrumbsVisibile ? 'block' : 'none' }\">\n\t\t\t\t<router-link to=\"/home\" tabindex=\"0\">\n\t\t\t\t\t<svg\n\t\t\t\t\t\tversion=\"1.1\"\n\t\t\t\t\t\tid=\"Capa_1\"\n\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\t\t\t\t\t\tx=\"0px\"\n\t\t\t\t\t\ty=\"0px\"\n\t\t\t\t\t\tviewBox=\"0 0 424.098 424.098\"\n\t\t\t\t\t\tstyle=\"enable-background: new 0 0 424.098 424.098\"\n\t\t\t\t\t\txml:space=\"preserve\">\n\t\t\t\t\t\t<g>\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\tstyle=\"fill: #010002\"\n\t\t\t\t\t\t\t\td=\"M351.191,401.923H72.901c-4.487,0-8.129-3.633-8.129-8.129V242.262l-56.664-0.114\n\t\t\t\t\t\t\t\tc-3.284-0.008-6.243-1.992-7.495-5.023c-1.252-3.04-0.553-6.527,1.764-8.852L206.104,24.546c1.853-1.845,4.503-2.666,7.047-2.276\n\t\t\t\t\t\t\t\tc2.414,0.39,4.511,1.845,5.731,3.942l47.43,47.43V58.499c0-4.487,3.633-8.129,8.129-8.129h47.755c4.495,0,8.129,3.642,8.129,8.129\n\t\t\t\t\t\t\t\tv79.156l91.39,91.398c2.325,2.325,3.024,5.828,1.764,8.868c-1.26,3.032-4.227,5.007-7.511,5.007c-0.008,0-0.008,0-0.016,0\n\t\t\t\t\t\t\t\tl-56.64-0.114v150.98C359.32,398.29,355.686,401.923,351.191,401.923z M81.03,385.666h262.033V234.67\n\t\t\t\t\t\t\t\tc0-2.162,0.854-4.235,2.39-5.755c1.528-1.52,3.585-2.374,5.739-2.374c0.008,0,0.008,0,0.016,0l45.105,0.089l-79.855-79.863\n\t\t\t\t\t\t\t\tc-1.528-1.528-2.382-3.593-2.382-5.747V66.628h-31.498v26.645c0,3.284-1.975,6.251-5.015,7.511\n\t\t\t\t\t\t\t\tc-3.032,1.268-6.527,0.569-8.86-1.764l-57.038-57.038l-183.95,183.95l45.203,0.089c4.487,0.008,8.112,3.642,8.112,8.129\n\t\t\t\t\t\t\t\tC81.03,234.149,81.03,385.666,81.03,385.666z\" />\n\t\t\t\t\t\t</g>\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\tclass=\"searchtab\"\n\t\t\t\t@click=\"toggleSearch\"\n\t\t\t\t@keydown.enter=\"toggleSearch\"\n\t\t\t\t:style=\"{ display: breadcrumbsVisibile ? 'block' : 'none' }\">\n\t\t\t\t<a tabindex=\"0\">\n\t\t\t\t\t<span :style=\"{ display: searchVisibile ? 'none' : 'block' }\">\n\t\t\t\t\t\t<svg style=\"width: 11pt\">\n\t\t\t\t\t\t\t<g transform=\"matrix(-0.08088215,0,0,0.08088215,9.8016177,3.1263021e-6)\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M 93.148438,80.832031 C 109.5,57.742188 104.03125,25.769531 80.941406,9.421875 57.851562,-6.925781 25.878906,-1.460938 9.53125,21.632812 -6.816406,44.722656 -1.351562,76.691406 21.742188,93.039062 38.222656,104.70703 60.011719,105.60547 77.394531,95.339844 l 37.769529,37.542966 c 4.07813,4.29297 10.86328,4.46485 15.15625,0.38672 4.29297,-4.07422 4.46485,-10.85937 0.39063,-15.15234 -0.12891,-0.13672 -0.25391,-0.26172 -0.39063,-0.39063 z m -41.839844,3.5 C 33.0625,84.335938 18.269531,69.554688 18.257812,51.308594 18.253906,33.0625 33.035156,18.269531 51.285156,18.261719 c 18.222656,-0.0078 33.007813,14.75 33.042969,32.972656 0.03125,18.25 -14.742187,33.066406 -32.996094,33.097656 -0.0078,0 -0.01172,0 -0.02344,0 z m 0,0\"\n\t\t\t\t\t\t\t\t\tstyle=\"fill: #000000; fill-opacity: 1; fill-rule: nonzero; stroke: none\"\n\t\t\t\t\t\t\t\t\tid=\"path2\" />\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</span>\n\t\t\t\t\t<input\n\t\t\t\t\t\tv-model=\"searchText\"\n\t\t\t\t\t\tref=\"searchinput\"\n\t\t\t\t\t\t:style=\"{ display: searchVisibile ? 'block' : 'none' }\"\n\t\t\t\t\t\t@click=\"handleSearchInput($event)\"\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\ttype=\"text\" />\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 searchVisibile = 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\tsearchVisibile.value = !searchVisibile.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: 2rem;\n\tz-index: 100;\n\ttext-align: left;\n\tfont-size: 100%;\n\tdisplay: flex;\n\tjustify-content: right;\n\tpadding-bottom: 0.2rem;\n}\nul {\n\tdisplay: flex;\n\tflex-direction: row-reverse;\n}\n\n.tabs li {\n\t/* Makes a horizontal row */\n\tfloat: left;\n\tlist-style-type: none;\n\t/* So the psueudo elements can be\n abs. positioned inside */\n\tposition: relative;\n\tmargin-left: -1px;\n}\n.tabs a {\n\tfloat: left;\n\tpadding: 1ch 4ch 4ch 4ch;\n\ttext-decoration: none;\n\tcolor: black;\n\tbackground: #aaa;\n\toutline: 2px solid inherit;\n\toutline-offset: -2px;\n\n\t/* Only round the top corners */\n\t-webkit-border-top-left-radius: 15px;\n\t-webkit-border-top-right-radius: 15px;\n\t-moz-border-radius-topleft: 15px;\n\t-moz-border-radius-topright: 15px;\n\tborder-top-left-radius: 15px;\n\tborder-top-right-radius: 15px;\n\n\tborder: 1px solid #ccc;\n}\n.tabs .router-link-active {\n\t/* Highest, active tab is on top */\n\tz-index: 3;\n}\n.router-link-active {\n\t/* Colors when tab is active */\n\tbackground: #827553;\n\tcolor: black;\n\tbox-shadow: #999;\n}\n.tabs li:before,\n.tabs li:after,\n.tabs li a:before,\n.tabs li a:after {\n\t/* All pseudo elements are\n abs. positioned and on bottom */\n\tposition: absolute;\n\tbottom: 0;\n}\n/* Only the first, last, and active\n tabs need pseudo elements at all */\n.tabs li:last-child:after,\n.tabs li:last-child a:after,\n.tabs li:first-child:before,\n.tabs li:first-child a:before,\n.tabs .router-link-active:after,\n.tabs .router-link-active:before,\n.tabs .router-link-active a:after,\n.tabs .router-link-active a:before {\n\tcontent: '';\n}\n.tabs .router-link-active:before,\n.tabs .router-link-active:after {\n\tbackground: transparent;\n\n\t/* Squares below circles */\n\tz-index: 1;\n}\n/* Squares */\n.tabs li:before,\n.tabs li:after {\n\tbackground: transparent;\n\twidth: 10px;\n\theight: 10px;\n}\n.tabs li:before {\n\tleft: -10px;\n}\n.tabs li:after {\n\tright: -10px;\n}\n/* Circles */\n.tabs li a:after,\n.tabs li a:before {\n\twidth: 20px;\n\theight: 20px;\n\t/* Circles are circular */\n\t-webkit-border-radius: 10px;\n\t-moz-border-radius: 10px;\n\tborder-radius: 10px;\n\tbackground: transparent;\n\n\t/* Circles over squares */\n\tz-index: 2;\n}\n.tabs .router-link-active a:after,\n.tabs .router-link-active a:before {\n\tbackground: transparent;\n}\n/* First and last tabs have different\n outside color needs */\n.tabs li:first-child.router-link-active a:before,\n.tabs li:last-child.router-link-active a:after {\n\tbackground: transparent;\n}\n.tabs li a:before {\n\tleft: -20px;\n}\n.tabs li a:after {\n\tright: -20px;\n}\n.hidebreadcrumbs a {\n\twidth: 1ch;\n\tmin-width: calc(66px - 4ch);\n\tbackground-color: #ffffff;\n\tpadding-left: 2ch;\n\tpadding-right: 2ch;\n\tpadding-top: 3px;\n\tfont-size: 150%;\n\ttext-align: center;\n}\n.rotated {\n\t/* border: 1px solid red; */\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;\n}\n.unrotated {\n\t/* border: 1px solid red; */\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;\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 black;\n\tz-index: 3;\n}\n.hometab a {\n\twidth: 1ch;\n\tmin-width: calc(66px - 4ch);\n\tbackground-color: #ffffff;\n\tpadding-left: 2ch;\n\tpadding-right: 2ch;\n\tpadding-top: 6px;\n\ttext-align: center;\n}\n.hometab svg {\n\theight: 14pt;\n\twidth: 14pt;\n}\n.searchtab a {\n\t/* width: 100%; */\n\tmin-width: calc(66px - 4ch);\n\tbackground-color: #ffffff;\n\tpadding-left: 2ch;\n\tpadding-right: 2ch;\n\tpadding-top: 11px;\n\tfont-size: 150%;\n\talign-items: center;\n}\n.searchtab svg {\n\tpadding-left: 0.25ch;\n}\n.searchtab input {\n\tmargin-top: -4px;\n\toutline: none;\n\tborder: none;\n\tborder-bottom: 1.5px solid black;\n\tbackground-color: transparent;\n\ttext-align: right;\n\tfont-size: 11pt;\n}\n</style>\n","<template>\n\t<Teleport to=\"body\">\n\t\t<div v-if=\"notifications.length > 0\" class=\"notification-container\">\n\t\t\t<TransitionGroup name=\"notification\" tag=\"div\">\n\t\t\t\t<div\n\t\t\t\t\tv-for=\"notification in notifications\"\n\t\t\t\t\t:key=\"notification.id\"\n\t\t\t\t\t:class=\"['notification', `notification-${notification.type}`]\">\n\t\t\t\t\t<div class=\"notification-icon\">\n\t\t\t\t\t\t<span v-if=\"notification.type === 'success'\">✅</span>\n\t\t\t\t\t\t<span v-else-if=\"notification.type === 'warning'\">⚠️</span>\n\t\t\t\t\t\t<span v-else-if=\"notification.type === 'error'\">❌</span>\n\t\t\t\t\t\t<span v-else>ℹ️</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"notification-content\">\n\t\t\t\t\t\t<p class=\"notification-message\">{{ notification.message }}</p>\n\t\t\t\t\t\t<p class=\"notification-time\">{{ formatTime(notification.timestamp) }}</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<button class=\"notification-close\" @click=\"removeNotification(notification.id)\">×</button>\n\t\t\t\t</div>\n\t\t\t</TransitionGroup>\n\t\t</div>\n\t</Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, onUnmounted } from 'vue'\n\n// Define notification interface\ninterface Notification {\n\tid: string\n\tmessage: string\n\ttype: 'info' | 'success' | 'warning' | 'error'\n\ttimestamp: Date\n}\n\n// Local reactive notifications array\nconst notifications = ref<Notification[]>([])\n\n// Access global notifications if available\nlet globalNotifications: any = null\ntry {\n\t// Dynamically import the notifications from examples\n\tconst actionsModule = await import('../../../examples/desktop/actions')\n\tif (actionsModule && actionsModule.notifications) {\n\t\tglobalNotifications = actionsModule.notifications\n\t}\n} catch (error) {\n\tconsole.log('Field trigger actions not available')\n}\n\nfunction removeNotification(id: string) {\n\tconst index = notifications.value.findIndex(n => n.id === id)\n\tif (index > -1) {\n\t\tnotifications.value.splice(index, 1)\n\t}\n\t\n\t// Also remove from global notifications if available\n\tif (globalNotifications) {\n\t\tconst globalIndex = globalNotifications.findIndex((n: any) => n.id === id)\n\t\tif (globalIndex > -1) {\n\t\t\tglobalNotifications.splice(globalIndex, 1)\n\t\t}\n\t}\n}\n\nfunction formatTime(timestamp: Date): string {\n\treturn timestamp.toLocaleTimeString()\n}\n\n// Sync with global notifications\nlet pollInterval: number | undefined\n\nonMounted(() => {\n\t// Poll for changes from global notifications\n\tpollInterval = setInterval(() => {\n\t\tif (globalNotifications) {\n\t\t\t// Sync global notifications to local reactive array\n\t\t\tnotifications.value = [...globalNotifications]\n\t\t}\n\t}, 100) as any\n})\n\nonUnmounted(() => {\n\tif (pollInterval) {\n\t\tclearInterval(pollInterval)\n\t}\n})\n</script>\n\n<style scoped>\n.notification-container {\n\tposition: fixed;\n\ttop: 20px;\n\tright: 20px;\n\tz-index: 9999;\n\tmax-width: 400px;\n\tpointer-events: none;\n}\n\n.notification {\n\tdisplay: flex;\n\talign-items: flex-start;\n\tgap: 12px;\n\tbackground: white;\n\tborder-radius: 8px;\n\tpadding: 16px;\n\tmargin-bottom: 12px;\n\tbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n\tborder-left: 4px solid #e5e7eb;\n\tpointer-events: auto;\n\tmax-width: 400px;\n\tword-wrap: break-word;\n}\n\n.notification-info {\n\tborder-left-color: #3b82f6;\n\tbackground: #eff6ff;\n}\n\n.notification-success {\n\tborder-left-color: #10b981;\n\tbackground: #ecfdf5;\n}\n\n.notification-warning {\n\tborder-left-color: #f59e0b;\n\tbackground: #fffbeb;\n}\n\n.notification-error {\n\tborder-left-color: #ef4444;\n\tbackground: #fef2f2;\n}\n\n.notification-icon {\n\tfont-size: 18px;\n\tline-height: 1;\n\tflex-shrink: 0;\n}\n\n.notification-content {\n\tflex: 1;\n\tmin-width: 0;\n}\n\n.notification-message {\n\tmargin: 0 0 4px 0;\n\tfont-size: 14px;\n\tfont-weight: 500;\n\tcolor: #1f2937;\n\tline-height: 1.4;\n}\n\n.notification-time {\n\tmargin: 0;\n\tfont-size: 12px;\n\tcolor: #6b7280;\n}\n\n.notification-close {\n\tbackground: none;\n\tborder: none;\n\tfont-size: 18px;\n\tcolor: #9ca3af;\n\tcursor: pointer;\n\tpadding: 0;\n\twidth: 20px;\n\theight: 20px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-shrink: 0;\n}\n\n.notification-close:hover {\n\tcolor: #6b7280;\n}\n\n/* Transitions */\n.notification-enter-active,\n.notification-leave-active {\n\ttransition: all 0.3s ease;\n}\n\n.notification-enter-from {\n\topacity: 0;\n\ttransform: translateX(100%);\n}\n\n.notification-leave-to {\n\topacity: 0;\n\ttransform: translateX(100%);\n}\n\n.notification-move {\n\ttransition: transform 0.3s ease;\n}\n</style>","<template>\n\t<div class=\"desktop\" @click=\"handleClick\">\n\t\t<!-- Action Set -->\n\t\t<ActionSet :elements=\"actionElements\" />\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\t\n\t\t<!-- Field Trigger Notifications -->\n\t\t<FieldTriggerNotifications />\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 FieldTriggerNotifications from './FieldTriggerNotifications.vue'\nimport type { ActionElements } from '../types'\n\ntype Props = {\n\tavailableDoctypes?: string[]\n}\n\nconst { availableDoctypes = [] } = defineProps<Props>()\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) return 'doctypes'\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\treturn pathMatch.length === 1 ? 'records' : 'record'\n\t}\n\n\treturn 'doctypes'\n})\n\n// Computed properties (now that all helper functions are defined)\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\tif (!isNewRecord.value) {\n\t\t\t\telements.push(\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'button',\n\t\t\t\t\t\tlabel: 'Save',\n\t\t\t\t\t\taction: () => void handleSave(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'button',\n\t\t\t\t\t\tlabel: 'Delete',\n\t\t\t\t\t\taction: () => void handleDelete(),\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\telements.push({\n\t\t\t\t\ttype: 'button',\n\t\t\t\t\tlabel: 'Save',\n\t\t\t\t\taction: () => void handleSave(),\n\t\t\t\t})\n\t\t\t}\n\t\t\tbreak\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\ttype: '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\ttype: '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\ttype: 'Data',\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\ttype: '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\ttype: 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\ttype: '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\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\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\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\tawait router.value?.push(`/${routeDoctype.value}`)\n\t} else {\n\t\t// Reload current record data\n\t\tloadRecordData()\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\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\tconst record = stonecrop.value.getRecordById(currentDoctype.value, currentRecordId.value)\n\t\t\tif (!record) {\n\t\t\t\t// Record doesn't exist in HST, this is expected for new data loads\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.log(`📝 [Desktop] Record ${currentRecordId.value} not found in HST for ${currentDoctype.value}`)\n\t\t\t}\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":["_elements","ref","__props","isOpen","timeoutId","hover","closeClicked","onMounted","closeDropdowns","element","onHover","onHoverLeave","toggleDropdown","index","showDropdown","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_1","_cache","$event","_openBlock","_Fragment","_renderList","el","_toDisplayString","_hoisted_2","_hoisted_3","_hoisted_4","_withDirectives","_hoisted_5","_hoisted_6","item","_hoisted_7","_hoisted_9","_vShow","emit","__emit","query","selectedIndex","inputRef","useTemplateRef","results","computed","watch","nextTick","closeModal","handleKeydown","e","selectResult","result","_createBlock","_Teleport","_createVNode","_Transition","placeholder","_renderSlot","_ctx","b","I","i","V","L","t","r","s","o","n","a","l","u","c","m","d","h","S","T","C","N$1","q","x","P","_","N","g","p","f","v","y","E","A","w","$","F","M","z","D","k","ie","Ie","Te","ue","ct","dt","le","mt","pt","qe","Ce","We","ee","vt","O","xe","J","ne","Ve","_t","oe","Dt","G","Et","sn","an","Y","j","se","Ke","ze","Oe","breadcrumbsVisibile","searchVisibile","searchText","rotateHideTabIcon","toggleBreadcrumbs","toggleSearch","handleSearchInput","event","handleSearch","navigateHome","_component_router_link","_withKeys","breadcrumbs","breadcrumb","_createTextVNode","notifications","globalNotifications","actionsModule","__temp","__restore","_withAsyncContext","removeNotification","id","globalIndex","formatTime","timestamp","pollInterval","onUnmounted","_TransitionGroup","notification","_hoisted_8","_hoisted_10","stonecrop","useStonecrop","loading","saving","commandPaletteOpen","currentViewData","currentDoctype","currentRecordId","newData","hstStore","fieldname","value","fieldPath","error","route","unref","router","pathMatch","routeDoctype","isNewRecord","currentView","routeName","actionElements","elements","createNewRecord","handleSave","handleDelete","navigationBreadcrumbs","formatDoctypeName","searchCommands","commands","doctype","cmd","executeCommand","command","word","getRecordCount","navigateToDoctype","openRecord","recordId","newId","loadDoctypeMetadata","getDoctypesSchema","rows","getRecordsSchema","records","getRecords","columns","getColumns","record","col","getRecordFormSchema","meta","schemaArray","currentRecord","getCurrentRecord","field","recordsData","currentViewSchema","writableSchema","newSchema","formData","recordData","handleCancel","loadRecordData","targetRecordId","handleClick","target","action","cell","cellText","row","cells","newStonecrop","view","stonecropInstance","provide","ActionSet","_unref","AForm","SheetNav","CommandPalette","_withCtx","FieldTriggerNotifications","plugin","app","Desktop"],"mappings":"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"}
|