@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.
- package/dist/aform/src/tsdoc-metadata.json +11 -0
- package/dist/aform.d.ts +55 -0
- package/dist/aform.js +477 -354
- package/dist/aform.js.map +1 -1
- package/dist/aform.tsbuildinfo +1 -0
- package/dist/aform.umd.cjs +1 -1
- package/dist/aform.umd.cjs.map +1 -1
- package/dist/directives/mask.js +88 -0
- package/dist/index.js +31 -0
- package/dist/src/directives/mask.d.ts +3 -0
- package/dist/src/directives/mask.d.ts.map +1 -0
- package/dist/src/index.d.ts +20 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/types/index.d.ts +27 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/style.css +1 -1
- package/dist/types/index.js +0 -0
- package/package.json +24 -27
- package/src/components/AForm.vue +2 -1
- package/src/components/form/ACheckbox.vue +7 -1
- package/src/components/form/ADropdown.vue +1 -1
- package/src/components/form/AFieldset.vue +1 -1
- package/src/components/form/ANumericInput.vue +7 -1
- package/src/components/form/ATextInput.vue +2 -2
- package/src/directives/mask.ts +2 -1
- package/src/index.ts +20 -1
- package/src/theme/aform.css +1 -1
- package/src/theme/fields.css +34 -35
- package/src/theme/login.css +0 -2
- package/src/types/index.ts +31 -0
- package/src/histoire.setup.ts +0 -26
package/dist/aform.umd.cjs.map
CHANGED
|
@@ -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: ' ' }),\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: ' ' }),\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\"><</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\">></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: ' ' }),\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: ' ' }),\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: ' ' }),\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: ' ' }),\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\"><</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\">></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: ' ' }),\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: ' ' }),\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 @@
|
|
|
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
|