admins-components 9.0.80 → 9.0.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admins-components103.js +2 -1
- package/dist/admins-components103.js.map +1 -1
- package/dist/admins-components105.js.map +1 -1
- package/dist/admins-components16.js +18 -10
- package/dist/admins-components16.js.map +1 -1
- package/dist/admins-components17.js.map +1 -1
- package/dist/admins-components21.js +43 -39
- package/dist/admins-components21.js.map +1 -1
- package/dist/admins-components22.js.map +1 -1
- package/dist/admins-components60.js +2 -1
- package/dist/admins-components60.js.map +1 -1
- package/dist/admins-components75.js +179 -161
- package/dist/admins-components75.js.map +1 -1
- package/dist/admins-components77.js.map +1 -1
- package/dist/admins-components91.js +2 -0
- package/dist/admins-components91.js.map +1 -1
- package/dist/admins-components93.js.map +1 -1
- package/dist/src/components/TextInput.vue.d.ts +8 -0
- package/dist/src/types/data-list.d.ts +3 -2
- package/dist/styles/components/data-table/data-list-options.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/styles/components/data-table/data-table.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/styles/components/data-table/filter-tags.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/package.json +1 -1
|
@@ -76,7 +76,8 @@ var L = /*@__PURE__*/ x({
|
|
|
76
76
|
handleUrl: L("searchConfig")
|
|
77
77
|
})), z = m(() => ({
|
|
78
78
|
...I.filterConfig,
|
|
79
|
-
handleUrl: L("filterConfig")
|
|
79
|
+
handleUrl: L("filterConfig"),
|
|
80
|
+
lazy: U.value == null ? I.filterConfig?.lazy ?? !0 : !U.value.filtersEager
|
|
80
81
|
})), B = p, V = D(!1), H = D(!1), U = D(null), W = D(!1), G = D(null), K = D(!1), q = D(I.filterConfig?.items ? l(I.filterConfig.items, I.id, !1) : {}), J = null;
|
|
81
82
|
re(() => {
|
|
82
83
|
J = new ResizeObserver((e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components103.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\nexport type { DataSearchProps } from './DataSearch.vue'\nexport type { DataFiltersProps } from './DataFilters.vue'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n loading?: boolean\n handleUrl?: boolean\n useSearch?: boolean\n useFilters?: boolean\n searchConfig?: DataSearchProps\n filterConfig?: DataFiltersProps\n fillHeight?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n loading: false,\n useSearch: true,\n useFilters: true,\n handleUrl: false,\n fillHeight: false,\n}\n\nexport function getDefaultFetchData(filters: FilterItem[], storageKey: string) {\n const defaultPaginator = getDefaultPaginator(storageKey)\n const defaultSort = getDefaultSort()\n const defaultSearch = getDefaultSearch()\n const defaultFilters = getDefaultFilterValues(filters, storageKey, true)\n\n return {\n ...defaultPaginator,\n ...defaultSort,\n ...defaultSearch,\n ...defaultFilters,\n }\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount, useSlots } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator, { getDefaultPaginator } from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport DataSort, { getDefaultSort, type DataSortOption } from '@/components/data-table/DataSort.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n type FilterResponse,\n type DataFiltersProps,\n type FilterItem,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\nimport DataSearch, { getDefaultSearch, type DataSearchProps } from './DataSearch.vue'\nimport { getDefaultFilters, getDefaultFilterValues } from '@/utils/dataFilters.ts'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\nconst slots = useSlots()\nconst hasActionsSlot = computed(() => !!slots.actions)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n searchConfig: undefined,\n filterConfig: undefined,\n})\n\nfunction resolvedHandleUrl(side: 'searchConfig' | 'filterConfig'): boolean | undefined {\n const sideConfig = props[side]\n if (sideConfig && Object.hasOwn(sideConfig as object, 'handleUrl')) {\n return (sideConfig as { handleUrl?: boolean }).handleUrl\n }\n return props.handleUrl\n}\n\nconst mergedSearchConfig = computed<DataSearchProps>(() => ({\n ...props.searchConfig,\n handleUrl: resolvedHandleUrl('searchConfig'),\n}))\n\nconst mergedFilterConfig = computed<DataFiltersProps>(() => ({\n ...(props.filterConfig as DataFiltersProps),\n handleUrl: resolvedHandleUrl('filterConfig'),\n}))\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' } | null]\n 'search-change': [filters: Record<string, string | boolean>]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\nconst activeFilters = ref<Record<string, unknown>>(\n props.filterConfig?.items ? getDefaultFilters(props.filterConfig.items, props.id, false) : {},\n)\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(response: FilterResponse) {\n activeFilters.value = response.values\n emit('filter-change', response.transformed)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n\nconst searchChange = (value: Record<string, string | boolean>) => {\n emit('search-change', value)\n}\n\nconst sortableColumns = computed<DataSortOption[]>(() =>\n props.config.columns.filter((c) => c.sort).map((c) => ({ value: c.property, label: c.label })),\n)\n\nconst currentSort = ref<{ key: string; direction: 'asc' | 'desc' } | null>(\n props.handleUrl ? getDefaultSort() : null,\n)\n\nconst onSortChange = (sort: { key: string; direction: 'asc' | 'desc' } | null) => {\n currentSort.value = sort\n emit('sort-change', sort)\n}\n</script>\n\n<template>\n <div\n ref=\"root\"\n class=\"ac-component c-data-list\"\n :class=\"{ 'c-data-list--fill-height': fillHeight }\"\n >\n <div class=\"c-data-list__toolbar\">\n <DataSearch v-if=\"useSearch\" v-bind=\"mergedSearchConfig\" @search-change=\"searchChange\" />\n <Button\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n label=\"Szűrők\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'primary' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div\n class=\"flex-center gap-1 flex-center-wrap-on-mobile\"\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n >\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"filterConfig.items\"\n compact\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n <div class=\"c-data-list__toolbar__right\">\n <DataSort\n v-if=\"sortableColumns.length > 0\"\n v-model=\"currentSort\"\n :options=\"sortableColumns\"\n :handle-url=\"handleUrl\"\n @sort-change=\"onSortChange\"\n />\n\n <Button\n icon=\"fa-solid fa-gear\"\n class=\"lh-normal settings-btn\"\n ariaLabel=\"Beállítások\"\n @click=\"showOptions = true\"\n />\n <Button\n icon=\"fa-solid fa-question\"\n class=\"lh-normal\"\n @click=\"showGuide = true\"\n ariaLabel=\"Súgó\"\n />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n v-bind=\"mergedFilterConfig\"\n :storage-key=\"id\"\n :open=\"showFilters\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n :initial-sort=\"currentSort\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"onSortChange\"\n >\n <template\n v-for=\"col in internalConfig.columns\"\n :key=\"col.property\"\n #[`cell:${col.property}`]=\"slotProps\"\n >\n <slot :name=\"`cell:${col.property}`\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"hasActionsSlot\" #actions=\"slotProps\">\n <slot name=\"actions\" v-bind=\"slotProps\" />\n </template>\n </DataTable>\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n >\n <template\n v-for=\"col in internalConfig.columns\"\n :key=\"col.property\"\n #[`cell:${col.property}`]=\"slotProps\"\n >\n <slot :name=\"`cell:${col.property}`\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"hasActionsSlot\" #actions=\"slotProps\">\n <slot name=\"actions\" v-bind=\"slotProps\" />\n </template>\n </DataCards>\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n :handle-url=\"handleUrl\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;iDAsBa,IAAmB;CAC9B,kBAAkB;CAClB,WAAW;CACX,SAAS;CACT,WAAW;CACX,YAAY;CACZ,WAAW;CACX,YAAY;AACd;AAEA,SAAgB,EAAoB,GAAuB,GAAoB;CAC7E,IAAM,IAAmB,EAAoB,CAAU,GACjD,IAAc,EAAe,GAC7B,IAAgB,EAAiB,GACjC,IAAiB,EAAuB,GAAS,GAAY,EAAI;CAEvE,OAAO;EACL,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;CACL;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BA,IAAM,IAAiB,EAA6C,IAAI,GAClE,IAAQ,EAAS,GACjB,IAAiB,QAAe,CAAC,CAAC,EAAM,OAAO,GAE/C,IAAQ;EAMd,SAAS,EAAkB,GAA4D;GACrF,IAAM,IAAa,EAAM;GAIzB,OAHI,KAAc,OAAO,OAAO,GAAsB,WAAW,IACvD,EAAuC,YAE1C,EAAM;EACf;EAEA,IAAM,IAAqB,SAAiC;GAC1D,GAAG,EAAM;GACT,WAAW,EAAkB,cAAc;EAC7C,EAAE,GAEI,IAAqB,SAAkC;GAC3D,GAAI,EAAM;GACV,WAAW,EAAkB,cAAc;EAC7C,EAAE,GAEI,IAAO,GASP,IAAc,EAAI,EAAK,GACvB,IAAY,EAAI,EAAK,GACrB,IAAmB,EAA6B,IAAI,GACpD,IAAW,EAAI,EAAK,GACpB,IAAO,EAAwB,IAAI,GACnC,IAAc,EAAI,EAAK,GAEvB,IAAgB,EACpB,EAAM,cAAc,QAAQ,EAAkB,EAAM,aAAa,OAAO,EAAM,IAAI,EAAK,IAAI,CAAC,CAC9F,GACI,IAAwC;EAS5C,AAPA,SAAgB;GAId,AAHA,IAAiB,IAAI,gBAAgB,MAAY;IAC/C,EAAS,SAAS,EAAQ,EAAE,EAAE,YAAY,SAAS,KAAK,EAAM;GAChE,CAAC,GACG,EAAK,SAAO,EAAe,QAAQ,EAAK,KAAK;EACnD,CAAC,GAED,SAAsB,GAAgB,WAAW,CAAC;EAElD,IAAM,KAAkB,QAAkC;GACxD,IAAM,IAAS,EAAiB,OAAO;GAEvC,OADI,MAAW,WAAW,MAAW,UAAgB,IAC9C,EAAS,QAAQ,UAAU;EACpC,CAAC,GAEK,IAAiB,QAA+B;GACpD,IAAI,CAAC,EAAiB,OAAO,OAAO,EAAM;GAC1C,IAAM,IAAQ,EAAiB,MAAM,aAC/B,IAAS,EAAM,OAAO,QAAQ,KAAK,OAAO;IAC9C,GAAG;IACH,SAAS,EAAiB,MAAO,QAAQ,EAAE,aAAa,EAAE,YAAY;GACxE,EAAE;GAQF,OAPI,GAAO,UACT,EAAO,MAAM,GAAG,MAAM;IACpB,IAAM,IAAK,EAAM,QAAQ,EAAE,QAAQ,GAC7B,IAAK,EAAM,QAAQ,EAAE,QAAQ;IACnC,QAAQ,MAAO,KAAK,MAAM,MAAO,MAAO,KAAK,MAAM;GACrD,CAAC,GAEI;IAAE,GAAG,EAAM;IAAQ,SAAS;GAAO;EAC5C,CAAC;EAED,SAAS,GAAiB,GAAqB;GAE7C,AADA,EAAiB,QAAQ,GACzB,EAAK,mBAAmB,CAAC;EAC3B;EAEA,EAAa;GACX,mBAAoB,EAAY,QAAQ;GACxC,oBAAqB,EAAY,QAAQ;GACzC,mBAAoB,EAAY,QAAQ;GACxC,oBAAqB,EAAY,QAAQ;EAC3C,CAAC;EAED,eAAe,GAAW,GAAa;GAErC,AADA,EAAY,QAAQ,IACpB,iBAAiB;IACf,EAAe,OAAO,YAAY,CAAG;GACvC,GAAG,GAAG;EACR;EAEA,SAAS,GAAe,GAA0B;GAEhD,AADA,EAAc,QAAQ,EAAS,QAC/B,EAAK,iBAAiB,EAAS,WAAW;EAC5C;EAEA,IAAM,IAAqB,QACnB,OAAO,OAAO,EAAc,KAAK,CAAC,CAAC,QAAQ,MAAM,KAAK,QAAQ,MAAM,EAAE,CAAC,CAAC,MAChF,GAEM,KAAgB,QACd,CAAC,CAAC,EAAM,eAAe,EAAM,MAAM,SAAS,KAAK,CAAC,EAAM,QAChE,GAEM,MAAgB,MAA4C;GAChE,EAAK,iBAAiB,CAAK;EAC7B,GAEM,IAAkB,QACtB,EAAM,OAAO,QAAQ,QAAQ,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,OAAO;GAAE,OAAO,EAAE;GAAU,OAAO,EAAE;EAAM,EAAE,CAC/F,GAEM,IAAc,EAClB,EAAM,YAAY,EAAe,IAAI,IACvC,GAEM,KAAgB,MAA4D;GAEhF,AADA,EAAY,QAAQ,GACpB,EAAK,eAAe,CAAI;EAC1B;oBAIE,EAAA,GAAA,EAyHM,OAAA;GAxHA,SAAA;GAAJ,KAAI;GACJ,OAAK,GAAA,CAAC,4BAA0B,EAAA,4BACM,EAAA,WAAU,CAAA,CAAA;;GAEhD,EA6CM,OA7CN,GA6CM;IA5Cc,EAAA,aAAlB,EAAA,GAAA,EAAyF,IAAzF,EAAyF,EAAA,KAAA,EAAA,GAApD,EAAA,OAAkB,EAAG,gBAAe,GAAY,CAAA,GAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA;IAE7E,EAAA,cAAc,EAAA,cAAc,SAAS,EAAA,aAAa,MAAM,SAAM,KADtE,EAAA,GAAA,EAQE,GAAA;;KANA,OAAM;KACN,MAAK;KACJ,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,QAAW;KACnB,OAAA,EAAA,eAAA,IAAA;KACC,MAAM,EAAA,QAAkB,IAAA,YAAA;KACxB,WAAW,EAAA,QAAkB,IAAO,EAAA,QAAqB,KAAA;;IAIpD,EAAA,cAAc,EAAA,cAAc,SAAS,EAAA,aAAa,MAAM,SAAM,KAFtE,EAAA,GAAA,EAWM,OAXN,GAWM,CAPJ,EAME,GAAA;KALC,SAAS,EAAA;KACT,OAAO,EAAA,aAAa;KACrB,SAAA;KACC,UAAM,AAAA,EAAA,QAAG,MAAgB,EAAA,OAAgB,YAAY,CAAG;KACxD,cAAY;;IAGjB,EAqBM,OArBN,GAqBM;KAnBI,EAAA,MAAgB,SAAM,KAD9B,EAAA,GAAA,EAME,GAAA;;MAJS,YAAA,EAAA;MAAA,uBAAA,AAAA,EAAA,QAAA,MAAA,EAAW,QAAA;MACnB,SAAS,EAAA;MACT,cAAY,EAAA;MACC;;;;;;KAGhB,EAKE,GAAA;MAJA,MAAK;MACL,OAAM;MACN,WAAU;MACT,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,QAAW;;KAErB,EAKE,GAAA;MAJA,MAAK;MACL,OAAM;MACL,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,QAAS;MACjB,WAAU;;;;GAMR,EAAA,cAAc,EAAA,cAAc,SAAS,EAAA,aAAa,MAAM,SAAM,KAFtE,EAAA,GAAA,EAQE,GARF,EAQE;;IAPI,SAAA;IAAJ,KAAI;GAEI,GAAA,EAAA,OAAkB;IACzB,eAAa,EAAA;IACb,MAAM,EAAA;IACN,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,QAAW;IAClB,UAAQ;;GAEX,EAA8D,GAAA;IAA9C,MAAM,EAAA;IAAY,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,QAAS;;GAE1C,GAAA,UAAe,WADvB,EAAA,GAAA,EAqBY,GAAA;;IAnBT,QAAQ,EAAA;IACR,SAAS,EAAA;IACT,OAAO,EAAA;IACP,UAAU,EAAA,SAAoB,KAAA;IAC9B,gBAAc,EAAA;IACd,gBAAa,AAAA,EAAA,QAAA,MAAE,EAAI,iBAAkB,CAAM;IAC3C,mBAAgB,AAAA,EAAA,QAAA,MAAE,EAAI,oBAAqB,CAAM;IACpC;GAGE,GAAA,EAAA,EAAA,GAAA,EAAA,GAAA,CAAA,EAAA,EAAA,MAAe,UAAtB;IAEE,MAAA,QAAA,EAAI;IAEb,IAAA,GAF2B,MAAS,CAEpC,EAA0D,EAAA,QAAA,QAArC,EAAI,YAAQ,EAAA,EAAY,CAAS,CAAA,CAAA,CAAA,CAAA;KAExC,GAAA,EAAA,QAAA;IAAiB,MAAA;IAC/B,IAAA,GADwC,MAAS,CACjD,EAA0C,EAAA,QAAA,WAAA,EAAA,EAAb,CAAS,CAAA,CAAA,CAAA,CAAA;;;;;;;;GAI1C,CAAA,MAAA,EAAA,GAAA,EAkBY,GAAA;;IAhBT,QAAQ,EAAA;IACR,SAAS,EAAA;IACT,OAAO,EAAA;IACP,UAAU,EAAA,SAAoB,KAAA;IAC9B,mBAAgB,AAAA,EAAA,QAAA,MAAE,EAAI,oBAAqB,CAAM;GAGlC,GAAA,EAAA,EAAA,GAAA,EAAA,GAAA,CAAA,EAAA,EAAA,MAAe,UAAtB;IAEE,MAAA,QAAA,EAAI;IAEb,IAAA,GAF2B,MAAS,CAEpC,EAA0D,EAAA,QAAA,QAArC,EAAI,YAAQ,EAAA,EAAY,CAAS,CAAA,CAAA,CAAA,CAAA;KAExC,GAAA,EAAA,QAAA;IAAiB,MAAA;IAC/B,IAAA,GADwC,MAAS,CACjD,EAA0C,EAAA,QAAA,WAAA,EAAA,EAAb,CAAS,CAAA,CAAA,CAAA,CAAA;;;;;;;;GAKlC,EAAA,cAAc,GAAA,SADtB,EAAA,GAAA,EAME,GAAA;;IAJC,UAAU,EAAA;IACV,eAAa,EAAA;IACb,cAAY,EAAA;IACZ,uBAAiB,AAAA,EAAA,SAAA,MAAE,EAAI,qBAAsB,CAAM;;;;;;GAGtD,EAQE,GAAA;IAPC,MAAM,EAAA;IACN,SAAS,EAAA,OAAO;IAChB,UAAU,EAAA,YAAQ,CAAA;IAClB,eAAa,EAAA;IACb,WAAW,EAAA;IACX,SAAK,AAAA,EAAA,SAAA,MAAE,EAAA,QAAW;IAClB,UAAQ"}
|
|
1
|
+
{"version":3,"file":"admins-components103.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\nexport type { DataSearchProps } from './DataSearch.vue'\nexport type { DataFiltersProps } from './DataFilters.vue'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n loading?: boolean\n handleUrl?: boolean\n useSearch?: boolean\n useFilters?: boolean\n searchConfig?: DataSearchProps\n filterConfig?: DataFiltersProps\n fillHeight?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n loading: false,\n useSearch: true,\n useFilters: true,\n handleUrl: false,\n fillHeight: false,\n}\n\nexport function getDefaultFetchData(filters: FilterItem[], storageKey: string) {\n const defaultPaginator = getDefaultPaginator(storageKey)\n const defaultSort = getDefaultSort()\n const defaultSearch = getDefaultSearch()\n const defaultFilters = getDefaultFilterValues(filters, storageKey, true)\n\n return {\n ...defaultPaginator,\n ...defaultSort,\n ...defaultSearch,\n ...defaultFilters,\n }\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount, useSlots } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator, { getDefaultPaginator } from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport DataSort, { getDefaultSort, type DataSortOption } from '@/components/data-table/DataSort.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n type FilterResponse,\n type DataFiltersProps,\n type FilterItem,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\nimport DataSearch, { getDefaultSearch, type DataSearchProps } from './DataSearch.vue'\nimport { getDefaultFilters, getDefaultFilterValues } from '@/utils/dataFilters.ts'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\nconst slots = useSlots()\nconst hasActionsSlot = computed(() => !!slots.actions)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n searchConfig: undefined,\n filterConfig: undefined,\n})\n\nfunction resolvedHandleUrl(side: 'searchConfig' | 'filterConfig'): boolean | undefined {\n const sideConfig = props[side]\n if (sideConfig && Object.hasOwn(sideConfig as object, 'handleUrl')) {\n return (sideConfig as { handleUrl?: boolean }).handleUrl\n }\n return props.handleUrl\n}\n\nconst mergedSearchConfig = computed<DataSearchProps>(() => ({\n ...props.searchConfig,\n handleUrl: resolvedHandleUrl('searchConfig'),\n}))\n\nconst mergedFilterConfig = computed<DataFiltersProps>(() => ({\n ...(props.filterConfig as DataFiltersProps),\n handleUrl: resolvedHandleUrl('filterConfig'),\n lazy:\n resolvedSettings.value != null\n ? !resolvedSettings.value.filtersEager\n : (props.filterConfig?.lazy ?? true),\n}))\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' } | null]\n 'search-change': [filters: Record<string, string | boolean>]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\nconst activeFilters = ref<Record<string, unknown>>(\n props.filterConfig?.items ? getDefaultFilters(props.filterConfig.items, props.id, false) : {},\n)\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(response: FilterResponse) {\n activeFilters.value = response.values\n emit('filter-change', response.transformed)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n\nconst searchChange = (value: Record<string, string | boolean>) => {\n emit('search-change', value)\n}\n\nconst sortableColumns = computed<DataSortOption[]>(() =>\n props.config.columns.filter((c) => c.sort).map((c) => ({ value: c.property, label: c.label })),\n)\n\nconst currentSort = ref<{ key: string; direction: 'asc' | 'desc' } | null>(\n props.handleUrl ? getDefaultSort() : null,\n)\n\nconst onSortChange = (sort: { key: string; direction: 'asc' | 'desc' } | null) => {\n currentSort.value = sort\n emit('sort-change', sort)\n}\n</script>\n\n<template>\n <div\n ref=\"root\"\n class=\"ac-component c-data-list\"\n :class=\"{ 'c-data-list--fill-height': fillHeight }\"\n >\n <div class=\"c-data-list__toolbar\">\n <DataSearch v-if=\"useSearch\" v-bind=\"mergedSearchConfig\" @search-change=\"searchChange\" />\n <Button\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n label=\"Szűrők\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'primary' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div\n class=\"flex-center gap-1 flex-center-wrap-on-mobile\"\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n >\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"filterConfig.items\"\n compact\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n <div class=\"c-data-list__toolbar__right\">\n <DataSort\n v-if=\"sortableColumns.length > 0\"\n v-model=\"currentSort\"\n :options=\"sortableColumns\"\n :handle-url=\"handleUrl\"\n @sort-change=\"onSortChange\"\n />\n\n <Button\n icon=\"fa-solid fa-gear\"\n class=\"lh-normal settings-btn\"\n ariaLabel=\"Beállítások\"\n @click=\"showOptions = true\"\n />\n <Button\n icon=\"fa-solid fa-question\"\n class=\"lh-normal\"\n @click=\"showGuide = true\"\n ariaLabel=\"Súgó\"\n />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n v-bind=\"mergedFilterConfig\"\n :storage-key=\"id\"\n :open=\"showFilters\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n :initial-sort=\"currentSort\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"onSortChange\"\n >\n <template\n v-for=\"col in internalConfig.columns\"\n :key=\"col.property\"\n #[`cell:${col.property}`]=\"slotProps\"\n >\n <slot :name=\"`cell:${col.property}`\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"hasActionsSlot\" #actions=\"slotProps\">\n <slot name=\"actions\" v-bind=\"slotProps\" />\n </template>\n </DataTable>\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n >\n <template\n v-for=\"col in internalConfig.columns\"\n :key=\"col.property\"\n #[`cell:${col.property}`]=\"slotProps\"\n >\n <slot :name=\"`cell:${col.property}`\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"hasActionsSlot\" #actions=\"slotProps\">\n <slot name=\"actions\" v-bind=\"slotProps\" />\n </template>\n </DataCards>\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n :handle-url=\"handleUrl\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components105.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\nexport type { DataSearchProps } from './DataSearch.vue'\nexport type { DataFiltersProps } from './DataFilters.vue'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n loading?: boolean\n handleUrl?: boolean\n useSearch?: boolean\n useFilters?: boolean\n searchConfig?: DataSearchProps\n filterConfig?: DataFiltersProps\n fillHeight?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n loading: false,\n useSearch: true,\n useFilters: true,\n handleUrl: false,\n fillHeight: false,\n}\n\nexport function getDefaultFetchData(filters: FilterItem[], storageKey: string) {\n const defaultPaginator = getDefaultPaginator(storageKey)\n const defaultSort = getDefaultSort()\n const defaultSearch = getDefaultSearch()\n const defaultFilters = getDefaultFilterValues(filters, storageKey, true)\n\n return {\n ...defaultPaginator,\n ...defaultSort,\n ...defaultSearch,\n ...defaultFilters,\n }\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount, useSlots } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator, { getDefaultPaginator } from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport DataSort, { getDefaultSort, type DataSortOption } from '@/components/data-table/DataSort.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n type FilterResponse,\n type DataFiltersProps,\n type FilterItem,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\nimport DataSearch, { getDefaultSearch, type DataSearchProps } from './DataSearch.vue'\nimport { getDefaultFilters, getDefaultFilterValues } from '@/utils/dataFilters.ts'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\nconst slots = useSlots()\nconst hasActionsSlot = computed(() => !!slots.actions)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n searchConfig: undefined,\n filterConfig: undefined,\n})\n\nfunction resolvedHandleUrl(side: 'searchConfig' | 'filterConfig'): boolean | undefined {\n const sideConfig = props[side]\n if (sideConfig && Object.hasOwn(sideConfig as object, 'handleUrl')) {\n return (sideConfig as { handleUrl?: boolean }).handleUrl\n }\n return props.handleUrl\n}\n\nconst mergedSearchConfig = computed<DataSearchProps>(() => ({\n ...props.searchConfig,\n handleUrl: resolvedHandleUrl('searchConfig'),\n}))\n\nconst mergedFilterConfig = computed<DataFiltersProps>(() => ({\n ...(props.filterConfig as DataFiltersProps),\n handleUrl: resolvedHandleUrl('filterConfig'),\n}))\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' } | null]\n 'search-change': [filters: Record<string, string | boolean>]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\nconst activeFilters = ref<Record<string, unknown>>(\n props.filterConfig?.items ? getDefaultFilters(props.filterConfig.items, props.id, false) : {},\n)\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(response: FilterResponse) {\n activeFilters.value = response.values\n emit('filter-change', response.transformed)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n\nconst searchChange = (value: Record<string, string | boolean>) => {\n emit('search-change', value)\n}\n\nconst sortableColumns = computed<DataSortOption[]>(() =>\n props.config.columns.filter((c) => c.sort).map((c) => ({ value: c.property, label: c.label })),\n)\n\nconst currentSort = ref<{ key: string; direction: 'asc' | 'desc' } | null>(\n props.handleUrl ? getDefaultSort() : null,\n)\n\nconst onSortChange = (sort: { key: string; direction: 'asc' | 'desc' } | null) => {\n currentSort.value = sort\n emit('sort-change', sort)\n}\n</script>\n\n<template>\n <div\n ref=\"root\"\n class=\"ac-component c-data-list\"\n :class=\"{ 'c-data-list--fill-height': fillHeight }\"\n >\n <div class=\"c-data-list__toolbar\">\n <DataSearch v-if=\"useSearch\" v-bind=\"mergedSearchConfig\" @search-change=\"searchChange\" />\n <Button\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n label=\"Szűrők\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'primary' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div\n class=\"flex-center gap-1 flex-center-wrap-on-mobile\"\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n >\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"filterConfig.items\"\n compact\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n <div class=\"c-data-list__toolbar__right\">\n <DataSort\n v-if=\"sortableColumns.length > 0\"\n v-model=\"currentSort\"\n :options=\"sortableColumns\"\n :handle-url=\"handleUrl\"\n @sort-change=\"onSortChange\"\n />\n\n <Button\n icon=\"fa-solid fa-gear\"\n class=\"lh-normal settings-btn\"\n ariaLabel=\"Beállítások\"\n @click=\"showOptions = true\"\n />\n <Button\n icon=\"fa-solid fa-question\"\n class=\"lh-normal\"\n @click=\"showGuide = true\"\n ariaLabel=\"Súgó\"\n />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n v-bind=\"mergedFilterConfig\"\n :storage-key=\"id\"\n :open=\"showFilters\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n :initial-sort=\"currentSort\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"onSortChange\"\n >\n <template\n v-for=\"col in internalConfig.columns\"\n :key=\"col.property\"\n #[`cell:${col.property}`]=\"slotProps\"\n >\n <slot :name=\"`cell:${col.property}`\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"hasActionsSlot\" #actions=\"slotProps\">\n <slot name=\"actions\" v-bind=\"slotProps\" />\n </template>\n </DataTable>\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n >\n <template\n v-for=\"col in internalConfig.columns\"\n :key=\"col.property\"\n #[`cell:${col.property}`]=\"slotProps\"\n >\n <slot :name=\"`cell:${col.property}`\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"hasActionsSlot\" #actions=\"slotProps\">\n <slot name=\"actions\" v-bind=\"slotProps\" />\n </template>\n </DataCards>\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n :handle-url=\"handleUrl\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"admins-components105.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\nexport type { DataSearchProps } from './DataSearch.vue'\nexport type { DataFiltersProps } from './DataFilters.vue'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n loading?: boolean\n handleUrl?: boolean\n useSearch?: boolean\n useFilters?: boolean\n searchConfig?: DataSearchProps\n filterConfig?: DataFiltersProps\n fillHeight?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n loading: false,\n useSearch: true,\n useFilters: true,\n handleUrl: false,\n fillHeight: false,\n}\n\nexport function getDefaultFetchData(filters: FilterItem[], storageKey: string) {\n const defaultPaginator = getDefaultPaginator(storageKey)\n const defaultSort = getDefaultSort()\n const defaultSearch = getDefaultSearch()\n const defaultFilters = getDefaultFilterValues(filters, storageKey, true)\n\n return {\n ...defaultPaginator,\n ...defaultSort,\n ...defaultSearch,\n ...defaultFilters,\n }\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount, useSlots } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator, { getDefaultPaginator } from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport DataSort, { getDefaultSort, type DataSortOption } from '@/components/data-table/DataSort.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n type FilterResponse,\n type DataFiltersProps,\n type FilterItem,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\nimport DataSearch, { getDefaultSearch, type DataSearchProps } from './DataSearch.vue'\nimport { getDefaultFilters, getDefaultFilterValues } from '@/utils/dataFilters.ts'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\nconst slots = useSlots()\nconst hasActionsSlot = computed(() => !!slots.actions)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n searchConfig: undefined,\n filterConfig: undefined,\n})\n\nfunction resolvedHandleUrl(side: 'searchConfig' | 'filterConfig'): boolean | undefined {\n const sideConfig = props[side]\n if (sideConfig && Object.hasOwn(sideConfig as object, 'handleUrl')) {\n return (sideConfig as { handleUrl?: boolean }).handleUrl\n }\n return props.handleUrl\n}\n\nconst mergedSearchConfig = computed<DataSearchProps>(() => ({\n ...props.searchConfig,\n handleUrl: resolvedHandleUrl('searchConfig'),\n}))\n\nconst mergedFilterConfig = computed<DataFiltersProps>(() => ({\n ...(props.filterConfig as DataFiltersProps),\n handleUrl: resolvedHandleUrl('filterConfig'),\n lazy:\n resolvedSettings.value != null\n ? !resolvedSettings.value.filtersEager\n : (props.filterConfig?.lazy ?? true),\n}))\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' } | null]\n 'search-change': [filters: Record<string, string | boolean>]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\nconst activeFilters = ref<Record<string, unknown>>(\n props.filterConfig?.items ? getDefaultFilters(props.filterConfig.items, props.id, false) : {},\n)\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(response: FilterResponse) {\n activeFilters.value = response.values\n emit('filter-change', response.transformed)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n\nconst searchChange = (value: Record<string, string | boolean>) => {\n emit('search-change', value)\n}\n\nconst sortableColumns = computed<DataSortOption[]>(() =>\n props.config.columns.filter((c) => c.sort).map((c) => ({ value: c.property, label: c.label })),\n)\n\nconst currentSort = ref<{ key: string; direction: 'asc' | 'desc' } | null>(\n props.handleUrl ? getDefaultSort() : null,\n)\n\nconst onSortChange = (sort: { key: string; direction: 'asc' | 'desc' } | null) => {\n currentSort.value = sort\n emit('sort-change', sort)\n}\n</script>\n\n<template>\n <div\n ref=\"root\"\n class=\"ac-component c-data-list\"\n :class=\"{ 'c-data-list--fill-height': fillHeight }\"\n >\n <div class=\"c-data-list__toolbar\">\n <DataSearch v-if=\"useSearch\" v-bind=\"mergedSearchConfig\" @search-change=\"searchChange\" />\n <Button\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n label=\"Szűrők\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'primary' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div\n class=\"flex-center gap-1 flex-center-wrap-on-mobile\"\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n >\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"filterConfig.items\"\n compact\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n <div class=\"c-data-list__toolbar__right\">\n <DataSort\n v-if=\"sortableColumns.length > 0\"\n v-model=\"currentSort\"\n :options=\"sortableColumns\"\n :handle-url=\"handleUrl\"\n @sort-change=\"onSortChange\"\n />\n\n <Button\n icon=\"fa-solid fa-gear\"\n class=\"lh-normal settings-btn\"\n ariaLabel=\"Beállítások\"\n @click=\"showOptions = true\"\n />\n <Button\n icon=\"fa-solid fa-question\"\n class=\"lh-normal\"\n @click=\"showGuide = true\"\n ariaLabel=\"Súgó\"\n />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n v-bind=\"mergedFilterConfig\"\n :storage-key=\"id\"\n :open=\"showFilters\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n :initial-sort=\"currentSort\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"onSortChange\"\n >\n <template\n v-for=\"col in internalConfig.columns\"\n :key=\"col.property\"\n #[`cell:${col.property}`]=\"slotProps\"\n >\n <slot :name=\"`cell:${col.property}`\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"hasActionsSlot\" #actions=\"slotProps\">\n <slot name=\"actions\" v-bind=\"slotProps\" />\n </template>\n </DataTable>\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n >\n <template\n v-for=\"col in internalConfig.columns\"\n :key=\"col.property\"\n #[`cell:${col.property}`]=\"slotProps\"\n >\n <slot :name=\"`cell:${col.property}`\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"hasActionsSlot\" #actions=\"slotProps\">\n <slot name=\"actions\" v-bind=\"slotProps\" />\n </template>\n </DataCards>\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n :handle-url=\"handleUrl\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":""}
|
|
@@ -8,7 +8,8 @@ var h = { class: "ac-component c-input-wrapper" }, g = ["for"], _ = {
|
|
|
8
8
|
clearable: !0,
|
|
9
9
|
autocomplete: !0,
|
|
10
10
|
labelOnBorder: void 0,
|
|
11
|
-
size: "normal"
|
|
11
|
+
size: "normal",
|
|
12
|
+
debounce: 300
|
|
12
13
|
}, v = /*@__PURE__*/ o({
|
|
13
14
|
__name: "TextInput",
|
|
14
15
|
props: /*@__PURE__*/ s({
|
|
@@ -22,7 +23,8 @@ var h = { class: "ac-component c-input-wrapper" }, g = ["for"], _ = {
|
|
|
22
23
|
autocomplete: { type: Boolean },
|
|
23
24
|
size: {},
|
|
24
25
|
id: {},
|
|
25
|
-
inputClass: {}
|
|
26
|
+
inputClass: {},
|
|
27
|
+
debounce: {}
|
|
26
28
|
}, _),
|
|
27
29
|
emits: ["update:modelValue"],
|
|
28
30
|
setup(o, { emit: s }) {
|
|
@@ -34,14 +36,20 @@ var h = { class: "ac-component c-input-wrapper" }, g = ["for"], _ = {
|
|
|
34
36
|
e !== b.value && (b.value = e);
|
|
35
37
|
});
|
|
36
38
|
let S = t(() => !!_.labelOnBorder && _.labelOnBorder.trim() !== ""), C = t(() => S.value && x.value || _.label);
|
|
37
|
-
function w(
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
function w(t) {
|
|
40
|
+
return e((e) => {
|
|
41
|
+
v("update:modelValue", _.type === "number" ? e === "" ? null : Number(e) : e);
|
|
42
|
+
}, t);
|
|
40
43
|
}
|
|
41
|
-
let T =
|
|
42
|
-
|
|
44
|
+
let T = u(w(_.debounce));
|
|
45
|
+
m(() => _.debounce, (e) => {
|
|
46
|
+
T.value = w(e);
|
|
43
47
|
});
|
|
44
|
-
function E() {
|
|
48
|
+
function E(e) {
|
|
49
|
+
let t = e.target.value;
|
|
50
|
+
b.value = t, T.value(t);
|
|
51
|
+
}
|
|
52
|
+
function D() {
|
|
45
53
|
let e = _.type === "number" ? null : "";
|
|
46
54
|
b.value = e, v("update:modelValue", e);
|
|
47
55
|
}
|
|
@@ -68,7 +76,7 @@ var h = { class: "ac-component c-input-wrapper" }, g = ["for"], _ = {
|
|
|
68
76
|
disabled: o.disabled,
|
|
69
77
|
inputmode: o.type === "number" ? "decimal" : void 0,
|
|
70
78
|
autocomplete: o.autocomplete ? "on" : "off",
|
|
71
|
-
onInput:
|
|
79
|
+
onInput: E
|
|
72
80
|
}, null, 40, [
|
|
73
81
|
"id",
|
|
74
82
|
"type",
|
|
@@ -83,7 +91,7 @@ var h = { class: "ac-component c-input-wrapper" }, g = ["for"], _ = {
|
|
|
83
91
|
type: "button",
|
|
84
92
|
class: c(["c-icon-btn c-icon-btn--clear", { "c-icon-btn--hidden": !x.value }]),
|
|
85
93
|
"aria-label": "Mező törlése",
|
|
86
|
-
onClick:
|
|
94
|
+
onClick: D
|
|
87
95
|
}, [...t[0] ||= [a("i", { class: "fa-solid fa-fw fa-xmark" }, null, -1)]], 2)) : r("", !0)], 2)]));
|
|
88
96
|
}
|
|
89
97
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components16.js","names":[],"sources":["../src/components/TextInput.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { ControlSize } from '@/types/types'\nimport { debounce } from '@/utils/debounce'\n\nexport type TextInputType = 'text' | 'number' | 'textarea'\nexport interface TextInputProps {\n modelValue?: string | number | null\n type?: TextInputType\n label?: string\n labelOnBorder?: string\n placeholder?: string\n disabled?: boolean\n clearable?: boolean\n autocomplete?: boolean\n size?: ControlSize\n id?: string\n inputClass?: string\n}\n\nexport const textInputDefaults = {\n modelValue: undefined,\n type: 'text',\n disabled: false,\n clearable: true,\n autocomplete: true,\n labelOnBorder: undefined,\n size: 'normal' as ControlSize,\n} as TextInputProps\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useId, watch } from 'vue'\n\nconst props = withDefaults(defineProps<TextInputProps>(), textInputDefaults)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number | null]\n}>()\n\nconst inputId = computed(() => props.id ?? `c-input-${useId()}`)\n\nconst localValue = ref<string | number | null | undefined>(props.modelValue)\n\nconst hasValue = computed(() => {\n const v = localValue.value\n return v !== null && v !== undefined && String(v) !== ''\n})\n\nwatch(\n () => props.modelValue,\n (val) => {\n if (val === localValue.value) return\n localValue.value = val\n },\n)\n\nconst hasLabelOnBorder = computed(() => !!props.labelOnBorder && props.labelOnBorder.trim() !== '')\n\nconst borderLabelVisible = computed(() => (hasLabelOnBorder.value && hasValue.value) || props.label)\n\
|
|
1
|
+
{"version":3,"file":"admins-components16.js","names":[],"sources":["../src/components/TextInput.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { ControlSize } from '@/types/types'\nimport { debounce } from '@/utils/debounce'\n\nexport type TextInputType = 'text' | 'number' | 'textarea'\nexport interface TextInputProps {\n modelValue?: string | number | null\n type?: TextInputType\n label?: string\n labelOnBorder?: string\n placeholder?: string\n disabled?: boolean\n clearable?: boolean\n autocomplete?: boolean\n size?: ControlSize\n id?: string\n inputClass?: string\n /**\n * Delay (in milliseconds) before the `update:modelValue` event is\n * emitted after the last keystroke. Useful for throttling expensive\n * downstream work like filtering or server-side lookups. Defaults\n * to 300ms.\n */\n debounce?: number\n}\n\nexport const textInputDefaults = {\n modelValue: undefined,\n type: 'text',\n disabled: false,\n clearable: true,\n autocomplete: true,\n labelOnBorder: undefined,\n size: 'normal' as ControlSize,\n debounce: 300,\n} as TextInputProps\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useId, watch } from 'vue'\n\nconst props = withDefaults(defineProps<TextInputProps>(), textInputDefaults)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number | null]\n}>()\n\nconst inputId = computed(() => props.id ?? `c-input-${useId()}`)\n\nconst localValue = ref<string | number | null | undefined>(props.modelValue)\n\nconst hasValue = computed(() => {\n const v = localValue.value\n return v !== null && v !== undefined && String(v) !== ''\n})\n\nwatch(\n () => props.modelValue,\n (val) => {\n if (val === localValue.value) return\n localValue.value = val\n },\n)\n\nconst hasLabelOnBorder = computed(() => !!props.labelOnBorder && props.labelOnBorder.trim() !== '')\n\nconst borderLabelVisible = computed(() => (hasLabelOnBorder.value && hasValue.value) || props.label)\n\n// `debouncedEmit` is recreated whenever `props.debounce` changes so a\n// caller can adjust the throttling at runtime. We keep the latest\n// function in a ref so `onInput` can invoke the current version.\nfunction makeDebouncedEmit(delay: number) {\n return debounce((raw: string) => {\n emit('update:modelValue', props.type === 'number' ? (raw === '' ? null : Number(raw)) : raw)\n }, delay)\n}\n\nconst debouncedEmit = ref(makeDebouncedEmit(props.debounce))\n\nwatch(\n () => props.debounce,\n (delay) => {\n debouncedEmit.value = makeDebouncedEmit(delay)\n },\n)\n\nfunction onInput(e: Event) {\n const raw = (e.target as HTMLInputElement).value\n localValue.value = raw\n debouncedEmit.value(raw)\n}\n\nfunction clear() {\n const next = props.type === 'number' ? null : ''\n localValue.value = next\n emit('update:modelValue', next)\n}\n</script>\n\n<template>\n <div class=\"ac-component c-input-wrapper\">\n <label\n v-if=\"hasLabelOnBorder || label\"\n class=\"c-label pointer\"\n :class=\"{\n 'c-label--on-border': hasLabelOnBorder,\n hide: !borderLabelVisible,\n }\"\n :for=\"inputId\"\n >\n {{ hasLabelOnBorder ? labelOnBorder : label }}\n </label>\n <div\n class=\"c-input-row\"\n :class=\"{\n 'c-input-row--sm': size === 'small',\n 'c-input-row--lg': size === 'large',\n 'c-input-row--disabled': disabled,\n }\"\n >\n <component\n :is=\"type === 'textarea' ? 'textarea' : 'input'\"\n :id=\"inputId\"\n :type=\"type\"\n class=\"c-input\"\n :class=\"[\n {\n 'c-textarea': type === 'textarea',\n 'c-input--disabled': disabled,\n },\n inputClass,\n ]\"\n :value=\"localValue == null ? '' : String(localValue)\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :inputmode=\"type === 'number' ? 'decimal' : undefined\"\n :autocomplete=\"autocomplete ? 'on' : 'off'\"\n @input=\"onInput\"\n />\n <button\n v-if=\"clearable && !disabled\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--clear\"\n :class=\"{ 'c-icon-btn--hidden': !hasValue }\"\n aria-label=\"Mező törlése\"\n @click=\"clear\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n </div>\n </div>\n</template>\n"],"mappings":";;;gEA0Ba,IAAoB;CAC/B,YAAY,KAAA;CACZ,MAAM;CACN,UAAU;CACV,WAAW;CACX,cAAc;CACd,eAAe,KAAA;CACf,MAAM;CACN,UAAU;AACZ;;;;;;;;;;;;;;;;;;EAMA,IAAM,IAAQ,GAER,IAAO,GAIP,IAAU,QAAe,EAAM,MAAM,WAAW,EAAM,GAAG,GAEzD,IAAa,EAAwC,EAAM,UAAU,GAErE,IAAW,QAAe;GAC9B,IAAM,IAAI,EAAW;GACrB,OAAO,KAAM,QAA2B,OAAO,CAAC,MAAM;EACxD,CAAC;EAED,QACQ,EAAM,aACX,MAAQ;GACH,MAAQ,EAAW,UACvB,EAAW,QAAQ;EACrB,CACF;EAEA,IAAM,IAAmB,QAAe,CAAC,CAAC,EAAM,iBAAiB,EAAM,cAAc,KAAK,MAAM,EAAE,GAE5F,IAAqB,QAAgB,EAAiB,SAAS,EAAS,SAAU,EAAM,KAAK;EAKnG,SAAS,EAAkB,GAAe;GACxC,OAAO,GAAU,MAAgB;IAC/B,EAAK,qBAAqB,EAAM,SAAS,WAAY,MAAQ,KAAK,OAAO,OAAO,CAAG,IAAK,CAAG;GAC7F,GAAG,CAAK;EACV;EAEA,IAAM,IAAgB,EAAI,EAAkB,EAAM,QAAQ,CAAC;EAE3D,QACQ,EAAM,WACX,MAAU;GACT,EAAc,QAAQ,EAAkB,CAAK;EAC/C,CACF;EAEA,SAAS,EAAQ,GAAU;GACzB,IAAM,IAAO,EAAE,OAA4B;GAE3C,AADA,EAAW,QAAQ,GACnB,EAAc,MAAM,CAAG;EACzB;EAEA,SAAS,IAAQ;GACf,IAAM,IAAO,EAAM,SAAS,WAAW,OAAO;GAE9C,AADA,EAAW,QAAQ,GACnB,EAAK,qBAAqB,CAAI;EAChC;oBAIE,EAAA,GAAA,EAkDM,OAlDN,GAkDM,CAhDI,EAAA,SAAoB,EAAA,SAD5B,EAAA,GAAA,EAUQ,SAAA;;GARN,OAAK,EAAA,CAAC,mBAAiB;IACiB,sBAAA,EAAA;IAAiC,MAAA,CAAA,EAAA;;GAIxE,KAAK,EAAA;EAEH,GAAA,EAAA,EAAA,QAAmB,EAAA,gBAAgB,EAAA,KAAK,GAAA,IAAA,CAAA,KAAA,EAAA,IAAA,EAAA,GAE7C,EAqCM,OAAA,EApCJ,OAAK,EAAA,CAAC,eAAa;GACkB,mBAAA,EAAA,SAAI;GAAyC,mBAAA,EAAA,SAAI;GAA+C,yBAAA,EAAA;EAMrI,CAAA,CAAA,EAAA,GAAA,EAAA,EAAA,GAAA,EAkBE,EAjBK,EAAA,SAAI,aAAA,aAAA,OAAA,GAAA;GACR,IAAI,EAAA;GACJ,MAAM,EAAA;GACP,OAAK,EAAA,CAAC,WAAS,CAAA;IACiC,cAAA,EAAA,SAAI;IAAkD,qBAAA,EAAA;GAAiC,GAAA,EAAA,UAAA,CAAA,CAAA;GAOtI,OAAO,EAAA,SAAU,OAAA,KAAgB,OAAO,EAAA,KAAU;GAClD,aAAa,EAAA;GACb,UAAU,EAAA;GACV,WAAW,EAAA,SAAI,WAAA,YAA4B,KAAA;GAC3C,cAAc,EAAA,eAAY,OAAA;GACnB;;;;;;;;;;EAGF,CAAA,IAAA,EAAA,aAAS,CAAK,EAAA,YADtB,EAAA,GAAA,EASS,UAAA;;GAPP,MAAK;GACL,OAAK,EAAA,CAAC,gCAA8B,EAAA,sBAAA,CACH,EAAA,MAAQ,CAAA,CAAA;GACzC,cAAW;GACV,SAAO;EAER,GAAA,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAAuC,KAAA,EAApC,OAAM,0BAAyB,GAAA,MAAA,EAAA,CAAA,CAAA,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,GAAA,CAAA,CAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components17.js","names":[],"sources":["../src/components/TextInput.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { ControlSize } from '@/types/types'\nimport { debounce } from '@/utils/debounce'\n\nexport type TextInputType = 'text' | 'number' | 'textarea'\nexport interface TextInputProps {\n modelValue?: string | number | null\n type?: TextInputType\n label?: string\n labelOnBorder?: string\n placeholder?: string\n disabled?: boolean\n clearable?: boolean\n autocomplete?: boolean\n size?: ControlSize\n id?: string\n inputClass?: string\n}\n\nexport const textInputDefaults = {\n modelValue: undefined,\n type: 'text',\n disabled: false,\n clearable: true,\n autocomplete: true,\n labelOnBorder: undefined,\n size: 'normal' as ControlSize,\n} as TextInputProps\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useId, watch } from 'vue'\n\nconst props = withDefaults(defineProps<TextInputProps>(), textInputDefaults)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number | null]\n}>()\n\nconst inputId = computed(() => props.id ?? `c-input-${useId()}`)\n\nconst localValue = ref<string | number | null | undefined>(props.modelValue)\n\nconst hasValue = computed(() => {\n const v = localValue.value\n return v !== null && v !== undefined && String(v) !== ''\n})\n\nwatch(\n () => props.modelValue,\n (val) => {\n if (val === localValue.value) return\n localValue.value = val\n },\n)\n\nconst hasLabelOnBorder = computed(() => !!props.labelOnBorder && props.labelOnBorder.trim() !== '')\n\nconst borderLabelVisible = computed(() => (hasLabelOnBorder.value && hasValue.value) || props.label)\n\
|
|
1
|
+
{"version":3,"file":"admins-components17.js","names":[],"sources":["../src/components/TextInput.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { ControlSize } from '@/types/types'\nimport { debounce } from '@/utils/debounce'\n\nexport type TextInputType = 'text' | 'number' | 'textarea'\nexport interface TextInputProps {\n modelValue?: string | number | null\n type?: TextInputType\n label?: string\n labelOnBorder?: string\n placeholder?: string\n disabled?: boolean\n clearable?: boolean\n autocomplete?: boolean\n size?: ControlSize\n id?: string\n inputClass?: string\n /**\n * Delay (in milliseconds) before the `update:modelValue` event is\n * emitted after the last keystroke. Useful for throttling expensive\n * downstream work like filtering or server-side lookups. Defaults\n * to 300ms.\n */\n debounce?: number\n}\n\nexport const textInputDefaults = {\n modelValue: undefined,\n type: 'text',\n disabled: false,\n clearable: true,\n autocomplete: true,\n labelOnBorder: undefined,\n size: 'normal' as ControlSize,\n debounce: 300,\n} as TextInputProps\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useId, watch } from 'vue'\n\nconst props = withDefaults(defineProps<TextInputProps>(), textInputDefaults)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number | null]\n}>()\n\nconst inputId = computed(() => props.id ?? `c-input-${useId()}`)\n\nconst localValue = ref<string | number | null | undefined>(props.modelValue)\n\nconst hasValue = computed(() => {\n const v = localValue.value\n return v !== null && v !== undefined && String(v) !== ''\n})\n\nwatch(\n () => props.modelValue,\n (val) => {\n if (val === localValue.value) return\n localValue.value = val\n },\n)\n\nconst hasLabelOnBorder = computed(() => !!props.labelOnBorder && props.labelOnBorder.trim() !== '')\n\nconst borderLabelVisible = computed(() => (hasLabelOnBorder.value && hasValue.value) || props.label)\n\n// `debouncedEmit` is recreated whenever `props.debounce` changes so a\n// caller can adjust the throttling at runtime. We keep the latest\n// function in a ref so `onInput` can invoke the current version.\nfunction makeDebouncedEmit(delay: number) {\n return debounce((raw: string) => {\n emit('update:modelValue', props.type === 'number' ? (raw === '' ? null : Number(raw)) : raw)\n }, delay)\n}\n\nconst debouncedEmit = ref(makeDebouncedEmit(props.debounce))\n\nwatch(\n () => props.debounce,\n (delay) => {\n debouncedEmit.value = makeDebouncedEmit(delay)\n },\n)\n\nfunction onInput(e: Event) {\n const raw = (e.target as HTMLInputElement).value\n localValue.value = raw\n debouncedEmit.value(raw)\n}\n\nfunction clear() {\n const next = props.type === 'number' ? null : ''\n localValue.value = next\n emit('update:modelValue', next)\n}\n</script>\n\n<template>\n <div class=\"ac-component c-input-wrapper\">\n <label\n v-if=\"hasLabelOnBorder || label\"\n class=\"c-label pointer\"\n :class=\"{\n 'c-label--on-border': hasLabelOnBorder,\n hide: !borderLabelVisible,\n }\"\n :for=\"inputId\"\n >\n {{ hasLabelOnBorder ? labelOnBorder : label }}\n </label>\n <div\n class=\"c-input-row\"\n :class=\"{\n 'c-input-row--sm': size === 'small',\n 'c-input-row--lg': size === 'large',\n 'c-input-row--disabled': disabled,\n }\"\n >\n <component\n :is=\"type === 'textarea' ? 'textarea' : 'input'\"\n :id=\"inputId\"\n :type=\"type\"\n class=\"c-input\"\n :class=\"[\n {\n 'c-textarea': type === 'textarea',\n 'c-input--disabled': disabled,\n },\n inputClass,\n ]\"\n :value=\"localValue == null ? '' : String(localValue)\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :inputmode=\"type === 'number' ? 'decimal' : undefined\"\n :autocomplete=\"autocomplete ? 'on' : 'off'\"\n @input=\"onInput\"\n />\n <button\n v-if=\"clearable && !disabled\"\n type=\"button\"\n class=\"c-icon-btn c-icon-btn--clear\"\n :class=\"{ 'c-icon-btn--hidden': !hasValue }\"\n aria-label=\"Mező törlése\"\n @click=\"clear\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n </div>\n </div>\n</template>\n"],"mappings":""}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { earlierOf as e, endOfDay as t, formatDate as n, laterOf as r, localToUTCString as i } from "./admins-components3.js";
|
|
2
2
|
import a from "./admins-components6.js";
|
|
3
3
|
import { dateRangePickerConfigDefaults as o } from "./admins-components7.js";
|
|
4
|
-
import { useDropdownAnchor as
|
|
5
|
-
import
|
|
6
|
-
import { applyPredefinedRange as
|
|
7
|
-
import { Fragment as
|
|
4
|
+
import { useDropdownAnchor as s } from "./admins-components12.js";
|
|
5
|
+
import c from "./admins-components14.js";
|
|
6
|
+
import { applyPredefinedRange as ee, canStepInBounds as l, isPredefinedRangeInBounds as te, matchPredefinedRange as ne, predefinedRanges as u } from "./admins-components20.js";
|
|
7
|
+
import { Fragment as d, Teleport as re, computed as f, createBlock as p, createCommentVNode as m, createElementBlock as h, createElementVNode as g, createVNode as _, defineComponent as v, normalizeClass as y, normalizeStyle as ie, openBlock as b, ref as x, renderList as S, resolveDirective as ae, toDisplayString as C, unref as w, useId as oe, watch as T, withDirectives as E, withModifiers as D } from "vue";
|
|
8
8
|
//#region src/components/DateRangePicker.vue?vue&type=script&setup=true&lang.ts
|
|
9
|
-
var
|
|
9
|
+
var se = { class: "ac-component" }, ce = { class: "drp-input" }, le = { class: "c-truncate drp-input__single" }, ue = { class: "drp-input__multi" }, de = { class: "c-truncate drp-input__line" }, fe = { class: "c-truncate drp-input__line" }, pe = {
|
|
10
10
|
key: 1,
|
|
11
11
|
class: "c-placeholder drp-input__placeholder"
|
|
12
|
-
},
|
|
12
|
+
}, me = { class: "ac-component" }, he = { class: "drp-pickers" }, ge = { class: "drp-picker-group" }, _e = ["for"], ve = { class: "drp-picker-group" }, ye = ["for"], be = {
|
|
13
13
|
key: 0,
|
|
14
14
|
class: "drp-toolbar"
|
|
15
|
-
},
|
|
15
|
+
}, xe = { class: "d-flex" }, Se = { class: "predefined-ranges" }, Ce = ["aria-disabled", "onClick"], O = { class: "d-flex" }, k = {
|
|
16
16
|
key: 1,
|
|
17
17
|
class: "c-footer"
|
|
18
18
|
}, A = /*@__PURE__*/ v({
|
|
@@ -23,10 +23,10 @@ var ce = { class: "ac-component" }, le = { class: "drp-input" }, ue = { class: "
|
|
|
23
23
|
},
|
|
24
24
|
emits: ["update:modelValue"],
|
|
25
25
|
setup(v, { expose: A, emit: we }) {
|
|
26
|
-
let j = v, M = we, N = `drp-input-${
|
|
26
|
+
let j = v, M = we, N = `drp-input-${oe()}`, P = f(() => ({
|
|
27
27
|
...o,
|
|
28
28
|
...j.config
|
|
29
|
-
})), F = x(null), I = x(null), { isOpen: L, dropdownStyle: Te } =
|
|
29
|
+
})), F = x(null), I = x(null), { isOpen: L, dropdownStyle: Te } = s(F, I, { isOutsideClick: (e, t, n) => {
|
|
30
30
|
let r = e.target;
|
|
31
31
|
return !(t?.contains(r) ?? !1) && !(n?.contains(r) ?? !1) && !(r instanceof Element && r.closest(".c-dropdown"));
|
|
32
32
|
} });
|
|
@@ -50,10 +50,10 @@ var ce = { class: "ac-component" }, le = { class: "drp-input" }, ue = { class: "
|
|
|
50
50
|
return e ? n(new Date(e), De.value) : "...";
|
|
51
51
|
}
|
|
52
52
|
let V = x(R(j.modelValue?.fromUtc ?? null)), H = x(R(j.modelValue?.toUtc ?? null)), U = x(j.modelValue?.fromUtc ?? null), W = x(j.modelValue?.toUtc ?? null), G = f(() => U.value != null || W.value != null), Oe = f(() => V.value?.local ?? null), ke = f(() => H.value?.local ?? null), Ae = f(() => P.value.minDate ?? null), je = f(() => e(P.value.maxDate ?? null, ke.value ?? null)), Me = f(() => r(P.value.minDate ?? null, Oe.value ?? null)), Ne = f(() => P.value.maxDate ?? null);
|
|
53
|
-
|
|
53
|
+
T(() => j.modelValue, (e) => {
|
|
54
54
|
let t = e?.fromUtc ?? null, n = e?.toUtc ?? null;
|
|
55
55
|
V.value = R(t), H.value = R(n), U.value = t, W.value = n;
|
|
56
|
-
}),
|
|
56
|
+
}), T(L, (e) => {
|
|
57
57
|
e && P.value.lazy && (V.value = R(U.value), H.value = R(W.value));
|
|
58
58
|
});
|
|
59
59
|
function Pe(e) {
|
|
@@ -87,16 +87,20 @@ var ce = { class: "ac-component" }, le = { class: "drp-input" }, ue = { class: "
|
|
|
87
87
|
}
|
|
88
88
|
A({ focusAndOpen: Le });
|
|
89
89
|
function Y() {
|
|
90
|
-
let e = V.value
|
|
91
|
-
if (!e || !t) return null;
|
|
92
|
-
let n = 864e5;
|
|
93
|
-
|
|
90
|
+
let e = V.value, t = H.value;
|
|
91
|
+
if (!e?.local || !t?.local) return null;
|
|
92
|
+
let n = 864e5, r = e.local, i = t.local, a = new Date(r);
|
|
93
|
+
a.setHours(0, 0, 0, 0);
|
|
94
|
+
let o = new Date(i);
|
|
95
|
+
o.setHours(0, 0, 0, 0);
|
|
96
|
+
let s = r.getTime() === a.getTime(), c = i.getTime() === o.getTime() + 8634e4;
|
|
97
|
+
return !P.value.showTime || s && c ? (Math.round((o.getTime() - a.getTime()) / n) + 1) * n : i.getTime() - r.getTime();
|
|
94
98
|
}
|
|
95
99
|
let X = f(() => {
|
|
96
100
|
let e = V.value?.local, t = H.value?.local;
|
|
97
101
|
if (!e || !t) return !1;
|
|
98
102
|
let n = Y();
|
|
99
|
-
return n != null &&
|
|
103
|
+
return n != null && l(e, t, -n, {
|
|
100
104
|
minDate: P.value.minDate ?? null,
|
|
101
105
|
maxDate: P.value.maxDate ?? null,
|
|
102
106
|
showTime: P.value.showTime ?? !1
|
|
@@ -105,7 +109,7 @@ var ce = { class: "ac-component" }, le = { class: "drp-input" }, ue = { class: "
|
|
|
105
109
|
let e = V.value?.local, t = H.value?.local;
|
|
106
110
|
if (!e || !t) return !1;
|
|
107
111
|
let n = Y();
|
|
108
|
-
return n != null &&
|
|
112
|
+
return n != null && l(e, t, n, {
|
|
109
113
|
minDate: P.value.minDate ?? null,
|
|
110
114
|
maxDate: P.value.maxDate ?? null,
|
|
111
115
|
showTime: P.value.showTime ?? !1
|
|
@@ -115,7 +119,7 @@ var ce = { class: "ac-component" }, le = { class: "drp-input" }, ue = { class: "
|
|
|
115
119
|
let t = V.value?.local, n = H.value?.local;
|
|
116
120
|
if (!t || !n) return;
|
|
117
121
|
let r = Y();
|
|
118
|
-
r != null &&
|
|
122
|
+
r != null && l(t, n, r * e, {
|
|
119
123
|
minDate: P.value.minDate ?? null,
|
|
120
124
|
maxDate: P.value.maxDate ?? null,
|
|
121
125
|
showTime: P.value.showTime ?? !1
|
|
@@ -123,23 +127,23 @@ var ce = { class: "ac-component" }, le = { class: "drp-input" }, ue = { class: "
|
|
|
123
127
|
}
|
|
124
128
|
let Re = f(() => {
|
|
125
129
|
let e = V.value?.local, t = H.value?.local;
|
|
126
|
-
return !e || !t ? null :
|
|
130
|
+
return !e || !t ? null : ne(e, t, { showTime: P.value.showTime ?? !1 });
|
|
127
131
|
}), $ = f(() => {
|
|
128
132
|
let e = {
|
|
129
133
|
minDate: P.value.minDate ?? null,
|
|
130
134
|
maxDate: P.value.maxDate ?? null,
|
|
131
135
|
showTime: P.value.showTime ?? !1
|
|
132
136
|
}, t = {};
|
|
133
|
-
for (let n of
|
|
137
|
+
for (let n of u) t[n.key] = !te(n.key, e);
|
|
134
138
|
return t;
|
|
135
139
|
});
|
|
136
140
|
function ze(e) {
|
|
137
|
-
let { from: t, to: n } =
|
|
141
|
+
let { from: t, to: n } = ee(e, { showTime: P.value.showTime ?? !1 });
|
|
138
142
|
V.value = t, H.value = n, q(), P.value.lazy && (L.value = !1);
|
|
139
143
|
}
|
|
140
144
|
return (e, t) => {
|
|
141
|
-
let n =
|
|
142
|
-
return b(), h("div",
|
|
145
|
+
let n = ae("tooltip");
|
|
146
|
+
return b(), h("div", se, [g("div", {
|
|
143
147
|
ref_key: "wrapperRef",
|
|
144
148
|
ref: F,
|
|
145
149
|
class: y(["drp-wrapper", { "drp-wrapper--compact": P.value.compact }])
|
|
@@ -147,35 +151,35 @@ var ce = { class: "ac-component" }, le = { class: "drp-input" }, ue = { class: "
|
|
|
147
151
|
class: y(["c-input-row", {
|
|
148
152
|
"c-input-row--sm": P.value.size === "small",
|
|
149
153
|
"c-input-row--lg": P.value.size === "large",
|
|
150
|
-
"c-input-row--focus":
|
|
154
|
+
"c-input-row--focus": w(L)
|
|
151
155
|
}]),
|
|
152
|
-
onClick: t[1] ||= (e) => L.value = !
|
|
156
|
+
onClick: t[1] ||= (e) => L.value = !w(L)
|
|
153
157
|
}, [
|
|
154
|
-
g("div",
|
|
158
|
+
g("div", ce, [G.value ? (b(), h(d, { key: 0 }, [g("span", le, C(B(U.value)) + " – " + C(B(W.value)), 1), g("span", ue, [g("span", de, C(B(U.value)), 1), g("span", fe, C(B(W.value)), 1)])], 64)) : (b(), h("span", pe, C(P.value.placeholderFrom) + " – " + C(P.value.placeholderTo), 1))]),
|
|
155
159
|
g("button", {
|
|
156
160
|
type: "button",
|
|
157
161
|
class: y(["c-icon-btn dp-clear c-icon-btn--clear", { "c-icon-btn--hidden": !G.value }]),
|
|
158
|
-
onClick:
|
|
162
|
+
onClick: D(J, ["stop"]),
|
|
159
163
|
"aria-label": "Törlés"
|
|
160
164
|
}, [...t[5] ||= [g("i", { class: "fa-solid fa-fw fa-xmark" }, null, -1)]], 2),
|
|
161
165
|
P.value.showIcon ? (b(), h("button", {
|
|
162
166
|
key: 0,
|
|
163
167
|
type: "button",
|
|
164
168
|
class: "c-icon-btn c-icon-btn--calendar",
|
|
165
|
-
onClick: t[0] ||=
|
|
169
|
+
onClick: t[0] ||= D((e) => L.value = !w(L), ["stop"]),
|
|
166
170
|
"aria-label": "Naptár megnyitása"
|
|
167
171
|
}, [...t[6] ||= [g("i", { class: "fa-regular fa-fw fa-calendar" }, null, -1)]])) : m("", !0)
|
|
168
|
-
], 2), (b(), p(
|
|
172
|
+
], 2), (b(), p(re, { to: "body" }, [g("div", me, [w(L) ? (b(), h("div", {
|
|
169
173
|
key: 0,
|
|
170
174
|
ref_key: "dropdownRef",
|
|
171
175
|
ref: I,
|
|
172
176
|
class: "c-dropdown drp-dropdown",
|
|
173
|
-
style: ie(
|
|
177
|
+
style: ie(w(Te))
|
|
174
178
|
}, [
|
|
175
|
-
g("div",
|
|
179
|
+
g("div", he, [g("div", ge, [g("label", {
|
|
176
180
|
class: "drp-label",
|
|
177
181
|
for: `${N}-from`
|
|
178
|
-
},
|
|
182
|
+
}, C(P.value.placeholderFrom), 9, _e), _(c, {
|
|
179
183
|
id: `${N}-from`,
|
|
180
184
|
"model-value": V.value,
|
|
181
185
|
config: {
|
|
@@ -189,10 +193,10 @@ var ce = { class: "ac-component" }, le = { class: "drp-input" }, ue = { class: "
|
|
|
189
193
|
"id",
|
|
190
194
|
"model-value",
|
|
191
195
|
"config"
|
|
192
|
-
])]), g("div",
|
|
196
|
+
])]), g("div", ve, [g("label", {
|
|
193
197
|
class: "drp-label",
|
|
194
198
|
for: `${N}-to`
|
|
195
|
-
},
|
|
199
|
+
}, C(P.value.placeholderTo), 9, ye), _(c, {
|
|
196
200
|
id: `${N}-to`,
|
|
197
201
|
"model-value": H.value,
|
|
198
202
|
config: {
|
|
@@ -207,14 +211,14 @@ var ce = { class: "ac-component" }, le = { class: "drp-input" }, ue = { class: "
|
|
|
207
211
|
"model-value",
|
|
208
212
|
"config"
|
|
209
213
|
])])]),
|
|
210
|
-
P.value.showPresets ? (b(), h("div",
|
|
211
|
-
|
|
214
|
+
P.value.showPresets ? (b(), h("div", be, [
|
|
215
|
+
E((b(), h("span", xe, [_(a, {
|
|
212
216
|
icon: "fa-solid fa-chevron-left",
|
|
213
217
|
class: "drp-toolbar__stepper drp-toolbar__stepper--left",
|
|
214
218
|
disabled: !X.value,
|
|
215
219
|
onClick: t[2] ||= (e) => Q(-1)
|
|
216
220
|
}, null, 8, ["disabled"])])), [[n, X.value ? "Intervallum mozgatása visszafelé" : "Nem léphető tovább a minimum dátum miatt"]]),
|
|
217
|
-
g("div",
|
|
221
|
+
g("div", Se, [(b(!0), h(d, null, S(w(u), (e) => (b(), h("a", {
|
|
218
222
|
key: e.key,
|
|
219
223
|
class: y(["predefined-range", {
|
|
220
224
|
"predefined-range--active": Re.value === e.key,
|
|
@@ -222,8 +226,8 @@ var ce = { class: "ac-component" }, le = { class: "drp-input" }, ue = { class: "
|
|
|
222
226
|
}]),
|
|
223
227
|
"aria-disabled": $.value[e.key],
|
|
224
228
|
onClick: (t) => $.value[e.key] ? null : ze(e.key)
|
|
225
|
-
},
|
|
226
|
-
|
|
229
|
+
}, C(e.label), 11, Ce))), 128))]),
|
|
230
|
+
E((b(), h("span", O, [_(a, {
|
|
227
231
|
icon: "fa-solid fa-chevron-right",
|
|
228
232
|
disabled: !Z.value,
|
|
229
233
|
onClick: t[3] ||= (e) => Q(1),
|