@medyat/vue-data-table 0.0.0-stage → 1.0.0

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 @@
1
+ {"version":3,"file":"TextEditor-DPqiiRau.js","names":["_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_openBlock","_createElementBlock","_createBlock","_unref","_withCtx","_Fragment","_renderList","_createTextVNode","_toDisplayString","_createCommentVNode","_createElementVNode","_normalizeClass","_withDirectives","_withKeys","_withModifiers","_vModelText","_sfc_main","_hoisted_1","_hoisted_2","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_unref","_withDirectives","_vModelText","_createCommentVNode","_Fragment","_normalizeClass","_toDisplayString","_createTextVNode","_renderList","_createBlock","_normalizeStyle","_withModifiers","_sfc_main","_hoisted_1","_hoisted_2","_openBlock","_createElementBlock","_Fragment","_renderList","_unref","_normalizeClass","_createVNode","_sfc_main","_openBlock","_createElementBlock","_createElementVNode","_withKeys","_withModifiers","_sfc_main","badge","parseNumber","readPath","avatar","TYPE_ICONS","PhHash","PhPercent","PhStar","PhCreditCard","PhTextT","PhTextAlignLeft","PhPhone","PhPalette","PhEnvelope","PhLink","PhCheckSquare","PhRadioButton","PhListChecks","PhLinkSimple","PhUser","PhCalendarBlank","PhClock","PhBracketsCurly","PhListBullets","_hoisted_1$3","_hoisted_2$3","_hoisted_3$1","_hoisted_4$1","_hoisted_5$1","_hoisted_6$1","_hoisted_7$1","_hoisted_8$1","_hoisted_9$1","_hoisted_10$1","_hoisted_11$1","NumberEditor_default","defineComponent","__emit","props","__props","emit","useDataTableContext","range","computed","nf","locale","show","n","fromModel","v","a0","b0","a","ref","b","x","y","first","commit","min","max","timer","onInput","onEnter","suffix","openBlock","createElementBlock","createBlock","unref","ToggleGroupRoot","_cache","withCtx","Fragment","renderList","ToggleGroupItem","c","createTextVNode","toDisplayString","createCommentVNode","createElementVNode","i18n","normalizeClass","withDirectives","$event","withKeys","withModifiers","vModelText","_hoisted_1$2","_hoisted_2$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","OptionsEditor_default","def","remote","isUser","q","distinctFromRows","seen","row","raw","value","staticOptions","d","items","hasMore","loading","page","ctl","load","r","res","append","watch","loadMore","options","needle","o","showSearch","searchPlaceholder","selected","isOn","toggle","next","only","unassigned","rich","Opt","p","createVNode","PhMagnifyingGlass","normalizeStyle","_hoisted_1$1","_hoisted_2$1","StarEditor_default","pick","_hoisted_1","_hoisted_2","TextEditor_default","asText","draft","input","isList","normalize","s","parts","onBeforeUnmount"],"sources":["../src/core/filters/typeIcons.ts","../src/core/editors/NumberEditor.vue","../src/core/editors/NumberEditor.vue","../src/core/editors/OptionsEditor.vue","../src/core/editors/OptionsEditor.vue","../src/core/editors/StarEditor.vue","../src/core/editors/StarEditor.vue","../src/core/editors/TextEditor.vue","../src/core/editors/TextEditor.vue"],"sourcesContent":["// Sütun tipi ikonları (column picker ve çip; handoff 03 §3.2): Phosphor regular, 14 px.\nimport {\n PhBracketsCurly,\n PhCalendarBlank,\n PhCheckSquare,\n PhClock,\n PhCreditCard,\n PhEnvelope,\n PhHash,\n PhLink,\n PhLinkSimple,\n PhListBullets,\n PhListChecks,\n PhPalette,\n PhPercent,\n PhPhone,\n PhRadioButton,\n PhStar,\n PhTextAlignLeft,\n PhTextT,\n PhUser,\n} from '@phosphor-icons/vue'\nimport type { Component } from 'vue'\nimport type { ColumnType } from '../../types/columns'\n\nexport const TYPE_ICONS: Record<ColumnType, Component> = {\n int: PhHash,\n float: PhHash,\n percentage: PhPercent,\n star: PhStar,\n currency: PhCreditCard,\n string: PhTextT,\n text: PhTextAlignLeft,\n uppercase: PhTextT,\n lowercase: PhTextT,\n phone: PhPhone,\n color: PhPalette,\n email: PhEnvelope,\n url: PhLink,\n id: PhHash,\n boolean: PhCheckSquare,\n select: PhRadioButton,\n multiselect: PhListChecks,\n ajax: PhLinkSimple,\n user: PhUser,\n date: PhCalendarBlank,\n datetime: PhClock,\n object: PhBracketsCurly,\n array: PhListBullets,\n}\n","<script setup lang=\"ts\">\n// Sayı editörü (04 §3, T2-05): tek değer ya da Min / Max (\"and\"); 250 ms sonra ve Enter'da uygular; `currency` sütununda\n// para birimi segmented (değer düz sayı, para birimi ayrı alan); percentage `%` son eki; yerel ayara göre okunur.\nimport { ToggleGroupItem, ToggleGroupRoot } from 'reka-ui'\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport type { ColumnDef } from '../../types/columns'\nimport type { FilterOp } from '../../types/query'\nimport { parseNumber } from '../format/parse'\nimport { useDataTableContext } from '../plugin'\n\nconst props = defineProps<{\n column: ColumnDef\n op: FilterOp\n modelValue: unknown\n currency?: string\n /** `currency` sütunu: seçilebilir kodlar (sabit kod veya yüklü satırlardan). */\n currencies: string[]\n}>()\nconst emit = defineEmits<{\n 'update:modelValue': [value: number | [number | null, number | null] | undefined]\n 'update:currency': [code: string]\n done: []\n}>()\nconst { i18n, locale } = useDataTableContext()\nconst range = computed(() => props.op === 'between')\nconst nf = new Intl.NumberFormat(locale, { maximumFractionDigits: 6 })\nconst show = (n: unknown) => (typeof n === 'number' && Number.isFinite(n) ? nf.format(n) : '')\nconst fromModel = () => {\n const v = props.modelValue\n if (range.value) return [show(Array.isArray(v) ? v[0] : undefined), show(Array.isArray(v) ? v[1] : undefined)]\n return [show(v), '']\n}\nconst [a0, b0] = fromModel()\nconst a = ref(a0 ?? '')\nconst b = ref(b0 ?? '')\nwatch(\n () => [props.modelValue, props.op],\n () => {\n const [x, y] = fromModel()\n if (parseNumber(locale, a.value) !== parseNumber(locale, x ?? '')) a.value = x ?? ''\n if (parseNumber(locale, b.value) !== parseNumber(locale, y ?? '')) b.value = y ?? ''\n },\n)\nconst first = ref<HTMLInputElement | null>(null)\nonMounted(() => first.value?.focus())\n\nconst commit = () => {\n const min = parseNumber(locale, a.value)\n if (range.value) {\n const max = parseNumber(locale, b.value)\n emit('update:modelValue', min === null && max === null ? undefined : [min, max])\n } else emit('update:modelValue', min ?? undefined)\n}\nlet timer: ReturnType<typeof setTimeout> | undefined\nconst onInput = () => {\n clearTimeout(timer)\n timer = setTimeout(commit, 250)\n}\nconst onEnter = () => {\n clearTimeout(timer)\n commit()\n emit('done')\n}\nonBeforeUnmount(() => clearTimeout(timer))\nconst suffix = props.column.type === 'percentage' ? '%' : ''\n</script>\n\n<template>\n <div class=\"dt-editor-number\">\n <ToggleGroupRoot\n v-if=\"currencies.length > 1\"\n class=\"dt-seg dt-seg-xs\"\n type=\"single\"\n :model-value=\"currency\"\n @update:model-value=\"(v) => v && emit('update:currency', String(v))\"\n >\n <ToggleGroupItem v-for=\"c in currencies\" :key=\"c\" class=\"dt-seg-item\" :value=\"c\">{{ c }}</ToggleGroupItem>\n </ToggleGroupRoot>\n <div class=\"dt-editor-fields\">\n <label class=\"dt-editor-field\">\n <span v-if=\"range\" class=\"dt-editor-label\">{{ i18n.t('number.min') }}</span>\n <span class=\"dt-input\" :class=\"{ 'has-suffix': suffix }\">\n <input\n ref=\"first\"\n v-model=\"a\"\n type=\"text\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n @input=\"onInput\"\n @keydown.enter.prevent=\"onEnter\"\n />\n <span v-if=\"suffix\" class=\"dt-input-end dt-input-suffix\">{{ suffix }}</span>\n </span>\n </label>\n <template v-if=\"range\">\n <span class=\"dt-editor-and\">{{ i18n.t('number.and') }}</span>\n <label class=\"dt-editor-field\">\n <span class=\"dt-editor-label\">{{ i18n.t('number.max') }}</span>\n <span class=\"dt-input\" :class=\"{ 'has-suffix': suffix }\">\n <input\n v-model=\"b\"\n type=\"text\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n @input=\"onInput\"\n @keydown.enter.prevent=\"onEnter\"\n />\n <span v-if=\"suffix\" class=\"dt-input-end dt-input-suffix\">{{ suffix }}</span>\n </span>\n </label>\n </template>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\n// Sayı editörü (04 §3, T2-05): tek değer ya da Min / Max (\"and\"); 250 ms sonra ve Enter'da uygular; `currency` sütununda\n// para birimi segmented (değer düz sayı, para birimi ayrı alan); percentage `%` son eki; yerel ayara göre okunur.\nimport { ToggleGroupItem, ToggleGroupRoot } from 'reka-ui'\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport type { ColumnDef } from '../../types/columns'\nimport type { FilterOp } from '../../types/query'\nimport { parseNumber } from '../format/parse'\nimport { useDataTableContext } from '../plugin'\n\nconst props = defineProps<{\n column: ColumnDef\n op: FilterOp\n modelValue: unknown\n currency?: string\n /** `currency` sütunu: seçilebilir kodlar (sabit kod veya yüklü satırlardan). */\n currencies: string[]\n}>()\nconst emit = defineEmits<{\n 'update:modelValue': [value: number | [number | null, number | null] | undefined]\n 'update:currency': [code: string]\n done: []\n}>()\nconst { i18n, locale } = useDataTableContext()\nconst range = computed(() => props.op === 'between')\nconst nf = new Intl.NumberFormat(locale, { maximumFractionDigits: 6 })\nconst show = (n: unknown) => (typeof n === 'number' && Number.isFinite(n) ? nf.format(n) : '')\nconst fromModel = () => {\n const v = props.modelValue\n if (range.value) return [show(Array.isArray(v) ? v[0] : undefined), show(Array.isArray(v) ? v[1] : undefined)]\n return [show(v), '']\n}\nconst [a0, b0] = fromModel()\nconst a = ref(a0 ?? '')\nconst b = ref(b0 ?? '')\nwatch(\n () => [props.modelValue, props.op],\n () => {\n const [x, y] = fromModel()\n if (parseNumber(locale, a.value) !== parseNumber(locale, x ?? '')) a.value = x ?? ''\n if (parseNumber(locale, b.value) !== parseNumber(locale, y ?? '')) b.value = y ?? ''\n },\n)\nconst first = ref<HTMLInputElement | null>(null)\nonMounted(() => first.value?.focus())\n\nconst commit = () => {\n const min = parseNumber(locale, a.value)\n if (range.value) {\n const max = parseNumber(locale, b.value)\n emit('update:modelValue', min === null && max === null ? undefined : [min, max])\n } else emit('update:modelValue', min ?? undefined)\n}\nlet timer: ReturnType<typeof setTimeout> | undefined\nconst onInput = () => {\n clearTimeout(timer)\n timer = setTimeout(commit, 250)\n}\nconst onEnter = () => {\n clearTimeout(timer)\n commit()\n emit('done')\n}\nonBeforeUnmount(() => clearTimeout(timer))\nconst suffix = props.column.type === 'percentage' ? '%' : ''\n</script>\n\n<template>\n <div class=\"dt-editor-number\">\n <ToggleGroupRoot\n v-if=\"currencies.length > 1\"\n class=\"dt-seg dt-seg-xs\"\n type=\"single\"\n :model-value=\"currency\"\n @update:model-value=\"(v) => v && emit('update:currency', String(v))\"\n >\n <ToggleGroupItem v-for=\"c in currencies\" :key=\"c\" class=\"dt-seg-item\" :value=\"c\">{{ c }}</ToggleGroupItem>\n </ToggleGroupRoot>\n <div class=\"dt-editor-fields\">\n <label class=\"dt-editor-field\">\n <span v-if=\"range\" class=\"dt-editor-label\">{{ i18n.t('number.min') }}</span>\n <span class=\"dt-input\" :class=\"{ 'has-suffix': suffix }\">\n <input\n ref=\"first\"\n v-model=\"a\"\n type=\"text\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n @input=\"onInput\"\n @keydown.enter.prevent=\"onEnter\"\n />\n <span v-if=\"suffix\" class=\"dt-input-end dt-input-suffix\">{{ suffix }}</span>\n </span>\n </label>\n <template v-if=\"range\">\n <span class=\"dt-editor-and\">{{ i18n.t('number.and') }}</span>\n <label class=\"dt-editor-field\">\n <span class=\"dt-editor-label\">{{ i18n.t('number.max') }}</span>\n <span class=\"dt-input\" :class=\"{ 'has-suffix': suffix }\">\n <input\n v-model=\"b\"\n type=\"text\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n @input=\"onInput\"\n @keydown.enter.prevent=\"onEnter\"\n />\n <span v-if=\"suffix\" class=\"dt-input-end dt-input-suffix\">{{ suffix }}</span>\n </span>\n </label>\n </template>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\n// Seçenek editörü (04 §3, T2-02/03): select · multiselect · color · ajax · user. Her işaretleme anında uygulanır;\n// hover'da \"Only\"; `user`'da Me ve Unassigned en üstte; uzak kaynaklar yazdıkça arar ve 20'şer yükler (03).\nimport { PhMagnifyingGlass } from '@phosphor-icons/vue'\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport type { ColumnDef, OptionDef, RemoteOptions, UserOption } from '../../types/columns'\nimport type { FilterOp } from '../../types/query'\nimport { avatar, badge } from '../cells/renderCell'\nimport type { RemoteLabels } from '../cells/remoteLabels'\nimport { readPath } from '../columns/readPath'\nimport { useDataTableContext } from '../plugin'\n\nconst props = defineProps<{\n column: ColumnDef\n op: FilterOp\n modelValue: Array<string | number>\n /** color: yüklü satırlardaki mevcut değerler (uzaktan öneri yok, D3). */\n rows: object[]\n labels: RemoteLabels\n}>()\nconst emit = defineEmits<{ 'update:modelValue': [values: Array<string | number>]; unassigned: [] }>()\nconst { i18n } = useDataTableContext()\n\nconst def = computed(() => props.column)\nconst remote = computed<RemoteOptions | undefined>(() =>\n def.value.type === 'ajax' || def.value.type === 'user' ? (def.value as { remote?: RemoteOptions }).remote : undefined,\n)\nconst isUser = computed(() => def.value.type === 'user')\nconst q = ref('')\n\nconst distinctFromRows = (): OptionDef[] => {\n const seen = new Set<string | number>()\n for (const row of props.rows) {\n const raw = def.value.accessor ? def.value.accessor(row) : readPath(row, def.value.id as string)\n for (const v of Array.isArray(raw) ? raw : [raw])\n if (v !== null && v !== undefined && v !== '') seen.add(v as string | number)\n }\n return [...seen].sort((a, b) => String(a).localeCompare(String(b))).map((value) => ({ value, label: String(value) }))\n}\nconst staticOptions = computed<OptionDef[]>(() => {\n const d = def.value\n if (d.type === 'select' || d.type === 'multiselect') return d.options\n if (d.type === 'user' && d.options) return [...d.options].sort((a, b) => a.label.localeCompare(b.label))\n if (d.type === 'color' && d.palette) return d.palette.map((value) => ({ value, label: value }))\n if (d.type === 'color') return distinctFromRows()\n return []\n})\n\n// Uzak kaynak: 250 ms sonra arar; sayfa sayfa ekler.\nconst items = ref<OptionDef[]>([])\nconst hasMore = ref(false)\nconst loading = ref(false)\nlet page = 1\nlet ctl: AbortController | null = null\nlet timer: ReturnType<typeof setTimeout> | undefined\nconst load = async (append: boolean) => {\n const r = remote.value\n if (!r) return\n ctl?.abort()\n ctl = new AbortController()\n loading.value = true\n try {\n const res = await r.search(q.value, page, { signal: ctl.signal })\n items.value = append ? [...items.value, ...res.items] : res.items\n hasMore.value = res.hasMore\n props.labels.seed(def.value.id as string, res.items)\n } catch {\n /* abort veya ağ hatası: liste olduğu gibi kalır (D18) */\n } finally {\n loading.value = false\n }\n}\nif (remote.value) void load(false)\nwatch(q, () => {\n if (!remote.value) return\n clearTimeout(timer)\n timer = setTimeout(() => {\n page = 1\n void load(false)\n }, 250)\n})\nconst loadMore = () => {\n page += 1\n void load(true)\n}\nonBeforeUnmount(() => {\n clearTimeout(timer)\n ctl?.abort()\n})\n\nconst options = computed<OptionDef[]>(() => {\n if (remote.value) return items.value\n const needle = q.value.trim().toLocaleLowerCase()\n return needle ? staticOptions.value.filter((o) => o.label.toLocaleLowerCase().includes(needle)) : staticOptions.value\n})\nconst showSearch = computed(() => !!remote.value || staticOptions.value.length > 7)\nconst searchPlaceholder = computed(() =>\n def.value.filterNoun ? i18n.t('option.searchNoun', { noun: def.value.filterNoun }) : i18n.t('option.search'),\n)\n\nconst selected = computed(() => new Set(props.modelValue.map(String)))\nconst isOn = (v: string | number) => selected.value.has(String(v))\nconst toggle = (v: string | number) => {\n const next = isOn(v) ? props.modelValue.filter((x) => String(x) !== String(v)) : [...props.modelValue, v]\n emit('update:modelValue', next)\n}\nconst only = (v: string | number) => emit('update:modelValue', [v])\nconst unassigned = computed(() => props.op === 'is_empty')\n\n// Sabit bileşen: her render'da yeni bileşen üretmek rozeti DOM'da değiştirir ve tıkı yutabilir (bkz. sheet/editors/OptionCell).\nconst rich = computed(() => ['select', 'multiselect', 'user'].includes(def.value.type))\nconst Opt = (p: { o: OptionDef }) =>\n def.value.type === 'user' ? [avatar(p.o as UserOption), ' ', p.o.label] : badge(p.o.tone ?? 'gray', p.o.label)\n</script>\n\n<template>\n <div class=\"dt-options\">\n <label v-if=\"showSearch\" class=\"dt-input has-icon dt-options-search\">\n <span class=\"dt-input-icon\"><PhMagnifyingGlass :size=\"14\" aria-hidden=\"true\" /></span>\n <input v-model=\"q\" type=\"search\" :placeholder=\"searchPlaceholder\" :aria-label=\"searchPlaceholder\" autofocus />\n </label>\n <div class=\"dt-options-list\" role=\"group\">\n <template v-if=\"isUser && !q\">\n <label class=\"dt-option\" :class=\"{ 'is-on': isOn('@me') }\">\n <input type=\"checkbox\" class=\"dt-checkbox\" :checked=\"isOn('@me')\" @change=\"toggle('@me')\" />\n <span class=\"dt-option-body\">\n <span class=\"dt-avatar dt-tone-blue\" aria-hidden=\"true\">{{ i18n.t('common.me').slice(0, 2) }}</span>\n {{ i18n.t('common.me') }}\n </span>\n </label>\n <label class=\"dt-option is-unassigned\" :class=\"{ 'is-on': unassigned }\">\n <input type=\"checkbox\" class=\"dt-checkbox\" :checked=\"unassigned\" @change=\"emit('unassigned')\" />\n <span class=\"dt-option-body\">\n <span class=\"dt-avatar is-empty\" aria-hidden=\"true\" />\n {{ i18n.t('common.unassigned') }}\n </span>\n </label>\n <div class=\"dt-pop-sep\" />\n </template>\n <label v-for=\"o in options\" :key=\"String(o.value)\" class=\"dt-option\" :class=\"{ 'is-on': isOn(o.value) }\">\n <input type=\"checkbox\" class=\"dt-checkbox\" :checked=\"isOn(o.value)\" @change=\"toggle(o.value)\" />\n <span class=\"dt-option-body\">\n <Opt v-if=\"rich\" :o=\"o\" />\n <template v-else-if=\"def.type === 'color'\">\n <span class=\"dt-swatch\" :style=\"{ background: String(o.value) }\" aria-hidden=\"true\" />\n <span class=\"dt-mono\">{{ o.label }}</span>\n </template>\n <template v-else>{{ o.label }}</template>\n </span>\n <button type=\"button\" class=\"dt-btn dt-btn-xs dt-option-only\" tabindex=\"-1\" @click.prevent=\"only(o.value)\">\n {{ i18n.t('option.only') }}\n </button>\n </label>\n <div v-if=\"remote && !loading && options.length === 0\" class=\"dt-options-empty\">\n {{ i18n.t('remote.noResults') }}\n </div>\n <div v-else-if=\"!remote && options.length === 0\" class=\"dt-options-empty\">{{ i18n.t('picker.noMatch') }}</div>\n <div v-if=\"loading\" class=\"dt-options-empty\">{{ i18n.t('common.loading') }}</div>\n <button\n v-if=\"remote && hasMore && !loading\"\n type=\"button\"\n class=\"dt-btn dt-btn-ghost dt-btn-sm dt-options-more\"\n @click=\"loadMore\"\n >\n {{ i18n.t('remote.loadMore') }}\n </button>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\n// Seçenek editörü (04 §3, T2-02/03): select · multiselect · color · ajax · user. Her işaretleme anında uygulanır;\n// hover'da \"Only\"; `user`'da Me ve Unassigned en üstte; uzak kaynaklar yazdıkça arar ve 20'şer yükler (03).\nimport { PhMagnifyingGlass } from '@phosphor-icons/vue'\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport type { ColumnDef, OptionDef, RemoteOptions, UserOption } from '../../types/columns'\nimport type { FilterOp } from '../../types/query'\nimport { avatar, badge } from '../cells/renderCell'\nimport type { RemoteLabels } from '../cells/remoteLabels'\nimport { readPath } from '../columns/readPath'\nimport { useDataTableContext } from '../plugin'\n\nconst props = defineProps<{\n column: ColumnDef\n op: FilterOp\n modelValue: Array<string | number>\n /** color: yüklü satırlardaki mevcut değerler (uzaktan öneri yok, D3). */\n rows: object[]\n labels: RemoteLabels\n}>()\nconst emit = defineEmits<{ 'update:modelValue': [values: Array<string | number>]; unassigned: [] }>()\nconst { i18n } = useDataTableContext()\n\nconst def = computed(() => props.column)\nconst remote = computed<RemoteOptions | undefined>(() =>\n def.value.type === 'ajax' || def.value.type === 'user' ? (def.value as { remote?: RemoteOptions }).remote : undefined,\n)\nconst isUser = computed(() => def.value.type === 'user')\nconst q = ref('')\n\nconst distinctFromRows = (): OptionDef[] => {\n const seen = new Set<string | number>()\n for (const row of props.rows) {\n const raw = def.value.accessor ? def.value.accessor(row) : readPath(row, def.value.id as string)\n for (const v of Array.isArray(raw) ? raw : [raw])\n if (v !== null && v !== undefined && v !== '') seen.add(v as string | number)\n }\n return [...seen].sort((a, b) => String(a).localeCompare(String(b))).map((value) => ({ value, label: String(value) }))\n}\nconst staticOptions = computed<OptionDef[]>(() => {\n const d = def.value\n if (d.type === 'select' || d.type === 'multiselect') return d.options\n if (d.type === 'user' && d.options) return [...d.options].sort((a, b) => a.label.localeCompare(b.label))\n if (d.type === 'color' && d.palette) return d.palette.map((value) => ({ value, label: value }))\n if (d.type === 'color') return distinctFromRows()\n return []\n})\n\n// Uzak kaynak: 250 ms sonra arar; sayfa sayfa ekler.\nconst items = ref<OptionDef[]>([])\nconst hasMore = ref(false)\nconst loading = ref(false)\nlet page = 1\nlet ctl: AbortController | null = null\nlet timer: ReturnType<typeof setTimeout> | undefined\nconst load = async (append: boolean) => {\n const r = remote.value\n if (!r) return\n ctl?.abort()\n ctl = new AbortController()\n loading.value = true\n try {\n const res = await r.search(q.value, page, { signal: ctl.signal })\n items.value = append ? [...items.value, ...res.items] : res.items\n hasMore.value = res.hasMore\n props.labels.seed(def.value.id as string, res.items)\n } catch {\n /* abort veya ağ hatası: liste olduğu gibi kalır (D18) */\n } finally {\n loading.value = false\n }\n}\nif (remote.value) void load(false)\nwatch(q, () => {\n if (!remote.value) return\n clearTimeout(timer)\n timer = setTimeout(() => {\n page = 1\n void load(false)\n }, 250)\n})\nconst loadMore = () => {\n page += 1\n void load(true)\n}\nonBeforeUnmount(() => {\n clearTimeout(timer)\n ctl?.abort()\n})\n\nconst options = computed<OptionDef[]>(() => {\n if (remote.value) return items.value\n const needle = q.value.trim().toLocaleLowerCase()\n return needle ? staticOptions.value.filter((o) => o.label.toLocaleLowerCase().includes(needle)) : staticOptions.value\n})\nconst showSearch = computed(() => !!remote.value || staticOptions.value.length > 7)\nconst searchPlaceholder = computed(() =>\n def.value.filterNoun ? i18n.t('option.searchNoun', { noun: def.value.filterNoun }) : i18n.t('option.search'),\n)\n\nconst selected = computed(() => new Set(props.modelValue.map(String)))\nconst isOn = (v: string | number) => selected.value.has(String(v))\nconst toggle = (v: string | number) => {\n const next = isOn(v) ? props.modelValue.filter((x) => String(x) !== String(v)) : [...props.modelValue, v]\n emit('update:modelValue', next)\n}\nconst only = (v: string | number) => emit('update:modelValue', [v])\nconst unassigned = computed(() => props.op === 'is_empty')\n\n// Sabit bileşen: her render'da yeni bileşen üretmek rozeti DOM'da değiştirir ve tıkı yutabilir (bkz. sheet/editors/OptionCell).\nconst rich = computed(() => ['select', 'multiselect', 'user'].includes(def.value.type))\nconst Opt = (p: { o: OptionDef }) =>\n def.value.type === 'user' ? [avatar(p.o as UserOption), ' ', p.o.label] : badge(p.o.tone ?? 'gray', p.o.label)\n</script>\n\n<template>\n <div class=\"dt-options\">\n <label v-if=\"showSearch\" class=\"dt-input has-icon dt-options-search\">\n <span class=\"dt-input-icon\"><PhMagnifyingGlass :size=\"14\" aria-hidden=\"true\" /></span>\n <input v-model=\"q\" type=\"search\" :placeholder=\"searchPlaceholder\" :aria-label=\"searchPlaceholder\" autofocus />\n </label>\n <div class=\"dt-options-list\" role=\"group\">\n <template v-if=\"isUser && !q\">\n <label class=\"dt-option\" :class=\"{ 'is-on': isOn('@me') }\">\n <input type=\"checkbox\" class=\"dt-checkbox\" :checked=\"isOn('@me')\" @change=\"toggle('@me')\" />\n <span class=\"dt-option-body\">\n <span class=\"dt-avatar dt-tone-blue\" aria-hidden=\"true\">{{ i18n.t('common.me').slice(0, 2) }}</span>\n {{ i18n.t('common.me') }}\n </span>\n </label>\n <label class=\"dt-option is-unassigned\" :class=\"{ 'is-on': unassigned }\">\n <input type=\"checkbox\" class=\"dt-checkbox\" :checked=\"unassigned\" @change=\"emit('unassigned')\" />\n <span class=\"dt-option-body\">\n <span class=\"dt-avatar is-empty\" aria-hidden=\"true\" />\n {{ i18n.t('common.unassigned') }}\n </span>\n </label>\n <div class=\"dt-pop-sep\" />\n </template>\n <label v-for=\"o in options\" :key=\"String(o.value)\" class=\"dt-option\" :class=\"{ 'is-on': isOn(o.value) }\">\n <input type=\"checkbox\" class=\"dt-checkbox\" :checked=\"isOn(o.value)\" @change=\"toggle(o.value)\" />\n <span class=\"dt-option-body\">\n <Opt v-if=\"rich\" :o=\"o\" />\n <template v-else-if=\"def.type === 'color'\">\n <span class=\"dt-swatch\" :style=\"{ background: String(o.value) }\" aria-hidden=\"true\" />\n <span class=\"dt-mono\">{{ o.label }}</span>\n </template>\n <template v-else>{{ o.label }}</template>\n </span>\n <button type=\"button\" class=\"dt-btn dt-btn-xs dt-option-only\" tabindex=\"-1\" @click.prevent=\"only(o.value)\">\n {{ i18n.t('option.only') }}\n </button>\n </label>\n <div v-if=\"remote && !loading && options.length === 0\" class=\"dt-options-empty\">\n {{ i18n.t('remote.noResults') }}\n </div>\n <div v-else-if=\"!remote && options.length === 0\" class=\"dt-options-empty\">{{ i18n.t('picker.noMatch') }}</div>\n <div v-if=\"loading\" class=\"dt-options-empty\">{{ i18n.t('common.loading') }}</div>\n <button\n v-if=\"remote && hasMore && !loading\"\n type=\"button\"\n class=\"dt-btn dt-btn-ghost dt-btn-sm dt-options-more\"\n @click=\"loadMore\"\n >\n {{ i18n.t('remote.loadMore') }}\n </button>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\n// Puan editörü (03): 1–max yıldız; tıklanınca uygulanır ve popover kapanır.\nimport { PhStar } from '@phosphor-icons/vue'\nimport type { ColumnDef } from '../../types/columns'\n\nconst props = defineProps<{ column: ColumnDef; modelValue: unknown }>()\nconst emit = defineEmits<{ 'update:modelValue': [value: number]; done: [] }>()\nconst max = (props.column as { max?: number }).max ?? 5\nconst pick = (n: number) => {\n emit('update:modelValue', n)\n emit('done')\n}\n</script>\n\n<template>\n <div class=\"dt-editor-stars\" role=\"radiogroup\">\n <button\n v-for=\"n in max\"\n :key=\"n\"\n type=\"button\"\n class=\"dt-star-btn\"\n role=\"radio\"\n :aria-checked=\"modelValue === n\"\n :aria-label=\"String(n)\"\n :class=\"{ 'is-on': typeof modelValue === 'number' && n <= modelValue }\"\n @click=\"pick(n)\"\n >\n <PhStar\n :size=\"18\"\n :weight=\"typeof modelValue === 'number' && n <= modelValue ? 'fill' : 'regular'\"\n aria-hidden=\"true\"\n />\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\n// Puan editörü (03): 1–max yıldız; tıklanınca uygulanır ve popover kapanır.\nimport { PhStar } from '@phosphor-icons/vue'\nimport type { ColumnDef } from '../../types/columns'\n\nconst props = defineProps<{ column: ColumnDef; modelValue: unknown }>()\nconst emit = defineEmits<{ 'update:modelValue': [value: number]; done: [] }>()\nconst max = (props.column as { max?: number }).max ?? 5\nconst pick = (n: number) => {\n emit('update:modelValue', n)\n emit('done')\n}\n</script>\n\n<template>\n <div class=\"dt-editor-stars\" role=\"radiogroup\">\n <button\n v-for=\"n in max\"\n :key=\"n\"\n type=\"button\"\n class=\"dt-star-btn\"\n role=\"radio\"\n :aria-checked=\"modelValue === n\"\n :aria-label=\"String(n)\"\n :class=\"{ 'is-on': typeof modelValue === 'number' && n <= modelValue }\"\n @click=\"pick(n)\"\n >\n <PhStar\n :size=\"18\"\n :weight=\"typeof modelValue === 'number' && n <= modelValue ? 'fill' : 'regular'\"\n aria-hidden=\"true\"\n />\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\n// Metin editörü (04 §3): 250 ms sonra ve Enter'da uygular; Enter popover'ı kapatır. `id` sütununda `in`/`not_in` için\n// yapıştırılan liste (satır sonu / virgül / noktalı virgül) değer dizisine ayrılır (03); uppercase/lowercase çevirir.\nimport { onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport type { ColumnDef } from '../../types/columns'\nimport type { FilterOp } from '../../types/query'\n\nconst props = defineProps<{ column: ColumnDef; op: FilterOp; modelValue: unknown }>()\nconst emit = defineEmits<{ 'update:modelValue': [value: string | Array<string | number>]; done: [] }>()\n\nconst asText = (v: unknown) => (Array.isArray(v) ? v.join(', ') : typeof v === 'string' ? v : '')\nconst draft = ref(asText(props.modelValue))\nwatch(\n () => props.modelValue,\n (v) => {\n if (asText(v) !== draft.value) draft.value = asText(v)\n },\n)\nconst input = ref<HTMLInputElement | null>(null)\nonMounted(() => input.value?.focus())\n\nconst isList = () => props.op === 'in' || props.op === 'not_in'\nconst normalize = (s: string) =>\n props.column.type === 'uppercase'\n ? s.toLocaleUpperCase()\n : props.column.type === 'lowercase'\n ? s.toLocaleLowerCase()\n : s\nconst commit = () => {\n const s = normalize(draft.value).trim()\n if (isList()) {\n const parts = s\n .split(/[\\n,;]+/)\n .map((p) => p.trim())\n .filter(Boolean)\n emit('update:modelValue', parts)\n } else emit('update:modelValue', s)\n}\nlet timer: ReturnType<typeof setTimeout> | undefined\nconst onInput = (e: Event) => {\n draft.value = normalize((e.target as HTMLInputElement).value)\n clearTimeout(timer)\n timer = setTimeout(commit, 250)\n}\nconst onEnter = () => {\n clearTimeout(timer)\n commit()\n emit('done')\n}\nonBeforeUnmount(() => clearTimeout(timer))\n</script>\n\n<template>\n <label class=\"dt-input dt-editor-text\">\n <input\n ref=\"input\"\n :value=\"draft\"\n type=\"text\"\n autocomplete=\"off\"\n @input=\"onInput\"\n @keydown.enter.prevent=\"onEnter\"\n />\n </label>\n</template>\n","<script setup lang=\"ts\">\n// Metin editörü (04 §3): 250 ms sonra ve Enter'da uygular; Enter popover'ı kapatır. `id` sütununda `in`/`not_in` için\n// yapıştırılan liste (satır sonu / virgül / noktalı virgül) değer dizisine ayrılır (03); uppercase/lowercase çevirir.\nimport { onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport type { ColumnDef } from '../../types/columns'\nimport type { FilterOp } from '../../types/query'\n\nconst props = defineProps<{ column: ColumnDef; op: FilterOp; modelValue: unknown }>()\nconst emit = defineEmits<{ 'update:modelValue': [value: string | Array<string | number>]; done: [] }>()\n\nconst asText = (v: unknown) => (Array.isArray(v) ? v.join(', ') : typeof v === 'string' ? v : '')\nconst draft = ref(asText(props.modelValue))\nwatch(\n () => props.modelValue,\n (v) => {\n if (asText(v) !== draft.value) draft.value = asText(v)\n },\n)\nconst input = ref<HTMLInputElement | null>(null)\nonMounted(() => input.value?.focus())\n\nconst isList = () => props.op === 'in' || props.op === 'not_in'\nconst normalize = (s: string) =>\n props.column.type === 'uppercase'\n ? s.toLocaleUpperCase()\n : props.column.type === 'lowercase'\n ? s.toLocaleLowerCase()\n : s\nconst commit = () => {\n const s = normalize(draft.value).trim()\n if (isList()) {\n const parts = s\n .split(/[\\n,;]+/)\n .map((p) => p.trim())\n .filter(Boolean)\n emit('update:modelValue', parts)\n } else emit('update:modelValue', s)\n}\nlet timer: ReturnType<typeof setTimeout> | undefined\nconst onInput = (e: Event) => {\n draft.value = normalize((e.target as HTMLInputElement).value)\n clearTimeout(timer)\n timer = setTimeout(commit, 250)\n}\nconst onEnter = () => {\n clearTimeout(timer)\n commit()\n emit('done')\n}\nonBeforeUnmount(() => clearTimeout(timer))\n</script>\n\n<template>\n <label class=\"dt-input dt-editor-text\">\n <input\n ref=\"input\"\n :value=\"draft\"\n type=\"text\"\n autocomplete=\"off\"\n @input=\"onInput\"\n @keydown.enter.prevent=\"onEnter\"\n />\n </label>\n</template>\n"],"mappings":"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"}