admins-components 9.0.49 → 9.0.51
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-components.js +35 -33
- package/dist/admins-components100.js +245 -3
- package/dist/admins-components100.js.map +1 -1
- package/dist/admins-components102.js +6 -52
- package/dist/admins-components102.js.map +1 -1
- package/dist/admins-components103.js +3 -82
- package/dist/admins-components103.js.map +1 -1
- package/dist/admins-components104.js +3 -113
- package/dist/admins-components104.js.map +1 -1
- package/dist/admins-components105.js +49 -44
- package/dist/admins-components105.js.map +1 -1
- package/dist/admins-components106.js +80 -104
- package/dist/admins-components106.js.map +1 -1
- package/dist/admins-components107.js +109 -16
- package/dist/admins-components107.js.map +1 -1
- package/dist/admins-components108.js +46 -6
- package/dist/admins-components108.js.map +1 -1
- package/dist/admins-components109.js +100 -246
- package/dist/admins-components109.js.map +1 -1
- package/dist/admins-components110.js +19 -26
- package/dist/admins-components110.js.map +1 -1
- package/dist/admins-components111.js +6 -27
- package/dist/admins-components111.js.map +1 -1
- package/dist/admins-components112.js +239 -159
- package/dist/admins-components112.js.map +1 -1
- package/dist/admins-components113.js +26 -67
- package/dist/admins-components113.js.map +1 -1
- package/dist/admins-components114.js +25 -64
- package/dist/admins-components114.js.map +1 -1
- package/dist/admins-components115.js +169 -27
- package/dist/admins-components115.js.map +1 -1
- package/dist/admins-components116.js +65 -13
- package/dist/admins-components116.js.map +1 -1
- package/dist/admins-components117.js +64 -24
- package/dist/admins-components117.js.map +1 -1
- package/dist/admins-components118.js +29 -8
- package/dist/admins-components118.js.map +1 -1
- package/dist/admins-components119.js +16 -4
- package/dist/admins-components119.js.map +1 -1
- package/dist/admins-components120.js +27 -3
- package/dist/admins-components120.js.map +1 -1
- package/dist/admins-components121.js +8 -2
- package/dist/admins-components121.js.map +1 -1
- package/dist/admins-components122.js +4 -21
- package/dist/admins-components122.js.map +1 -1
- package/dist/admins-components123.js +3 -14
- package/dist/admins-components123.js.map +1 -1
- package/dist/admins-components124.js +3 -8
- package/dist/admins-components124.js.map +1 -1
- package/dist/admins-components125.js +19 -11
- package/dist/admins-components125.js.map +1 -1
- package/dist/admins-components126.js +14 -26
- package/dist/admins-components126.js.map +1 -1
- package/dist/admins-components127.js +7 -82
- package/dist/admins-components127.js.map +1 -1
- package/dist/admins-components128.js +9 -7
- package/dist/admins-components128.js.map +1 -1
- package/dist/admins-components129.js +25 -4
- package/dist/admins-components129.js.map +1 -1
- package/dist/admins-components130.js +81 -6
- package/dist/admins-components130.js.map +1 -1
- package/dist/admins-components131.js +10 -6
- package/dist/admins-components131.js.map +1 -1
- package/dist/admins-components132.js +2 -3
- package/dist/admins-components132.js.map +1 -1
- package/dist/admins-components133.js +8 -15
- package/dist/admins-components133.js.map +1 -1
- package/dist/admins-components134.js +6 -12
- package/dist/admins-components134.js.map +1 -1
- package/dist/admins-components135.js +6 -30
- package/dist/admins-components135.js.map +1 -1
- package/dist/admins-components136.js +15 -4
- package/dist/admins-components136.js.map +1 -1
- package/dist/admins-components137.js +13 -29
- package/dist/admins-components137.js.map +1 -1
- package/dist/admins-components138.js +30 -5
- package/dist/admins-components138.js.map +1 -1
- package/dist/admins-components139.js +4 -5
- package/dist/admins-components139.js.map +1 -1
- package/dist/admins-components140.js +28 -7
- package/dist/admins-components140.js.map +1 -1
- package/dist/admins-components141.js +4 -73
- package/dist/admins-components141.js.map +1 -1
- package/dist/admins-components142.js +4 -28
- package/dist/admins-components142.js.map +1 -1
- package/dist/admins-components143.js +8 -59
- package/dist/admins-components143.js.map +1 -1
- package/dist/admins-components144.js +72 -22
- package/dist/admins-components144.js.map +1 -1
- package/dist/admins-components145.js +26 -47
- package/dist/admins-components145.js.map +1 -1
- package/dist/admins-components146.js +58 -30
- package/dist/admins-components146.js.map +1 -1
- package/dist/admins-components147.js +24 -3
- package/dist/admins-components147.js.map +1 -1
- package/dist/admins-components148.js +44 -173
- package/dist/admins-components148.js.map +1 -1
- package/dist/admins-components149.js +28 -43
- package/dist/admins-components149.js.map +1 -1
- package/dist/admins-components150.js +3 -37
- package/dist/admins-components150.js.map +1 -1
- package/dist/admins-components151.js +176 -43
- package/dist/admins-components151.js.map +1 -1
- package/dist/admins-components152.js +41 -136
- package/dist/admins-components152.js.map +1 -1
- package/dist/admins-components153.js +36 -57
- package/dist/admins-components153.js.map +1 -1
- package/dist/admins-components154.js +44 -5
- package/dist/admins-components154.js.map +1 -1
- package/dist/admins-components155.js +141 -6
- package/dist/admins-components155.js.map +1 -1
- package/dist/admins-components156.js +57 -75
- package/dist/admins-components156.js.map +1 -1
- package/dist/admins-components157.js +6 -28
- package/dist/admins-components157.js.map +1 -1
- package/dist/admins-components158.js +5 -1930
- package/dist/admins-components158.js.map +1 -1
- package/dist/admins-components159.js +75 -24810
- package/dist/admins-components159.js.map +1 -1
- package/dist/admins-components16.js +4 -3
- package/dist/admins-components16.js.map +1 -1
- package/dist/admins-components160.js +28 -8
- package/dist/admins-components160.js.map +1 -1
- package/dist/admins-components161.js +1929 -5
- package/dist/admins-components161.js.map +1 -0
- package/dist/admins-components162.js +24809 -140
- package/dist/admins-components162.js.map +1 -1
- package/dist/admins-components163.js +3 -3
- package/dist/admins-components163.js.map +1 -1
- package/dist/admins-components164.js +7 -9
- package/dist/admins-components165.js +143 -0
- package/dist/admins-components165.js.map +1 -0
- package/dist/admins-components166.js +8 -167
- package/dist/admins-components166.js.map +1 -1
- package/dist/admins-components167.js +8 -50
- package/dist/admins-components167.js.map +1 -1
- package/dist/admins-components169.js +161 -43
- package/dist/admins-components169.js.map +1 -1
- package/dist/admins-components17.js.map +1 -1
- package/dist/admins-components170.js +51 -6
- package/dist/admins-components170.js.map +1 -1
- package/dist/admins-components171.js +8 -79
- package/dist/admins-components171.js.map +1 -1
- package/dist/admins-components172.js +35 -43
- package/dist/admins-components172.js.map +1 -1
- package/dist/admins-components173.js +6 -59
- package/dist/admins-components173.js.map +1 -1
- package/dist/admins-components174.js +79 -8
- package/dist/admins-components174.js.map +1 -1
- package/dist/admins-components175.js +43 -37
- package/dist/admins-components175.js.map +1 -1
- package/dist/admins-components176.js +58 -8
- package/dist/admins-components176.js.map +1 -1
- package/dist/admins-components177.js +10 -0
- package/dist/admins-components177.js.map +1 -0
- package/dist/admins-components178.js +44 -50
- package/dist/admins-components178.js.map +1 -1
- package/dist/admins-components179.js +10 -0
- package/dist/admins-components179.js.map +1 -0
- package/dist/admins-components181.js +59 -0
- package/dist/admins-components181.js.map +1 -0
- package/dist/admins-components5.js +30 -28
- package/dist/admins-components5.js.map +1 -1
- package/dist/admins-components58.js.map +1 -1
- package/dist/admins-components6.js.map +1 -1
- package/dist/admins-components61.js +20 -20
- package/dist/admins-components61.js.map +1 -1
- package/dist/admins-components62.js.map +1 -1
- package/dist/admins-components65.js +66 -42
- package/dist/admins-components65.js.map +1 -1
- package/dist/admins-components67.js.map +1 -1
- package/dist/admins-components68.js +102 -95
- package/dist/admins-components68.js.map +1 -1
- package/dist/admins-components70.js.map +1 -1
- package/dist/admins-components72.js +135 -126
- package/dist/admins-components72.js.map +1 -1
- package/dist/admins-components74.js.map +1 -1
- package/dist/admins-components76.js +32 -122
- package/dist/admins-components76.js.map +1 -1
- package/dist/admins-components77.js +146 -0
- package/dist/admins-components77.js.map +1 -0
- package/dist/admins-components79.js +6 -59
- package/dist/admins-components79.js.map +1 -1
- package/dist/admins-components80.js +140 -67
- package/dist/admins-components80.js.map +1 -1
- package/dist/admins-components82.js +7 -0
- package/dist/admins-components82.js.map +1 -0
- package/dist/admins-components83.js +59 -6
- package/dist/admins-components83.js.map +1 -1
- package/dist/admins-components84.js +66 -229
- package/dist/admins-components84.js.map +1 -1
- package/dist/{admins-components81.js → admins-components85.js} +2 -2
- package/dist/{admins-components81.js.map → admins-components85.js.map} +1 -1
- package/dist/admins-components87.js +6 -37
- package/dist/admins-components87.js.map +1 -1
- package/dist/admins-components88.js +231 -0
- package/dist/admins-components88.js.map +1 -0
- package/dist/admins-components90.js +6 -199
- package/dist/admins-components90.js.map +1 -1
- package/dist/admins-components91.js +38 -0
- package/dist/{admins-components89.js.map → admins-components91.js.map} +1 -1
- package/dist/admins-components93.js +6 -16
- package/dist/admins-components93.js.map +1 -1
- package/dist/admins-components94.js +188 -64
- package/dist/admins-components94.js.map +1 -1
- package/dist/admins-components96.js +2 -2
- package/dist/admins-components96.js.map +1 -1
- package/dist/admins-components97.js +76 -198
- package/dist/admins-components97.js.map +1 -1
- package/dist/admins-components99.js +2 -2
- package/dist/admins-components99.js.map +1 -1
- package/dist/main.css +1 -1
- package/dist/main.css.map +1 -1
- package/dist/src/components/TextInput.vue.d.ts +2 -0
- package/dist/src/components/data-table/DataList.vue.d.ts +12 -3
- package/dist/src/components/data-table/DataPaginator.vue.d.ts +5 -1
- package/dist/src/components/data-table/DataSearch.vue.d.ts +9 -0
- package/dist/src/components/data-table/DataSort.vue.d.ts +51 -0
- package/dist/src/components/data-table/DataTable.vue.d.ts +12 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/styles/components/data-table/data-cards.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/styles/components/data-table/data-list.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/styles/components/data-table/data-search.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/styles/components/data-table/data-sort.scss_vue_type_style_index_0_src_true_lang.css +1 -0
- package/dist/src/styles/components/dropdown-select.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/types/data-list.d.ts +15 -16
- package/dist/src/utils/url.d.ts +21 -0
- package/package.json +1 -1
- package/dist/admins-components101.js +0 -4
- package/dist/admins-components101.js.map +0 -1
- package/dist/admins-components164.js.map +0 -1
- package/dist/admins-components168.js +0 -10
- package/dist/admins-components168.js.map +0 -1
- package/dist/admins-components78.js +0 -7
- package/dist/admins-components78.js.map +0 -1
- package/dist/admins-components86.js +0 -7
- package/dist/admins-components86.js.map +0 -1
- package/dist/admins-components89.js +0 -7
- package/dist/admins-components92.js +0 -7
- package/dist/admins-components92.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components74.js","names":[],"sources":["../src/components/data-table/DataListOptions.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Column, DataListSettings } from '@/types/data-list'\nimport {\n dataTableSettingsDefaults,\n dataCardsSettingsDefaults,\n dataListSettingsDefaults,\n} from '@/types/data-list'\nimport { deepMerge } from '@/utils/objects'\nimport Button from '@/components/Button.vue'\n\nexport interface DataListOptionsProps {\n open?: boolean\n columns: Column[]\n settings: Partial<DataListSettings>\n position?: SidebarPosition\n storageKey: string\n orderable?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\n\nconst props = withDefaults(defineProps<DataListOptionsProps>(), {\n orderable: false,\n})\n\nconst emit = defineEmits<{\n close: []\n change: [settings: DataListSettings]\n}>()\n\nconst local = ref<DataListSettings>(getDefaults())\n\nconst storageKey = computed(() => `data-list-${props.storageKey}`)\n\nconst hasCustomSettings = computed(\n () => JSON.stringify(local.value) !== JSON.stringify(getDefaults()),\n)\n\nfunction getDefaults(): DataListSettings {\n return {\n ...dataCardsSettingsDefaults,\n ...dataTableSettingsDefaults,\n ...dataListSettingsDefaults,\n ...props.settings,\n columns: Object.fromEntries(\n props.columns.map((c) => [\n c.property,\n props.settings.columns?.[c.property] ?? c.visible !== false,\n ]),\n ),\n cardHeaderColumns: Object.fromEntries(\n props.columns.map((c) => [\n c.property,\n props.settings.cardHeaderColumns?.[c.property] ?? c.primary === true,\n ]),\n ),\n columnOrder: props.settings.columnOrder ?? props.columns.map((c) => c.property),\n cardHeaderOrder: props.settings.cardHeaderOrder ?? props.columns.map((c) => c.property),\n } as DataListSettings\n}\n\nfunction load() {\n try {\n const raw = localStorage.getItem(storageKey.value)\n const defaults = getDefaults()\n if (raw) {\n const data = JSON.parse(raw)\n local.value = data.settings\n ? reconcileOrders(deepMerge(defaults, data.settings) as DataListSettings, props.columns)\n : defaults\n } else {\n local.value = defaults\n }\n } catch {\n local.value = getDefaults()\n }\n emit('change', local.value)\n}\n\nfunction reconcileOrders(settings: DataListSettings, columns: Column[]): DataListSettings {\n const props = columns.map((c) => c.property)\n const reconcile = (order: string[] | undefined): string[] => {\n const known = new Set(props)\n const filtered = (order ?? []).filter((p) => known.has(p))\n const missing = props.filter((p) => !filtered.includes(p))\n return [...filtered, ...missing]\n }\n return {\n ...settings,\n columnOrder: reconcile(settings.columnOrder),\n cardHeaderOrder: reconcile(settings.cardHeaderOrder),\n }\n}\n\nfunction save() {\n try {\n const key = storageKey.value\n const raw = localStorage.getItem(key)\n const data = raw ? JSON.parse(raw) : {}\n data.settings = local.value\n localStorage.setItem(key, JSON.stringify(data))\n } catch {\n /* ignore */\n }\n emit('change', local.value)\n}\n\nfunction update<K extends keyof DataListSettings>(key: K, value: DataListSettings[K]) {\n local.value = { ...local.value, [key]: value }\n save()\n}\n\nfunction toggleColumn(property: string) {\n update('columns', { ...local.value.columns, [property]: !local.value.columns[property] })\n}\n\nfunction toggleCardHeaderColumn(property: string) {\n update('cardHeaderColumns', {\n ...local.value.cardHeaderColumns,\n [property]: !local.value.cardHeaderColumns[property],\n })\n}\n\nfunction toggle(key: 'striped' | 'compact') {\n update(key, !local.value[key])\n}\n\nfunction sortByOrder(cols: Column[], order: string[]) {\n return [...cols].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\nconst orderedColumns = computed(() => sortByOrder(props.columns, local.value.columnOrder))\n\nconst orderedCardHeaderColumns = computed(() =>\n sortByOrder(props.columns, local.value.cardHeaderOrder),\n)\n\nconst dragIndex = ref<number | null>(null)\nconst selectedReorderIndex = ref<number | null>(null)\n\nconst cardHeaderDragIndex = ref<number | null>(null)\nconst selectedCardHeaderIndex = ref<number | null>(null)\n\nfunction onDragStart(index: number) {\n dragIndex.value = index\n}\n\nfunction onDragOver(e: DragEvent, index: number) {\n e.preventDefault()\n if (dragIndex.value === null || dragIndex.value === index) return\n const order = [...local.value.columnOrder]\n const moved = order.splice(dragIndex.value, 1)[0]\n if (!moved) return\n order.splice(index, 0, moved)\n dragIndex.value = index\n update('columnOrder', order)\n}\n\nfunction onDragEnd() {\n dragIndex.value = null\n}\n\nfunction selectForReorder(index: number) {\n selectedReorderIndex.value = selectedReorderIndex.value === index ? null : index\n}\n\nfunction moveSelected(direction: -1 | 1) {\n if (selectedReorderIndex.value === null) return\n const target = selectedReorderIndex.value + direction\n if (target < 0 || target >= local.value.columnOrder.length) return\n const order = [...local.value.columnOrder]\n const tmp = order[selectedReorderIndex.value]!\n order[selectedReorderIndex.value] = order[target]!\n order[target] = tmp\n update('columnOrder', order)\n selectedReorderIndex.value = target\n}\n\nfunction onCardHeaderDragStart(index: number) {\n cardHeaderDragIndex.value = index\n}\n\nfunction onCardHeaderDragOver(e: DragEvent, index: number) {\n e.preventDefault()\n if (cardHeaderDragIndex.value === null || cardHeaderDragIndex.value === index) return\n const order = [...local.value.cardHeaderOrder]\n const moved = order.splice(cardHeaderDragIndex.value, 1)[0]\n if (!moved) return\n order.splice(index, 0, moved)\n cardHeaderDragIndex.value = index\n update('cardHeaderOrder', order)\n}\n\nfunction onCardHeaderDragEnd() {\n cardHeaderDragIndex.value = null\n}\n\nfunction selectCardHeader(index: number) {\n selectedCardHeaderIndex.value = selectedCardHeaderIndex.value === index ? null : index\n}\n\nfunction moveCardHeader(direction: -1 | 1) {\n if (selectedCardHeaderIndex.value === null) return\n const target = selectedCardHeaderIndex.value + direction\n if (target < 0 || target >= local.value.cardHeaderOrder.length) return\n const order = [...local.value.cardHeaderOrder]\n const tmp = order[selectedCardHeaderIndex.value]!\n order[selectedCardHeaderIndex.value] = order[target]!\n order[target] = tmp\n update('cardHeaderOrder', order)\n selectedCardHeaderIndex.value = target\n}\n\nfunction reset() {\n localStorage.removeItem(storageKey.value)\n local.value = getDefaults()\n emit('change', local.value)\n}\n\nonMounted(load)\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Lista beállítások\" :position=\"props.position\" @close=\"emit('close')\">\n <div class=\"table-options\">\n <div class=\"table-options__col\">\n <h4 class=\"table-options__title\">\n Elrendezés\n <span class=\"table-options__title-value\"\n >—\n {{\n local.layout === 'screen' ? 'Auto' : local.layout === 'table' ? 'Táblázat' : 'Kártyák'\n }}</span\n >\n </h4>\n <div class=\"layout-switch\">\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'screen' }\"\n title=\"Kijelző méretéhez igazodó elrendezés\"\n @click=\"update('layout', 'screen')\"\n >\n <i class=\"fa-solid fa-display\"></i>\n </button>\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'table' }\"\n title=\"Táblázat nézet\"\n @click=\"update('layout', 'table')\"\n >\n <i class=\"fa-solid fa-table-list\"></i>\n </button>\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'cards' }\"\n title=\"Kártya nézet\"\n @click=\"update('layout', 'cards')\"\n >\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n </div>\n <div class=\"table-options__col\">\n <h4\n class=\"table-options__title\"\n v-tooltip.html=\"\n '<b>Kompakt</b>: A sorok közötti térköz csökkentése<br><br><b>Sávos</b> (csak táblázat nézetben): A páros sorok háttere kicsit sötétebb '\"\n >\n Megjelenés <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"table-options__list\">\n <li\n class=\"table-options__item\"\n @click=\"toggle('compact')\"\n title=\"A sorok közötti térköz csökkentése\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.compact }\"\n @click.stop=\"toggle('compact')\"\n ></span>\n <span>Kompakt</span>\n </li>\n <li\n class=\"table-options__item\"\n @click=\"toggle('striped')\"\n title=\"A páros sorok háttere kicsit sötétebb (csak táblázat nézetben)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.striped }\"\n @click.stop=\"toggle('striped')\"\n ></span>\n <span>Sávos (striped)</span>\n </li>\n </ul>\n </div>\n <div class=\"table-options__col\">\n <h4 class=\"table-options__title\" v-tooltip=\"'Táblázat nézetben megjelenő oszlopok'\">\n Táblázat oszlopok <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"table-options__list\">\n <li\n v-for=\"(col, index) in orderedColumns\"\n :key=\"col.property\"\n class=\"table-options__item\"\n :class=\"{\n 'table-options__item--disabled': col.primary,\n 'table-options__item--selected': orderable && selectedReorderIndex === index,\n 'table-options__item--dragging': orderable && dragIndex === index,\n }\"\n :draggable=\"orderable\"\n @dragstart.stop=\"orderable && onDragStart(index)\"\n @dragover.prevent=\"orderable && onDragOver($event, index)\"\n @drop.prevent\n @dragend=\"orderable && onDragEnd()\"\n @click.prevent=\"\n orderable ? selectForReorder(index) : !col.primary && toggleColumn(col.property)\n \"\n >\n <i v-if=\"orderable\" class=\"fa-solid fa-grip-vertical table-options__drag-handle\"></i>\n <span\n class=\"table-options__toggle\"\n @click.stop=\"!col.primary && toggleColumn(col.property)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.columns[col.property] }\"\n ></span>\n <span>{{ col.label }}</span>\n </span>\n </li>\n </ul>\n <div v-if=\"orderable && selectedReorderIndex !== null\" class=\"table-options__move-actions\">\n <button\n class=\"table-options__move-btn\"\n :disabled=\"selectedReorderIndex === 0\"\n @click=\"moveSelected(-1)\"\n >\n <i class=\"fa-solid fa-arrow-up\"></i>\n </button>\n <button\n class=\"table-options__move-btn\"\n :disabled=\"selectedReorderIndex === orderedColumns.length - 1\"\n @click=\"moveSelected(1)\"\n >\n <i class=\"fa-solid fa-arrow-down\"></i>\n </button>\n </div>\n </div>\n <div class=\"table-options__col\">\n <h4\n class=\"table-options__title flex-center gap-1\"\n v-tooltip=\"'Kártya nézetben, a sorok fejlécén megjelenő oszlopok'\"\n >\n Kártya fejléc <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"table-options__list\">\n <li\n v-for=\"(col, index) in orderedCardHeaderColumns\"\n :key=\"'ch-' + col.property\"\n class=\"table-options__item\"\n :class=\"{\n 'table-options__item--disabled': col.primary,\n 'table-options__item--selected': orderable && selectedCardHeaderIndex === index,\n 'table-options__item--dragging': orderable && cardHeaderDragIndex === index,\n }\"\n :draggable=\"orderable\"\n @dragstart.stop=\"orderable && onCardHeaderDragStart(index)\"\n @dragover.prevent=\"orderable && onCardHeaderDragOver($event, index)\"\n @drop.prevent\n @dragend=\"orderable && onCardHeaderDragEnd()\"\n @click.prevent=\"\n orderable\n ? selectCardHeader(index)\n : !col.primary && toggleCardHeaderColumn(col.property)\n \"\n >\n <i v-if=\"orderable\" class=\"fa-solid fa-grip-vertical table-options__drag-handle\"></i>\n <span\n class=\"table-options__toggle\"\n @click.stop=\"!col.primary && toggleCardHeaderColumn(col.property)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.cardHeaderColumns[col.property] }\"\n ></span>\n <span>{{ col.label }}</span>\n </span>\n </li>\n </ul>\n <div\n v-if=\"orderable && selectedCardHeaderIndex !== null\"\n class=\"table-options__move-actions\"\n >\n <button\n class=\"table-options__move-btn\"\n :disabled=\"selectedCardHeaderIndex === 0\"\n @click=\"moveCardHeader(-1)\"\n >\n <i class=\"fa-solid fa-arrow-up\"></i>\n </button>\n <button\n class=\"table-options__move-btn\"\n :disabled=\"selectedCardHeaderIndex === orderedCardHeaderColumns.length - 1\"\n @click=\"moveCardHeader(1)\"\n >\n <i class=\"fa-solid fa-arrow-down\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"table-options__footer\">\n <Button\n icon=\"fa-solid fa-triangle-exclamation\"\n :disabled=\"!hasCustomSettings\"\n label=\"Alapértelmezés visszaállítása\"\n size=\"small\"\n @click=\"reset\"\n />\n <Button label=\"OK\" @click=\"emit('close')\" />\n </div>\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list-options.scss\"></style>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"admins-components74.js","names":[],"sources":["../src/components/data-table/DataListOptions.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Column, DataListSettings } from '@/types/data-list'\nimport {\n dataTableSettingsDefaults,\n dataCardsSettingsDefaults,\n dataListSettingsDefaults,\n} from '@/types/data-list'\nimport { deepMerge } from '@/utils/objects'\nimport Button from '@/components/Button.vue'\n\nexport interface DataListOptionsProps {\n open?: boolean\n columns: Column[]\n settings: Partial<DataListSettings>\n position?: SidebarPosition\n storageKey: string\n orderable?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, watch } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\n\nconst props = withDefaults(defineProps<DataListOptionsProps>(), {\n orderable: false,\n})\n\nconst emit = defineEmits<{\n close: []\n change: [settings: DataListSettings]\n}>()\n\nconst local = ref<DataListSettings>(getDefaults())\n\nconst storageKey = computed(() => `data-list-${props.storageKey}`)\n\nconst hasCustomSettings = computed(\n () => JSON.stringify(local.value) !== JSON.stringify(getDefaults()),\n)\n\nfunction isColumnLocked(col: Column): boolean {\n return col.primary === true || col.hideable === false\n}\n\n// Force locked columns to true in both column maps, regardless of saved state.\nfunction applyLockedOverrides(s: DataListSettings) {\n for (const col of props.columns) {\n if (isColumnLocked(col)) {\n s.columns[col.property] = true\n s.cardHeaderColumns[col.property] = true\n }\n }\n}\n\nfunction getDefaults(): DataListSettings {\n return {\n ...dataCardsSettingsDefaults,\n ...dataTableSettingsDefaults,\n ...dataListSettingsDefaults,\n ...props.settings,\n columns: Object.fromEntries(\n props.columns.map((c) => [\n c.property,\n props.settings.columns?.[c.property] ?? c.visible !== false,\n ]),\n ),\n cardHeaderColumns: Object.fromEntries(\n props.columns.map((c) => [\n c.property,\n props.settings.cardHeaderColumns?.[c.property] ?? (c.primary === true || c.hideable === false),\n ]),\n ),\n columnOrder: props.settings.columnOrder ?? props.columns.map((c) => c.property),\n cardHeaderOrder: props.settings.cardHeaderOrder ?? props.columns.map((c) => c.property),\n } as DataListSettings\n}\n\nfunction load() {\n try {\n const raw = localStorage.getItem(storageKey.value)\n const defaults = getDefaults()\n if (raw) {\n const data = JSON.parse(raw)\n local.value = data.settings\n ? reconcileOrders(deepMerge(defaults, data.settings) as DataListSettings, props.columns)\n : defaults\n } else {\n local.value = defaults\n }\n } catch {\n local.value = getDefaults()\n }\n applyLockedOverrides(local.value)\n emit('change', local.value)\n}\n\nfunction reconcileOrders(settings: DataListSettings, columns: Column[]): DataListSettings {\n const sourceOrder = columns.map((c) => c.property)\n const reconcile = (order: string[] | undefined): string[] => {\n // Saved order, restricted to columns that still exist in the source config.\n const saved = (order ?? []).filter((p) => sourceOrder.includes(p))\n const savedSet = new Set(saved)\n // Walk the source-code order. For each property:\n // - if it was saved, pull it from the saved sequence in saved order\n // - if it's new, insert it at its source-code position\n const merged: string[] = []\n let savedIdx = 0\n for (const property of sourceOrder) {\n if (savedSet.has(property)) {\n merged.push(saved[savedIdx++]!)\n } else {\n merged.push(property)\n }\n }\n return merged\n }\n return {\n ...settings,\n columnOrder: reconcile(settings.columnOrder),\n cardHeaderOrder: reconcile(settings.cardHeaderOrder),\n }\n}\n\nfunction save() {\n try {\n const key = storageKey.value\n const raw = localStorage.getItem(key)\n const data = raw ? JSON.parse(raw) : {}\n data.settings = local.value\n localStorage.setItem(key, JSON.stringify(data))\n } catch {\n /* ignore */\n }\n emit('change', local.value)\n}\n\nfunction update<K extends keyof DataListSettings>(key: K, value: DataListSettings[K]) {\n local.value = { ...local.value, [key]: value }\n save()\n}\n\nfunction toggleColumn(property: string) {\n update('columns', { ...local.value.columns, [property]: !local.value.columns[property] })\n}\n\nfunction toggleCardHeaderColumn(property: string) {\n update('cardHeaderColumns', {\n ...local.value.cardHeaderColumns,\n [property]: !local.value.cardHeaderColumns[property],\n })\n}\n\nfunction toggle(key: 'striped' | 'compact') {\n update(key, !local.value[key])\n}\n\nfunction sortByOrder(cols: Column[], order: string[]) {\n return [...cols].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\nconst orderedColumns = computed(() => sortByOrder(props.columns, local.value.columnOrder))\n\nconst orderedCardHeaderColumns = computed(() =>\n sortByOrder(props.columns, local.value.cardHeaderOrder),\n)\n\nconst dragIndex = ref<number | null>(null)\nconst selectedReorderIndex = ref<number | null>(null)\n\nconst cardHeaderDragIndex = ref<number | null>(null)\nconst selectedCardHeaderIndex = ref<number | null>(null)\n\nfunction onDragStart(index: number) {\n dragIndex.value = index\n}\n\nfunction onDragOver(e: DragEvent, index: number) {\n e.preventDefault()\n if (dragIndex.value === null || dragIndex.value === index) return\n const order = [...local.value.columnOrder]\n const moved = order.splice(dragIndex.value, 1)[0]\n if (!moved) return\n order.splice(index, 0, moved)\n dragIndex.value = index\n update('columnOrder', order)\n}\n\nfunction onDragEnd() {\n dragIndex.value = null\n}\n\nfunction selectForReorder(index: number) {\n selectedReorderIndex.value = selectedReorderIndex.value === index ? null : index\n}\n\nfunction moveSelected(direction: -1 | 1) {\n if (selectedReorderIndex.value === null) return\n const target = selectedReorderIndex.value + direction\n if (target < 0 || target >= local.value.columnOrder.length) return\n const order = [...local.value.columnOrder]\n const tmp = order[selectedReorderIndex.value]!\n order[selectedReorderIndex.value] = order[target]!\n order[target] = tmp\n update('columnOrder', order)\n selectedReorderIndex.value = target\n}\n\nfunction onCardHeaderDragStart(index: number) {\n cardHeaderDragIndex.value = index\n}\n\nfunction onCardHeaderDragOver(e: DragEvent, index: number) {\n e.preventDefault()\n if (cardHeaderDragIndex.value === null || cardHeaderDragIndex.value === index) return\n const order = [...local.value.cardHeaderOrder]\n const moved = order.splice(cardHeaderDragIndex.value, 1)[0]\n if (!moved) return\n order.splice(index, 0, moved)\n cardHeaderDragIndex.value = index\n update('cardHeaderOrder', order)\n}\n\nfunction onCardHeaderDragEnd() {\n cardHeaderDragIndex.value = null\n}\n\nfunction selectCardHeader(index: number) {\n selectedCardHeaderIndex.value = selectedCardHeaderIndex.value === index ? null : index\n}\n\nfunction moveCardHeader(direction: -1 | 1) {\n if (selectedCardHeaderIndex.value === null) return\n const target = selectedCardHeaderIndex.value + direction\n if (target < 0 || target >= local.value.cardHeaderOrder.length) return\n const order = [...local.value.cardHeaderOrder]\n const tmp = order[selectedCardHeaderIndex.value]!\n order[selectedCardHeaderIndex.value] = order[target]!\n order[target] = tmp\n update('cardHeaderOrder', order)\n selectedCardHeaderIndex.value = target\n}\n\nfunction reset() {\n localStorage.removeItem(storageKey.value)\n local.value = getDefaults()\n emit('change', local.value)\n}\n\nonMounted(load)\n\n// If the columns prop changes at runtime, re-reconcile the orders so new\n// columns appear at their source-code position, and re-apply locked overrides.\nwatch(() => props.columns, () => {\n local.value = reconcileOrders(local.value, props.columns)\n applyLockedOverrides(local.value)\n})\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Lista beállítások\" :position=\"props.position\" @close=\"emit('close')\">\n <div class=\"table-options\">\n <div class=\"table-options__col\">\n <h4 class=\"table-options__title\">\n Elrendezés\n <span class=\"table-options__title-value\"\n >—\n {{\n local.layout === 'screen' ? 'Auto' : local.layout === 'table' ? 'Táblázat' : 'Kártyák'\n }}</span\n >\n </h4>\n <div class=\"layout-switch\">\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'screen' }\"\n title=\"Kijelző méretéhez igazodó elrendezés\"\n @click=\"update('layout', 'screen')\"\n >\n <i class=\"fa-solid fa-display\"></i>\n </button>\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'table' }\"\n title=\"Táblázat nézet\"\n @click=\"update('layout', 'table')\"\n >\n <i class=\"fa-solid fa-table-list\"></i>\n </button>\n <button\n class=\"layout-switch__btn\"\n :class=\"{ 'layout-switch__btn--active': local.layout === 'cards' }\"\n title=\"Kártya nézet\"\n @click=\"update('layout', 'cards')\"\n >\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n </div>\n <div class=\"table-options__col\">\n <h4\n class=\"table-options__title\"\n v-tooltip.html=\"\n '<b>Kompakt</b>: A sorok közötti térköz csökkentése<br><br><b>Sávos</b> (csak táblázat nézetben): A páros sorok háttere kicsit sötétebb '\"\n >\n Megjelenés <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"table-options__list\">\n <li\n class=\"table-options__item\"\n @click=\"toggle('compact')\"\n title=\"A sorok közötti térköz csökkentése\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.compact }\"\n @click.stop=\"toggle('compact')\"\n ></span>\n <span>Kompakt</span>\n </li>\n <li\n class=\"table-options__item\"\n @click=\"toggle('striped')\"\n title=\"A páros sorok háttere kicsit sötétebb (csak táblázat nézetben)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.striped }\"\n @click.stop=\"toggle('striped')\"\n ></span>\n <span>Sávos (striped)</span>\n </li>\n </ul>\n </div>\n <div class=\"table-options__col\">\n <h4 class=\"table-options__title\" v-tooltip=\"'Táblázat nézetben megjelenő oszlopok'\">\n Táblázat oszlopok <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"table-options__list\">\n <li\n v-for=\"(col, index) in orderedColumns\"\n :key=\"col.property\"\n class=\"table-options__item\"\n :class=\"{\n 'table-options__item--disabled': isColumnLocked(col),\n 'table-options__item--selected': orderable && selectedReorderIndex === index,\n 'table-options__item--dragging': orderable && dragIndex === index,\n }\"\n :draggable=\"orderable\"\n @dragstart.stop=\"orderable && onDragStart(index)\"\n @dragover.prevent=\"orderable && onDragOver($event, index)\"\n @drop.prevent\n @dragend=\"orderable && onDragEnd()\"\n @click.prevent=\"\n orderable ? selectForReorder(index) : !isColumnLocked(col) && toggleColumn(col.property)\n \"\n >\n <i v-if=\"orderable\" class=\"fa-solid fa-grip-vertical table-options__drag-handle\"></i>\n <span\n class=\"table-options__toggle\"\n @click.stop=\"!isColumnLocked(col) && toggleColumn(col.property)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.columns[col.property] }\"\n ></span>\n <span>{{ col.label }}</span>\n </span>\n </li>\n </ul>\n <div v-if=\"orderable && selectedReorderIndex !== null\" class=\"table-options__move-actions\">\n <button\n class=\"table-options__move-btn\"\n :disabled=\"selectedReorderIndex === 0\"\n @click=\"moveSelected(-1)\"\n >\n <i class=\"fa-solid fa-arrow-up\"></i>\n </button>\n <button\n class=\"table-options__move-btn\"\n :disabled=\"selectedReorderIndex === orderedColumns.length - 1\"\n @click=\"moveSelected(1)\"\n >\n <i class=\"fa-solid fa-arrow-down\"></i>\n </button>\n </div>\n </div>\n <div class=\"table-options__col\">\n <h4\n class=\"table-options__title flex-center gap-1\"\n v-tooltip=\"'Kártya nézetben, a sorok fejlécén megjelenő oszlopok'\"\n >\n Kártya fejléc <i class=\"fa-regular fa-question-circle\"></i>\n </h4>\n <ul class=\"table-options__list\">\n <li\n v-for=\"(col, index) in orderedCardHeaderColumns\"\n :key=\"'ch-' + col.property\"\n class=\"table-options__item\"\n :class=\"{\n 'table-options__item--disabled': isColumnLocked(col),\n 'table-options__item--selected': orderable && selectedCardHeaderIndex === index,\n 'table-options__item--dragging': orderable && cardHeaderDragIndex === index,\n }\"\n :draggable=\"orderable\"\n @dragstart.stop=\"orderable && onCardHeaderDragStart(index)\"\n @dragover.prevent=\"orderable && onCardHeaderDragOver($event, index)\"\n @drop.prevent\n @dragend=\"orderable && onCardHeaderDragEnd()\"\n @click.prevent=\"\n orderable\n ? selectCardHeader(index)\n : !isColumnLocked(col) && toggleCardHeaderColumn(col.property)\n \"\n >\n <i v-if=\"orderable\" class=\"fa-solid fa-grip-vertical table-options__drag-handle\"></i>\n <span\n class=\"table-options__toggle\"\n @click.stop=\"!isColumnLocked(col) && toggleCardHeaderColumn(col.property)\"\n >\n <span\n class=\"c-checkbox\"\n :class=\"{ 'c-checkbox--checked': local.cardHeaderColumns[col.property] }\"\n ></span>\n <span>{{ col.label }}</span>\n </span>\n </li>\n </ul>\n <div\n v-if=\"orderable && selectedCardHeaderIndex !== null\"\n class=\"table-options__move-actions\"\n >\n <button\n class=\"table-options__move-btn\"\n :disabled=\"selectedCardHeaderIndex === 0\"\n @click=\"moveCardHeader(-1)\"\n >\n <i class=\"fa-solid fa-arrow-up\"></i>\n </button>\n <button\n class=\"table-options__move-btn\"\n :disabled=\"selectedCardHeaderIndex === orderedCardHeaderColumns.length - 1\"\n @click=\"moveCardHeader(1)\"\n >\n <i class=\"fa-solid fa-arrow-down\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"table-options__footer\">\n <Button\n icon=\"fa-solid fa-triangle-exclamation\"\n :disabled=\"!hasCustomSettings\"\n label=\"Alapértelmezés visszaállítása\"\n size=\"small\"\n @click=\"reset\"\n />\n <Button label=\"OK\" @click=\"emit('close')\" />\n </div>\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list-options.scss\"></style>\n"],"mappings":""}
|
|
@@ -1,127 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
//#region src/components/data-table/DataPaginator.vue?vue&type=script&setup=true&lang.ts
|
|
5
|
-
var f = { class: "ac-component" }, p = { class: "c-paginator-wrapper" }, m = { class: "c-paginator" }, h = { class: "c-paginator__info" }, g = { class: "c-paginator__range" }, _ = { class: "c-paginator__total" }, v = {
|
|
6
|
-
class: "c-paginator__nav",
|
|
7
|
-
"aria-label": "Pagination"
|
|
8
|
-
}, y = {
|
|
9
|
-
key: 0,
|
|
10
|
-
class: "c-paginator__ellipsis"
|
|
11
|
-
}, b = ["onClick"], x = { class: "c-paginator__size" }, S = ["value"], C = ["value"], w = [
|
|
12
|
-
10,
|
|
13
|
-
25,
|
|
14
|
-
50,
|
|
15
|
-
100
|
|
16
|
-
], T = 100;
|
|
17
|
-
function E(e) {
|
|
18
|
-
try {
|
|
19
|
-
let n = t("pagination", e), r = localStorage.getItem(n);
|
|
20
|
-
if (r) {
|
|
21
|
-
let e = Number(r);
|
|
22
|
-
if (e > 0) return e;
|
|
23
|
-
}
|
|
24
|
-
} catch {
|
|
25
|
-
console.warn("Failed to read page size from localStorage");
|
|
26
|
-
}
|
|
27
|
-
return T;
|
|
1
|
+
//#region src/utils/url.ts
|
|
2
|
+
function e(e) {
|
|
3
|
+
return new URLSearchParams(window.location.search).get(e);
|
|
28
4
|
}
|
|
29
|
-
function
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
page: 1,
|
|
33
|
-
pageSize: E(e)
|
|
34
|
-
};
|
|
5
|
+
function t(e) {
|
|
6
|
+
let t = new URLSearchParams(e.search), n = t.get("page"), r = t.get("pageSize");
|
|
7
|
+
n == null && r == null || (t.delete("page"), t.delete("pageSize"), r != null && t.append("pageSize", r), n != null && t.append("page", n), e.search = t.toString());
|
|
35
8
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
let t = [];
|
|
57
|
-
for (let n = 1; n <= e; n++) t.push(n);
|
|
58
|
-
return t;
|
|
59
|
-
}
|
|
60
|
-
let n = N - 2, r = t - 1, i = t + 1;
|
|
61
|
-
for (r < 2 && (i = Math.min(e - 1, i + (2 - r)), r = 2), i > e - 1 && (r = Math.max(2, r - (i - (e - 1))), i = e - 1); i - r + 1 < n;) {
|
|
62
|
-
let t = r > 2, a = i < e - 1;
|
|
63
|
-
if (!t && !a) break;
|
|
64
|
-
let o = r - 2, s = e - 1 - i, c = +((t ? r - 1 : 0) > 2) + +(i < e - 1), l = +(r > 2) + +((a ? i + 1 : 0) < e - 1), u = i - r + 2, d = !1;
|
|
65
|
-
if (t && (o >= s || !a) && u + c <= n ? (r--, d = !0) : a && u + l <= n && (i++, d = !0), !d) break;
|
|
66
|
-
}
|
|
67
|
-
let a = r > 2, o = i < e - 1, s = [];
|
|
68
|
-
s.push(1), a && s.push("...");
|
|
69
|
-
for (let e = r; e <= i; e++) s.push(e);
|
|
70
|
-
return o && s.push("..."), s.push(e), s;
|
|
71
|
-
}), N = 7;
|
|
72
|
-
function P(e) {
|
|
73
|
-
let t = E.settings.page, n = k.value, r = e === 1 || e === n, i = e === t;
|
|
74
|
-
return t > 3 && t < n - 2 && !r && !i;
|
|
75
|
-
}
|
|
76
|
-
function F(e) {
|
|
77
|
-
e < 1 || e > k.value || e === E.settings.page || D("update:pagination", {
|
|
78
|
-
page: e,
|
|
79
|
-
pageSize: E.settings.pageSize
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
function I(e) {
|
|
83
|
-
let t = Number(e.target.value);
|
|
84
|
-
O(t), D("update:pagination", {
|
|
85
|
-
page: 1,
|
|
86
|
-
pageSize: t
|
|
87
|
-
});
|
|
9
|
+
function n(e, n) {
|
|
10
|
+
let r = new URL(window.location.href);
|
|
11
|
+
r.searchParams.set(e, String(n)), t(r), window.history.replaceState({}, "", r.toString());
|
|
12
|
+
}
|
|
13
|
+
function r(e) {
|
|
14
|
+
let n = new URL(window.location.href);
|
|
15
|
+
e ? n.searchParams.delete(e) : n.search = "", t(n), window.history.replaceState({}, "", n.toString());
|
|
16
|
+
}
|
|
17
|
+
function i(t) {
|
|
18
|
+
let n = e(t);
|
|
19
|
+
if (n == null) return null;
|
|
20
|
+
let r = Number(n);
|
|
21
|
+
return Number.isFinite(r) && r > 0 ? r : null;
|
|
22
|
+
}
|
|
23
|
+
function a(e, t, i) {
|
|
24
|
+
let { handleUrl: a, removeWhenDefault: o = !0, default: s } = i;
|
|
25
|
+
if (a) {
|
|
26
|
+
if ((t == null || t === "" || s !== void 0 && t === s) && o) {
|
|
27
|
+
r(e);
|
|
28
|
+
return;
|
|
88
29
|
}
|
|
89
|
-
|
|
90
|
-
a("div", h, [a("span", g, d(A.value) + "–" + d(j.value), 1), a("span", _, " / " + d(s.settings.total), 1)]),
|
|
91
|
-
a("nav", v, [
|
|
92
|
-
o(e, {
|
|
93
|
-
icon: "fa-solid fa-chevron-left",
|
|
94
|
-
rel: "prev",
|
|
95
|
-
disabled: s.settings.page <= 1,
|
|
96
|
-
callback: () => F(s.settings.page - 1)
|
|
97
|
-
}, null, 8, ["disabled", "callback"]),
|
|
98
|
-
(l(!0), i(n, null, u(M.value, (e, t) => (l(), i(n, { key: t }, [e === "..." ? (l(), i("span", y, "…")) : (l(), i("button", {
|
|
99
|
-
key: 1,
|
|
100
|
-
type: "button",
|
|
101
|
-
class: c(["c-paginator__page", {
|
|
102
|
-
"is-active": e === s.settings.page,
|
|
103
|
-
"is-hidden-sm": P(e)
|
|
104
|
-
}]),
|
|
105
|
-
onClick: (t) => F(e)
|
|
106
|
-
}, d(e), 11, b))], 64))), 128)),
|
|
107
|
-
o(e, {
|
|
108
|
-
icon: "fa-solid fa-chevron-right",
|
|
109
|
-
rel: "next",
|
|
110
|
-
disabled: s.settings.page >= k.value,
|
|
111
|
-
callback: () => F(s.settings.page + 1)
|
|
112
|
-
}, null, 8, ["disabled", "callback"])
|
|
113
|
-
]),
|
|
114
|
-
a("div", x, [a("select", {
|
|
115
|
-
class: "c-paginator__select",
|
|
116
|
-
id: "page-size-select",
|
|
117
|
-
value: s.settings.pageSize,
|
|
118
|
-
onChange: I
|
|
119
|
-
}, [(l(), i(n, null, u(w, (e) => a("option", {
|
|
120
|
-
key: e,
|
|
121
|
-
value: e
|
|
122
|
-
}, d(e) + " elem / oldal", 9, C)), 64))], 40, S)])
|
|
123
|
-
])])]));
|
|
30
|
+
n(e, String(t));
|
|
124
31
|
}
|
|
125
|
-
}
|
|
32
|
+
}
|
|
33
|
+
function o(...e) {
|
|
34
|
+
return e.map((e, t) => t === 0 ? e.replace(/\/+$/, "") : e.replace(/^\/+|\/+$/g, "")).filter(Boolean).join("/");
|
|
35
|
+
}
|
|
126
36
|
//#endregion
|
|
127
|
-
export {
|
|
37
|
+
export { e as getUrlParam, o as joinUrl, i as readUrlNumber, r as removeUrlParam, n as setUrlParam, a as writeUrlOrRemove };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components76.js","names":[],"sources":["../src/
|
|
1
|
+
{"version":3,"file":"admins-components76.js","names":[],"sources":["../src/utils/url.ts"],"sourcesContent":["export function getUrlParam(key: string): string | null {\n return new URLSearchParams(window.location.search).get(key)\n}\n\nfunction paginationAtEnd(url: URL) {\n const params = new URLSearchParams(url.search)\n const page = params.get('page')\n const pageSize = params.get('pageSize')\n if (page == null && pageSize == null) return\n params.delete('page')\n params.delete('pageSize')\n if (pageSize != null) params.append('pageSize', pageSize)\n if (page != null) params.append('page', page)\n url.search = params.toString()\n}\n\nexport function setUrlParam(key: string, value: string | number): void {\n const url = new URL(window.location.href)\n url.searchParams.set(key, String(value))\n paginationAtEnd(url)\n window.history.replaceState({}, '', url.toString())\n}\n\nexport function removeUrlParam(key?: string): void {\n const url = new URL(window.location.href)\n if (key) {\n url.searchParams.delete(key)\n } else {\n url.search = ''\n }\n paginationAtEnd(url)\n window.history.replaceState({}, '', url.toString())\n}\n\n/** Read a URL param as a positive number. Returns `null` if missing or invalid. */\nexport function readUrlNumber(key: string): number | null {\n const raw = getUrlParam(key)\n if (raw == null) return null\n const n = Number(raw)\n return Number.isFinite(n) && n > 0 ? n : null\n}\n\n/** Read a URL param as a boolean. Accepts `'true' | '1' | 'false' | '0'`. Returns `null` otherwise. */\nexport function readUrlBool(key: string): boolean | null {\n const raw = getUrlParam(key)\n if (raw === 'true' || raw === '1') return true\n if (raw === 'false' || raw === '0') return false\n return null\n}\n\n/** Read a URL param as a non-empty string. Returns `null` if missing or empty. */\nexport function readUrlString(key: string): string | null {\n const raw = getUrlParam(key)\n return raw ? raw : null\n}\n\ninterface WriteUrlOptions {\n handleUrl: boolean\n /**\n * If the new value equals the default (or is `''` / `null`), the URL param\n * is *removed* rather than set. Keeps URLs clean. Defaults to `true`.\n */\n removeWhenDefault?: boolean\n default?: unknown\n}\n\n/**\n * Write a value to the URL — or remove the param if `handleUrl` is `false`,\n * or if the value matches the default / is empty.\n */\nexport function writeUrlOrRemove(\n key: string,\n value: string | number | boolean | null | undefined,\n options: WriteUrlOptions,\n): void {\n const { handleUrl, removeWhenDefault = true, default: defaultValue } = options\n if (!handleUrl) return\n const isEmpty = value == null || value === ''\n const isDefault = defaultValue !== undefined && value === defaultValue\n if ((isEmpty || isDefault) && removeWhenDefault) {\n removeUrlParam(key)\n return\n }\n setUrlParam(key, String(value))\n}\n\nexport function joinUrl(...parts: string[]): string {\n return parts\n .map((part, i) => {\n if (i === 0) return part.replace(/\\/+$/, '')\n return part.replace(/^\\/+|\\/+$/g, '')\n })\n .filter(Boolean)\n .join('/')\n}\n"],"mappings":";AAAA,SAAgB,EAAY,GAA4B;CACtD,OAAO,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAAE,IAAI,CAAG;AAC5D;AAEA,SAAS,EAAgB,GAAU;CACjC,IAAM,IAAS,IAAI,gBAAgB,EAAI,MAAM,GACvC,IAAO,EAAO,IAAI,MAAM,GACxB,IAAW,EAAO,IAAI,UAAU;CAClC,KAAQ,QAAQ,KAAY,SAChC,EAAO,OAAO,MAAM,GACpB,EAAO,OAAO,UAAU,GACpB,KAAY,QAAM,EAAO,OAAO,YAAY,CAAQ,GACpD,KAAQ,QAAM,EAAO,OAAO,QAAQ,CAAI,GAC5C,EAAI,SAAS,EAAO,SAAS;AAC/B;AAEA,SAAgB,EAAY,GAAa,GAA8B;CACrE,IAAM,IAAM,IAAI,IAAI,OAAO,SAAS,IAAI;CAGxC,AAFA,EAAI,aAAa,IAAI,GAAK,OAAO,CAAK,CAAC,GACvC,EAAgB,CAAG,GACnB,OAAO,QAAQ,aAAa,CAAC,GAAG,IAAI,EAAI,SAAS,CAAC;AACpD;AAEA,SAAgB,EAAe,GAAoB;CACjD,IAAM,IAAM,IAAI,IAAI,OAAO,SAAS,IAAI;CAOxC,AANI,IACF,EAAI,aAAa,OAAO,CAAG,IAE3B,EAAI,SAAS,IAEf,EAAgB,CAAG,GACnB,OAAO,QAAQ,aAAa,CAAC,GAAG,IAAI,EAAI,SAAS,CAAC;AACpD;AAGA,SAAgB,EAAc,GAA4B;CACxD,IAAM,IAAM,EAAY,CAAG;CAC3B,IAAI,KAAO,MAAM,OAAO;CACxB,IAAM,IAAI,OAAO,CAAG;CACpB,OAAO,OAAO,SAAS,CAAC,KAAK,IAAI,IAAI,IAAI;AAC3C;AA8BA,SAAgB,EACd,GACA,GACA,GACM;CACN,IAAM,EAAE,cAAW,uBAAoB,IAAM,SAAS,MAAiB;CAClE,OAGL;OAFgB,KAAS,QAAQ,MAAU,MACzB,MAAiB,KAAA,KAAa,MAAU,MAC5B,GAAmB;GAC/C,EAAe,CAAG;GAClB;EACF;EACA,EAAY,GAAK,OAAO,CAAK,CAAC;CAD9B;AAEF;AAEA,SAAgB,EAAQ,GAAG,GAAyB;CAClD,OAAO,EACJ,KAAK,GAAM,MACN,MAAM,IAAU,EAAK,QAAQ,QAAQ,EAAE,IACpC,EAAK,QAAQ,cAAc,EAAE,CACrC,EACA,OAAO,OAAO,EACd,KAAK,GAAG;AACb"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import e from "./admins-components6.js";
|
|
2
|
+
import { getFullStorageKey as t } from "./admins-components75.js";
|
|
3
|
+
import { readUrlNumber as n, writeUrlOrRemove as r } from "./admins-components76.js";
|
|
4
|
+
import { Fragment as i, computed as a, createElementBlock as o, createElementVNode as s, createVNode as c, defineComponent as l, normalizeClass as u, onMounted as d, openBlock as f, renderList as p, toDisplayString as m } from "vue";
|
|
5
|
+
//#region src/components/data-table/DataPaginator.vue?vue&type=script&setup=true&lang.ts
|
|
6
|
+
var h = { class: "ac-component" }, g = { class: "c-paginator-wrapper" }, _ = { class: "c-paginator" }, v = { class: "c-paginator__info" }, y = { class: "c-paginator__range" }, b = { class: "c-paginator__total" }, x = {
|
|
7
|
+
class: "c-paginator__nav",
|
|
8
|
+
"aria-label": "Pagination"
|
|
9
|
+
}, S = {
|
|
10
|
+
key: 0,
|
|
11
|
+
class: "c-paginator__ellipsis"
|
|
12
|
+
}, C = ["onClick"], w = { class: "c-paginator__size" }, T = ["value"], E = ["value"], D = [
|
|
13
|
+
10,
|
|
14
|
+
25,
|
|
15
|
+
50,
|
|
16
|
+
100
|
|
17
|
+
], O = 100;
|
|
18
|
+
function k(e) {
|
|
19
|
+
let r = n("pageSize");
|
|
20
|
+
if (r != null) return r;
|
|
21
|
+
try {
|
|
22
|
+
let n = t("pagination", e), r = localStorage.getItem(n);
|
|
23
|
+
if (r) {
|
|
24
|
+
let e = Number(r);
|
|
25
|
+
if (e > 0) return e;
|
|
26
|
+
}
|
|
27
|
+
} catch {
|
|
28
|
+
console.warn("Failed to read page size from localStorage");
|
|
29
|
+
}
|
|
30
|
+
return O;
|
|
31
|
+
}
|
|
32
|
+
function A(e) {
|
|
33
|
+
return {
|
|
34
|
+
total: 0,
|
|
35
|
+
page: n("page") ?? 1,
|
|
36
|
+
pageSize: k(e)
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
var j = /* @__PURE__ */ l({
|
|
40
|
+
__name: "DataPaginator",
|
|
41
|
+
props: {
|
|
42
|
+
settings: {},
|
|
43
|
+
storageKey: {},
|
|
44
|
+
handleUrl: {
|
|
45
|
+
type: Boolean,
|
|
46
|
+
default: !1
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
emits: ["update:pagination"],
|
|
50
|
+
setup(l, { emit: O }) {
|
|
51
|
+
let k = l, A = O;
|
|
52
|
+
function j(e) {
|
|
53
|
+
try {
|
|
54
|
+
localStorage.setItem(t("pagination", k.storageKey), String(e));
|
|
55
|
+
} catch {
|
|
56
|
+
console.warn("Failed to save page size to localStorage");
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
let M = a(() => Math.max(1, Math.ceil(k.settings.total / k.settings.pageSize))), N = a(() => k.settings.total === 0 ? 0 : (k.settings.page - 1) * k.settings.pageSize + 1), P = a(() => Math.min(k.settings.page * k.settings.pageSize, k.settings.total)), F = a(() => {
|
|
60
|
+
let e = M.value, t = k.settings.page;
|
|
61
|
+
if (e <= I) {
|
|
62
|
+
let t = [];
|
|
63
|
+
for (let n = 1; n <= e; n++) t.push(n);
|
|
64
|
+
return t;
|
|
65
|
+
}
|
|
66
|
+
let n = I - 2, r = t - 1, i = t + 1;
|
|
67
|
+
for (r < 2 && (i = Math.min(e - 1, i + (2 - r)), r = 2), i > e - 1 && (r = Math.max(2, r - (i - (e - 1))), i = e - 1); i - r + 1 < n;) {
|
|
68
|
+
let t = r > 2, a = i < e - 1;
|
|
69
|
+
if (!t && !a) break;
|
|
70
|
+
let o = r - 2, s = e - 1 - i, c = +((t ? r - 1 : 0) > 2) + +(i < e - 1), l = +(r > 2) + +((a ? i + 1 : 0) < e - 1), u = i - r + 2, d = !1;
|
|
71
|
+
if (t && (o >= s || !a) && u + c <= n ? (r--, d = !0) : a && u + l <= n && (i++, d = !0), !d) break;
|
|
72
|
+
}
|
|
73
|
+
let a = r > 2, o = i < e - 1, s = [];
|
|
74
|
+
s.push(1), a && s.push("...");
|
|
75
|
+
for (let e = r; e <= i; e++) s.push(e);
|
|
76
|
+
return o && s.push("..."), s.push(e), s;
|
|
77
|
+
}), I = 7;
|
|
78
|
+
function L(e) {
|
|
79
|
+
let t = k.settings.page, n = M.value, r = e === 1 || e === n, i = e === t;
|
|
80
|
+
return t > 3 && t < n - 2 && !r && !i;
|
|
81
|
+
}
|
|
82
|
+
function R(e) {
|
|
83
|
+
e < 1 || e > M.value || e === k.settings.page || (r("page", e, {
|
|
84
|
+
handleUrl: k.handleUrl,
|
|
85
|
+
default: 1
|
|
86
|
+
}), r("pageSize", k.settings.pageSize, { handleUrl: k.handleUrl }), A("update:pagination", {
|
|
87
|
+
page: e,
|
|
88
|
+
pageSize: k.settings.pageSize
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
function z(e) {
|
|
92
|
+
let t = Number(e.target.value);
|
|
93
|
+
j(t), r("pageSize", t, { handleUrl: k.handleUrl }), r("page", 1, {
|
|
94
|
+
handleUrl: k.handleUrl,
|
|
95
|
+
default: 1
|
|
96
|
+
}), A("update:pagination", {
|
|
97
|
+
page: 1,
|
|
98
|
+
pageSize: t
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return d(() => {
|
|
102
|
+
if (!k.handleUrl) return;
|
|
103
|
+
let e = n("pageSize"), t = n("page");
|
|
104
|
+
e == null || t == null || e === k.settings.pageSize && t === k.settings.page || A("update:pagination", {
|
|
105
|
+
page: t,
|
|
106
|
+
pageSize: e
|
|
107
|
+
});
|
|
108
|
+
}), (t, n) => (f(), o("div", h, [s("div", g, [s("div", _, [
|
|
109
|
+
s("div", v, [s("span", y, m(N.value) + "–" + m(P.value), 1), s("span", b, " / " + m(l.settings.total), 1)]),
|
|
110
|
+
s("nav", x, [
|
|
111
|
+
c(e, {
|
|
112
|
+
icon: "fa-solid fa-chevron-left",
|
|
113
|
+
rel: "prev",
|
|
114
|
+
disabled: l.settings.page <= 1,
|
|
115
|
+
callback: () => R(l.settings.page - 1)
|
|
116
|
+
}, null, 8, ["disabled", "callback"]),
|
|
117
|
+
(f(!0), o(i, null, p(F.value, (e, t) => (f(), o(i, { key: t }, [e === "..." ? (f(), o("span", S, "…")) : (f(), o("button", {
|
|
118
|
+
key: 1,
|
|
119
|
+
type: "button",
|
|
120
|
+
class: u(["c-paginator__page", {
|
|
121
|
+
"is-active": e === l.settings.page,
|
|
122
|
+
"is-hidden-sm": L(e)
|
|
123
|
+
}]),
|
|
124
|
+
onClick: (t) => R(e)
|
|
125
|
+
}, m(e), 11, C))], 64))), 128)),
|
|
126
|
+
c(e, {
|
|
127
|
+
icon: "fa-solid fa-chevron-right",
|
|
128
|
+
rel: "next",
|
|
129
|
+
disabled: l.settings.page >= M.value,
|
|
130
|
+
callback: () => R(l.settings.page + 1)
|
|
131
|
+
}, null, 8, ["disabled", "callback"])
|
|
132
|
+
]),
|
|
133
|
+
s("div", w, [s("select", {
|
|
134
|
+
class: "c-paginator__select",
|
|
135
|
+
id: "page-size-select",
|
|
136
|
+
value: l.settings.pageSize,
|
|
137
|
+
onChange: z
|
|
138
|
+
}, [(f(), o(i, null, p(D, (e) => s("option", {
|
|
139
|
+
key: e,
|
|
140
|
+
value: e
|
|
141
|
+
}, m(e) + " elem / oldal", 9, E)), 64))], 40, T)])
|
|
142
|
+
])])]));
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
//#endregion
|
|
146
|
+
export { j as default, A as getDefaultPaginator, k as getPageSize };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admins-components77.js","names":[],"sources":["../src/components/data-table/DataPaginator.vue"],"sourcesContent":["<script lang=\"ts\">\nconst SIZE_OPTIONS = [10, 25, 50, 100]\nconst DEFAULT_PAGE_SIZE = 100\n\nexport function getPageSize(storageKey: string): number {\n // URL > localStorage > default\n const urlSize = readUrlNumber('pageSize')\n if (urlSize != null) return urlSize\n try {\n const fullStorageKey = getFullStorageKey('pagination', storageKey)\n const raw = localStorage.getItem(fullStorageKey)\n if (raw) {\n const size = Number(raw)\n if (size > 0) return size\n }\n } catch {\n console.warn('Failed to read page size from localStorage')\n }\n return DEFAULT_PAGE_SIZE\n}\n\nexport function getDefaultPaginator(storageKey: string) {\n return {\n total: 0,\n page: readUrlNumber('page') ?? 1,\n pageSize: getPageSize(storageKey),\n } as PaginatorSettings\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted } from 'vue'\nimport Button from '@/components/Button.vue'\nimport type { PaginatorSettings, PageSettings } from '@/types/data-list'\nimport { getFullStorageKey } from '@/utils/storageKey'\nimport { readUrlNumber, writeUrlOrRemove } from '@/utils/url'\n\nconst props = withDefaults(\n defineProps<{ settings: PaginatorSettings; storageKey: string; handleUrl?: boolean }>(),\n { handleUrl: false },\n)\n\nconst emit = defineEmits<{\n 'update:pagination': [pagination: PageSettings]\n}>()\n\nfunction savePageSize(size: number) {\n try {\n localStorage.setItem(\n getFullStorageKey('pagination', props.storageKey),\n String(size),\n )\n } catch {\n console.warn('Failed to save page size to localStorage')\n }\n}\n\nconst totalPages = computed(() =>\n Math.max(1, Math.ceil(props.settings.total / props.settings.pageSize)),\n)\n\nconst rangeStart = computed(() =>\n props.settings.total === 0 ? 0 : (props.settings.page - 1) * props.settings.pageSize + 1,\n)\nconst rangeEnd = computed(() =>\n Math.min(props.settings.page * props.settings.pageSize, props.settings.total),\n)\n\nconst visiblePages = computed<(number | '...')[]>(() => {\n const total = totalPages.value\n const current = props.settings.page\n\n if (total <= SLOT_COUNT) {\n const pages: number[] = []\n for (let i = 1; i <= total; i++) pages.push(i)\n return pages\n }\n\n const inner = SLOT_COUNT - 2\n let winStart = current - 1\n let winEnd = current + 1\n if (winStart < 2) {\n winEnd = Math.min(total - 1, winEnd + (2 - winStart))\n winStart = 2\n }\n if (winEnd > total - 1) {\n winStart = Math.max(2, winStart - (winEnd - (total - 1)))\n winEnd = total - 1\n }\n\n while (winEnd - winStart + 1 < inner) {\n const canExtendLeft = winStart > 2\n const canExtendRight = winEnd < total - 1\n if (!canExtendLeft && !canExtendRight) break\n\n const roomLeft = winStart - 2\n const roomRight = total - 1 - winEnd\n\n const ellipsisIfExtendLeft =\n ((canExtendLeft ? winStart - 1 : 0) > 2 ? 1 : 0) + (winEnd < total - 1 ? 1 : 0)\n const ellipsisIfExtendRight =\n (winStart > 2 ? 1 : 0) + ((canExtendRight ? winEnd + 1 : 0) < total - 1 ? 1 : 0)\n\n const newSize = winEnd - winStart + 2\n\n let extended = false\n if (\n canExtendLeft &&\n (roomLeft >= roomRight || !canExtendRight) &&\n newSize + ellipsisIfExtendLeft <= inner\n ) {\n winStart--\n extended = true\n } else if (canExtendRight && newSize + ellipsisIfExtendRight <= inner) {\n winEnd++\n extended = true\n }\n if (!extended) break\n }\n const showLeftEllipsis = winStart > 2\n const showRightEllipsis = winEnd < total - 1\n\n const pages: (number | '...')[] = []\n pages.push(1)\n if (showLeftEllipsis) pages.push('...')\n for (let p = winStart; p <= winEnd; p++) pages.push(p)\n if (showRightEllipsis) pages.push('...')\n pages.push(total)\n\n return pages\n})\n\nconst SLOT_COUNT = 7\n\nfunction shouldHideOnSmall(page: number) {\n const current = props.settings.page\n const total = totalPages.value\n\n const isEdge = page === 1 || page === total\n const isCurrent = page === current\n\n const isMiddleRange = current > 3 && current < total - 2\n\n return isMiddleRange && !isEdge && !isCurrent\n}\n\nfunction goToPage(page: number) {\n if (page < 1 || page > totalPages.value || page === props.settings.page) return\n writeUrlOrRemove('page', page, { handleUrl: props.handleUrl, default: 1 })\n writeUrlOrRemove('pageSize', props.settings.pageSize, { handleUrl: props.handleUrl })\n emit('update:pagination', { page, pageSize: props.settings.pageSize })\n}\n\nfunction changePageSize(event: Event) {\n const size = Number((event.target as HTMLSelectElement).value)\n savePageSize(size)\n writeUrlOrRemove('pageSize', size, { handleUrl: props.handleUrl })\n writeUrlOrRemove('page', 1, { handleUrl: props.handleUrl, default: 1 })\n emit('update:pagination', { page: 1, pageSize: size })\n}\n\nonMounted(() => {\n if (!props.handleUrl) return\n // URL only counts if BOTH `page` and `pageSize` are present and valid.\n // It wins for this load but is intentionally NOT written to localStorage —\n // localStorage holds the user's persistent preference and must not be\n // polluted by transient URL state.\n const urlSize = readUrlNumber('pageSize')\n const urlPage = readUrlNumber('page')\n if (urlSize == null || urlPage == null) return\n if (urlSize === props.settings.pageSize && urlPage === props.settings.page) return\n emit('update:pagination', { page: urlPage, pageSize: urlSize })\n})\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div class=\"c-paginator-wrapper\">\n <div class=\"c-paginator\">\n <div class=\"c-paginator__info\">\n <span class=\"c-paginator__range\">{{ rangeStart }}–{{ rangeEnd }}</span>\n <span class=\"c-paginator__total\"> / {{ settings.total }}</span>\n </div>\n\n <nav class=\"c-paginator__nav\" aria-label=\"Pagination\">\n <Button\n icon=\"fa-solid fa-chevron-left\"\n rel=\"prev\"\n :disabled=\"settings.page <= 1\"\n :callback=\"() => goToPage(settings.page - 1)\"\n />\n\n <template v-for=\"(p, i) in visiblePages\" :key=\"i\">\n <span v-if=\"p === '...'\" class=\"c-paginator__ellipsis\">…</span>\n <button\n v-else\n type=\"button\"\n class=\"c-paginator__page\"\n :class=\"{\n 'is-active': p === settings.page,\n 'is-hidden-sm': shouldHideOnSmall(p),\n }\"\n @click=\"goToPage(p)\"\n >\n {{ p }}\n </button>\n </template>\n\n <Button\n icon=\"fa-solid fa-chevron-right\"\n rel=\"next\"\n :disabled=\"settings.page >= totalPages\"\n :callback=\"() => goToPage(settings.page + 1)\"\n />\n </nav>\n\n <div class=\"c-paginator__size\">\n <select\n class=\"c-paginator__select\"\n id=\"page-size-select\"\n :value=\"settings.pageSize\"\n @change=\"changePageSize\"\n >\n <option v-for=\"s in SIZE_OPTIONS\" :key=\"s\" :value=\"s\">{{ s }} elem / oldal</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-paginator.scss\"></style>\n"],"mappings":";;;;;;;;;;;sFACM,IAAe;CAAC;CAAI;CAAI;CAAI;AAAG,GAC/B,IAAoB;AAE1B,SAAgB,EAAY,GAA4B;CAEtD,IAAM,IAAU,EAAc,UAAU;CACxC,IAAI,KAAW,MAAM,OAAO;CAC5B,IAAI;EACF,IAAM,IAAiB,EAAkB,cAAc,CAAU,GAC3D,IAAM,aAAa,QAAQ,CAAc;EAC/C,IAAI,GAAK;GACP,IAAM,IAAO,OAAO,CAAG;GACvB,IAAI,IAAO,GAAG,OAAO;EACvB;CACF,QAAQ;EACN,QAAQ,KAAK,4CAA4C;CAC3D;CACA,OAAO;AACT;AAEA,SAAgB,EAAoB,GAAoB;CACtD,OAAO;EACL,OAAO;EACP,MAAM,EAAc,MAAM,KAAK;EAC/B,UAAU,EAAY,CAAU;CAClC;AACF;;;;;;;;;;;;;EAUA,IAAM,IAAQ,GAKR,IAAO;EAIb,SAAS,EAAa,GAAc;GAClC,IAAI;IACF,aAAa,QACX,EAAkB,cAAc,EAAM,UAAU,GAChD,OAAO,CAAI,CACb;GACF,QAAQ;IACN,QAAQ,KAAK,0CAA0C;GACzD;EACF;EAEA,IAAM,IAAa,QACjB,KAAK,IAAI,GAAG,KAAK,KAAK,EAAM,SAAS,QAAQ,EAAM,SAAS,QAAQ,CAAC,CACvE,GAEM,IAAa,QACjB,EAAM,SAAS,UAAU,IAAI,KAAK,EAAM,SAAS,OAAO,KAAK,EAAM,SAAS,WAAW,CACzF,GACM,IAAW,QACf,KAAK,IAAI,EAAM,SAAS,OAAO,EAAM,SAAS,UAAU,EAAM,SAAS,KAAK,CAC9E,GAEM,IAAe,QAAmC;GACtD,IAAM,IAAQ,EAAW,OACnB,IAAU,EAAM,SAAS;GAE/B,IAAI,KAAS,GAAY;IACvB,IAAM,IAAkB,CAAC;IACzB,KAAK,IAAI,IAAI,GAAG,KAAK,GAAO,KAAK,EAAM,KAAK,CAAC;IAC7C,OAAO;GACT;GAEA,IAAM,IAAQ,IAAa,GACvB,IAAW,IAAU,GACrB,IAAS,IAAU;GAUvB,KATI,IAAW,MACb,IAAS,KAAK,IAAI,IAAQ,GAAG,KAAU,IAAI,EAAS,GACpD,IAAW,IAET,IAAS,IAAQ,MACnB,IAAW,KAAK,IAAI,GAAG,KAAY,KAAU,IAAQ,GAAG,GACxD,IAAS,IAAQ,IAGZ,IAAS,IAAW,IAAI,IAAO;IACpC,IAAM,IAAgB,IAAW,GAC3B,IAAiB,IAAS,IAAQ;IACxC,IAAI,CAAC,KAAiB,CAAC,GAAgB;IAEvC,IAAM,IAAW,IAAW,GACtB,IAAY,IAAQ,IAAI,GAExB,IAAA,GACF,IAAgB,IAAW,IAAI,KAAK,KAAc,MAAS,IAAQ,IACjE,IACH,MAAW,KAAQ,GAAO,IAAiB,IAAS,IAAI,KAAK,IAAQ,IAElE,IAAU,IAAS,IAAW,GAEhC,IAAW;IAYf,IAVE,MACC,KAAY,KAAa,CAAC,MAC3B,IAAU,KAAwB,KAElC,KACA,IAAW,MACF,KAAkB,IAAU,KAAyB,MAC9D,KACA,IAAW,KAET,CAAC,GAAU;GACjB;GACA,IAAM,IAAmB,IAAW,GAC9B,IAAoB,IAAS,IAAQ,GAErC,IAA4B,CAAC;GAEnC,AADA,EAAM,KAAK,CAAC,GACR,KAAkB,EAAM,KAAK,KAAK;GACtC,KAAK,IAAI,IAAI,GAAU,KAAK,GAAQ,KAAK,EAAM,KAAK,CAAC;GAIrD,OAHI,KAAmB,EAAM,KAAK,KAAK,GACvC,EAAM,KAAK,CAAK,GAET;EACT,CAAC,GAEK,IAAa;EAEnB,SAAS,EAAkB,GAAc;GACvC,IAAM,IAAU,EAAM,SAAS,MACzB,IAAQ,EAAW,OAEnB,IAAS,MAAS,KAAK,MAAS,GAChC,IAAY,MAAS;GAI3B,OAFsB,IAAU,KAAK,IAAU,IAAQ,KAE/B,CAAC,KAAU,CAAC;EACtC;EAEA,SAAS,EAAS,GAAc;GAC1B,IAAO,KAAK,IAAO,EAAW,SAAS,MAAS,EAAM,SAAS,SACnE,EAAiB,QAAQ,GAAM;IAAE,WAAW,EAAM;IAAW,SAAS;GAAE,CAAC,GACzE,EAAiB,YAAY,EAAM,SAAS,UAAU,EAAE,WAAW,EAAM,UAAU,CAAC,GACpF,EAAK,qBAAqB;IAAE;IAAM,UAAU,EAAM,SAAS;GAAS,CAAC;EACvE;EAEA,SAAS,EAAe,GAAc;GACpC,IAAM,IAAO,OAAQ,EAAM,OAA6B,KAAK;GAI7D,AAHA,EAAa,CAAI,GACjB,EAAiB,YAAY,GAAM,EAAE,WAAW,EAAM,UAAU,CAAC,GACjE,EAAiB,QAAQ,GAAG;IAAE,WAAW,EAAM;IAAW,SAAS;GAAE,CAAC,GACtE,EAAK,qBAAqB;IAAE,MAAM;IAAG,UAAU;GAAK,CAAC;EACvD;SAEA,QAAgB;GACd,IAAI,CAAC,EAAM,WAAW;GAKtB,IAAM,IAAU,EAAc,UAAU,GAClC,IAAU,EAAc,MAAM;GAChC,KAAW,QAAQ,KAAW,QAC9B,MAAY,EAAM,SAAS,YAAY,MAAY,EAAM,SAAS,QACtE,EAAK,qBAAqB;IAAE,MAAM;IAAS,UAAU;GAAQ,CAAC;EAChE,CAAC,mBAIC,EAoDM,OApDN,GAoDM,CAnDJ,EAkDM,OAlDN,GAkDM,CAjDJ,EAgDM,OAhDN,GAgDM;GA/CJ,EAGM,OAHN,GAGM,CAFJ,EAA6E,QAA7E,GAA6E,EAAzC,EAAA,KAAU,IAAG,MAAO,EAAG,EAAA,KAAQ,GAAA,CAAA,GACnE,EAA+D,QAA/D,GAAiC,QAAG,EAAG,EAAA,SAAS,KAAK,GAAA,CAAA,CAAA,CAAA;GAGvD,EA8BM,OA9BN,GA8BM;IA7BJ,EAKE,GAAA;KAJA,MAAK;KACL,KAAI;KACH,UAAU,EAAA,SAAS,QAAI;KACvB,gBAAgB,EAAS,EAAA,SAAS,OAAI,CAAA;;YAGzC,EAcW,GAAA,MAAA,EAdgB,EAAA,QAAT,GAAG,wBAA0B,EAAC,GAAA,CAClC,MAAC,SAAA,EAAA,GAAb,EAAsE,QAAtE,GAAuD,GAAQ,MAAA,EAAA,GAC/D,EAWS,UAAA;;KATP,MAAK;KACL,OAAK,EAAA,CAAC,qBAAmB;mBACc,MAAM,EAAA,SAAS;sBAAsC,EAAkB,CAAC;;KAI9G,UAAK,MAAE,EAAS,CAAC;SAEf,CAAC,GAAA,IAAA,CAAA,EAAA,GAAA,EAAA;IAIR,EAKE,GAAA;KAJA,MAAK;KACL,KAAI;KACH,UAAU,EAAA,SAAS,QAAQ,EAAA;KAC3B,gBAAgB,EAAS,EAAA,SAAS,OAAI,CAAA;;;GAI3C,EASM,OATN,GASM,CARJ,EAOS,UAAA;IANP,OAAM;IACN,IAAG;IACF,OAAO,EAAA,SAAS;IAChB,UAAQ;aAET,EAAmF,GAAA,MAAA,EAA/D,IAAL,MAAf,EAAmF,UAAA;IAAhD,KAAK;IAAI,OAAO;QAAM,CAAC,IAAG,iBAAa,GAAA,CAAA"}
|
|
@@ -1,60 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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;
|
|
14
|
-
}
|
|
15
|
-
if (a?.type === "checkbox") return i ? "Bekapcsolva" : "";
|
|
16
|
-
if (a?.type === "date" || a?.type === "datetime") {
|
|
17
|
-
if (typeof i == "object" && i) {
|
|
18
|
-
let t = i.local ?? i.utc ?? null;
|
|
19
|
-
if (t == null) return "";
|
|
20
|
-
let n = t instanceof Date ? t : new Date(t);
|
|
21
|
-
if (!isNaN(n.getTime())) return e(n, a.type === "datetime" ? "YYYY-MM-DD HH:mm" : "YYYY-MM-DD");
|
|
22
|
-
}
|
|
23
|
-
if (typeof i == "string" && i) {
|
|
24
|
-
let t = new Date(i);
|
|
25
|
-
if (!isNaN(t.getTime())) return e(t, a.type === "datetime" ? "YYYY-MM-DD HH:mm" : "YYYY-MM-DD");
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
if ((a?.type === "daterange" || a?.type === "datetimerange") && typeof i == "object") {
|
|
29
|
-
let t = a.type === "datetimerange" ? "YYYY-MM-DD HH:mm" : "YYYY-MM-DD";
|
|
30
|
-
return `${i.fromUtc ? e(new Date(i.fromUtc), t) : "…"} - ${i.toUtc ? e(new Date(i.toUtc), t) : "…"}`;
|
|
31
|
-
}
|
|
32
|
-
return typeof i == "object" ? JSON.stringify(i) : String(i);
|
|
33
|
-
}
|
|
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;
|
|
42
|
-
}
|
|
43
|
-
return e;
|
|
44
|
-
}
|
|
45
|
-
function r(e, n) {
|
|
46
|
-
let r = [];
|
|
47
|
-
for (let [i, a] of Object.entries(n)) {
|
|
48
|
-
let n = t(e, i, a);
|
|
49
|
-
if (!n) continue;
|
|
50
|
-
let o = e.find((e) => e.key === i), s = o?.label ?? i;
|
|
51
|
-
r.push({
|
|
52
|
-
key: i,
|
|
53
|
-
text: `${s}: ${n}`,
|
|
54
|
-
displayClass: o?.displayClass
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
return r;
|
|
58
|
-
}
|
|
1
|
+
import './src/styles/components/data-table/data-paginator.scss_vue_type_style_index_0_src_true_lang.css';
|
|
2
|
+
import e from "./admins-components77.js";
|
|
3
|
+
/* empty css */
|
|
4
|
+
//#region src/components/data-table/DataPaginator.vue
|
|
5
|
+
var t = e;
|
|
59
6
|
//#endregion
|
|
60
|
-
export {
|
|
7
|
+
export { t as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components79.js","names":[],"sources":["../src/
|
|
1
|
+
{"version":3,"file":"admins-components79.js","names":[],"sources":["../src/components/data-table/DataPaginator.vue"],"sourcesContent":["<script lang=\"ts\">\nconst SIZE_OPTIONS = [10, 25, 50, 100]\nconst DEFAULT_PAGE_SIZE = 100\n\nexport function getPageSize(storageKey: string): number {\n // URL > localStorage > default\n const urlSize = readUrlNumber('pageSize')\n if (urlSize != null) return urlSize\n try {\n const fullStorageKey = getFullStorageKey('pagination', storageKey)\n const raw = localStorage.getItem(fullStorageKey)\n if (raw) {\n const size = Number(raw)\n if (size > 0) return size\n }\n } catch {\n console.warn('Failed to read page size from localStorage')\n }\n return DEFAULT_PAGE_SIZE\n}\n\nexport function getDefaultPaginator(storageKey: string) {\n return {\n total: 0,\n page: readUrlNumber('page') ?? 1,\n pageSize: getPageSize(storageKey),\n } as PaginatorSettings\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted } from 'vue'\nimport Button from '@/components/Button.vue'\nimport type { PaginatorSettings, PageSettings } from '@/types/data-list'\nimport { getFullStorageKey } from '@/utils/storageKey'\nimport { readUrlNumber, writeUrlOrRemove } from '@/utils/url'\n\nconst props = withDefaults(\n defineProps<{ settings: PaginatorSettings; storageKey: string; handleUrl?: boolean }>(),\n { handleUrl: false },\n)\n\nconst emit = defineEmits<{\n 'update:pagination': [pagination: PageSettings]\n}>()\n\nfunction savePageSize(size: number) {\n try {\n localStorage.setItem(\n getFullStorageKey('pagination', props.storageKey),\n String(size),\n )\n } catch {\n console.warn('Failed to save page size to localStorage')\n }\n}\n\nconst totalPages = computed(() =>\n Math.max(1, Math.ceil(props.settings.total / props.settings.pageSize)),\n)\n\nconst rangeStart = computed(() =>\n props.settings.total === 0 ? 0 : (props.settings.page - 1) * props.settings.pageSize + 1,\n)\nconst rangeEnd = computed(() =>\n Math.min(props.settings.page * props.settings.pageSize, props.settings.total),\n)\n\nconst visiblePages = computed<(number | '...')[]>(() => {\n const total = totalPages.value\n const current = props.settings.page\n\n if (total <= SLOT_COUNT) {\n const pages: number[] = []\n for (let i = 1; i <= total; i++) pages.push(i)\n return pages\n }\n\n const inner = SLOT_COUNT - 2\n let winStart = current - 1\n let winEnd = current + 1\n if (winStart < 2) {\n winEnd = Math.min(total - 1, winEnd + (2 - winStart))\n winStart = 2\n }\n if (winEnd > total - 1) {\n winStart = Math.max(2, winStart - (winEnd - (total - 1)))\n winEnd = total - 1\n }\n\n while (winEnd - winStart + 1 < inner) {\n const canExtendLeft = winStart > 2\n const canExtendRight = winEnd < total - 1\n if (!canExtendLeft && !canExtendRight) break\n\n const roomLeft = winStart - 2\n const roomRight = total - 1 - winEnd\n\n const ellipsisIfExtendLeft =\n ((canExtendLeft ? winStart - 1 : 0) > 2 ? 1 : 0) + (winEnd < total - 1 ? 1 : 0)\n const ellipsisIfExtendRight =\n (winStart > 2 ? 1 : 0) + ((canExtendRight ? winEnd + 1 : 0) < total - 1 ? 1 : 0)\n\n const newSize = winEnd - winStart + 2\n\n let extended = false\n if (\n canExtendLeft &&\n (roomLeft >= roomRight || !canExtendRight) &&\n newSize + ellipsisIfExtendLeft <= inner\n ) {\n winStart--\n extended = true\n } else if (canExtendRight && newSize + ellipsisIfExtendRight <= inner) {\n winEnd++\n extended = true\n }\n if (!extended) break\n }\n const showLeftEllipsis = winStart > 2\n const showRightEllipsis = winEnd < total - 1\n\n const pages: (number | '...')[] = []\n pages.push(1)\n if (showLeftEllipsis) pages.push('...')\n for (let p = winStart; p <= winEnd; p++) pages.push(p)\n if (showRightEllipsis) pages.push('...')\n pages.push(total)\n\n return pages\n})\n\nconst SLOT_COUNT = 7\n\nfunction shouldHideOnSmall(page: number) {\n const current = props.settings.page\n const total = totalPages.value\n\n const isEdge = page === 1 || page === total\n const isCurrent = page === current\n\n const isMiddleRange = current > 3 && current < total - 2\n\n return isMiddleRange && !isEdge && !isCurrent\n}\n\nfunction goToPage(page: number) {\n if (page < 1 || page > totalPages.value || page === props.settings.page) return\n writeUrlOrRemove('page', page, { handleUrl: props.handleUrl, default: 1 })\n writeUrlOrRemove('pageSize', props.settings.pageSize, { handleUrl: props.handleUrl })\n emit('update:pagination', { page, pageSize: props.settings.pageSize })\n}\n\nfunction changePageSize(event: Event) {\n const size = Number((event.target as HTMLSelectElement).value)\n savePageSize(size)\n writeUrlOrRemove('pageSize', size, { handleUrl: props.handleUrl })\n writeUrlOrRemove('page', 1, { handleUrl: props.handleUrl, default: 1 })\n emit('update:pagination', { page: 1, pageSize: size })\n}\n\nonMounted(() => {\n if (!props.handleUrl) return\n // URL only counts if BOTH `page` and `pageSize` are present and valid.\n // It wins for this load but is intentionally NOT written to localStorage —\n // localStorage holds the user's persistent preference and must not be\n // polluted by transient URL state.\n const urlSize = readUrlNumber('pageSize')\n const urlPage = readUrlNumber('page')\n if (urlSize == null || urlPage == null) return\n if (urlSize === props.settings.pageSize && urlPage === props.settings.page) return\n emit('update:pagination', { page: urlPage, pageSize: urlSize })\n})\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div class=\"c-paginator-wrapper\">\n <div class=\"c-paginator\">\n <div class=\"c-paginator__info\">\n <span class=\"c-paginator__range\">{{ rangeStart }}–{{ rangeEnd }}</span>\n <span class=\"c-paginator__total\"> / {{ settings.total }}</span>\n </div>\n\n <nav class=\"c-paginator__nav\" aria-label=\"Pagination\">\n <Button\n icon=\"fa-solid fa-chevron-left\"\n rel=\"prev\"\n :disabled=\"settings.page <= 1\"\n :callback=\"() => goToPage(settings.page - 1)\"\n />\n\n <template v-for=\"(p, i) in visiblePages\" :key=\"i\">\n <span v-if=\"p === '...'\" class=\"c-paginator__ellipsis\">…</span>\n <button\n v-else\n type=\"button\"\n class=\"c-paginator__page\"\n :class=\"{\n 'is-active': p === settings.page,\n 'is-hidden-sm': shouldHideOnSmall(p),\n }\"\n @click=\"goToPage(p)\"\n >\n {{ p }}\n </button>\n </template>\n\n <Button\n icon=\"fa-solid fa-chevron-right\"\n rel=\"next\"\n :disabled=\"settings.page >= totalPages\"\n :callback=\"() => goToPage(settings.page + 1)\"\n />\n </nav>\n\n <div class=\"c-paginator__size\">\n <select\n class=\"c-paginator__select\"\n id=\"page-size-select\"\n :value=\"settings.pageSize\"\n @change=\"changePageSize\"\n >\n <option v-for=\"s in SIZE_OPTIONS\" :key=\"s\" :value=\"s\">{{ s }} elem / oldal</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-paginator.scss\"></style>\n"],"mappings":""}
|