@medyat/vue-data-table 1.0.0 → 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.
@@ -0,0 +1,284 @@
1
+ import { D as e, E as t, M as n, O as r, T as ee, W as te, X as i, j as ne } from "./query-CGNWUi2E.js";
2
+ import { a as re, i as ie, n as ae, r as oe, t as se } from "./TextEditor-CHLM6u-l.js";
3
+ import { t as ce } from "./Layer-Di-tPd8b.js";
4
+ import { Fragment as a, computed as o, createBlock as s, createCommentVNode as c, createElementBlock as l, createElementVNode as u, createSlots as le, createTextVNode as d, createVNode as f, defineAsyncComponent as ue, defineComponent as p, openBlock as m, ref as h, renderList as g, resolveDynamicComponent as de, toDisplayString as _, unref as v, vModelText as fe, withCtx as y, withDirectives as pe } from "vue";
5
+ import { PhArrowDown as me, PhArrowUp as he, PhCaretDown as b, PhCaretLeft as ge, PhCaretRight as _e, PhMagnifyingGlass as ve, PhPlus as ye, PhX as be } from "@phosphor-icons/vue";
6
+ import { ToggleGroupItem as x, ToggleGroupRoot as xe } from "reka-ui";
7
+ //#region src/core/filters/FiltersSheet.vue?vue&type=script&setup=true&lang.ts
8
+ var Se = ["aria-label"], Ce = ["disabled"], we = ["onClick"], Te = { class: "dt-bsheet-field" }, S = { class: "dt-bsheet-value is-strong" }, C = ["aria-label", "onClick"], w = { class: "dt-bsheet-label" }, T = ["onClick"], E = { class: "dt-bsheet-field" }, D = { class: "dt-bsheet-value" }, O = { class: "dt-bsheet-label" }, Ee = { class: "dt-bsheet-row is-sort" }, k = { class: "dt-select dt-bsheet-select" }, De = ["value", "aria-label"], Oe = { value: "" }, ke = ["value"], Ae = { class: "dt-input has-icon dt-bsheet-search" }, je = { class: "dt-input-icon" }, Me = ["placeholder", "aria-label"], Ne = ["onClick"], Pe = {
9
+ key: 0,
10
+ class: "dt-options-empty"
11
+ }, Fe = {
12
+ key: 2,
13
+ class: "dt-bsheet-editor"
14
+ }, Ie = { class: "dt-select dt-bsheet-select" }, Le = ["value", "aria-label"], Re = ["value"], A = /* @__PURE__ */ p({
15
+ __name: "FiltersSheet",
16
+ props: {
17
+ columns: {},
18
+ chips: {},
19
+ sort: {},
20
+ rows: {},
21
+ labels: {},
22
+ summaryOf: { type: Function },
23
+ currenciesOf: { type: Function }
24
+ },
25
+ emits: ["apply"],
26
+ setup(p, { expose: A, emit: ze }) {
27
+ let Be = ue(() => import("./DateEditor-C2zzyoPQ.js")), j = p, Ve = ze, { i18n: M } = te(), N = h(!1), P = h([]), F = h(null), I = h("main"), L = h(null), R = h(""), z = (e) => j.columns.find((t) => t.id === e), B = (e) => z(e)?.header ?? e, V = o(() => j.columns.filter((e) => e.filterable ?? i[e.type].filterable)), He = o(() => j.columns.filter((e) => e.sortable ?? i[e.type].sortable)), H = (e) => P.value.some((t) => t.column === e), U = o(() => V.value.filter((e) => e.suggested && !H(e.id))), W = o(() => V.value.filter((e) => !H(e.id) && (!R.value || e.header.toLocaleLowerCase().includes(R.value.toLocaleLowerCase()))));
28
+ A({ show: (e) => {
29
+ P.value = j.chips.map((e) => ({ ...e })), F.value = j.sort[0] ?? null, I.value = "main", L.value = null, R.value = "", N.value = !0, e && G(e);
30
+ } });
31
+ let G = (e) => {
32
+ let n = z(e);
33
+ if (!n) return;
34
+ let r = P.value.find((t) => t.column === e);
35
+ n.type === "boolean" ? P.value = r ? P.value.map((e) => e === r ? {
36
+ ...e,
37
+ value: e.value !== !0
38
+ } : e) : [...P.value, {
39
+ column: e,
40
+ op: t(n),
41
+ value: !0
42
+ }] : (r || (P.value = [...P.value, {
43
+ column: e,
44
+ op: t(n)
45
+ }]), L.value = e, I.value = "editor");
46
+ }, K = o(() => P.value.find((e) => e.column === L.value) ?? null), q = o(() => L.value ? z(L.value) : void 0), J = o(() => K.value && q.value ? e(K.value.op, q.value.type) : null), Ue = o(() => q.value ? n(q.value) : []), We = o(() => Array.isArray(K.value?.value) ? K.value.value.length : 1), Y = (e) => P.value = P.value.map((t) => t.column === L.value ? {
47
+ ...t,
48
+ ...e
49
+ } : t), X = (e) => {
50
+ let t = q.value;
51
+ Y({
52
+ value: e,
53
+ currency: t.type === "currency" ? K.value?.currency ?? j.currenciesOf(t)[0] : K.value?.currency
54
+ });
55
+ }, Z = (e) => P.value = P.value.map((t) => t.column === L.value ? ee(t, e, q.value.type) : t), Ge = () => Z(K.value?.op === "is_empty" ? "in" : "is_empty"), Q = (e) => P.value = P.value.filter((t) => t.column !== e), $ = () => {
56
+ let e = K.value;
57
+ e && q.value && !r(e, q.value.type) && Q(e.column), L.value = null, I.value = "main";
58
+ }, Ke = (e) => F.value = e ? {
59
+ column: e,
60
+ dir: F.value?.dir ?? "asc"
61
+ } : null, qe = (e) => {
62
+ (e === "asc" || e === "desc") && F.value && (F.value = {
63
+ ...F.value,
64
+ dir: e
65
+ });
66
+ }, Je = () => {
67
+ Ve("apply", P.value.filter((e) => r(e, z(e.column).type)), F.value ? [F.value] : []), N.value = !1;
68
+ }, Ye = o(() => I.value === "main" ? M.t("mobile.filters") : I.value === "picker" ? M.t("filter.addFilter") : q.value?.header ?? "");
69
+ return (e, t) => (m(), s(ce, {
70
+ open: N.value,
71
+ "onUpdate:open": t[7] ||= (e) => N.value = e,
72
+ sheet: "",
73
+ "content-class": "dt-filters-sheet",
74
+ title: Ye.value
75
+ }, le({
76
+ "head-end": y(() => [I.value === "main" ? (m(), l("button", {
77
+ key: 0,
78
+ type: "button",
79
+ class: "dt-bsheet-action",
80
+ onClick: t[0] ||= (e) => P.value = []
81
+ }, _(v(M).t("filter.clearAll")), 1)) : I.value === "editor" ? (m(), l("button", {
82
+ key: 1,
83
+ type: "button",
84
+ class: "dt-bsheet-action",
85
+ disabled: K.value?.value === void 0,
86
+ onClick: t[1] ||= (e) => Y({ value: void 0 })
87
+ }, _(v(M).t("common.clear")), 9, Ce)) : c("", !0)]),
88
+ foot: y(() => [I.value === "editor" ? (m(), l("button", {
89
+ key: 0,
90
+ type: "button",
91
+ class: "dt-bsheet-primary",
92
+ onClick: $
93
+ }, _(v(M).t("common.done")), 1)) : (m(), l("button", {
94
+ key: 1,
95
+ type: "button",
96
+ class: "dt-bsheet-primary",
97
+ onClick: Je
98
+ }, _(v(M).t("mobile.showResults")), 1))]),
99
+ default: y(() => [I.value === "main" ? (m(), l(a, { key: 0 }, [
100
+ (m(!0), l(a, null, g(P.value, (e) => (m(), l("div", {
101
+ key: e.column,
102
+ class: "dt-bsheet-row is-split"
103
+ }, [u("button", {
104
+ type: "button",
105
+ class: "dt-bsheet-row-main",
106
+ onClick: (t) => G(e.column)
107
+ }, [u("span", Te, _(B(e.column)), 1), u("span", S, _(p.summaryOf(e).text), 1)], 8, we), u("button", {
108
+ type: "button",
109
+ class: "dt-bsheet-x",
110
+ "aria-label": v(M).t("filter.removeAria", { column: B(e.column) }),
111
+ onClick: (t) => Q(e.column)
112
+ }, [f(v(be), {
113
+ size: 16,
114
+ "aria-hidden": "true"
115
+ })], 8, C)]))), 128)),
116
+ U.value.length ? (m(), l(a, { key: 0 }, [u("div", w, _(v(M).t("picker.suggested")), 1), (m(!0), l(a, null, g(U.value, (e) => (m(), l("button", {
117
+ key: e.id,
118
+ type: "button",
119
+ class: "dt-bsheet-row",
120
+ onClick: (t) => G(e.id)
121
+ }, [
122
+ u("span", E, _(e.header), 1),
123
+ u("span", D, _(v(M).t("common.any")), 1),
124
+ f(v(_e), {
125
+ size: 16,
126
+ "aria-hidden": "true"
127
+ })
128
+ ], 8, T))), 128))], 64)) : c("", !0),
129
+ u("button", {
130
+ type: "button",
131
+ class: "dt-bsheet-row is-accent",
132
+ onClick: t[2] ||= (e) => I.value = "picker"
133
+ }, [f(v(ye), {
134
+ size: 18,
135
+ "aria-hidden": "true"
136
+ }), d(" " + _(v(M).t("filter.addFilter")), 1)]),
137
+ t[8] ||= u("div", { class: "dt-bsheet-sep" }, null, -1),
138
+ u("div", O, _(v(M).t("mobile.sort")), 1),
139
+ u("div", Ee, [u("label", k, [u("select", {
140
+ value: F.value?.column ?? "",
141
+ "aria-label": v(M).t("mobile.sort"),
142
+ onChange: t[3] ||= (e) => Ke(e.target.value)
143
+ }, [u("option", Oe, _(v(M).t("common.empty")), 1), (m(!0), l(a, null, g(He.value, (e) => (m(), l("option", {
144
+ key: e.id,
145
+ value: e.id
146
+ }, _(e.header), 9, ke))), 128))], 40, De), f(v(b), {
147
+ size: 14,
148
+ "aria-hidden": "true"
149
+ })]), f(v(xe), {
150
+ class: "dt-seg dt-bsheet-dir",
151
+ type: "single",
152
+ "model-value": F.value?.dir ?? "",
153
+ disabled: !F.value,
154
+ "onUpdate:modelValue": qe
155
+ }, {
156
+ default: y(() => [f(v(x), {
157
+ class: "dt-seg-item",
158
+ value: "asc",
159
+ "aria-label": v(M).t("header.sortAsc")
160
+ }, {
161
+ default: y(() => [f(v(he), {
162
+ size: 16,
163
+ "aria-hidden": "true"
164
+ })]),
165
+ _: 1
166
+ }, 8, ["aria-label"]), f(v(x), {
167
+ class: "dt-seg-item",
168
+ value: "desc",
169
+ "aria-label": v(M).t("header.sortDesc")
170
+ }, {
171
+ default: y(() => [f(v(me), {
172
+ size: 16,
173
+ "aria-hidden": "true"
174
+ })]),
175
+ _: 1
176
+ }, 8, ["aria-label"])]),
177
+ _: 1
178
+ }, 8, ["model-value", "disabled"])])
179
+ ], 64)) : I.value === "picker" ? (m(), l(a, { key: 1 }, [
180
+ u("label", Ae, [u("span", je, [f(v(ve), {
181
+ size: 16,
182
+ "aria-hidden": "true"
183
+ })]), pe(u("input", {
184
+ "onUpdate:modelValue": t[4] ||= (e) => R.value = e,
185
+ type: "search",
186
+ placeholder: v(M).t("picker.search"),
187
+ "aria-label": v(M).t("picker.search")
188
+ }, null, 8, Me), [[fe, R.value]])]),
189
+ (m(!0), l(a, null, g(W.value, (e) => (m(), l("button", {
190
+ key: e.id,
191
+ type: "button",
192
+ class: "dt-bsheet-row",
193
+ onClick: (t) => G(e.id)
194
+ }, [(m(), s(de(v(re)[e.type]), {
195
+ size: 16,
196
+ class: "dt-bsheet-icon",
197
+ "aria-hidden": "true"
198
+ })), d(" " + _(e.header), 1)], 8, Ne))), 128)),
199
+ W.value.length ? c("", !0) : (m(), l("div", Pe, _(v(M).t("picker.noMatch")), 1))
200
+ ], 64)) : K.value && q.value ? (m(), l("div", Fe, [u("label", Ie, [u("select", {
201
+ value: K.value.op,
202
+ "aria-label": v(M).t("mobile.operator"),
203
+ onChange: t[5] ||= (e) => Z(e.target.value)
204
+ }, [(m(!0), l(a, null, g(Ue.value, (e) => (m(), l("option", {
205
+ key: e,
206
+ value: e
207
+ }, _(v(ne)(v(M), e, q.value.type, We.value)), 9, Re))), 128))], 40, Le), f(v(b), {
208
+ size: 14,
209
+ "aria-hidden": "true"
210
+ })]), J.value === "options" ? (m(), s(oe, {
211
+ key: 0,
212
+ column: q.value,
213
+ op: K.value.op,
214
+ "model-value": Array.isArray(K.value.value) ? K.value.value : [],
215
+ rows: p.rows,
216
+ labels: p.labels,
217
+ "onUpdate:modelValue": X,
218
+ onUnassigned: Ge
219
+ }, null, 8, [
220
+ "column",
221
+ "op",
222
+ "model-value",
223
+ "rows",
224
+ "labels"
225
+ ])) : J.value === "text" ? (m(), s(se, {
226
+ key: 1,
227
+ column: q.value,
228
+ op: K.value.op,
229
+ "model-value": K.value.value,
230
+ "onUpdate:modelValue": X,
231
+ onDone: $
232
+ }, null, 8, [
233
+ "column",
234
+ "op",
235
+ "model-value"
236
+ ])) : J.value === "number" ? (m(), s(ie, {
237
+ key: 2,
238
+ column: q.value,
239
+ op: K.value.op,
240
+ "model-value": K.value.value,
241
+ currency: K.value.currency,
242
+ currencies: p.currenciesOf(q.value),
243
+ "onUpdate:modelValue": X,
244
+ "onUpdate:currency": t[6] ||= (e) => Y({ currency: e }),
245
+ onDone: $
246
+ }, null, 8, [
247
+ "column",
248
+ "op",
249
+ "model-value",
250
+ "currency",
251
+ "currencies"
252
+ ])) : J.value === "star" ? (m(), s(ae, {
253
+ key: 3,
254
+ column: q.value,
255
+ "model-value": K.value.value,
256
+ "onUpdate:modelValue": X,
257
+ onDone: $
258
+ }, null, 8, ["column", "model-value"])) : J.value === "date" ? (m(), s(v(Be), {
259
+ key: 4,
260
+ op: K.value.op,
261
+ "model-value": K.value.value,
262
+ "onUpdate:modelValue": X,
263
+ onDone: $
264
+ }, null, 8, ["op", "model-value"])) : c("", !0)])) : c("", !0)]),
265
+ _: 2
266
+ }, [I.value === "main" ? void 0 : {
267
+ name: "head-start",
268
+ fn: y(() => [u("button", {
269
+ type: "button",
270
+ class: "dt-bsheet-back",
271
+ "aria-label": v(M).t("mobile.backToFilters"),
272
+ onClick: $
273
+ }, [f(v(ge), {
274
+ size: 20,
275
+ "aria-hidden": "true"
276
+ })], 8, Se)]),
277
+ key: "0"
278
+ }]), 1032, ["open", "title"]));
279
+ }
280
+ });
281
+ //#endregion
282
+ export { A as default };
283
+
284
+ //# sourceMappingURL=FiltersSheet-C3zOlbkN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FiltersSheet-o2HaQuhq.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","isComplete","changeOperator","TYPE_SPECS","opLabel","defaultOperator","operatorsOf","editorOf","useDataTableContext","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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"}
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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"}