@stonecrop/aform 0.2.24 → 0.2.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"aform.umd.cjs","sources":["../src/components/form/ACheckbox.vue","../src/components/form/ADate.vue","../src/components/form/ADropdown.vue","../../utilities/dist/utilities.js","../src/components/form/ADatePicker.vue","../src/components/AForm.vue","../src/components/form/AFieldset.vue","../src/components/form/ANumericInput.vue","../src/directives/mask.ts","../src/components/form/ATextInput.vue","../src/index.ts"],"sourcesContent":["<template>\n\t<div class=\"aform__form-element\">\n\t\t<label class=\"aform__field-label\" :for=\"uuid\">{{ label }}</label>\n\t\t<span class=\"aform__checkbox-container aform__input-field\">\n\t\t\t<input v-model=\"checkbox\" type=\"checkbox\" :id=\"uuid\" class=\"aform__checkbox\" :readonly=\"readOnly\" :required=\"required\" />\n\t\t</span>\n\t\t<p class=\"error\" v-show=\"validation.errorMessage\" v-html=\"validation.errorMessage\"></p>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { InputHTMLAttributes } from 'vue'\n\nwithDefaults(\n\tdefineProps<{\n\t\tlabel?: string\n\t\trequired?: boolean\n\t\treadOnly?: boolean\n\t\tuuid?: string\n\t\tvalidation?: Record<string, any>\n\t}>(),\n\t{\n\t\tvalidation: () => ({ errorMessage: '&nbsp;' }),\n\t}\n)\n\nconst checkbox = defineModel<InputHTMLAttributes['checked']>()\n</script>\n","<template>\n\t<div>\n\t\t<input\n\t\t\tref=\"dateRef\"\n\t\t\ttype=\"date\"\n\t\t\t:id=\"uuid\"\n\t\t\t:disabled=\"readonly\"\n\t\t\t:required=\"required\"\n\t\t\t:value=\"inputDate\"\n\t\t\t@click=\"showPicker\" />\n\t\t<label :for=\"uuid\">{{ label }}</label>\n\t\t<p v-show=\"validation.errorMessage\" v-html=\"validation.errorMessage\"></p>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nwithDefaults(\n\tdefineProps<{\n\t\tlabel?: string\n\t\trequired?: boolean\n\t\treadonly?: boolean\n\t\tuuid?: string\n\t\tvalidation?: Record<string, any>\n\t}>(),\n\t{\n\t\tlabel: 'Date',\n\t\tvalidation: () => ({ errorMessage: '&nbsp;' }),\n\t}\n)\n\nconst inputDate = defineModel<string | number | Date>()\nconst dateRef = ref<HTMLInputElement | null>(null)\n\nconst showPicker = () => {\n\tif (dateRef.value) {\n\t\tif ('showPicker' in HTMLInputElement.prototype) {\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/showPicker\n\t\t\t// TODO: re-check browser support and compatibility; figure out alternative ways\n\t\t\t// to spawn the native datepicker and eventually replace with ADatepicker\n\t\t\tdateRef.value.showPicker()\n\t\t}\n\t}\n}\n</script>\n\n<style scoped>\ndiv {\n\tmin-width: 40ch;\n\tborder: 1px solid transparent;\n\tpadding: 0rem;\n\tmargin: 0rem;\n\tmargin-right: 1ch;\n}\n\ninput {\n\twidth: calc(100% - 1ch);\n\toutline: 1px solid transparent;\n\tborder: 1px solid var(--input-border-color);\n\tpadding: 1ch 0.5ch 0.5ch 1ch;\n\tmargin: calc(1.15rem / 2) 0 0 0;\n\tmin-height: 1.15rem;\n\tborder-radius: 0.25rem;\n}\n\np,\nlabel {\n\tcolor: var(--input-label-color);\n\tdisplay: block;\n\tmin-height: 1.15rem;\n\tpadding: 0rem;\n\tmargin: 0rem;\n\tborder: 1px solid transparent;\n\tmargin-bottom: 0.25rem;\n}\n\np {\n\twidth: 100%;\n\tcolor: red;\n\tfont-size: 85%;\n}\n\nlabel {\n\tz-index: 2;\n\tfont-size: 80%;\n\tposition: absolute;\n\tbackground: white;\n\tmargin: calc(-1.5rem - calc(2.15rem / 2)) 0 0 1ch;\n\tpadding: 0 0.25ch 0 0.25ch;\n}\n\ninput:focus {\n\tborder: 1px solid var(--input-active-border-color);\n}\n\ninput:focus + label {\n\tcolor: var(--input-active-label-color);\n}\n</style>\n","<template>\n\t<div class=\"autocomplete\" :class=\"{ isOpen: isOpen }\">\n\t\t<div class=\"input-wrapper\">\n\t\t\t<input\n\t\t\t\tref=\"mopInput\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t@input=\"onChange\"\n\t\t\t\t@focus=\"onChange\"\n\t\t\t\tv-model=\"search\"\n\t\t\t\t@keydown.down=\"onArrowDown\"\n\t\t\t\t@keydown.up=\"onArrowUp\"\n\t\t\t\t@keydown.enter=\"onEnter\" />\n\n\t\t\t<ul id=\"autocomplete-results\" v-show=\"isOpen\" class=\"autocomplete-results\">\n\t\t\t\t<li class=\"loading autocomplete-result\" v-if=\"isLoading\">Loading results...</li>\n\t\t\t\t<li\n\t\t\t\t\tv-else\n\t\t\t\t\tv-for=\"(result, i) in results\"\n\t\t\t\t\t:key=\"i\"\n\t\t\t\t\t@click=\"setResult(result)\"\n\t\t\t\t\tclass=\"autocomplete-result\"\n\t\t\t\t\t:class=\"{ 'is-active': i === arrowCounter }\">\n\t\t\t\t\t{{ result }}\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<label>{{ label }}</label>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, onUnmounted, ref } from 'vue'\n\nconst props = defineProps<{\n\tlabel: string\n\titems?: string[]\n\tisAsync?: boolean\n}>()\n\nconst emit = defineEmits(['filterChanged'])\n\nconst results = ref(props.items)\nconst search = defineModel<string>()\nconst isLoading = ref(false)\nconst arrowCounter = ref(0)\nconst isOpen = ref(false)\nconst mopInput = ref(null)\n\nonMounted(() => {\n\tdocument.addEventListener('click', handleClickOutside)\n\tfilterResults()\n})\n\nonUnmounted(() => {\n\tdocument.removeEventListener('click', handleClickOutside)\n})\n\nconst setResult = result => {\n\tsearch.value = result\n\tcloseResults()\n}\n\nconst filterResults = () => {\n\tif (!search.value) {\n\t\tresults.value = props.items\n\t} else {\n\t\tresults.value = props.items.filter(item => {\n\t\t\treturn item.toLowerCase().indexOf(search.value.toLowerCase()) > -1\n\t\t})\n\t}\n}\n\nconst onChange = () => {\n\tisOpen.value = true\n\tif (props.isAsync) {\n\t\tisLoading.value = true\n\t\temit('filterChanged', search.value)\n\t} else {\n\t\tfilterResults()\n\t}\n}\n\nconst handleClickOutside = (event: MouseEvent) => {\n\tcloseResults()\n\tarrowCounter.value = 0\n}\n\nconst closeResults = () => {\n\tisOpen.value = false\n\n\t// TODO: (test) when would this occur? how should this be tested?\n\tif (!props.items.includes(search.value)) {\n\t\tsearch.value = ''\n\t}\n}\n\nconst onArrowDown = () => {\n\tif (arrowCounter.value < results.value.length) {\n\t\tarrowCounter.value = arrowCounter.value + 1\n\t}\n}\n\nconst onArrowUp = () => {\n\tif (arrowCounter.value > 0) {\n\t\tarrowCounter.value = arrowCounter.value - 1\n\t}\n}\n\nconst onEnter = () => {\n\tsearch.value = results.value[arrowCounter.value]\n\tcloseResults()\n\tarrowCounter.value = 0\n}\n\n// const openWithSearch = () => {\n// \tsearch.value = ''\n// \tonChange()\n// \tmopInput.value.focus()\n// }\n</script>\n\n<style>\n/* variables taken from here: https://github.com/frappe/frappe/blob/version-13/frappe/public/scss/common/awesomeplete.scss */\n.autocomplete {\n\tposition: relative;\n}\n\n.input-wrapper {\n\tmin-width: 40ch;\n\tborder: 1px solid transparent;\n\tpadding: 0rem;\n\tmargin: 0rem;\n\tmargin-right: 1ch;\n}\n\ninput {\n\twidth: calc(100% - 1ch);\n\toutline: 1px solid transparent;\n\tborder: 1px solid var(--input-border-color);\n\tpadding: 1ch 0.5ch 0.5ch 1ch;\n\tmargin: calc(1.15rem / 2) 0 0 0;\n\tmin-height: 1.15rem;\n\tborder-radius: 0.25rem;\n}\n\ninput:focus {\n\tborder: 1px solid var(--input-active-border-color);\n\tborder-radius: 0.25rem 0.25rem 0 0;\n\tborder-bottom: none;\n}\n\nlabel {\n\tdisplay: block;\n\tmin-height: 1.15rem;\n\tpadding: 0rem;\n\tmargin: 0rem;\n\tborder: 1px solid transparent;\n\tmargin-bottom: 0.25rem;\n\tz-index: 2;\n\tfont-size: 80%;\n\tposition: absolute;\n\tbackground: white;\n\tmargin: calc(-1.5rem - calc(2.15rem / 2)) 0 0 1ch;\n\tpadding: 0 0.25ch 0 0.25ch;\n}\n\n.autocomplete-results {\n\tposition: absolute;\n\twidth: calc(100% - 1ch + 1.5px);\n\tz-index: 1;\n\tpadding: 0;\n\tmargin: 0;\n\tcolor: #000000;\n\tborder: 1px solid var(--input-active-border-color);\n\tborder-radius: 0 0 0.25rem 0.25rem;\n\tborder-top: none;\n}\n\n.autocomplete-result {\n\tlist-style: none;\n\ttext-align: left;\n\tpadding: 4px 6px;\n\tcursor: pointer;\n}\n\n.autocomplete-result.is-active,\n.autocomplete-result:hover {\n\tbackground-color: var(--row-color-zebra-light);\n\tcolor: #000000;\n}\n</style>\n","import { unref as I, getCurrentScope as O, onScopeDispose as U, computed as M, ref as b, watch as v, onMounted as j, onBeforeUnmount as V } from \"vue\";\nfunction B(e) {\n return O() ? (U(e), !0) : !1;\n}\nfunction _(e) {\n return typeof e == \"function\" ? e() : I(e);\n}\nconst F = typeof window < \"u\" && typeof document < \"u\";\ntypeof WorkerGlobalScope < \"u\" && globalThis instanceof WorkerGlobalScope;\nconst q = Object.prototype.toString, N = (e) => q.call(e) === \"[object Object]\", G = () => {\n};\nfunction y(e) {\n var t;\n const n = _(e);\n return (t = n == null ? void 0 : n.$el) != null ? t : n;\n}\nconst T = F ? window : void 0;\nfunction w(...e) {\n let t, n, l, s;\n if (typeof e[0] == \"string\" || Array.isArray(e[0]) ? ([n, l, s] = e, t = T) : [t, n, l, s] = e, !t)\n return G;\n Array.isArray(n) || (n = [n]), Array.isArray(l) || (l = [l]);\n const i = [], o = () => {\n i.forEach((f) => f()), i.length = 0;\n }, r = (f, u, p, d) => (f.addEventListener(u, p, d), () => f.removeEventListener(u, p, d)), c = v(\n () => [y(t), _(s)],\n ([f, u]) => {\n if (o(), !f)\n return;\n const p = N(u) ? { ...u } : u;\n i.push(\n ...n.flatMap((d) => l.map((E) => r(f, d, E, p)))\n );\n },\n { immediate: !0, flush: \"post\" }\n ), a = () => {\n c(), o();\n };\n return B(a), a;\n}\nfunction z(e = {}) {\n var t;\n const {\n window: n = T,\n deep: l = !0\n } = e, s = (t = e.document) != null ? t : n == null ? void 0 : n.document, i = () => {\n var c;\n let a = s == null ? void 0 : s.activeElement;\n if (l)\n for (; a != null && a.shadowRoot; )\n a = (c = a == null ? void 0 : a.shadowRoot) == null ? void 0 : c.activeElement;\n return a;\n }, o = b(), r = () => {\n o.value = i();\n };\n return n && (w(n, \"blur\", (c) => {\n c.relatedTarget === null && r();\n }, !0), w(n, \"focus\", r, !0)), r(), o;\n}\nfunction J(e, t = {}) {\n const n = z(t), l = M(() => y(e));\n return { focused: M(() => l.value && n.value ? l.value.contains(n.value) : !1) };\n}\nfunction Q(e, { window: t = T, scrollTarget: n } = {}) {\n const l = b(!1), s = () => {\n if (!t)\n return;\n const i = t.document, o = y(e);\n if (!o)\n l.value = !1;\n else {\n const r = o.getBoundingClientRect();\n l.value = r.top <= (t.innerHeight || i.documentElement.clientHeight) && r.left <= (t.innerWidth || i.documentElement.clientWidth) && r.bottom >= 0 && r.right >= 0;\n }\n };\n return v(\n () => y(e),\n () => s(),\n { immediate: !0, flush: \"post\" }\n ), t && w(n || t, \"scroll\", s, {\n capture: !1,\n passive: !0\n }), l;\n}\nconst g = (e) => {\n let t = Q(e).value;\n return t = t && e.offsetHeight > 0, t;\n}, m = (e) => e.tabIndex >= 0, x = (e) => {\n const t = e.target;\n return A(t);\n}, A = (e) => {\n var n;\n let t;\n if (e instanceof HTMLTableCellElement) {\n const l = (n = e.parentElement) == null ? void 0 : n.previousElementSibling;\n if (l) {\n const i = Array.from(l.children)[e.cellIndex];\n i && (t = i);\n }\n } else if (e instanceof HTMLTableRowElement) {\n const l = e.previousElementSibling;\n l && (t = l);\n }\n return t && (!m(t) || !g(t)) ? A(t) : t;\n}, X = (e) => {\n var l;\n const t = e.target;\n let n;\n if (t instanceof HTMLTableCellElement) {\n const s = (l = t.parentElement) == null ? void 0 : l.parentElement;\n if (s) {\n const o = s.firstElementChild.children[t.cellIndex];\n o && (n = o);\n }\n } else if (t instanceof HTMLTableRowElement) {\n const s = t.parentElement;\n if (s) {\n const i = s.firstElementChild;\n i && (n = i);\n }\n }\n return n && (!m(n) || !g(n)) ? S(n) : n;\n}, D = (e) => {\n const t = e.target;\n return S(t);\n}, S = (e) => {\n var n;\n let t;\n if (e instanceof HTMLTableCellElement) {\n const l = (n = e.parentElement) == null ? void 0 : n.nextElementSibling;\n if (l) {\n const i = Array.from(l.children)[e.cellIndex];\n i && (t = i);\n }\n } else if (e instanceof HTMLTableRowElement) {\n const l = e.nextElementSibling;\n l && (t = l);\n }\n return t && (!m(t) || !g(t)) ? S(t) : t;\n}, Y = (e) => {\n var l;\n const t = e.target;\n let n;\n if (t instanceof HTMLTableCellElement) {\n const s = (l = t.parentElement) == null ? void 0 : l.parentElement;\n if (s) {\n const o = s.lastElementChild.children[t.cellIndex];\n o && (n = o);\n }\n } else if (t instanceof HTMLTableRowElement) {\n const s = t.parentElement;\n if (s) {\n const i = s.lastElementChild;\n i && (n = i);\n }\n }\n return n && (!m(n) || !g(n)) ? A(n) : n;\n}, R = (e) => {\n const t = e.target;\n return k(t);\n}, k = (e) => {\n var n;\n let t;\n if (e.previousElementSibling)\n t = e.previousElementSibling;\n else {\n const l = (n = e.parentElement) == null ? void 0 : n.previousElementSibling;\n t = l == null ? void 0 : l.lastElementChild;\n }\n return t && (!m(t) || !g(t)) ? k(t) : t;\n}, P = (e) => {\n const t = e.target;\n return L(t);\n}, L = (e) => {\n var n;\n let t;\n if (e.nextElementSibling)\n t = e.nextElementSibling;\n else {\n const l = (n = e.parentElement) == null ? void 0 : n.nextElementSibling;\n t = l == null ? void 0 : l.firstElementChild;\n }\n return t && (!m(t) || !g(t)) ? L(t) : t;\n}, K = (e) => {\n const l = e.target.parentElement.firstElementChild;\n return l && (!m(l) || !g(l)) ? L(l) : l;\n}, W = (e) => {\n const l = e.target.parentElement.lastElementChild;\n return l && (!m(l) || !g(l)) ? k(l) : l;\n}, C = [\"alt\", \"control\", \"shift\", \"meta\"], Z = {\n ArrowUp: \"up\",\n ArrowDown: \"down\",\n ArrowLeft: \"left\",\n ArrowRight: \"right\"\n}, ee = {\n \"keydown.up\": (e) => {\n const t = x(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.down\": (e) => {\n const t = D(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.left\": (e) => {\n const t = R(e);\n e.preventDefault(), e.stopPropagation(), t && t.focus();\n },\n \"keydown.right\": (e) => {\n const t = P(e);\n e.preventDefault(), e.stopPropagation(), t && t.focus();\n },\n \"keydown.control.up\": (e) => {\n const t = X(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.down\": (e) => {\n const t = Y(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.left\": (e) => {\n const t = K(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.right\": (e) => {\n const t = W(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.end\": (e) => {\n const t = W(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 n = D(e);\n n && n.focus();\n }\n },\n \"keydown.shift.enter\": (e) => {\n if (e.target instanceof HTMLTableCellElement) {\n e.preventDefault(), e.stopPropagation();\n const n = x(e);\n n && n.focus();\n }\n },\n \"keydown.home\": (e) => {\n const t = K(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.tab\": (e) => {\n const t = P(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.shift.tab\": (e) => {\n const t = R(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n }\n};\nfunction ne(e) {\n const t = (o) => {\n let r = null;\n return o.parent && (typeof o.parent == \"string\" ? r = document.querySelector(o.parent) : o.parent instanceof HTMLElement ? r = o.parent : r = o.parent.value), r;\n }, n = (o) => {\n const r = t(o);\n let c = [];\n if (typeof o.selectors == \"string\")\n c = r ? Array.from(r.querySelectorAll(o.selectors)) : Array.from(document.querySelectorAll(o.selectors));\n else if (Array.isArray(o.selectors))\n for (const a of o.selectors)\n a instanceof HTMLElement ? c.push(a) : c.push(a.$el);\n else if (o.selectors instanceof HTMLElement)\n c.push(o.selectors);\n else if (Array.isArray(o.selectors.value))\n for (const a of o.selectors.value)\n a instanceof HTMLElement ? c.push(a) : c.push(a.$el);\n else\n c.push(o.selectors.value);\n return c;\n }, l = (o) => {\n const r = t(o);\n let c = [];\n return o.selectors ? c = n(o) : r && (c = Array.from(r.children).filter((f) => m(f) && g(f))), c;\n }, s = (o) => (r) => {\n const c = Z[r.key] || r.key.toLowerCase();\n if (C.includes(c))\n return;\n const a = o.handlers || ee;\n for (const f of Object.keys(a)) {\n const [u, ...p] = f.split(\".\");\n if (u === \"keydown\" && p.includes(c)) {\n const d = a[f], E = p.filter(($) => C.includes($)), H = C.some(($) => {\n const h = $.charAt(0).toUpperCase() + $.slice(1);\n return r.getModifierState(h);\n });\n if (E.length > 0) {\n if (H) {\n for (const $ of C)\n if (p.includes($)) {\n const h = $.charAt(0).toUpperCase() + $.slice(1);\n r.getModifierState(h) && d(r);\n }\n }\n } else\n H || d(r);\n }\n }\n }, i = [];\n j(() => {\n for (const o of e) {\n const r = t(o), c = l(o), a = s(o), f = r ? [r] : c;\n for (const u of f) {\n const { focused: p } = J(b(u)), d = v(p, (E) => {\n E ? u.addEventListener(\"keydown\", a) : u.removeEventListener(\"keydown\", a);\n });\n i.push(d);\n }\n }\n }), V(() => {\n for (const o of i)\n o();\n });\n}\nfunction le(e) {\n}\nexport {\n ee as defaultKeypressHandlers,\n le as install,\n ne as useKeyboardNav\n};\n//# sourceMappingURL=utilities.js.map\n","<template>\n\t<div class=\"adatepicker\" tabindex=\"0\" ref=\"adatepicker\">\n\t\t<table>\n\t\t\t<tr>\n\t\t\t\t<td id=\"previous-month-btn\" @click=\"previousMonth\" :tabindex=\"-1\">&lt;</td>\n\t\t\t\t<th colspan=\"5\" :tabindex=\"-1\">{{ monthAndYear }}</th>\n\t\t\t\t<td id=\"next-month-btn\" @click=\"nextMonth\" :tabindex=\"-1\">&gt;</td>\n\t\t\t</tr>\n\t\t\t<tr class=\"days-header\">\n\t\t\t\t<td>M</td>\n\t\t\t\t<td>T</td>\n\t\t\t\t<td>W</td>\n\t\t\t\t<td>T</td>\n\t\t\t\t<td>F</td>\n\t\t\t\t<td>S</td>\n\t\t\t\t<td>S</td>\n\t\t\t</tr>\n\t\t\t<tr v-for=\"rowNo in numberOfRows\" :key=\"rowNo\">\n\t\t\t\t<td\n\t\t\t\t\tv-for=\"colNo in numberOfColumns\"\n\t\t\t\t\tref=\"celldate\"\n\t\t\t\t\t:key=\"getCurrentCell(rowNo, colNo)\"\n\t\t\t\t\t:contenteditable=\"false\"\n\t\t\t\t\t:spellcheck=\"false\"\n\t\t\t\t\t:tabindex=\"0\"\n\t\t\t\t\t@click.prevent.stop=\"selectDate(getCurrentCell(rowNo, colNo))\"\n\t\t\t\t\t@keydown.enter=\"selectDate(getCurrentCell(rowNo, colNo))\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\ttodaysDate: isTodaysDate(getCurrentDate(rowNo, colNo)),\n\t\t\t\t\t\tselectedDate: isSelectedDate(getCurrentDate(rowNo, colNo)),\n\t\t\t\t\t}\">\n\t\t\t\t\t{{ new Date(getCurrentDate(rowNo, colNo)).getDate() }}\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</table>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { defaultKeypressHandlers, useKeyboardNav } from '@stonecrop/utilities'\nimport { computed, nextTick, onMounted, ref, watch } from 'vue'\n\nconst numberOfRows = 6\nconst numberOfColumns = 7\n\nconst date = defineModel<number | Date>({ default: new Date() })\nconst selectedDate = ref(new Date(date.value))\nconst currentMonth = ref<number>(selectedDate.value.getMonth())\nconst currentYear = ref<number>(selectedDate.value.getFullYear())\nconst currentDates = ref<number[]>([])\nconst adatepicker = ref<HTMLElement | null>(null)\n\nonMounted(async () => {\n\tpopulateMonth()\n\n\t// required to allow the elements to be focused in the next step\n\tawait nextTick()\n\n\tconst $selectedDate = document.getElementsByClassName('selectedDate')\n\tif ($selectedDate.length > 0) {\n\t\t;($selectedDate[0] as HTMLElement).focus()\n\t} else {\n\t\tconst $todaysDate = document.getElementsByClassName('todaysDate')\n\t\tif ($todaysDate.length > 0) {\n\t\t\t;($todaysDate[0] as HTMLElement).focus()\n\t\t}\n\t}\n})\n\nconst populateMonth = () => {\n\tcurrentDates.value = []\n\tconst firstOfMonth = new Date(currentYear.value, currentMonth.value, 1)\n\tconst monthStartWeekday = firstOfMonth.getDay()\n\tconst calendarStartDay = firstOfMonth.setDate(firstOfMonth.getDate() - monthStartWeekday)\n\n\t// assume midnight for all dates while building the calendar\n\tfor (const dayIndex of Array(43).keys()) {\n\t\tcurrentDates.value.push(calendarStartDay + dayIndex * 86400000)\n\t}\n}\n\nwatch([currentMonth, currentYear], populateMonth)\nconst previousYear = () => (currentYear.value -= 1)\nconst nextYear = () => (currentYear.value += 1)\n\nconst previousMonth = () => {\n\tif (currentMonth.value == 0) {\n\t\tcurrentMonth.value = 11\n\t\tpreviousYear()\n\t} else {\n\t\tcurrentMonth.value -= 1\n\t}\n}\n\nconst nextMonth = () => {\n\tif (currentMonth.value == 11) {\n\t\tcurrentMonth.value = 0\n\t\tnextYear()\n\t} else {\n\t\tcurrentMonth.value += 1\n\t}\n}\n\nconst isTodaysDate = (day: string | number | Date) => {\n\tconst todaysDate = new Date()\n\tif (currentMonth.value !== todaysDate.getMonth()) {\n\t\treturn\n\t}\n\treturn todaysDate.toDateString() === new Date(day).toDateString()\n}\n\nconst isSelectedDate = (day: string | number | Date) => {\n\treturn new Date(day).toDateString() === new Date(selectedDate.value).toDateString()\n}\n\nconst getCurrentCell = (rowNo: number, colNo: number) => {\n\treturn (rowNo - 1) * numberOfColumns + colNo\n}\n\nconst getCurrentDate = (rowNo: number, colNo: number) => {\n\treturn currentDates.value[getCurrentCell(rowNo, colNo)]\n}\n\nconst selectDate = (currentIndex: number) => {\n\tdate.value = selectedDate.value = new Date(currentDates.value[currentIndex])\n}\n\nconst monthAndYear = computed(() => {\n\treturn new Date(currentYear.value, currentMonth.value, 1).toLocaleDateString(undefined, {\n\t\tyear: 'numeric',\n\t\tmonth: 'long',\n\t})\n})\n\n// setup keyboard navigation\nuseKeyboardNav([\n\t{\n\t\tparent: adatepicker,\n\t\tselectors: 'td',\n\t\thandlers: {\n\t\t\t...defaultKeypressHandlers,\n\t\t\t...{\n\t\t\t\t'keydown.pageup': previousMonth,\n\t\t\t\t'keydown.shift.pageup': previousYear,\n\t\t\t\t'keydown.pagedown': nextMonth,\n\t\t\t\t'keydown.shift.pagedown': nextYear,\n\t\t\t\t// TODO: this is a hack to override the stonecrop enter handler;\n\t\t\t\t// store context inside the component so that handlers can be setup consistently\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\t\t\t\t'keydown.enter': () => {}, // select this date\n\t\t\t},\n\t\t},\n\t},\n])\n</script>\n\n<style>\n@import url('@stonecrop/themes/default/default.css');\n@import url('@/theme/adate.css');\n@import url('@/theme/aform.css');\n</style>\n","<template>\n\t<form class=\"aform\">\n\t\t<component\n\t\t\tv-for=\"(componentObj, key) in modelValue\"\n\t\t\t:is=\"componentObj.component\"\n\t\t\t:key=\"key\"\n\t\t\t:schema=\"componentObj\"\n\t\t\tv-model=\"childModels[key].value\"\n\t\t\t:data=\"formData[componentObj.fieldname]\"\n\t\t\t:readonly=\"readonly\"\n\t\t\tv-bind=\"componentProps(componentObj)\">\n\t\t</component>\n\t</form>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\n\nimport { SchemaTypes } from 'types'\n\nconst props = defineProps<{\n\tmodelValue: SchemaTypes[]\n\tdata: Record<string, any>\n\treadonly?: boolean\n}>()\n\nconst emit = defineEmits(['update:modelValue'])\n\nconst formData = ref(props.data || {})\n\nconst componentProps = (componentObj: SchemaTypes) => {\n\tlet propsToPass = {}\n\tfor (const [key, value] of Object.entries(componentObj)) {\n\t\tif (!['component', 'fieldtype'].includes(key)) {\n\t\t\tpropsToPass[key] = value\n\t\t}\n\n\t\t// handle ATable data formats in case the table is nested under an AFormm;\n\t\t// TODO: there's probably a better way to do this\n\t\tif (key === 'rows') {\n\t\t\tif (value && (value as any[]).length === 0) {\n\t\t\t\tpropsToPass['rows'] = formData.value[componentObj.fieldname]\n\t\t\t}\n\t\t}\n\t}\n\treturn propsToPass\n}\n\nconst childModels = computed({\n\tget: () => {\n\t\treturn props.modelValue.map((val, i) => {\n\t\t\treturn computed({\n\t\t\t\tget() {\n\t\t\t\t\treturn val.value\n\t\t\t\t},\n\t\t\t\tset: newValue => {\n\t\t\t\t\t// Find the component in modelValue and update it\n\t\t\t\t\tprops.modelValue[i].value = newValue\n\t\t\t\t\temit('update:modelValue', props.modelValue)\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t},\n\tset: (/* newValue */) => {\n\t\t//emit('update:modelValue', '')\n\t},\n})\n</script>\n\n<style scoped>\n@import url('@/theme/aform.css');\n</style>\n","<template>\n\t<fieldset>\n\t\t<legend @click=\"toggleCollapse\" @submit=\"toggleCollapse\">\n\t\t\t{{ label }}\n\t\t\t<CollapseButton v-if=\"collapsible\" :collapsed=\"collapsed\" />\n\t\t</legend>\n\t\t<slot :collapsed=\"collapsed\">\n\t\t\t<AForm v-show=\"!collapsed\" v-model=\"formSchema\" :data=\"formData\" />\n\t\t</slot>\n\t</fieldset>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nimport CollapseButton from '@/components/base/CollapseButton.vue'\nimport AForm from '@/components/AForm.vue'\nimport { SchemaTypes } from 'types/index'\n\nconst props = defineProps<{\n\tschema: SchemaTypes[]\n\tlabel: string\n\tcollapsible?: boolean\n\tdata?: any\n}>()\n\nconst formData = ref(props.data || [])\nconst collapsed = ref(false)\nconst collapsible = ref(props.collapsible)\n\nconst formSchema = ref(props.schema)\nfunction toggleCollapse(event: Event) {\n\tevent.preventDefault()\n\tif (!collapsible.value) {\n\t\treturn\n\t}\n\tcollapsed.value = !collapsed.value\n}\n</script>\n\n<style scoped>\nfieldset {\n\tmax-width: 100%;\n\twidth: 100%;\n\tmargin-right: 2ch;\n\tborder: 1px solid transparent;\n\tborder-bottom: 1px solid var(--gray-50);\n}\n\nlegend {\n\twidth: 100%;\n\theight: 1.15rem;\n\tborder: 1px solid transparent;\n\tpadding-bottom: 0.5rem;\n\tfont-size: 110%;\n\tfont-weight: 600;\n\tuser-select: none;\n}\n\n.collapse-button {\n\tfloat: right;\n}\n</style>\n","<template>\n\t<div class=\"aform__form-element\">\n\t\t<label class=\"aform__field-label\" :for=\"uuid\">{{ label }}</label>\n\t\t<input class=\"aform__input-field\" v-model=\"inputNumber\" type=\"number\" :id=\"uuid\" :disabled=\"readonly\" :required=\"required\" />\n\t\t<p class=\"error\" v-show=\"validation.errorMessage\" v-html=\"validation.errorMessage\"></p>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nwithDefaults(\n\tdefineProps<{\n\t\tlabel: string\n\t\trequired?: boolean\n\t\treadonly?: boolean\n\t\tuuid?: string\n\t\tvalidation?: Record<string, any>\n\t}>(),\n\t{\n\t\tvalidation: () => ({ errorMessage: '&nbsp;' }),\n\t}\n)\n\nconst inputNumber = defineModel<number>()\n</script>\n","import type { FormSchema } from 'types'\nimport type { DirectiveBinding } from 'vue'\n\nconst NAMED_MASKS = {\n\tdate: '##/##/####',\n\tdatetime: '####/##/## ##:##',\n\ttime: '##:##',\n\tfulltime: '##:##:##',\n\tphone: '(###) ### - ####',\n\tcard: '#### #### #### ####',\n}\n\nfunction extractMaskFn(mask: string): ((args: any) => string) | void {\n\ttry {\n\t\t// eslint-disable-next-line @typescript-eslint/no-implied-eval\n\t\treturn Function(`\"use strict\";return (${mask})`)()\n\t} catch (error) {\n\t\tif (error instanceof ReferenceError) {\n\t\t\t// assume mask is a string\n\t\t}\n\t}\n}\n\nfunction getMask(binding: DirectiveBinding<string>) {\n\tlet mask = binding.value\n\n\tif (mask) {\n\t\tconst maskFn = extractMaskFn(mask)\n\t\tif (maskFn) {\n\t\t\t// TODO: (state) replace with state management;\n\t\t\t// pass the entire form/table data to the function\n\t\t\tconst locale = binding.instance['locale']\n\t\t\tmask = maskFn(locale)\n\t\t}\n\t} else {\n\t\t// TODO: (state) handle using state management\n\t\tconst schema: FormSchema = binding.instance['schema']\n\t\tconst fieldType: string | undefined = schema?.fieldtype?.toLowerCase()\n\t\tif (fieldType && NAMED_MASKS[fieldType]) {\n\t\t\tmask = NAMED_MASKS[fieldType]\n\t\t}\n\t}\n\n\treturn mask\n}\n\nfunction unmaskInput(input: string, maskToken?: string) {\n\tif (!maskToken) {\n\t\tmaskToken = '#'\n\t}\n\n\tlet unmaskedInput = input\n\tconst maskChars = [maskToken, '/', '-', '(', ')', ' ']\n\n\tfor (const char of maskChars) {\n\t\tunmaskedInput = unmaskedInput.replaceAll(char, '')\n\t}\n\n\treturn unmaskedInput\n}\n\nfunction fillMask(input: string, mask: string, maskToken?: string) {\n\tif (!maskToken) {\n\t\tmaskToken = '#'\n\t}\n\n\tlet replacement = mask\n\tfor (const inputChar of input) {\n\t\tconst replaceIndex = replacement.indexOf(maskToken)\n\t\tif (replaceIndex !== -1) {\n\t\t\tconst prefix = replacement.substring(0, replaceIndex)\n\t\t\tconst suffix = replacement.substring(replaceIndex + 1)\n\t\t\treplacement = prefix + inputChar + suffix\n\t\t}\n\t}\n\n\treturn replacement.slice(0, mask.length)\n}\n\nexport function useStringMask(el: HTMLInputElement, binding: DirectiveBinding<string>) {\n\tconst mask = getMask(binding)\n\tif (!mask) return\n\n\tconst maskToken = '#'\n\tconst inputText = el.value\n\n\t// process input value with mask\n\tconst unmaskedInput = unmaskInput(inputText, maskToken)\n\tif (unmaskedInput) {\n\t\tconst replacement = fillMask(unmaskedInput, mask, maskToken)\n\n\t\t// TODO: (state) this is very opinionated;\n\t\t// most likely fixed with state management;\n\t\t// a better way could be to emit back to instance;\n\n\t\tif (binding.instance['maskFilled']) {\n\t\t\tbinding.instance['maskFilled'] = !replacement.includes(maskToken)\n\t\t}\n\n\t\tel.value = replacement\n\t} else {\n\t\tel.value = mask\n\t}\n}\n","<template>\n\t<div class=\"aform__form-element\">\n\t\t<label class=\"aform__field-label\" :for=\"uuid\">{{ label }} </label>\n\t\t<input\n\t\t\tclass=\"aform__input-field\"\n\t\t\tv-model=\"inputText\"\n\t\t\t:id=\"uuid\"\n\t\t\t:disabled=\"readonly\"\n\t\t\t:maxlength=\"mask ? maskFilled && mask.length : undefined\"\n\t\t\t:required=\"required\"\n\t\t\tv-mask=\"mask\" />\n\t\t<p class=\"error\" v-show=\"validation.errorMessage\" v-html=\"validation.errorMessage\"></p>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject, ref } from 'vue'\n\nimport { FormSchema } from 'types'\nimport { useStringMask as vMask } from '@/directives/mask'\n\nwithDefaults(\n\tdefineProps<{\n\t\tschema: FormSchema\n\t\tlabel: string\n\t\tmask?: string\n\t\trequired?: boolean\n\t\treadonly?: boolean\n\t\tuuid?: string\n\t\tvalidation?: { errorMessage: string }\n\t}>(),\n\t{\n\t\tvalidation: () => ({ errorMessage: '&nbsp;' }),\n\t}\n)\n\n// TODO: setup maskFilled as a computed property\nconst maskFilled = ref(true)\n\n// TODO: (state) replace with state management\n// const locale = inject<string>('locale', '')\n\nconst inputText = defineModel<number | string>()\n</script>\n","import { App } from 'vue'\n\nimport ACheckbox from '@/components/form/ACheckbox.vue'\nimport AComboBox from '@/components/form/AComboBox.vue'\nimport ADate from '@/components/form/ADate.vue'\nimport ADropdown from '@/components/form/ADropdown.vue'\nimport ADatePicker from '@/components/form/ADatePicker.vue'\nimport AFieldset from '@/components/form/AFieldset.vue'\nimport AForm from '@/components/AForm.vue'\nimport ANumericInput from '@/components/form/ANumericInput.vue'\nimport ATextInput from '@/components/form/ATextInput.vue'\n// import { ACurrency } from '@/components/form/ACurrency.vue'\n// import { AQuantity } from '@/components/form/AQuantity.vue'\n\nfunction install(app: App /* options */) {\n\tapp.component('ACheckbox', ACheckbox)\n\tapp.component('ACombobox', AComboBox)\n\tapp.component('ADate', ADate)\n\tapp.component('ADropdown', ADropdown)\n\tapp.component('ADatePicker', ADatePicker)\n\tapp.component('AFieldset', AFieldset)\n\tapp.component('AForm', AForm)\n\tapp.component('ANumericInput', ANumericInput)\n\tapp.component('ATextInput', ATextInput)\n\t// app.component('ACurrency', ACurrency)\n\t// app.component('AQuantity', AQuantity)\n}\n\nexport { ACheckbox, AComboBox, ADate, ADropdown, ADatePicker, AFieldset, AForm, ANumericInput, ATextInput, install }\n"],"names":["checkbox","_useModel","__props","inputDate","dateRef","ref","showPicker","props","emit","__emit","results","search","isLoading","arrowCounter","isOpen","mopInput","onMounted","handleClickOutside","filterResults","onUnmounted","setResult","result","closeResults","item","onChange","event","onArrowDown","onArrowUp","onEnter","B","e","O","U","_","I","F","q","N","G","y","t","n","T","w","s","o","f","u","p","d","c","v","E","a","z","b","J","M","Q","g","m","x","A","i","X","l","S","D","Y","R","k","P","L","K","W","C","Z","ee","ne","$","H","h","j","V","numberOfRows","numberOfColumns","date","selectedDate","currentMonth","currentYear","currentDates","adatepicker","populateMonth","nextTick","$selectedDate","$todaysDate","firstOfMonth","monthStartWeekday","calendarStartDay","dayIndex","watch","previousYear","nextYear","previousMonth","nextMonth","isTodaysDate","day","todaysDate","isSelectedDate","getCurrentCell","rowNo","colNo","getCurrentDate","selectDate","currentIndex","monthAndYear","computed","useKeyboardNav","defaultKeypressHandlers","formData","componentProps","componentObj","propsToPass","key","value","childModels","val","newValue","collapsed","collapsible","formSchema","toggleCollapse","inputNumber","NAMED_MASKS","extractMaskFn","mask","getMask","binding","maskFn","locale","schema","fieldType","_a","unmaskInput","input","maskToken","unmaskedInput","maskChars","char","fillMask","replacement","inputChar","replaceIndex","prefix","suffix","useStringMask","el","inputText","maskFilled","install","app","ACheckbox","AComboBox","ADate","ADropdown","ADatePicker","AFieldset","AForm","ANumericInput","ATextInput"],"mappings":"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"}
1
+ {"version":3,"file":"aform.umd.cjs","sources":["../src/components/form/ACheckbox.vue","../src/components/form/ADate.vue","../src/components/form/ADropdown.vue","../../utilities/dist/utilities.js","../src/components/form/ADatePicker.vue","../src/components/AForm.vue","../src/components/form/AFieldset.vue","../src/components/form/ANumericInput.vue","../src/directives/mask.ts","../src/components/form/ATextInput.vue","../src/components/utilities/Login.vue","../src/index.ts"],"sourcesContent":["<template>\n\t<div class=\"aform__form-element\">\n\t\t<label class=\"aform__field-label\" :for=\"uuid\">{{ label }}</label>\n\t\t<span class=\"aform__checkbox-container aform__input-field\">\n\t\t\t<input\n\t\t\t\tv-model=\"checkbox\"\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\t:id=\"uuid\"\n\t\t\t\tclass=\"aform__checkbox\"\n\t\t\t\t:readonly=\"readOnly\"\n\t\t\t\t:required=\"required\" />\n\t\t</span>\n\t\t<p class=\"error\" v-show=\"validation.errorMessage\" v-html=\"validation.errorMessage\"></p>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { InputHTMLAttributes } from 'vue'\n\nwithDefaults(\n\tdefineProps<{\n\t\tlabel?: string\n\t\trequired?: boolean\n\t\treadOnly?: boolean\n\t\tuuid?: string\n\t\tvalidation?: Record<string, any>\n\t}>(),\n\t{\n\t\tvalidation: () => ({ errorMessage: '&nbsp;' }),\n\t}\n)\n\nconst checkbox = defineModel<InputHTMLAttributes['checked']>()\n</script>\n","<template>\n\t<div>\n\t\t<input\n\t\t\tref=\"dateRef\"\n\t\t\ttype=\"date\"\n\t\t\t:id=\"uuid\"\n\t\t\t:disabled=\"readonly\"\n\t\t\t:required=\"required\"\n\t\t\t:value=\"inputDate\"\n\t\t\t@click=\"showPicker\" />\n\t\t<label :for=\"uuid\">{{ label }}</label>\n\t\t<p v-show=\"validation.errorMessage\" v-html=\"validation.errorMessage\"></p>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nwithDefaults(\n\tdefineProps<{\n\t\tlabel?: string\n\t\trequired?: boolean\n\t\treadonly?: boolean\n\t\tuuid?: string\n\t\tvalidation?: Record<string, any>\n\t}>(),\n\t{\n\t\tlabel: 'Date',\n\t\tvalidation: () => ({ errorMessage: '&nbsp;' }),\n\t}\n)\n\nconst inputDate = defineModel<string | number | Date>()\nconst dateRef = ref<HTMLInputElement | null>(null)\n\nconst showPicker = () => {\n\tif (dateRef.value) {\n\t\tif ('showPicker' in HTMLInputElement.prototype) {\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/showPicker\n\t\t\t// TODO: re-check browser support and compatibility; figure out alternative ways\n\t\t\t// to spawn the native datepicker and eventually replace with ADatepicker\n\t\t\tdateRef.value.showPicker()\n\t\t}\n\t}\n}\n</script>\n\n<style scoped>\ndiv {\n\tmin-width: 40ch;\n\tborder: 1px solid transparent;\n\tpadding: 0rem;\n\tmargin: 0rem;\n\tmargin-right: 1ch;\n}\n\ninput {\n\twidth: calc(100% - 1ch);\n\toutline: 1px solid transparent;\n\tborder: 1px solid var(--input-border-color);\n\tpadding: 1ch 0.5ch 0.5ch 1ch;\n\tmargin: calc(1.15rem / 2) 0 0 0;\n\tmin-height: 1.15rem;\n\tborder-radius: 0.25rem;\n}\n\np,\nlabel {\n\tcolor: var(--input-label-color);\n\tdisplay: block;\n\tmin-height: 1.15rem;\n\tpadding: 0rem;\n\tmargin: 0rem;\n\tborder: 1px solid transparent;\n\tmargin-bottom: 0.25rem;\n}\n\np {\n\twidth: 100%;\n\tcolor: red;\n\tfont-size: 85%;\n}\n\nlabel {\n\tz-index: 2;\n\tfont-size: 80%;\n\tposition: absolute;\n\tbackground: white;\n\tmargin: calc(-1.5rem - calc(2.15rem / 2)) 0 0 1ch;\n\tpadding: 0 0.25ch 0 0.25ch;\n}\n\ninput:focus {\n\tborder: 1px solid var(--input-active-border-color);\n}\n\ninput:focus + label {\n\tcolor: var(--input-active-label-color);\n}\n</style>\n","<template>\n\t<div class=\"autocomplete\" :class=\"{ isOpen: isOpen }\">\n\t\t<div class=\"input-wrapper\">\n\t\t\t<input\n\t\t\t\tref=\"mopInput\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t@input=\"onChange\"\n\t\t\t\t@focus=\"onChange\"\n\t\t\t\tv-model=\"search\"\n\t\t\t\t@keydown.down=\"onArrowDown\"\n\t\t\t\t@keydown.up=\"onArrowUp\"\n\t\t\t\t@keydown.enter=\"onEnter\" />\n\n\t\t\t<ul id=\"autocomplete-results\" v-show=\"isOpen\" class=\"autocomplete-results\">\n\t\t\t\t<li class=\"loading autocomplete-result\" v-if=\"isLoading\">Loading results...</li>\n\t\t\t\t<li\n\t\t\t\t\tv-else\n\t\t\t\t\tv-for=\"(result, i) in results\"\n\t\t\t\t\t:key=\"i\"\n\t\t\t\t\t@click=\"setResult(result)\"\n\t\t\t\t\tclass=\"autocomplete-result\"\n\t\t\t\t\t:class=\"{ 'is-active': i === arrowCounter }\">\n\t\t\t\t\t{{ result }}\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<label>{{ label }}</label>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, onUnmounted, ref } from 'vue'\n\nconst props = defineProps<{\n\tlabel: string\n\titems?: string[]\n\tisAsync?: boolean\n}>()\n\nconst emit = defineEmits(['filterChanged'])\n\nconst results = ref(props.items)\nconst search = defineModel<string>()\nconst isLoading = ref(false)\nconst arrowCounter = ref(0)\nconst isOpen = ref(false)\nconst mopInput = ref(null)\n\nonMounted(() => {\n\tdocument.addEventListener('click', handleClickOutside)\n\tfilterResults()\n})\n\nonUnmounted(() => {\n\tdocument.removeEventListener('click', handleClickOutside)\n})\n\nconst setResult = result => {\n\tsearch.value = result\n\tcloseResults()\n}\n\nconst filterResults = () => {\n\tif (!search.value) {\n\t\tresults.value = props.items\n\t} else {\n\t\tresults.value = props.items.filter(item => {\n\t\t\treturn item.toLowerCase().indexOf(search.value.toLowerCase()) > -1\n\t\t})\n\t}\n}\n\nconst onChange = () => {\n\tisOpen.value = true\n\tif (props.isAsync) {\n\t\tisLoading.value = true\n\t\temit('filterChanged', search.value)\n\t} else {\n\t\tfilterResults()\n\t}\n}\n\nconst handleClickOutside = () => {\n\tcloseResults()\n\tarrowCounter.value = 0\n}\n\nconst closeResults = () => {\n\tisOpen.value = false\n\n\t// TODO: (test) when would this occur? how should this be tested?\n\tif (!props.items.includes(search.value)) {\n\t\tsearch.value = ''\n\t}\n}\n\nconst onArrowDown = () => {\n\tif (arrowCounter.value < results.value.length) {\n\t\tarrowCounter.value = arrowCounter.value + 1\n\t}\n}\n\nconst onArrowUp = () => {\n\tif (arrowCounter.value > 0) {\n\t\tarrowCounter.value = arrowCounter.value - 1\n\t}\n}\n\nconst onEnter = () => {\n\tsearch.value = results.value[arrowCounter.value]\n\tcloseResults()\n\tarrowCounter.value = 0\n}\n\n// const openWithSearch = () => {\n// \tsearch.value = ''\n// \tonChange()\n// \tmopInput.value.focus()\n// }\n</script>\n\n<style>\n/* variables taken from here: https://github.com/frappe/frappe/blob/version-13/frappe/public/scss/common/awesomeplete.scss */\n.autocomplete {\n\tposition: relative;\n}\n\n.input-wrapper {\n\tmin-width: 40ch;\n\tborder: 1px solid transparent;\n\tpadding: 0rem;\n\tmargin: 0rem;\n\tmargin-right: 1ch;\n}\n\ninput {\n\twidth: calc(100% - 1ch);\n\toutline: 1px solid transparent;\n\tborder: 1px solid var(--input-border-color);\n\tpadding: 1ch 0.5ch 0.5ch 1ch;\n\tmargin: calc(1.15rem / 2) 0 0 0;\n\tmin-height: 1.15rem;\n\tborder-radius: 0.25rem;\n}\n\ninput:focus {\n\tborder: 1px solid var(--input-active-border-color);\n\tborder-radius: 0.25rem 0.25rem 0 0;\n\tborder-bottom: none;\n}\n\nlabel {\n\tdisplay: block;\n\tmin-height: 1.15rem;\n\tpadding: 0rem;\n\tmargin: 0rem;\n\tborder: 1px solid transparent;\n\tmargin-bottom: 0.25rem;\n\tz-index: 2;\n\tfont-size: 80%;\n\tposition: absolute;\n\tbackground: white;\n\tmargin: calc(-1.5rem - calc(2.15rem / 2)) 0 0 1ch;\n\tpadding: 0 0.25ch 0 0.25ch;\n}\n\n.autocomplete-results {\n\tposition: absolute;\n\twidth: calc(100% - 1ch + 1.5px);\n\tz-index: 1;\n\tpadding: 0;\n\tmargin: 0;\n\tcolor: #000000;\n\tborder: 1px solid var(--input-active-border-color);\n\tborder-radius: 0 0 0.25rem 0.25rem;\n\tborder-top: none;\n}\n\n.autocomplete-result {\n\tlist-style: none;\n\ttext-align: left;\n\tpadding: 4px 6px;\n\tcursor: pointer;\n}\n\n.autocomplete-result.is-active,\n.autocomplete-result:hover {\n\tbackground-color: var(--row-color-zebra-light);\n\tcolor: #000000;\n}\n</style>\n","import { unref as N, getCurrentScope as U, onScopeDispose as j, computed as y, ref as v, watch as w, getCurrentInstance as B, onMounted as K, onBeforeUnmount as V } from \"vue\";\nfunction _(e) {\n return U() ? (j(e), !0) : !1;\n}\nfunction T(e) {\n return typeof e == \"function\" ? e() : N(e);\n}\nconst F = typeof window < \"u\" && typeof document < \"u\";\ntypeof WorkerGlobalScope < \"u\" && globalThis instanceof WorkerGlobalScope;\nconst q = (e) => e != null, G = Object.prototype.toString, z = (e) => G.call(e) === \"[object Object]\", J = () => {\n};\nfunction C(e) {\n var t;\n const n = T(e);\n return (t = n == null ? void 0 : n.$el) != null ? t : n;\n}\nconst b = F ? window : void 0;\nfunction S(...e) {\n let t, n, o, c;\n if (typeof e[0] == \"string\" || Array.isArray(e[0]) ? ([n, o, c] = e, t = b) : [t, n, o, c] = e, !t)\n return J;\n Array.isArray(n) || (n = [n]), Array.isArray(o) || (o = [o]);\n const l = [], r = () => {\n l.forEach((i) => i()), l.length = 0;\n }, s = (i, p, u, d) => (i.addEventListener(p, u, d), () => i.removeEventListener(p, u, d)), a = w(\n () => [C(t), T(c)],\n ([i, p]) => {\n if (r(), !i)\n return;\n const u = z(p) ? { ...p } : p;\n l.push(\n ...n.flatMap((d) => o.map((E) => s(i, d, E, u)))\n );\n },\n { immediate: !0, flush: \"post\" }\n ), f = () => {\n a(), r();\n };\n return _(f), f;\n}\nfunction Q() {\n const e = v(!1), t = B();\n return t && K(() => {\n e.value = !0;\n }, t), e;\n}\nfunction X(e) {\n const t = Q();\n return y(() => (t.value, !!e()));\n}\nfunction Y(e, t, n = {}) {\n const { window: o = b, ...c } = n;\n let l;\n const r = X(() => o && \"MutationObserver\" in o), s = () => {\n l && (l.disconnect(), l = void 0);\n }, a = y(() => {\n const u = T(e), d = (Array.isArray(u) ? u : [u]).map(C).filter(q);\n return new Set(d);\n }), f = w(\n () => a.value,\n (u) => {\n s(), r.value && u.size && (l = new MutationObserver(t), u.forEach((d) => l.observe(d, c)));\n },\n { immediate: !0, flush: \"post\" }\n ), i = () => l == null ? void 0 : l.takeRecords(), p = () => {\n s(), f();\n };\n return _(p), {\n isSupported: r,\n stop: p,\n takeRecords: i\n };\n}\nfunction Z(e = {}) {\n var t;\n const {\n window: n = b,\n deep: o = !0,\n triggerOnRemoval: c = !1\n } = e, l = (t = e.document) != null ? t : n == null ? void 0 : n.document, r = () => {\n var f;\n let i = l == null ? void 0 : l.activeElement;\n if (o)\n for (; i != null && i.shadowRoot; )\n i = (f = i == null ? void 0 : i.shadowRoot) == null ? void 0 : f.activeElement;\n return i;\n }, s = v(), a = () => {\n s.value = r();\n };\n return n && (S(n, \"blur\", (f) => {\n f.relatedTarget === null && a();\n }, !0), S(n, \"focus\", a, !0)), c && Y(l, (f) => {\n f.filter((i) => i.removedNodes.length).map((i) => Array.from(i.removedNodes)).flat().forEach((i) => {\n i === s.value && a();\n });\n }, {\n childList: !0,\n subtree: !0\n }), a(), s;\n}\nfunction ee(e, t = {}) {\n const n = Z(t), o = y(() => C(e));\n return { focused: y(() => o.value && n.value ? o.value.contains(n.value) : !1) };\n}\nfunction te(e, { window: t = b, scrollTarget: n } = {}) {\n const o = v(!1), c = () => {\n if (!t) return;\n const l = t.document, r = C(e);\n if (!r)\n o.value = !1;\n else {\n const s = r.getBoundingClientRect();\n o.value = s.top <= (t.innerHeight || l.documentElement.clientHeight) && s.left <= (t.innerWidth || l.documentElement.clientWidth) && s.bottom >= 0 && s.right >= 0;\n }\n };\n return w(\n () => C(e),\n () => c(),\n { immediate: !0, flush: \"post\" }\n ), t && S(n || t, \"scroll\", c, {\n capture: !1,\n passive: !0\n }), o;\n}\nconst m = (e) => {\n let t = te(e).value;\n return t = t && e.offsetHeight > 0, t;\n}, g = (e) => e.tabIndex >= 0, x = (e) => {\n const t = e.target;\n return M(t);\n}, M = (e) => {\n var n;\n let t;\n if (e instanceof HTMLTableCellElement) {\n const o = (n = e.parentElement) == null ? void 0 : n.previousElementSibling;\n if (o) {\n const l = Array.from(o.children)[e.cellIndex];\n l && (t = l);\n }\n } else if (e instanceof HTMLTableRowElement) {\n const o = e.previousElementSibling;\n o && (t = o);\n }\n return t && (!g(t) || !m(t)) ? M(t) : t;\n}, ne = (e) => {\n var o;\n const t = e.target;\n let n;\n if (t instanceof HTMLTableCellElement) {\n const c = (o = t.parentElement) == null ? void 0 : o.parentElement;\n if (c) {\n const r = c.firstElementChild.children[t.cellIndex];\n r && (n = r);\n }\n } else if (t instanceof HTMLTableRowElement) {\n const c = t.parentElement;\n if (c) {\n const l = c.firstElementChild;\n l && (n = l);\n }\n }\n return n && (!g(n) || !m(n)) ? k(n) : n;\n}, D = (e) => {\n const t = e.target;\n return k(t);\n}, k = (e) => {\n var n;\n let t;\n if (e instanceof HTMLTableCellElement) {\n const o = (n = e.parentElement) == null ? void 0 : n.nextElementSibling;\n if (o) {\n const l = Array.from(o.children)[e.cellIndex];\n l && (t = l);\n }\n } else if (e instanceof HTMLTableRowElement) {\n const o = e.nextElementSibling;\n o && (t = o);\n }\n return t && (!g(t) || !m(t)) ? k(t) : t;\n}, oe = (e) => {\n var o;\n const t = e.target;\n let n;\n if (t instanceof HTMLTableCellElement) {\n const c = (o = t.parentElement) == null ? void 0 : o.parentElement;\n if (c) {\n const r = c.lastElementChild.children[t.cellIndex];\n r && (n = r);\n }\n } else if (t instanceof HTMLTableRowElement) {\n const c = t.parentElement;\n if (c) {\n const l = c.lastElementChild;\n l && (n = l);\n }\n }\n return n && (!g(n) || !m(n)) ? M(n) : n;\n}, P = (e) => {\n const t = e.target;\n return L(t);\n}, L = (e) => {\n var n;\n let t;\n if (e.previousElementSibling)\n t = e.previousElementSibling;\n else {\n const o = (n = e.parentElement) == null ? void 0 : n.previousElementSibling;\n t = o == null ? void 0 : o.lastElementChild;\n }\n return t && (!g(t) || !m(t)) ? L(t) : t;\n}, O = (e) => {\n const t = e.target;\n return R(t);\n}, R = (e) => {\n var n;\n let t;\n if (e.nextElementSibling)\n t = e.nextElementSibling;\n else {\n const o = (n = e.parentElement) == null ? void 0 : n.nextElementSibling;\n t = o == null ? void 0 : o.firstElementChild;\n }\n return t && (!g(t) || !m(t)) ? R(t) : t;\n}, W = (e) => {\n const o = e.target.parentElement.firstElementChild;\n return o && (!g(o) || !m(o)) ? R(o) : o;\n}, I = (e) => {\n const o = e.target.parentElement.lastElementChild;\n return o && (!g(o) || !m(o)) ? L(o) : o;\n}, h = [\"alt\", \"control\", \"shift\", \"meta\"], re = {\n ArrowUp: \"up\",\n ArrowDown: \"down\",\n ArrowLeft: \"left\",\n ArrowRight: \"right\"\n}, le = {\n \"keydown.up\": (e) => {\n const t = x(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.down\": (e) => {\n const t = D(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.left\": (e) => {\n const t = P(e);\n e.preventDefault(), e.stopPropagation(), t && t.focus();\n },\n \"keydown.right\": (e) => {\n const t = O(e);\n e.preventDefault(), e.stopPropagation(), t && t.focus();\n },\n \"keydown.control.up\": (e) => {\n const t = ne(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.down\": (e) => {\n const t = oe(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.left\": (e) => {\n const t = W(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.control.right\": (e) => {\n const t = I(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.end\": (e) => {\n const t = I(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 n = D(e);\n n && n.focus();\n }\n },\n \"keydown.shift.enter\": (e) => {\n if (e.target instanceof HTMLTableCellElement) {\n e.preventDefault(), e.stopPropagation();\n const n = x(e);\n n && n.focus();\n }\n },\n \"keydown.home\": (e) => {\n const t = W(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.tab\": (e) => {\n const t = O(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n },\n \"keydown.shift.tab\": (e) => {\n const t = P(e);\n t && (e.preventDefault(), e.stopPropagation(), t.focus());\n }\n};\nfunction ie(e) {\n const t = (r) => {\n let s = null;\n return r.parent && (typeof r.parent == \"string\" ? s = document.querySelector(r.parent) : r.parent instanceof HTMLElement ? s = r.parent : s = r.parent.value), s;\n }, n = (r) => {\n const s = t(r);\n let a = [];\n if (typeof r.selectors == \"string\")\n a = s ? Array.from(s.querySelectorAll(r.selectors)) : Array.from(document.querySelectorAll(r.selectors));\n else if (Array.isArray(r.selectors))\n for (const f of r.selectors)\n f instanceof HTMLElement ? a.push(f) : a.push(f.$el);\n else if (r.selectors instanceof HTMLElement)\n a.push(r.selectors);\n else if (Array.isArray(r.selectors.value))\n for (const f of r.selectors.value)\n f instanceof HTMLElement ? a.push(f) : a.push(f.$el);\n else\n a.push(r.selectors.value);\n return a;\n }, o = (r) => {\n const s = t(r);\n let a = [];\n return r.selectors ? a = n(r) : s && (a = Array.from(s.children).filter((i) => g(i) && m(i))), a;\n }, c = (r) => (s) => {\n const a = re[s.key] || s.key.toLowerCase();\n if (h.includes(a)) return;\n const f = r.handlers || le;\n for (const i of Object.keys(f)) {\n const [p, ...u] = i.split(\".\");\n if (p === \"keydown\" && u.includes(a)) {\n const d = f[i], E = u.filter(($) => h.includes($)), H = h.some(($) => {\n const A = $.charAt(0).toUpperCase() + $.slice(1);\n return s.getModifierState(A);\n });\n if (E.length > 0) {\n if (H) {\n for (const $ of h)\n if (u.includes($)) {\n const A = $.charAt(0).toUpperCase() + $.slice(1);\n s.getModifierState(A) && d(s);\n }\n }\n } else\n H || d(s);\n }\n }\n }, l = [];\n K(() => {\n for (const r of e) {\n const s = t(r), a = o(r), f = c(r), i = s ? [s] : a;\n for (const p of i) {\n const { focused: u } = ee(v(p)), d = w(u, (E) => {\n E ? p.addEventListener(\"keydown\", f) : p.removeEventListener(\"keydown\", f);\n });\n l.push(d);\n }\n }\n }), V(() => {\n for (const r of l)\n r();\n });\n}\nfunction ce(e) {\n}\nexport {\n le as defaultKeypressHandlers,\n ce as install,\n ie as useKeyboardNav\n};\n//# sourceMappingURL=utilities.js.map\n","<template>\n\t<div class=\"adatepicker\" tabindex=\"0\" ref=\"adatepicker\">\n\t\t<table>\n\t\t\t<tr>\n\t\t\t\t<td id=\"previous-month-btn\" @click=\"previousMonth\" :tabindex=\"-1\">&lt;</td>\n\t\t\t\t<th colspan=\"5\" :tabindex=\"-1\">{{ monthAndYear }}</th>\n\t\t\t\t<td id=\"next-month-btn\" @click=\"nextMonth\" :tabindex=\"-1\">&gt;</td>\n\t\t\t</tr>\n\t\t\t<tr class=\"days-header\">\n\t\t\t\t<td>M</td>\n\t\t\t\t<td>T</td>\n\t\t\t\t<td>W</td>\n\t\t\t\t<td>T</td>\n\t\t\t\t<td>F</td>\n\t\t\t\t<td>S</td>\n\t\t\t\t<td>S</td>\n\t\t\t</tr>\n\t\t\t<tr v-for=\"rowNo in numberOfRows\" :key=\"rowNo\">\n\t\t\t\t<td\n\t\t\t\t\tv-for=\"colNo in numberOfColumns\"\n\t\t\t\t\tref=\"celldate\"\n\t\t\t\t\t:key=\"getCurrentCell(rowNo, colNo)\"\n\t\t\t\t\t:contenteditable=\"false\"\n\t\t\t\t\t:spellcheck=\"false\"\n\t\t\t\t\t:tabindex=\"0\"\n\t\t\t\t\t@click.prevent.stop=\"selectDate(getCurrentCell(rowNo, colNo))\"\n\t\t\t\t\t@keydown.enter=\"selectDate(getCurrentCell(rowNo, colNo))\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\ttodaysDate: isTodaysDate(getCurrentDate(rowNo, colNo)),\n\t\t\t\t\t\tselectedDate: isSelectedDate(getCurrentDate(rowNo, colNo)),\n\t\t\t\t\t}\">\n\t\t\t\t\t{{ new Date(getCurrentDate(rowNo, colNo)).getDate() }}\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</table>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { defaultKeypressHandlers, useKeyboardNav } from '@stonecrop/utilities'\nimport { computed, nextTick, onMounted, ref, watch } from 'vue'\n\nconst numberOfRows = 6\nconst numberOfColumns = 7\n\nconst date = defineModel<number | Date>({ default: new Date() })\nconst selectedDate = ref(new Date(date.value))\nconst currentMonth = ref<number>(selectedDate.value.getMonth())\nconst currentYear = ref<number>(selectedDate.value.getFullYear())\nconst currentDates = ref<number[]>([])\nconst adatepicker = ref<HTMLElement | null>(null)\n\nonMounted(async () => {\n\tpopulateMonth()\n\n\t// required to allow the elements to be focused in the next step\n\tawait nextTick()\n\n\tconst $selectedDate = document.getElementsByClassName('selectedDate')\n\tif ($selectedDate.length > 0) {\n\t\t;($selectedDate[0] as HTMLElement).focus()\n\t} else {\n\t\tconst $todaysDate = document.getElementsByClassName('todaysDate')\n\t\tif ($todaysDate.length > 0) {\n\t\t\t;($todaysDate[0] as HTMLElement).focus()\n\t\t}\n\t}\n})\n\nconst populateMonth = () => {\n\tcurrentDates.value = []\n\tconst firstOfMonth = new Date(currentYear.value, currentMonth.value, 1)\n\tconst monthStartWeekday = firstOfMonth.getDay()\n\tconst calendarStartDay = firstOfMonth.setDate(firstOfMonth.getDate() - monthStartWeekday)\n\n\t// assume midnight for all dates while building the calendar\n\tfor (const dayIndex of Array(43).keys()) {\n\t\tcurrentDates.value.push(calendarStartDay + dayIndex * 86400000)\n\t}\n}\n\nwatch([currentMonth, currentYear], populateMonth)\nconst previousYear = () => (currentYear.value -= 1)\nconst nextYear = () => (currentYear.value += 1)\n\nconst previousMonth = () => {\n\tif (currentMonth.value == 0) {\n\t\tcurrentMonth.value = 11\n\t\tpreviousYear()\n\t} else {\n\t\tcurrentMonth.value -= 1\n\t}\n}\n\nconst nextMonth = () => {\n\tif (currentMonth.value == 11) {\n\t\tcurrentMonth.value = 0\n\t\tnextYear()\n\t} else {\n\t\tcurrentMonth.value += 1\n\t}\n}\n\nconst isTodaysDate = (day: string | number | Date) => {\n\tconst todaysDate = new Date()\n\tif (currentMonth.value !== todaysDate.getMonth()) {\n\t\treturn\n\t}\n\treturn todaysDate.toDateString() === new Date(day).toDateString()\n}\n\nconst isSelectedDate = (day: string | number | Date) => {\n\treturn new Date(day).toDateString() === new Date(selectedDate.value).toDateString()\n}\n\nconst getCurrentCell = (rowNo: number, colNo: number) => {\n\treturn (rowNo - 1) * numberOfColumns + colNo\n}\n\nconst getCurrentDate = (rowNo: number, colNo: number) => {\n\treturn currentDates.value[getCurrentCell(rowNo, colNo)]\n}\n\nconst selectDate = (currentIndex: number) => {\n\tdate.value = selectedDate.value = new Date(currentDates.value[currentIndex])\n}\n\nconst monthAndYear = computed(() => {\n\treturn new Date(currentYear.value, currentMonth.value, 1).toLocaleDateString(undefined, {\n\t\tyear: 'numeric',\n\t\tmonth: 'long',\n\t})\n})\n\n// setup keyboard navigation\nuseKeyboardNav([\n\t{\n\t\tparent: adatepicker,\n\t\tselectors: 'td',\n\t\thandlers: {\n\t\t\t...defaultKeypressHandlers,\n\t\t\t...{\n\t\t\t\t'keydown.pageup': previousMonth,\n\t\t\t\t'keydown.shift.pageup': previousYear,\n\t\t\t\t'keydown.pagedown': nextMonth,\n\t\t\t\t'keydown.shift.pagedown': nextYear,\n\t\t\t\t// TODO: this is a hack to override the stonecrop enter handler;\n\t\t\t\t// store context inside the component so that handlers can be setup consistently\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\t\t\t\t'keydown.enter': () => {}, // select this date\n\t\t\t},\n\t\t},\n\t},\n])\n</script>\n\n<style>\n@import url('@stonecrop/themes/default/default.css');\n@import url('@/theme/adate.css');\n@import url('@/theme/aform.css');\n</style>\n","<template>\n\t<form class=\"aform\">\n\t\t<component\n\t\t\tv-for=\"(componentObj, key) in modelValue\"\n\t\t\t:is=\"componentObj.component\"\n\t\t\t:key=\"key\"\n\t\t\t:schema=\"componentObj\"\n\t\t\tv-model=\"childModels[key].value\"\n\t\t\t:data=\"formData[componentObj.fieldname]\"\n\t\t\t:readonly=\"readonly\"\n\t\t\tv-bind=\"componentProps(componentObj)\">\n\t\t</component>\n\t</form>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\n\nimport type { SchemaTypes } from '@/types'\n\nconst props = defineProps<{\n\tmodelValue: SchemaTypes[]\n\tdata: Record<string, any>\n\treadonly?: boolean\n}>()\n\nconst emit = defineEmits(['update:modelValue'])\n\nconst formData = ref(props.data || {})\n\nconst componentProps = (componentObj: SchemaTypes) => {\n\tlet propsToPass = {}\n\tfor (const [key, value] of Object.entries(componentObj)) {\n\t\tif (!['component', 'fieldtype'].includes(key)) {\n\t\t\tpropsToPass[key] = value\n\t\t}\n\n\t\t// handle ATable data formats in case the table is nested under an AFormm;\n\t\t// TODO: there's probably a better way to do this\n\t\tif (key === 'rows') {\n\t\t\tif (value && (value as any[]).length === 0) {\n\t\t\t\tpropsToPass['rows'] = formData.value[componentObj.fieldname]\n\t\t\t}\n\t\t}\n\t}\n\treturn propsToPass\n}\n\nconst childModels = computed({\n\tget: () => {\n\t\treturn props.modelValue.map((val, i) => {\n\t\t\treturn computed({\n\t\t\t\tget() {\n\t\t\t\t\treturn val.value\n\t\t\t\t},\n\t\t\t\tset: newValue => {\n\t\t\t\t\t// Find the component in modelValue and update it\n\t\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t\tprops.modelValue[i].value = newValue\n\t\t\t\t\temit('update:modelValue', props.modelValue)\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t},\n\tset: (/* newValue */) => {\n\t\t//emit('update:modelValue', '')\n\t},\n})\n</script>\n\n<style scoped>\n@import url('@/theme/aform.css');\n</style>\n","<template>\n\t<fieldset>\n\t\t<legend @click=\"toggleCollapse\" @submit=\"toggleCollapse\">\n\t\t\t{{ label }}\n\t\t\t<CollapseButton v-if=\"collapsible\" :collapsed=\"collapsed\" />\n\t\t</legend>\n\t\t<slot :collapsed=\"collapsed\">\n\t\t\t<AForm v-show=\"!collapsed\" v-model=\"formSchema\" :data=\"formData\" />\n\t\t</slot>\n\t</fieldset>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nimport CollapseButton from '@/components/base/CollapseButton.vue'\nimport AForm from '@/components/AForm.vue'\nimport { SchemaTypes } from '@/types'\n\nconst props = defineProps<{\n\tschema: SchemaTypes[]\n\tlabel: string\n\tcollapsible?: boolean\n\tdata?: any\n}>()\n\nconst formData = ref(props.data || [])\nconst collapsed = ref(false)\nconst collapsible = ref(props.collapsible)\n\nconst formSchema = ref(props.schema)\nfunction toggleCollapse(event: Event) {\n\tevent.preventDefault()\n\tif (!collapsible.value) {\n\t\treturn\n\t}\n\tcollapsed.value = !collapsed.value\n}\n</script>\n\n<style scoped>\nfieldset {\n\tmax-width: 100%;\n\twidth: 100%;\n\tmargin-right: 2ch;\n\tborder: 1px solid transparent;\n\tborder-bottom: 1px solid var(--gray-50);\n}\n\nlegend {\n\twidth: 100%;\n\theight: 1.15rem;\n\tborder: 1px solid transparent;\n\tpadding-bottom: 0.5rem;\n\tfont-size: 110%;\n\tfont-weight: 600;\n\tuser-select: none;\n}\n\n.collapse-button {\n\tfloat: right;\n}\n</style>\n","<template>\n\t<div class=\"aform__form-element\">\n\t\t<label class=\"aform__field-label\" :for=\"uuid\">{{ label }}</label>\n\t\t<input\n\t\t\tclass=\"aform__input-field\"\n\t\t\tv-model=\"inputNumber\"\n\t\t\ttype=\"number\"\n\t\t\t:id=\"uuid\"\n\t\t\t:disabled=\"readonly\"\n\t\t\t:required=\"required\" />\n\t\t<p class=\"error\" v-show=\"validation.errorMessage\" v-html=\"validation.errorMessage\"></p>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nwithDefaults(\n\tdefineProps<{\n\t\tlabel: string\n\t\trequired?: boolean\n\t\treadonly?: boolean\n\t\tuuid?: string\n\t\tvalidation?: Record<string, any>\n\t}>(),\n\t{\n\t\tvalidation: () => ({ errorMessage: '&nbsp;' }),\n\t}\n)\n\nconst inputNumber = defineModel<number>()\n</script>\n","import type { DirectiveBinding } from 'vue'\n\nimport type { FormSchema } from '@/types'\n\nconst NAMED_MASKS = {\n\tdate: '##/##/####',\n\tdatetime: '####/##/## ##:##',\n\ttime: '##:##',\n\tfulltime: '##:##:##',\n\tphone: '(###) ### - ####',\n\tcard: '#### #### #### ####',\n}\n\nfunction extractMaskFn(mask: string): ((args: any) => string) | void {\n\ttry {\n\t\t// eslint-disable-next-line @typescript-eslint/no-implied-eval\n\t\treturn Function(`\"use strict\";return (${mask})`)()\n\t} catch (error) {\n\t\tif (error instanceof ReferenceError) {\n\t\t\t// assume mask is a string\n\t\t}\n\t}\n}\n\nfunction getMask(binding: DirectiveBinding<string>) {\n\tlet mask = binding.value\n\n\tif (mask) {\n\t\tconst maskFn = extractMaskFn(mask)\n\t\tif (maskFn) {\n\t\t\t// TODO: (state) replace with state management;\n\t\t\t// pass the entire form/table data to the function\n\t\t\tconst locale = binding.instance['locale']\n\t\t\tmask = maskFn(locale)\n\t\t}\n\t} else {\n\t\t// TODO: (state) handle using state management\n\t\tconst schema: FormSchema = binding.instance['schema']\n\t\tconst fieldType: string | undefined = schema?.fieldtype?.toLowerCase()\n\t\tif (fieldType && NAMED_MASKS[fieldType]) {\n\t\t\tmask = NAMED_MASKS[fieldType]\n\t\t}\n\t}\n\n\treturn mask\n}\n\nfunction unmaskInput(input: string, maskToken?: string) {\n\tif (!maskToken) {\n\t\tmaskToken = '#'\n\t}\n\n\tlet unmaskedInput = input\n\tconst maskChars = [maskToken, '/', '-', '(', ')', ' ']\n\n\tfor (const char of maskChars) {\n\t\tunmaskedInput = unmaskedInput.replaceAll(char, '')\n\t}\n\n\treturn unmaskedInput\n}\n\nfunction fillMask(input: string, mask: string, maskToken?: string) {\n\tif (!maskToken) {\n\t\tmaskToken = '#'\n\t}\n\n\tlet replacement = mask\n\tfor (const inputChar of input) {\n\t\tconst replaceIndex = replacement.indexOf(maskToken)\n\t\tif (replaceIndex !== -1) {\n\t\t\tconst prefix = replacement.substring(0, replaceIndex)\n\t\t\tconst suffix = replacement.substring(replaceIndex + 1)\n\t\t\treplacement = prefix + inputChar + suffix\n\t\t}\n\t}\n\n\treturn replacement.slice(0, mask.length)\n}\n\nexport function useStringMask(el: HTMLInputElement, binding: DirectiveBinding<string>) {\n\tconst mask = getMask(binding)\n\tif (!mask) return\n\n\tconst maskToken = '#'\n\tconst inputText = el.value\n\n\t// process input value with mask\n\tconst unmaskedInput = unmaskInput(inputText, maskToken)\n\tif (unmaskedInput) {\n\t\tconst replacement = fillMask(unmaskedInput, mask, maskToken)\n\n\t\t// TODO: (state) this is very opinionated;\n\t\t// most likely fixed with state management;\n\t\t// a better way could be to emit back to instance;\n\n\t\tif (binding.instance['maskFilled']) {\n\t\t\tbinding.instance['maskFilled'] = !replacement.includes(maskToken)\n\t\t}\n\n\t\tel.value = replacement\n\t} else {\n\t\tel.value = mask\n\t}\n}\n","<template>\n\t<div class=\"aform__form-element\">\n\t\t<label class=\"aform__field-label\" :for=\"uuid\">{{ label }} </label>\n\t\t<input\n\t\t\tclass=\"aform__input-field\"\n\t\t\tv-model=\"inputText\"\n\t\t\t:id=\"uuid\"\n\t\t\t:disabled=\"readonly\"\n\t\t\t:maxlength=\"mask ? maskFilled && mask.length : undefined\"\n\t\t\t:required=\"required\"\n\t\t\tv-mask=\"mask\" />\n\t\t<p class=\"error\" v-show=\"validation.errorMessage\" v-html=\"validation.errorMessage\"></p>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { /* inject, */ ref } from 'vue'\n\nimport { useStringMask as vMask } from '@/directives/mask'\nimport type { FormSchema } from '@/types'\n\nwithDefaults(\n\tdefineProps<{\n\t\tschema: FormSchema\n\t\tlabel: string\n\t\tmask?: string\n\t\trequired?: boolean\n\t\treadonly?: boolean\n\t\tuuid?: string\n\t\tvalidation?: { errorMessage: string }\n\t}>(),\n\t{\n\t\tvalidation: () => ({ errorMessage: '&nbsp;' }),\n\t}\n)\n\n// TODO: setup maskFilled as a computed property\nconst maskFilled = ref(true)\n\n// TODO: (state) replace with state management\n// const locale = inject<string>('locale', '')\n\nconst inputText = defineModel<number | string>()\n</script>\n","<template>\n\t<div class=\"login-container\">\n\t\t<div>\n\t\t\t<div class=\"account-container\">\n\t\t\t\t<div class=\"account-header\">\n\t\t\t\t\t<h1 id=\"account-title\">{{ headerTitle }}</h1>\n\t\t\t\t\t<p id=\"account-subtitle\">{{ headerSubtitle }}</p>\n\t\t\t\t</div>\n\n\t\t\t\t<form @submit=\"onSubmit\">\n\t\t\t\t\t<div class=\"login-form-container\">\n\t\t\t\t\t\t<div class=\"login-form-email login-form-element\">\n\t\t\t\t\t\t\t<label id=\"login-email\" for=\"email\" class=\"aform__field-label\">Email</label>\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tid=\"email\"\n\t\t\t\t\t\t\t\tclass=\"aform__input-field\"\n\t\t\t\t\t\t\t\tname=\"email\"\n\t\t\t\t\t\t\t\tplaceholder=\"name@example.com\"\n\t\t\t\t\t\t\t\ttype=\"email\"\n\t\t\t\t\t\t\t\tv-model=\"email\"\n\t\t\t\t\t\t\t\tauto-capitalize=\"none\"\n\t\t\t\t\t\t\t\tauto-complete=\"email\"\n\t\t\t\t\t\t\t\tauto-correct=\"off\"\n\t\t\t\t\t\t\t\t:disabled=\"isLoading\" />\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div class=\"login-form-password login-form-element\">\n\t\t\t\t\t\t\t<label id=\"login-password\" for=\"password\" class=\"login-label\">Password</label>\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tid=\"password\"\n\t\t\t\t\t\t\t\tclass=\"login-field\"\n\t\t\t\t\t\t\t\tname=\"password\"\n\t\t\t\t\t\t\t\ttype=\"password\"\n\t\t\t\t\t\t\t\tv-model=\"password\"\n\t\t\t\t\t\t\t\t:disabled=\"isLoading\" />\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<button class=\"btn\" @click=\"onSubmit\" :disabled=\"isLoading || !email || !password\">\n\t\t\t\t\t\t\t<span v-if=\"isLoading\" class=\"material-symbols-outlined loading-icon\">progress_activity</span>\n\t\t\t\t\t\t\t<span id=\"login-form-button\">Login</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</form>\n\n\t\t\t\t<button class=\"btn\">\n\t\t\t\t\t<span id=\"forgot-password-button\">Forgot password?</span>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nwithDefaults(\n\tdefineProps<{\n\t\theaderTitle?: string\n\t\theaderSubtitle?: string\n\t}>(),\n\t{\n\t\theaderTitle: 'Login',\n\t\theaderSubtitle: 'Enter your email and password to login',\n\t}\n)\n\nconst emit = defineEmits(['loginFailed', 'loginSuccess'])\n\nconst email = ref('')\nconst password = ref('')\n\nconst isLoading = ref(false)\nconst loginFailed = ref(false)\n\nfunction onSubmit(event: Event) {\n\tevent.preventDefault()\n\tisLoading.value = true\n\n\t// TODO: handle submit logic, handle failure\n\n\tif (loginFailed.value) {\n\t\tisLoading.value = false\n\t\temit('loginFailed')\n\t\treturn\n\t}\n\n\tisLoading.value = false\n\temit('loginSuccess')\n}\n</script>\n\n<style>\n@import url('@/theme/login.css');\n</style>\n","import { App } from 'vue'\n\nimport ACheckbox from '@/components/form/ACheckbox.vue'\nimport AComboBox from '@/components/form/AComboBox.vue'\nimport ADate from '@/components/form/ADate.vue'\nimport ADropdown from '@/components/form/ADropdown.vue'\nimport ADatePicker from '@/components/form/ADatePicker.vue'\nimport AFieldset from '@/components/form/AFieldset.vue'\nimport AForm from '@/components/AForm.vue'\nimport ANumericInput from '@/components/form/ANumericInput.vue'\nimport ATextInput from '@/components/form/ATextInput.vue'\nimport Login from '@/components/utilities/Login.vue'\nexport type { BasicSchema, FormSchema, TableSchema, FieldsetSchema, SchemaTypes } from '@/types'\n// import { ACurrency } from '@/components/form/ACurrency.vue'\n// import { AQuantity } from '@/components/form/AQuantity.vue'\n\n/**\n * Install all AForm components\n * @param app - Vue app instance\n * @public\n */\nfunction install(app: App /* options */) {\n\tapp.component('ACheckbox', ACheckbox)\n\tapp.component('ACombobox', AComboBox)\n\tapp.component('ADate', ADate)\n\tapp.component('ADropdown', ADropdown)\n\tapp.component('ADatePicker', ADatePicker)\n\tapp.component('AFieldset', AFieldset)\n\tapp.component('AForm', AForm)\n\tapp.component('ANumericInput', ANumericInput)\n\tapp.component('ATextInput', ATextInput)\n\t// app.component('ACurrency', ACurrency)\n\t// app.component('AQuantity', AQuantity)\n}\n\nexport {\n\tACheckbox,\n\tAComboBox,\n\tADate,\n\tADropdown,\n\tADatePicker,\n\tAFieldset,\n\tAForm,\n\tANumericInput,\n\tATextInput,\n\tLogin,\n\tinstall,\n}\n"],"names":["checkbox","_useModel","__props","inputDate","dateRef","ref","showPicker","props","emit","__emit","results","search","isLoading","arrowCounter","isOpen","mopInput","onMounted","handleClickOutside","filterResults","onUnmounted","setResult","result","closeResults","item","onChange","onArrowDown","onArrowUp","onEnter","_","e","U","j","N","F","q","G","z","J","t","n","b","S","o","c","l","r","i","p","u","d","a","w","E","f","Q","v","B","K","X","y","Y","Z","ee","te","m","g","x","M","ne","k","D","oe","P","L","O","R","I","h","re","le","ie","$","H","A","V","numberOfRows","numberOfColumns","date","selectedDate","currentMonth","currentYear","currentDates","adatepicker","populateMonth","nextTick","$selectedDate","$todaysDate","firstOfMonth","monthStartWeekday","calendarStartDay","dayIndex","watch","previousYear","nextYear","previousMonth","nextMonth","isTodaysDate","day","todaysDate","isSelectedDate","getCurrentCell","rowNo","colNo","getCurrentDate","selectDate","currentIndex","monthAndYear","computed","useKeyboardNav","defaultKeypressHandlers","formData","componentProps","componentObj","propsToPass","key","value","childModels","val","newValue","collapsed","collapsible","formSchema","toggleCollapse","event","inputNumber","NAMED_MASKS","extractMaskFn","mask","getMask","binding","maskFn","locale","schema","fieldType","_a","unmaskInput","input","maskToken","unmaskedInput","maskChars","char","fillMask","replacement","inputChar","replaceIndex","prefix","suffix","useStringMask","el","inputText","maskFilled","email","password","loginFailed","onSubmit","install","app","ACheckbox","AComboBox","ADate","ADropdown","ADatePicker","AFieldset","AForm","ANumericInput","ATextInput"],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ const NAMED_MASKS = {
2
+ date: '##/##/####',
3
+ datetime: '####/##/## ##:##',
4
+ time: '##:##',
5
+ fulltime: '##:##:##',
6
+ phone: '(###) ### - ####',
7
+ card: '#### #### #### ####',
8
+ };
9
+ function extractMaskFn(mask) {
10
+ try {
11
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
12
+ return Function(`"use strict";return (${mask})`)();
13
+ }
14
+ catch (error) {
15
+ if (error instanceof ReferenceError) {
16
+ // assume mask is a string
17
+ }
18
+ }
19
+ }
20
+ function getMask(binding) {
21
+ let mask = binding.value;
22
+ if (mask) {
23
+ const maskFn = extractMaskFn(mask);
24
+ if (maskFn) {
25
+ // TODO: (state) replace with state management;
26
+ // pass the entire form/table data to the function
27
+ const locale = binding.instance['locale'];
28
+ mask = maskFn(locale);
29
+ }
30
+ }
31
+ else {
32
+ // TODO: (state) handle using state management
33
+ const schema = binding.instance['schema'];
34
+ const fieldType = schema?.fieldtype?.toLowerCase();
35
+ if (fieldType && NAMED_MASKS[fieldType]) {
36
+ mask = NAMED_MASKS[fieldType];
37
+ }
38
+ }
39
+ return mask;
40
+ }
41
+ function unmaskInput(input, maskToken) {
42
+ if (!maskToken) {
43
+ maskToken = '#';
44
+ }
45
+ let unmaskedInput = input;
46
+ const maskChars = [maskToken, '/', '-', '(', ')', ' '];
47
+ for (const char of maskChars) {
48
+ unmaskedInput = unmaskedInput.replaceAll(char, '');
49
+ }
50
+ return unmaskedInput;
51
+ }
52
+ function fillMask(input, mask, maskToken) {
53
+ if (!maskToken) {
54
+ maskToken = '#';
55
+ }
56
+ let replacement = mask;
57
+ for (const inputChar of input) {
58
+ const replaceIndex = replacement.indexOf(maskToken);
59
+ if (replaceIndex !== -1) {
60
+ const prefix = replacement.substring(0, replaceIndex);
61
+ const suffix = replacement.substring(replaceIndex + 1);
62
+ replacement = prefix + inputChar + suffix;
63
+ }
64
+ }
65
+ return replacement.slice(0, mask.length);
66
+ }
67
+ export function useStringMask(el, binding) {
68
+ const mask = getMask(binding);
69
+ if (!mask)
70
+ return;
71
+ const maskToken = '#';
72
+ const inputText = el.value;
73
+ // process input value with mask
74
+ const unmaskedInput = unmaskInput(inputText, maskToken);
75
+ if (unmaskedInput) {
76
+ const replacement = fillMask(unmaskedInput, mask, maskToken);
77
+ // TODO: (state) this is very opinionated;
78
+ // most likely fixed with state management;
79
+ // a better way could be to emit back to instance;
80
+ if (binding.instance['maskFilled']) {
81
+ binding.instance['maskFilled'] = !replacement.includes(maskToken);
82
+ }
83
+ el.value = replacement;
84
+ }
85
+ else {
86
+ el.value = mask;
87
+ }
88
+ }
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ import ACheckbox from '@/components/form/ACheckbox.vue';
2
+ import AComboBox from '@/components/form/AComboBox.vue';
3
+ import ADate from '@/components/form/ADate.vue';
4
+ import ADropdown from '@/components/form/ADropdown.vue';
5
+ import ADatePicker from '@/components/form/ADatePicker.vue';
6
+ import AFieldset from '@/components/form/AFieldset.vue';
7
+ import AForm from '@/components/AForm.vue';
8
+ import ANumericInput from '@/components/form/ANumericInput.vue';
9
+ import ATextInput from '@/components/form/ATextInput.vue';
10
+ import Login from '@/components/utilities/Login.vue';
11
+ // import { ACurrency } from '@/components/form/ACurrency.vue'
12
+ // import { AQuantity } from '@/components/form/AQuantity.vue'
13
+ /**
14
+ * Install all AForm components
15
+ * @param app - Vue app instance
16
+ * @public
17
+ */
18
+ function install(app /* options */) {
19
+ app.component('ACheckbox', ACheckbox);
20
+ app.component('ACombobox', AComboBox);
21
+ app.component('ADate', ADate);
22
+ app.component('ADropdown', ADropdown);
23
+ app.component('ADatePicker', ADatePicker);
24
+ app.component('AFieldset', AFieldset);
25
+ app.component('AForm', AForm);
26
+ app.component('ANumericInput', ANumericInput);
27
+ app.component('ATextInput', ATextInput);
28
+ // app.component('ACurrency', ACurrency)
29
+ // app.component('AQuantity', AQuantity)
30
+ }
31
+ export { ACheckbox, AComboBox, ADate, ADropdown, ADatePicker, AFieldset, AForm, ANumericInput, ATextInput, Login, install, };
@@ -0,0 +1,3 @@
1
+ import type { DirectiveBinding } from 'vue';
2
+ export declare function useStringMask(el: HTMLInputElement, binding: DirectiveBinding<string>): void;
3
+ //# sourceMappingURL=mask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mask.d.ts","sourceRoot":"","sources":["../../../src/directives/mask.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAA;AAgF3C,wBAAgB,aAAa,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAwBpF"}
@@ -0,0 +1,20 @@
1
+ import { App } from 'vue';
2
+ import ACheckbox from '@/components/form/ACheckbox.vue';
3
+ import AComboBox from '@/components/form/AComboBox.vue';
4
+ import ADate from '@/components/form/ADate.vue';
5
+ import ADropdown from '@/components/form/ADropdown.vue';
6
+ import ADatePicker from '@/components/form/ADatePicker.vue';
7
+ import AFieldset from '@/components/form/AFieldset.vue';
8
+ import AForm from '@/components/AForm.vue';
9
+ import ANumericInput from '@/components/form/ANumericInput.vue';
10
+ import ATextInput from '@/components/form/ATextInput.vue';
11
+ import Login from '@/components/utilities/Login.vue';
12
+ export type { BasicSchema, FormSchema, TableSchema, FieldsetSchema, SchemaTypes } from '@/types';
13
+ /**
14
+ * Install all AForm components
15
+ * @param app - Vue app instance
16
+ * @public
17
+ */
18
+ declare function install(app: App): void;
19
+ export { ACheckbox, AComboBox, ADate, ADropdown, ADatePicker, AFieldset, AForm, ANumericInput, ATextInput, Login, install, };
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,OAAO,SAAS,MAAM,iCAAiC,CAAA;AACvD,OAAO,SAAS,MAAM,iCAAiC,CAAA;AACvD,OAAO,KAAK,MAAM,6BAA6B,CAAA;AAC/C,OAAO,SAAS,MAAM,iCAAiC,CAAA;AACvD,OAAO,WAAW,MAAM,mCAAmC,CAAA;AAC3D,OAAO,SAAS,MAAM,iCAAiC,CAAA;AACvD,OAAO,KAAK,MAAM,wBAAwB,CAAA;AAC1C,OAAO,aAAa,MAAM,qCAAqC,CAAA;AAC/D,OAAO,UAAU,MAAM,kCAAkC,CAAA;AACzD,OAAO,KAAK,MAAM,kCAAkC,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAIhG;;;;GAIG;AACH,iBAAS,OAAO,CAAC,GAAG,EAAE,GAAG,QAYxB;AAED,OAAO,EACN,SAAS,EACT,SAAS,EACT,KAAK,EACL,SAAS,EACT,WAAW,EACX,SAAS,EACT,KAAK,EACL,aAAa,EACb,UAAU,EACV,KAAK,EACL,OAAO,GACP,CAAA"}
@@ -0,0 +1,27 @@
1
+ import ATable from '@stonecrop/atable';
2
+ export type BasicSchema = {
3
+ component: string;
4
+ fieldname: string;
5
+ value: any;
6
+ };
7
+ export type FormSchema = BasicSchema & {
8
+ align: string;
9
+ edit: boolean;
10
+ fieldtype: string;
11
+ label: string;
12
+ name: string;
13
+ width: string;
14
+ mask?: string;
15
+ };
16
+ export type TableSchema = BasicSchema & {
17
+ columns: ATable.TableColumn[];
18
+ config: ATable.TableConfig;
19
+ rows: ATable.TableRow[];
20
+ };
21
+ export type FieldsetSchema = BasicSchema & {
22
+ label: string;
23
+ schema: (FormSchema | TableSchema)[];
24
+ collapsible?: boolean;
25
+ };
26
+ export type SchemaTypes = FormSchema | TableSchema | FieldsetSchema;
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAA;AAEtC,MAAM,MAAM,WAAW,GAAG;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,GAAG,CAAA;CACV,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,OAAO,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IACvC,OAAO,EAAE,MAAM,CAAC,WAAW,EAAE,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAC,WAAW,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,CAAC,UAAU,GAAG,WAAW,CAAC,EAAE,CAAA;IACpC,WAAW,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,cAAc,CAAA"}
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- @import"https://fonts.googleapis.com/css2?family=Arimo:ital,wght@0,400..700;1,400..700&display=swap";div[data-v-69d0f23d]{min-width:40ch;border:1px solid transparent;padding:0rem;margin:0rem;margin-right:1ch}input[data-v-69d0f23d]{width:calc(100% - 1ch);outline:1px solid transparent;border:1px solid var(--input-border-color);padding:1ch .5ch .5ch 1ch;margin:.575rem 0 0;min-height:1.15rem;border-radius:.25rem}p[data-v-69d0f23d],label[data-v-69d0f23d]{color:var(--input-label-color);display:block;min-height:1.15rem;padding:0rem;margin:0rem 0rem .25rem;border:1px solid transparent}p[data-v-69d0f23d]{width:100%;color:red;font-size:85%}label[data-v-69d0f23d]{z-index:2;font-size:80%;position:absolute;background:#fff;margin:-2.575rem 0 0 1ch;padding:0 .25ch}input[data-v-69d0f23d]:focus{border:1px solid var(--input-active-border-color)}input:focus+label[data-v-69d0f23d]{color:var(--input-active-label-color)}.autocomplete{position:relative}.input-wrapper{min-width:40ch;border:1px solid transparent;padding:0rem;margin:0rem;margin-right:1ch}input{width:calc(100% - 1ch);outline:1px solid transparent;border:1px solid var(--input-border-color);padding:1ch .5ch .5ch 1ch;margin:.575rem 0 0;min-height:1.15rem;border-radius:.25rem}input:focus{border:1px solid var(--input-active-border-color);border-radius:.25rem .25rem 0 0;border-bottom:none}label{display:block;min-height:1.15rem;padding:0rem;margin:0rem 0rem .25rem;border:1px solid transparent;z-index:2;font-size:80%;position:absolute;background:#fff;margin:-2.575rem 0 0 1ch;padding:0 .25ch}.autocomplete-results{position:absolute;width:calc(100% - 1ch + 1.5px);z-index:1;padding:0;margin:0;color:#000;border:1px solid var(--input-active-border-color);border-radius:0 0 .25rem .25rem;border-top:none}.autocomplete-result{list-style:none;text-align:left;padding:4px 6px;cursor:pointer}.autocomplete-result.is-active,.autocomplete-result:hover{background-color:var(--row-color-zebra-light);color:#000}:root{--primary-color: #0098c9;--primary-text-color: #ffffff;--brand-color: #202a44;--gray-5: #f2f2f2;--gray-10: #e6e6e6;--gray-20: #cccccc;--gray-50: #808080;--gray-60: #666666;--gray-80: #333333;--brand-danger: #e63c28;--brand-success: #155724;--row-color-zebra-light: #eeeeee;--row-color-zebra-dark: #dddddd;--focus-cell-background: #ffffff;--focus-cell-outline: #000000;--cell-border-color: #ffffff;--cell-text-color: #3a3c41;--active-cell-background: #ffffff;--active-cell-outline: #e6a92d;--row-border-color: var(--gray-20);--header-border-color: #ffffff;--header-text-color: var(--gray-20);--row-number-background-color: #ffffff;--input-border-color: var(--gray-20);--input-label-color: var(--gray-60);--input-active-border-color: #000000;--input-active-label-color: #000000;--required-border: #e63c28;--font-size: 10px;--font-family: Arimo, Arial, sans-serif;--table-font-size: 16px;--atable-font-family: "Arimo", sans-serif;--atable-row-padding: 0px;--atable-row-height: 1.5em;--btn-color: white;--btn-border: #cccccc;--btn-hover: #f2f2f2;--btn-label-color: black}.aform{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:baseline;padding:1rem;border:1px solid var(--gray-5);border-left:4px solid var(--gray-5);margin-bottom:1rem}.aform__form-element{min-width:30%;flex-basis:32%;border:1px solid transparent;padding:0;margin:0;margin-right:.5rem;margin-bottom:.5rem;display:grid;position:relative;margin:.5rem 0}.aform__input-field{outline:1px solid transparent;border:1px solid var(--input-border-color);font-size:1rem;padding:.5rem .25rem .25rem .5rem;margin:0;border-radius:0;box-sizing:border-box;width:100%;position:relative;color:var(--cell-text-color)}.aform__field-label{color:var(--input-label-color);display:inline-block;position:absolute;padding:0 .25rem;margin:0rem;z-index:2;font-size:.7rem;font-weight:300;letter-spacing:.05rem;width:auto;box-sizing:border-box;background:#fff;margin:0;border:1px solid var(--input-border-color);grid-row:1;top:0;left:10px;border:none;transform:translateY(-50%)}p.error{display:block;display:inline-block;display:none;padding:0rem 0rem 0rem .5rem;margin:.5rem 0 .25rem 0rem;border:1px solid transparent;width:100%;width:auto;color:var(--brand-danger);font-size:.8rem;position:absolute;right:0;top:0;background:#fff;padding:.25rem;transform:translate(-1rem,-50%);margin:0}.aform__input-field:focus{border:1px solid var(--input-active-border-color)}.aform__input-field:focus+.aform__field-label{color:var(--input-active-label-color)}.aform__checkbox{cursor:pointer;width:auto}.aform__checkbox:checked{accent-color:var(--primary-color);border:1px solid black}.aform__checkbox-container{width:100%;display:inline-block;text-align:left}.aform__checkbox-container input{width:auto}.aform__checkbox-container:hover+.aform__field-label{color:var(--input-active-label-color)}.aform-primary-action{font-size:100%;text-align:center;min-height:2em;padding:.25rem 1rem;border:1px solid var(--primary-color);color:var(--primary-text-color);background-color:var(--primary-color);outline:2px solid var(--primary-text-color);transition:outline-offset .2s ease;font-size:var(--font-size);margin:.5ch}.aform-primary-action:hover,.aform-primary-action:active{outline:2px solid var(--primary-text-color);outline-offset:-4px;transition:outline-offset .2s ease}tr:focus{background-color:#add8e6;outline:auto}.atable{font-family:var(--atable-font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:var(--table-font-size);border-collapse:collapse}.row-index{color:var(--header-text-color);font-weight:700;text-align:center;-webkit-user-select:none;user-select:none;width:2ch}.expandable-row{border-top:1px solid var(--row-border-color);height:var(--atable-row-height);border-left:4px solid var(--row-border-color)}.expanded-row{border-bottom:1px solid var(--row-border-color);border-top:1px solid var(--row-border-color)}.expanded-row-content{border-bottom:1px solid var(--row-border-color);border-top:1px solid var(--row-border-color);padding:1.5rem}.atable__cell{border-radius:0;box-sizing:border-box;margin:0;outline:none;box-shadow:none;color:var(--cell-text-color);text-overflow:ellipsis;overflow:hidden;padding-left:.5ch!important;padding-right:.5ch;padding-top:var(--atable-row-padding);padding-bottom:var(--atable-row-padding);border-spacing:0px;border-collapse:collapse}.atable__cell:focus,.atable__cell:focus-within{background-color:var(--focus-cell-background);outline-width:2px;outline-style:solid;outline-color:var(--focus-cell-outline);box-shadow:none;min-height:1.15em;max-height:1.15em;overflow:hidden}.table-row{border-top:1px solid var(--row-border-color);height:var(--atable-row-height)}.list-index{color:var(--header-text-color);font-weight:700;padding-left:var(--atable-row-padding);padding-right:1em;text-align:center;-webkit-user-select:none;user-select:none;width:var(--8d411922);max-width:var(--8d411922)}.tree-index{color:var(--header-text-color);font-weight:700;text-align:center;-webkit-user-select:none;user-select:none;width:2ch}.atable #header-index{width:var(--8d411922);max-width:var(--8d411922)}.atable th{border-width:0px;border-style:solid;border-radius:0;padding-left:.5ch;padding-right:.5ch;padding-top:var(--atable-row-padding);padding-bottom:var(--atable-row-padding);color:var(--gray-60);height:var(--atable-row-height);font-weight:300;letter-spacing:.05rem}.atable th:focus{outline:none}.amodal{z-index:100;position:absolute;background-color:var(--row-color-zebra-dark)}.login-container{width:100%;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:var(--font-family)}.account-container{width:100%;margin-left:auto;margin-top:.5rem;margin-right:auto;display:flex;flex-direction:column;justify-content:center}.account-header{display:flex;flex-direction:column;text-align:center;margin-top:.5rem}#account-title{font-size:1.5rem;line-height:2rem;font-weight:600;letter-spacing:-.025em;margin:0}#account-subtitle{font-size:.875rem;line-height:1.25rem;margin:1rem}.login-form-container{display:grid;gap:.5rem}.login-form-element{display:grid;margin:.5rem 0}.login-field{padding:.5rem .25rem .25rem .5rem;outline:1px solid transparent;border:1px solid var(--input-border-color);border-radius:.25rem}.login-field:focus{border:1px solid black}.btn{background-color:var(--btn-color);color:var(--btn-label-color);border:1px solid var(--btn-border);margin:.5rem 0;padding:.25rem;position:relative;cursor:pointer}.btn:hover{background-color:var(--btn-hover)}.btn:disabled{background-color:light-dark(rgba(239,239,239,.3),rgba(59,59,59,.3));color:light-dark(rgb(84,84,84),rgb(170,170,170))}.disabled{opacity:.5}.loading-icon{animation:spin 1s linear infinite forwards;display:inline-block;margin-right:.2rem;line-height:0;font-size:1rem;position:relative;top:.2rem}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.adatepicker{font-size:var(--table-font-size);display:inline-table;color:var(--cell-text-color);outline:none;border-collapse:collapse}.adatepicker tr{height:1.15rem;text-align:center;vertical-align:middle}.adatepicker td{border:2px solid transparent;outline:2px solid transparent;min-width:3ch;max-width:3ch}.adatepicker td:focus,.adatepicker td:focus-within{outline:1px dashed black;box-shadow:none;min-height:1.15em;max-height:1.15em;overflow:hidden}.adatepicker .selectedDate{outline:1px solid black;background:var(--gray-20);font-weight:bolder}.adatepicker .todaysDate{font-weight:bolder;text-decoration:underline;color:#000}.days-header>td{font-weight:700}.prev-date{color:var(--gray-20)}.collapse-button[data-v-6f1c1b45]{width:2ch;min-width:calc(66px - 4ch);background-color:transparent;font-size:150%;text-align:center;border:none;margin-top:-.5rem}.rotated[data-v-6f1c1b45]{transform:rotate(45deg);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transition:transform .25s;transform-origin:center center}.unrotated[data-v-6f1c1b45]{transform:rotate(0);-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transition:transform .25s}[data-v-88047a70]:root{--primary-color: #0098c9;--primary-text-color: #ffffff;--brand-color: #202a44;--gray-5: #f2f2f2;--gray-10: #e6e6e6;--gray-20: #cccccc;--gray-50: #808080;--gray-60: #666666;--gray-80: #333333;--brand-danger: #e63c28;--brand-success: #155724;--row-color-zebra-light: #eeeeee;--row-color-zebra-dark: #dddddd;--focus-cell-background: #ffffff;--focus-cell-outline: #000000;--cell-border-color: #ffffff;--cell-text-color: #3a3c41;--active-cell-background: #ffffff;--active-cell-outline: #e6a92d;--row-border-color: var(--gray-20);--header-border-color: #ffffff;--header-text-color: var(--gray-20);--row-number-background-color: #ffffff;--input-border-color: var(--gray-20);--input-label-color: var(--gray-60);--input-active-border-color: #000000;--input-active-label-color: #000000;--required-border: #e63c28;--font-size: 10px;--font-family: Arimo, Arial, sans-serif;--table-font-size: 16px;--atable-font-family: "Arimo", sans-serif;--atable-row-padding: 0px;--atable-row-height: 1.5em;--btn-color: white;--btn-border: #cccccc;--btn-hover: #f2f2f2;--btn-label-color: black}.aform[data-v-88047a70]{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:baseline;padding:1rem;border:1px solid var(--gray-5);border-left:4px solid var(--gray-5);margin-bottom:1rem}.aform__form-element[data-v-88047a70]{min-width:30%;flex-basis:32%;border:1px solid transparent;padding:0;margin:0;margin-right:.5rem;margin-bottom:.5rem;display:grid;position:relative;margin:.5rem 0}.aform__input-field[data-v-88047a70]{outline:1px solid transparent;border:1px solid var(--input-border-color);font-size:1rem;padding:.5rem .25rem .25rem .5rem;margin:0;border-radius:0;box-sizing:border-box;width:100%;position:relative;color:var(--cell-text-color)}.aform__field-label[data-v-88047a70]{color:var(--input-label-color);display:inline-block;position:absolute;padding:0 .25rem;margin:0rem;z-index:2;font-size:.7rem;font-weight:300;letter-spacing:.05rem;width:auto;box-sizing:border-box;background:#fff;margin:0;border:1px solid var(--input-border-color);grid-row:1;top:0;left:10px;border:none;transform:translateY(-50%)}p.error[data-v-88047a70]{display:block;display:inline-block;display:none;padding:0rem 0rem 0rem .5rem;margin:.5rem 0 .25rem 0rem;border:1px solid transparent;width:100%;width:auto;color:var(--brand-danger);font-size:.8rem;position:absolute;right:0;top:0;background:#fff;padding:.25rem;transform:translate(-1rem,-50%);margin:0}.aform__input-field[data-v-88047a70]:focus{border:1px solid var(--input-active-border-color)}.aform__input-field:focus+.aform__field-label[data-v-88047a70]{color:var(--input-active-label-color)}.aform__checkbox[data-v-88047a70]{cursor:pointer;width:auto}.aform__checkbox[data-v-88047a70]:checked{accent-color:var(--primary-color);border:1px solid black}.aform__checkbox-container[data-v-88047a70]{width:100%;display:inline-block;text-align:left}.aform__checkbox-container input[data-v-88047a70]{width:auto}.aform__checkbox-container:hover+.aform__field-label[data-v-88047a70]{color:var(--input-active-label-color)}.aform-primary-action[data-v-88047a70]{font-size:100%;text-align:center;min-height:2em;padding:.25rem 1rem;border:1px solid var(--primary-color);color:var(--primary-text-color);background-color:var(--primary-color);outline:2px solid var(--primary-text-color);transition:outline-offset .2s ease;font-size:var(--font-size);margin:.5ch}.aform-primary-action[data-v-88047a70]:hover,.aform-primary-action[data-v-88047a70]:active{outline:2px solid var(--primary-text-color);outline-offset:-4px;transition:outline-offset .2s ease}tr[data-v-88047a70]:focus{background-color:#add8e6;outline:auto}.atable[data-v-88047a70]{font-family:var(--atable-font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:var(--table-font-size);border-collapse:collapse}.row-index[data-v-88047a70]{color:var(--header-text-color);font-weight:700;text-align:center;-webkit-user-select:none;user-select:none;width:2ch}.expandable-row[data-v-88047a70]{border-top:1px solid var(--row-border-color);height:var(--atable-row-height);border-left:4px solid var(--row-border-color)}.expanded-row[data-v-88047a70]{border-bottom:1px solid var(--row-border-color);border-top:1px solid var(--row-border-color)}.expanded-row-content[data-v-88047a70]{border-bottom:1px solid var(--row-border-color);border-top:1px solid var(--row-border-color);padding:1.5rem}.atable__cell[data-v-88047a70]{border-radius:0;box-sizing:border-box;margin:0;outline:none;box-shadow:none;color:var(--cell-text-color);text-overflow:ellipsis;overflow:hidden;padding-left:.5ch!important;padding-right:.5ch;padding-top:var(--atable-row-padding);padding-bottom:var(--atable-row-padding);border-spacing:0px;border-collapse:collapse}.atable__cell[data-v-88047a70]:focus,.atable__cell[data-v-88047a70]:focus-within{background-color:var(--focus-cell-background);outline-width:2px;outline-style:solid;outline-color:var(--focus-cell-outline);box-shadow:none;min-height:1.15em;max-height:1.15em;overflow:hidden}.table-row[data-v-88047a70]{border-top:1px solid var(--row-border-color);height:var(--atable-row-height)}.list-index[data-v-88047a70]{color:var(--header-text-color);font-weight:700;padding-left:var(--atable-row-padding);padding-right:1em;text-align:center;-webkit-user-select:none;user-select:none;width:var(--39e98c31);max-width:var(--39e98c31)}.tree-index[data-v-88047a70]{color:var(--header-text-color);font-weight:700;text-align:center;-webkit-user-select:none;user-select:none;width:2ch}.atable #header-index[data-v-88047a70]{width:var(--39e98c31);max-width:var(--39e98c31)}.atable th[data-v-88047a70]{border-width:0px;border-style:solid;border-radius:0;padding-left:.5ch;padding-right:.5ch;padding-top:var(--atable-row-padding);padding-bottom:var(--atable-row-padding);color:var(--gray-60);height:var(--atable-row-height);font-weight:300;letter-spacing:.05rem}.atable th[data-v-88047a70]:focus{outline:none}.amodal[data-v-88047a70]{z-index:100;position:absolute;background-color:var(--row-color-zebra-dark)}.login-container[data-v-88047a70]{width:100%;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:var(--font-family)}.account-container[data-v-88047a70]{width:100%;margin-left:auto;margin-top:.5rem;margin-right:auto;display:flex;flex-direction:column;justify-content:center}.account-header[data-v-88047a70]{display:flex;flex-direction:column;text-align:center;margin-top:.5rem}#account-title[data-v-88047a70]{font-size:1.5rem;line-height:2rem;font-weight:600;letter-spacing:-.025em;margin:0}#account-subtitle[data-v-88047a70]{font-size:.875rem;line-height:1.25rem;margin:1rem}.login-form-container[data-v-88047a70]{display:grid;gap:.5rem}.login-form-element[data-v-88047a70]{display:grid;margin:.5rem 0}.login-field[data-v-88047a70]{padding:.5rem .25rem .25rem .5rem;outline:1px solid transparent;border:1px solid var(--input-border-color);border-radius:.25rem}.login-field[data-v-88047a70][data-v-88047a70]:focus{border:1px solid black}.btn[data-v-88047a70]{background-color:var(--btn-color);color:var(--btn-label-color);border:1px solid var(--btn-border);margin:.5rem 0;padding:.25rem;position:relative;cursor:pointer}.btn[data-v-88047a70][data-v-88047a70]:hover{background-color:var(--btn-hover)}.btn[data-v-88047a70][data-v-88047a70]:disabled{background-color:light-dark(rgba(239,239,239,.3),rgba(59,59,59,.3));color:light-dark(rgb(84,84,84),rgb(170,170,170))}.disabled[data-v-88047a70]{opacity:.5}.loading-icon[data-v-88047a70]{animation:spin-88047a70 1s linear infinite forwards;display:inline-block;margin-right:.2rem;line-height:0;font-size:1rem;position:relative;top:.2rem}@keyframes spin-88047a70{0%{transform:rotate(0)}to{transform:rotate(360deg)}}fieldset[data-v-0f671e32]{max-width:100%;width:100%;margin-right:2ch;border:1px solid transparent;border-bottom:1px solid var(--gray-50)}legend[data-v-0f671e32]{width:100%;height:1.15rem;border:1px solid transparent;padding-bottom:.5rem;font-size:110%;font-weight:600;-webkit-user-select:none;user-select:none}.collapse-button[data-v-0f671e32]{float:right}
1
+ @import"https://fonts.googleapis.com/css2?family=Arimo:ital,wght@0,400..700;1,400..700&display=swap";@import"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200";div[data-v-69d0f23d]{min-width:40ch;border:1px solid transparent;padding:0rem;margin:0rem;margin-right:1ch}input[data-v-69d0f23d]{width:calc(100% - 1ch);outline:1px solid transparent;border:1px solid var(--input-border-color);padding:1ch .5ch .5ch 1ch;margin:.575rem 0 0;min-height:1.15rem;border-radius:.25rem}p[data-v-69d0f23d],label[data-v-69d0f23d]{color:var(--input-label-color);display:block;min-height:1.15rem;padding:0rem;margin:0rem 0rem .25rem;border:1px solid transparent}p[data-v-69d0f23d]{width:100%;color:red;font-size:85%}label[data-v-69d0f23d]{z-index:2;font-size:80%;position:absolute;background:#fff;margin:-2.575rem 0 0 1ch;padding:0 .25ch}input[data-v-69d0f23d]:focus{border:1px solid var(--input-active-border-color)}input:focus+label[data-v-69d0f23d]{color:var(--input-active-label-color)}.autocomplete{position:relative}.input-wrapper{min-width:40ch;border:1px solid transparent;padding:0rem;margin:0rem;margin-right:1ch}input{width:calc(100% - 1ch);outline:1px solid transparent;border:1px solid var(--input-border-color);padding:1ch .5ch .5ch 1ch;margin:.575rem 0 0;min-height:1.15rem;border-radius:.25rem}input:focus{border:1px solid var(--input-active-border-color);border-radius:.25rem .25rem 0 0;border-bottom:none}label{display:block;min-height:1.15rem;padding:0rem;margin:0rem 0rem .25rem;border:1px solid transparent;z-index:2;font-size:80%;position:absolute;background:#fff;margin:-2.575rem 0 0 1ch;padding:0 .25ch}.autocomplete-results{position:absolute;width:calc(100% - 1ch + 1.5px);z-index:1;padding:0;margin:0;color:#000;border:1px solid var(--input-active-border-color);border-radius:0 0 .25rem .25rem;border-top:none}.autocomplete-result{list-style:none;text-align:left;padding:4px 6px;cursor:pointer}.autocomplete-result.is-active,.autocomplete-result:hover{background-color:var(--row-color-zebra-light);color:#000}.list-index{color:var(--header-text-color);font-weight:700;padding-left:var(--atable-row-padding);padding-right:1em;text-align:center;-webkit-user-select:none;user-select:none;width:var(--8d411922);max-width:var(--8d411922)}.atable #header-index{width:var(--8d411922);max-width:var(--8d411922)}.adatepicker{font-size:var(--table-font-size);display:inline-table;color:var(--cell-text-color);outline:none;border-collapse:collapse}.adatepicker tr{height:1.15rem;text-align:center;vertical-align:middle}.adatepicker td{border:2px solid transparent;outline:2px solid transparent;min-width:3ch;max-width:3ch}.adatepicker td:focus,.adatepicker td:focus-within{outline:1px dashed black;box-shadow:none;min-height:1.15em;max-height:1.15em;overflow:hidden}.adatepicker .selectedDate{outline:1px solid black;background:var(--gray-20);font-weight:bolder}.adatepicker .todaysDate{font-weight:bolder;text-decoration:underline;color:#000}.days-header>td{font-weight:700}.prev-date{color:var(--gray-20)}.collapse-button[data-v-6f1c1b45]{width:2ch;min-width:calc(66px - 4ch);background-color:transparent;font-size:150%;text-align:center;border:none;margin-top:-.5rem}.rotated[data-v-6f1c1b45]{transform:rotate(45deg);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transition:transform .25s;transform-origin:center center}.unrotated[data-v-6f1c1b45]{transform:rotate(0);-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transition:transform .25s}[data-v-dc1a868d]:root{--primary-color: #0098c9;--primary-text-color: #ffffff;--brand-color: #202a44;--gray-5: #f2f2f2;--gray-10: #e6e6e6;--gray-20: #cccccc;--gray-50: #808080;--gray-60: #666666;--gray-80: #333333;--brand-danger: #e63c28;--brand-success: #155724;--row-color-zebra-light: #eeeeee;--row-color-zebra-dark: #dddddd;--focus-cell-background: #ffffff;--focus-cell-outline: #000000;--cell-border-color: #ffffff;--cell-text-color: #3a3c41;--active-cell-background: #ffffff;--active-cell-outline: #e6a92d;--row-border-color: var(--gray-20);--header-border-color: #ffffff;--header-text-color: var(--gray-20);--row-number-background-color: #ffffff;--input-border-color: var(--gray-20);--input-label-color: var(--gray-60);--input-active-border-color: #000000;--input-active-label-color: #000000;--required-border: #e63c28;--font-size: 10px;--font-family: Arimo, Arial, sans-serif;--table-font-size: 16px;--atable-font-family: "Arimo", sans-serif;--atable-row-padding: 0px;--atable-row-height: 1.5em;--btn-color: white;--btn-border: #cccccc;--btn-hover: #f2f2f2;--btn-label-color: black}.aform[data-v-dc1a868d]{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:baseline;padding:1rem;border:1px solid var(--gray-5);border-left:4px solid var(--gray-5);margin-bottom:1rem}.aform__form-element[data-v-dc1a868d]{min-width:30%;flex-basis:32%;border:1px solid transparent;padding:0;margin:0;margin-right:.5rem;margin-bottom:.5rem;display:grid;position:relative;margin:.5rem 0}.aform__input-field[data-v-dc1a868d]{outline:1px solid transparent;border:1px solid var(--input-border-color);font-size:1rem;padding:.5rem .25rem .25rem .5rem;margin:0;border-radius:0;box-sizing:border-box;width:100%;position:relative;color:var(--cell-text-color)}.aform__field-label[data-v-dc1a868d]{color:var(--input-label-color);display:inline-block;position:absolute;padding:0 .25rem;margin:0rem;z-index:2;font-size:.7rem;font-weight:300;letter-spacing:.05rem;width:auto;box-sizing:border-box;background:#fff;margin:0;border:1px solid var(--input-border-color);grid-row:1;top:0;left:10px;border:none;transform:translateY(-50%)}p.error[data-v-dc1a868d]{display:block;display:inline-block;display:none;padding:0rem 0rem 0rem .5rem;margin:.5rem 0 .25rem 0rem;border:1px solid transparent;width:100%;width:auto;color:var(--brand-danger);font-size:.8rem;position:absolute;right:0;top:0;background:#fff;padding:.25rem;transform:translate(-1rem,-50%);margin:0}.aform__input-field[data-v-dc1a868d]:focus{border:1px solid var(--input-active-border-color)}.aform__input-field:focus+.aform__field-label[data-v-dc1a868d]{color:var(--input-active-label-color)}.aform__checkbox[data-v-dc1a868d]{cursor:pointer;width:auto}.aform__checkbox[data-v-dc1a868d]:checked{accent-color:var(--primary-color);border:1px solid black}.aform__checkbox-container[data-v-dc1a868d]{width:100%;display:inline-block;text-align:left}.aform__checkbox-container input[data-v-dc1a868d]{width:auto}.aform__checkbox-container:hover+.aform__field-label[data-v-dc1a868d]{color:var(--input-active-label-color)}.aform-primary-action[data-v-dc1a868d]{font-size:100%;text-align:center;min-height:2em;padding:.25rem 1rem;border:1px solid var(--primary-color);color:var(--primary-text-color);background-color:var(--primary-color);outline:2px solid var(--primary-text-color);transition:outline-offset .2s ease;font-size:var(--font-size);margin:.5ch}.aform-primary-action[data-v-dc1a868d]:hover,.aform-primary-action[data-v-dc1a868d]:active{outline:2px solid var(--primary-text-color);outline-offset:-4px;transition:outline-offset .2s ease}tr[data-v-dc1a868d]:focus{background-color:#add8e6;outline:auto}.atable[data-v-dc1a868d]{font-family:var(--atable-font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:var(--table-font-size);border-collapse:collapse}.row-index[data-v-dc1a868d]{color:var(--header-text-color);font-weight:700;text-align:center;-webkit-user-select:none;user-select:none;width:2ch}.expandable-row[data-v-dc1a868d]{border-top:1px solid var(--row-border-color);height:var(--atable-row-height);border-left:4px solid var(--row-border-color)}.expanded-row[data-v-dc1a868d]{border-bottom:1px solid var(--row-border-color);border-top:1px solid var(--row-border-color)}.expanded-row-content[data-v-dc1a868d]{border-bottom:1px solid var(--row-border-color);border-top:1px solid var(--row-border-color);padding:1.5rem}.atable__cell[data-v-dc1a868d]{border-radius:0;box-sizing:border-box;margin:0;outline:none;box-shadow:none;color:var(--cell-text-color);text-overflow:ellipsis;overflow:hidden;padding-left:.5ch!important;padding-right:.5ch;padding-top:var(--atable-row-padding);padding-bottom:var(--atable-row-padding);border-spacing:0px;border-collapse:collapse}.atable__cell[data-v-dc1a868d]:focus,.atable__cell[data-v-dc1a868d]:focus-within{background-color:var(--focus-cell-background);outline-width:2px;outline-style:solid;outline-color:var(--focus-cell-outline);box-shadow:none;min-height:1.15em;max-height:1.15em;overflow:hidden}.table-row[data-v-dc1a868d]{border-top:1px solid var(--row-border-color);height:var(--atable-row-height)}.list-index[data-v-dc1a868d]{color:var(--header-text-color);font-weight:700;padding-left:var(--atable-row-padding);padding-right:1em;text-align:center;-webkit-user-select:none;user-select:none;width:var(--41022003);max-width:var(--41022003)}.tree-index[data-v-dc1a868d]{color:var(--header-text-color);font-weight:700;text-align:center;-webkit-user-select:none;user-select:none;width:2ch}.atable #header-index[data-v-dc1a868d]{width:var(--41022003);max-width:var(--41022003)}.atable th[data-v-dc1a868d]{border-width:0px;border-style:solid;border-radius:0;padding-left:.5ch;padding-right:.5ch;padding-top:var(--atable-row-padding);padding-bottom:var(--atable-row-padding);color:var(--gray-60);height:var(--atable-row-height);font-weight:300;letter-spacing:.05rem}.atable th[data-v-dc1a868d]:focus{outline:none}.amodal[data-v-dc1a868d]{z-index:100;position:absolute;background-color:var(--row-color-zebra-dark)}.login-container[data-v-dc1a868d]{width:100%;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:var(--font-family)}.account-container[data-v-dc1a868d]{width:100%;margin-left:auto;margin-top:.5rem;margin-right:auto;display:flex;flex-direction:column;justify-content:center}.account-header[data-v-dc1a868d]{display:flex;flex-direction:column;text-align:center;margin-top:.5rem}#account-title[data-v-dc1a868d]{font-size:1.5rem;line-height:2rem;font-weight:600;letter-spacing:-.025em;margin:0}#account-subtitle[data-v-dc1a868d]{font-size:.875rem;line-height:1.25rem;margin:1rem}.login-form-container[data-v-dc1a868d]{display:grid;gap:.5rem}.login-form-element[data-v-dc1a868d]{display:grid;margin:.5rem 0}.login-field[data-v-dc1a868d]{padding:.5rem .25rem .25rem .5rem;outline:1px solid transparent;border:1px solid var(--input-border-color);border-radius:.25rem}.login-field[data-v-dc1a868d][data-v-dc1a868d]:focus{border:1px solid black}.btn[data-v-dc1a868d]{background-color:var(--btn-color);color:var(--btn-label-color);border:1px solid var(--btn-border);margin:.5rem 0;padding:.25rem;position:relative;cursor:pointer}.btn[data-v-dc1a868d][data-v-dc1a868d]:hover{background-color:var(--btn-hover)}.btn[data-v-dc1a868d][data-v-dc1a868d]:disabled{background-color:light-dark(rgba(239,239,239,.3),rgba(59,59,59,.3));color:light-dark(rgb(84,84,84),rgb(170,170,170))}.disabled[data-v-dc1a868d]{opacity:.5}.loading-icon[data-v-dc1a868d]{animation:spin-dc1a868d 1s linear infinite forwards;display:inline-block;margin-right:.2rem;line-height:0;font-size:1rem;position:relative;top:.2rem}@keyframes spin-dc1a868d{0%{transform:rotate(0)}to{transform:rotate(360deg)}}fieldset[data-v-b89db0c0]{max-width:100%;width:100%;margin-right:2ch;border:1px solid transparent;border-bottom:1px solid var(--gray-50)}legend[data-v-b89db0c0]{width:100%;height:1.15rem;border:1px solid transparent;padding-bottom:.5rem;font-size:110%;font-weight:600;-webkit-user-select:none;user-select:none}.collapse-button[data-v-b89db0c0]{float:right}:root{--primary-color: #0098c9;--primary-text-color: #ffffff;--brand-color: #202a44;--gray-5: #f2f2f2;--gray-10: #e6e6e6;--gray-20: #cccccc;--gray-50: #808080;--gray-60: #666666;--gray-80: #333333;--brand-danger: #e63c28;--brand-success: #155724;--row-color-zebra-light: #eeeeee;--row-color-zebra-dark: #dddddd;--focus-cell-background: #ffffff;--focus-cell-outline: #000000;--cell-border-color: #ffffff;--cell-text-color: #3a3c41;--active-cell-background: #ffffff;--active-cell-outline: #e6a92d;--row-border-color: var(--gray-20);--header-border-color: #ffffff;--header-text-color: var(--gray-20);--row-number-background-color: #ffffff;--input-border-color: var(--gray-20);--input-label-color: var(--gray-60);--input-active-border-color: #000000;--input-active-label-color: #000000;--required-border: #e63c28;--font-size: 10px;--font-family: Arimo, Arial, sans-serif;--table-font-size: 16px;--atable-font-family: "Arimo", sans-serif;--atable-row-padding: 0px;--atable-row-height: 1.5em;--btn-color: white;--btn-border: #cccccc;--btn-hover: #f2f2f2;--btn-label-color: black}.aform{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:baseline;padding:1rem;border:1px solid var(--gray-5);border-left:4px solid var(--gray-5);margin-bottom:1rem}.aform__form-element{min-width:30%;flex-basis:32%;border:1px solid transparent;padding:0;margin:0;margin-right:.5rem;margin-bottom:.5rem;display:grid;position:relative;margin:.5rem 0}.aform__input-field{outline:1px solid transparent;border:1px solid var(--input-border-color);font-size:1rem;padding:.5rem .25rem .25rem .5rem;margin:0;border-radius:0;box-sizing:border-box;width:100%;position:relative;color:var(--cell-text-color)}.aform__field-label{color:var(--input-label-color);display:inline-block;position:absolute;padding:0 .25rem;margin:0rem;z-index:2;font-size:.7rem;font-weight:300;letter-spacing:.05rem;width:auto;box-sizing:border-box;background:#fff;margin:0;border:1px solid var(--input-border-color);grid-row:1;top:0;left:10px;border:none;transform:translateY(-50%)}p.error{display:block;display:inline-block;display:none;padding:0rem 0rem 0rem .5rem;margin:.5rem 0 .25rem 0rem;border:1px solid transparent;width:100%;width:auto;color:var(--brand-danger);font-size:.8rem;position:absolute;right:0;top:0;background:#fff;padding:.25rem;transform:translate(-1rem,-50%);margin:0}.aform__input-field:focus{border:1px solid var(--input-active-border-color)}.aform__input-field:focus+.aform__field-label{color:var(--input-active-label-color)}.aform__checkbox{cursor:pointer;width:auto}.aform__checkbox:checked{accent-color:var(--primary-color);border:1px solid black}.aform__checkbox-container{width:100%;display:inline-block;text-align:left}.aform__checkbox-container input{width:auto}.aform__checkbox-container:hover+.aform__field-label{color:var(--input-active-label-color)}.aform-primary-action{font-size:100%;text-align:center;min-height:2em;padding:.25rem 1rem;border:1px solid var(--primary-color);color:var(--primary-text-color);background-color:var(--primary-color);outline:2px solid var(--primary-text-color);transition:outline-offset .2s ease;font-size:var(--font-size);margin:.5ch}.aform-primary-action:hover,.aform-primary-action:active{outline:2px solid var(--primary-text-color);outline-offset:-4px;transition:outline-offset .2s ease}tr:focus{background-color:#add8e6;outline:auto}.atable{font-family:var(--atable-font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:var(--table-font-size);border-collapse:collapse}.row-index{color:var(--header-text-color);font-weight:700;text-align:center;-webkit-user-select:none;user-select:none;width:2ch}.expandable-row{border-top:1px solid var(--row-border-color);height:var(--atable-row-height);border-left:4px solid var(--row-border-color)}.expanded-row{border-bottom:1px solid var(--row-border-color);border-top:1px solid var(--row-border-color)}.expanded-row-content{border-bottom:1px solid var(--row-border-color);border-top:1px solid var(--row-border-color);padding:1.5rem}.atable__cell{border-radius:0;box-sizing:border-box;margin:0;outline:none;box-shadow:none;color:var(--cell-text-color);text-overflow:ellipsis;overflow:hidden;padding-left:.5ch!important;padding-right:.5ch;padding-top:var(--atable-row-padding);padding-bottom:var(--atable-row-padding);border-spacing:0px;border-collapse:collapse}.atable__cell:focus,.atable__cell:focus-within{background-color:var(--focus-cell-background);outline-width:2px;outline-style:solid;outline-color:var(--focus-cell-outline);box-shadow:none;min-height:1.15em;max-height:1.15em;overflow:hidden}.table-row{border-top:1px solid var(--row-border-color);height:var(--atable-row-height)}.list-index{color:var(--header-text-color);font-weight:700;padding-left:var(--atable-row-padding);padding-right:1em;text-align:center;-webkit-user-select:none;user-select:none;width:var(--2c72df0d);max-width:var(--2c72df0d)}.tree-index{color:var(--header-text-color);font-weight:700;text-align:center;-webkit-user-select:none;user-select:none;width:2ch}.atable #header-index{width:var(--2c72df0d);max-width:var(--2c72df0d)}.atable th{border-width:0px;border-style:solid;border-radius:0;padding-left:.5ch;padding-right:.5ch;padding-top:var(--atable-row-padding);padding-bottom:var(--atable-row-padding);color:var(--gray-60);height:var(--atable-row-height);font-weight:300;letter-spacing:.05rem}.atable th:focus{outline:none}.amodal{z-index:100;position:absolute;background-color:var(--row-color-zebra-dark)}.login-container{width:100%;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:var(--font-family)}.account-container{width:100%;margin-left:auto;margin-top:.5rem;margin-right:auto;display:flex;flex-direction:column;justify-content:center}.account-header{display:flex;flex-direction:column;text-align:center;margin-top:.5rem}#account-title{font-size:1.5rem;line-height:2rem;font-weight:600;letter-spacing:-.025em;margin:0}#account-subtitle{font-size:.875rem;line-height:1.25rem;margin:1rem}.login-form-container{display:grid;gap:.5rem}.login-form-element{display:grid;margin:.5rem 0}.login-field{padding:.5rem .25rem .25rem .5rem;outline:1px solid transparent;border:1px solid var(--input-border-color);border-radius:.25rem}.login-field:focus{border:1px solid black}.btn{background-color:var(--btn-color);color:var(--btn-label-color);border:1px solid var(--btn-border);margin:.5rem 0;padding:.25rem;position:relative;cursor:pointer}.btn:hover{background-color:var(--btn-hover)}.btn:disabled{background-color:light-dark(rgba(239,239,239,.3),rgba(59,59,59,.3));color:light-dark(rgb(84,84,84),rgb(170,170,170))}.disabled{opacity:.5}.loading-icon{animation:spin 1s linear infinite forwards;display:inline-block;margin-right:.2rem;line-height:0;font-size:1rem;position:relative;top:.2rem}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}
File without changes