admins-components 9.0.70 → 9.0.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components85.js","names":[],"sources":["../src/components/data-table/DataSort.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type SortDirection = 'asc' | 'desc'\n\nexport interface DataSortOption {\n value: string\n label: string\n icon?: string\n}\n\nexport interface DataSortProps {\n modelValue: { key: string; direction: SortDirection } | null\n options: DataSortOption[]\n placeholder?: string\n handleUrl?: boolean\n disabled?: boolean\n}\n\nexport function getDefaultSort(): { key: string; direction: SortDirection } | null {\n if (typeof window === 'undefined') return null\n const params = new URLSearchParams(window.location.search)\n const key = params.get('sortBy')\n const dir = params.get('sortDir')\n if (key && (dir === 'asc' || dir === 'desc')) {\n return { key, direction: dir }\n }\n return null\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport DropdownSelect from '@/components/DropdownSelect.vue'\nimport { useDropdownAnchor } from '@/composables/useDropdownAnchor'\nimport { writeUrlOrRemove } from '@/utils/url'\nimport Button from '../Button.vue'\n\nconst props = withDefaults(defineProps<DataSortProps>(), {\n placeholder: 'Rendezés...',\n handleUrl: false,\n disabled: false\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [sort: { key: string; direction: SortDirection } | null]\n 'sort-change': [sort: { key: string; direction: SortDirection } | null]\n}>()\n\nconst wrapperRef = ref<HTMLElement | null>(null)\nconst dropdownRef = ref<HTMLElement | null>(null)\nconst { isOpen, dropdownStyle } = useDropdownAnchor(wrapperRef, dropdownRef, {\n extraStyle: (rect) => ({ minWidth: `${Math.max(rect.width, 240)}px` }),\n closeOnScroll: true,\n})\n\nconst sortBy = computed<string | string[] | null>({\n get: () => props.modelValue?.key ?? null,\n set: (v) => {\n if (Array.isArray(v)) return\n emitChange(v, props.modelValue?.direction ?? 'asc')\n },\n})\n\nconst direction = computed<SortDirection>({\n get: () => props.modelValue?.direction ?? 'asc',\n set: (d) => emitChange(props.modelValue?.key ?? null, d),\n})\n\nconst activeLabel = computed(() => {\n if (!props.modelValue) return props.placeholder\n const opt = props.options.find((o) => o.value === props.modelValue!.key)\n const label = opt?.label ?? props.modelValue.key\n return `${label} (${props.modelValue.direction === 'asc' ? 'növekvő' : 'csökkenő'})`\n})\n\nfunction emitChange(key: string | null, dir: SortDirection) {\n if (key == null) {\n if (props.handleUrl) {\n writeUrlOrRemove('sortBy', null, { handleUrl: true })\n writeUrlOrRemove('sortDir', null, { handleUrl: true })\n }\n emit('update:modelValue', null)\n emit('sort-change', null)\n return\n }\n if (props.handleUrl) {\n writeUrlOrRemove('sortBy', key, { handleUrl: true })\n writeUrlOrRemove('sortDir', dir, { handleUrl: true, default: 'asc' })\n }\n const next = { key, direction: dir }\n emit('update:modelValue', next)\n emit('sort-change', next)\n}\n\nfunction clear() {\n emitChange(null, 'asc')\n isOpen.value = false\n}\n\n// Read initial state from URL on mount when handleUrl is true and modelValue is empty.\nwatch(\n isOpen,\n (open) => {\n if (!open || !props.handleUrl || props.modelValue) return\n const sort = getDefaultSort()\n if (sort) emitChange(sort.key, sort.direction)\n },\n { immediate: true },\n)\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"wrapperRef\" class=\"ds-sort-wrapper\">\n <button\n type=\"button\"\n class=\"c-btn ds-sort-trigger lh-1\"\n :class=\"[modelValue && 'is-active', disabled && 'is-disabled', isOpen && 'is-open']\"\n :disabled=\"disabled\"\n :aria-label=\"`Rendezés: ${activeLabel}`\"\n @click=\"isOpen = !isOpen\"\n >\n <i\n class=\"fa-solid fa-fw\"\n :class=\"\n !modelValue || modelValue.direction === 'asc'\n ? 'fa-arrow-up-wide-short'\n : 'fa-arrow-down-wide-short'\n \"\n ></i>\n <span class=\"ds-sort-label c-truncate\">{{ activeLabel }}</span>\n <button\n v-if=\"modelValue\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--clear ds-sort-clear\"\n aria-label=\"Rendezés törlése\"\n title=\"Rendezés törlése\"\n @click.stop=\"clear\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n <span\n class=\"c-icon-btn c-icon-btn--chevron\"\n :class=\"{ 'c-icon-btn--chevron-open': isOpen }\"\n >\n <i class=\"fa-solid fa-fw fa-chevron-down\"></i>\n </span>\n </button>\n\n <Teleport to=\"body\">\n <div class=\"ac-component\">\n <div v-if=\"isOpen\" ref=\"dropdownRef\" class=\"ds-sort-panel\" :style=\"dropdownStyle\">\n\n <div class=\"ds-sort-panel__row\">\n <label class=\"ds-sort-panel__label\">Oszlop</label>\n <DropdownSelect\n :model-value=\"sortBy\"\n :options=\"options\"\n :config=\"{\n clearable: false,\n placeholder: 'Válassz oszlopot...',\n filterable: false,\n }\"\n @update:model-value=\"(v) => (sortBy = v)\"\n />\n </div>\n\n <div class=\"ds-sort-panel__row\">\n <span class=\"ds-sort-panel__label\">Irány</span>\n <div class=\"ds-sort-direction\" role=\"group\" aria-label=\"Rendezés iránya\">\n <button\n type=\"button\"\n class=\"ds-sort-direction__btn\"\n :class=\"{ 'is-active': direction === 'asc' }\"\n :aria-pressed=\"direction === 'asc'\"\n aria-label=\"Növekvő\"\n @click=\"direction = 'asc'\"\n >\n <i class=\"fa-solid fa-fw fa-arrow-up-wide-short\"></i>\n <span>Növekvő</span>\n </button>\n <button\n type=\"button\"\n class=\"ds-sort-direction__btn dir-desc\"\n :class=\"{ 'is-active': direction === 'desc' }\"\n :aria-pressed=\"direction === 'desc'\"\n aria-label=\"Csökkenő\"\n @click=\"direction = 'desc'\"\n >\n <i class=\"fa-solid fa-fw fa-arrow-down-wide-short\"></i>\n <span>Csökkenő</span>\n </button>\n </div>\n </div>\n\n <div class=\"ds-sort-panel__footer\">\n <Button label=\"Rendben\" outline size=\"small\" @click=\"isOpen = false\" />\n </div>\n </div>\n </div>\n </Teleport>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-sort.scss\"></style>\n"],"mappings":""}
1
+ {"version":3,"file":"admins-components85.js","names":[],"sources":["../src/components/data-table/DataSort.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type SortDirection = 'asc' | 'desc'\n\nexport interface DataSortOption {\n value: string\n label: string\n icon?: string\n}\n\nexport interface DataSortProps {\n modelValue: { key: string; direction: SortDirection } | null\n options: DataSortOption[]\n placeholder?: string\n handleUrl?: boolean\n disabled?: boolean\n}\n\nexport function getDefaultSort(): { key: string; direction: SortDirection } | null {\n if (typeof window === 'undefined') return null\n const params = new URLSearchParams(window.location.search)\n const key = params.get('sortBy')\n const dir = params.get('sortDir')\n if (key && (dir === 'asc' || dir === 'desc')) {\n return { key, direction: dir }\n }\n return null\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport DropdownSelect, { type DropdownOption } from '@/components/DropdownSelect.vue'\nimport { useDropdownAnchor } from '@/composables/useDropdownAnchor'\nimport { writeUrlOrRemove } from '@/utils/url'\nimport Button from '../Button.vue'\n\nconst props = withDefaults(defineProps<DataSortProps>(), {\n placeholder: 'Rendezés...',\n handleUrl: false,\n disabled: false\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [sort: { key: string; direction: SortDirection } | null]\n 'sort-change': [sort: { key: string; direction: SortDirection } | null]\n}>()\n\nconst wrapperRef = ref<HTMLElement | null>(null)\nconst dropdownRef = ref<HTMLElement | null>(null)\nconst { isOpen, dropdownStyle } = useDropdownAnchor(wrapperRef, dropdownRef, {\n extraStyle: (rect) => ({ minWidth: `${Math.max(rect.width, 240)}px` }),\n closeOnScroll: true,\n})\n\nconst sortBy = computed<DropdownOption | DropdownOption[] | null>({\n get: () => {\n const key = props.modelValue?.key\n if (!key) return null\n const opt = props.options.find((o) => o.value === key)\n return opt ?? { value: key, label: key }\n },\n set: (v) => {\n if (v == null) {\n emitChange(null, props.modelValue?.direction ?? 'asc')\n return\n }\n if (Array.isArray(v)) return\n emitChange(v.value ?? null, props.modelValue?.direction ?? 'asc')\n },\n})\n\nconst direction = computed<SortDirection>({\n get: () => props.modelValue?.direction ?? 'asc',\n set: (d) => emitChange(props.modelValue?.key ?? null, d),\n})\n\nconst activeLabel = computed(() => {\n if (!props.modelValue) return props.placeholder\n const opt = props.options.find((o) => o.value === props.modelValue!.key)\n const label = opt?.label ?? props.modelValue.key\n return `${label} (${props.modelValue.direction === 'asc' ? 'növekvő' : 'csökkenő'})`\n})\n\nfunction emitChange(key: string | null, dir: SortDirection) {\n if (key == null) {\n if (props.handleUrl) {\n writeUrlOrRemove('sortBy', null, { handleUrl: true })\n writeUrlOrRemove('sortDir', null, { handleUrl: true })\n }\n emit('update:modelValue', null)\n emit('sort-change', null)\n return\n }\n if (props.handleUrl) {\n writeUrlOrRemove('sortBy', key, { handleUrl: true })\n writeUrlOrRemove('sortDir', dir, { handleUrl: true, default: 'asc' })\n }\n const next = { key, direction: dir }\n emit('update:modelValue', next)\n emit('sort-change', next)\n}\n\nfunction clear() {\n emitChange(null, 'asc')\n isOpen.value = false\n}\n\n// Read initial state from URL on mount when handleUrl is true and modelValue is empty.\nwatch(\n isOpen,\n (open) => {\n if (!open || !props.handleUrl || props.modelValue) return\n const sort = getDefaultSort()\n if (sort) emitChange(sort.key, sort.direction)\n },\n { immediate: true },\n)\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"wrapperRef\" class=\"ds-sort-wrapper\">\n <button\n type=\"button\"\n class=\"c-btn ds-sort-trigger lh-1\"\n :class=\"[modelValue && 'is-active', disabled && 'is-disabled', isOpen && 'is-open']\"\n :disabled=\"disabled\"\n :aria-label=\"`Rendezés: ${activeLabel}`\"\n @click=\"isOpen = !isOpen\"\n >\n <i\n class=\"fa-solid fa-fw\"\n :class=\"\n !modelValue || modelValue.direction === 'asc'\n ? 'fa-arrow-up-wide-short'\n : 'fa-arrow-down-wide-short'\n \"\n ></i>\n <span class=\"ds-sort-label c-truncate\">{{ activeLabel }}</span>\n <button\n v-if=\"modelValue\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--clear ds-sort-clear\"\n aria-label=\"Rendezés törlése\"\n title=\"Rendezés törlése\"\n @click.stop=\"clear\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n <span\n class=\"c-icon-btn c-icon-btn--chevron\"\n :class=\"{ 'c-icon-btn--chevron-open': isOpen }\"\n >\n <i class=\"fa-solid fa-fw fa-chevron-down\"></i>\n </span>\n </button>\n\n <Teleport to=\"body\">\n <div class=\"ac-component\">\n <div v-if=\"isOpen\" ref=\"dropdownRef\" class=\"ds-sort-panel\" :style=\"dropdownStyle\">\n\n <div class=\"ds-sort-panel__row\">\n <label class=\"ds-sort-panel__label\">Oszlop</label>\n <DropdownSelect\n :model-value=\"sortBy\"\n :options=\"options\"\n :config=\"{\n clearable: false,\n placeholder: 'Válassz oszlopot...',\n filterable: false,\n }\"\n @update:model-value=\"(v) => (sortBy = v)\"\n />\n </div>\n\n <div class=\"ds-sort-panel__row\">\n <span class=\"ds-sort-panel__label\">Irány</span>\n <div class=\"ds-sort-direction\" role=\"group\" aria-label=\"Rendezés iránya\">\n <button\n type=\"button\"\n class=\"ds-sort-direction__btn\"\n :class=\"{ 'is-active': direction === 'asc' }\"\n :aria-pressed=\"direction === 'asc'\"\n aria-label=\"Növekvő\"\n @click=\"direction = 'asc'\"\n >\n <i class=\"fa-solid fa-fw fa-arrow-up-wide-short\"></i>\n <span>Növekvő</span>\n </button>\n <button\n type=\"button\"\n class=\"ds-sort-direction__btn dir-desc\"\n :class=\"{ 'is-active': direction === 'desc' }\"\n :aria-pressed=\"direction === 'desc'\"\n aria-label=\"Csökkenő\"\n @click=\"direction = 'desc'\"\n >\n <i class=\"fa-solid fa-fw fa-arrow-down-wide-short\"></i>\n <span>Csökkenő</span>\n </button>\n </div>\n </div>\n\n <div class=\"ds-sort-panel__footer\">\n <Button label=\"Rendben\" outline size=\"small\" @click=\"isOpen = false\" />\n </div>\n </div>\n </div>\n </Teleport>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-sort.scss\"></style>\n"],"mappings":""}
@@ -3,14 +3,9 @@ import { formatDate as e } from "./admins-components3.js";
3
3
  function t(t, r, i) {
4
4
  if (i == null || i === "") return "";
5
5
  let a = t.find((e) => e.key === r);
6
- if (a?.type === "dropdown" && a.options) {
7
- let e = n(i);
8
- if (Array.isArray(e)) return e.map((e) => {
9
- let t = a.options?.find((t) => t.value === e);
10
- return t ? t.label : String(e);
11
- }).join(", ");
12
- let t = a.options.find((t) => t.value === e);
13
- if (t) return t.label;
6
+ if (a?.type === "dropdown") {
7
+ let e = n(i, a.options);
8
+ if (e) return e;
14
9
  }
15
10
  if (a?.type === "checkbox") return i ? "Bekapcsolva" : "";
16
11
  if (a?.type === "date" || a?.type === "datetime") {
@@ -31,16 +26,21 @@ function t(t, r, i) {
31
26
  }
32
27
  return typeof i == "object" ? JSON.stringify(i) : String(i);
33
28
  }
34
- function n(e) {
35
- if (Array.isArray(e)) return e;
36
- if (typeof e == "string") {
37
- if (e.startsWith("[") && e.endsWith("]")) try {
38
- let t = JSON.parse(e);
39
- if (Array.isArray(t)) return t;
40
- } catch {}
41
- return e;
29
+ function n(e, t) {
30
+ if (e == null) return null;
31
+ let n = (e) => {
32
+ if (e == null) return null;
33
+ if (typeof e == "object" && "label" in e) {
34
+ let n = e;
35
+ return t?.find((e) => e.value === n.value)?.label ?? n.label ?? null;
36
+ }
37
+ return typeof e == "string" ? t?.find((t) => t.value === e)?.label ?? e : null;
38
+ };
39
+ if (Array.isArray(e)) {
40
+ let t = e.map(n).filter((e) => e !== null);
41
+ return t.length > 0 ? t.join(", ") : null;
42
42
  }
43
- return e;
43
+ return n(e);
44
44
  }
45
45
  function r(e, n) {
46
46
  let r = [];
@@ -57,4 +57,4 @@ function r(e, n) {
57
57
  return r;
58
58
  }
59
59
  //#endregion
60
- export { r as buildFilterDisplay, t as displayFilterValue, n as parseDropdownValue };
60
+ export { r as buildFilterDisplay, t as displayFilterValue };
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components86.js","names":[],"sources":["../src/utils/filterDisplay.ts"],"sourcesContent":["import { formatDate } from '@/utils/date'\nimport type { FilterItem } from '@/components/data-table/DataFilters.vue'\n\nexport function displayFilterValue(items: FilterItem[], key: string, value: any): string {\n if (value === null || value === undefined || value === '') return ''\n\n const item = items.find((i) => i.key === key)\n\n if (item?.type === 'dropdown' && item.options) {\n const parsedValue = parseDropdownValue(value)\n\n if (Array.isArray(parsedValue)) {\n const labels = parsedValue.map((v) => {\n const opt = item.options?.find((o) => o.value === v)\n return opt ? opt.label : String(v)\n })\n return labels.join(', ')\n }\n\n const opt = item.options.find((o) => o.value === parsedValue)\n if (opt) return opt.label\n }\n if (item?.type === 'checkbox') {\n return value ? 'Bekapcsolva' : ''\n }\n\n if (item?.type === 'date' || item?.type === 'datetime') {\n if (typeof value === 'object' && value !== null) {\n const local: Date | string | null | undefined = value.local ?? value.utc ?? null\n if (local == null) return ''\n const d = local instanceof Date ? local : new Date(local)\n if (!isNaN(d.getTime())) {\n return formatDate(d, item.type === 'datetime' ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD')\n }\n }\n if (typeof value === 'string' && value) {\n const d = new Date(value)\n if (!isNaN(d.getTime())) {\n return formatDate(d, item.type === 'datetime' ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD')\n }\n }\n }\n\n if ((item?.type === 'daterange' || item?.type === 'datetimerange') && typeof value === 'object') {\n const showTime = item.type === 'datetimerange'\n const fmt = showTime ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD'\n const from = value.fromUtc ? formatDate(new Date(value.fromUtc), fmt) : '…'\n const to = value.toUtc ? formatDate(new Date(value.toUtc), fmt) : '…'\n return `${from} - ${to}`\n }\n\n if (typeof value === 'object') return JSON.stringify(value)\n\n return String(value)\n}\n\nexport function parseDropdownValue(value: any): unknown {\n if (Array.isArray(value)) {\n return value\n }\n\n if (typeof value === 'string') {\n if (value.startsWith('[') && value.endsWith(']')) {\n try {\n const parsed = JSON.parse(value)\n if (Array.isArray(parsed)) {\n return parsed\n }\n } catch {\n // If parsing fails, treat as string\n }\n }\n return value\n }\n\n return value\n}\n\nexport interface FilterDisplayPart {\n key: string\n text: string\n displayClass?: string\n}\n\nexport function buildFilterDisplay(\n items: FilterItem[],\n values: Record<string, any>,\n): FilterDisplayPart[] {\n const parts: FilterDisplayPart[] = []\n for (const [key, rawValue] of Object.entries(values)) {\n const v = displayFilterValue(items, key, rawValue)\n if (!v) continue\n const item = items.find((i) => i.key === key)\n const labelText = item?.label ?? key\n parts.push({ key, text: `${labelText}: ${v}`, displayClass: item?.displayClass })\n }\n\n return parts\n}\n\nexport function buildFilterValues(items: FilterItem[], values: Record<string, any>): string[] {\n return buildFilterDisplay(items, values).map((p) => p.text)\n}\n"],"mappings":";;AAGA,SAAgB,EAAmB,GAAqB,GAAa,GAAoB;CACvF,IAAI,KAAU,QAA+B,MAAU,IAAI,OAAO;CAElE,IAAM,IAAO,EAAM,MAAM,MAAM,EAAE,QAAQ,CAAG;CAE5C,IAAI,GAAM,SAAS,cAAc,EAAK,SAAS;EAC7C,IAAM,IAAc,EAAmB,CAAK;EAE5C,IAAI,MAAM,QAAQ,CAAW,GAK3B,OAJe,EAAY,KAAK,MAAM;GACpC,IAAM,IAAM,EAAK,SAAS,MAAM,MAAM,EAAE,UAAU,CAAC;GACnD,OAAO,IAAM,EAAI,QAAQ,OAAO,CAAC;EACnC,CACO,EAAO,KAAK,IAAI;EAGzB,IAAM,IAAM,EAAK,QAAQ,MAAM,MAAM,EAAE,UAAU,CAAW;EAC5D,IAAI,GAAK,OAAO,EAAI;CACtB;CACA,IAAI,GAAM,SAAS,YACjB,OAAO,IAAQ,gBAAgB;CAGjC,IAAI,GAAM,SAAS,UAAU,GAAM,SAAS,YAAY;EACtD,IAAI,OAAO,KAAU,YAAY,GAAgB;GAC/C,IAAM,IAA0C,EAAM,SAAS,EAAM,OAAO;GAC5E,IAAI,KAAS,MAAM,OAAO;GAC1B,IAAM,IAAI,aAAiB,OAAO,IAAQ,IAAI,KAAK,CAAK;GACxD,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,GACpB,OAAO,EAAW,GAAG,EAAK,SAAS,aAAa,qBAAqB,YAAY;EAErF;EACA,IAAI,OAAO,KAAU,YAAY,GAAO;GACtC,IAAM,IAAI,IAAI,KAAK,CAAK;GACxB,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,GACpB,OAAO,EAAW,GAAG,EAAK,SAAS,aAAa,qBAAqB,YAAY;EAErF;CACF;CAEA,KAAK,GAAM,SAAS,eAAe,GAAM,SAAS,oBAAoB,OAAO,KAAU,UAAU;EAE/F,IAAM,IADW,EAAK,SAAS,kBACR,qBAAqB;EAG5C,OAAO,GAFM,EAAM,UAAU,EAAW,IAAI,KAAK,EAAM,OAAO,GAAG,CAAG,IAAI,IAEzD,KADJ,EAAM,QAAQ,EAAW,IAAI,KAAK,EAAM,KAAK,GAAG,CAAG,IAAI;CAEpE;CAIA,OAFI,OAAO,KAAU,WAAiB,KAAK,UAAU,CAAK,IAEnD,OAAO,CAAK;AACrB;AAEA,SAAgB,EAAmB,GAAqB;CACtD,IAAI,MAAM,QAAQ,CAAK,GACrB,OAAO;CAGT,IAAI,OAAO,KAAU,UAAU;EAC7B,IAAI,EAAM,WAAW,GAAG,KAAK,EAAM,SAAS,GAAG,GAC7C,IAAI;GACF,IAAM,IAAS,KAAK,MAAM,CAAK;GAC/B,IAAI,MAAM,QAAQ,CAAM,GACtB,OAAO;EAEX,QAAQ,CAER;EAEF,OAAO;CACT;CAEA,OAAO;AACT;AAQA,SAAgB,EACd,GACA,GACqB;CACrB,IAAM,IAA6B,CAAC;CACpC,KAAK,IAAM,CAAC,GAAK,MAAa,OAAO,QAAQ,CAAM,GAAG;EACpD,IAAM,IAAI,EAAmB,GAAO,GAAK,CAAQ;EACjD,IAAI,CAAC,GAAG;EACR,IAAM,IAAO,EAAM,MAAM,MAAM,EAAE,QAAQ,CAAG,GACtC,IAAY,GAAM,SAAS;EACjC,EAAM,KAAK;GAAE;GAAK,MAAM,GAAG,EAAU,IAAI;GAAK,cAAc,GAAM;EAAa,CAAC;CAClF;CAEA,OAAO;AACT"}
1
+ {"version":3,"file":"admins-components86.js","names":[],"sources":["../src/utils/filterDisplay.ts"],"sourcesContent":["import { formatDate } from '@/utils/date'\nimport type { FilterItem } from '@/components/data-table/DataFilters.vue'\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\n\nexport function displayFilterValue(items: FilterItem[], key: string, value: any): string {\n if (value === null || value === undefined || value === '') return ''\n\n const item = items.find((i) => i.key === key)\n\n if (item?.type === 'dropdown') {\n const labels = extractDropdownLabels(value, item.options)\n if (labels) return labels\n }\n if (item?.type === 'checkbox') {\n return value ? 'Bekapcsolva' : ''\n }\n\n if (item?.type === 'date' || item?.type === 'datetime') {\n if (typeof value === 'object' && value !== null) {\n const local: Date | string | null | undefined = value.local ?? value.utc ?? null\n if (local == null) return ''\n const d = local instanceof Date ? local : new Date(local)\n if (!isNaN(d.getTime())) {\n return formatDate(d, item.type === 'datetime' ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD')\n }\n }\n if (typeof value === 'string' && value) {\n const d = new Date(value)\n if (!isNaN(d.getTime())) {\n return formatDate(d, item.type === 'datetime' ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD')\n }\n }\n }\n\n if ((item?.type === 'daterange' || item?.type === 'datetimerange') && typeof value === 'object') {\n const showTime = item.type === 'datetimerange'\n const fmt = showTime ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD'\n const from = value.fromUtc ? formatDate(new Date(value.fromUtc), fmt) : '…'\n const to = value.toUtc ? formatDate(new Date(value.toUtc), fmt) : '…'\n return `${from} - ${to}`\n }\n\n if (typeof value === 'object') return JSON.stringify(value)\n\n return String(value)\n}\n\n/**\n * Extracts display labels from a dropdown filter value.\n * Supports both the new format (`DropdownOption | DropdownOption[]`)\n * and the legacy format (plain string / string[]).\n *\n * Prefers the label from the live `options` list when available,\n * otherwise falls back to the label stored on the option object itself.\n */\nfunction extractDropdownLabels(value: unknown, options?: DropdownOption[]): string | null {\n if (value == null) return null\n\n const labelFor = (entry: unknown): string | null => {\n if (entry == null) return null\n if (typeof entry === 'object' && 'label' in (entry as object)) {\n const obj = entry as DropdownOption\n const fromOptions = options?.find((o) => o.value === obj.value)?.label\n return fromOptions ?? obj.label ?? null\n }\n if (typeof entry === 'string') {\n return options?.find((o) => o.value === entry)?.label ?? entry\n }\n return null\n }\n\n if (Array.isArray(value)) {\n const labels = value.map(labelFor).filter((l): l is string => l !== null)\n return labels.length > 0 ? labels.join(', ') : null\n }\n\n return labelFor(value)\n}\n\nexport function parseDropdownValue(value: any): unknown {\n if (Array.isArray(value)) {\n return value\n }\n\n if (typeof value === 'string') {\n if (value.startsWith('[') && value.endsWith(']')) {\n try {\n const parsed = JSON.parse(value)\n if (Array.isArray(parsed)) {\n return parsed\n }\n } catch {\n // If parsing fails, treat as string\n }\n }\n return value\n }\n\n return value\n}\n\nexport interface FilterDisplayPart {\n key: string\n text: string\n displayClass?: string\n}\n\nexport function buildFilterDisplay(\n items: FilterItem[],\n values: Record<string, any>,\n): FilterDisplayPart[] {\n const parts: FilterDisplayPart[] = []\n for (const [key, rawValue] of Object.entries(values)) {\n const v = displayFilterValue(items, key, rawValue)\n if (!v) continue\n const item = items.find((i) => i.key === key)\n const labelText = item?.label ?? key\n parts.push({ key, text: `${labelText}: ${v}`, displayClass: item?.displayClass })\n }\n\n return parts\n}\n\nexport function buildFilterValues(items: FilterItem[], values: Record<string, any>): string[] {\n return buildFilterDisplay(items, values).map((p) => p.text)\n}\n"],"mappings":";;AAIA,SAAgB,EAAmB,GAAqB,GAAa,GAAoB;CACvF,IAAI,KAAU,QAA+B,MAAU,IAAI,OAAO;CAElE,IAAM,IAAO,EAAM,MAAM,MAAM,EAAE,QAAQ,CAAG;CAE5C,IAAI,GAAM,SAAS,YAAY;EAC7B,IAAM,IAAS,EAAsB,GAAO,EAAK,OAAO;EACxD,IAAI,GAAQ,OAAO;CACrB;CACA,IAAI,GAAM,SAAS,YACjB,OAAO,IAAQ,gBAAgB;CAGjC,IAAI,GAAM,SAAS,UAAU,GAAM,SAAS,YAAY;EACtD,IAAI,OAAO,KAAU,YAAY,GAAgB;GAC/C,IAAM,IAA0C,EAAM,SAAS,EAAM,OAAO;GAC5E,IAAI,KAAS,MAAM,OAAO;GAC1B,IAAM,IAAI,aAAiB,OAAO,IAAQ,IAAI,KAAK,CAAK;GACxD,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,GACpB,OAAO,EAAW,GAAG,EAAK,SAAS,aAAa,qBAAqB,YAAY;EAErF;EACA,IAAI,OAAO,KAAU,YAAY,GAAO;GACtC,IAAM,IAAI,IAAI,KAAK,CAAK;GACxB,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,GACpB,OAAO,EAAW,GAAG,EAAK,SAAS,aAAa,qBAAqB,YAAY;EAErF;CACF;CAEA,KAAK,GAAM,SAAS,eAAe,GAAM,SAAS,oBAAoB,OAAO,KAAU,UAAU;EAE/F,IAAM,IADW,EAAK,SAAS,kBACR,qBAAqB;EAG5C,OAAO,GAFM,EAAM,UAAU,EAAW,IAAI,KAAK,EAAM,OAAO,GAAG,CAAG,IAAI,IAEzD,KADJ,EAAM,QAAQ,EAAW,IAAI,KAAK,EAAM,KAAK,GAAG,CAAG,IAAI;CAEpE;CAIA,OAFI,OAAO,KAAU,WAAiB,KAAK,UAAU,CAAK,IAEnD,OAAO,CAAK;AACrB;AAUA,SAAS,EAAsB,GAAgB,GAA2C;CACxF,IAAI,KAAS,MAAM,OAAO;CAE1B,IAAM,KAAY,MAAkC;EAClD,IAAI,KAAS,MAAM,OAAO;EAC1B,IAAI,OAAO,KAAU,YAAY,WAAY,GAAkB;GAC7D,IAAM,IAAM;GAEZ,OADoB,GAAS,MAAM,MAAM,EAAE,UAAU,EAAI,KAAK,GAAG,SAC3C,EAAI,SAAS;EACrC;EAIA,OAHI,OAAO,KAAU,WACZ,GAAS,MAAM,MAAM,EAAE,UAAU,CAAK,GAAG,SAAS,IAEpD;CACT;CAEA,IAAI,MAAM,QAAQ,CAAK,GAAG;EACxB,IAAM,IAAS,EAAM,IAAI,CAAQ,EAAE,QAAQ,MAAmB,MAAM,IAAI;EACxE,OAAO,EAAO,SAAS,IAAI,EAAO,KAAK,IAAI,IAAI;CACjD;CAEA,OAAO,EAAS,CAAK;AACvB;AA8BA,SAAgB,EACd,GACA,GACqB;CACrB,IAAM,IAA6B,CAAC;CACpC,KAAK,IAAM,CAAC,GAAK,MAAa,OAAO,QAAQ,CAAM,GAAG;EACpD,IAAM,IAAI,EAAmB,GAAO,GAAK,CAAQ;EACjD,IAAI,CAAC,GAAG;EACR,IAAM,IAAO,EAAM,MAAM,MAAM,EAAE,QAAQ,CAAG,GACtC,IAAY,GAAM,SAAS;EACjC,EAAM,KAAK;GAAE;GAAK,MAAM,GAAG,EAAU,IAAI;GAAK,cAAc,GAAM;EAAa,CAAC;CAClF;CAEA,OAAO;AACT"}
@@ -1,34 +1,33 @@
1
1
  import { getFullStorageKey as e } from "./admins-components78.js";
2
2
  import { getUrlParam as t, removeUrlParam as n, setUrlParam as r } from "./admins-components79.js";
3
- import { parseDropdownValue as i } from "./admins-components86.js";
4
3
  //#region src/utils/dataFilters.ts
5
- function a(e, t, n = !0) {
6
- let r = o(e), i = Object.keys(r).length > 0, a = (i ? null : c(t))?.values ?? {}, s = {};
4
+ function i(e, t, n = !0) {
5
+ let r = a(e), i = Object.keys(r).length > 0, o = (i ? null : s(t))?.values ?? {}, c = {};
7
6
  for (let t of e) {
8
7
  if (t.type === "separator") continue;
9
8
  let e;
10
9
  if (t.key in r) e = r[t.key];
11
10
  else if (i) continue;
12
- else if (t.key in a) e = a[t.key];
11
+ else if (t.key in o) e = o[t.key];
13
12
  else if (t.value !== void 0) e = t.value;
14
13
  else continue;
15
14
  if (e != null) if (n && t.transformer) {
16
15
  let n = t.transformer(e);
17
- n && Object.assign(s, n);
18
- } else s[t.key] = e;
16
+ n && Object.assign(c, n);
17
+ } else c[t.key] = e;
19
18
  }
20
- return s;
19
+ return c;
21
20
  }
22
- function o(e) {
21
+ function a(e) {
23
22
  let n = {};
24
23
  for (let r of e) {
25
24
  if (r.type === "separator") continue;
26
25
  let e = t(r.key);
27
- e && (n[r.key] = u(r.type, e, r.value));
26
+ e && (n[r.key] = l(r.type, e, r.value));
28
27
  }
29
28
  return n;
30
29
  }
31
- function s(t) {
30
+ function o(t) {
32
31
  try {
33
32
  let n = e("filters", t), r = JSON.parse(localStorage.getItem(n) ?? "[]");
34
33
  return Array.isArray(r) ? r.filter((e) => e && typeof e == "object" && typeof e.id == "string" && e.values && typeof e.savedAt == "string") : [];
@@ -36,20 +35,48 @@ function s(t) {
36
35
  return [];
37
36
  }
38
37
  }
39
- function c(e) {
40
- return s(e).find((e) => e.isDefault) ?? null;
38
+ function s(e) {
39
+ return o(e).find((e) => e.isDefault) ?? null;
41
40
  }
42
- function l(e) {
41
+ function c(e) {
43
42
  return Object.fromEntries(Object.entries(e).filter(([e, t]) => t !== null && t !== "" && t !== void 0));
44
43
  }
45
- function u(e, t, n) {
44
+ function l(e, t, n) {
46
45
  if (e === "number") {
47
46
  let e = Number(t);
48
47
  return isNaN(e) ? n ?? null : e;
49
48
  }
50
- return e === "date" || e === "datetime" ? { utc: t } : e === "daterange" || e === "datetimerange" ? d(t, n) : e === "dropdown" ? i(t) : e === "checkbox" ? t === "true" : t;
49
+ return e === "date" || e === "datetime" ? { utc: t } : e === "daterange" || e === "datetimerange" ? f(t, n) : e === "dropdown" ? u(t) : e === "checkbox" ? t === "true" : t;
50
+ }
51
+ function u(e) {
52
+ if (e.startsWith("[") || e.startsWith("{")) try {
53
+ let t = JSON.parse(e);
54
+ if (Array.isArray(t)) {
55
+ let e = t.map(d).filter((e) => e !== null);
56
+ return e.length > 0 ? e : null;
57
+ }
58
+ if (t && typeof t == "object") return d(t);
59
+ } catch {}
60
+ return e ? {
61
+ value: e,
62
+ label: e
63
+ } : null;
64
+ }
65
+ function d(e) {
66
+ if (e == null) return null;
67
+ if (typeof e == "object" && "label" in e) {
68
+ let t = e;
69
+ if (t.value != null && typeof t.label == "string") return {
70
+ value: t.value,
71
+ label: t.label
72
+ };
73
+ }
74
+ return typeof e == "string" ? {
75
+ value: e,
76
+ label: e
77
+ } : null;
51
78
  }
52
- function d(e, t) {
79
+ function f(e, t) {
53
80
  try {
54
81
  let t = JSON.parse(e);
55
82
  return t && typeof t == "object" && "local" in t && t.local && (t.local = new Date(t.local)), t;
@@ -57,12 +84,29 @@ function d(e, t) {
57
84
  return t ?? null;
58
85
  }
59
86
  }
60
- function f(e, t) {
87
+ function p(e, t) {
61
88
  for (let i of e) {
62
89
  if (i.type === "separator") continue;
63
90
  let e = t[i.key];
64
- e == null || e === "" ? n(i.key) : i.type === "date" || i.type === "datetime" ? r(i.key, e.utc) : typeof e == "object" ? r(i.key, JSON.stringify(e)) : r(i.key, String(e));
91
+ e == null || e === "" ? n(i.key) : i.type === "date" || i.type === "datetime" ? r(i.key, e.utc) : i.type === "dropdown" ? r(i.key, JSON.stringify(m(e))) : typeof e == "object" ? r(i.key, JSON.stringify(e)) : r(i.key, String(e));
92
+ }
93
+ }
94
+ function m(e, t) {
95
+ if (e == null) return null;
96
+ let n = (e) => {
97
+ if (e == null) return null;
98
+ if (typeof e == "object" && "label" in e) return e;
99
+ let n = String(e);
100
+ return {
101
+ value: n,
102
+ label: t?.find((e) => e.value === n)?.label ?? n
103
+ };
104
+ };
105
+ if (Array.isArray(e)) {
106
+ let t = e.map(n).filter((e) => e !== null);
107
+ return t.length > 0 ? t : null;
65
108
  }
109
+ return n(e);
66
110
  }
67
111
  //#endregion
68
- export { l as filterEmptyValues, a as getDefaultFilters, c as getDefaultSavedFilter, o as getFilterUrlParams, s as getSavedFilters, f as writeFilterParams };
112
+ export { c as filterEmptyValues, i as getDefaultFilters, s as getDefaultSavedFilter, a as getFilterUrlParams, o as getSavedFilters, p as writeFilterParams };
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components87.js","names":[],"sources":["../src/utils/dataFilters.ts"],"sourcesContent":["import type { FilterItem } from '@/components/data-table/DataFilters.vue'\nimport type { SavedFilter } from '@/components/data-table/FiltersHistory.vue'\nimport { parseDropdownValue } from '@/utils/filterDisplay'\nimport { getFullStorageKey } from '@/utils/storageKey'\nimport { getUrlParam, setUrlParam, removeUrlParam } from '@/utils/url'\n\n export function getDefaultFilters(\n items: FilterItem[],\n storageKey?: string,\n useTransformers = true,\n): Record<string, unknown> {\n const urlFilters = getFilterUrlParams(items)\n const hasUrlParams = Object.keys(urlFilters).length > 0\n const defaultFilter = hasUrlParams ? null : getDefaultSavedFilter(storageKey)\n const defaultSavedValues = defaultFilter?.values ?? {}\n\n const result: Record<string, unknown> = {}\n\n for (const item of items) {\n if (item.type === 'separator') continue\n\n let value: unknown\n\n if (item.key in urlFilters) {\n value = urlFilters[item.key]\n } else if (hasUrlParams) {\n continue\n } else if (item.key in defaultSavedValues) {\n value = defaultSavedValues[item.key]\n } else if (item.value !== undefined) {\n value = item.value\n } else {\n continue\n }\n\n if (value == null) continue\n\n if (useTransformers && item.transformer) {\n const transformed = item.transformer(value)\n if (transformed) {\n Object.assign(result, transformed)\n }\n } else {\n result[item.key] = value\n }\n }\n\n return result\n}\n\nexport function getFilterUrlParams(items: FilterItem[]): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n for (const item of items) {\n if (item.type === 'separator') continue\n\n const raw = getUrlParam(item.key)\n if (raw) {\n result[item.key] = parseFilterValue(item.type, raw, item.value)\n }\n }\n return result\n}\n\nexport function getSavedFilters(storageKey?: string): SavedFilter[] {\n try {\n const fullStorageKey = getFullStorageKey('filters', storageKey)\n const parsed = JSON.parse(localStorage.getItem(fullStorageKey) ?? '[]')\n return Array.isArray(parsed)\n ? parsed.filter(\n (e) =>\n e &&\n typeof e === 'object' &&\n typeof e.id === 'string' &&\n e.values &&\n typeof e.savedAt === 'string',\n )\n : []\n } catch {\n return []\n }\n}\n\nexport function getDefaultSavedFilter(storageKey?: string): SavedFilter | null {\n const savedFilters = getSavedFilters(storageKey)\n return savedFilters.find((f) => f.isDefault) ?? null\n}\n\nexport function filterEmptyValues(filters: Record<string, any>): Record<string, any> {\n return Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(filters).filter(([_, val]) => val !== null && val !== '' && val !== undefined),\n )\n}\n\nfunction parseFilterValue(type: FilterItem['type'], raw: string, fallback: unknown): unknown {\n if (type === 'number') {\n const n = Number(raw)\n return isNaN(n) ? (fallback ?? null) : n\n }\n if (type === 'date' || type === 'datetime') {\n return { utc: raw }\n }\n if (type === 'daterange' || type === 'datetimerange') {\n return parseRangeValue(raw, fallback)\n }\n if (type === 'dropdown') {\n return parseDropdownValue(raw)\n }\n if (type === 'checkbox') {\n return raw === 'true'\n }\n\n return raw\n}\n\nfunction parseRangeValue(raw: string, fallback: unknown): unknown {\n try {\n const parsed = JSON.parse(raw)\n if (parsed && typeof parsed === 'object' && 'local' in parsed && parsed.local) {\n parsed.local = new Date(parsed.local)\n }\n return parsed\n } catch {\n return fallback ?? null\n }\n}\n\nexport function writeFilterParams(items: FilterItem[], vals: Record<string, unknown>) {\n for (const item of items) {\n if (item.type === 'separator') continue\n const v = vals[item.key]\n if (v === null || v === undefined || v === '') {\n removeUrlParam(item.key)\n } else if (item.type === 'date' || item.type === 'datetime') {\n setUrlParam(item.key, (v as { utc: string }).utc)\n } else if (typeof v === 'object') {\n setUrlParam(item.key, JSON.stringify(v))\n } else {\n setUrlParam(item.key, String(v))\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"admins-components87.js","names":[],"sources":["../src/utils/dataFilters.ts"],"sourcesContent":["import type { FilterItem } from '@/components/data-table/DataFilters.vue'\nimport type { SavedFilter } from '@/components/data-table/FiltersHistory.vue'\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\nimport { getFullStorageKey } from '@/utils/storageKey'\nimport { getUrlParam, setUrlParam, removeUrlParam } from '@/utils/url'\n\n export function getDefaultFilters(\n items: FilterItem[],\n storageKey?: string,\n useTransformers = true,\n): Record<string, unknown> {\n const urlFilters = getFilterUrlParams(items)\n const hasUrlParams = Object.keys(urlFilters).length > 0\n const defaultFilter = hasUrlParams ? null : getDefaultSavedFilter(storageKey)\n const defaultSavedValues = defaultFilter?.values ?? {}\n\n const result: Record<string, unknown> = {}\n\n for (const item of items) {\n if (item.type === 'separator') continue\n\n let value: unknown\n\n if (item.key in urlFilters) {\n value = urlFilters[item.key]\n } else if (hasUrlParams) {\n continue\n } else if (item.key in defaultSavedValues) {\n value = defaultSavedValues[item.key]\n } else if (item.value !== undefined) {\n value = item.value\n } else {\n continue\n }\n\n if (value == null) continue\n\n if (useTransformers && item.transformer) {\n const transformed = item.transformer(value)\n if (transformed) {\n Object.assign(result, transformed)\n }\n } else {\n result[item.key] = value\n }\n }\n\n return result\n}\n\nexport function getFilterUrlParams(items: FilterItem[]): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n for (const item of items) {\n if (item.type === 'separator') continue\n\n const raw = getUrlParam(item.key)\n if (raw) {\n result[item.key] = parseFilterValue(item.type, raw, item.value)\n }\n }\n return result\n}\n\nexport function getSavedFilters(storageKey?: string): SavedFilter[] {\n try {\n const fullStorageKey = getFullStorageKey('filters', storageKey)\n const parsed = JSON.parse(localStorage.getItem(fullStorageKey) ?? '[]')\n return Array.isArray(parsed)\n ? parsed.filter(\n (e) =>\n e &&\n typeof e === 'object' &&\n typeof e.id === 'string' &&\n e.values &&\n typeof e.savedAt === 'string',\n )\n : []\n } catch {\n return []\n }\n}\n\nexport function getDefaultSavedFilter(storageKey?: string): SavedFilter | null {\n const savedFilters = getSavedFilters(storageKey)\n return savedFilters.find((f) => f.isDefault) ?? null\n}\n\nexport function filterEmptyValues(filters: Record<string, any>): Record<string, any> {\n return Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(filters).filter(([_, val]) => val !== null && val !== '' && val !== undefined),\n )\n}\n\nfunction parseFilterValue(type: FilterItem['type'], raw: string, fallback: unknown): unknown {\n if (type === 'number') {\n const n = Number(raw)\n return isNaN(n) ? (fallback ?? null) : n\n }\n if (type === 'date' || type === 'datetime') {\n return { utc: raw }\n }\n if (type === 'daterange' || type === 'datetimerange') {\n return parseRangeValue(raw, fallback)\n }\n if (type === 'dropdown') {\n return parseDropdownStoredValue(raw)\n }\n if (type === 'checkbox') {\n return raw === 'true'\n }\n\n return raw\n}\n\nfunction parseDropdownStoredValue(raw: string): DropdownOption | DropdownOption[] | null {\n // Try to parse as JSON first (new format or legacy array)\n if (raw.startsWith('[') || raw.startsWith('{')) {\n try {\n const parsed = JSON.parse(raw)\n if (Array.isArray(parsed)) {\n const opts = parsed.map(toDropdownOption).filter((o): o is DropdownOption => o !== null)\n return opts.length > 0 ? opts : null\n }\n if (parsed && typeof parsed === 'object') {\n const opt = toDropdownOption(parsed)\n return opt\n }\n } catch {\n // fall through to legacy handling\n }\n }\n // Legacy: plain string value\n if (raw) return { value: raw, label: raw }\n return null\n}\n\nfunction toDropdownOption(entry: unknown): DropdownOption | null {\n if (entry == null) return null\n if (typeof entry === 'object' && 'label' in (entry as object)) {\n const obj = entry as DropdownOption\n if (obj.value != null && typeof obj.label === 'string') {\n return { value: obj.value, label: obj.label }\n }\n }\n if (typeof entry === 'string') {\n return { value: entry, label: entry }\n }\n return null\n}\n\nfunction parseRangeValue(raw: string, fallback: unknown): unknown {\n try {\n const parsed = JSON.parse(raw)\n if (parsed && typeof parsed === 'object' && 'local' in parsed && parsed.local) {\n parsed.local = new Date(parsed.local)\n }\n return parsed\n } catch {\n return fallback ?? null\n }\n}\n\nexport function writeFilterParams(items: FilterItem[], vals: Record<string, unknown>) {\n for (const item of items) {\n if (item.type === 'separator') continue\n const v = vals[item.key]\n if (v === null || v === undefined || v === '') {\n removeUrlParam(item.key)\n } else if (item.type === 'date' || item.type === 'datetime') {\n setUrlParam(item.key, (v as { utc: string }).utc)\n } else if (item.type === 'dropdown') {\n // Store the full option object(s) so the label is preserved even when\n // the options list hasn't been loaded yet (e.g. lazy onInnerSearch).\n setUrlParam(item.key, JSON.stringify(normalizeDropdownValue(v)))\n } else if (typeof v === 'object') {\n setUrlParam(item.key, JSON.stringify(v))\n } else {\n setUrlParam(item.key, String(v))\n }\n }\n}\n\nfunction normalizeDropdownValue(\n v: unknown,\n options?: DropdownOption[],\n): DropdownOption | DropdownOption[] | null {\n if (v == null) return null\n const toOption = (entry: unknown): DropdownOption | null => {\n if (entry == null) return null\n if (typeof entry === 'object' && 'label' in (entry as object)) {\n return entry as DropdownOption\n }\n const value = String(entry)\n const label = options?.find((o) => o.value === value)?.label ?? value\n return { value, label }\n }\n if (Array.isArray(v)) {\n const opts = v.map(toOption).filter((o): o is DropdownOption => o !== null)\n return opts.length > 0 ? opts : null\n }\n const opt = toOption(v)\n return opt\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components91.js","names":[],"sources":["../src/components/data-table/DataFilters.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\n\nexport interface FilterItem {\n type: FilterItemType\n key: string\n label?: string\n placeholder?: string\n value?: any\n options?: DropdownOption[]\n fullWidth?: boolean\n config?: Record<string, any>\n displayClass?: string\n transformer?: (value: any) => Record<string, any> | null | undefined\n onInnerSearch?: (value: string) => void\n onChange?: (value: any) => void\n}\n\nexport interface FilterResponse {\n values: Record<string, any>\n transformed: Record<string, any>\n}\n\nexport interface DataFiltersProps {\n items: FilterItem[]\n open?: boolean\n position?: SidebarPosition\n lazy?: boolean\n handleUrl?: boolean\n historyEnabled?: boolean\n storageKey?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport DateRangePicker from '@/components/DateRangePicker.vue'\nimport DropdownSelect from '@/components/DropdownSelect.vue'\nimport TextInput, { type TextInputType } from '@/components/TextInput.vue'\nimport Button from '@/components/Button.vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport FiltersHistory from '@/components/data-table/FiltersHistory.vue'\nimport type { DatePickerConfig, DateRangePickerConfig } from '@/types/datepickers'\nimport type { FilterItemType, PickedDate, PickedUtcRange } from '@/types/types'\nimport { filterEmptyValues, getDefaultFilters, writeFilterParams } from '@/utils/dataFilters'\n\nconst props = withDefaults(defineProps<DataFiltersProps>(), {\n open: false,\n position: 'left',\n lazy: true,\n handleUrl: false,\n historyEnabled: true,\n})\n\nconst emit = defineEmits<{\n close: []\n change: [response: FilterResponse]\n}>()\n\nconst values = ref<Record<string, any>>(getDefaultFilters(props.items, props.storageKey, false))\nconst filterRefs = ref<Record<string, any>>({})\n\nfunction setFilterRef(key: string, el: any) {\n if (el) filterRefs.value[key] = el\n else delete filterRefs.value[key]\n}\n\nfunction buildDatePickerConfig(item: FilterItem): DatePickerConfig {\n return {\n ...(item.config ?? {}),\n showTime: item.type === 'datetime',\n placeholder: item.placeholder ?? (item.type === 'datetime' ? 'Időpont' : 'Dátum'),\n }\n}\n\nfunction buildDateRangePickerConfig(item: FilterItem): DateRangePickerConfig {\n return {\n ...(item.config ?? {}),\n ...(!item.fullWidth ? { compact: true } : {}),\n showTime: item.type === 'datetimerange',\n }\n}\n\nfunction update(item: FilterItem, value: any) {\n const stored = typeof value === 'string' ? value.trim() : value\n values.value = { ...values.value, [item.key]: stored }\n if (item.onChange) item.onChange(stored)\n if (!props.lazy) emitChange()\n}\n\nconst hasActiveFilters = computed(() =>\n Object.values(values.value).some((v) => v !== null && v !== '' && v !== undefined),\n)\n\nfunction buildResponse(): FilterResponse {\n const transformed: Record<string, any> = {}\n for (const item of props.items) {\n if (item.type === 'separator') continue\n const val = values.value[item.key]\n if (item.transformer) {\n Object.assign(transformed, item.transformer(val) ?? {})\n } else if (item.type === 'date' || item.type === 'datetime') {\n transformed[item.key] = val?.utc ?? val\n } else {\n transformed[item.key] = val\n }\n }\n return { values: filterEmptyValues(values.value), transformed: filterEmptyValues(transformed) }\n}\n\nfunction emitChange() {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponse())\n}\n\nfunction confirm() {\n emitChange()\n emit('close')\n}\n\nfunction clearAll() {\n values.value = {}\n emitChange()\n}\n\nfunction clearFilter(key: string) {\n values.value = { ...values.value, [key]: null }\n emitChange()\n}\n\nfunction focusFilter(key: string) {\n const el = (filterRefs.value as Record<string, any>)[key]\n if (!el) return\n\n if (typeof el.focusAndOpen === 'function') el.focusAndOpen()\n else if (typeof el.focus === 'function') el.focus()\n}\n\nfunction onHistoryLoad(loaded: Record<string, any>) {\n const next: Record<string, any> = { ...values.value }\n for (const item of props.items) {\n if (item.type === 'separator') continue\n if (item.key in loaded) next[item.key] = loaded[item.key] ?? null\n }\n values.value = next\n emitChange()\n}\n\ndefineExpose({ clearFilter, focusFilter })\n\nfunction handleFilterKeydown(event: KeyboardEvent) {\n if (event.key !== 'Enter') return\n\n // Allow Enter in textarea for line breaks\n const target = event.target as HTMLElement\n if (target?.tagName === 'TEXTAREA') return\n\n event.preventDefault()\n confirm()\n}\n\nfunction handleDropdownFilterInput(item: FilterItem, text: string) {\n if (item.onInnerSearch) item.onInnerSearch(text)\n}\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Szűrők\" :position=\"position\" @close=\"emit('close')\">\n <div class=\"data-filters\" @keydown=\"handleFilterKeydown\">\n <div\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"data-filters__field\"\n :class=\"{ 'data-filters__field--full': item.fullWidth || item.type === 'separator' }\"\n >\n <hr v-if=\"item.type === 'separator'\" class=\"data-filters__separator\" />\n <template v-else-if=\"item.type === 'checkbox'\">\n <Checkbox\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as boolean) ?? false\"\n :label=\"item.label ?? item.key\"\n @update:model-value=\"(val) => update(item, val)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else-if=\"['text', 'number', 'textarea'].includes(item.type)\">\n <TextInput\n :type=\"item.type as TextInputType\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as string) ?? ''\"\n :label=\"item.label ?? item.key\"\n :placeholder=\"item.placeholder\"\n @update:model-value=\"(val) => update(item, val || null)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else-if=\"item.type === 'date' || item.type === 'datetime'\">\n <label class=\"c-label\" :for=\"`df-${item.key}`\">{{ item.label ?? item.key }}</label>\n <DatePicker\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as PickedDate) ?? null\"\n :config=\"buildDatePickerConfig(item)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n <template v-else-if=\"item.type === 'daterange' || item.type === 'datetimerange'\">\n <span class=\"c-label\">{{ item.label ?? item.key }}</span>\n <DateRangePicker\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as PickedUtcRange) ?? null\"\n :config=\"buildDateRangePickerConfig(item)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n <template v-else-if=\"item.type === 'dropdown'\">\n <span class=\"c-label\">{{ item.label ?? item.key }}</span>\n <DropdownSelect\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as string) ?? null\"\n :options=\"item.options ?? []\"\n :config=\"{\n ...(item.config ?? {}),\n placeholder: item.placeholder ?? 'Válassz...',\n clearable: true,\n filterable: true,\n }\"\n @filter-input=\"handleDropdownFilterInput(item, $event)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n </div>\n </div>\n <div class=\"data-filters__footer\">\n <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Szűrők törlése\"\n aria-label=\"Szűrők törlése\"\n size=\"small\"\n @click=\"clearAll\"\n />\n <Button label=\"Szűrés\" aria-label=\"Szűrés\" type=\"success\" @click=\"confirm\" />\n </div>\n <template v-if=\"historyEnabled\">\n <hr class=\"separator my-3\" />\n <FiltersHistory\n :items=\"items\"\n :values=\"values\"\n :storage-key=\"storageKey\"\n @load=\"onHistoryLoad\"\n />\n </template>\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-filters.scss\"></style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"admins-components91.js","names":[],"sources":["../src/components/data-table/DataFilters.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\n\nexport interface FilterItem {\n type: FilterItemType\n key: string\n label?: string\n placeholder?: string\n value?: any\n options?: DropdownOption[]\n fullWidth?: boolean\n config?: Record<string, any>\n displayClass?: string\n transformer?: (value: any) => Record<string, any> | null | undefined\n onInnerSearch?: (value: string) => void\n onChange?: (value: any) => void\n}\n\nexport interface FilterResponse {\n values: Record<string, any>\n transformed: Record<string, any>\n}\n\nexport interface DataFiltersProps {\n items: FilterItem[]\n open?: boolean\n position?: SidebarPosition\n lazy?: boolean\n handleUrl?: boolean\n historyEnabled?: boolean\n storageKey?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport DateRangePicker from '@/components/DateRangePicker.vue'\nimport DropdownSelect from '@/components/DropdownSelect.vue'\nimport TextInput, { type TextInputType } from '@/components/TextInput.vue'\nimport Button from '@/components/Button.vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport FiltersHistory from '@/components/data-table/FiltersHistory.vue'\nimport type { DatePickerConfig, DateRangePickerConfig } from '@/types/datepickers'\nimport type { FilterItemType, PickedDate, PickedUtcRange } from '@/types/types'\nimport { filterEmptyValues, getDefaultFilters, writeFilterParams } from '@/utils/dataFilters'\n\nconst props = withDefaults(defineProps<DataFiltersProps>(), {\n open: false,\n position: 'left',\n lazy: true,\n handleUrl: false,\n historyEnabled: true,\n})\n\nconst emit = defineEmits<{\n close: []\n change: [response: FilterResponse]\n}>()\n\nconst values = ref<Record<string, any>>(getDefaultFilters(props.items, props.storageKey, false))\nconst filterRefs = ref<Record<string, any>>({})\n\nfunction setFilterRef(key: string, el: any) {\n if (el) filterRefs.value[key] = el\n else delete filterRefs.value[key]\n}\n\nfunction buildDatePickerConfig(item: FilterItem): DatePickerConfig {\n return {\n ...(item.config ?? {}),\n showTime: item.type === 'datetime',\n placeholder: item.placeholder ?? (item.type === 'datetime' ? 'Időpont' : 'Dátum'),\n }\n}\n\nfunction buildDateRangePickerConfig(item: FilterItem): DateRangePickerConfig {\n return {\n ...(item.config ?? {}),\n ...(!item.fullWidth ? { compact: true } : {}),\n showTime: item.type === 'datetimerange',\n }\n}\n\nfunction update(item: FilterItem, value: any) {\n const stored = typeof value === 'string' ? value.trim() : value\n values.value = { ...values.value, [item.key]: stored }\n if (item.onChange) item.onChange(stored)\n if (!props.lazy) emitChange()\n}\n\nconst hasActiveFilters = computed(() =>\n Object.values(values.value).some((v) => v !== null && v !== '' && v !== undefined),\n)\n\nfunction buildResponse(): FilterResponse {\n const transformed: Record<string, any> = {}\n for (const item of props.items) {\n if (item.type === 'separator') continue\n const val = values.value[item.key]\n if (item.transformer) {\n Object.assign(transformed, item.transformer(val) ?? {})\n } else if (item.type === 'date' || item.type === 'datetime') {\n transformed[item.key] = val?.utc ?? val\n } else {\n transformed[item.key] = val\n }\n }\n return { values: filterEmptyValues(values.value), transformed: filterEmptyValues(transformed) }\n}\n\nfunction emitChange() {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponse())\n}\n\nfunction confirm() {\n emitChange()\n emit('close')\n}\n\nfunction clearAll() {\n values.value = {}\n emitChange()\n}\n\nfunction clearFilter(key: string) {\n values.value = { ...values.value, [key]: null }\n emitChange()\n}\n\nfunction focusFilter(key: string) {\n const el = (filterRefs.value as Record<string, any>)[key]\n if (!el) return\n\n if (typeof el.focusAndOpen === 'function') el.focusAndOpen()\n else if (typeof el.focus === 'function') el.focus()\n}\n\nfunction onHistoryLoad(loaded: Record<string, any>) {\n const next: Record<string, any> = { ...values.value }\n for (const item of props.items) {\n if (item.type === 'separator') continue\n if (item.key in loaded) next[item.key] = loaded[item.key] ?? null\n }\n values.value = next\n emitChange()\n}\n\ndefineExpose({ clearFilter, focusFilter })\n\nfunction handleFilterKeydown(event: KeyboardEvent) {\n if (event.key !== 'Enter') return\n\n // Allow Enter in textarea for line breaks\n const target = event.target as HTMLElement\n if (target?.tagName === 'TEXTAREA') return\n\n event.preventDefault()\n confirm()\n}\n\nfunction handleDropdownFilterInput(item: FilterItem, text: string) {\n if (item.onInnerSearch) item.onInnerSearch(text)\n}\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Szűrők\" :position=\"position\" @close=\"emit('close')\">\n <div class=\"data-filters\" @keydown=\"handleFilterKeydown\">\n <div\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"data-filters__field\"\n :class=\"{ 'data-filters__field--full': item.fullWidth || item.type === 'separator' }\"\n >\n <hr v-if=\"item.type === 'separator'\" class=\"data-filters__separator\" />\n <template v-else-if=\"item.type === 'checkbox'\">\n <Checkbox\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as boolean) ?? false\"\n :label=\"item.label ?? item.key\"\n @update:model-value=\"(val) => update(item, val)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else-if=\"['text', 'number', 'textarea'].includes(item.type)\">\n <TextInput\n :type=\"item.type as TextInputType\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as string) ?? ''\"\n :label=\"item.label ?? item.key\"\n :placeholder=\"item.placeholder\"\n @update:model-value=\"(val) => update(item, val || null)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else-if=\"item.type === 'date' || item.type === 'datetime'\">\n <label class=\"c-label\" :for=\"`df-${item.key}`\">{{ item.label ?? item.key }}</label>\n <DatePicker\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as PickedDate) ?? null\"\n :config=\"buildDatePickerConfig(item)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n <template v-else-if=\"item.type === 'daterange' || item.type === 'datetimerange'\">\n <span class=\"c-label\">{{ item.label ?? item.key }}</span>\n <DateRangePicker\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as PickedUtcRange) ?? null\"\n :config=\"buildDateRangePickerConfig(item)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n <template v-else-if=\"item.type === 'dropdown'\">\n <span class=\"c-label\">{{ item.label ?? item.key }}</span>\n <DropdownSelect\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as DropdownOption | DropdownOption[] | null) ?? null\"\n :options=\"item.options ?? []\"\n :config=\"{\n ...(item.config ?? {}),\n placeholder: item.placeholder ?? 'Válassz...',\n clearable: true,\n filterable: true,\n }\"\n @filter-input=\"handleDropdownFilterInput(item, $event)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n </div>\n </div>\n <div class=\"data-filters__footer\">\n <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Szűrők törlése\"\n aria-label=\"Szűrők törlése\"\n size=\"small\"\n @click=\"clearAll\"\n />\n <Button label=\"Szűrés\" aria-label=\"Szűrés\" type=\"success\" @click=\"confirm\" />\n </div>\n <template v-if=\"historyEnabled\">\n <hr class=\"separator my-3\" />\n <FiltersHistory\n :items=\"items\"\n :values=\"values\"\n :storage-key=\"storageKey\"\n @load=\"onHistoryLoad\"\n />\n </template>\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-filters.scss\"></style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgDA,IAAM,IAAQ,GAQR,IAAO,GAKP,IAAS,EAAyB,EAAkB,EAAM,OAAO,EAAM,YAAY,EAAK,CAAC,GACzF,IAAa,EAAyB,CAAC,CAAC;EAE9C,SAAS,EAAa,GAAa,GAAS;GAC1C,AAAI,IAAI,EAAW,MAAM,KAAO,IAC3B,OAAO,EAAW,MAAM;EAC/B;EAEA,SAAS,EAAsB,GAAoC;GACjE,OAAO;IACL,GAAI,EAAK,UAAU,CAAC;IACpB,UAAU,EAAK,SAAS;IACxB,aAAa,EAAK,gBAAgB,EAAK,SAAS,aAAa,YAAY;GAC3E;EACF;EAEA,SAAS,EAA2B,GAAyC;GAC3E,OAAO;IACL,GAAI,EAAK,UAAU,CAAC;IACpB,GAAK,EAAK,YAAgC,CAAC,IAArB,EAAE,SAAS,GAAK;IACtC,UAAU,EAAK,SAAS;GAC1B;EACF;EAEA,SAAS,EAAO,GAAkB,GAAY;GAC5C,IAAM,IAAS,OAAO,KAAU,WAAW,EAAM,KAAK,IAAI;GAG1D,AAFA,EAAO,QAAQ;IAAE,GAAG,EAAO;KAAQ,EAAK,MAAM;GAAO,GACjD,EAAK,YAAU,EAAK,SAAS,CAAM,GAClC,EAAM,QAAM,EAAW;EAC9B;EAEA,IAAM,IAAmB,QACvB,OAAO,OAAO,EAAO,KAAK,EAAE,MAAM,MAAM,MAAM,QAAQ,MAAM,MAAM,MAAM,KAAA,CAAS,CACnF;EAEA,SAAS,IAAgC;GACvC,IAAM,IAAmC,CAAC;GAC1C,KAAK,IAAM,KAAQ,EAAM,OAAO;IAC9B,IAAI,EAAK,SAAS,aAAa;IAC/B,IAAM,IAAM,EAAO,MAAM,EAAK;IAC9B,AAAI,EAAK,cACP,OAAO,OAAO,GAAa,EAAK,YAAY,CAAG,KAAK,CAAC,CAAC,IAC7C,EAAK,SAAS,UAAU,EAAK,SAAS,aAC/C,EAAY,EAAK,OAAO,GAAK,OAAO,IAEpC,EAAY,EAAK,OAAO;GAE5B;GACA,OAAO;IAAE,QAAQ,EAAkB,EAAO,KAAK;IAAG,aAAa,EAAkB,CAAW;GAAE;EAChG;EAEA,SAAS,IAAa;GAEpB,AADI,EAAM,aAAW,EAAkB,EAAM,OAAO,EAAO,KAAK,GAChE,EAAK,UAAU,EAAc,CAAC;EAChC;EAEA,SAAS,IAAU;GAEjB,AADA,EAAW,GACX,EAAK,OAAO;EACd;EAEA,SAAS,IAAW;GAElB,AADA,EAAO,QAAQ,CAAC,GAChB,EAAW;EACb;EAEA,SAAS,EAAY,GAAa;GAEhC,AADA,EAAO,QAAQ;IAAE,GAAG,EAAO;KAAQ,IAAM;GAAK,GAC9C,EAAW;EACb;EAEA,SAAS,EAAY,GAAa;GAChC,IAAM,IAAM,EAAW,MAA8B;GAChD,MAED,OAAO,EAAG,gBAAiB,aAAY,EAAG,aAAa,IAClD,OAAO,EAAG,SAAU,cAAY,EAAG,MAAM;EACpD;EAEA,SAAS,EAAc,GAA6B;GAClD,IAAM,IAA4B,EAAE,GAAG,EAAO,MAAM;GACpD,KAAK,IAAM,KAAQ,EAAM,OACnB,EAAK,SAAS,eACd,EAAK,OAAO,MAAQ,EAAK,EAAK,OAAO,EAAO,EAAK,QAAQ;GAG/D,AADA,EAAO,QAAQ,GACf,EAAW;EACb;EAEA,EAAa;GAAE;GAAa;EAAY,CAAC;EAEzC,SAAS,EAAoB,GAAsB;GAC7C,EAAM,QAAQ,WAGH,EAAM,QACT,YAAY,eAExB,EAAM,eAAe,GACrB,EAAQ;EACV;EAEA,SAAS,EAA0B,GAAkB,GAAc;GACjE,AAAI,EAAK,iBAAe,EAAK,cAAc,CAAI;EACjD;yBAIE,EAuFU,GAAA;GAvFA,MAAM,EAAA;GAAM,OAAM;GAAU,UAAU,EAAA;GAAW,SAAK,AAAA,EAAA,QAAA,MAAE,EAAI,OAAA;;oBAkE9D;IAjEN,EAiEM,OAAA;KAjED,OAAM;KAAgB,WAAS;gBAClC,EA+DM,GAAA,MAAA,EA9DW,EAAA,QAAR,YADT,EA+DM,OAAA;KA7DH,KAAK,EAAK;KACX,OAAK,EAAA,CAAC,uBAAqB,EAAA,6BACY,EAAK,aAAa,EAAK,SAAI,YAAA,CAAA,CAAA;QAExD,EAAK,SAAI,eAAA,EAAA,GAAnB,EAAuE,MAAvE,CAAuE,KAClD,EAAK,SAAI,cAAA,EAAA,GAC5B,EAME,GANF,EAME;;;KALC,MAAM,MAAY,EAAa,EAAK,KAAK,CAAE;KAC3C,eAAc,EAAA,MAAO,EAAK,QAAG;KAC7B,OAAO,EAAK,SAAS,EAAK;KAC1B,wBAAqB,MAAQ,EAAO,GAAM,CAAG;wBACtC,EAAK,MAAM,GAAA,MAAA,IAAA;KAAA;KAAA;KAAA;IAAA,CAAA,KAAA;;;;MAG6B,SAAS,EAAK,IAAI,KAAA,EAAA,GACpE,EASE,GATF,EASE;;KARC,MAAM,EAAK;;KACX,MAAM,MAAY,EAAa,EAAK,KAAK,CAAE;KAC3C,IAAE,MAAQ,EAAK;KACf,eAAc,EAAA,MAAO,EAAK,QAAG;KAC7B,OAAO,EAAK,SAAS,EAAK;KAC1B,aAAa,EAAK;KAClB,wBAAqB,MAAQ,EAAO,GAAM,KAAG,IAAA;wBACtC,EAAK,MAAM,GAAA,MAAA,IAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA,CAAA,KAGF,EAAK,SAAI,UAAe,EAAK,SAAI,cAAA,EAAA,GAAtD,EASW,GAAA,EAAA,KAAA,EAAA,GAAA,CART,EAAmF,SAAA;KAA5E,OAAM;KAAW,KAAG,MAAQ,EAAK;SAAU,EAAK,SAAS,EAAK,GAAG,GAAA,GAAA,CAAA,GACxE,EAME,GAAA;;KALC,MAAM,MAAY,EAAa,EAAK,KAAK,CAAE;KAC3C,IAAE,MAAQ,EAAK;KACf,eAAc,EAAA,MAAO,EAAK,QAAG;KAC7B,QAAQ,EAAsB,CAAI;KAClC,wBAAqB,MAAQ,EAAO,GAAM,CAAG;;;;;;gBAG7B,EAAK,SAAI,eAAoB,EAAK,SAAI,mBAAA,EAAA,GAA3D,EAQW,GAAA,EAAA,KAAA,EAAA,GAAA,CAPT,EAAyD,QAAzD,GAAyD,EAAhC,EAAK,SAAS,EAAK,GAAG,GAAA,CAAA,GAC/C,EAKE,GAAA;;KAJC,MAAM,MAAY,EAAa,EAAK,KAAK,CAAE;KAC3C,eAAc,EAAA,MAAO,EAAK,QAAG;KAC7B,QAAQ,EAA2B,CAAI;KACvC,wBAAqB,MAAQ,EAAO,GAAM,CAAG;;;;;gBAG7B,EAAK,SAAI,cAAA,EAAA,GAA9B,EAeW,GAAA,EAAA,KAAA,EAAA,GAAA,CAdT,EAAyD,QAAzD,GAAyD,EAAhC,EAAK,SAAS,EAAK,GAAG,GAAA,CAAA,GAC/C,EAYE,GAAA;;KAXC,MAAM,MAAY,EAAa,EAAK,KAAK,CAAE;KAC3C,eAAc,EAAA,MAAO,EAAK,QAAG;KAC7B,SAAS,EAAK,WAAO,CAAA;KACrB,QAAM;SAAsB,EAAK,UAAM,CAAA;mBAAoC,EAAK,eAAW;;;;KAM3F,gBAAY,MAAE,EAA0B,GAAM,CAAM;KACpD,wBAAqB,MAAQ,EAAO,GAAM,CAAG;;;;;;;;IAKtD,EAUM,OAVN,GAUM,CATJ,EAOE,GAAA;KANA,MAAK;KACJ,UAAQ,CAAG,EAAA;KACZ,OAAM;KACN,cAAW;KACX,MAAK;KACJ,SAAO;+BAEV,EAA6E,GAAA;KAArE,OAAM;KAAS,cAAW;KAAS,MAAK;KAAW,SAAO;;IAEpD,EAAA,kBAAA,EAAA,GAAhB,EAQW,GAAA,EAAA,KAAA,EAAA,GAAA,CAAA,AAAA,EAAA,OAPT,EAA6B,MAAA,EAAzB,OAAM,iBAAgB,GAAA,MAAA,EAAA,GAC1B,EAKE,GAAA;KAJC,OAAO,EAAA;KACP,QAAQ,EAAA;KACR,eAAa,EAAA;KACb,QAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components93.js","names":[],"sources":["../src/components/data-table/DataFilters.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\n\nexport interface FilterItem {\n type: FilterItemType\n key: string\n label?: string\n placeholder?: string\n value?: any\n options?: DropdownOption[]\n fullWidth?: boolean\n config?: Record<string, any>\n displayClass?: string\n transformer?: (value: any) => Record<string, any> | null | undefined\n onInnerSearch?: (value: string) => void\n onChange?: (value: any) => void\n}\n\nexport interface FilterResponse {\n values: Record<string, any>\n transformed: Record<string, any>\n}\n\nexport interface DataFiltersProps {\n items: FilterItem[]\n open?: boolean\n position?: SidebarPosition\n lazy?: boolean\n handleUrl?: boolean\n historyEnabled?: boolean\n storageKey?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport DateRangePicker from '@/components/DateRangePicker.vue'\nimport DropdownSelect from '@/components/DropdownSelect.vue'\nimport TextInput, { type TextInputType } from '@/components/TextInput.vue'\nimport Button from '@/components/Button.vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport FiltersHistory from '@/components/data-table/FiltersHistory.vue'\nimport type { DatePickerConfig, DateRangePickerConfig } from '@/types/datepickers'\nimport type { FilterItemType, PickedDate, PickedUtcRange } from '@/types/types'\nimport { filterEmptyValues, getDefaultFilters, writeFilterParams } from '@/utils/dataFilters'\n\nconst props = withDefaults(defineProps<DataFiltersProps>(), {\n open: false,\n position: 'left',\n lazy: true,\n handleUrl: false,\n historyEnabled: true,\n})\n\nconst emit = defineEmits<{\n close: []\n change: [response: FilterResponse]\n}>()\n\nconst values = ref<Record<string, any>>(getDefaultFilters(props.items, props.storageKey, false))\nconst filterRefs = ref<Record<string, any>>({})\n\nfunction setFilterRef(key: string, el: any) {\n if (el) filterRefs.value[key] = el\n else delete filterRefs.value[key]\n}\n\nfunction buildDatePickerConfig(item: FilterItem): DatePickerConfig {\n return {\n ...(item.config ?? {}),\n showTime: item.type === 'datetime',\n placeholder: item.placeholder ?? (item.type === 'datetime' ? 'Időpont' : 'Dátum'),\n }\n}\n\nfunction buildDateRangePickerConfig(item: FilterItem): DateRangePickerConfig {\n return {\n ...(item.config ?? {}),\n ...(!item.fullWidth ? { compact: true } : {}),\n showTime: item.type === 'datetimerange',\n }\n}\n\nfunction update(item: FilterItem, value: any) {\n const stored = typeof value === 'string' ? value.trim() : value\n values.value = { ...values.value, [item.key]: stored }\n if (item.onChange) item.onChange(stored)\n if (!props.lazy) emitChange()\n}\n\nconst hasActiveFilters = computed(() =>\n Object.values(values.value).some((v) => v !== null && v !== '' && v !== undefined),\n)\n\nfunction buildResponse(): FilterResponse {\n const transformed: Record<string, any> = {}\n for (const item of props.items) {\n if (item.type === 'separator') continue\n const val = values.value[item.key]\n if (item.transformer) {\n Object.assign(transformed, item.transformer(val) ?? {})\n } else if (item.type === 'date' || item.type === 'datetime') {\n transformed[item.key] = val?.utc ?? val\n } else {\n transformed[item.key] = val\n }\n }\n return { values: filterEmptyValues(values.value), transformed: filterEmptyValues(transformed) }\n}\n\nfunction emitChange() {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponse())\n}\n\nfunction confirm() {\n emitChange()\n emit('close')\n}\n\nfunction clearAll() {\n values.value = {}\n emitChange()\n}\n\nfunction clearFilter(key: string) {\n values.value = { ...values.value, [key]: null }\n emitChange()\n}\n\nfunction focusFilter(key: string) {\n const el = (filterRefs.value as Record<string, any>)[key]\n if (!el) return\n\n if (typeof el.focusAndOpen === 'function') el.focusAndOpen()\n else if (typeof el.focus === 'function') el.focus()\n}\n\nfunction onHistoryLoad(loaded: Record<string, any>) {\n const next: Record<string, any> = { ...values.value }\n for (const item of props.items) {\n if (item.type === 'separator') continue\n if (item.key in loaded) next[item.key] = loaded[item.key] ?? null\n }\n values.value = next\n emitChange()\n}\n\ndefineExpose({ clearFilter, focusFilter })\n\nfunction handleFilterKeydown(event: KeyboardEvent) {\n if (event.key !== 'Enter') return\n\n // Allow Enter in textarea for line breaks\n const target = event.target as HTMLElement\n if (target?.tagName === 'TEXTAREA') return\n\n event.preventDefault()\n confirm()\n}\n\nfunction handleDropdownFilterInput(item: FilterItem, text: string) {\n if (item.onInnerSearch) item.onInnerSearch(text)\n}\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Szűrők\" :position=\"position\" @close=\"emit('close')\">\n <div class=\"data-filters\" @keydown=\"handleFilterKeydown\">\n <div\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"data-filters__field\"\n :class=\"{ 'data-filters__field--full': item.fullWidth || item.type === 'separator' }\"\n >\n <hr v-if=\"item.type === 'separator'\" class=\"data-filters__separator\" />\n <template v-else-if=\"item.type === 'checkbox'\">\n <Checkbox\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as boolean) ?? false\"\n :label=\"item.label ?? item.key\"\n @update:model-value=\"(val) => update(item, val)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else-if=\"['text', 'number', 'textarea'].includes(item.type)\">\n <TextInput\n :type=\"item.type as TextInputType\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as string) ?? ''\"\n :label=\"item.label ?? item.key\"\n :placeholder=\"item.placeholder\"\n @update:model-value=\"(val) => update(item, val || null)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else-if=\"item.type === 'date' || item.type === 'datetime'\">\n <label class=\"c-label\" :for=\"`df-${item.key}`\">{{ item.label ?? item.key }}</label>\n <DatePicker\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as PickedDate) ?? null\"\n :config=\"buildDatePickerConfig(item)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n <template v-else-if=\"item.type === 'daterange' || item.type === 'datetimerange'\">\n <span class=\"c-label\">{{ item.label ?? item.key }}</span>\n <DateRangePicker\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as PickedUtcRange) ?? null\"\n :config=\"buildDateRangePickerConfig(item)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n <template v-else-if=\"item.type === 'dropdown'\">\n <span class=\"c-label\">{{ item.label ?? item.key }}</span>\n <DropdownSelect\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as string) ?? null\"\n :options=\"item.options ?? []\"\n :config=\"{\n ...(item.config ?? {}),\n placeholder: item.placeholder ?? 'Válassz...',\n clearable: true,\n filterable: true,\n }\"\n @filter-input=\"handleDropdownFilterInput(item, $event)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n </div>\n </div>\n <div class=\"data-filters__footer\">\n <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Szűrők törlése\"\n aria-label=\"Szűrők törlése\"\n size=\"small\"\n @click=\"clearAll\"\n />\n <Button label=\"Szűrés\" aria-label=\"Szűrés\" type=\"success\" @click=\"confirm\" />\n </div>\n <template v-if=\"historyEnabled\">\n <hr class=\"separator my-3\" />\n <FiltersHistory\n :items=\"items\"\n :values=\"values\"\n :storage-key=\"storageKey\"\n @load=\"onHistoryLoad\"\n />\n </template>\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-filters.scss\"></style>\n"],"mappings":""}
1
+ {"version":3,"file":"admins-components93.js","names":[],"sources":["../src/components/data-table/DataFilters.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\n\nexport interface FilterItem {\n type: FilterItemType\n key: string\n label?: string\n placeholder?: string\n value?: any\n options?: DropdownOption[]\n fullWidth?: boolean\n config?: Record<string, any>\n displayClass?: string\n transformer?: (value: any) => Record<string, any> | null | undefined\n onInnerSearch?: (value: string) => void\n onChange?: (value: any) => void\n}\n\nexport interface FilterResponse {\n values: Record<string, any>\n transformed: Record<string, any>\n}\n\nexport interface DataFiltersProps {\n items: FilterItem[]\n open?: boolean\n position?: SidebarPosition\n lazy?: boolean\n handleUrl?: boolean\n historyEnabled?: boolean\n storageKey?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport DateRangePicker from '@/components/DateRangePicker.vue'\nimport DropdownSelect from '@/components/DropdownSelect.vue'\nimport TextInput, { type TextInputType } from '@/components/TextInput.vue'\nimport Button from '@/components/Button.vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport FiltersHistory from '@/components/data-table/FiltersHistory.vue'\nimport type { DatePickerConfig, DateRangePickerConfig } from '@/types/datepickers'\nimport type { FilterItemType, PickedDate, PickedUtcRange } from '@/types/types'\nimport { filterEmptyValues, getDefaultFilters, writeFilterParams } from '@/utils/dataFilters'\n\nconst props = withDefaults(defineProps<DataFiltersProps>(), {\n open: false,\n position: 'left',\n lazy: true,\n handleUrl: false,\n historyEnabled: true,\n})\n\nconst emit = defineEmits<{\n close: []\n change: [response: FilterResponse]\n}>()\n\nconst values = ref<Record<string, any>>(getDefaultFilters(props.items, props.storageKey, false))\nconst filterRefs = ref<Record<string, any>>({})\n\nfunction setFilterRef(key: string, el: any) {\n if (el) filterRefs.value[key] = el\n else delete filterRefs.value[key]\n}\n\nfunction buildDatePickerConfig(item: FilterItem): DatePickerConfig {\n return {\n ...(item.config ?? {}),\n showTime: item.type === 'datetime',\n placeholder: item.placeholder ?? (item.type === 'datetime' ? 'Időpont' : 'Dátum'),\n }\n}\n\nfunction buildDateRangePickerConfig(item: FilterItem): DateRangePickerConfig {\n return {\n ...(item.config ?? {}),\n ...(!item.fullWidth ? { compact: true } : {}),\n showTime: item.type === 'datetimerange',\n }\n}\n\nfunction update(item: FilterItem, value: any) {\n const stored = typeof value === 'string' ? value.trim() : value\n values.value = { ...values.value, [item.key]: stored }\n if (item.onChange) item.onChange(stored)\n if (!props.lazy) emitChange()\n}\n\nconst hasActiveFilters = computed(() =>\n Object.values(values.value).some((v) => v !== null && v !== '' && v !== undefined),\n)\n\nfunction buildResponse(): FilterResponse {\n const transformed: Record<string, any> = {}\n for (const item of props.items) {\n if (item.type === 'separator') continue\n const val = values.value[item.key]\n if (item.transformer) {\n Object.assign(transformed, item.transformer(val) ?? {})\n } else if (item.type === 'date' || item.type === 'datetime') {\n transformed[item.key] = val?.utc ?? val\n } else {\n transformed[item.key] = val\n }\n }\n return { values: filterEmptyValues(values.value), transformed: filterEmptyValues(transformed) }\n}\n\nfunction emitChange() {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponse())\n}\n\nfunction confirm() {\n emitChange()\n emit('close')\n}\n\nfunction clearAll() {\n values.value = {}\n emitChange()\n}\n\nfunction clearFilter(key: string) {\n values.value = { ...values.value, [key]: null }\n emitChange()\n}\n\nfunction focusFilter(key: string) {\n const el = (filterRefs.value as Record<string, any>)[key]\n if (!el) return\n\n if (typeof el.focusAndOpen === 'function') el.focusAndOpen()\n else if (typeof el.focus === 'function') el.focus()\n}\n\nfunction onHistoryLoad(loaded: Record<string, any>) {\n const next: Record<string, any> = { ...values.value }\n for (const item of props.items) {\n if (item.type === 'separator') continue\n if (item.key in loaded) next[item.key] = loaded[item.key] ?? null\n }\n values.value = next\n emitChange()\n}\n\ndefineExpose({ clearFilter, focusFilter })\n\nfunction handleFilterKeydown(event: KeyboardEvent) {\n if (event.key !== 'Enter') return\n\n // Allow Enter in textarea for line breaks\n const target = event.target as HTMLElement\n if (target?.tagName === 'TEXTAREA') return\n\n event.preventDefault()\n confirm()\n}\n\nfunction handleDropdownFilterInput(item: FilterItem, text: string) {\n if (item.onInnerSearch) item.onInnerSearch(text)\n}\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Szűrők\" :position=\"position\" @close=\"emit('close')\">\n <div class=\"data-filters\" @keydown=\"handleFilterKeydown\">\n <div\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"data-filters__field\"\n :class=\"{ 'data-filters__field--full': item.fullWidth || item.type === 'separator' }\"\n >\n <hr v-if=\"item.type === 'separator'\" class=\"data-filters__separator\" />\n <template v-else-if=\"item.type === 'checkbox'\">\n <Checkbox\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as boolean) ?? false\"\n :label=\"item.label ?? item.key\"\n @update:model-value=\"(val) => update(item, val)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else-if=\"['text', 'number', 'textarea'].includes(item.type)\">\n <TextInput\n :type=\"item.type as TextInputType\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as string) ?? ''\"\n :label=\"item.label ?? item.key\"\n :placeholder=\"item.placeholder\"\n @update:model-value=\"(val) => update(item, val || null)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else-if=\"item.type === 'date' || item.type === 'datetime'\">\n <label class=\"c-label\" :for=\"`df-${item.key}`\">{{ item.label ?? item.key }}</label>\n <DatePicker\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as PickedDate) ?? null\"\n :config=\"buildDatePickerConfig(item)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n <template v-else-if=\"item.type === 'daterange' || item.type === 'datetimerange'\">\n <span class=\"c-label\">{{ item.label ?? item.key }}</span>\n <DateRangePicker\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as PickedUtcRange) ?? null\"\n :config=\"buildDateRangePickerConfig(item)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n <template v-else-if=\"item.type === 'dropdown'\">\n <span class=\"c-label\">{{ item.label ?? item.key }}</span>\n <DropdownSelect\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as DropdownOption | DropdownOption[] | null) ?? null\"\n :options=\"item.options ?? []\"\n :config=\"{\n ...(item.config ?? {}),\n placeholder: item.placeholder ?? 'Válassz...',\n clearable: true,\n filterable: true,\n }\"\n @filter-input=\"handleDropdownFilterInput(item, $event)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n </div>\n </div>\n <div class=\"data-filters__footer\">\n <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Szűrők törlése\"\n aria-label=\"Szűrők törlése\"\n size=\"small\"\n @click=\"clearAll\"\n />\n <Button label=\"Szűrés\" aria-label=\"Szűrés\" type=\"success\" @click=\"confirm\" />\n </div>\n <template v-if=\"historyEnabled\">\n <hr class=\"separator my-3\" />\n <FiltersHistory\n :items=\"items\"\n :values=\"values\"\n :storage-key=\"storageKey\"\n @load=\"onHistoryLoad\"\n />\n </template>\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-filters.scss\"></style>\n"],"mappings":""}
package/dist/main.css CHANGED
@@ -1 +1 @@
1
- @import"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&display=swap";@import"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/fontawesome.min.css";@import"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/solid.min.css";@import"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/regular.min.css";:root{--ac-font-family: 'Geist', 'Segoe UI', system-ui, -apple-system, sans-serif;--background-50: #f7f9f9;--background-100: #eff3f3;--neutral-0: #fff;--neutral-50: #f2f4f4;--neutral-100: #e5e9ea;--neutral-150: #dae0e1;--neutral-200: #cbd3d4;--neutral-250: #bec8ca;--neutral-300: #b0bdbf;--neutral-400: #96a7a9;--neutral-500: #7c9194;--neutral-600: #637476;--neutral-700: #4a5759;--neutral-800: #323a3b;--neutral-900: #1f2d2d;--site-50: #ffebe1;--site-100: #ffceb6;--site-200: #f79d71;--site-300: #f5844e;--site-500: #f26522;--site-600: #da5b1f;--site-700: #c2511b;--premium-50: #dfefef;--premium-100: #cfe7e6;--premium-200: #bfdfde;--premium-300: #9ed0ce;--premium-400: #7ec0bd;--premium-500: #5eb0ad;--premium-600: #4b8d8a;--premium-700: #386a68;--pulse-10: #e0d8f1;--pulse-100: #a18ad5;--pulse-400: #7250c0;--pulse-500: #623cb9;--ac-color-primary: #146eb4;--ac-color-primary-rgb: 20, 110, 180;--ac-color-error: #d92d20;--ac-color-warning: #dc6803;--ac-color-success: #067647;--ac-color-success-rgb: 6, 118, 71;--ac-color-info: #1570ef;--ac-color-info-rgb: 21, 112, 239;--ac-color-text: var(--neutral-800);--ac-color-darker-blue: #1246d4;--ac-color-lighter-blue: rgb(45 126 241);--ac-input-padding: 0.5rem;--ac-input-padding-sm: 0.3125rem;--ac-input-padding-lg: 0.75rem;--ac-field-padding: 0.5rem 0.75rem;--ac-field-padding-sm: 0.3125rem 0.625rem;--ac-field-padding-lg: 0.6875rem 1rem;--ac-field-font-size: 0.825rem;--ac-field-font-size-sm: 0.75rem;--ac-field-font-size-lg: 0.9375rem;--ac-field-border-radius: 0.5rem;--ac-field-border-radius-sm: 0.375rem;--ac-field-border-radius-lg: 0.625rem;--ac-dropdown-max-height: 18rem;--ac-section-bottom-margin: 1rem;--ac-placeholder-color: var(--neutral-600)}@media(prefers-reduced-motion: no-preference){html{interpolate-size:allow-keywords}}.ac-component{font-family:var(--ac-font-family);letter-spacing:-0.18px;color:var(--neutral-800);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box}.ac-component.v-tooltip{background:var(--neutral-800);font-family:var(--ac-font-family);color:var(--neutral-0);font-size:.8125rem;font-weight:400;line-height:1.4;padding:var(--ac-field-padding);border-radius:.5rem;white-space:normal;width:max-content;box-shadow:0 2px 6px rgba(0,0,0,.12)}.ac-component{--vf-ring-color: var(--ac-color-primary);--vf-primary: var(--ac-color-primary);--vf-border-color-checked: var(--ac-color-primary)}.ac-component img,.ac-component picture,.ac-component video,.ac-component canvas,.ac-component svg{display:block;max-width:100%}.ac-component input,.ac-component button,.ac-component textarea,.ac-component select{font-family:inherit;letter-spacing:inherit}.ac-component p,.ac-component h1,.ac-component h2,.ac-component h3,.ac-component h4,.ac-component h5,.ac-component h6{overflow-wrap:break-word}.ac-component *{margin:0}.ac-component .fa-tag,.ac-component .fa-arrow-rotate-right{transform:translateY(0.5px)}.ac-component .align-center-fix{transform:translateY(0.5px)}.ac-component hr.separator{border:none;border-top:1px solid var(--neutral-200);margin:.5rem 0}.ac-component .lh-1{line-height:1}.ac-component .flex-center{display:flex;align-items:center}.ac-component .click-expand{--expand-size: 0.5rem}.ac-component .click-expand::after{content:"";position:absolute;inset:calc(-1*var(--expand-size))}.ac-component .m-0{margin:0 !important}.ac-component .mx-0{margin-left:0 !important;margin-right:0 !important}.ac-component .my-0{margin-top:0 !important;margin-bottom:0 !important}.ac-component .mt-0{margin-top:0 !important}.ac-component .mb-0{margin-bottom:0 !important}.ac-component .ml-0{margin-left:0 !important}.ac-component .mr-0{margin-right:0 !important}.ac-component .m-1{margin:.25rem !important}.ac-component .mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.ac-component .my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.ac-component .mt-1{margin-top:.25rem !important}.ac-component .mb-1{margin-bottom:.25rem !important}.ac-component .ml-1{margin-left:.25rem !important}.ac-component .mr-1{margin-right:.25rem !important}.ac-component .m-2{margin:.5rem !important}.ac-component .mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.ac-component .my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.ac-component .mt-2{margin-top:.5rem !important}.ac-component .mb-2{margin-bottom:.5rem !important}.ac-component .ml-2{margin-left:.5rem !important}.ac-component .mr-2{margin-right:.5rem !important}.ac-component .m-3{margin:1rem !important}.ac-component .mx-3{margin-left:1rem !important;margin-right:1rem !important}.ac-component .my-3{margin-top:1rem !important;margin-bottom:1rem !important}.ac-component .mt-3{margin-top:1rem !important}.ac-component .mb-3{margin-bottom:1rem !important}.ac-component .ml-3{margin-left:1rem !important}.ac-component .mr-3{margin-right:1rem !important}.ac-component .m-4{margin:1.5rem !important}.ac-component .mx-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.ac-component .my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.ac-component .mt-4{margin-top:1.5rem !important}.ac-component .mb-4{margin-bottom:1.5rem !important}.ac-component .ml-4{margin-left:1.5rem !important}.ac-component .mr-4{margin-right:1.5rem !important}.ac-component .m-5{margin:3rem !important}.ac-component .mx-5{margin-left:3rem !important;margin-right:3rem !important}.ac-component .my-5{margin-top:3rem !important;margin-bottom:3rem !important}.ac-component .mt-5{margin-top:3rem !important}.ac-component .mb-5{margin-bottom:3rem !important}.ac-component .ml-5{margin-left:3rem !important}.ac-component .mr-5{margin-right:3rem !important}.ac-component .m-auto{margin:auto !important}.ac-component .mx-auto{margin-left:auto !important;margin-right:auto !important}.ac-component .my-auto{margin-top:auto !important;margin-bottom:auto !important}.ac-component .mt-auto{margin-top:auto !important}.ac-component .mb-auto{margin-bottom:auto !important}.ac-component .ml-auto{margin-left:auto !important}.ac-component .mr-auto{margin-right:auto !important}.ac-component .p-0{padding:0 !important}.ac-component .px-0{padding-left:0 !important;padding-right:0 !important}.ac-component .py-0{padding-top:0 !important;padding-bottom:0 !important}.ac-component .pt-0{padding-top:0 !important}.ac-component .pb-0{padding-bottom:0 !important}.ac-component .pl-0{padding-left:0 !important}.ac-component .pr-0{padding-right:0 !important}.ac-component .p-1{padding:.25rem !important}.ac-component .px-1{padding-left:.25rem !important;padding-right:.25rem !important}.ac-component .py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.ac-component .pt-1{padding-top:.25rem !important}.ac-component .pb-1{padding-bottom:.25rem !important}.ac-component .pl-1{padding-left:.25rem !important}.ac-component .pr-1{padding-right:.25rem !important}.ac-component .p-2{padding:.5rem !important}.ac-component .px-2{padding-left:.5rem !important;padding-right:.5rem !important}.ac-component .py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.ac-component .pt-2{padding-top:.5rem !important}.ac-component .pb-2{padding-bottom:.5rem !important}.ac-component .pl-2{padding-left:.5rem !important}.ac-component .pr-2{padding-right:.5rem !important}.ac-component .p-3{padding:1rem !important}.ac-component .px-3{padding-left:1rem !important;padding-right:1rem !important}.ac-component .py-3{padding-top:1rem !important;padding-bottom:1rem !important}.ac-component .pt-3{padding-top:1rem !important}.ac-component .pb-3{padding-bottom:1rem !important}.ac-component .pl-3{padding-left:1rem !important}.ac-component .pr-3{padding-right:1rem !important}.ac-component .p-4{padding:1.5rem !important}.ac-component .px-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.ac-component .py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.ac-component .pt-4{padding-top:1.5rem !important}.ac-component .pb-4{padding-bottom:1.5rem !important}.ac-component .pl-4{padding-left:1.5rem !important}.ac-component .pr-4{padding-right:1.5rem !important}.ac-component .p-5{padding:3rem !important}.ac-component .px-5{padding-left:3rem !important;padding-right:3rem !important}.ac-component .py-5{padding-top:3rem !important;padding-bottom:3rem !important}.ac-component .pt-5{padding-top:3rem !important}.ac-component .pb-5{padding-bottom:3rem !important}.ac-component .pl-5{padding-left:3rem !important}.ac-component .pr-5{padding-right:3rem !important}.ac-component .gap-0{gap:0 !important}.ac-component .gap-1{gap:.25rem !important}.ac-component .gap-2{gap:.5rem !important}.ac-component .gap-3{gap:1rem !important}.ac-component .gap-4{gap:1.5rem !important}.ac-component .gap-5{gap:3rem !important}.ac-component .d-flex{display:flex !important}.ac-component .d-inline-flex{display:inline-flex !important}.ac-component .d-block{display:block !important}.ac-component .d-inline-block{display:inline-block !important}.ac-component .flex-wrap{flex-wrap:wrap}.ac-component .flex-column{flex-direction:column}.ac-component .text-center{text-align:center}.ac-component .w-100{width:100% !important}.ac-component .mw-100{max-width:100% !important}.ac-component .h-100{height:100% !important}.ac-component .mh-100{max-height:100% !important}.ac-component .pointer{cursor:pointer}.ac-component .nowrap{white-space:nowrap}.ac-component .align-items-center{align-items:center}.ac-component .text-primary,.ac-component .text-normal{color:var(--neutral-800) !important}.ac-component .text-info{color:var(--ac-color-info) !important}.ac-component .text-success{color:var(--ac-color-success) !important}.ac-component .text-warning{color:var(--ac-color-warning) !important}.ac-component .text-error,.ac-component .text-danger{color:var(--ac-color-error) !important}.ac-component .lh-normal{line-height:normal !important}.ac-component .lh-1{line-height:1 !important}.ac-component .lh-inherit{line-height:inherit !important}.ac-component .hide,.ac-component .hidden{display:none !important}.ac-component .c-wrapper{position:relative}.ac-component .c-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ac-component .c-field-size{font-size:var(--ac-field-font-size);padding:var(--ac-field-padding)}.ac-component .c-field-size--sm,.ac-component .c-field-size--small{font-size:var(--ac-field-font-size-sm);padding:var(--ac-field-padding-sm)}.ac-component .c-field-size--lg,.ac-component .c-field-size--large{font-size:var(--ac-field-font-size-lg);padding:var(--ac-field-padding-lg)}.ac-component .c-type-color{--text-color: var(--neutral-800);--hover-bg-color: var(--neutral-100);--hover-text-color: var(--neutral-800);color:var(--text-color)}.ac-component .c-type-color:hover{background-color:var(--hover-bg-color);color:var(--hover-text-color)}.ac-component .c-type-color--error{--text-color: var(--ac-color-error);--hover-bg-color: var(--ac-color-error);--hover-text-color: var(--neutral-0)}.ac-component .c-type-color--success{--text-color: var(--ac-color-success);--hover-bg-color: var(--ac-color-success);--hover-text-color: var(--neutral-0)}.ac-component .c-type-color--warning{--text-color: var(--ac-color-warning);--hover-bg-color: var(--ac-color-warning);--hover-text-color: var(--neutral-0)}.ac-component .c-type-color--info{--text-color: var(--ac-color-info);--hover-bg-color: var(--ac-color-info);--hover-text-color: var(--neutral-0)}.ac-component .c-type-color--dark{--text-color: var(--neutral-0);--hover-bg-color: var(--neutral-800);--hover-text-color: var(--neutral-0)}.ac-component .c-chip{display:inline-flex;padding:0;border-radius:.25rem;background:var(--neutral-100);color:var(--neutral-700);font-size:.75rem;line-height:1.3;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ac-component .c-indicator{display:inline-flex;align-items:center;justify-content:center;min-width:1.25rem;height:1.25rem;padding:0 .375rem;border-radius:999px;background:var(--neutral-200);color:var(--neutral-700);font-family:var(--ac-font-family);font-size:.7rem;font-weight:700;font-variant-numeric:tabular-nums}.ac-component .c-scroll{scrollbar-width:thin;scrollbar-color:var(--neutral-300) rgba(0,0,0,0)}.ac-component .c-scroll::-webkit-scrollbar{width:.5rem;height:.5rem}.ac-component .c-scroll::-webkit-scrollbar-track{background:rgba(0,0,0,0)}.ac-component .c-scroll::-webkit-scrollbar-thumb{background:var(--neutral-300);border-radius:999px;border:2px solid rgba(0,0,0,0);background-clip:content-box;transition:background-color .15s}.ac-component .c-scroll::-webkit-scrollbar-thumb:hover{background:var(--neutral-500);background-clip:content-box}.ac-component .c-scroll::-webkit-scrollbar-corner{background:rgba(0,0,0,0)}.ac-component .c-placeholder{flex:1;font-style:italic;min-width:0;padding:var(--ac-input-padding);color:var(--ac-placeholder-color);user-select:none}.ac-component .c-input{width:100%;font-family:inherit;letter-spacing:-0.36px;border:none;background:rgba(0,0,0,0);padding:var(--ac-input-padding);font-size:var(--ac-field-font-size);color:var(--neutral-900)}.ac-component .c-input::placeholder{color:var(--ac-placeholder-color);font-style:italic}.ac-component .c-input:-webkit-autofill,.ac-component .c-input:-webkit-autofill:hover,.ac-component .c-input:-webkit-autofill:focus,.ac-component .c-input:-webkit-autofill:active{border-radius:inherit}.ac-component .c-input:focus,.ac-component .c-input:focus-within,.ac-component .c-input:focus-visible,.ac-component .c-focus:focus,.ac-component .c-focus:focus-within,.ac-component .c-focus:focus-visible{border-color:var(--ac-color-lighter-blue);outline:0}.ac-component .c-input-wrapper{position:relative;display:flex;flex-direction:column;gap:.25rem}.ac-component .c-textarea{resize:none}.ac-component .c-input-row{display:flex;align-items:center;font-family:inherit;border:1px solid var(--neutral-200);border-radius:var(--ac-field-border-radius);background:var(--neutral-0);font-size:var(--ac-field-font-size);color:var(--neutral-900);transition:border-color .15s}.ac-component .c-input-row::placeholder{color:var(--ac-placeholder-color);font-style:italic}.ac-component .c-input-row--disabled{background:var(--neutral-50);cursor:not-allowed}.ac-component .c-input-row:is(input,textarea){padding:var(--ac-input-padding)}.ac-component .c-input-row:hover{border-color:var(--neutral-300)}.ac-component .c-input-row:focus-within,.ac-component .c-input-row:focus,.ac-component .c-input-row:focus-visible,.ac-component .c-input-row--focus{border-color:var(--ac-color-lighter-blue);box-shadow:0 0 0 2px rgba(21,112,239,.1)}.ac-component .c-input-row:focus-within:hover,.ac-component .c-input-row:focus:hover,.ac-component .c-input-row:focus-visible:hover,.ac-component .c-input-row--focus:hover{border-color:var(--ac-color-darker-blue)}.ac-component .c-input-row--sm{border-radius:var(--ac-field-border-radius-sm);font-size:var(--ac-field-font-size-sm)}.ac-component .c-input-row--sm:is(input,textarea){padding:var(--ac-input-padding-sm)}.ac-component .c-input-row--sm .c-icon-btn{font-size:var(--ac-field-font-size-sm)}.ac-component .c-input-row--sm .c-placeholder{font-size:var(--ac-field-font-size-sm);padding:var(--ac-input-padding-sm)}.ac-component .c-input-row--sm .c-input{padding:var(--ac-input-padding-sm);font-size:var(--ac-field-font-size-sm)}.ac-component .c-input-row--lg{border-radius:var(--ac-field-border-radius-lg);font-size:var(--ac-field-font-size-lg)}.ac-component .c-input-row--lg:is(input,textarea){padding:var(--ac-input-padding-lg)}.ac-component .c-input-row--lg .c-icon-btn{font-size:var(--ac-field-font-size-lg)}.ac-component .c-input-row--lg .c-placeholder{font-size:var(--ac-field-font-size-lg);padding:var(--ac-input-padding-lg)}.ac-component .c-input-row--lg .c-input{padding:var(--ac-input-padding-lg);font-size:var(--ac-field-font-size-lg)}.ac-component .c-icon-btn{display:flex;align-items:center;justify-content:center;border:none;background:rgba(0,0,0,0);cursor:pointer;transition:color .15s}.ac-component .c-icon-btn--clear{color:var(--neutral-400);padding-left:0;padding-right:.25rem}.ac-component .c-icon-btn--clear:hover{color:var(--ac-color-error)}.ac-component .c-icon-btn--chevron{color:var(--neutral-500);transition:transform .2s}.ac-component .c-icon-btn--chevron-open{transform:rotate(180deg)}.ac-component .c-icon-btn--calendar{font-size:.925rem;color:var(--neutral-500);padding-inline:.375rem}.ac-component .c-icon-btn--calendar:hover{color:var(--site-500)}.ac-component .c-icon-btn--hidden{visibility:hidden;pointer-events:none}.ac-component .c-dropdown{position:absolute;top:calc(100% + .25rem);left:0;z-index:1000;background:var(--neutral-0);border:1px solid var(--neutral-200);border-radius:var(--ac-field-border-radius);box-shadow:0 4px 12px rgba(0,0,0,.5);overflow:hidden}.ac-component .c-footer{display:flex;align-items:center;justify-content:flex-end;gap:1rem;margin-top:1rem;padding:.5rem;border-top:1px solid var(--neutral-100)}.ac-component .c-checkbox{display:inline-block;width:1rem;height:1rem;vertical-align:middle;position:relative;cursor:pointer;border:1.5px solid var(--neutral-300);border-radius:.25rem;background:var(--neutral-0);transition:border-color .15s,background-color .15s}.ac-component .c-checkbox:hover{border-color:var(--ac-color-info);background:var(--premium-300)}.ac-component .c-checkbox::after{content:"";position:absolute;top:50%;left:50%;width:.3rem;height:.55rem;border:solid #fff;border-width:0 2px 2px 0;transform:translate(-50%, -60%) rotate(45deg);opacity:0}.ac-component .c-checkbox--checked,.ac-component .c-checkbox:checked{border-color:var(--ac-color-info);background:var(--ac-color-info)}.ac-component .c-checkbox--checked::after,.ac-component .c-checkbox:checked::after{opacity:1}.ac-component .c-checkbox--checked:hover,.ac-component .c-checkbox:checked:hover{background:var(--premium-300)}.ac-component .c-checkbox--disabled,.ac-component .c-checkbox:disabled{opacity:.5;cursor:not-allowed}.ac-component input.c-checkbox{appearance:none;-webkit-appearance:none;-moz-appearance:none;margin:0}.ac-component .c-checkbox-wrapper{display:inline-flex;align-items:center;line-height:1}.ac-component .c-checkbox-wrapper .c-checkbox-inner{display:inline-flex;align-items:center;gap:.25rem;cursor:pointer}.ac-component .c-checkbox-wrapper .c-checkbox-inner:hover .c-checkbox{border-color:var(--ac-color-primary);background:rgba(var(--ac-color-primary-rgb), 0.2)}.ac-component .c-checkbox-wrapper .c-checkbox-inner:hover .c-checkbox:checked,.ac-component .c-checkbox-wrapper .c-checkbox-inner:hover .c-checkbox--checked{background:var(--ac-color-darker-blue)}.ac-component .c-label{font-size:.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;color:var(--neutral-600)}.ac-component .c-label--on-border{position:absolute;top:-0.5lh;left:.5rem;padding:0 .125rem;font-size:.7rem;background:var(--neutral-0);text-transform:none}.ac-component .c-btn-group{display:inline-flex;border-radius:var(--ac-field-border-radius);gap:0 !important}.ac-component .c-btn-group>.c-btn{border-radius:0}.ac-component .c-btn-group>*>.c-btn{border-radius:0}.ac-component .c-btn-group>.c-btn:not(:last-child),.ac-component .c-btn-group>*:not(:last-child)>.c-btn{border-right-width:0}.ac-component .c-btn-group>.c-btn:first-child,.ac-component .c-btn-group>*:first-child>.c-btn{border-top-left-radius:var(--ac-field-border-radius);border-bottom-left-radius:var(--ac-field-border-radius)}.ac-component .c-btn-group>.c-btn:last-child,.ac-component .c-btn-group>*:last-child>.c-btn{border-top-right-radius:var(--ac-field-border-radius);border-bottom-right-radius:var(--ac-field-border-radius)}.ac-component .c-btn-group-vertical{display:inline-flex;flex-direction:column;border-radius:var(--ac-field-border-radius)}.ac-component .c-btn-group-vertical>.c-btn{border-radius:0;width:100%}.ac-component .c-btn-group-vertical>*>.c-btn{border-radius:0;width:100%}.ac-component .c-btn-group-vertical>.c-btn:not(:last-child),.ac-component .c-btn-group-vertical>*:not(:last-child)>.c-btn{border-bottom-width:0}.ac-component .c-btn-group-vertical>.c-btn:first-child,.ac-component .c-btn-group-vertical>*:first-child>.c-btn{border-top-left-radius:var(--ac-field-border-radius);border-top-right-radius:var(--ac-field-border-radius)}.ac-component .c-btn-group-vertical>.c-btn:last-child,.ac-component .c-btn-group-vertical>*:last-child>.c-btn{border-bottom-left-radius:var(--ac-field-border-radius);border-bottom-right-radius:var(--ac-field-border-radius)}.ac-component .c-btn{--btn-color: var(--neutral-200);--btn-bg: var(--background-50);--btn-text: var(--neutral-800);--btn-hover-bg: var(--neutral-100);--btn-hover-border: var(--neutral-300);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--neutral-700);font-family:var(--ac-font-family);letter-spacing:-0.18px;display:inline-flex;align-items:center;gap:.375em;padding:var(--ac-field-padding);border:1px solid var(--btn-color);border-radius:var(--ac-field-border-radius);background:var(--btn-bg);color:var(--btn-text);font-size:var(--ac-field-font-size);font-weight:500;cursor:pointer;text-transform:capitalize;transition:background-color .15s,border-color .15s,color .15s,box-shadow .15s}.ac-component .c-btn i{line-height:inherit}.ac-component .c-btn span.btn-label{line-height:1}.ac-component .c-btn:hover,.ac-component .c-btn:active{background:var(--btn-hover-bg);border-color:var(--btn-hover-border)}.ac-component .c-btn:focus-visible{outline:none;box-shadow:0 0 0 2px rgba(242,101,34,.12)}.ac-component .c-btn:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ac-component .c-btn .c-btn-indicator{--padding-inline: 0.3125rem;display:inline-flex;align-items:center;justify-content:center;margin-left:.325rem;padding:.0625rem var(--padding-inline);padding-right:calc(var(--padding-inline) + 1px);border-radius:999px;color:var(--btn-indicator-text);font-variant-numeric:tabular-nums;font-size:.75rem;font-weight:600;background:var(--btn-indicator-bg)}.ac-component .c-btn-sm{padding:var(--ac-field-padding-sm);font-size:var(--ac-field-font-size-sm);border-radius:var(--ac-field-border-radius-sm)}.ac-component .c-btn-lg{padding:var(--ac-field-padding-lg);font-size:var(--ac-field-font-size-lg);border-radius:var(--ac-field-border-radius-lg)}.ac-component .c-btn-dark{--btn-color: var(--neutral-800);--btn-bg: var(--neutral-800);--btn-text: var(--neutral-0);--btn-hover-bg: var(--neutral-900);--btn-hover-border: var(--neutral-900);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--neutral-800)}.ac-component .c-btn-outline{--btn-bg: transparent;--btn-color: var(--neutral-300);--btn-text: var(--neutral-800);--btn-hover-bg: var(--neutral-800);--btn-hover-border: var(--neutral-500);--btn-indicator-bg: var(--neutral-100);--btn-indicator-text: var(--neutral-800)}.ac-component .c-btn-outline:hover,.ac-component .c-btn-outline:active{color:var(--neutral-0)}.ac-component .c-btn-primary{--btn-bg: var(--ac-color-primary);--btn-color: var(--ac-color-primary);--btn-hover-bg: color-mix(in srgb, var(--ac-color-primary) 85%, black);--btn-hover-border: color-mix(in srgb, var(--ac-color-primary) 85%, black);--btn-text: var(--neutral-0);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--ac-color-primary)}.ac-component .c-btn-success{--btn-color: var(--ac-color-success);--btn-bg: var(--ac-color-success);--btn-text: var(--neutral-0);--btn-hover-bg: color-mix(in srgb, var(--ac-color-success) 85%, black);--btn-hover-border: color-mix(in srgb, var(--ac-color-success) 85%, black);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--ac-color-success)}.ac-component .c-btn-error{--btn-color: var(--ac-color-error);--btn-bg: var(--ac-color-error);--btn-text: var(--neutral-0);--btn-hover-bg: color-mix(in srgb, var(--ac-color-error) 85%, black);--btn-hover-border: color-mix(in srgb, var(--ac-color-error) 85%, black);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--ac-color-error)}.ac-component .c-btn-warning{--btn-color: var(--ac-color-warning);--btn-bg: var(--ac-color-warning);--btn-text: var(--neutral-0);--btn-hover-bg: color-mix(in srgb, var(--ac-color-warning) 85%, black);--btn-hover-border: color-mix(in srgb, var(--ac-color-warning) 85%, black);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--ac-color-warning)}.ac-component .c-btn-info{--btn-color: var(--ac-color-info);--btn-bg: var(--ac-color-info);--btn-text: var(--neutral-0);--btn-hover-bg: color-mix(in srgb, var(--ac-color-info) 85%, black);--btn-hover-border: color-mix(in srgb, var(--ac-color-info) 85%, black);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--ac-color-info)}.ac-component .c-btn-outline.c-btn-success{--btn-bg: transparent;--btn-text: var(--ac-color-success);--btn-hover-bg: var(--ac-color-success);--btn-hover-border: var(--ac-color-success);--btn-indicator-bg: var(--ac-color-success);--btn-indicator-text: var(--neutral-0)}.ac-component .c-btn-outline.c-btn-success:hover,.ac-component .c-btn-outline.c-btn-success:active{color:var(--neutral-0);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--neutral-700)}.ac-component .c-btn-outline.c-btn-error{--btn-bg: transparent;--btn-text: var(--ac-color-error);--btn-hover-bg: var(--ac-color-error);--btn-hover-border: var(--ac-color-error);--btn-indicator-bg: var(--ac-color-error);--btn-indicator-text: var(--neutral-0)}.ac-component .c-btn-outline.c-btn-error:hover,.ac-component .c-btn-outline.c-btn-error:active{color:var(--neutral-0);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--neutral-700)}.ac-component .c-btn-outline.c-btn-warning{--btn-bg: transparent;--btn-text: var(--ac-color-warning);--btn-hover-bg: var(--ac-color-warning);--btn-hover-border: var(--ac-color-warning);--btn-indicator-bg: var(--ac-color-warning);--btn-indicator-text: var(--neutral-900)}.ac-component .c-btn-outline.c-btn-warning:hover,.ac-component .c-btn-outline.c-btn-warning:active{color:var(--neutral-900);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--neutral-700)}.ac-component .c-btn-outline.c-btn-info{--btn-bg: transparent;--btn-text: var(--ac-color-info);--btn-hover-bg: var(--ac-color-info);--btn-hover-border: var(--ac-color-info);--btn-indicator-bg: var(--ac-color-info);--btn-indicator-text: var(--neutral-0)}.ac-component .c-btn-outline.c-btn-info:hover,.ac-component .c-btn-outline.c-btn-info:active{color:var(--neutral-0);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--neutral-700)}.ac-component .c-btn-outline.c-btn-dark{--btn-bg: transparent;--btn-color: var(--neutral-800);--btn-text: var(--neutral-800);--btn-hover-bg: var(--neutral-800);--btn-hover-border: var(--neutral-800);--btn-indicator-bg: var(--neutral-800);--btn-indicator-text: var(--neutral-0)}.ac-component .c-btn-outline.c-btn-dark:hover,.ac-component .c-btn-outline.c-btn-dark:active{color:var(--neutral-0);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--neutral-700)}.ac-component .vf-checkbox-wrapper{display:flex;align-items:center;gap:.25rem}.ac-component .vf-input-field::placeholder{color:var(--ac-placeholder-color)}.ac-component [disabled],.ac-component .is-disabled{cursor:not-allowed}*,*::before,*::after{box-sizing:border-box}body{margin:0;padding:0}/*# sourceMappingURL=main.css.map */
1
+ @import"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&display=swap";@import"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/fontawesome.min.css";@import"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/solid.min.css";@import"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/regular.min.css";:root{--ac-font-family: 'Geist', 'Segoe UI', system-ui, -apple-system, sans-serif;--background-50: #f7f9f9;--background-100: #eff3f3;--neutral-0: #fff;--neutral-50: #f2f4f4;--neutral-100: #e5e9ea;--neutral-150: #dae0e1;--neutral-200: #cbd3d4;--neutral-250: #bec8ca;--neutral-300: #b0bdbf;--neutral-400: #96a7a9;--neutral-500: #7c9194;--neutral-600: #637476;--neutral-700: #4a5759;--neutral-800: #323a3b;--neutral-900: #1f2d2d;--site-50: #ffebe1;--site-100: #ffceb6;--site-200: #f79d71;--site-300: #f5844e;--site-500: #f26522;--site-600: #da5b1f;--site-700: #c2511b;--premium-50: #dfefef;--premium-100: #cfe7e6;--premium-200: #bfdfde;--premium-300: #9ed0ce;--premium-400: #7ec0bd;--premium-500: #5eb0ad;--premium-600: #4b8d8a;--premium-700: #386a68;--pulse-10: #e0d8f1;--pulse-100: #a18ad5;--pulse-400: #7250c0;--pulse-500: #623cb9;--ac-color-primary: #146eb4;--ac-color-primary-rgb: 20, 110, 180;--ac-color-error: #d92d20;--ac-color-warning: #dc6803;--ac-color-success: #067647;--ac-color-success-rgb: 6, 118, 71;--ac-color-info: #1570ef;--ac-color-info-rgb: 21, 112, 239;--ac-color-text: var(--neutral-800);--ac-color-darker-blue: #1246d4;--ac-color-lighter-blue: rgb(45 126 241);--ac-input-padding: 0.5rem;--ac-input-padding-sm: 0.3125rem;--ac-input-padding-lg: 0.75rem;--ac-field-padding: 0.5rem 0.75rem;--ac-field-padding-sm: 0.3125rem 0.625rem;--ac-field-padding-lg: 0.6875rem 1rem;--ac-field-font-size: 0.825rem;--ac-field-font-size-sm: 0.75rem;--ac-field-font-size-lg: 0.9375rem;--ac-field-border-radius: 0.5rem;--ac-field-border-radius-sm: 0.375rem;--ac-field-border-radius-lg: 0.625rem;--ac-dropdown-max-height: 18rem;--ac-section-bottom-margin: 1rem;--ac-placeholder-color: var(--neutral-600)}@media(prefers-reduced-motion: no-preference){html{interpolate-size:allow-keywords}}.ac-component{font-family:var(--ac-font-family);letter-spacing:-0.18px;color:var(--neutral-800);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box}.ac-component.v-tooltip{background:var(--neutral-800);font-family:var(--ac-font-family);color:var(--neutral-0);font-size:.8125rem;font-weight:400;line-height:1.4;padding:var(--ac-field-padding);border-radius:.5rem;white-space:normal;width:max-content;box-shadow:0 2px 6px rgba(0,0,0,.12)}.ac-component{--vf-ring-color: var(--ac-color-primary);--vf-primary: var(--ac-color-primary);--vf-border-color-checked: var(--ac-color-primary)}.ac-component img,.ac-component picture,.ac-component video,.ac-component canvas,.ac-component svg{display:block;max-width:100%}.ac-component input,.ac-component button,.ac-component textarea,.ac-component select{font-family:inherit;letter-spacing:inherit}.ac-component p,.ac-component h1,.ac-component h2,.ac-component h3,.ac-component h4,.ac-component h5,.ac-component h6{overflow-wrap:break-word}.ac-component *{margin:0}.ac-component .fa-tag,.ac-component .fa-arrow-rotate-right{transform:translateY(0.5px)}.ac-component .align-center-fix{transform:translateY(0.5px)}.ac-component hr.separator{border:none;border-top:1px solid var(--neutral-200);margin:.5rem 0}.ac-component .lh-1{line-height:1}.ac-component .flex-center{display:flex;align-items:center}.ac-component .click-expand{--expand-size: 0.5rem}.ac-component .click-expand::after{content:"";position:absolute;inset:calc(-1*var(--expand-size))}.ac-component .m-0{margin:0 !important}.ac-component .mx-0{margin-left:0 !important;margin-right:0 !important}.ac-component .my-0{margin-top:0 !important;margin-bottom:0 !important}.ac-component .mt-0{margin-top:0 !important}.ac-component .mb-0{margin-bottom:0 !important}.ac-component .ml-0{margin-left:0 !important}.ac-component .mr-0{margin-right:0 !important}.ac-component .m-1{margin:.25rem !important}.ac-component .mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.ac-component .my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.ac-component .mt-1{margin-top:.25rem !important}.ac-component .mb-1{margin-bottom:.25rem !important}.ac-component .ml-1{margin-left:.25rem !important}.ac-component .mr-1{margin-right:.25rem !important}.ac-component .m-2{margin:.5rem !important}.ac-component .mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.ac-component .my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.ac-component .mt-2{margin-top:.5rem !important}.ac-component .mb-2{margin-bottom:.5rem !important}.ac-component .ml-2{margin-left:.5rem !important}.ac-component .mr-2{margin-right:.5rem !important}.ac-component .m-3{margin:1rem !important}.ac-component .mx-3{margin-left:1rem !important;margin-right:1rem !important}.ac-component .my-3{margin-top:1rem !important;margin-bottom:1rem !important}.ac-component .mt-3{margin-top:1rem !important}.ac-component .mb-3{margin-bottom:1rem !important}.ac-component .ml-3{margin-left:1rem !important}.ac-component .mr-3{margin-right:1rem !important}.ac-component .m-4{margin:1.5rem !important}.ac-component .mx-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.ac-component .my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.ac-component .mt-4{margin-top:1.5rem !important}.ac-component .mb-4{margin-bottom:1.5rem !important}.ac-component .ml-4{margin-left:1.5rem !important}.ac-component .mr-4{margin-right:1.5rem !important}.ac-component .m-5{margin:3rem !important}.ac-component .mx-5{margin-left:3rem !important;margin-right:3rem !important}.ac-component .my-5{margin-top:3rem !important;margin-bottom:3rem !important}.ac-component .mt-5{margin-top:3rem !important}.ac-component .mb-5{margin-bottom:3rem !important}.ac-component .ml-5{margin-left:3rem !important}.ac-component .mr-5{margin-right:3rem !important}.ac-component .m-auto{margin:auto !important}.ac-component .mx-auto{margin-left:auto !important;margin-right:auto !important}.ac-component .my-auto{margin-top:auto !important;margin-bottom:auto !important}.ac-component .mt-auto{margin-top:auto !important}.ac-component .mb-auto{margin-bottom:auto !important}.ac-component .ml-auto{margin-left:auto !important}.ac-component .mr-auto{margin-right:auto !important}.ac-component .p-0{padding:0 !important}.ac-component .px-0{padding-left:0 !important;padding-right:0 !important}.ac-component .py-0{padding-top:0 !important;padding-bottom:0 !important}.ac-component .pt-0{padding-top:0 !important}.ac-component .pb-0{padding-bottom:0 !important}.ac-component .pl-0{padding-left:0 !important}.ac-component .pr-0{padding-right:0 !important}.ac-component .p-1{padding:.25rem !important}.ac-component .px-1{padding-left:.25rem !important;padding-right:.25rem !important}.ac-component .py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.ac-component .pt-1{padding-top:.25rem !important}.ac-component .pb-1{padding-bottom:.25rem !important}.ac-component .pl-1{padding-left:.25rem !important}.ac-component .pr-1{padding-right:.25rem !important}.ac-component .p-2{padding:.5rem !important}.ac-component .px-2{padding-left:.5rem !important;padding-right:.5rem !important}.ac-component .py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.ac-component .pt-2{padding-top:.5rem !important}.ac-component .pb-2{padding-bottom:.5rem !important}.ac-component .pl-2{padding-left:.5rem !important}.ac-component .pr-2{padding-right:.5rem !important}.ac-component .p-3{padding:1rem !important}.ac-component .px-3{padding-left:1rem !important;padding-right:1rem !important}.ac-component .py-3{padding-top:1rem !important;padding-bottom:1rem !important}.ac-component .pt-3{padding-top:1rem !important}.ac-component .pb-3{padding-bottom:1rem !important}.ac-component .pl-3{padding-left:1rem !important}.ac-component .pr-3{padding-right:1rem !important}.ac-component .p-4{padding:1.5rem !important}.ac-component .px-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.ac-component .py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.ac-component .pt-4{padding-top:1.5rem !important}.ac-component .pb-4{padding-bottom:1.5rem !important}.ac-component .pl-4{padding-left:1.5rem !important}.ac-component .pr-4{padding-right:1.5rem !important}.ac-component .p-5{padding:3rem !important}.ac-component .px-5{padding-left:3rem !important;padding-right:3rem !important}.ac-component .py-5{padding-top:3rem !important;padding-bottom:3rem !important}.ac-component .pt-5{padding-top:3rem !important}.ac-component .pb-5{padding-bottom:3rem !important}.ac-component .pl-5{padding-left:3rem !important}.ac-component .pr-5{padding-right:3rem !important}.ac-component .gap-0{gap:0 !important}.ac-component .gap-1{gap:.25rem !important}.ac-component .gap-2{gap:.5rem !important}.ac-component .gap-3{gap:1rem !important}.ac-component .gap-4{gap:1.5rem !important}.ac-component .gap-5{gap:3rem !important}.ac-component .d-flex{display:flex !important}.ac-component .d-inline-flex{display:inline-flex !important}.ac-component .d-block{display:block !important}.ac-component .d-inline-block{display:inline-block !important}.ac-component .flex-wrap{flex-wrap:wrap}.ac-component .flex-column{flex-direction:column}.ac-component .text-center{text-align:center}.ac-component .w-100{width:100% !important}.ac-component .mw-100{max-width:100% !important}.ac-component .h-100{height:100% !important}.ac-component .mh-100{max-height:100% !important}.ac-component .pointer{cursor:pointer}.ac-component .nowrap{white-space:nowrap}.ac-component .align-items-center{align-items:center}.ac-component .text-primary,.ac-component .text-normal{color:var(--neutral-800) !important}.ac-component .text-info{color:var(--ac-color-info) !important}.ac-component .text-success{color:var(--ac-color-success) !important}.ac-component .text-warning{color:var(--ac-color-warning) !important}.ac-component .text-error,.ac-component .text-danger{color:var(--ac-color-error) !important}.ac-component .lh-normal{line-height:normal !important}.ac-component .lh-1{line-height:1 !important}.ac-component .lh-inherit{line-height:inherit !important}.ac-component .hide,.ac-component .hidden{display:none !important}.ac-component .c-wrapper{position:relative}.ac-component .c-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ac-component .c-field-size{font-size:var(--ac-field-font-size);padding:var(--ac-field-padding)}.ac-component .c-field-size--sm,.ac-component .c-field-size--small{font-size:var(--ac-field-font-size-sm);padding:var(--ac-field-padding-sm)}.ac-component .c-field-size--lg,.ac-component .c-field-size--large{font-size:var(--ac-field-font-size-lg);padding:var(--ac-field-padding-lg)}.ac-component .c-type-color{--text-color: var(--neutral-800);--hover-bg-color: var(--neutral-100);--hover-text-color: var(--neutral-800);color:var(--text-color)}.ac-component .c-type-color:hover{background-color:var(--hover-bg-color);color:var(--hover-text-color)}.ac-component .c-type-color--error{--text-color: var(--ac-color-error);--hover-bg-color: var(--ac-color-error);--hover-text-color: var(--neutral-0)}.ac-component .c-type-color--success{--text-color: var(--ac-color-success);--hover-bg-color: var(--ac-color-success);--hover-text-color: var(--neutral-0)}.ac-component .c-type-color--warning{--text-color: var(--ac-color-warning);--hover-bg-color: var(--ac-color-warning);--hover-text-color: var(--neutral-0)}.ac-component .c-type-color--info{--text-color: var(--ac-color-info);--hover-bg-color: var(--ac-color-info);--hover-text-color: var(--neutral-0)}.ac-component .c-type-color--dark{--text-color: var(--neutral-0);--hover-bg-color: var(--neutral-800);--hover-text-color: var(--neutral-0)}.ac-component .c-chip{display:inline-flex;padding:0;border-radius:.25rem;background:var(--neutral-100);color:var(--neutral-700);font-size:.75rem;line-height:1.3;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ac-component .c-indicator{display:inline-flex;align-items:center;justify-content:center;min-width:1.25rem;height:1.25rem;padding:0 .375rem;border-radius:999px;background:var(--neutral-200);color:var(--neutral-700);font-family:var(--ac-font-family);font-size:.7rem;font-weight:700;font-variant-numeric:tabular-nums}.ac-component .c-scroll{scrollbar-width:thin;scrollbar-color:var(--neutral-300) rgba(0,0,0,0)}.ac-component .c-scroll::-webkit-scrollbar{width:.5rem;height:.5rem}.ac-component .c-scroll::-webkit-scrollbar-track{background:rgba(0,0,0,0)}.ac-component .c-scroll::-webkit-scrollbar-thumb{background:var(--neutral-300);border-radius:999px;border:2px solid rgba(0,0,0,0);background-clip:content-box;transition:background-color .15s}.ac-component .c-scroll::-webkit-scrollbar-thumb:hover{background:var(--neutral-500);background-clip:content-box}.ac-component .c-scroll::-webkit-scrollbar-corner{background:rgba(0,0,0,0)}.ac-component .c-placeholder{flex:1;font-style:italic;min-width:0;padding:var(--ac-input-padding);color:var(--ac-placeholder-color);user-select:none}.ac-component .c-input{width:100%;font-family:inherit;letter-spacing:-0.36px;border:none;background:rgba(0,0,0,0);padding:var(--ac-input-padding);font-size:var(--ac-field-font-size);color:var(--neutral-900)}.ac-component .c-input::placeholder{color:var(--ac-placeholder-color);font-style:italic}.ac-component .c-input:-webkit-autofill,.ac-component .c-input:-webkit-autofill:hover,.ac-component .c-input:-webkit-autofill:focus,.ac-component .c-input:-webkit-autofill:active{border-radius:inherit}.ac-component .c-input:focus,.ac-component .c-input:focus-within,.ac-component .c-input:focus-visible,.ac-component .c-focus:focus,.ac-component .c-focus:focus-within,.ac-component .c-focus:focus-visible{border-color:var(--ac-color-lighter-blue);outline:0}.ac-component .c-input-wrapper{position:relative;display:flex;flex-direction:column;gap:.25rem}.ac-component .c-textarea{resize:none}.ac-component .c-input-row{display:flex;align-items:center;font-family:inherit;border:1px solid var(--neutral-200);border-radius:var(--ac-field-border-radius);background:var(--neutral-0);font-size:var(--ac-field-font-size);color:var(--neutral-900);transition:border-color .15s}.ac-component .c-input-row::placeholder{color:var(--ac-placeholder-color);font-style:italic}.ac-component .c-input-row--disabled{background:var(--neutral-50);cursor:not-allowed}.ac-component .c-input-row:is(input,textarea){padding:var(--ac-input-padding)}.ac-component .c-input-row:hover{border-color:var(--neutral-300)}.ac-component .c-input-row:focus-within,.ac-component .c-input-row:focus,.ac-component .c-input-row:focus-visible,.ac-component .c-input-row--focus{border-color:var(--ac-color-lighter-blue);box-shadow:0 0 0 2px rgba(21,112,239,.1)}.ac-component .c-input-row:focus-within:hover,.ac-component .c-input-row:focus:hover,.ac-component .c-input-row:focus-visible:hover,.ac-component .c-input-row--focus:hover{border-color:var(--ac-color-darker-blue)}.ac-component .c-input-row--sm{border-radius:var(--ac-field-border-radius-sm);font-size:var(--ac-field-font-size-sm)}.ac-component .c-input-row--sm:is(input,textarea){padding:var(--ac-input-padding-sm)}.ac-component .c-input-row--sm .c-icon-btn{font-size:var(--ac-field-font-size-sm)}.ac-component .c-input-row--sm .c-placeholder{font-size:var(--ac-field-font-size-sm);padding:var(--ac-input-padding-sm)}.ac-component .c-input-row--sm .c-input{padding:var(--ac-input-padding-sm);font-size:var(--ac-field-font-size-sm)}.ac-component .c-input-row--lg{border-radius:var(--ac-field-border-radius-lg);font-size:var(--ac-field-font-size-lg)}.ac-component .c-input-row--lg:is(input,textarea){padding:var(--ac-input-padding-lg)}.ac-component .c-input-row--lg .c-icon-btn{font-size:var(--ac-field-font-size-lg)}.ac-component .c-input-row--lg .c-placeholder{font-size:var(--ac-field-font-size-lg);padding:var(--ac-input-padding-lg)}.ac-component .c-input-row--lg .c-input{padding:var(--ac-input-padding-lg);font-size:var(--ac-field-font-size-lg)}.ac-component .c-icon-btn{display:flex;align-items:center;justify-content:center;border:none;background:rgba(0,0,0,0);cursor:pointer;transition:color .15s}.ac-component .c-icon-btn--clear{color:var(--neutral-400);padding-left:0;padding-right:.25rem}.ac-component .c-icon-btn--clear:hover{color:var(--ac-color-error)}.ac-component .c-icon-btn--chevron{color:var(--neutral-500);transition:transform .2s}.ac-component .c-icon-btn--chevron-open{transform:rotate(180deg)}.ac-component .c-icon-btn--calendar{font-size:.925rem;color:var(--neutral-500);padding-inline:.375rem}.ac-component .c-icon-btn--calendar:hover{color:var(--site-500)}.ac-component .c-icon-btn--hidden{visibility:hidden;pointer-events:none}.ac-component .c-dropdown{position:absolute;top:calc(100% + .25rem);left:0;z-index:1000;background:var(--neutral-0);border:1px solid var(--neutral-200);border-radius:var(--ac-field-border-radius);box-shadow:0 4px 12px rgba(0,0,0,.5);overflow:hidden}.ac-component .c-footer{display:flex;align-items:center;justify-content:flex-end;gap:1rem;margin-top:1rem;padding:.5rem;border-top:1px solid var(--neutral-100)}.ac-component .c-checkbox{display:inline-block;width:1rem;height:1rem;vertical-align:middle;position:relative;cursor:pointer;border:1.5px solid var(--neutral-300);border-radius:.25rem;background:var(--neutral-0);transition:border-color .15s,background-color .15s}.ac-component .c-checkbox:hover{border-color:var(--ac-color-info);background:var(--premium-300)}.ac-component .c-checkbox::after{content:"";position:absolute;top:50%;left:50%;width:.3rem;height:.55rem;border:solid #fff;border-width:0 2px 2px 0;transform:translate(-50%, -60%) rotate(45deg);opacity:0}.ac-component .c-checkbox--checked,.ac-component .c-checkbox:checked{border-color:var(--ac-color-info);background:var(--ac-color-info)}.ac-component .c-checkbox--checked::after,.ac-component .c-checkbox:checked::after{opacity:1}.ac-component .c-checkbox--checked:hover,.ac-component .c-checkbox:checked:hover{background:var(--premium-300)}.ac-component .c-checkbox--disabled,.ac-component .c-checkbox:disabled{opacity:.5;cursor:not-allowed}.ac-component input.c-checkbox{appearance:none;-webkit-appearance:none;-moz-appearance:none;margin:0}.ac-component .c-checkbox-wrapper{display:inline-flex;align-items:center;line-height:1}.ac-component .c-checkbox-wrapper .c-checkbox-inner{display:inline-flex;align-items:center;gap:.25rem;cursor:pointer}.ac-component .c-checkbox-wrapper .c-checkbox-inner:hover .c-checkbox{border-color:var(--ac-color-primary);background:rgba(var(--ac-color-primary-rgb), 0.2)}.ac-component .c-checkbox-wrapper .c-checkbox-inner:hover .c-checkbox:checked,.ac-component .c-checkbox-wrapper .c-checkbox-inner:hover .c-checkbox--checked{background:var(--ac-color-darker-blue)}.ac-component .c-label{font-size:.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;color:var(--neutral-600)}.ac-component .c-label--on-border{position:absolute;top:-0.5lh;left:.5rem;padding:0 .125rem;font-size:.7rem;background:var(--neutral-0);text-transform:none}.ac-component .c-btn-group{display:inline-flex;border-radius:var(--ac-field-border-radius);gap:0 !important;flex-wrap:nowrap !important}.ac-component .c-btn-group>.c-btn{border-radius:0}.ac-component .c-btn-group>*>.c-btn{border-radius:0}.ac-component .c-btn-group>.c-btn:not(:last-child),.ac-component .c-btn-group>*:not(:last-child)>.c-btn{border-right-width:0}.ac-component .c-btn-group>.c-btn:first-child,.ac-component .c-btn-group>*:first-child>.c-btn{border-top-left-radius:var(--ac-field-border-radius);border-bottom-left-radius:var(--ac-field-border-radius)}.ac-component .c-btn-group>.c-btn:last-child,.ac-component .c-btn-group>*:last-child>.c-btn{border-top-right-radius:var(--ac-field-border-radius);border-bottom-right-radius:var(--ac-field-border-radius)}.ac-component .c-btn-group-vertical{display:inline-flex;flex-direction:column;border-radius:var(--ac-field-border-radius)}.ac-component .c-btn-group-vertical>.c-btn{border-radius:0;width:100%}.ac-component .c-btn-group-vertical>*>.c-btn{border-radius:0;width:100%}.ac-component .c-btn-group-vertical>.c-btn:not(:last-child),.ac-component .c-btn-group-vertical>*:not(:last-child)>.c-btn{border-bottom-width:0}.ac-component .c-btn-group-vertical>.c-btn:first-child,.ac-component .c-btn-group-vertical>*:first-child>.c-btn{border-top-left-radius:var(--ac-field-border-radius);border-top-right-radius:var(--ac-field-border-radius)}.ac-component .c-btn-group-vertical>.c-btn:last-child,.ac-component .c-btn-group-vertical>*:last-child>.c-btn{border-bottom-left-radius:var(--ac-field-border-radius);border-bottom-right-radius:var(--ac-field-border-radius)}.ac-component .c-btn{--btn-color: var(--neutral-200);--btn-bg: var(--background-50);--btn-text: var(--neutral-800);--btn-hover-bg: var(--neutral-100);--btn-hover-border: var(--neutral-300);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--neutral-700);font-family:var(--ac-font-family);letter-spacing:-0.18px;display:inline-flex;align-items:center;gap:.375em;padding:var(--ac-field-padding);border:1px solid var(--btn-color);border-radius:var(--ac-field-border-radius);background:var(--btn-bg);color:var(--btn-text);font-size:var(--ac-field-font-size);font-weight:500;cursor:pointer;text-transform:capitalize;transition:background-color .15s,border-color .15s,color .15s,box-shadow .15s}.ac-component .c-btn i{line-height:inherit}.ac-component .c-btn span.btn-label{line-height:1}.ac-component .c-btn:hover,.ac-component .c-btn:active{background:var(--btn-hover-bg);border-color:var(--btn-hover-border)}.ac-component .c-btn:focus-visible{outline:none;box-shadow:0 0 0 2px rgba(242,101,34,.12)}.ac-component .c-btn:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ac-component .c-btn .c-btn-indicator{--padding-inline: 0.3125rem;display:inline-flex;align-items:center;justify-content:center;margin-left:.325rem;padding:.0625rem var(--padding-inline);padding-right:calc(var(--padding-inline) + 1px);border-radius:999px;color:var(--btn-indicator-text);font-variant-numeric:tabular-nums;font-size:.75rem;font-weight:600;background:var(--btn-indicator-bg)}.ac-component .c-btn-sm{padding:var(--ac-field-padding-sm);font-size:var(--ac-field-font-size-sm);border-radius:var(--ac-field-border-radius-sm)}.ac-component .c-btn-lg{padding:var(--ac-field-padding-lg);font-size:var(--ac-field-font-size-lg);border-radius:var(--ac-field-border-radius-lg)}.ac-component .c-btn-dark{--btn-color: var(--neutral-800);--btn-bg: var(--neutral-800);--btn-text: var(--neutral-0);--btn-hover-bg: var(--neutral-900);--btn-hover-border: var(--neutral-900);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--neutral-800)}.ac-component .c-btn-outline{--btn-bg: transparent;--btn-color: var(--neutral-300);--btn-text: var(--neutral-800);--btn-hover-bg: var(--neutral-800);--btn-hover-border: var(--neutral-500);--btn-indicator-bg: var(--neutral-100);--btn-indicator-text: var(--neutral-800)}.ac-component .c-btn-outline:hover,.ac-component .c-btn-outline:active{color:var(--neutral-0)}.ac-component .c-btn-primary{--btn-bg: var(--ac-color-primary);--btn-color: var(--ac-color-primary);--btn-hover-bg: color-mix(in srgb, var(--ac-color-primary) 85%, black);--btn-hover-border: color-mix(in srgb, var(--ac-color-primary) 85%, black);--btn-text: var(--neutral-0);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--ac-color-primary)}.ac-component .c-btn-success{--btn-color: var(--ac-color-success);--btn-bg: var(--ac-color-success);--btn-text: var(--neutral-0);--btn-hover-bg: color-mix(in srgb, var(--ac-color-success) 85%, black);--btn-hover-border: color-mix(in srgb, var(--ac-color-success) 85%, black);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--ac-color-success)}.ac-component .c-btn-error{--btn-color: var(--ac-color-error);--btn-bg: var(--ac-color-error);--btn-text: var(--neutral-0);--btn-hover-bg: color-mix(in srgb, var(--ac-color-error) 85%, black);--btn-hover-border: color-mix(in srgb, var(--ac-color-error) 85%, black);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--ac-color-error)}.ac-component .c-btn-warning{--btn-color: var(--ac-color-warning);--btn-bg: var(--ac-color-warning);--btn-text: var(--neutral-0);--btn-hover-bg: color-mix(in srgb, var(--ac-color-warning) 85%, black);--btn-hover-border: color-mix(in srgb, var(--ac-color-warning) 85%, black);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--ac-color-warning)}.ac-component .c-btn-info{--btn-color: var(--ac-color-info);--btn-bg: var(--ac-color-info);--btn-text: var(--neutral-0);--btn-hover-bg: color-mix(in srgb, var(--ac-color-info) 85%, black);--btn-hover-border: color-mix(in srgb, var(--ac-color-info) 85%, black);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--ac-color-info)}.ac-component .c-btn-outline.c-btn-success{--btn-bg: transparent;--btn-text: var(--ac-color-success);--btn-hover-bg: var(--ac-color-success);--btn-hover-border: var(--ac-color-success);--btn-indicator-bg: var(--ac-color-success);--btn-indicator-text: var(--neutral-0)}.ac-component .c-btn-outline.c-btn-success:hover,.ac-component .c-btn-outline.c-btn-success:active{color:var(--neutral-0);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--neutral-700)}.ac-component .c-btn-outline.c-btn-error{--btn-bg: transparent;--btn-text: var(--ac-color-error);--btn-hover-bg: var(--ac-color-error);--btn-hover-border: var(--ac-color-error);--btn-indicator-bg: var(--ac-color-error);--btn-indicator-text: var(--neutral-0)}.ac-component .c-btn-outline.c-btn-error:hover,.ac-component .c-btn-outline.c-btn-error:active{color:var(--neutral-0);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--neutral-700)}.ac-component .c-btn-outline.c-btn-warning{--btn-bg: transparent;--btn-text: var(--ac-color-warning);--btn-hover-bg: var(--ac-color-warning);--btn-hover-border: var(--ac-color-warning);--btn-indicator-bg: var(--ac-color-warning);--btn-indicator-text: var(--neutral-900)}.ac-component .c-btn-outline.c-btn-warning:hover,.ac-component .c-btn-outline.c-btn-warning:active{color:var(--neutral-900);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--neutral-700)}.ac-component .c-btn-outline.c-btn-info{--btn-bg: transparent;--btn-text: var(--ac-color-info);--btn-hover-bg: var(--ac-color-info);--btn-hover-border: var(--ac-color-info);--btn-indicator-bg: var(--ac-color-info);--btn-indicator-text: var(--neutral-0)}.ac-component .c-btn-outline.c-btn-info:hover,.ac-component .c-btn-outline.c-btn-info:active{color:var(--neutral-0);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--neutral-700)}.ac-component .c-btn-outline.c-btn-dark{--btn-bg: transparent;--btn-color: var(--neutral-800);--btn-text: var(--neutral-800);--btn-hover-bg: var(--neutral-800);--btn-hover-border: var(--neutral-800);--btn-indicator-bg: var(--neutral-800);--btn-indicator-text: var(--neutral-0)}.ac-component .c-btn-outline.c-btn-dark:hover,.ac-component .c-btn-outline.c-btn-dark:active{color:var(--neutral-0);--btn-indicator-bg: var(--neutral-0);--btn-indicator-text: var(--neutral-700)}.ac-component .vf-checkbox-wrapper{display:flex;align-items:center;gap:.25rem}.ac-component .vf-input-field::placeholder{color:var(--ac-placeholder-color)}*,*::before,*::after{box-sizing:border-box}body{margin:0;padding:0}.ac-container{position:fixed;inset:0;display:flex;flex-direction:column;overflow:hidden}.ac-container .data-list-section{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}/*# sourceMappingURL=main.css.map */
package/dist/main.css.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../src/styles/_global.scss","../src/styles/_variables.scss","../src/styles/main.scss","../src/styles/_base.scss","../src/styles/_utility.scss","../src/styles/_controls.scss","../src/styles/_buttons.scss","../src/styles/_vueform.scss"],"names":[],"mappings":"AAAQ,mFACA,2FACA,qFACA,uFCHR,MACE,4EAEA,yBACA,0BAEA,kBACA,sBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBAEA,mBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBAEA,sBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBAEA,oBACA,qBACA,qBACA,qBAEA,4BACA,qCACA,0BACA,4BACA,4BACA,mCACA,yBACA,kCAEA,oCAEA,gCACA,yCAEA,2BACA,iCACA,+BAEA,mCACA,0CACA,sCACA,+BACA,iCACA,mCACA,iCACA,sCACA,sCAEA,gCAEA,iCAEA,2CDrEF,8CACE,KACE,iCAIJ,cACE,kCACA,uBACA,yBACA,mCACA,kCACA,sBAEA,wBACE,8BACA,kCACA,uBACA,mBACA,gBACA,gBACA,gCACA,oBACA,mBACA,kBACA,qCErBJ,cCPE,yCACA,sCACA,mDAIA,mGAKE,cACA,eAGF,qFAIE,oBACA,uBAEF,sHAOE,yBAEF,gBACE,SAQF,2DAEE,4BAGF,gCACE,4BAGF,2BACE,YACA,wCACA,eAGF,oBACE,cAGF,2BACE,aACA,mBAGF,4BACE,sBAEA,mCACE,WACA,kBACA,kCC9CA,mBACE,oBAGF,oBACE,yBACA,0BAGF,oBACE,wBACA,2BAIA,oBACE,wBADF,oBACE,2BADF,oBACE,yBADF,oBACE,0BAhBJ,mBACE,yBAGF,oBACE,8BACA,+BAGF,oBACE,6BACA,gCAIA,oBACE,6BADF,oBACE,gCADF,oBACE,8BADF,oBACE,+BAhBJ,mBACE,wBAGF,oBACE,6BACA,8BAGF,oBACE,4BACA,+BAIA,oBACE,4BADF,oBACE,+BADF,oBACE,6BADF,oBACE,8BAhBJ,mBACE,uBAGF,oBACE,4BACA,6BAGF,oBACE,2BACA,8BAIA,oBACE,2BADF,oBACE,8BADF,oBACE,4BADF,oBACE,6BAhBJ,mBACE,yBAGF,oBACE,8BACA,+BAGF,oBACE,6BACA,gCAIA,oBACE,6BADF,oBACE,gCADF,oBACE,8BADF,oBACE,+BAhBJ,mBACE,uBAGF,oBACE,4BACA,6BAGF,oBACE,2BACA,8BAIA,oBACE,2BADF,oBACE,8BADF,oBACE,4BADF,oBACE,6BAMJ,sBACE,uBAEF,uBACE,4BACA,6BAEF,uBACE,2BACA,8BAGA,uBACE,2BADF,uBACE,8BADF,uBACE,4BADF,uBACE,6BAnCJ,mBACE,qBAGF,oBACE,0BACA,2BAGF,oBACE,yBACA,4BAIA,oBACE,yBADF,oBACE,4BADF,oBACE,0BADF,oBACE,2BAhBJ,mBACE,0BAGF,oBACE,+BACA,gCAGF,oBACE,8BACA,iCAIA,oBACE,8BADF,oBACE,iCADF,oBACE,+BADF,oBACE,gCAhBJ,mBACE,yBAGF,oBACE,8BACA,+BAGF,oBACE,6BACA,gCAIA,oBACE,6BADF,oBACE,gCADF,oBACE,8BADF,oBACE,+BAhBJ,mBACE,wBAGF,oBACE,6BACA,8BAGF,oBACE,4BACA,+BAIA,oBACE,4BADF,oBACE,+BADF,oBACE,6BADF,oBACE,8BAhBJ,mBACE,0BAGF,oBACE,+BACA,gCAGF,oBACE,8BACA,iCAIA,oBACE,8BADF,oBACE,iCADF,oBACE,+BADF,oBACE,gCAhBJ,mBACE,wBAGF,oBACE,6BACA,8BAGF,oBACE,4BACA,+BAIA,oBACE,4BADF,oBACE,+BADF,oBACE,6BADF,oBACE,8BA0BN,qBACE,iBADF,qBACE,sBADF,qBACE,qBADF,qBACE,oBADF,qBACE,sBADF,qBACE,oBAIJ,sBACE,wBAGF,6BACE,+BAGF,uBACE,yBAGF,8BACE,gCAGF,yBACE,eAGF,2BACE,sBAGF,2BACE,kBAGF,qBACE,sBAGF,sBACE,0BAGF,qBACE,uBAGF,sBACE,2BAGF,uBACE,eAGF,sBACE,mBAGF,kCACE,mBAGF,uDAEE,oCAEF,yBACE,sCAEF,4BACE,yCAEF,4BACE,yCAEF,qDAEE,uCAGF,yBACE,8BAGF,oBACE,yBAGF,0BACE,+BAGF,0CAEE,wBChKF,yBACE,kBAGF,0BACE,gBACA,uBACA,mBAGF,4BACE,oCACA,gCAEA,mEAEE,uCACA,mCAGF,mEAEE,uCACA,mCAIJ,4BACE,iCACA,qCACA,uCAEA,wBACA,kCACE,uCACA,8BAEF,mCACE,oCACA,wCACA,qCAEF,qCACE,sCACA,0CACA,qCAEF,qCACE,sCACA,0CACA,qCAEF,kCACE,mCACA,uCACA,qCAEF,kCACE,+BACA,qCACA,qCAIJ,sBACE,oBACA,UACA,qBACA,8BACA,yBACA,iBACA,gBACA,eACA,gBACA,uBACA,mBAGF,2BACE,oBACA,mBACA,uBACA,kBACA,eACA,kBACA,oBACA,8BACA,yBACA,kCACA,gBACA,gBACA,kCAGF,wBACE,qBACA,iDAEA,2CACE,YACA,aAGF,iDACE,yBAGF,iDACE,8BACA,oBACA,+BACA,4BACA,iCAGF,uDACE,8BACA,4BAGF,kDACE,yBAIJ,6BACE,OACA,kBACA,YACA,gCACA,kCACA,iBAGF,uBACE,WACA,oBACA,uBACA,YACA,yBACA,gCACA,oCACA,yBAEA,oCACE,kCACA,kBAGF,mLAIE,sBASF,4MAGE,0CACA,UAIJ,+BACE,kBACA,aACA,sBACA,WAGF,0BACE,YAGF,2BACE,aACA,mBACA,oBACA,oCACA,4CACA,4BACA,oCACA,yBACA,6BAEA,wCACE,kCACA,kBAGF,qCACE,6BACA,mBAGF,8CACE,gCAGF,iCACE,gCAGF,oJAIE,0CACA,yCAEA,4KACE,yCAIJ,+BACE,+CACA,uCAEA,kDACE,mCAGF,2CACE,uCAGF,8CACE,uCACA,mCAGF,wCACE,mCACA,uCAIJ,+BACE,+CACA,uCAEA,kDACE,mCAGF,2CACE,uCAGF,8CACE,uCACA,mCAGF,wCACE,mCACA,uCAKN,0BACE,aACA,mBACA,uBACA,YACA,yBACA,eACA,sBAEA,iCACE,yBACA,eACA,qBACA,uCACE,4BAIJ,mCACE,yBACA,yBAGF,wCACE,yBAGF,oCACE,kBACA,yBACA,uBACA,0CACE,sBAIJ,kCACE,kBACA,oBAIJ,0BACE,kBACA,wBACA,OACA,aACA,4BACA,oCACA,4CACA,qCACA,gBAGF,wBACE,aACA,mBACA,yBACA,SACA,gBACA,cACA,wCAGF,0BACE,qBACA,WACA,YAEA,sBACA,kBACA,eAEA,sCACA,qBACA,4BAEA,WACE,wCAGF,gCACE,kCACA,8BAGF,iCACE,WACA,kBACA,QACA,SACA,YACA,cACA,kBACA,yBACA,8CACA,UAGF,qEAEE,kCACA,gCAEA,mFACE,UAGF,iFACE,8BAIJ,uEAEE,WACA,mBAIJ,+BACE,gBACA,wBACA,qBACA,SAGF,kCACE,oBACA,mBAEA,cAEA,oDACE,oBACA,mBACA,WACA,eAGE,sEACE,qCACA,kDAEA,6JAEE,uCAOV,uBACE,mBACA,gBACA,yBACA,qBACA,yBAEA,kCACE,kBACA,WACA,WACA,kBACA,gBACA,4BACA,oBAIJ,2BACE,oBACA,4CACA,iBAEA,kCACE,gBAIF,oCACE,gBAGF,wGAEE,qBAGF,8FAEE,qDACA,wDAGF,4FAEE,sDACA,yDAIJ,oCACE,oBACA,sBACA,4CAEA,2CACE,gBACA,WAGF,6CACE,gBACA,WAGF,0HAEE,sBAGF,gHAEE,qDACA,sDAGF,8GAEE,wDACA,yDCrfJ,qBACE,gCACA,+BACA,+BACA,mCACA,uCACA,qCACA,yCAEA,kCACA,uBACA,oBACA,mBACA,WACA,gCAEA,kCACA,4CACA,yBACA,sBACA,oCACA,gBACA,eACA,0BAEA,WACE,mEAKF,uBACE,oBAEF,oCACE,cAGF,uDAEE,+BACA,qCAGF,mCACE,aACA,0CAGF,8BACE,WACA,mBACA,oBAGF,sCACE,4BACA,oBACA,mBACA,uBACA,oBACA,uCACA,gDACA,oBACA,gCACA,kCACA,iBACA,gBACA,mCAmBF,wBACE,mCACA,uCACA,+CAGF,wBACE,mCACA,uCACA,+CAGF,0BACE,gCACA,6BACA,6BACA,mCACA,uCACA,qCACA,yCAGF,6BACE,sBACA,gCACA,+BACA,mCACA,uCACA,uCACA,yCAEA,uEAEE,uBAIJ,6BACE,kCACA,qCACA,uEACA,2EACA,6BACA,qCACA,8CAGF,6BACE,qCACA,kCACA,6BACA,uEACA,2EACA,qCACA,8CAGF,2BACE,mCACA,gCACA,6BACA,qEACA,yEACA,qCACA,4CAGF,6BACE,qCACA,kCACA,6BACA,uEACA,2EACA,qCACA,8CAGF,0BACE,kCACA,+BACA,6BACA,oEACA,wEACA,qCACA,2CAKF,2CACE,sBACA,oCACA,wCACA,4CACA,4CACA,uCAEA,mGAEE,uBACA,qCACA,yCAIJ,yCACE,sBACA,kCACA,sCACA,0CACA,0CACA,uCAEA,+FAEE,uBACA,qCACA,yCAIJ,2CACE,sBACA,oCACA,wCACA,4CACA,4CACA,yCAEA,mGAEE,yBACA,qCACA,yCAIJ,wCACE,sBACA,iCACA,qCACA,yCACA,yCACA,uCAEA,6FAEE,uBACA,qCACA,yCAIJ,wCACE,sBACA,gCACA,+BACA,mCACA,uCACA,uCACA,uCAEA,6FAEE,uBACA,qCACA,yCC7PN,mCACE,aACA,mBACA,WAIA,2CACE,kCLOJ,oDAEE,mBAIJ,qBAGE,sBAGF,KACE,SACA","file":"main.css"}
1
+ {"version":3,"sourceRoot":"","sources":["../src/styles/_global.scss","../src/styles/_variables.scss","../src/styles/main.scss","../src/styles/_base.scss","../src/styles/_utility.scss","../src/styles/_controls.scss","../src/styles/_buttons.scss","../src/styles/_vueform.scss"],"names":[],"mappings":"AAAQ,mFACA,2FACA,qFACA,uFCHR,MACE,4EAEA,yBACA,0BAEA,kBACA,sBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBAEA,mBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBAEA,sBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBAEA,oBACA,qBACA,qBACA,qBAEA,4BACA,qCACA,0BACA,4BACA,4BACA,mCACA,yBACA,kCAEA,oCAEA,gCACA,yCAEA,2BACA,iCACA,+BAEA,mCACA,0CACA,sCACA,+BACA,iCACA,mCACA,iCACA,sCACA,sCAEA,gCAEA,iCAEA,2CDrEF,8CACE,KACE,iCAIJ,cACE,kCACA,uBACA,yBACA,mCACA,kCACA,sBAEA,wBACE,8BACA,kCACA,uBACA,mBACA,gBACA,gBACA,gCACA,oBACA,mBACA,kBACA,qCErBJ,cCPE,yCACA,sCACA,mDAIA,mGAKE,cACA,eAGF,qFAIE,oBACA,uBAEF,sHAOE,yBAEF,gBACE,SAQF,2DAEE,4BAGF,gCACE,4BAGF,2BACE,YACA,wCACA,eAGF,oBACE,cAGF,2BACE,aACA,mBAGF,4BACE,sBAEA,mCACE,WACA,kBACA,kCC9CA,mBACE,oBAGF,oBACE,yBACA,0BAGF,oBACE,wBACA,2BAIA,oBACE,wBADF,oBACE,2BADF,oBACE,yBADF,oBACE,0BAhBJ,mBACE,yBAGF,oBACE,8BACA,+BAGF,oBACE,6BACA,gCAIA,oBACE,6BADF,oBACE,gCADF,oBACE,8BADF,oBACE,+BAhBJ,mBACE,wBAGF,oBACE,6BACA,8BAGF,oBACE,4BACA,+BAIA,oBACE,4BADF,oBACE,+BADF,oBACE,6BADF,oBACE,8BAhBJ,mBACE,uBAGF,oBACE,4BACA,6BAGF,oBACE,2BACA,8BAIA,oBACE,2BADF,oBACE,8BADF,oBACE,4BADF,oBACE,6BAhBJ,mBACE,yBAGF,oBACE,8BACA,+BAGF,oBACE,6BACA,gCAIA,oBACE,6BADF,oBACE,gCADF,oBACE,8BADF,oBACE,+BAhBJ,mBACE,uBAGF,oBACE,4BACA,6BAGF,oBACE,2BACA,8BAIA,oBACE,2BADF,oBACE,8BADF,oBACE,4BADF,oBACE,6BAMJ,sBACE,uBAEF,uBACE,4BACA,6BAEF,uBACE,2BACA,8BAGA,uBACE,2BADF,uBACE,8BADF,uBACE,4BADF,uBACE,6BAnCJ,mBACE,qBAGF,oBACE,0BACA,2BAGF,oBACE,yBACA,4BAIA,oBACE,yBADF,oBACE,4BADF,oBACE,0BADF,oBACE,2BAhBJ,mBACE,0BAGF,oBACE,+BACA,gCAGF,oBACE,8BACA,iCAIA,oBACE,8BADF,oBACE,iCADF,oBACE,+BADF,oBACE,gCAhBJ,mBACE,yBAGF,oBACE,8BACA,+BAGF,oBACE,6BACA,gCAIA,oBACE,6BADF,oBACE,gCADF,oBACE,8BADF,oBACE,+BAhBJ,mBACE,wBAGF,oBACE,6BACA,8BAGF,oBACE,4BACA,+BAIA,oBACE,4BADF,oBACE,+BADF,oBACE,6BADF,oBACE,8BAhBJ,mBACE,0BAGF,oBACE,+BACA,gCAGF,oBACE,8BACA,iCAIA,oBACE,8BADF,oBACE,iCADF,oBACE,+BADF,oBACE,gCAhBJ,mBACE,wBAGF,oBACE,6BACA,8BAGF,oBACE,4BACA,+BAIA,oBACE,4BADF,oBACE,+BADF,oBACE,6BADF,oBACE,8BA0BN,qBACE,iBADF,qBACE,sBADF,qBACE,qBADF,qBACE,oBADF,qBACE,sBADF,qBACE,oBAIJ,sBACE,wBAGF,6BACE,+BAGF,uBACE,yBAGF,8BACE,gCAGF,yBACE,eAGF,2BACE,sBAGF,2BACE,kBAGF,qBACE,sBAGF,sBACE,0BAGF,qBACE,uBAGF,sBACE,2BAGF,uBACE,eAGF,sBACE,mBAGF,kCACE,mBAGF,uDAEE,oCAEF,yBACE,sCAEF,4BACE,yCAEF,4BACE,yCAEF,qDAEE,uCAGF,yBACE,8BAGF,oBACE,yBAGF,0BACE,+BAGF,0CAEE,wBChKF,yBACE,kBAGF,0BACE,gBACA,uBACA,mBAGF,4BACE,oCACA,gCAEA,mEAEE,uCACA,mCAGF,mEAEE,uCACA,mCAIJ,4BACE,iCACA,qCACA,uCAEA,wBACA,kCACE,uCACA,8BAEF,mCACE,oCACA,wCACA,qCAEF,qCACE,sCACA,0CACA,qCAEF,qCACE,sCACA,0CACA,qCAEF,kCACE,mCACA,uCACA,qCAEF,kCACE,+BACA,qCACA,qCAIJ,sBACE,oBACA,UACA,qBACA,8BACA,yBACA,iBACA,gBACA,eACA,gBACA,uBACA,mBAGF,2BACE,oBACA,mBACA,uBACA,kBACA,eACA,kBACA,oBACA,8BACA,yBACA,kCACA,gBACA,gBACA,kCAGF,wBACE,qBACA,iDAEA,2CACE,YACA,aAGF,iDACE,yBAGF,iDACE,8BACA,oBACA,+BACA,4BACA,iCAGF,uDACE,8BACA,4BAGF,kDACE,yBAIJ,6BACE,OACA,kBACA,YACA,gCACA,kCACA,iBAGF,uBACE,WACA,oBACA,uBACA,YACA,yBACA,gCACA,oCACA,yBAEA,oCACE,kCACA,kBAGF,mLAIE,sBASF,4MAGE,0CACA,UAIJ,+BACE,kBACA,aACA,sBACA,WAGF,0BACE,YAGF,2BACE,aACA,mBACA,oBACA,oCACA,4CACA,4BACA,oCACA,yBACA,6BAEA,wCACE,kCACA,kBAGF,qCACE,6BACA,mBAGF,8CACE,gCAGF,iCACE,gCAGF,oJAIE,0CACA,yCAEA,4KACE,yCAIJ,+BACE,+CACA,uCAEA,kDACE,mCAGF,2CACE,uCAGF,8CACE,uCACA,mCAGF,wCACE,mCACA,uCAIJ,+BACE,+CACA,uCAEA,kDACE,mCAGF,2CACE,uCAGF,8CACE,uCACA,mCAGF,wCACE,mCACA,uCAKN,0BACE,aACA,mBACA,uBACA,YACA,yBACA,eACA,sBAEA,iCACE,yBACA,eACA,qBACA,uCACE,4BAIJ,mCACE,yBACA,yBAGF,wCACE,yBAGF,oCACE,kBACA,yBACA,uBACA,0CACE,sBAIJ,kCACE,kBACA,oBAIJ,0BACE,kBACA,wBACA,OACA,aACA,4BACA,oCACA,4CACA,qCACA,gBAGF,wBACE,aACA,mBACA,yBACA,SACA,gBACA,cACA,wCAGF,0BACE,qBACA,WACA,YAEA,sBACA,kBACA,eAEA,sCACA,qBACA,4BAEA,WACE,wCAGF,gCACE,kCACA,8BAGF,iCACE,WACA,kBACA,QACA,SACA,YACA,cACA,kBACA,yBACA,8CACA,UAGF,qEAEE,kCACA,gCAEA,mFACE,UAGF,iFACE,8BAIJ,uEAEE,WACA,mBAIJ,+BACE,gBACA,wBACA,qBACA,SAGF,kCACE,oBACA,mBAEA,cAEA,oDACE,oBACA,mBACA,WACA,eAGE,sEACE,qCACA,kDAEA,6JAEE,uCAOV,uBACE,mBACA,gBACA,yBACA,qBACA,yBAEA,kCACE,kBACA,WACA,WACA,kBACA,gBACA,4BACA,oBAIJ,2BACE,oBACA,4CACA,iBACA,4BAEA,kCACE,gBAIF,oCACE,gBAGF,wGAEE,qBAGF,8FAEE,qDACA,wDAGF,4FAEE,sDACA,yDAIJ,oCACE,oBACA,sBACA,4CAEA,2CACE,gBACA,WAGF,6CACE,gBACA,WAGF,0HAEE,sBAGF,gHAEE,qDACA,sDAGF,8GAEE,wDACA,yDCtfJ,qBACE,gCACA,+BACA,+BACA,mCACA,uCACA,qCACA,yCAEA,kCACA,uBACA,oBACA,mBACA,WACA,gCAEA,kCACA,4CACA,yBACA,sBACA,oCACA,gBACA,eACA,0BAEA,WACE,mEAKF,uBACE,oBAEF,oCACE,cAGF,uDAEE,+BACA,qCAGF,mCACE,aACA,0CAGF,8BACE,WACA,mBACA,oBAGF,sCACE,4BACA,oBACA,mBACA,uBACA,oBACA,uCACA,gDACA,oBACA,gCACA,kCACA,iBACA,gBACA,mCAmBF,wBACE,mCACA,uCACA,+CAGF,wBACE,mCACA,uCACA,+CAGF,0BACE,gCACA,6BACA,6BACA,mCACA,uCACA,qCACA,yCAGF,6BACE,sBACA,gCACA,+BACA,mCACA,uCACA,uCACA,yCAEA,uEAEE,uBAIJ,6BACE,kCACA,qCACA,uEACA,2EACA,6BACA,qCACA,8CAGF,6BACE,qCACA,kCACA,6BACA,uEACA,2EACA,qCACA,8CAGF,2BACE,mCACA,gCACA,6BACA,qEACA,yEACA,qCACA,4CAGF,6BACE,qCACA,kCACA,6BACA,uEACA,2EACA,qCACA,8CAGF,0BACE,kCACA,+BACA,6BACA,oEACA,wEACA,qCACA,2CAKF,2CACE,sBACA,oCACA,wCACA,4CACA,4CACA,uCAEA,mGAEE,uBACA,qCACA,yCAIJ,yCACE,sBACA,kCACA,sCACA,0CACA,0CACA,uCAEA,+FAEE,uBACA,qCACA,yCAIJ,2CACE,sBACA,oCACA,wCACA,4CACA,4CACA,yCAEA,mGAEE,yBACA,qCACA,yCAIJ,wCACE,sBACA,iCACA,qCACA,yCACA,yCACA,uCAEA,6FAEE,uBACA,qCACA,yCAIJ,wCACE,sBACA,gCACA,+BACA,mCACA,uCACA,uCACA,uCAEA,6FAEE,uBACA,qCACA,yCC7PN,mCACE,aACA,mBACA,WAIA,2CACE,kCLQN,qBAGE,sBAGF,KACE,SACA,UAKF,cACE,eACA,QACA,aACA,sBACA,gBAEA,iCACE,OACA,aACA,sBACA,aACA","file":"main.css"}