@medyat/vue-data-table 0.0.0-stage → 1.0.1
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/CHANGELOG.md +65 -0
- package/LICENSE +21 -0
- package/README.md +179 -2
- package/dist/ColumnsDialog-dngip-aF.js +251 -0
- package/dist/ColumnsDialog-dngip-aF.js.map +1 -0
- package/dist/DateEditor-C2zzyoPQ.js +224 -0
- package/dist/DateEditor-C2zzyoPQ.js.map +1 -0
- package/dist/FiltersSheet-C3zOlbkN.js +284 -0
- package/dist/FiltersSheet-C3zOlbkN.js.map +1 -0
- package/dist/Layer-Di-tPd8b.js +106 -0
- package/dist/Layer-Di-tPd8b.js.map +1 -0
- package/dist/PhoneMoreSheet-66OdIZrl.js +266 -0
- package/dist/PhoneMoreSheet-66OdIZrl.js.map +1 -0
- package/dist/TextEditor-CHLM6u-l.js +330 -0
- package/dist/TextEditor-CHLM6u-l.js.map +1 -0
- package/dist/index.d.ts +716 -0
- package/dist/index.js +3186 -0
- package/dist/index.js.map +1 -0
- package/dist/query-CGNWUi2E.js +2904 -0
- package/dist/query-CGNWUi2E.js.map +1 -0
- package/dist/shadcn-bridge-hsl.css +22 -0
- package/dist/shadcn-bridge.css +23 -0
- package/dist/sheet.d.ts +623 -0
- package/dist/sheet.js +3721 -0
- package/dist/sheet.js.map +1 -0
- package/dist/style.css +2 -0
- package/package.json +93 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FiltersSheet-C3zOlbkN.js","names":["_openBlock","_createBlock","Layer","_createSlots","_withCtx","_createElementBlock","_toDisplayString","_unref","_createCommentVNode","_Fragment","_renderList","_createElementVNode","_createVNode","_createTextVNode","_withDirectives","_vModelText","_resolveDynamicComponent","OptionsEditor","TextEditor","NumberEditor","StarEditor","_sfc_main","editorOf","defaultOperator","operatorsOf","isComplete","changeOperator","useDataTableContext","TYPE_SPECS","opLabel","TYPE_ICONS","NumberEditor_default","StarEditor_default","OptionsEditor_default","TextEditor_default","Layer_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","FiltersSheet_default","defineComponent","__expose","__emit","DateEditor","defineAsyncComponent","props","__props","emit","open","ref","draft","draftSort","level","editingCol","q","defOf","c","id","headerOf","filterable","computed","sortable","drafted","suggested","pickable","column","edit","def","existing","editing","editingDef","editor","ops","valueCount","update","patch","setValue","setOp","op","unassigned","remove","back","setSortColumn","setSortDir","dir","apply","title","i18n","openBlock","createBlock","_cache","$event","createSlots","withCtx","createElementBlock","toDisplayString","unref","createCommentVNode","Fragment","renderList","createElementVNode","createVNode","PhX","PhCaretRight","PhPlus","createTextVNode","PhCaretDown","ToggleGroupRoot","ToggleGroupItem","PhArrowUp","PhArrowDown","PhMagnifyingGlass","withDirectives","vModelText","resolveDynamicComponent","PhCaretLeft"],"sources":["../src/core/filters/FiltersSheet.vue","../src/core/filters/FiltersSheet.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// Telefon Filters alt sayfası (04 §9, handoff 04 §6.1–6.2, T13-04/05): uygulanmış filtreler · Suggested · Add filter · Sort ·\n// Show results. Değişiklikler taslakta birikir ve Show results'la tek seferde uygulanır (masaüstündeki anında uygulamadan\n// farklı). Değer editörü ve sütun seçici aynı sayfanın alt seviyeleridir (geri okuyla döner).\nimport {\n PhArrowDown,\n PhArrowUp,\n PhCaretDown,\n PhCaretLeft,\n PhCaretRight,\n PhMagnifyingGlass,\n PhPlus,\n PhX,\n} from '@phosphor-icons/vue'\nimport { ToggleGroupItem, ToggleGroupRoot } from 'reka-ui'\nimport { computed, defineAsyncComponent, ref } from 'vue'\nimport type { ColumnDef } from '../../types/columns'\nimport type { FilterOp, SortRule } from '../../types/query'\nimport type { RemoteLabels } from '../cells/remoteLabels'\nimport { TYPE_SPECS } from '../cells/specs'\nconst DateEditor = defineAsyncComponent(() => import('../editors/DateEditor.vue'))\nimport NumberEditor from '../editors/NumberEditor.vue'\nimport OptionsEditor from '../editors/OptionsEditor.vue'\nimport StarEditor from '../editors/StarEditor.vue'\nimport TextEditor from '../editors/TextEditor.vue'\nimport { useDataTableContext } from '../plugin'\nimport Layer from '../ui/Layer.vue'\nimport {\n changeOperator,\n defaultOperator,\n editorOf,\n isComplete,\n opLabel,\n operatorsOf,\n type Chip,\n type Summary,\n} from './model'\nimport { TYPE_ICONS } from './typeIcons'\n\nconst props = defineProps<{\n columns: ColumnDef[]\n chips: Chip[]\n sort: SortRule[]\n rows: object[]\n labels: RemoteLabels\n summaryOf: (chip: Chip) => Summary\n currenciesOf: (def: ColumnDef) => string[]\n}>()\nconst emit = defineEmits<{ apply: [chips: Chip[], sort: SortRule[]] }>()\nconst { i18n } = useDataTableContext()\n\nconst open = ref(false)\nconst draft = ref<Chip[]>([])\n// shortcut: telefonda tek sıralama kuralı; çoklu sıralama masaüstü Display › Sort'ta (ikincil kurallar Show results'ta düşer).\nconst draftSort = ref<SortRule | null>(null)\nconst level = ref<'main' | 'editor' | 'picker'>('main')\nconst editingCol = ref<string | null>(null)\nconst q = ref('')\n\nconst defOf = (id: string) => props.columns.find((c) => c.id === id)\nconst headerOf = (id: string) => defOf(id)?.header ?? id\nconst filterable = computed(() => props.columns.filter((c) => c.filterable ?? TYPE_SPECS[c.type].filterable))\nconst sortable = computed(() => props.columns.filter((c) => c.sortable ?? TYPE_SPECS[c.type].sortable))\nconst drafted = (id: string) => draft.value.some((c) => c.column === id)\nconst suggested = computed(() => filterable.value.filter((c) => c.suggested && !drafted(c.id as string)))\nconst pickable = computed(() =>\n filterable.value.filter(\n (c) => !drafted(c.id as string) && (!q.value || c.header.toLocaleLowerCase().includes(q.value.toLocaleLowerCase())),\n ),\n)\n\n/** Açılış: taslak = uygulanan çipler + ilk sıralama kuralı. `column` verilirse doğrudan o sütunun editörü (çip, header hunisi). */\nconst show = (column?: string) => {\n draft.value = props.chips.map((c) => ({ ...c }))\n draftSort.value = props.sort[0] ?? null\n level.value = 'main'\n editingCol.value = null\n q.value = ''\n open.value = true\n if (column) edit(column)\n}\ndefineExpose({ show })\n\n/** Var olan taslak çipi açar, yoksa varsayılan operatörle oluşturur. boolean'ın editörü yok: dokunuş Yes ↔ No. */\nconst edit = (column: string) => {\n const def = defOf(column)\n if (!def) return\n const existing = draft.value.find((c) => c.column === column)\n if (def.type === 'boolean') {\n draft.value = existing\n ? draft.value.map((c) => (c === existing ? { ...c, value: !(c.value === true) } : c))\n : [...draft.value, { column, op: defaultOperator(def), value: true }]\n return\n }\n if (!existing) draft.value = [...draft.value, { column, op: defaultOperator(def) }]\n editingCol.value = column\n level.value = 'editor'\n}\nconst editing = computed(() => draft.value.find((c) => c.column === editingCol.value) ?? null)\nconst editingDef = computed(() => (editingCol.value ? defOf(editingCol.value) : undefined))\nconst editor = computed(() =>\n editing.value && editingDef.value ? editorOf(editing.value.op, editingDef.value.type) : null,\n)\nconst ops = computed(() => (editingDef.value ? operatorsOf(editingDef.value) : []))\nconst valueCount = computed(() => (Array.isArray(editing.value?.value) ? editing.value.value.length : 1))\nconst update = (patch: Partial<Chip>) =>\n (draft.value = draft.value.map((c) => (c.column === editingCol.value ? { ...c, ...patch } : c)))\nconst setValue = (value: unknown) => {\n const def = editingDef.value!\n update({\n value,\n currency:\n def.type === 'currency' ? (editing.value?.currency ?? props.currenciesOf(def)[0]) : editing.value?.currency,\n })\n}\nconst setOp = (op: FilterOp) =>\n (draft.value = draft.value.map((c) =>\n c.column === editingCol.value ? changeOperator(c, op, editingDef.value!.type) : c,\n ))\n/** Kişi listesinde Unassigned: `is_empty` ile değişimli (FilterChip ile aynı). */\nconst unassigned = () => setOp(editing.value?.op === 'is_empty' ? 'in' : 'is_empty')\nconst remove = (column: string) => (draft.value = draft.value.filter((c) => c.column !== column))\n/** Geri / Done: değer seçilmemiş çip taslaktan düşer (04 §1). */\nconst back = () => {\n const c = editing.value\n if (c && editingDef.value && !isComplete(c, editingDef.value.type)) remove(c.column)\n editingCol.value = null\n level.value = 'main'\n}\nconst setSortColumn = (column: string) =>\n (draftSort.value = column ? { column, dir: draftSort.value?.dir ?? 'asc' } : null)\nconst setSortDir = (dir: unknown) => {\n if ((dir === 'asc' || dir === 'desc') && draftSort.value) draftSort.value = { ...draftSort.value, dir }\n}\nconst apply = () => {\n emit(\n 'apply',\n draft.value.filter((c) => isComplete(c, defOf(c.column)!.type)),\n draftSort.value ? [draftSort.value] : [],\n )\n open.value = false\n}\nconst title = computed(() =>\n level.value === 'main'\n ? i18n.t('mobile.filters')\n : level.value === 'picker'\n ? i18n.t('filter.addFilter')\n : (editingDef.value?.header ?? ''),\n)\n</script>\n\n<template>\n <Layer v-model:open=\"open\" sheet content-class=\"dt-filters-sheet\" :title=\"title\">\n <template v-if=\"level !== 'main'\" #head-start>\n <button type=\"button\" class=\"dt-bsheet-back\" :aria-label=\"i18n.t('mobile.backToFilters')\" @click=\"back\">\n <PhCaretLeft :size=\"20\" aria-hidden=\"true\" />\n </button>\n </template>\n <template #head-end>\n <button v-if=\"level === 'main'\" type=\"button\" class=\"dt-bsheet-action\" @click=\"draft = []\">\n {{ i18n.t('filter.clearAll') }}\n </button>\n <button\n v-else-if=\"level === 'editor'\"\n type=\"button\"\n class=\"dt-bsheet-action\"\n :disabled=\"editing?.value === undefined\"\n @click=\"update({ value: undefined })\"\n >\n {{ i18n.t('common.clear') }}\n </button>\n </template>\n\n <template v-if=\"level === 'main'\">\n <div v-for=\"c in draft\" :key=\"c.column\" class=\"dt-bsheet-row is-split\">\n <button type=\"button\" class=\"dt-bsheet-row-main\" @click=\"edit(c.column)\">\n <span class=\"dt-bsheet-field\">{{ headerOf(c.column) }}</span>\n <span class=\"dt-bsheet-value is-strong\">{{ summaryOf(c).text }}</span>\n </button>\n <button\n type=\"button\"\n class=\"dt-bsheet-x\"\n :aria-label=\"i18n.t('filter.removeAria', { column: headerOf(c.column) })\"\n @click=\"remove(c.column)\"\n >\n <PhX :size=\"16\" aria-hidden=\"true\" />\n </button>\n </div>\n <template v-if=\"suggested.length\">\n <div class=\"dt-bsheet-label\">{{ i18n.t('picker.suggested') }}</div>\n <button v-for=\"c in suggested\" :key=\"c.id\" type=\"button\" class=\"dt-bsheet-row\" @click=\"edit(c.id as string)\">\n <span class=\"dt-bsheet-field\">{{ c.header }}</span>\n <span class=\"dt-bsheet-value\">{{ i18n.t('common.any') }}</span>\n <PhCaretRight :size=\"16\" aria-hidden=\"true\" />\n </button>\n </template>\n <button type=\"button\" class=\"dt-bsheet-row is-accent\" @click=\"level = 'picker'\">\n <PhPlus :size=\"18\" aria-hidden=\"true\" />\n {{ i18n.t('filter.addFilter') }}\n </button>\n <div class=\"dt-bsheet-sep\" />\n <div class=\"dt-bsheet-label\">{{ i18n.t('mobile.sort') }}</div>\n <div class=\"dt-bsheet-row is-sort\">\n <label class=\"dt-select dt-bsheet-select\">\n <select\n :value=\"draftSort?.column ?? ''\"\n :aria-label=\"i18n.t('mobile.sort')\"\n @change=\"setSortColumn(($event.target as HTMLSelectElement).value)\"\n >\n <option value=\"\">{{ i18n.t('common.empty') }}</option>\n <option v-for=\"c in sortable\" :key=\"c.id\" :value=\"c.id\">{{ c.header }}</option>\n </select>\n <PhCaretDown :size=\"14\" aria-hidden=\"true\" />\n </label>\n <ToggleGroupRoot\n class=\"dt-seg dt-bsheet-dir\"\n type=\"single\"\n :model-value=\"draftSort?.dir ?? ''\"\n :disabled=\"!draftSort\"\n @update:model-value=\"setSortDir\"\n >\n <ToggleGroupItem class=\"dt-seg-item\" value=\"asc\" :aria-label=\"i18n.t('header.sortAsc')\">\n <PhArrowUp :size=\"16\" aria-hidden=\"true\" />\n </ToggleGroupItem>\n <ToggleGroupItem class=\"dt-seg-item\" value=\"desc\" :aria-label=\"i18n.t('header.sortDesc')\">\n <PhArrowDown :size=\"16\" aria-hidden=\"true\" />\n </ToggleGroupItem>\n </ToggleGroupRoot>\n </div>\n </template>\n\n <template v-else-if=\"level === 'picker'\">\n <label class=\"dt-input has-icon dt-bsheet-search\">\n <span class=\"dt-input-icon\"><PhMagnifyingGlass :size=\"16\" aria-hidden=\"true\" /></span>\n <input v-model=\"q\" type=\"search\" :placeholder=\"i18n.t('picker.search')\" :aria-label=\"i18n.t('picker.search')\" />\n </label>\n <button v-for=\"c in pickable\" :key=\"c.id\" type=\"button\" class=\"dt-bsheet-row\" @click=\"edit(c.id as string)\">\n <component :is=\"TYPE_ICONS[c.type]\" :size=\"16\" class=\"dt-bsheet-icon\" aria-hidden=\"true\" />\n {{ c.header }}\n </button>\n <div v-if=\"!pickable.length\" class=\"dt-options-empty\">{{ i18n.t('picker.noMatch') }}</div>\n </template>\n\n <div v-else-if=\"editing && editingDef\" class=\"dt-bsheet-editor\">\n <label class=\"dt-select dt-bsheet-select\">\n <select\n :value=\"editing.op\"\n :aria-label=\"i18n.t('mobile.operator')\"\n @change=\"setOp(($event.target as HTMLSelectElement).value as FilterOp)\"\n >\n <option v-for=\"op in ops\" :key=\"op\" :value=\"op\">{{ opLabel(i18n, op, editingDef.type, valueCount) }}</option>\n </select>\n <PhCaretDown :size=\"14\" aria-hidden=\"true\" />\n </label>\n <OptionsEditor\n v-if=\"editor === 'options'\"\n :column=\"editingDef\"\n :op=\"editing.op\"\n :model-value=\"Array.isArray(editing.value) ? (editing.value as Array<string | number>) : []\"\n :rows=\"rows\"\n :labels=\"labels\"\n @update:model-value=\"setValue\"\n @unassigned=\"unassigned\"\n />\n <TextEditor\n v-else-if=\"editor === 'text'\"\n :column=\"editingDef\"\n :op=\"editing.op\"\n :model-value=\"editing.value\"\n @update:model-value=\"setValue\"\n @done=\"back\"\n />\n <NumberEditor\n v-else-if=\"editor === 'number'\"\n :column=\"editingDef\"\n :op=\"editing.op\"\n :model-value=\"editing.value\"\n :currency=\"editing.currency\"\n :currencies=\"currenciesOf(editingDef)\"\n @update:model-value=\"setValue\"\n @update:currency=\"(c) => update({ currency: c })\"\n @done=\"back\"\n />\n <StarEditor\n v-else-if=\"editor === 'star'\"\n :column=\"editingDef\"\n :model-value=\"editing.value\"\n @update:model-value=\"setValue\"\n @done=\"back\"\n />\n <DateEditor\n v-else-if=\"editor === 'date'\"\n :op=\"editing.op\"\n :model-value=\"editing.value\"\n @update:model-value=\"setValue\"\n @done=\"back\"\n />\n </div>\n\n <template #foot>\n <button v-if=\"level === 'editor'\" type=\"button\" class=\"dt-bsheet-primary\" @click=\"back\">\n {{ i18n.t('common.done') }}\n </button>\n <button v-else type=\"button\" class=\"dt-bsheet-primary\" @click=\"apply\">\n {{ i18n.t('mobile.showResults') }}\n </button>\n </template>\n </Layer>\n</template>\n","<script setup lang=\"ts\">\n// Telefon Filters alt sayfası (04 §9, handoff 04 §6.1–6.2, T13-04/05): uygulanmış filtreler · Suggested · Add filter · Sort ·\n// Show results. Değişiklikler taslakta birikir ve Show results'la tek seferde uygulanır (masaüstündeki anında uygulamadan\n// farklı). Değer editörü ve sütun seçici aynı sayfanın alt seviyeleridir (geri okuyla döner).\nimport {\n PhArrowDown,\n PhArrowUp,\n PhCaretDown,\n PhCaretLeft,\n PhCaretRight,\n PhMagnifyingGlass,\n PhPlus,\n PhX,\n} from '@phosphor-icons/vue'\nimport { ToggleGroupItem, ToggleGroupRoot } from 'reka-ui'\nimport { computed, defineAsyncComponent, ref } from 'vue'\nimport type { ColumnDef } from '../../types/columns'\nimport type { FilterOp, SortRule } from '../../types/query'\nimport type { RemoteLabels } from '../cells/remoteLabels'\nimport { TYPE_SPECS } from '../cells/specs'\nconst DateEditor = defineAsyncComponent(() => import('../editors/DateEditor.vue'))\nimport NumberEditor from '../editors/NumberEditor.vue'\nimport OptionsEditor from '../editors/OptionsEditor.vue'\nimport StarEditor from '../editors/StarEditor.vue'\nimport TextEditor from '../editors/TextEditor.vue'\nimport { useDataTableContext } from '../plugin'\nimport Layer from '../ui/Layer.vue'\nimport {\n changeOperator,\n defaultOperator,\n editorOf,\n isComplete,\n opLabel,\n operatorsOf,\n type Chip,\n type Summary,\n} from './model'\nimport { TYPE_ICONS } from './typeIcons'\n\nconst props = defineProps<{\n columns: ColumnDef[]\n chips: Chip[]\n sort: SortRule[]\n rows: object[]\n labels: RemoteLabels\n summaryOf: (chip: Chip) => Summary\n currenciesOf: (def: ColumnDef) => string[]\n}>()\nconst emit = defineEmits<{ apply: [chips: Chip[], sort: SortRule[]] }>()\nconst { i18n } = useDataTableContext()\n\nconst open = ref(false)\nconst draft = ref<Chip[]>([])\n// shortcut: telefonda tek sıralama kuralı; çoklu sıralama masaüstü Display › Sort'ta (ikincil kurallar Show results'ta düşer).\nconst draftSort = ref<SortRule | null>(null)\nconst level = ref<'main' | 'editor' | 'picker'>('main')\nconst editingCol = ref<string | null>(null)\nconst q = ref('')\n\nconst defOf = (id: string) => props.columns.find((c) => c.id === id)\nconst headerOf = (id: string) => defOf(id)?.header ?? id\nconst filterable = computed(() => props.columns.filter((c) => c.filterable ?? TYPE_SPECS[c.type].filterable))\nconst sortable = computed(() => props.columns.filter((c) => c.sortable ?? TYPE_SPECS[c.type].sortable))\nconst drafted = (id: string) => draft.value.some((c) => c.column === id)\nconst suggested = computed(() => filterable.value.filter((c) => c.suggested && !drafted(c.id as string)))\nconst pickable = computed(() =>\n filterable.value.filter(\n (c) => !drafted(c.id as string) && (!q.value || c.header.toLocaleLowerCase().includes(q.value.toLocaleLowerCase())),\n ),\n)\n\n/** Açılış: taslak = uygulanan çipler + ilk sıralama kuralı. `column` verilirse doğrudan o sütunun editörü (çip, header hunisi). */\nconst show = (column?: string) => {\n draft.value = props.chips.map((c) => ({ ...c }))\n draftSort.value = props.sort[0] ?? null\n level.value = 'main'\n editingCol.value = null\n q.value = ''\n open.value = true\n if (column) edit(column)\n}\ndefineExpose({ show })\n\n/** Var olan taslak çipi açar, yoksa varsayılan operatörle oluşturur. boolean'ın editörü yok: dokunuş Yes ↔ No. */\nconst edit = (column: string) => {\n const def = defOf(column)\n if (!def) return\n const existing = draft.value.find((c) => c.column === column)\n if (def.type === 'boolean') {\n draft.value = existing\n ? draft.value.map((c) => (c === existing ? { ...c, value: !(c.value === true) } : c))\n : [...draft.value, { column, op: defaultOperator(def), value: true }]\n return\n }\n if (!existing) draft.value = [...draft.value, { column, op: defaultOperator(def) }]\n editingCol.value = column\n level.value = 'editor'\n}\nconst editing = computed(() => draft.value.find((c) => c.column === editingCol.value) ?? null)\nconst editingDef = computed(() => (editingCol.value ? defOf(editingCol.value) : undefined))\nconst editor = computed(() =>\n editing.value && editingDef.value ? editorOf(editing.value.op, editingDef.value.type) : null,\n)\nconst ops = computed(() => (editingDef.value ? operatorsOf(editingDef.value) : []))\nconst valueCount = computed(() => (Array.isArray(editing.value?.value) ? editing.value.value.length : 1))\nconst update = (patch: Partial<Chip>) =>\n (draft.value = draft.value.map((c) => (c.column === editingCol.value ? { ...c, ...patch } : c)))\nconst setValue = (value: unknown) => {\n const def = editingDef.value!\n update({\n value,\n currency:\n def.type === 'currency' ? (editing.value?.currency ?? props.currenciesOf(def)[0]) : editing.value?.currency,\n })\n}\nconst setOp = (op: FilterOp) =>\n (draft.value = draft.value.map((c) =>\n c.column === editingCol.value ? changeOperator(c, op, editingDef.value!.type) : c,\n ))\n/** Kişi listesinde Unassigned: `is_empty` ile değişimli (FilterChip ile aynı). */\nconst unassigned = () => setOp(editing.value?.op === 'is_empty' ? 'in' : 'is_empty')\nconst remove = (column: string) => (draft.value = draft.value.filter((c) => c.column !== column))\n/** Geri / Done: değer seçilmemiş çip taslaktan düşer (04 §1). */\nconst back = () => {\n const c = editing.value\n if (c && editingDef.value && !isComplete(c, editingDef.value.type)) remove(c.column)\n editingCol.value = null\n level.value = 'main'\n}\nconst setSortColumn = (column: string) =>\n (draftSort.value = column ? { column, dir: draftSort.value?.dir ?? 'asc' } : null)\nconst setSortDir = (dir: unknown) => {\n if ((dir === 'asc' || dir === 'desc') && draftSort.value) draftSort.value = { ...draftSort.value, dir }\n}\nconst apply = () => {\n emit(\n 'apply',\n draft.value.filter((c) => isComplete(c, defOf(c.column)!.type)),\n draftSort.value ? [draftSort.value] : [],\n )\n open.value = false\n}\nconst title = computed(() =>\n level.value === 'main'\n ? i18n.t('mobile.filters')\n : level.value === 'picker'\n ? i18n.t('filter.addFilter')\n : (editingDef.value?.header ?? ''),\n)\n</script>\n\n<template>\n <Layer v-model:open=\"open\" sheet content-class=\"dt-filters-sheet\" :title=\"title\">\n <template v-if=\"level !== 'main'\" #head-start>\n <button type=\"button\" class=\"dt-bsheet-back\" :aria-label=\"i18n.t('mobile.backToFilters')\" @click=\"back\">\n <PhCaretLeft :size=\"20\" aria-hidden=\"true\" />\n </button>\n </template>\n <template #head-end>\n <button v-if=\"level === 'main'\" type=\"button\" class=\"dt-bsheet-action\" @click=\"draft = []\">\n {{ i18n.t('filter.clearAll') }}\n </button>\n <button\n v-else-if=\"level === 'editor'\"\n type=\"button\"\n class=\"dt-bsheet-action\"\n :disabled=\"editing?.value === undefined\"\n @click=\"update({ value: undefined })\"\n >\n {{ i18n.t('common.clear') }}\n </button>\n </template>\n\n <template v-if=\"level === 'main'\">\n <div v-for=\"c in draft\" :key=\"c.column\" class=\"dt-bsheet-row is-split\">\n <button type=\"button\" class=\"dt-bsheet-row-main\" @click=\"edit(c.column)\">\n <span class=\"dt-bsheet-field\">{{ headerOf(c.column) }}</span>\n <span class=\"dt-bsheet-value is-strong\">{{ summaryOf(c).text }}</span>\n </button>\n <button\n type=\"button\"\n class=\"dt-bsheet-x\"\n :aria-label=\"i18n.t('filter.removeAria', { column: headerOf(c.column) })\"\n @click=\"remove(c.column)\"\n >\n <PhX :size=\"16\" aria-hidden=\"true\" />\n </button>\n </div>\n <template v-if=\"suggested.length\">\n <div class=\"dt-bsheet-label\">{{ i18n.t('picker.suggested') }}</div>\n <button v-for=\"c in suggested\" :key=\"c.id\" type=\"button\" class=\"dt-bsheet-row\" @click=\"edit(c.id as string)\">\n <span class=\"dt-bsheet-field\">{{ c.header }}</span>\n <span class=\"dt-bsheet-value\">{{ i18n.t('common.any') }}</span>\n <PhCaretRight :size=\"16\" aria-hidden=\"true\" />\n </button>\n </template>\n <button type=\"button\" class=\"dt-bsheet-row is-accent\" @click=\"level = 'picker'\">\n <PhPlus :size=\"18\" aria-hidden=\"true\" />\n {{ i18n.t('filter.addFilter') }}\n </button>\n <div class=\"dt-bsheet-sep\" />\n <div class=\"dt-bsheet-label\">{{ i18n.t('mobile.sort') }}</div>\n <div class=\"dt-bsheet-row is-sort\">\n <label class=\"dt-select dt-bsheet-select\">\n <select\n :value=\"draftSort?.column ?? ''\"\n :aria-label=\"i18n.t('mobile.sort')\"\n @change=\"setSortColumn(($event.target as HTMLSelectElement).value)\"\n >\n <option value=\"\">{{ i18n.t('common.empty') }}</option>\n <option v-for=\"c in sortable\" :key=\"c.id\" :value=\"c.id\">{{ c.header }}</option>\n </select>\n <PhCaretDown :size=\"14\" aria-hidden=\"true\" />\n </label>\n <ToggleGroupRoot\n class=\"dt-seg dt-bsheet-dir\"\n type=\"single\"\n :model-value=\"draftSort?.dir ?? ''\"\n :disabled=\"!draftSort\"\n @update:model-value=\"setSortDir\"\n >\n <ToggleGroupItem class=\"dt-seg-item\" value=\"asc\" :aria-label=\"i18n.t('header.sortAsc')\">\n <PhArrowUp :size=\"16\" aria-hidden=\"true\" />\n </ToggleGroupItem>\n <ToggleGroupItem class=\"dt-seg-item\" value=\"desc\" :aria-label=\"i18n.t('header.sortDesc')\">\n <PhArrowDown :size=\"16\" aria-hidden=\"true\" />\n </ToggleGroupItem>\n </ToggleGroupRoot>\n </div>\n </template>\n\n <template v-else-if=\"level === 'picker'\">\n <label class=\"dt-input has-icon dt-bsheet-search\">\n <span class=\"dt-input-icon\"><PhMagnifyingGlass :size=\"16\" aria-hidden=\"true\" /></span>\n <input v-model=\"q\" type=\"search\" :placeholder=\"i18n.t('picker.search')\" :aria-label=\"i18n.t('picker.search')\" />\n </label>\n <button v-for=\"c in pickable\" :key=\"c.id\" type=\"button\" class=\"dt-bsheet-row\" @click=\"edit(c.id as string)\">\n <component :is=\"TYPE_ICONS[c.type]\" :size=\"16\" class=\"dt-bsheet-icon\" aria-hidden=\"true\" />\n {{ c.header }}\n </button>\n <div v-if=\"!pickable.length\" class=\"dt-options-empty\">{{ i18n.t('picker.noMatch') }}</div>\n </template>\n\n <div v-else-if=\"editing && editingDef\" class=\"dt-bsheet-editor\">\n <label class=\"dt-select dt-bsheet-select\">\n <select\n :value=\"editing.op\"\n :aria-label=\"i18n.t('mobile.operator')\"\n @change=\"setOp(($event.target as HTMLSelectElement).value as FilterOp)\"\n >\n <option v-for=\"op in ops\" :key=\"op\" :value=\"op\">{{ opLabel(i18n, op, editingDef.type, valueCount) }}</option>\n </select>\n <PhCaretDown :size=\"14\" aria-hidden=\"true\" />\n </label>\n <OptionsEditor\n v-if=\"editor === 'options'\"\n :column=\"editingDef\"\n :op=\"editing.op\"\n :model-value=\"Array.isArray(editing.value) ? (editing.value as Array<string | number>) : []\"\n :rows=\"rows\"\n :labels=\"labels\"\n @update:model-value=\"setValue\"\n @unassigned=\"unassigned\"\n />\n <TextEditor\n v-else-if=\"editor === 'text'\"\n :column=\"editingDef\"\n :op=\"editing.op\"\n :model-value=\"editing.value\"\n @update:model-value=\"setValue\"\n @done=\"back\"\n />\n <NumberEditor\n v-else-if=\"editor === 'number'\"\n :column=\"editingDef\"\n :op=\"editing.op\"\n :model-value=\"editing.value\"\n :currency=\"editing.currency\"\n :currencies=\"currenciesOf(editingDef)\"\n @update:model-value=\"setValue\"\n @update:currency=\"(c) => update({ currency: c })\"\n @done=\"back\"\n />\n <StarEditor\n v-else-if=\"editor === 'star'\"\n :column=\"editingDef\"\n :model-value=\"editing.value\"\n @update:model-value=\"setValue\"\n @done=\"back\"\n />\n <DateEditor\n v-else-if=\"editor === 'date'\"\n :op=\"editing.op\"\n :model-value=\"editing.value\"\n @update:model-value=\"setValue\"\n @done=\"back\"\n />\n </div>\n\n <template #foot>\n <button v-if=\"level === 'editor'\" type=\"button\" class=\"dt-bsheet-primary\" @click=\"back\">\n {{ i18n.t('common.done') }}\n </button>\n <button v-else type=\"button\" class=\"dt-bsheet-primary\" @click=\"apply\">\n {{ i18n.t('mobile.showResults') }}\n </button>\n </template>\n </Layer>\n</template>\n"],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { createBlock as e, createCommentVNode as t, createElementBlock as n, createElementVNode as r, createTextVNode as i, createVNode as a, defineComponent as o, mergeModels as s, normalizeClass as c, openBlock as l, renderSlot as u, toDisplayString as d, unref as f, useModel as p, withCtx as m } from "vue";
|
|
2
|
+
import { DialogContent as h, DialogOverlay as g, DialogPortal as _, DialogRoot as v, DialogTitle as y, DialogTrigger as b, PopoverContent as x, PopoverPortal as S, PopoverRoot as C, PopoverTrigger as w } from "reka-ui";
|
|
3
|
+
//#region src/core/ui/Layer.vue?vue&type=script&setup=true&lang.ts
|
|
4
|
+
var T = {
|
|
5
|
+
key: 0,
|
|
6
|
+
class: "dt-bsheet-head"
|
|
7
|
+
}, E = { class: "dt-bsheet-body" }, D = {
|
|
8
|
+
key: 2,
|
|
9
|
+
class: "dt-bsheet-foot"
|
|
10
|
+
}, O = /* @__PURE__ */ o({
|
|
11
|
+
__name: "Layer",
|
|
12
|
+
props: /*@__PURE__*/ s({
|
|
13
|
+
sheet: { type: Boolean },
|
|
14
|
+
title: {},
|
|
15
|
+
hideTitle: { type: Boolean },
|
|
16
|
+
contentClass: {},
|
|
17
|
+
align: {},
|
|
18
|
+
sideOffset: {}
|
|
19
|
+
}, {
|
|
20
|
+
open: {
|
|
21
|
+
type: Boolean,
|
|
22
|
+
default: !1
|
|
23
|
+
},
|
|
24
|
+
openModifiers: {}
|
|
25
|
+
}),
|
|
26
|
+
emits: /*@__PURE__*/ s(["focusOutside"], ["update:open"]),
|
|
27
|
+
setup(o, { emit: s }) {
|
|
28
|
+
let O = s, k = p(o, "open");
|
|
29
|
+
return (s, p) => o.sheet ? (l(), e(f(v), {
|
|
30
|
+
key: 0,
|
|
31
|
+
open: k.value,
|
|
32
|
+
"onUpdate:open": p[0] ||= (e) => k.value = e
|
|
33
|
+
}, {
|
|
34
|
+
default: m(() => [s.$slots.trigger ? (l(), e(f(b), {
|
|
35
|
+
key: 0,
|
|
36
|
+
"as-child": ""
|
|
37
|
+
}, {
|
|
38
|
+
default: m(() => [u(s.$slots, "trigger")]),
|
|
39
|
+
_: 3
|
|
40
|
+
})) : t("", !0), a(f(_), null, {
|
|
41
|
+
default: m(() => [a(f(g), { class: "dt-scrim" }), a(f(h), {
|
|
42
|
+
class: c(["dt-bsheet", o.contentClass]),
|
|
43
|
+
"aria-describedby": void 0
|
|
44
|
+
}, {
|
|
45
|
+
default: m(() => [
|
|
46
|
+
p[3] ||= r("span", {
|
|
47
|
+
class: "dt-bsheet-handle",
|
|
48
|
+
"aria-hidden": "true"
|
|
49
|
+
}, null, -1),
|
|
50
|
+
o.hideTitle ? (l(), e(f(y), {
|
|
51
|
+
key: 1,
|
|
52
|
+
class: "dt-sr-only"
|
|
53
|
+
}, {
|
|
54
|
+
default: m(() => [i(d(o.title), 1)]),
|
|
55
|
+
_: 1
|
|
56
|
+
})) : (l(), n("div", T, [
|
|
57
|
+
u(s.$slots, "head-start"),
|
|
58
|
+
a(f(y), { class: "dt-bsheet-title" }, {
|
|
59
|
+
default: m(() => [i(d(o.title), 1)]),
|
|
60
|
+
_: 1
|
|
61
|
+
}),
|
|
62
|
+
u(s.$slots, "head-end")
|
|
63
|
+
])),
|
|
64
|
+
r("div", E, [u(s.$slots, "default")]),
|
|
65
|
+
s.$slots.foot ? (l(), n("div", D, [u(s.$slots, "foot")])) : t("", !0)
|
|
66
|
+
]),
|
|
67
|
+
_: 3
|
|
68
|
+
}, 8, ["class"])]),
|
|
69
|
+
_: 3
|
|
70
|
+
})]),
|
|
71
|
+
_: 3
|
|
72
|
+
}, 8, ["open"])) : (l(), e(f(C), {
|
|
73
|
+
key: 1,
|
|
74
|
+
open: k.value,
|
|
75
|
+
"onUpdate:open": p[2] ||= (e) => k.value = e
|
|
76
|
+
}, {
|
|
77
|
+
default: m(() => [s.$slots.trigger ? (l(), e(f(w), {
|
|
78
|
+
key: 0,
|
|
79
|
+
"as-child": ""
|
|
80
|
+
}, {
|
|
81
|
+
default: m(() => [u(s.$slots, "trigger")]),
|
|
82
|
+
_: 3
|
|
83
|
+
})) : t("", !0), a(f(S), null, {
|
|
84
|
+
default: m(() => [a(f(x), {
|
|
85
|
+
class: c(["dt-pop", o.contentClass]),
|
|
86
|
+
align: o.align,
|
|
87
|
+
"side-offset": o.sideOffset ?? 4,
|
|
88
|
+
onFocusOutside: p[1] ||= (e) => O("focusOutside", e)
|
|
89
|
+
}, {
|
|
90
|
+
default: m(() => [u(s.$slots, "default")]),
|
|
91
|
+
_: 3
|
|
92
|
+
}, 8, [
|
|
93
|
+
"class",
|
|
94
|
+
"align",
|
|
95
|
+
"side-offset"
|
|
96
|
+
])]),
|
|
97
|
+
_: 3
|
|
98
|
+
})]),
|
|
99
|
+
_: 3
|
|
100
|
+
}, 8, ["open"]));
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
//#endregion
|
|
104
|
+
export { O as t };
|
|
105
|
+
|
|
106
|
+
//# sourceMappingURL=Layer-Di-tPd8b.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Layer-Di-tPd8b.js","names":["$slots","_useModel","_openBlock","_createBlock","_unref","_withCtx","_renderSlot","_createCommentVNode","_createVNode","_normalizeClass","_createElementVNode","_createElementBlock","_createTextVNode","_toDisplayString","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","Layer_default","defineComponent","\"open\"","\"openModifiers\"","__emit","emit","open","useModel","__props","openBlock","createBlock","unref","DialogRoot","_cache","$event","withCtx","_ctx","DialogTrigger","renderSlot","createCommentVNode","createVNode","DialogPortal","DialogOverlay","DialogContent","normalizeClass","createElementVNode","DialogTitle","createTextVNode","toDisplayString","createElementBlock","PopoverRoot","PopoverTrigger","PopoverPortal","PopoverContent"],"sources":["../src/core/ui/Layer.vue","../src/core/ui/Layer.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// Popover ya da telefonda alt sayfa (05 §11, handoff 04 §6): aynı içerik, farklı kap. Alt sayfa reka Dialog'dur: scrim,\n// odak hapsi, Esc, kapanınca odak tetikleyiciye. Tutamaç · başlık satırı (geri / başlık / metin düğmesi) · kayan gövde · alt düğme.\nimport {\n DialogContent,\n DialogOverlay,\n DialogPortal,\n DialogRoot,\n DialogTitle,\n DialogTrigger,\n PopoverContent,\n PopoverPortal,\n PopoverRoot,\n PopoverTrigger,\n} from 'reka-ui'\n\ndefineProps<{\n sheet?: boolean\n /** Alt sayfanın erişilebilir adı; `hideTitle` ile yalnızca ekran okuyucuya. */\n title: string\n hideTitle?: boolean\n contentClass?: string\n align?: 'start' | 'center' | 'end'\n sideOffset?: number\n}>()\nconst emit = defineEmits<{ focusOutside: [e: CustomEvent<{ originalEvent: FocusEvent }>] }>()\nconst open = defineModel<boolean>('open', { default: false })\n</script>\n\n<template>\n <DialogRoot v-if=\"sheet\" v-model:open=\"open\">\n <DialogTrigger v-if=\"$slots.trigger\" as-child><slot name=\"trigger\" /></DialogTrigger>\n <DialogPortal>\n <DialogOverlay class=\"dt-scrim\" />\n <DialogContent class=\"dt-bsheet\" :class=\"contentClass\" :aria-describedby=\"undefined\">\n <span class=\"dt-bsheet-handle\" aria-hidden=\"true\" />\n <div v-if=\"!hideTitle\" class=\"dt-bsheet-head\">\n <slot name=\"head-start\" />\n <DialogTitle class=\"dt-bsheet-title\">{{ title }}</DialogTitle>\n <slot name=\"head-end\" />\n </div>\n <DialogTitle v-else class=\"dt-sr-only\">{{ title }}</DialogTitle>\n <div class=\"dt-bsheet-body\"><slot /></div>\n <div v-if=\"$slots.foot\" class=\"dt-bsheet-foot\"><slot name=\"foot\" /></div>\n </DialogContent>\n </DialogPortal>\n </DialogRoot>\n <PopoverRoot v-else v-model:open=\"open\">\n <PopoverTrigger v-if=\"$slots.trigger\" as-child><slot name=\"trigger\" /></PopoverTrigger>\n <PopoverPortal>\n <PopoverContent\n class=\"dt-pop\"\n :class=\"contentClass\"\n :align=\"align\"\n :side-offset=\"sideOffset ?? 4\"\n @focus-outside=\"(e) => emit('focusOutside', e)\"\n >\n <slot />\n </PopoverContent>\n </PopoverPortal>\n </PopoverRoot>\n</template>\n","<script setup lang=\"ts\">\n// Popover ya da telefonda alt sayfa (05 §11, handoff 04 §6): aynı içerik, farklı kap. Alt sayfa reka Dialog'dur: scrim,\n// odak hapsi, Esc, kapanınca odak tetikleyiciye. Tutamaç · başlık satırı (geri / başlık / metin düğmesi) · kayan gövde · alt düğme.\nimport {\n DialogContent,\n DialogOverlay,\n DialogPortal,\n DialogRoot,\n DialogTitle,\n DialogTrigger,\n PopoverContent,\n PopoverPortal,\n PopoverRoot,\n PopoverTrigger,\n} from 'reka-ui'\n\ndefineProps<{\n sheet?: boolean\n /** Alt sayfanın erişilebilir adı; `hideTitle` ile yalnızca ekran okuyucuya. */\n title: string\n hideTitle?: boolean\n contentClass?: string\n align?: 'start' | 'center' | 'end'\n sideOffset?: number\n}>()\nconst emit = defineEmits<{ focusOutside: [e: CustomEvent<{ originalEvent: FocusEvent }>] }>()\nconst open = defineModel<boolean>('open', { default: false })\n</script>\n\n<template>\n <DialogRoot v-if=\"sheet\" v-model:open=\"open\">\n <DialogTrigger v-if=\"$slots.trigger\" as-child><slot name=\"trigger\" /></DialogTrigger>\n <DialogPortal>\n <DialogOverlay class=\"dt-scrim\" />\n <DialogContent class=\"dt-bsheet\" :class=\"contentClass\" :aria-describedby=\"undefined\">\n <span class=\"dt-bsheet-handle\" aria-hidden=\"true\" />\n <div v-if=\"!hideTitle\" class=\"dt-bsheet-head\">\n <slot name=\"head-start\" />\n <DialogTitle class=\"dt-bsheet-title\">{{ title }}</DialogTitle>\n <slot name=\"head-end\" />\n </div>\n <DialogTitle v-else class=\"dt-sr-only\">{{ title }}</DialogTitle>\n <div class=\"dt-bsheet-body\"><slot /></div>\n <div v-if=\"$slots.foot\" class=\"dt-bsheet-foot\"><slot name=\"foot\" /></div>\n </DialogContent>\n </DialogPortal>\n </DialogRoot>\n <PopoverRoot v-else v-model:open=\"open\">\n <PopoverTrigger v-if=\"$slots.trigger\" as-child><slot name=\"trigger\" /></PopoverTrigger>\n <PopoverPortal>\n <PopoverContent\n class=\"dt-pop\"\n :class=\"contentClass\"\n :align=\"align\"\n :side-offset=\"sideOffset ?? 4\"\n @focus-outside=\"(e) => emit('focusOutside', e)\"\n >\n <slot />\n </PopoverContent>\n </PopoverPortal>\n </PopoverRoot>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBA,IAAMuB,IAAOD,GACPE,IAAOvB,EAAoByB,GAAC,MAA0B;E,iBAIxCA,EAAA,SAAlBxB,EAAA,GAAAC,EAgBaC,EAAA0B,CAAA,GAAA;;GAhBoB,MAAMN,EAAA;GAAA,iBAAA,AAAAO,EAAA,QAAA,MAAA,EAAI,QAAAC;;GACzC,SAAA3B,QAAqF,CAAhEL,EAAAA,OAAO,WAA5BE,EAAA,GAAAC,EAAqFC,EAAA+B,CAAA,GAAA;;IAAhD,YAAA;;IAAS,SAAA9B,QAAuB,CAAvBC,EAAuB4B,EAAA,QAAA,SAAA,C;;G,iBACrE1B,EAaeJ,EAAAmC,CAAA,GAAA,MAAA;IAZb,SAAAlC,QAAkC,CAAlCG,EAAkCJ,EAAAoC,CAAA,GAAA,EAAnB,OAAM,WAAU,CAAA,GAC/BhC,EAUgBJ,EAAAqC,CAAA,GAAA;KAVD,OAAKhC,EAAA,CAAC,aAAoBiB,EAAA,YAAY,CAAA;KAAG,oBAAkB,KAAA;;KACxE,SAAArB,QAAoD;MAApD,AAAA0B,EAAA,OAAArB,EAAoD,QAAA;OAA9C,OAAM;OAAmB,eAAY;;MAC/BgB,EAAA,aAKZxB,EAAA,GAAAC,EAAgEC,EAAAwC,CAAA,GAAA;;OAA5C,OAAM;;OAAa,SAAAvC,QAAW,CAARO,EAAAC,EAAAa,EAAA,KAAK,GAAA,CAAA,C;;M,OAL/CxB,EAAA,GAAAS,EAIM,OAJNI,GAIM;OAHJT,EAA0B4B,EAAA,QAAA,YAAA;OAC1B1B,EAA8DJ,EAAAwC,CAAA,GAAA,EAAjD,OAAM,kBAAiB,GAAA;QAAC,SAAAvC,QAAW,CAARO,EAAAC,EAAAa,EAAA,KAAK,GAAA,CAAA,C;;;OAC7CpB,EAAwB4B,EAAA,QAAA,UAAA;;MAG1BxB,EAA0C,OAA1CM,GAA0C,CAAdV,EAAQ4B,EAAA,QAAA,SAAA,C;MACzBlC,EAAAA,OAAO,QAAlBE,EAAA,GAAAS,EAAyE,OAAzEM,GAAyE,CAA1BX,EAAoB4B,EAAA,QAAA,MAAA,C;;;;;;;E,oBAIzEhC,EAAA,GAAAC,EAacC,EAAA4C,CAAA,GAAA;;GAbc,MAAMxB,EAAA;GAAA,iBAAA,AAAAO,EAAA,QAAA,MAAA,EAAI,QAAAC;;GACpC,SAAA3B,QAAuF,CAAjEL,EAAAA,OAAO,WAA7BE,EAAA,GAAAC,EAAuFC,EAAA6C,CAAA,GAAA;;IAAjD,YAAA;;IAAS,SAAA5C,QAAuB,CAAvBC,EAAuB4B,EAAA,QAAA,SAAA,C;;G,iBACtE1B,EAUgBJ,EAAA8C,CAAA,GAAA,MAAA;IATd,SAAA7C,QAQiB,CARjBG,EAQiBJ,EAAA+C,CAAA,GAAA;KAPf,OAAK1C,EAAA,CAAC,UACEiB,EAAA,YAAY,CAAA;KACnB,OAAOA,EAAA;KACP,eAAaA,EAAA,cAAU;KACvB,gBAAa,AAAAK,EAAA,QAAG,MAAMR,EAAI,gBAAiB,CAAC;;KAE7C,SAAAlB,QAAQ,CAARC,EAAQ4B,EAAA,QAAA,SAAA,C"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { W as e } from "./query-CGNWUi2E.js";
|
|
2
|
+
import { t } from "./Layer-Di-tPd8b.js";
|
|
3
|
+
import { Fragment as n, computed as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createSlots as c, createTextVNode as l, createVNode as u, defineAsyncComponent as d, defineComponent as f, openBlock as p, ref as m, renderList as h, resolveDynamicComponent as g, toDisplayString as _, unref as v, watch as y, withCtx as b } from "vue";
|
|
4
|
+
import { PhArrowDown as x, PhArrowUp as S, PhCaretLeft as C, PhCaretRight as w, PhCheck as T, PhDotsThree as E, PhX as D } from "@phosphor-icons/vue";
|
|
5
|
+
import { SwitchRoot as O, SwitchThumb as k } from "reka-ui";
|
|
6
|
+
//#region src/core/toolbar/SortPanel.vue?vue&type=script&setup=true&lang.ts
|
|
7
|
+
var A = { class: "dt-head-sort-index" }, j = { class: "dt-col-name" }, M = ["onClick"], N = ["aria-label", "onClick"], P = { class: "dt-pop-foot" }, F = ["disabled"], I = /* @__PURE__ */ f({
|
|
8
|
+
__name: "SortPanel",
|
|
9
|
+
props: {
|
|
10
|
+
sort: {},
|
|
11
|
+
headerOf: { type: Function }
|
|
12
|
+
},
|
|
13
|
+
emits: [
|
|
14
|
+
"sort-dir",
|
|
15
|
+
"sort-remove",
|
|
16
|
+
"sort-clear"
|
|
17
|
+
],
|
|
18
|
+
setup(t, { emit: r }) {
|
|
19
|
+
let a = r, { i18n: c } = e();
|
|
20
|
+
return (e, r) => (p(), o(n, null, [(p(!0), o(n, null, h(t.sort, (e, n) => (p(), o("div", {
|
|
21
|
+
key: e.column,
|
|
22
|
+
class: "dt-col-row dt-sort-row"
|
|
23
|
+
}, [
|
|
24
|
+
s("span", A, _(n + 1), 1),
|
|
25
|
+
s("span", j, _(t.headerOf(e.column)), 1),
|
|
26
|
+
s("button", {
|
|
27
|
+
type: "button",
|
|
28
|
+
class: "dt-btn dt-btn-xs has-icon",
|
|
29
|
+
onClick: (t) => a("sort-dir", e.column, e.dir === "asc" ? "desc" : "asc")
|
|
30
|
+
}, [(p(), i(g(e.dir === "asc" ? v(S) : v(x)), {
|
|
31
|
+
size: 12,
|
|
32
|
+
"aria-hidden": "true"
|
|
33
|
+
})), l(" " + _(v(c).t(e.dir === "asc" ? "sr.asc" : "sr.desc")), 1)], 8, M),
|
|
34
|
+
s("button", {
|
|
35
|
+
type: "button",
|
|
36
|
+
class: "dt-icon-btn-sm",
|
|
37
|
+
"aria-label": v(c).t("header.clearSort"),
|
|
38
|
+
onClick: (t) => a("sort-remove", e.column)
|
|
39
|
+
}, [u(v(D), {
|
|
40
|
+
size: 14,
|
|
41
|
+
"aria-hidden": "true"
|
|
42
|
+
})], 8, N)
|
|
43
|
+
]))), 128)), s("div", P, [s("span", null, _(v(c).t("sort.addHint")), 1), s("button", {
|
|
44
|
+
type: "button",
|
|
45
|
+
class: "dt-pop-action",
|
|
46
|
+
disabled: !t.sort.length,
|
|
47
|
+
onClick: r[0] ||= (e) => a("sort-clear")
|
|
48
|
+
}, _(v(c).t("header.clearSort")), 9, F)])], 64));
|
|
49
|
+
}
|
|
50
|
+
}), L = ["aria-label"], R = ["aria-label"], z = { class: "dt-bsheet-label" }, B = { class: "dt-bsheet-value" }, V = { class: "dt-bsheet-value" }, H = { class: "dt-bsheet-value" }, U = {
|
|
51
|
+
key: 0,
|
|
52
|
+
class: "dt-bsheet-sep"
|
|
53
|
+
}, W = {
|
|
54
|
+
key: 5,
|
|
55
|
+
class: "dt-bsheet-row"
|
|
56
|
+
}, G = { class: "dt-bsheet-note" }, K = ["onClick"], q = /* @__PURE__ */ f({
|
|
57
|
+
__name: "PhoneMoreSheet",
|
|
58
|
+
props: {
|
|
59
|
+
density: {},
|
|
60
|
+
columns: {},
|
|
61
|
+
counts: {},
|
|
62
|
+
sort: {},
|
|
63
|
+
persistent: { type: Boolean },
|
|
64
|
+
refresh: { type: Boolean },
|
|
65
|
+
export: { type: [String, Boolean] },
|
|
66
|
+
import: { type: Boolean },
|
|
67
|
+
print: { type: Boolean },
|
|
68
|
+
autoRefresh: { type: Boolean },
|
|
69
|
+
autoRefreshOn: { type: Boolean }
|
|
70
|
+
},
|
|
71
|
+
emits: [
|
|
72
|
+
"update:density",
|
|
73
|
+
"columns-save",
|
|
74
|
+
"sort-dir",
|
|
75
|
+
"sort-remove",
|
|
76
|
+
"sort-clear",
|
|
77
|
+
"reset",
|
|
78
|
+
"refresh",
|
|
79
|
+
"export",
|
|
80
|
+
"import",
|
|
81
|
+
"print",
|
|
82
|
+
"update:autoRefreshOn"
|
|
83
|
+
],
|
|
84
|
+
setup(f, { emit: g }) {
|
|
85
|
+
let x = d(() => import("./ColumnsDialog-dngip-aF.js")), S = m(!1), D = f, A = g, { i18n: j } = e(), M = m(!1), N = m("main"), P = m(!1), F = m(null), q = (e) => {
|
|
86
|
+
e.preventDefault(), F.value?.focus();
|
|
87
|
+
};
|
|
88
|
+
y(M, (e) => {
|
|
89
|
+
e || (N.value = "main");
|
|
90
|
+
});
|
|
91
|
+
let J = [
|
|
92
|
+
"comfortable",
|
|
93
|
+
"standard",
|
|
94
|
+
"compact"
|
|
95
|
+
], Y = {
|
|
96
|
+
main: "toolbar.more",
|
|
97
|
+
density: "display.density",
|
|
98
|
+
sort: "display.sort",
|
|
99
|
+
export: "sheet.export"
|
|
100
|
+
}, X = (e) => D.columns.find((t) => t.id === e)?.def.header ?? e, Z = r(() => {
|
|
101
|
+
let e = D.sort[0];
|
|
102
|
+
if (!e) return j.t("common.empty");
|
|
103
|
+
let t = D.sort.length > 1 ? ` +${D.sort.length - 1}` : "";
|
|
104
|
+
return `${X(e.column)} ${e.dir === "asc" ? "↑" : "↓"}${t}`;
|
|
105
|
+
}), Q = r(() => D.export || D.import || D.print || D.refresh || D.autoRefresh), $ = (e) => {
|
|
106
|
+
M.value = !1, e();
|
|
107
|
+
}, ee = (e) => {
|
|
108
|
+
A("update:density", e), N.value = "main";
|
|
109
|
+
};
|
|
110
|
+
return (e, r) => (p(), o(n, null, [u(t, {
|
|
111
|
+
open: M.value,
|
|
112
|
+
"onUpdate:open": r[15] ||= (e) => M.value = e,
|
|
113
|
+
sheet: "",
|
|
114
|
+
"content-class": "dt-more-sheet",
|
|
115
|
+
title: v(j).t(Y[N.value]),
|
|
116
|
+
"hide-title": N.value === "main"
|
|
117
|
+
}, c({
|
|
118
|
+
trigger: b(() => [s("button", {
|
|
119
|
+
ref_key: "trigger",
|
|
120
|
+
ref: F,
|
|
121
|
+
type: "button",
|
|
122
|
+
class: "dt-btn dt-btn-icon dt-more-trigger",
|
|
123
|
+
"aria-label": v(j).t("toolbar.more")
|
|
124
|
+
}, [u(v(E), {
|
|
125
|
+
size: 20,
|
|
126
|
+
weight: "bold",
|
|
127
|
+
"aria-hidden": "true"
|
|
128
|
+
})], 8, L)]),
|
|
129
|
+
default: b(() => [N.value === "main" ? (p(), o(n, { key: 0 }, [
|
|
130
|
+
s("div", z, _(v(j).t("toolbar.display")), 1),
|
|
131
|
+
s("button", {
|
|
132
|
+
type: "button",
|
|
133
|
+
class: "dt-bsheet-row",
|
|
134
|
+
onClick: r[1] ||= (e) => N.value = "density"
|
|
135
|
+
}, [
|
|
136
|
+
l(_(v(j).t("display.density")) + " ", 1),
|
|
137
|
+
s("span", B, _(v(j).t(`display.${f.density}`)), 1),
|
|
138
|
+
u(v(w), {
|
|
139
|
+
size: 16,
|
|
140
|
+
"aria-hidden": "true"
|
|
141
|
+
})
|
|
142
|
+
]),
|
|
143
|
+
s("button", {
|
|
144
|
+
type: "button",
|
|
145
|
+
class: "dt-bsheet-row",
|
|
146
|
+
onClick: r[2] ||= (e) => $(() => S.value = P.value = !0)
|
|
147
|
+
}, [
|
|
148
|
+
l(_(v(j).t("display.columns")) + " ", 1),
|
|
149
|
+
s("span", V, _(v(j).t("columns.shownOf", f.counts)), 1),
|
|
150
|
+
u(v(w), {
|
|
151
|
+
size: 16,
|
|
152
|
+
"aria-hidden": "true"
|
|
153
|
+
})
|
|
154
|
+
]),
|
|
155
|
+
s("button", {
|
|
156
|
+
type: "button",
|
|
157
|
+
class: "dt-bsheet-row",
|
|
158
|
+
onClick: r[3] ||= (e) => N.value = "sort"
|
|
159
|
+
}, [
|
|
160
|
+
l(_(v(j).t("display.sort")) + " ", 1),
|
|
161
|
+
s("span", H, _(Z.value), 1),
|
|
162
|
+
u(v(w), {
|
|
163
|
+
size: 16,
|
|
164
|
+
"aria-hidden": "true"
|
|
165
|
+
})
|
|
166
|
+
]),
|
|
167
|
+
Q.value ? (p(), o("div", U)) : a("", !0),
|
|
168
|
+
e.$props.export ? (p(), o("button", {
|
|
169
|
+
key: 1,
|
|
170
|
+
type: "button",
|
|
171
|
+
class: "dt-bsheet-row",
|
|
172
|
+
onClick: r[4] ||= (e) => N.value = "export"
|
|
173
|
+
}, [l(_(e.$props.export) + " ", 1), u(v(w), {
|
|
174
|
+
size: 16,
|
|
175
|
+
class: "dt-bsheet-end",
|
|
176
|
+
"aria-hidden": "true"
|
|
177
|
+
})])) : a("", !0),
|
|
178
|
+
e.$props.import ? (p(), o("button", {
|
|
179
|
+
key: 2,
|
|
180
|
+
type: "button",
|
|
181
|
+
class: "dt-bsheet-row",
|
|
182
|
+
onClick: r[5] ||= (e) => $(() => A("import"))
|
|
183
|
+
}, _(v(j).t("toolbar.import")), 1)) : a("", !0),
|
|
184
|
+
f.print ? (p(), o("button", {
|
|
185
|
+
key: 3,
|
|
186
|
+
type: "button",
|
|
187
|
+
class: "dt-bsheet-row",
|
|
188
|
+
onClick: r[6] ||= (e) => $(() => A("print"))
|
|
189
|
+
}, _(v(j).t("toolbar.print")), 1)) : a("", !0),
|
|
190
|
+
f.refresh ? (p(), o("button", {
|
|
191
|
+
key: 4,
|
|
192
|
+
type: "button",
|
|
193
|
+
class: "dt-bsheet-row",
|
|
194
|
+
onClick: r[7] ||= (e) => $(() => A("refresh"))
|
|
195
|
+
}, _(v(j).t("toolbar.refresh")), 1)) : a("", !0),
|
|
196
|
+
f.autoRefresh ? (p(), o("label", W, [l(_(v(j).t("toolbar.autoRefresh")) + " ", 1), u(v(O), {
|
|
197
|
+
class: "dt-switch dt-bsheet-end",
|
|
198
|
+
"model-value": f.autoRefreshOn,
|
|
199
|
+
"onUpdate:modelValue": r[8] ||= (e) => A("update:autoRefreshOn", e)
|
|
200
|
+
}, {
|
|
201
|
+
default: b(() => [u(v(k), { class: "dt-switch-thumb" })]),
|
|
202
|
+
_: 1
|
|
203
|
+
}, 8, ["model-value"])])) : a("", !0),
|
|
204
|
+
s("div", G, [s("span", null, _(f.persistent ? v(j).t("display.savedForYou") : ""), 1), s("button", {
|
|
205
|
+
type: "button",
|
|
206
|
+
class: "dt-bsheet-action",
|
|
207
|
+
onClick: r[9] ||= (e) => A("reset")
|
|
208
|
+
}, _(v(j).t("common.reset")), 1)])
|
|
209
|
+
], 64)) : N.value === "density" ? (p(), o(n, { key: 1 }, h(J, (e) => s("button", {
|
|
210
|
+
key: e,
|
|
211
|
+
type: "button",
|
|
212
|
+
class: "dt-bsheet-row",
|
|
213
|
+
onClick: (t) => ee(e)
|
|
214
|
+
}, [l(_(v(j).t(`display.${e}`)) + " ", 1), e === f.density ? (p(), i(v(T), {
|
|
215
|
+
key: 0,
|
|
216
|
+
size: 18,
|
|
217
|
+
class: "dt-bsheet-end dt-bsheet-check",
|
|
218
|
+
"aria-hidden": "true"
|
|
219
|
+
})) : a("", !0)], 8, K)), 64)) : N.value === "sort" ? (p(), i(I, {
|
|
220
|
+
key: 2,
|
|
221
|
+
sort: f.sort,
|
|
222
|
+
"header-of": X,
|
|
223
|
+
onSortDir: r[10] ||= (e, t) => A("sort-dir", e, t),
|
|
224
|
+
onSortRemove: r[11] ||= (e) => A("sort-remove", e),
|
|
225
|
+
onSortClear: r[12] ||= (e) => A("sort-clear")
|
|
226
|
+
}, null, 8, ["sort"])) : (p(), o(n, { key: 3 }, [s("button", {
|
|
227
|
+
type: "button",
|
|
228
|
+
class: "dt-bsheet-row",
|
|
229
|
+
onClick: r[13] ||= (e) => $(() => A("export", "csv"))
|
|
230
|
+
}, _(v(j).t("toolbar.csv")), 1), s("button", {
|
|
231
|
+
type: "button",
|
|
232
|
+
class: "dt-bsheet-row",
|
|
233
|
+
onClick: r[14] ||= (e) => $(() => A("export", "xlsx"))
|
|
234
|
+
}, _(v(j).t("toolbar.xlsx")), 1)], 64))]),
|
|
235
|
+
_: 2
|
|
236
|
+
}, [N.value === "main" ? void 0 : {
|
|
237
|
+
name: "head-start",
|
|
238
|
+
fn: b(() => [s("button", {
|
|
239
|
+
type: "button",
|
|
240
|
+
class: "dt-bsheet-back",
|
|
241
|
+
"aria-label": v(j).t("common.back"),
|
|
242
|
+
onClick: r[0] ||= (e) => N.value = "main"
|
|
243
|
+
}, [u(v(C), {
|
|
244
|
+
size: 20,
|
|
245
|
+
"aria-hidden": "true"
|
|
246
|
+
})], 8, R)]),
|
|
247
|
+
key: "0"
|
|
248
|
+
}]), 1032, [
|
|
249
|
+
"open",
|
|
250
|
+
"title",
|
|
251
|
+
"hide-title"
|
|
252
|
+
]), S.value ? (p(), i(v(x), {
|
|
253
|
+
key: 0,
|
|
254
|
+
open: P.value,
|
|
255
|
+
"onUpdate:open": r[16] ||= (e) => P.value = e,
|
|
256
|
+
phone: "",
|
|
257
|
+
columns: f.columns,
|
|
258
|
+
onSave: r[17] ||= (e) => A("columns-save", e),
|
|
259
|
+
onCloseAutoFocus: q
|
|
260
|
+
}, null, 8, ["open", "columns"])) : a("", !0)], 64));
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
//#endregion
|
|
264
|
+
export { q as default };
|
|
265
|
+
|
|
266
|
+
//# sourceMappingURL=PhoneMoreSheet-66OdIZrl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhoneMoreSheet-66OdIZrl.js","names":["_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_openBlock","_createElementBlock","_Fragment","_renderList","_createElementVNode","_toDisplayString","_createBlock","_resolveDynamicComponent","_unref","_createTextVNode","_createVNode","_sfc_main","$props","_openBlock","_createElementBlock","_Fragment","_createVNode","Layer","_unref","_createSlots","_withCtx","_createElementVNode","_toDisplayString","_createTextVNode","_createCommentVNode","_renderList","_createBlock","SortPanel","_sfc_main","useDataTableContext","_hoisted_1$1","_hoisted_2$1","_hoisted_3$1","_hoisted_4$1","_hoisted_5$1","_hoisted_6$1","SortPanel_default","defineComponent","__emit","emit","openBlock","createElementBlock","Fragment","renderList","__props","s","createElementVNode","toDisplayString","i","createBlock","resolveDynamicComponent","unref","PhArrowUp","PhArrowDown","createTextVNode","i18n","createVNode","PhX","_cache","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","PhoneMoreSheet_default","ColumnsDialog","defineAsyncComponent","columnsUsed","ref","props","open","level","columnsOpen","trigger","focusTrigger","o","DENSITIES","TITLES","headerOf","c","id","sortSummary","computed","first","more","hasActions","close","fn","setDensity","d","Layer_default","$event","createSlots","withCtx","PhDotsThree","PhCaretRight","createCommentVNode","_ctx","SwitchRoot","v","SwitchThumb","PhCheck","PhCaretLeft"],"sources":["../src/core/toolbar/SortPanel.vue","../src/core/toolbar/SortPanel.vue","../src/core/toolbar/PhoneMoreSheet.vue","../src/core/toolbar/PhoneMoreSheet.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// Sort paneli (04 §6; Display › Sort ve telefon ⋯ sayfası): sıra numarası · sütun · yön · kaldır; altta ipucu + Clear sort.\nimport { PhArrowDown, PhArrowUp, PhX } from '@phosphor-icons/vue'\nimport type { SortRule } from '../../types/query'\nimport { useDataTableContext } from '../plugin'\n\ndefineProps<{ sort: SortRule[]; headerOf: (id: string) => string }>()\nconst emit = defineEmits<{\n 'sort-dir': [column: string, dir: 'asc' | 'desc']\n 'sort-remove': [column: string]\n 'sort-clear': []\n}>()\nconst { i18n } = useDataTableContext()\n</script>\n\n<template>\n <div v-for=\"(s, i) in sort\" :key=\"s.column\" class=\"dt-col-row dt-sort-row\">\n <span class=\"dt-head-sort-index\">{{ i + 1 }}</span>\n <span class=\"dt-col-name\">{{ headerOf(s.column) }}</span>\n <button\n type=\"button\"\n class=\"dt-btn dt-btn-xs has-icon\"\n @click=\"emit('sort-dir', s.column, s.dir === 'asc' ? 'desc' : 'asc')\"\n >\n <component :is=\"s.dir === 'asc' ? PhArrowUp : PhArrowDown\" :size=\"12\" aria-hidden=\"true\" />\n {{ i18n.t(s.dir === 'asc' ? 'sr.asc' : 'sr.desc') }}\n </button>\n <button\n type=\"button\"\n class=\"dt-icon-btn-sm\"\n :aria-label=\"i18n.t('header.clearSort')\"\n @click=\"emit('sort-remove', s.column)\"\n >\n <PhX :size=\"14\" aria-hidden=\"true\" />\n </button>\n </div>\n <div class=\"dt-pop-foot\">\n <span>{{ i18n.t('sort.addHint') }}</span>\n <button type=\"button\" class=\"dt-pop-action\" :disabled=\"!sort.length\" @click=\"emit('sort-clear')\">\n {{ i18n.t('header.clearSort') }}\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\n// Sort paneli (04 §6; Display › Sort ve telefon ⋯ sayfası): sıra numarası · sütun · yön · kaldır; altta ipucu + Clear sort.\nimport { PhArrowDown, PhArrowUp, PhX } from '@phosphor-icons/vue'\nimport type { SortRule } from '../../types/query'\nimport { useDataTableContext } from '../plugin'\n\ndefineProps<{ sort: SortRule[]; headerOf: (id: string) => string }>()\nconst emit = defineEmits<{\n 'sort-dir': [column: string, dir: 'asc' | 'desc']\n 'sort-remove': [column: string]\n 'sort-clear': []\n}>()\nconst { i18n } = useDataTableContext()\n</script>\n\n<template>\n <div v-for=\"(s, i) in sort\" :key=\"s.column\" class=\"dt-col-row dt-sort-row\">\n <span class=\"dt-head-sort-index\">{{ i + 1 }}</span>\n <span class=\"dt-col-name\">{{ headerOf(s.column) }}</span>\n <button\n type=\"button\"\n class=\"dt-btn dt-btn-xs has-icon\"\n @click=\"emit('sort-dir', s.column, s.dir === 'asc' ? 'desc' : 'asc')\"\n >\n <component :is=\"s.dir === 'asc' ? PhArrowUp : PhArrowDown\" :size=\"12\" aria-hidden=\"true\" />\n {{ i18n.t(s.dir === 'asc' ? 'sr.asc' : 'sr.desc') }}\n </button>\n <button\n type=\"button\"\n class=\"dt-icon-btn-sm\"\n :aria-label=\"i18n.t('header.clearSort')\"\n @click=\"emit('sort-remove', s.column)\"\n >\n <PhX :size=\"14\" aria-hidden=\"true\" />\n </button>\n </div>\n <div class=\"dt-pop-foot\">\n <span>{{ i18n.t('sort.addHint') }}</span>\n <button type=\"button\" class=\"dt-pop-action\" :disabled=\"!sort.length\" @click=\"emit('sort-clear')\">\n {{ i18n.t('header.clearSort') }}\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\n// Telefon ⋯ alt sayfası (handoff 04 §6.4, T13-07): Display (Density › · Columns (dialog, D45) · Sort ›) · Export matching rows › · Import ·\n// Print · Refresh · Auto-refresh · \"Saved for you only\" + Reset. Masaüstündeki Display popover'ı ve ⋯ menüsünün yerini alır.\nimport { PhCaretLeft, PhCaretRight, PhCheck, PhDotsThree } from '@phosphor-icons/vue'\nimport { SwitchRoot, SwitchThumb } from 'reka-ui'\nimport { computed, defineAsyncComponent, ref, watch } from 'vue'\nimport type { Density } from '../../types/core'\nimport type { SortRule } from '../../types/query'\nimport { useDataTableContext } from '../plugin'\nimport Layer from '../ui/Layer.vue'\nimport type { ColumnsDraft, PanelColumn } from './ColumnsDialog.vue'\nimport SortPanel from './SortPanel.vue'\n\n// Dialog ve @dnd-kit yalnızca Columns ilk açılışta yüklenir; sonra bağlı kalır (odak dönüşü).\nconst ColumnsDialog = defineAsyncComponent(() => import('./ColumnsDialog.vue'))\nconst columnsUsed = ref(false)\n\nconst props = defineProps<{\n density: Density\n columns: PanelColumn[]\n counts: { shown: number; total: number }\n sort: SortRule[]\n persistent: boolean\n refresh: boolean\n /** Export menü etiketi (\"Export 100 rows\" / \"Export 3 selected rows\"); false → yok. */\n export: string | false\n import: boolean\n print: boolean\n autoRefresh: boolean\n autoRefreshOn: boolean\n}>()\nconst emit = defineEmits<{\n 'update:density': [density: Density]\n 'columns-save': [draft: ColumnsDraft]\n 'sort-dir': [column: string, dir: 'asc' | 'desc']\n 'sort-remove': [column: string]\n 'sort-clear': []\n reset: []\n refresh: []\n export: [format: 'csv' | 'xlsx']\n import: []\n print: []\n 'update:autoRefreshOn': [on: boolean]\n}>()\nconst { i18n } = useDataTableContext()\nconst open = ref(false)\nconst level = ref<'main' | 'density' | 'sort' | 'export'>('main')\nconst columnsOpen = ref(false)\nconst trigger = ref<HTMLButtonElement | null>(null)\nconst focusTrigger = (e: Event) => {\n e.preventDefault()\n trigger.value?.focus()\n}\nwatch(open, (o) => {\n if (!o) level.value = 'main'\n})\nconst DENSITIES: Density[] = ['comfortable', 'standard', 'compact']\nconst TITLES = {\n main: 'toolbar.more',\n density: 'display.density',\n sort: 'display.sort',\n export: 'sheet.export',\n} as const\nconst headerOf = (id: string) => props.columns.find((c) => c.id === id)?.def.header ?? id\nconst sortSummary = computed(() => {\n const first = props.sort[0]\n if (!first) return i18n.t('common.empty')\n const more = props.sort.length > 1 ? ` +${props.sort.length - 1}` : ''\n return `${headerOf(first.column)} ${first.dir === 'asc' ? '↑' : '↓'}${more}`\n})\nconst hasActions = computed(() => props.export || props.import || props.print || props.refresh || props.autoRefresh)\nconst close = (fn: () => void) => {\n open.value = false\n fn()\n}\nconst setDensity = (d: Density) => {\n emit('update:density', d)\n level.value = 'main'\n}\n</script>\n\n<template>\n <Layer\n v-model:open=\"open\"\n sheet\n content-class=\"dt-more-sheet\"\n :title=\"i18n.t(TITLES[level])\"\n :hide-title=\"level === 'main'\"\n >\n <template #trigger>\n <button ref=\"trigger\" type=\"button\" class=\"dt-btn dt-btn-icon dt-more-trigger\" :aria-label=\"i18n.t('toolbar.more')\">\n <PhDotsThree :size=\"20\" weight=\"bold\" aria-hidden=\"true\" />\n </button>\n </template>\n <template v-if=\"level !== 'main'\" #head-start>\n <button type=\"button\" class=\"dt-bsheet-back\" :aria-label=\"i18n.t('common.back')\" @click=\"level = 'main'\">\n <PhCaretLeft :size=\"20\" aria-hidden=\"true\" />\n </button>\n </template>\n\n <template v-if=\"level === 'main'\">\n <div class=\"dt-bsheet-label\">{{ i18n.t('toolbar.display') }}</div>\n <button type=\"button\" class=\"dt-bsheet-row\" @click=\"level = 'density'\">\n {{ i18n.t('display.density') }}\n <span class=\"dt-bsheet-value\">{{ i18n.t(`display.${density}`) }}</span>\n <PhCaretRight :size=\"16\" aria-hidden=\"true\" />\n </button>\n <button type=\"button\" class=\"dt-bsheet-row\" @click=\"close(() => (columnsUsed = columnsOpen = true))\">\n {{ i18n.t('display.columns') }}\n <span class=\"dt-bsheet-value\">{{ i18n.t('columns.shownOf', counts) }}</span>\n <PhCaretRight :size=\"16\" aria-hidden=\"true\" />\n </button>\n <button type=\"button\" class=\"dt-bsheet-row\" @click=\"level = 'sort'\">\n {{ i18n.t('display.sort') }}\n <span class=\"dt-bsheet-value\">{{ sortSummary }}</span>\n <PhCaretRight :size=\"16\" aria-hidden=\"true\" />\n </button>\n <div v-if=\"hasActions\" class=\"dt-bsheet-sep\" />\n <button v-if=\"$props.export\" type=\"button\" class=\"dt-bsheet-row\" @click=\"level = 'export'\">\n {{ $props.export }}\n <PhCaretRight :size=\"16\" class=\"dt-bsheet-end\" aria-hidden=\"true\" />\n </button>\n <button v-if=\"$props.import\" type=\"button\" class=\"dt-bsheet-row\" @click=\"close(() => emit('import'))\">\n {{ i18n.t('toolbar.import') }}\n </button>\n <button v-if=\"print\" type=\"button\" class=\"dt-bsheet-row\" @click=\"close(() => emit('print'))\">\n {{ i18n.t('toolbar.print') }}\n </button>\n <button v-if=\"refresh\" type=\"button\" class=\"dt-bsheet-row\" @click=\"close(() => emit('refresh'))\">\n {{ i18n.t('toolbar.refresh') }}\n </button>\n <label v-if=\"autoRefresh\" class=\"dt-bsheet-row\">\n {{ i18n.t('toolbar.autoRefresh') }}\n <SwitchRoot\n class=\"dt-switch dt-bsheet-end\"\n :model-value=\"autoRefreshOn\"\n @update:model-value=\"(v) => emit('update:autoRefreshOn', v)\"\n >\n <SwitchThumb class=\"dt-switch-thumb\" />\n </SwitchRoot>\n </label>\n <div class=\"dt-bsheet-note\">\n <span>{{ persistent ? i18n.t('display.savedForYou') : '' }}</span>\n <button type=\"button\" class=\"dt-bsheet-action\" @click=\"emit('reset')\">{{ i18n.t('common.reset') }}</button>\n </div>\n </template>\n\n <template v-else-if=\"level === 'density'\">\n <button v-for=\"d in DENSITIES\" :key=\"d\" type=\"button\" class=\"dt-bsheet-row\" @click=\"setDensity(d)\">\n {{ i18n.t(`display.${d}`) }}\n <PhCheck v-if=\"d === density\" :size=\"18\" class=\"dt-bsheet-end dt-bsheet-check\" aria-hidden=\"true\" />\n </button>\n </template>\n\n <SortPanel\n v-else-if=\"level === 'sort'\"\n :sort=\"sort\"\n :header-of=\"headerOf\"\n @sort-dir=\"(c, d) => emit('sort-dir', c, d)\"\n @sort-remove=\"(c) => emit('sort-remove', c)\"\n @sort-clear=\"emit('sort-clear')\"\n />\n\n <template v-else>\n <button type=\"button\" class=\"dt-bsheet-row\" @click=\"close(() => emit('export', 'csv'))\">\n {{ i18n.t('toolbar.csv') }}\n </button>\n <button type=\"button\" class=\"dt-bsheet-row\" @click=\"close(() => emit('export', 'xlsx'))\">\n {{ i18n.t('toolbar.xlsx') }}\n </button>\n </template>\n </Layer>\n <ColumnsDialog\n v-if=\"columnsUsed\"\n v-model:open=\"columnsOpen\"\n phone\n :columns=\"columns\"\n @save=\"(d) => emit('columns-save', d)\"\n @close-auto-focus=\"focusTrigger\"\n />\n</template>\n","<script setup lang=\"ts\">\n// Telefon ⋯ alt sayfası (handoff 04 §6.4, T13-07): Display (Density › · Columns (dialog, D45) · Sort ›) · Export matching rows › · Import ·\n// Print · Refresh · Auto-refresh · \"Saved for you only\" + Reset. Masaüstündeki Display popover'ı ve ⋯ menüsünün yerini alır.\nimport { PhCaretLeft, PhCaretRight, PhCheck, PhDotsThree } from '@phosphor-icons/vue'\nimport { SwitchRoot, SwitchThumb } from 'reka-ui'\nimport { computed, defineAsyncComponent, ref, watch } from 'vue'\nimport type { Density } from '../../types/core'\nimport type { SortRule } from '../../types/query'\nimport { useDataTableContext } from '../plugin'\nimport Layer from '../ui/Layer.vue'\nimport type { ColumnsDraft, PanelColumn } from './ColumnsDialog.vue'\nimport SortPanel from './SortPanel.vue'\n\n// Dialog ve @dnd-kit yalnızca Columns ilk açılışta yüklenir; sonra bağlı kalır (odak dönüşü).\nconst ColumnsDialog = defineAsyncComponent(() => import('./ColumnsDialog.vue'))\nconst columnsUsed = ref(false)\n\nconst props = defineProps<{\n density: Density\n columns: PanelColumn[]\n counts: { shown: number; total: number }\n sort: SortRule[]\n persistent: boolean\n refresh: boolean\n /** Export menü etiketi (\"Export 100 rows\" / \"Export 3 selected rows\"); false → yok. */\n export: string | false\n import: boolean\n print: boolean\n autoRefresh: boolean\n autoRefreshOn: boolean\n}>()\nconst emit = defineEmits<{\n 'update:density': [density: Density]\n 'columns-save': [draft: ColumnsDraft]\n 'sort-dir': [column: string, dir: 'asc' | 'desc']\n 'sort-remove': [column: string]\n 'sort-clear': []\n reset: []\n refresh: []\n export: [format: 'csv' | 'xlsx']\n import: []\n print: []\n 'update:autoRefreshOn': [on: boolean]\n}>()\nconst { i18n } = useDataTableContext()\nconst open = ref(false)\nconst level = ref<'main' | 'density' | 'sort' | 'export'>('main')\nconst columnsOpen = ref(false)\nconst trigger = ref<HTMLButtonElement | null>(null)\nconst focusTrigger = (e: Event) => {\n e.preventDefault()\n trigger.value?.focus()\n}\nwatch(open, (o) => {\n if (!o) level.value = 'main'\n})\nconst DENSITIES: Density[] = ['comfortable', 'standard', 'compact']\nconst TITLES = {\n main: 'toolbar.more',\n density: 'display.density',\n sort: 'display.sort',\n export: 'sheet.export',\n} as const\nconst headerOf = (id: string) => props.columns.find((c) => c.id === id)?.def.header ?? id\nconst sortSummary = computed(() => {\n const first = props.sort[0]\n if (!first) return i18n.t('common.empty')\n const more = props.sort.length > 1 ? ` +${props.sort.length - 1}` : ''\n return `${headerOf(first.column)} ${first.dir === 'asc' ? '↑' : '↓'}${more}`\n})\nconst hasActions = computed(() => props.export || props.import || props.print || props.refresh || props.autoRefresh)\nconst close = (fn: () => void) => {\n open.value = false\n fn()\n}\nconst setDensity = (d: Density) => {\n emit('update:density', d)\n level.value = 'main'\n}\n</script>\n\n<template>\n <Layer\n v-model:open=\"open\"\n sheet\n content-class=\"dt-more-sheet\"\n :title=\"i18n.t(TITLES[level])\"\n :hide-title=\"level === 'main'\"\n >\n <template #trigger>\n <button ref=\"trigger\" type=\"button\" class=\"dt-btn dt-btn-icon dt-more-trigger\" :aria-label=\"i18n.t('toolbar.more')\">\n <PhDotsThree :size=\"20\" weight=\"bold\" aria-hidden=\"true\" />\n </button>\n </template>\n <template v-if=\"level !== 'main'\" #head-start>\n <button type=\"button\" class=\"dt-bsheet-back\" :aria-label=\"i18n.t('common.back')\" @click=\"level = 'main'\">\n <PhCaretLeft :size=\"20\" aria-hidden=\"true\" />\n </button>\n </template>\n\n <template v-if=\"level === 'main'\">\n <div class=\"dt-bsheet-label\">{{ i18n.t('toolbar.display') }}</div>\n <button type=\"button\" class=\"dt-bsheet-row\" @click=\"level = 'density'\">\n {{ i18n.t('display.density') }}\n <span class=\"dt-bsheet-value\">{{ i18n.t(`display.${density}`) }}</span>\n <PhCaretRight :size=\"16\" aria-hidden=\"true\" />\n </button>\n <button type=\"button\" class=\"dt-bsheet-row\" @click=\"close(() => (columnsUsed = columnsOpen = true))\">\n {{ i18n.t('display.columns') }}\n <span class=\"dt-bsheet-value\">{{ i18n.t('columns.shownOf', counts) }}</span>\n <PhCaretRight :size=\"16\" aria-hidden=\"true\" />\n </button>\n <button type=\"button\" class=\"dt-bsheet-row\" @click=\"level = 'sort'\">\n {{ i18n.t('display.sort') }}\n <span class=\"dt-bsheet-value\">{{ sortSummary }}</span>\n <PhCaretRight :size=\"16\" aria-hidden=\"true\" />\n </button>\n <div v-if=\"hasActions\" class=\"dt-bsheet-sep\" />\n <button v-if=\"$props.export\" type=\"button\" class=\"dt-bsheet-row\" @click=\"level = 'export'\">\n {{ $props.export }}\n <PhCaretRight :size=\"16\" class=\"dt-bsheet-end\" aria-hidden=\"true\" />\n </button>\n <button v-if=\"$props.import\" type=\"button\" class=\"dt-bsheet-row\" @click=\"close(() => emit('import'))\">\n {{ i18n.t('toolbar.import') }}\n </button>\n <button v-if=\"print\" type=\"button\" class=\"dt-bsheet-row\" @click=\"close(() => emit('print'))\">\n {{ i18n.t('toolbar.print') }}\n </button>\n <button v-if=\"refresh\" type=\"button\" class=\"dt-bsheet-row\" @click=\"close(() => emit('refresh'))\">\n {{ i18n.t('toolbar.refresh') }}\n </button>\n <label v-if=\"autoRefresh\" class=\"dt-bsheet-row\">\n {{ i18n.t('toolbar.autoRefresh') }}\n <SwitchRoot\n class=\"dt-switch dt-bsheet-end\"\n :model-value=\"autoRefreshOn\"\n @update:model-value=\"(v) => emit('update:autoRefreshOn', v)\"\n >\n <SwitchThumb class=\"dt-switch-thumb\" />\n </SwitchRoot>\n </label>\n <div class=\"dt-bsheet-note\">\n <span>{{ persistent ? i18n.t('display.savedForYou') : '' }}</span>\n <button type=\"button\" class=\"dt-bsheet-action\" @click=\"emit('reset')\">{{ i18n.t('common.reset') }}</button>\n </div>\n </template>\n\n <template v-else-if=\"level === 'density'\">\n <button v-for=\"d in DENSITIES\" :key=\"d\" type=\"button\" class=\"dt-bsheet-row\" @click=\"setDensity(d)\">\n {{ i18n.t(`display.${d}`) }}\n <PhCheck v-if=\"d === density\" :size=\"18\" class=\"dt-bsheet-end dt-bsheet-check\" aria-hidden=\"true\" />\n </button>\n </template>\n\n <SortPanel\n v-else-if=\"level === 'sort'\"\n :sort=\"sort\"\n :header-of=\"headerOf\"\n @sort-dir=\"(c, d) => emit('sort-dir', c, d)\"\n @sort-remove=\"(c) => emit('sort-remove', c)\"\n @sort-clear=\"emit('sort-clear')\"\n />\n\n <template v-else>\n <button type=\"button\" class=\"dt-bsheet-row\" @click=\"close(() => emit('export', 'csv'))\">\n {{ i18n.t('toolbar.csv') }}\n </button>\n <button type=\"button\" class=\"dt-bsheet-row\" @click=\"close(() => emit('export', 'xlsx'))\">\n {{ i18n.t('toolbar.xlsx') }}\n </button>\n </template>\n </Layer>\n <ColumnsDialog\n v-if=\"columnsUsed\"\n v-model:open=\"columnsOpen\"\n phone\n :columns=\"columns\"\n @save=\"(d) => emit('columns-save', d)\"\n @close-auto-focus=\"focusTrigger\"\n />\n</template>\n"],"mappings":"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"}
|