@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.
- package/CHANGELOG.md +32 -0
- package/LICENSE +21 -0
- package/README.md +179 -2
- package/dist/DateEditor-BTIZMwf1.js +224 -0
- package/dist/DateEditor-BTIZMwf1.js.map +1 -0
- package/dist/FiltersSheet-o2HaQuhq.js +285 -0
- package/dist/FiltersSheet-o2HaQuhq.js.map +1 -0
- package/dist/Layer-Di-tPd8b.js +106 -0
- package/dist/Layer-Di-tPd8b.js.map +1 -0
- package/dist/PhoneMoreSheet-gfkH96RR.js +227 -0
- package/dist/PhoneMoreSheet-gfkH96RR.js.map +1 -0
- package/dist/TextEditor-DPqiiRau.js +331 -0
- package/dist/TextEditor-DPqiiRau.js.map +1 -0
- package/dist/index.d.ts +711 -0
- package/dist/index.js +3331 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin-DhgcjEdi.js +813 -0
- package/dist/plugin-DhgcjEdi.js.map +1 -0
- package/dist/query-DQWMlX0m.js +2121 -0
- package/dist/query-DQWMlX0m.js.map +1 -0
- package/dist/shadcn-bridge-hsl.css +22 -0
- package/dist/shadcn-bridge.css +23 -0
- package/dist/sheet.d.ts +622 -0
- package/dist/sheet.js +3783 -0
- package/dist/sheet.js.map +1 -0
- package/dist/style.css +2 -0
- package/package.json +85 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-DQWMlX0m.js","names":["badge","_hoisted_1","_hoisted_2","_hoisted_3","_openBlock","_createElementBlock","_normalizeClass","_Fragment","_renderList","_createBlock","_unref","_withCtx","_createVNode","_createElementVNode","_resolveDynamicComponent","_createTextVNode","_toDisplayString","_createCommentVNode","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_openBlock","_createElementBlock","_createBlock","_unref","_withCtx","_createVNode","_createElementVNode","_withKeys","_withModifiers","_Fragment","_createTextVNode","_toDisplayString","_createCommentVNode","_renderList","_normalizeClass","_resolveDynamicComponent","_sfc_main","CellActions","RowMenu","$slots","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","props","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","_createBlock","_resolveDynamicComponent","_unref","_toDisplayString","_Fragment","_renderList","_renderSlot","_createCommentVNode","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_openBlock","_createElementBlock","_Fragment","_createElementVNode","_createVNode","_unref","_withDirectives","_vModelText","_createTextVNode","_toDisplayString","_renderList","_createCommentVNode","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_openBlock","_createElementBlock","_Fragment","_renderList","_createElementVNode","_toDisplayString","_createBlock","_resolveDynamicComponent","_unref","_createTextVNode","_createVNode","_sfc_main","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_useModel","_openBlock","_createBlock","_unref","_withCtx","_createVNode","_createElementVNode","_normalizeClass","_createElementBlock","_toDisplayString","_createCommentVNode","_Fragment","_renderList","_createTextVNode","ColumnsPanel","SortPanel","_sfc_main","_hoisted_1","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","_createVNode","_unref","_createBlock","_toDisplayString","_createCommentVNode","_sfc_main","_useModel","_openBlock","_createBlock","_unref","_withCtx","_createVNode","_createTextVNode","_toDisplayString","_createCommentVNode","_createElementVNode","_normalizeClass","_sfc_main","useDataTableContext","cache","cached","key","kind","locale","options","v","make","DATE_ONLY","toDate","value","m","DAY_MS","startOfDay","d","createFormat","nf","o","df","minus","s","intFmt","byDp","f","dp","decimalFmt","percentFmt","relativeFormat","n","sameYear","today","diffMs","now","abs","rtf","style","items","formats","getFormat","isEmptyValue","optionLabel","urlHost","currencyCode","def","row","formatCell","env","fmt","i18n","ids","id","formatArrayItem","itemType","RemoteLabels","shallowRef","hit","columnId","remote","p","batch","flight","num","txt","badge$1","TYPE_SPECS","defaultTrack","isNumericType","type","alignOf","TYPE_LABEL","typeLabelKey","readPath","path","features","tableFeatures","trackCss","t","trackMin","offsetVarName","useColumnLayout","defs","computed","toValue","defById","rowKey","layout","minOf","tanstackColumns","known","stateOf","start","l","end","visibility","sizing","w","initialState","table","useTable","headerById","h","toLayoutColumn","col","phone","isPrimary","c","startCols","centerCols","endCols","isPinnedCol","i","all","center","columns","trackOf","resized","pinned","colsVar","offsetVars","out","left","minWidth","sum","panel","counts","move","ordered","at","me","region","j","delta","other","apply","min","clamped","px","side","visible","toneClass","tone","toneStyle","AVATAR_TONES","avatarTone","hash","ch","initialsOf","label","badge","icon","more","cls","tip","count","mono","text","avatar","user","stars","max","PhStar","bar","pct","link","external","children","cellFillStyle","resolveUsers","u","renderCellContent","formatted","firstLine","PhArrowsOutSimple","PhArrowUpRight","href","PhCheck","PhX","PhMinus","opt","vals","shown","users","late","seps","sepsOf","parts","parseNumber","comma","dot","decimal","EMPTY","NUMBER","TEXT","LIST","DATE","CASED","OPERATORS","DEFAULT_OP","operatorsOf","defaultOperator","shapeOf","op","editorOf","isObj","isComplete","chip","toCondition","changeOperator","shape","keep","opLabel","valueCount","isoDay","addDays","weekStart","resolvePreset","preset","qm","dayOf","dateArg","isEmptyVal","lower","matches","cond","cell","day","needle","item","wanted","r","shortNum","summarize","unit","from","to","toText","values","labels","x","people","noun","INTERACTIVE_SELECTOR","isInteractive","target","within","isTextInput","el","hasTextSelection","isPlainRowClick","event","rowEl","downPoint","mac","MOVE_KBD","SAVE_KBD","UNDO_KBD","REDO_KBD","FIND_KBD","FILL_KBD","REMOVE_KBD","inlineActionsOf","actions","a","_hoisted_1$7","_hoisted_2$6","_hoisted_3$6","CellActions_default","defineComponent","props","__props","always","buttons","overflow","disabledOf","tipOf","run","toRaw","openBlock","createElementBlock","normalizeClass","Fragment","renderList","createBlock","unref","DropdownMenuRoot","withCtx","createVNode","DropdownMenuTrigger","createElementVNode","resolveDynamicComponent","DropdownMenuPortal","DropdownMenuContent","DropdownMenuItem","createTextVNode","toDisplayString","PhDotsThree","createCommentVNode","_hoisted_1$6","_hoisted_2$5","_hoisted_3$5","_hoisted_4$5","_hoisted_5$4","_hoisted_6$3","_hoisted_7$2","RowMenu_default","__emit","emit","inline","hasItems","firstDestructive","subOf","isDisabled","onOpen","_cache","withKeys","withModifiers","DropdownMenuSeparator","Row_default","demote","onMounted","onUpdated","params","errorTip","errorId","errorIcon","PhWarningCircle","inlineButton","reason","descId","renderCell","readPathFast","align","content","main","secondary","overlay","withExpand","lead","PhCaretRight","selectCell","e","menuCell","onContextmenu","withFill","fillCell","render","WIDTHS","SkeletonRow_default","gutterCell","width","DELAY","useDelegatedTooltip","ref","open","timer","anchor","tipped","hide","show","onOver","onOut","onFocusin","root","onBeforeUnmount","usePreferences","prefs","reactive","defaults","tableId","ready","adapter","got","set","patch","_hoisted_1$5","_hoisted_2$4","_hoisted_3$4","_hoisted_4$4","StateMessage_default","PhPackage","PhFunnel","PhMagnifyingGlass","PhFile","line","_ctx","renderSlot","_hoisted_1$4","_hoisted_2$3","_hoisted_3$3","_hoisted_4$3","_hoisted_5$3","_hoisted_6$2","_hoisted_7$1","_hoisted_8$1","_hoisted_9$1","_hoisted_10$1","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","ColumnsPanel_default","find","pinnedCols","shownCols","hiddenCols","withDirectives","$event","vModelText","PhLock","PhArrowUp","PhArrowDown","PhEye","PhEyeSlash","_hoisted_1$3","_hoisted_2$2","_hoisted_3$2","_hoisted_4$2","_hoisted_5$2","_hoisted_6$1","SortPanel_default","_hoisted_1$2","_hoisted_2$1","_hoisted_3$1","_hoisted_4$1","_hoisted_5$1","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","DisplayPopover_default","\"open\"","\"openModifiers\"","useModel","DENSITIES","view","headerOf","sortSummary","first","PopoverRoot","PopoverTrigger","PhSlidersHorizontal","PopoverPortal","PopoverContent","ToggleGroupRoot","ToggleGroupItem","SwitchRoot","SwitchThumb","PhCaretLeft","_hoisted_1$1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","SearchBox_default","__expose","input","draft","commit","immediate","onKeydown","PhXCircle","_hoisted_1","ConfirmDialog_default","confirm","AlertDialogRoot","AlertDialogPortal","AlertDialogOverlay","AlertDialogContent","AlertDialogTitle","AlertDialogDescription","AlertDialogCancel","isEmpty","comparator","empty","ea","eb","b","collator","ME"],"sources":["../src/core/format/index.ts","../src/core/cells/format.ts","../src/core/cells/remoteLabels.ts","../src/core/cells/specs.ts","../src/core/columns/readPath.ts","../src/core/columns/useColumnLayout.ts","../src/core/cells/renderCell.ts","../src/core/format/parse.ts","../src/core/filters/model.ts","../src/core/interaction/isInteractive.ts","../src/core/interaction/kbd.ts","../src/core/grid/inlineActions.ts","../src/core/cells/CellActions.vue","../src/core/cells/CellActions.vue","../src/core/grid/RowMenu.vue","../src/core/grid/RowMenu.vue","../src/core/grid/Row.ts","../src/core/grid/SkeletonRow.ts","../src/core/grid/useDelegatedTooltip.ts","../src/core/preferences/usePreferences.ts","../src/core/states/StateMessage.vue","../src/core/states/StateMessage.vue","../src/core/toolbar/ColumnsPanel.vue","../src/core/toolbar/ColumnsPanel.vue","../src/core/toolbar/SortPanel.vue","../src/core/toolbar/SortPanel.vue","../src/core/toolbar/DisplayPopover.vue","../src/core/toolbar/DisplayPopover.vue","../src/core/toolbar/SearchBox.vue","../src/core/toolbar/SearchBox.vue","../src/core/ui/ConfirmDialog.vue","../src/core/ui/ConfirmDialog.vue","../src/core/cells/compare.ts","../src/types/query.ts"],"sourcesContent":["// Intl biçimlendiricileri: locale + seçenek anahtarıyla önbellekli (01: hücre başına oluşturmak 10k satırda 134 ms, önbellekli 3,5 ms).\n// Kurallar 09 · Biçimlendirme: gerçek eksi işareti U+2212, yüzde Intl ile (tr: %68), para = sayı + ayrı ISO kodu.\nimport type { IsoDate } from '../../types/core'\n\nexport const MINUS = '−'\n\nconst cache = new Map<string, unknown>()\nfunction cached<T>(kind: string, locale: string, options: object | undefined, make: () => T): T {\n const key = `${kind}|${locale}|${options ? JSON.stringify(options) : ''}`\n let v = cache.get(key) as T | undefined\n if (v === undefined) {\n v = make()\n cache.set(key, v)\n }\n return v\n}\n\nconst DATE_ONLY = /^(\\d{4})-(\\d{2})-(\\d{2})$/\n\n/** ISO tarih (\"2026-10-24\") yerel gün olarak okunur (UTC gece yarısı kayması olmasın); tarih-saat ve Date olduğu gibi. */\nexport function toDate(value: IsoDate | Date): Date {\n if (value instanceof Date) return value\n const m = DATE_ONLY.exec(value)\n return m ? new Date(+m[1]!, +m[2]! - 1, +m[3]!) : new Date(value)\n}\n\nconst DAY_MS = 86_400_000\nconst startOfDay = (d: Date): number => new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime()\n\nexport type Format = ReturnType<typeof createFormat>\n\nexport function createFormat(locale: string) {\n const nf = (o?: Intl.NumberFormatOptions) => cached('n', locale, o, () => new Intl.NumberFormat(locale, o))\n const df = (o: Intl.DateTimeFormatOptions) => cached('d', locale, o, () => new Intl.DateTimeFormat(locale, o))\n const minus = (s: string) => (s.includes('-') ? s.replace(/-/g, MINUS) : s)\n // Sıcak yol (hücre başına): JSON anahtarı üretmeden, hane sayısına göre küçük haritalar.\n const intFmt = nf({ maximumFractionDigits: 0 })\n const byDp = (make: (dp: number) => Intl.NumberFormat) => {\n const m = new Map<number, Intl.NumberFormat>()\n return (dp: number) => {\n let f = m.get(dp)\n if (!f) m.set(dp, (f = make(dp)))\n return f\n }\n }\n const decimalFmt = byDp((dp) => nf({ minimumFractionDigits: dp, maximumFractionDigits: dp }))\n const percentFmt = byDp((dp) => nf({ style: 'percent', minimumFractionDigits: dp, maximumFractionDigits: dp }))\n\n const relativeFormat = (style: 'long' | 'short') =>\n cached('r', locale, { style }, () => new Intl.RelativeTimeFormat(locale, { numeric: 'auto', style }))\n\n /** \"2 hours ago\" / \"in 3 days\"; en büyük anlamlı birim. Footer tazeliği `short` (\"14 min. ago\"). */\n const relative = (value: IsoDate | Date, now: Date = new Date(), style: 'long' | 'short' = 'long'): string => {\n const diffMs = toDate(value).getTime() - now.getTime()\n const abs = Math.abs(diffMs)\n const rtf = relativeFormat(style)\n if (abs < 60_000) return rtf.format(0, 'second')\n if (abs < 3_600_000) return rtf.format(Math.round(diffMs / 60_000), 'minute')\n if (abs < DAY_MS) return rtf.format(Math.round(diffMs / 3_600_000), 'hour')\n if (abs < 30 * DAY_MS) return rtf.format(Math.round(diffMs / DAY_MS), 'day')\n if (abs < 365 * DAY_MS) return rtf.format(Math.round(diffMs / (30 * DAY_MS)), 'month')\n return rtf.format(Math.round(diffMs / (365 * DAY_MS)), 'year')\n }\n\n return {\n locale,\n int: (n: number): string => minus(intFmt.format(n)),\n /** Her zaman `dp` hane (noktalar hizalanır). */\n decimal: (n: number, dp = 2): string => minus(decimalFmt(dp).format(n)),\n /** 68 → \"68%\" (tr: \"%68\"). */\n percent: (n: number, dp = 0): string => minus(percentFmt(dp).format(n / 100)),\n /** Çip özetleri: 250000 → \"250K\" (tr: \"250 B\"). */\n compact: (n: number): string => minus(nf({ notation: 'compact', maximumFractionDigits: 0 }).format(n)),\n /** \"Oct 24\"; başka yılsa \"Mar 3, 2025\". */\n date: (value: IsoDate | Date, today: Date = new Date()): string => {\n const d = toDate(value)\n const sameYear = d.getFullYear() === today.getFullYear()\n return df(\n sameYear ? { month: 'short', day: 'numeric' } : { month: 'short', day: 'numeric', year: 'numeric' },\n ).format(d)\n },\n /** \"Oct 17, 09:42\" (saat biçimi yerel ayardan). */\n dateTime: (value: IsoDate | Date, today: Date = new Date()): string => {\n const d = toDate(value)\n const sameYear = d.getFullYear() === today.getFullYear()\n return df({\n month: 'short',\n day: 'numeric',\n ...(sameYear ? {} : { year: 'numeric' }),\n hour: '2-digit',\n minute: '2-digit',\n }).format(d)\n },\n /** Tam zaman (tooltip): \"Oct 17, 2026, 09:42:10 GMT+3\". */\n dateTimeFull: (value: IsoDate | Date): string =>\n df({ dateStyle: 'medium', timeStyle: 'long' }).format(toDate(value)),\n relative,\n /** Gecikme gün sayısı; gelecekte veya bugünse 0. */\n daysLate: (value: IsoDate | Date, today: Date = new Date()): number =>\n Math.max(0, Math.floor((startOfDay(today) - startOfDay(toDate(value))) / DAY_MS)),\n list: (items: string[]): string =>\n cached('l', locale, undefined, () => new Intl.ListFormat(locale, { type: 'unit' })).format(items),\n collator: (): Intl.Collator =>\n cached('c', locale, undefined, () => new Intl.Collator(locale, { numeric: true, sensitivity: 'base' })),\n plural: (): Intl.PluralRules => cached('p', locale, undefined, () => new Intl.PluralRules(locale)),\n }\n}\n\nconst formats = new Map<string, Format>()\n/** Locale başına tek örnek. */\nexport function getFormat(locale: string): Format {\n let f = formats.get(locale)\n if (!f) {\n f = createFormat(locale)\n formats.set(locale, f)\n }\n return f\n}\n","// Tipin varsayılan metni (03): `formatted` olarak özel hücreye verilir, tooltip ve dışa aktarma da bunu kullanır.\nimport type { ColumnDef, OptionDef } from '../../types/columns'\nimport { toDate, type Format } from '../format'\nimport type { I18n } from '../i18n'\nimport type { RemoteLabels } from './remoteLabels'\n\nexport interface FormatEnv {\n fmt: Format\n i18n: I18n\n today: Date\n labels: RemoteLabels\n}\n\n/** null, undefined, '' ve boş dizi → boş (03 · Ortak kurallar). Sahte 0 yok: 0 bir değerdir. */\nexport const isEmptyValue = (v: unknown): boolean =>\n v === null || v === undefined || v === '' || (Array.isArray(v) && v.length === 0)\n\nexport const optionLabel = (options: OptionDef[] | undefined, value: unknown): string =>\n options?.find((o) => o.value === value)?.label ?? String(value)\n\n/** URL'den yalnızca host (03: protokol gizli). Geçersizse olduğu gibi. */\nexport function urlHost(value: string): string {\n try {\n return new URL(value).host\n } catch {\n return value\n }\n}\n\nexport function currencyCode<Row extends object>(def: Extract<ColumnDef<Row>, { type: 'currency' }>, row: Row): string {\n return typeof def.currency === 'function' ? def.currency(row) : def.currency\n}\n\nexport function formatCell<Row extends object>(def: ColumnDef<Row>, row: Row, value: unknown, env: FormatEnv): string {\n if (isEmptyValue(value)) return def.emptyText ?? '—'\n const { fmt, i18n } = env\n switch (def.type) {\n case 'int':\n return fmt.int(Number(value))\n case 'float':\n return fmt.decimal(Number(value), def.decimalPlaces ?? 2)\n case 'percentage':\n return fmt.percent(Number(value), def.decimalPlaces ?? 0)\n case 'star':\n return i18n.t('cell.rating', { value: Number(value), max: def.max ?? 5 })\n case 'currency':\n return `${fmt.decimal(Number(value), def.decimalPlaces ?? 2)} ${currencyCode(def, row)}`\n case 'url':\n return urlHost(String(value))\n case 'boolean':\n return i18n.t(value ? 'common.yes' : 'common.no')\n case 'select':\n return optionLabel(def.options, value)\n case 'multiselect':\n return fmt.list((value as unknown[]).map((v) => optionLabel(def.options, v)))\n case 'ajax':\n return env.labels.label(def.id as string, def.remote, value as string | number)\n case 'user': {\n const ids = (Array.isArray(value) ? value : [value]) as Array<string | number>\n return fmt.list(\n ids.map(\n (id) => def.options?.find((o) => o.value === id)?.label ?? env.labels.label(def.id as string, def.remote, id),\n ),\n )\n }\n case 'date':\n // Geçersiz tarih metni (sheet'te yazılan \"+\", \"abc\") biçimlendirilmez, olduğu gibi gösterilir; hata balonu söyler.\n if (Number.isNaN(toDate(value as string | Date).getTime())) return String(value)\n return fmt.date(value as string | Date, env.today)\n case 'datetime':\n if (Number.isNaN(toDate(value as string | Date).getTime())) return String(value)\n return def.relative\n ? fmt.relative(value as string | Date, env.today)\n : fmt.dateTime(value as string | Date, env.today)\n case 'object':\n return def.summary\n ? def.summary(value, row)\n : i18n.t('cell.fields', { count: typeof value === 'object' && value ? Object.keys(value).length : 0 })\n case 'array':\n return fmt.list((value as unknown[]).map((v) => formatArrayItem(def.itemType, v, fmt)))\n default:\n return String(value)\n }\n}\n\nexport function formatArrayItem(\n itemType: 'string' | 'int' | 'float' | 'id' | undefined,\n v: unknown,\n fmt: Format,\n): string {\n if (itemType === 'int') return fmt.int(Number(v))\n if (itemType === 'float') return fmt.decimal(Number(v))\n return String(v)\n}\n","// `ajax` ve `user` hücreleri için etiket önbelleği: id'ler toplanır, bir mikro görevde tek `resolve` çağrısıyla çözülür (03).\n// Çözülene kadar ham değer görünür; çözülünce `version` artar ve okuyan hücreler yeniden çizilir.\nimport { shallowRef } from 'vue'\nimport type { OptionDef, RemoteOptions } from '../../types/columns'\n\nexport class RemoteLabels {\n private readonly cache = new Map<string, Map<string | number, OptionDef>>()\n private readonly pending = new Map<string, { remote: RemoteOptions; ids: Set<string | number> }>()\n private readonly inFlight = new Map<string, Set<string | number>>()\n private scheduled = false\n /** Reaktif sürüm: her çözümde artar. */\n readonly version = shallowRef(0)\n\n option(columnId: string, remote: RemoteOptions | undefined, id: string | number): OptionDef | undefined {\n void this.version.value // bağımlılık\n const hit = this.cache.get(columnId)?.get(id)\n if (hit || !remote) return hit\n if (!this.inFlight.get(columnId)?.has(id)) {\n let p = this.pending.get(columnId)\n if (!p) this.pending.set(columnId, (p = { remote, ids: new Set() }))\n p.ids.add(id)\n this.schedule()\n }\n return undefined\n }\n\n label(columnId: string, remote: RemoteOptions | undefined, id: string | number): string {\n return this.option(columnId, remote, id)?.label ?? String(id)\n }\n\n /** Testler ve uygulama için: dış kaynaktan gelen etiketleri doğrudan yaz. */\n seed(columnId: string, options: OptionDef[]) {\n let m = this.cache.get(columnId)\n if (!m) this.cache.set(columnId, (m = new Map()))\n for (const o of options) m.set(o.value, o)\n this.version.value++\n }\n\n private schedule() {\n if (this.scheduled) return\n this.scheduled = true\n queueMicrotask(() => {\n this.scheduled = false\n for (const [columnId, { remote, ids }] of this.pending) {\n this.pending.delete(columnId)\n const batch = [...ids]\n let flight = this.inFlight.get(columnId)\n if (!flight) this.inFlight.set(columnId, (flight = new Set()))\n batch.forEach((id) => flight.add(id))\n remote\n .resolve(batch, { signal: new AbortController().signal })\n .then((options) => this.seed(columnId, options))\n .catch(() => {\n /* ham değer görünür kalır; yeniden deneme uygulamanın (D18) */\n })\n .finally(() => batch.forEach((id) => flight.delete(id)))\n }\n })\n }\n}\n","// Tip başına sabitler (03 · Ortak kurallar, 05 · Sütun genişlikleri): hizalama, varsayılan genişlik, skeleton biçimi,\n// sıralanabilirlik. Görünüm (render) ayrı dosyada: renderCell.ts.\nimport type { ColumnDef, ColumnType } from '../../types/columns'\n\n/** px ya da minmax(min, fr) (05: metin sütunları esner, diğerleri sabit). */\nexport type Track = number | { min: number; fr: number }\n\nexport type SkeletonShape = 'text' | 'number' | 'badge' | 'person'\n\nexport interface TypeSpec {\n align: 'left' | 'right'\n width: Track\n skeleton: SkeletonShape\n sortable: boolean\n filterable: boolean\n /** Toolbar aramasına varsayılan dahil (api-draft `searchable`). */\n searchable: boolean\n /** Sayı ailesi: tabular-nums + sağa hizalı header. */\n numeric: boolean\n}\n\nconst num = (width: number): TypeSpec => ({\n align: 'right',\n width,\n skeleton: 'number',\n sortable: true,\n filterable: true,\n searchable: false,\n numeric: true,\n})\nconst txt = (width: Track, searchable = true): TypeSpec => ({\n align: 'left',\n width,\n skeleton: 'text',\n sortable: true,\n filterable: true,\n searchable,\n numeric: false,\n})\nconst badge = (width: number): TypeSpec => ({\n align: 'left',\n width,\n skeleton: 'badge',\n sortable: true,\n filterable: true,\n searchable: false,\n numeric: false,\n})\n\nexport const TYPE_SPECS: Record<ColumnType, TypeSpec> = {\n int: num(112),\n float: num(112),\n percentage: num(112),\n star: { ...txt(112, false), skeleton: 'text' },\n currency: num(148),\n string: txt({ min: 160, fr: 1.2 }),\n text: txt({ min: 160, fr: 1.2 }),\n uppercase: txt({ min: 160, fr: 1.2 }),\n lowercase: txt({ min: 160, fr: 1.2 }),\n phone: txt(156),\n color: { ...txt(132, false) },\n email: txt(200),\n url: { ...txt(180, false) },\n id: txt(128),\n boolean: badge(96),\n select: badge(140),\n multiselect: { ...badge(180), sortable: false },\n ajax: badge(180),\n user: { ...badge(156), skeleton: 'person' },\n date: txt(132, false),\n datetime: txt(156, false),\n object: { ...txt(180, false), sortable: false, filterable: false },\n array: { ...txt(160, false), sortable: false },\n}\n\n/** Varsayılan genişlik: birincil `id` 136 (expand oku için), birincil metin minmax(200, 1.6fr), percentage bar 156. */\nexport function defaultTrack(def: ColumnDef): Track {\n if (def.width !== undefined) return def.width\n if (def.type === 'percentage' && def.display === 'bar') return 156\n if (def.primary) return def.type === 'id' ? 136 : { min: 200, fr: 1.6 }\n return TYPE_SPECS[def.type].width\n}\n\nexport const isNumericType = (type: ColumnType): boolean => TYPE_SPECS[type].numeric\n\nexport function alignOf(def: ColumnDef): 'left' | 'right' | 'center' {\n return def.align ?? TYPE_SPECS[def.type].align\n}\n\n/** Sütun menüsü başlığı (05 §4): tipin 09 `type.*` anahtarı. */\nconst TYPE_LABEL: Record<ColumnType, string> = {\n int: 'number',\n float: 'number',\n percentage: 'percentage',\n star: 'rating',\n currency: 'currency',\n string: 'text',\n text: 'longText',\n uppercase: 'text',\n lowercase: 'text',\n phone: 'phone',\n color: 'colour',\n email: 'email',\n url: 'link',\n id: 'id',\n boolean: 'boolean',\n select: 'option',\n multiselect: 'options',\n ajax: 'relation',\n user: 'person',\n date: 'date',\n datetime: 'datetime',\n object: 'object',\n array: 'list',\n}\nexport const typeLabelKey = (type: ColumnType): string => `type.${TYPE_LABEL[type]}`\n","/** Nokta yolu okuma: 'customer.title' → row.customer?.title (null-güvenli). En fazla 4 seviye (api-draft). */\nexport function readPath(row: unknown, path: string): unknown {\n let v: unknown = row\n for (const key of path.split('.')) {\n if (v === null || v === undefined) return undefined\n v = (v as Record<string, unknown>)[key]\n }\n return v\n}\n","// TanStack Table'ın sütun modeli (01 · TanStack sınırı, D23): sıra, görünürlük, genişlik, resize, sabitleme.\n// Bu dosya dışında (grid/, cells/ …) TanStack import edilmez; dışarıya kendi tiplerimiz çıkar.\n//\n// Performans (05 · Resize): `columns` yalnızca görünürlük/sıra/sabitleme değişince yenilenir. Genişlikler ve sabit\n// ofsetleri ayrı computed'lardır (`colsVar`, `offsetVars`) ve GridRoot bunları Vue render'ı dışında CSS değişkeni\n// olarak yazar; satırlar resize sırasında yeniden çizilmez.\nimport {\n columnOrderingFeature,\n columnPinningFeature,\n columnResizingFeature,\n columnSizingFeature,\n columnVisibilityFeature,\n tableFeatures,\n useTable,\n type Column,\n type ColumnDef as TanstackColumnDef,\n type Header,\n} from '@tanstack/vue-table'\nimport { computed, toValue, type ComputedRef, type MaybeRefOrGetter } from 'vue'\nimport type { ColumnDef } from '../../types/columns'\nimport type { ColumnLayout } from '../../types/query'\nimport { defaultTrack, type Track } from '../cells/specs'\nimport { readPath } from './readPath'\n\nexport const MIN_COLUMN_WIDTH = 80\n\nconst features = tableFeatures({\n columnSizingFeature,\n columnResizingFeature,\n columnOrderingFeature,\n columnPinningFeature,\n columnVisibilityFeature,\n})\ntype Features = typeof features\n\nexport type PinSide = 'start' | 'end' | null\n\n/** Grid'in çizdiği, TanStack'ten bağımsız sütun görünümü. Genişlik burada değil, `colsVar`/`offsetVars`'ta. */\nexport interface LayoutColumn<Row extends object = object> {\n id: string\n def: ColumnDef<Row>\n pinned: PinSide\n /** Bölgenin kenarındaki sabit sütun: kaydırma gölgesini bu taşır. */\n pinEdge: boolean\n /** Sabit hücrelerin sticky ofsetini taşıyan CSS değişkeni (`--dt-off-…`). */\n offsetVar: string\n /** Dahili: resize tutamacı için TanStack header'ı. */\n header: Header<Features, Row, unknown>\n}\n\nexport interface ColumnLayoutOptions<Row extends object> {\n /** Telefon (05 §11): yalnızca birincil sütun sola sabit; sağa sabit yok. */\n phone?: MaybeRefOrGetter<boolean>\n columns: MaybeRefOrGetter<Array<ColumnDef<Row>>>\n rows: MaybeRefOrGetter<Row[]>\n /** Satır kimliği yolu. Varsayılan 'id'. */\n rowKey?: MaybeRefOrGetter<string>\n /** Görünümden gelen düzen (Faz 3b); verilmezse sütun tanımları. */\n layout?: MaybeRefOrGetter<Partial<ColumnLayout> | undefined>\n /** DataSheet (07 §3): sola sabit son sütun (birincil ad) px değil minmax ile esner; ofseti kimseye gerekmez. */\n flexLastStart?: boolean\n}\n\nconst trackCss = (t: Track): string => (typeof t === 'number' ? `${t}px` : `minmax(${t.min}px, ${t.fr}fr)`)\nconst trackMin = (t: Track): number => (typeof t === 'number' ? t : t.min)\n/** Sütun id'si CSS özel özellik adına: 'product.name' → '--dt-off-product_name'. */\nexport const offsetVarName = (id: string): string => `--dt-off-${id.replace(/[^a-zA-Z0-9_-]/g, '_')}`\n\nexport function useColumnLayout<Row extends object>(options: ColumnLayoutOptions<Row>) {\n const defs = computed(() => toValue(options.columns))\n const defById = computed(() => new Map(defs.value.map((d) => [d.id as string, d])))\n const rowKey = computed(() => toValue(options.rowKey) ?? 'id')\n const layout = computed(() => toValue(options.layout))\n const minOf = (d: ColumnDef<Row>): number => Math.min(d.minWidth ?? MIN_COLUMN_WIDTH, trackMin(defaultTrack(d)))\n\n // TanStack sütunları: her zaman açık id + accessorFn (accessorKey asla: nokta → alt çizgi çakışması, 01).\n const tanstackColumns = computed<Array<TanstackColumnDef<Features, Row, unknown>>>(() =>\n defs.value.map((d) => {\n const id = d.id as string\n return {\n id,\n accessorFn: d.accessor ?? ((row: Row) => readPath(row, id)),\n size: trackMin(defaultTrack(d)),\n // Açık `width` 80'in altındaysa (ör. 56 px aksiyon sütunu) o geçerli.\n minSize: minOf(d),\n maxSize: d.maxWidth,\n enableHiding: !(d.alwaysVisible || d.primary),\n }\n }),\n )\n\n /** Görünümden gelen düzen → TanStack durumu (04 §7): bilinmeyen sütun atlanır; `visible` varsa beyaz listedir; gizlenemeyen hep açık. */\n const known = (ids: string[] | undefined) => ids?.filter((id) => defById.value.has(id))\n const stateOf = (l: Partial<ColumnLayout> | undefined) => {\n const start = known(l?.pinned?.left) ?? defs.value.filter((d) => d.pinned === 'left').map((d) => d.id as string)\n const end = known(l?.pinned?.right) ?? defs.value.filter((d) => d.pinned === 'right').map((d) => d.id as string)\n const visibility: Record<string, boolean> = {}\n for (const d of defs.value) {\n const id = d.id as string\n visibility[id] = d.alwaysVisible || d.primary || (l?.visible ? l.visible.includes(id) : !d.hidden)\n }\n const sizing: Record<string, number> = {}\n for (const [id, w] of Object.entries(l?.widths ?? {})) if (defById.value.has(id)) sizing[id] = w\n return {\n columnPinning: { start, end },\n columnVisibility: visibility,\n columnOrder: known(l?.order) ?? [],\n columnSizing: sizing,\n }\n }\n const initialState = computed(() => stateOf(layout.value))\n\n const table = useTable<Features, Row>({\n features,\n columns: tanstackColumns,\n data: computed(() => toValue(options.rows)),\n getRowId: (row: Row) => String(readPath(row, rowKey.value)),\n initialState: initialState.value,\n columnResizeMode: 'onChange',\n })\n\n const headerById = computed(() => new Map(table.getFlatHeaders().map((h) => [h.column.id, h])))\n\n const toLayoutColumn = (\n col: Column<Features, Row, unknown>,\n pinned: PinSide,\n pinEdge: boolean,\n ): LayoutColumn<Row> => ({\n id: col.id,\n def: defById.value.get(col.id)!,\n pinned,\n pinEdge,\n offsetVar: offsetVarName(col.id),\n header: headerById.value.get(col.id)!,\n })\n\n // Telefonda (05 §11) yalnızca birincil sütun sola sabit, sağa sabit yok; kayıtlı sabitleme durumu (`state`) değişmez.\n const phone = computed(() => !!toValue(options.phone))\n const isPrimary = (c: Column<Features, Row, unknown>) => !!defById.value.get(c.id)?.primary\n const startCols = computed(() =>\n phone.value ? table.getVisibleLeafColumns().filter(isPrimary) : table.getStartVisibleLeafColumns(),\n )\n const centerCols = computed(() =>\n phone.value ? table.getVisibleLeafColumns().filter((c) => !isPrimary(c)) : table.getCenterVisibleLeafColumns(),\n )\n const endCols = computed(() => (phone.value ? [] : table.getEndVisibleLeafColumns()))\n const isPinnedCol = (c: Column<Features, Row, unknown>) => (phone.value ? isPrimary(c) : c.getIsPinned() !== false)\n\n const start = computed(() => startCols.value.map((c, i, all) => toLayoutColumn(c, 'start', i === all.length - 1)))\n const center = computed(() => centerCols.value.map((c) => toLayoutColumn(c, null, false)))\n const end = computed(() => endCols.value.map((c, i) => toLayoutColumn(c, 'end', i === 0)))\n const columns = computed(() => [...start.value, ...center.value, ...end.value])\n\n /** Sütunun gerçek track'i: sabit ve resize edilmiş sütunlar px, diğerleri tip varsayılanı (minmax olabilir). */\n const trackOf = (col: Column<Features, Row, unknown>, pinned: boolean): Track => {\n const resized = table.atoms.columnSizing.get()[col.id]\n return pinned ? col.getSize() : resized !== undefined ? resized : defaultTrack(defById.value.get(col.id)!)\n }\n\n /** grid-template-columns: sabit px, orta track'ler, bölge sonunda `auto` dolgu (05 · Resize). */\n const colsVar: ComputedRef<string> = computed(() =>\n [\n ...startCols.value.map((c, i, all) => trackCss(trackOf(c, !(options.flexLastStart && i === all.length - 1)))),\n ...centerCols.value.map((c) => trackCss(trackOf(c, false))),\n 'auto',\n ...endCols.value.map((c) => trackCss(trackOf(c, true))),\n ].join(' '),\n )\n\n /** Sabit hücrelerin sticky ofsetleri: start için left, end için right (TanStack getStart / getAfter). */\n const offsetVars = computed<Record<string, string>>(() => {\n const out: Record<string, string> = {}\n let left = 0\n for (const c of startCols.value) {\n out[offsetVarName(c.id)] = `${left}px`\n left += c.getSize()\n }\n for (const c of endCols.value) out[offsetVarName(c.id)] = `${c.getAfter('end')}px`\n return out\n })\n\n /** Satır ve header'ın en az genişliği; kabı aşarsa yatay kayar. */\n const minWidth = computed(() =>\n table.getVisibleLeafColumns().reduce((sum, c) => sum + trackMin(trackOf(c, isPinnedCol(c))), 0),\n )\n\n /** Columns paneli (05 §5): tüm yaprak sütunlar etkin sırada; Pinned / Shown / Hidden bölümleri buradan türer. */\n const panel = computed(() =>\n table\n .getOrderColumnsFn()(table.getAllLeafColumns())\n .map((c) => {\n const def = defById.value.get(c.id)!\n const pinned = c.getIsPinned()\n return {\n id: c.id,\n def,\n visible: c.getIsVisible(),\n pinned: pinned === false ? null : pinned,\n canHide: c.getCanHide(),\n }\n }),\n )\n const counts = computed(() => ({\n shown: table.getVisibleLeafColumns().length,\n total: table.getAllLeafColumns().length,\n }))\n\n /** Move left/right (D22: sürükleme yok): aynı sabitleme bölgesindeki görünür komşuyla yer değiştirir. */\n const move = (id: string, delta: -1 | 1) => {\n const ordered = table.getOrderColumnsFn()(table.getAllLeafColumns())\n const at = ordered.findIndex((c) => c.id === id)\n const me = ordered[at]\n if (!me) return\n const region = me.getIsPinned()\n let j = at + delta\n while (j >= 0 && j < ordered.length && !(ordered[j]!.getIsVisible() && ordered[j]!.getIsPinned() === region))\n j += delta\n const other = ordered[j]\n if (!other) return\n const ids = ordered.map((c) => c.id)\n ids[at] = other.id\n ids[j] = me.id\n table.setColumnOrder(ids)\n }\n\n const apply = (l?: Partial<ColumnLayout>) => {\n const s = stateOf(l)\n table.setColumnOrder(s.columnOrder)\n table.setColumnVisibility(s.columnVisibility)\n table.setColumnPinning(s.columnPinning)\n table.setColumnSizing(s.columnSizing)\n }\n /** Verilmezse `layout` seçeneğine (o da yoksa sütun tanımlarına) döner. */\n const reset = (l: Partial<ColumnLayout> | undefined = layout.value) => apply(l)\n\n /** Etkin düzen (görünüme yazılan biçim): sıra, görünürler, yalnızca değiştirilmiş genişlikler, sabitler. */\n const state = computed<ColumnLayout>(() => {\n const p = table.atoms.columnPinning.get()\n return {\n order: table\n .getOrderColumnsFn()(table.getAllLeafColumns())\n .map((c) => c.id),\n visible: table.getVisibleLeafColumns().map((c) => c.id),\n widths: { ...table.atoms.columnSizing.get() },\n pinned: { left: [...p.start], right: [...p.end] },\n }\n })\n /** Bir düzen yamasının uygulanmadan hesaplanan tam hali (Duplicate özeti, 04 §7). */\n const resolve = (l?: Partial<ColumnLayout>): ColumnLayout => {\n const s = stateOf(l)\n const ids = defs.value.map((d) => d.id as string)\n return {\n order: [...s.columnOrder, ...ids.filter((id) => !s.columnOrder.includes(id))],\n visible: ids.filter((id) => s.columnVisibility[id]),\n widths: s.columnSizing,\n pinned: { left: s.columnPinning.start, right: s.columnPinning.end },\n }\n }\n\n const resizing = computed(() => {\n const id = table.atoms.columnResizing.get().isResizingColumn\n return id ? { id, size: table.getColumn(id)?.getSize() ?? 0 } : null\n })\n\n return {\n columns,\n start,\n center,\n end,\n panel,\n counts,\n move,\n reset,\n apply,\n state,\n resolve,\n colsVar,\n offsetVars,\n minWidth,\n resizing,\n rowId: (row: Row) => String(readPath(row, rowKey.value)),\n widthOf: (id: string): number => table.getColumn(id)?.getSize() ?? 0,\n setWidth: (id: string, px: number) => {\n const def = defById.value.get(id)\n const min = def ? minOf(def) : MIN_COLUMN_WIDTH\n const clamped = Math.min(def?.maxWidth ?? Infinity, Math.max(min, Math.round(px)))\n table.setColumnSizing((s) => ({ ...s, [id]: clamped }))\n },\n resetWidth: (id: string) => table.getColumn(id)?.resetSize(),\n pin: (id: string, side: PinSide) => table.getColumn(id)?.pin(side ?? false),\n setVisible: (id: string, visible: boolean) => table.getColumn(id)?.toggleVisibility(visible),\n setOrder: (ids: string[]) => table.setColumnOrder(ids),\n }\n}\n\nexport type ColumnLayoutApi<Row extends object> = ReturnType<typeof useColumnLayout<Row>>\n","// 23 tipin hücre içeriği (03, brief §5.1, T8). Kabuk (hizalama, kesme, yoğunluk, zemin) Cell.vue'da; burada yalnızca içerik.\nimport { PhArrowUpRight, PhArrowsOutSimple, PhCheck, PhMinus, PhStar, PhX } from '@phosphor-icons/vue'\nimport { h, type Component, type VNodeChild } from 'vue'\nimport type { ColumnDef, OptionDef, UserOption } from '../../types/columns'\nimport type { Density, Tone } from '../../types/core'\nimport { currencyCode, formatArrayItem, formatCell, isEmptyValue, optionLabel, urlHost, type FormatEnv } from './format'\n\nexport interface RenderEnv extends FormatEnv {\n density: Density\n /** `pointer: coarse`: telefon numarası tel: linki olur. */\n coarse: boolean\n}\n\ntype ToneRef = Tone | { light: string; dark: string } | undefined\n\nconst toneClass = (tone: ToneRef): string => (typeof tone === 'object' ? 'dt-tone-custom' : `dt-tone-${tone ?? 'gray'}`)\nconst toneStyle = (tone: ToneRef) =>\n typeof tone === 'object' ? { '--dt-tone-light': tone.light, '--dt-tone-dark': tone.dark } : undefined\n\n/** Avatar rengi kişiye sabit: id hash'i → 6 tondan biri (02). */\nconst AVATAR_TONES: Tone[] = ['blue', 'green', 'amber', 'violet', 'pink', 'teal']\nexport function avatarTone(id: string | number): Tone {\n let hash = 0\n for (const ch of String(id)) hash = (hash * 31 + ch.charCodeAt(0)) >>> 0\n return AVATAR_TONES[hash % AVATAR_TONES.length]!\n}\nexport const initialsOf = (label: string): string =>\n label\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, 2)\n .map((w) => w[0]!.toLocaleUpperCase())\n .join('')\n\nexport function badge(tone: ToneRef, label: string, icon?: Component): VNodeChild {\n return h('span', { class: ['dt-badge', toneClass(tone)], style: toneStyle(tone) }, [\n icon\n ? h(icon, { class: 'dt-badge-icon', size: 11, weight: 'bold', 'aria-hidden': 'true' })\n : h('span', { class: 'dt-badge-dot', 'aria-hidden': 'true' }),\n h('span', { class: 'dt-badge-label' }, label),\n ])\n}\nconst more = (count: number, tip: string, cls = 'dt-more'): VNodeChild =>\n h('span', { class: cls, 'data-dt-tip': tip }, `+${count}`)\nconst mono = (text: string): VNodeChild => h('span', { class: 'dt-mono' }, text)\n\nexport function avatar(user: Partial<UserOption> & { value: string | number; label: string }): VNodeChild {\n return h(\n 'span',\n {\n class: ['dt-avatar', `dt-tone-${avatarTone(user.value)}`],\n style: user.avatarUrl ? { backgroundImage: `url(\"${user.avatarUrl}\")` } : undefined,\n 'aria-hidden': 'true',\n },\n user.avatarUrl ? '' : (user.initials ?? initialsOf(user.label)),\n )\n}\n\nfunction stars(value: number, max: number, label: string): VNodeChild {\n return h(\n 'span',\n { class: 'dt-stars', role: 'img', 'aria-label': label, 'data-dt-tip': label },\n Array.from({ length: max }, (_, i) =>\n h(PhStar, { size: 14, weight: i < value ? 'fill' : 'regular', class: i < value ? 'is-on' : undefined }),\n ),\n )\n}\n\nfunction bar(pct: number, label: string): VNodeChild {\n return h('span', { class: 'dt-bar' }, [\n h('span', { class: 'dt-bar-track', 'aria-hidden': 'true' }, [\n h('span', { class: 'dt-bar-fill', style: { width: `${Math.max(0, Math.min(100, pct))}%` } }),\n ]),\n h('span', { class: 'dt-bar-label' }, label),\n ])\n}\n\nconst link = (href: string, children: VNodeChild, external = false): VNodeChild =>\n h('a', { class: 'dt-link', href, tabindex: -1, ...(external && { target: '_blank', rel: 'noopener' }) }, [children])\n\n/** `color` + `display: 'fill'`: hücre boyanır, yazı rengi kontrasta göre (03). */\nexport function cellFillStyle<Row extends object>(\n def: ColumnDef<Row>,\n value: unknown,\n): Record<string, string> | undefined {\n if (def.type !== 'color' || def.display !== 'fill' || typeof value !== 'string') return undefined\n const m = /^#?([0-9a-f]{6})$/i.exec(value)\n if (!m) return { background: value }\n const n = parseInt(m[1]!, 16)\n const lum = (0.2126 * ((n >> 16) & 255) + 0.7152 * ((n >> 8) & 255) + 0.0722 * (n & 255)) / 255\n return { background: value, color: lum > 0.55 ? 'var(--dt-fill-text-dark)' : 'var(--dt-fill-text-light)' }\n}\n\nfunction resolveUsers<Row extends object>(\n def: Extract<ColumnDef<Row>, { type: 'user' }>,\n ids: Array<string | number>,\n env: RenderEnv,\n): Array<UserOption> {\n return ids.map((id) => {\n const o =\n def.options?.find((u) => u.value === id) ??\n (env.labels.option(def.id as string, def.remote, id) as UserOption | undefined)\n return o ?? { value: id, label: String(id) }\n })\n}\n\nexport function renderCellContent<Row extends object>(\n def: ColumnDef<Row>,\n row: Row,\n value: unknown,\n env: RenderEnv,\n): VNodeChild {\n const formatted = formatCell(def, row, value, env)\n if (def.cell) {\n // Tipli bağlam: `value` tipe göre daralır; burada tek yerde `unknown`dan geçilir.\n return (def.cell as (ctx: unknown) => VNodeChild)({\n row,\n value,\n formatted,\n column: { id: def.id, type: def.type },\n density: env.density,\n })\n }\n if (isEmptyValue(value)) {\n if (def.type === 'user') {\n return h('span', { class: 'dt-user is-empty' }, [\n h('span', { class: 'dt-avatar is-empty', 'aria-hidden': 'true' }),\n env.i18n.t('common.unassigned'),\n ])\n }\n return h('span', { class: 'dt-empty' }, formatted)\n }\n const { fmt, i18n } = env\n switch (def.type) {\n case 'int':\n case 'float':\n return formatted\n case 'percentage':\n return def.display === 'bar' ? bar(Number(value), formatted) : formatted\n case 'star':\n return stars(Number(value), def.max ?? 5, formatted)\n case 'currency':\n return [\n fmt.decimal(Number(value), def.decimalPlaces ?? 2),\n h('span', { class: 'dt-ccy' }, currencyCode(def, row)),\n ]\n case 'string':\n case 'uppercase':\n case 'lowercase':\n case 'email':\n return formatted\n case 'phone':\n return env.coarse ? link(`tel:${formatted}`, formatted) : formatted\n case 'text': {\n const firstLine = formatted.split('\\n')[0]!\n return h('span', { class: 'dt-text' }, [\n h('span', { class: 'dt-text-first' }, firstLine),\n h(\n 'button',\n {\n type: 'button',\n class: 'dt-text-expand',\n tabindex: -1,\n 'aria-label': i18n.t('cell.expandText'),\n 'data-dt-tip': formatted,\n },\n [h(PhArrowsOutSimple, { size: 14, 'aria-hidden': 'true' })],\n ),\n ])\n }\n case 'color':\n return def.display === 'fill'\n ? mono(formatted)\n : [h('span', { class: 'dt-swatch', style: { background: formatted }, 'aria-hidden': 'true' }), mono(formatted)]\n case 'url':\n return link(\n String(value),\n [urlHost(String(value)), h(PhArrowUpRight, { size: 12, class: 'dt-link-icon', 'aria-hidden': 'true' })],\n true,\n )\n case 'id': {\n const href = def.href?.(row)\n return href ? link(href, mono(formatted)) : mono(formatted)\n }\n case 'boolean':\n return value\n ? badge('green', formatted, PhCheck)\n : badge(\n def.falseTone === 'destructive' ? 'red' : 'gray',\n formatted,\n def.falseTone === 'destructive' ? PhX : PhMinus,\n )\n case 'select': {\n const opt = def.options.find((o) => o.value === value)\n return opt ? badge(opt.tone, opt.label) : badge('gray', String(value))\n }\n case 'multiselect': {\n const vals = value as Array<string | number>\n const shown = vals.slice(0, 2).map((v) => {\n const opt = def.options.find((o) => o.value === v)\n return opt ? badge(opt.tone, opt.label) : badge('gray', String(v))\n })\n return h('span', { class: 'dt-badges' }, [\n ...shown,\n vals.length > 2 ? more(vals.length - 2, fmt.list(vals.slice(2).map((v) => optionLabel(def.options, v)))) : null,\n ])\n }\n case 'ajax': {\n const href = def.href?.(row)\n return href ? link(href, formatted) : formatted\n }\n case 'user': {\n const ids = (Array.isArray(value) ? value : [value]) as Array<string | number>\n const users = resolveUsers(def, ids, env)\n if (users.length === 1)\n return h('span', { class: 'dt-user' }, [\n avatar(users[0]!),\n h('span', { class: 'dt-user-name' }, users[0]!.label),\n ])\n return h('span', { class: 'dt-user dt-avatars' }, [\n ...users.slice(0, 3).map(avatar),\n users.length > 3\n ? more(users.length - 3, fmt.list(users.slice(3).map((u) => u.label)), 'dt-more dt-more-pill')\n : null,\n ])\n }\n case 'date':\n case 'datetime': {\n const overdue = typeof def.overdue === 'function' ? def.overdue(row) : def.overdue\n const late = overdue ? fmt.daysLate(value as string | Date, env.today) : 0\n const tip = def.type === 'datetime' ? fmt.dateTimeFull(value as string | Date) : undefined\n if (late > 0)\n return h(\n 'span',\n { class: 'dt-late', 'data-dt-tip': tip },\n `${formatted} · ${i18n.t('cell.late', { count: late })}`,\n )\n return tip ? h('span', { 'data-dt-tip': tip }, formatted) : formatted\n }\n case 'object':\n return [h('span', { class: 'dt-struct', 'aria-hidden': 'true' }, '{ }'), formatted]\n case 'array': {\n const items = value as unknown[]\n const shown = items.slice(0, 3).map((v) => formatArrayItem(def.itemType, v, fmt))\n return [\n h('span', { class: 'dt-struct', 'aria-hidden': 'true' }, '[ ]'),\n shown.join(', '),\n items.length > 3 ? [' ', more(items.length - 3, formatted)] : null,\n ]\n }\n }\n}\n\nexport const isOption = (o: unknown): o is OptionDef =>\n typeof o === 'object' && o !== null && 'value' in o && 'label' in o\n","// Yerel ayara göre sayı okuma (03 · Yapıştırma): \"12.400\", \"12,400\", \"1.284,50\", \"68%\" — iki ayırıcı varsa sondaki ondalıktır.\nconst seps = new Map<string, { group: string; decimal: string }>()\nfunction sepsOf(locale: string) {\n let s = seps.get(locale)\n if (!s) {\n const parts = new Intl.NumberFormat(locale).formatToParts(12345.6)\n s = {\n group: parts.find((p) => p.type === 'group')?.value ?? ',',\n decimal: parts.find((p) => p.type === 'decimal')?.value ?? '.',\n }\n seps.set(locale, s)\n }\n return s\n}\n\nexport function parseNumber(locale: string, text: string): number | null {\n let s = text.replace(/[\\s%\\u00a0A-Za-z₺€$£]/g, '').replace('−', '-')\n if (s === '' || s === '-') return null\n const comma = s.lastIndexOf(',')\n const dot = s.lastIndexOf('.')\n const decimal = comma >= 0 && dot >= 0 ? (comma > dot ? ',' : '.') : sepsOf(locale).decimal\n s = s.split(decimal === ',' ? '.' : ',').join('')\n if (decimal === ',') s = s.replace(',', '.')\n const n = Number(s)\n return Number.isFinite(n) ? n : null\n}\n","// Filtre modeli (04 §1–3, 03 · Operatör anahtarları): tipe göre operatörler ve varsayılan, değer şekli (operatör değişiminde\n// koruma kuralı), eksik çip, hazır tarih aralıkları, istemci modu eşleme ve çip değer özeti. Vue'dan bağımsız; sahte API de kullanır.\nimport type { ColumnDef, ColumnType } from '../../types/columns'\nimport type { Plural } from '../../types/core'\nimport type { DatePreset, FilterCondition, FilterOp } from '../../types/query'\nimport type { I18n } from '../i18n'\nimport type { Format } from '../format'\n\nconst EMPTY: FilterOp[] = ['is_empty', 'is_not_empty']\nconst NUMBER: FilterOp[] = ['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'between', ...EMPTY]\nconst TEXT: FilterOp[] = ['contains', 'not_contains', 'eq', 'neq', 'starts_with', 'ends_with', ...EMPTY]\nconst LIST: FilterOp[] = ['in', 'not_in', ...EMPTY]\nconst DATE: FilterOp[] = ['within', 'eq', 'before', 'after', ...EMPTY]\nconst CASED: FilterOp[] = ['contains', 'eq', 'neq', 'starts_with', ...EMPTY]\n\n/** Tipe göre operatör listesi (03, brief §6.5); `filter.operators` alt küme seçebilir. */\nexport const OPERATORS: Record<ColumnType, FilterOp[]> = {\n int: NUMBER,\n float: NUMBER,\n percentage: ['eq', 'gt', 'gte', 'lt', 'lte', 'between', ...EMPTY],\n star: ['gte', 'lte', 'eq', ...EMPTY],\n currency: NUMBER,\n string: TEXT,\n text: ['contains', 'not_contains', ...EMPTY],\n uppercase: CASED,\n lowercase: CASED,\n phone: ['contains', 'starts_with', ...EMPTY],\n color: LIST,\n email: ['contains', 'eq', 'ends_with', ...EMPTY],\n url: ['contains', ...EMPTY],\n id: ['in', 'contains', ...EMPTY],\n boolean: ['eq', ...EMPTY],\n select: LIST,\n multiselect: LIST,\n ajax: LIST,\n user: LIST,\n date: DATE,\n datetime: DATE,\n object: [],\n array: ['contains', ...EMPTY],\n}\n\nconst DEFAULT_OP: Partial<Record<ColumnType, FilterOp>> = {\n int: 'between',\n float: 'between',\n percentage: 'between',\n currency: 'between',\n star: 'gte',\n id: 'in',\n boolean: 'eq',\n date: 'within',\n datetime: 'within',\n}\n\nexport const operatorsOf = (def: ColumnDef): FilterOp[] => def.filter?.operators ?? OPERATORS[def.type]\nexport const defaultOperator = (def: ColumnDef): FilterOp =>\n def.filter?.defaultOperator ?? DEFAULT_OP[def.type] ?? operatorsOf(def)[0] ?? 'is_empty'\n\n/** Değerin şekli: operatör değişiminde değer yalnızca aynı şekilde korunur (04 §3 · Uygulama zamanı). */\nexport type Shape = 'none' | 'text' | 'number' | 'range' | 'list' | 'date' | 'dateRange' | 'boolean'\nexport function shapeOf(op: FilterOp, type: ColumnType): Shape {\n if (op === 'is_empty' || op === 'is_not_empty') return 'none'\n if (op === 'in' || op === 'not_in') return 'list'\n if (op === 'between') return 'range'\n if (op === 'within') return 'dateRange'\n if (op === 'before' || op === 'after' || type === 'date' || type === 'datetime') return 'date'\n if (type === 'boolean') return 'boolean'\n if (op === 'gt' || op === 'gte' || op === 'lt' || op === 'lte') return 'number'\n if (type === 'int' || type === 'float' || type === 'percentage' || type === 'currency' || type === 'star')\n return 'number'\n return 'text'\n}\n\n/** Ekrandaki çip: değeri henüz seçilmemiş olabilir (eksik çip sorguya girmez). */\n/** Çip editörü (FilterChip ve telefon Filters sayfası): liste şekli `id`'de metin (yapıştırılan liste), diğerlerinde seçenek listesi. */\nexport type Editor = 'options' | 'text' | 'number' | 'star' | 'date' | null\nexport function editorOf(op: FilterOp, type: ColumnType): Editor {\n const s = shapeOf(op, type)\n if (s === 'none' || s === 'boolean') return null\n if (s === 'list') return type === 'id' ? 'text' : 'options'\n if (s === 'text') return 'text'\n if (s === 'date' || s === 'dateRange') return 'date'\n return type === 'star' ? 'star' : 'number'\n}\n\nexport interface Chip {\n column: string\n op: FilterOp\n value?: unknown\n currency?: string\n}\n\nexport type DateValue = string | { preset: 'today' }\nexport type DateRangeValue = { preset: DatePreset } | { from: string; to: string }\n\nconst isObj = (v: unknown): v is Record<string, unknown> => !!v && typeof v === 'object'\n\nexport function isComplete(chip: Chip, type: ColumnType): boolean {\n const v = chip.value\n switch (shapeOf(chip.op, type)) {\n case 'none':\n return true\n case 'list':\n return Array.isArray(v) && v.length > 0\n case 'range':\n return Array.isArray(v) && ((v[0] !== null && v[0] !== undefined) || (v[1] !== null && v[1] !== undefined))\n case 'text':\n return typeof v === 'string' && v !== ''\n case 'number':\n return typeof v === 'number' && Number.isFinite(v)\n case 'boolean':\n return typeof v === 'boolean'\n case 'date':\n return (typeof v === 'string' && v !== '') || (isObj(v) && v.preset === 'today')\n case 'dateRange':\n return isObj(v) && (typeof v.preset === 'string' || (typeof v.from === 'string' && typeof v.to === 'string'))\n }\n}\n\nexport function toCondition(chip: Chip): FilterCondition {\n const out: Record<string, unknown> = { column: chip.column, op: chip.op }\n if (chip.value !== undefined && shapeOf(chip.op, 'string') !== 'none') out.value = chip.value\n if (chip.currency) out.currency = chip.currency\n return out as FilterCondition\n}\n\nexport function changeOperator(chip: Chip, op: FilterOp, type: ColumnType): Chip {\n const shape = shapeOf(op, type)\n const keep = shape !== 'none' && shape === shapeOf(chip.op, type)\n return { ...chip, op, value: keep ? chip.value : undefined }\n}\n\n/** Operatör etiketi (03): `in`/`not_in` değer sayısına göre tekil/çoğul; `star`'da gte/lte \"at least / at most\". */\nexport function opLabel(i18n: I18n, op: FilterOp, type: ColumnType, valueCount = 1): string {\n if (op === 'in' || op === 'not_in') return i18n.t(`op.${op}`, { count: Math.max(1, valueCount) })\n if (type === 'star' && (op === 'gte' || op === 'lte')) return i18n.t(`op.star.${op}`)\n return i18n.t(`op.${op}`)\n}\n\n/* ---------- tarih ---------- */\n\nexport interface IsoRange {\n from: string | null\n to: string | null\n}\nexport const isoDay = (d: Date): string =>\n `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\nconst addDays = (d: Date, n: number): Date => new Date(d.getFullYear(), d.getMonth(), d.getDate() + n)\n/** Haftanın ilk günü (1 = Pazartesi … 7 = Pazar) yerel ayardan (`Intl.Locale` weekInfo); desteklenmeyen tarayıcıda Pazartesi. */\nconst weekStart = (locale: string): number => {\n try {\n const l = new Intl.Locale(locale) as unknown as {\n getWeekInfo?: () => { firstDay: number }\n weekInfo?: { firstDay: number }\n }\n return l.getWeekInfo?.().firstDay ?? l.weekInfo?.firstDay ?? 1\n } catch {\n return 1\n }\n}\n\n/** Hazır aralık → ISO gün aralığı (uçlar dahil). Hafta başı yerel ayardan (tr/en-GB Pazartesi, en-US Pazar). Yerel takvim, saf Date. */\nexport function resolvePreset(preset: DatePreset, locale: string, now = new Date()): IsoRange {\n const t = new Date(now.getFullYear(), now.getMonth(), now.getDate())\n switch (preset) {\n case 'today':\n return { from: isoDay(t), to: isoDay(t) }\n case 'this_week': {\n const diff = (t.getDay() - (weekStart(locale) % 7) + 7) % 7\n const start = addDays(t, -diff)\n return { from: isoDay(start), to: isoDay(addDays(start, 6)) }\n }\n case 'next_7_days':\n return { from: isoDay(t), to: isoDay(addDays(t, 7)) }\n case 'this_month':\n return {\n from: isoDay(new Date(t.getFullYear(), t.getMonth(), 1)),\n to: isoDay(new Date(t.getFullYear(), t.getMonth() + 1, 0)),\n }\n case 'last_30_days':\n return { from: isoDay(addDays(t, -30)), to: isoDay(t) }\n case 'this_quarter': {\n const qm = Math.floor(t.getMonth() / 3) * 3\n return { from: isoDay(new Date(t.getFullYear(), qm, 1)), to: isoDay(new Date(t.getFullYear(), qm + 3, 0)) }\n }\n case 'overdue':\n return { from: null, to: isoDay(addDays(t, -1)) }\n }\n}\n\nconst dayOf = (v: unknown): string | null => {\n if (v instanceof Date) return isoDay(v)\n if (typeof v === 'string' && v.length >= 10) return v.slice(0, 10)\n return null\n}\nconst dateArg = (v: DateValue, now: Date): string => (typeof v === 'string' ? v.slice(0, 10) : isoDay(now))\n\n/* ---------- istemci modu eşleme ---------- */\n\nconst isEmptyVal = (v: unknown) => v === null || v === undefined || v === '' || (Array.isArray(v) && v.length === 0)\nconst lower = (v: unknown, locale: string) => String(v).toLocaleLowerCase(locale)\n\n/** Tek koşul, tek hücre değeri (04 §1 değer biçimleri). `'@me'` istemcide çözülemez: eşleşmez. */\nexport function matches(cond: FilterCondition, cell: unknown, env: { locale: string; now?: Date }): boolean {\n const now = env.now ?? new Date()\n switch (cond.op) {\n case 'is_empty':\n return isEmptyVal(cell)\n case 'is_not_empty':\n return !isEmptyVal(cell)\n }\n if (isEmptyVal(cell)) return false\n switch (cond.op) {\n case 'eq':\n case 'neq': {\n const day = dayOf(cell)\n const hit =\n typeof cond.value === 'string' && day && /^\\d{4}-\\d{2}-\\d{2}/.test(cond.value)\n ? day === cond.value.slice(0, 10)\n : typeof cell === 'string' && typeof cond.value === 'string'\n ? lower(cell, env.locale) === lower(cond.value, env.locale)\n : cell === cond.value || String(cell) === String(cond.value)\n return cond.op === 'eq' ? hit : !hit\n }\n case 'gt':\n return Number(cell) > cond.value\n case 'gte':\n return Number(cell) >= cond.value\n case 'lt':\n return Number(cell) < cond.value\n case 'lte':\n return Number(cell) <= cond.value\n case 'between': {\n const n = Number(cell)\n const [min, max] = cond.value\n return (min === null || n >= min) && (max === null || n <= max)\n }\n case 'contains':\n case 'not_contains':\n case 'starts_with':\n case 'ends_with': {\n const needle = lower(cond.value, env.locale)\n const items = Array.isArray(cell) ? cell : [cell]\n const hit = items.some((item) => {\n const s = lower(item, env.locale)\n return cond.op === 'starts_with'\n ? s.startsWith(needle)\n : cond.op === 'ends_with'\n ? s.endsWith(needle)\n : s.includes(needle)\n })\n return cond.op === 'not_contains' ? !hit : hit\n }\n case 'in':\n case 'not_in': {\n const wanted = new Set(cond.value.map(String))\n const items = Array.isArray(cell) ? cell : [cell]\n const hit = items.some((item) => wanted.has(String(item)))\n return cond.op === 'in' ? hit : !hit\n }\n case 'before':\n return (dayOf(cell) ?? '') < dateArg(cond.value, now)\n case 'after':\n return (dayOf(cell) ?? '') > dateArg(cond.value, now)\n case 'within': {\n const day = dayOf(cell)\n if (!day) return false\n const r = 'preset' in cond.value ? resolvePreset(cond.value.preset, env.locale, now) : cond.value\n return (r.from === null || day >= r.from) && (r.to === null || day <= r.to)\n }\n }\n}\n\n/* ---------- çip özeti (04 §3 · Değer özeti) ---------- */\n\nexport interface SummaryEnv {\n i18n: I18n\n fmt: Format\n /** Seçenek/kişi değeri → etiket (select, user, ajax). */\n labelOf: (value: string | number) => string\n today?: Date\n}\nexport interface Summary {\n /** Çipte görünen metin; boş operatörlerde ''. */\n text: string\n /** Tooltip'teki tam metin (kısaltıldıysa). */\n full?: string\n /** Kişi filtrelerinde avatar yığını için. */\n people?: Array<{ value: string | number; label: string }>\n}\n\nconst shortNum = (fmt: Format, n: number) =>\n Math.abs(n) >= 1000 ? fmt.compact(n) : fmt.decimal(n, Number.isInteger(n) ? 0 : 2)\n\nexport function summarize(chip: Chip, def: ColumnDef, env: SummaryEnv): Summary {\n const { i18n, fmt } = env\n const type = def.type\n const v = chip.value\n const unit = type === 'percentage' ? '%' : chip.currency ? ` ${chip.currency}` : ''\n const num = (n: number) => `${shortNum(fmt, n)}${unit}`\n switch (shapeOf(chip.op, type)) {\n case 'none':\n return { text: '' }\n case 'boolean':\n return { text: i18n.t(v ? 'common.yes' : 'common.no') }\n case 'number':\n return { text: typeof v === 'number' ? num(v) : '' }\n case 'text':\n return typeof v === 'string' && v ? { text: `“${v}”`, full: v } : { text: '' }\n case 'range': {\n if (!Array.isArray(v)) return { text: '' }\n const [min, max] = v as [number | null, number | null]\n if (min !== null && min !== undefined && max !== null && max !== undefined)\n return { text: `${shortNum(fmt, min)} – ${num(max)}` }\n if (min !== null && min !== undefined) return { text: `≥ ${num(min)}` }\n if (max !== null && max !== undefined) return { text: `≤ ${num(max)}` }\n return { text: '' }\n }\n case 'date': {\n if (typeof v === 'string' && v) return { text: fmt.date(v, env.today) }\n if (isObj(v) && v.preset === 'today') return { text: i18n.t('date.today') }\n return { text: '' }\n }\n case 'dateRange': {\n if (!isObj(v)) return { text: '' }\n if (typeof v.preset === 'string') return { text: i18n.t(`date.${v.preset}`) }\n const from = String(v.from)\n const to = String(v.to)\n const sameMonth = from.slice(0, 7) === to.slice(0, 7)\n const toText = sameMonth ? String(Number(to.slice(8, 10))) : fmt.date(to, env.today)\n return { text: `${fmt.date(from, env.today)} – ${toText}` }\n }\n case 'list': {\n const values = Array.isArray(v) ? (v as Array<string | number>) : []\n if (values.length === 0) return { text: '' }\n const labels = values.map((x) => (x === '@me' ? i18n.t('common.me') : env.labelOf(x)))\n if (type === 'user') {\n const people = values.map((value, i) => ({ value, label: labels[i]! }))\n return {\n text: values.length === 1 ? labels[0]! : i18n.t('chip.people', { count: values.length }),\n full: labels.join(', '),\n people,\n }\n }\n if (values.length <= 2) return { text: labels.join(', '), full: labels.join(', ') }\n const noun = def.filterNoun as Plural | undefined\n return {\n text: noun\n ? i18n.t('chip.noun', { count: values.length, noun })\n : i18n.t('chip.values', { count: values.length }),\n full: labels.join(', '),\n }\n }\n }\n}\n","// Tek guard (05 §7, 07 §5, brief §5.4): hücredeki etkileşimli öğeye tıklama yalnızca o öğeyi çalıştırır;\n// satır tıklaması, seçim ve düzenleme başlatma tetiklenmez. Geliştirici stopPropagation yazmaz.\n\nexport const INTERACTIVE_SELECTOR =\n 'a[href], button, input, select, textarea, summary, label, [role=\"button\"], [role=\"menuitem\"], [role=\"checkbox\"], [role=\"combobox\"], [role=\"switch\"], [contenteditable=\"true\"]'\n\n/** `target`, `within` içindeki etkileşimli bir öğenin içinde mi? */\nexport function isInteractive(target: EventTarget | null, within: Element): boolean {\n if (!(target instanceof Element)) return false\n const hit = target.closest(INTERACTIVE_SELECTOR)\n return hit !== null && hit !== within && within.contains(hit)\n}\n\n/** Odak alınca kendi ok tuşlarını kullanan öğeler: ızgara bunlara karışmaz. */\nexport const isTextInput = (el: Element | null): boolean =>\n el instanceof HTMLInputElement ||\n el instanceof HTMLTextAreaElement ||\n el instanceof HTMLSelectElement ||\n el?.getAttribute('role') === 'combobox' ||\n (el as HTMLElement | null)?.isContentEditable === true\n\n/** Metin seçimiyle biten tıklama satır tıklaması sayılmaz. */\nexport const hasTextSelection = (): boolean => (globalThis.getSelection?.()?.toString().length ?? 0) > 0\n\n/** Satır tıklaması sayılmayan durumlar: etkileşimli hedef, metin seçimi, sürükleme, değiştirici tuş, sol dışı düğme. */\nexport function isPlainRowClick(\n event: MouseEvent,\n rowEl: Element,\n downPoint: { x: number; y: number } | null,\n): boolean {\n if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return false\n if (isInteractive(event.target, rowEl)) return false\n if (hasTextSelection()) return false\n if (downPoint && Math.hypot(event.clientX - downPoint.x, event.clientY - downPoint.y) > 4) return false\n return true\n}\n","// Platforma göre kısayol gösterimi (08 §3): macOS `⌘ ⌥ ⇧`, diğerleri `Ctrl Alt Shift`.\nexport const mac = typeof navigator !== 'undefined' && /Mac|iPhone|iPad/.test(navigator.platform)\nexport const MOVE_KBD = { left: mac ? '⌥⇧←' : 'Alt+Shift+←', right: mac ? '⌥⇧→' : 'Alt+Shift+→' }\nexport const SAVE_KBD = mac ? '⌘S' : 'Ctrl+S'\nexport const UNDO_KBD = mac ? '⌘Z' : 'Ctrl+Z'\nexport const REDO_KBD = mac ? '⌘⇧Z' : 'Ctrl+Y'\nexport const FIND_KBD = mac ? '⌘F' : 'Ctrl+F'\nexport const FILL_KBD = mac ? '⌘D' : 'Ctrl+D'\nexport const REMOVE_KBD = mac ? '⌘−' : 'Ctrl+−'\n","import type { RowAction } from '../../types/list'\n\n/** Satırda inline çizilen aksiyonlar (D36): `inline` + `icon` + `when(row)`; ilk 2. GridRoot genişlik için, RowMenu menüden düşmek için aynı listeyi kullanır. */\nexport const inlineActionsOf = (actions: RowAction[], row: object): RowAction[] =>\n actions.filter((a) => a.inline && a.icon && (!a.when || a.when(row))).slice(0, 2)\n","<script setup lang=\"ts\" generic=\"Row extends object\">\n// Hücre aksiyonları overlay'i (03 · actions, T7): sağ kenarda ≤ 2 düğme, fazlası ⋯ menüsünde; metin yerleşimi değişmez.\nimport { PhDotsThree } from '@phosphor-icons/vue'\nimport {\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n} from 'reka-ui'\nimport { computed, toRaw } from 'vue'\nimport type { CellAction } from '../../types/columns'\nimport { useDataTableContext } from '../plugin'\n\nconst props = defineProps<{ actions: Array<CellAction<Row>>; row: Row }>()\nconst { i18n } = useDataTableContext()\n\ntype Item = Omit<CellAction<Row>, 'reveal' | 'menu'> & { menu?: Array<Omit<CellAction<Row>, 'reveal' | 'menu'>> }\n\nconst visible = computed(() => props.actions.filter((a) => a.when?.(props.row) ?? true))\nconst always = computed(() => visible.value.some((a) => a.reveal === 'always'))\n/** 2'den çoksa: ilk aksiyon + ⋯ (kalanlar menüde). Tek aksiyonun kendi `menu`'sü ⋯ olarak çizilir. */\nconst buttons = computed<Item[]>(() => (visible.value.length > 2 ? visible.value.slice(0, 1) : visible.value))\nconst overflow = computed<Item[]>(() => (visible.value.length > 2 ? visible.value.slice(1) : []))\n\nconst disabledOf = (a: Item): string | boolean => a.disabled?.(props.row) ?? false\nconst tipOf = (a: Item): string => {\n const d = disabledOf(a)\n return typeof d === 'string' ? `${a.label} — ${d}` : a.label\n}\nconst run = (a: Item) => {\n if (disabledOf(a)) return\n void a.run?.(toRaw(props.row))\n}\n</script>\n\n<template>\n <span v-if=\"visible.length\" class=\"dt-cell-actions\" :class=\"{ 'is-always': always }\">\n <template v-for=\"a in buttons\" :key=\"a.id\">\n <DropdownMenuRoot v-if=\"a.menu?.length\">\n <DropdownMenuTrigger as-child>\n <button\n type=\"button\"\n class=\"dt-cell-action\"\n :class=\"{ 'is-destructive': a.destructive }\"\n tabindex=\"-1\"\n :aria-label=\"a.label\"\n :data-dt-tip=\"a.label\"\n >\n <component :is=\"a.icon\" :size=\"14\" aria-hidden=\"true\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent class=\"dt-menu dt-menu-cell\" align=\"end\" :side-offset=\"4\">\n <DropdownMenuItem\n v-for=\"m in a.menu\"\n :key=\"m.id\"\n class=\"dt-menu-item\"\n :class=\"{ 'is-destructive': m.destructive }\"\n :disabled=\"!!disabledOf(m)\"\n @select=\"run(m)\"\n >\n <component :is=\"m.icon\" :size=\"16\" aria-hidden=\"true\" />\n {{ m.label }}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n <button\n v-else\n type=\"button\"\n class=\"dt-cell-action\"\n :class=\"{ 'is-destructive': a.destructive }\"\n tabindex=\"-1\"\n :aria-label=\"a.label\"\n :aria-disabled=\"disabledOf(a) ? 'true' : undefined\"\n :data-dt-tip=\"tipOf(a)\"\n @click=\"run(a)\"\n >\n <component :is=\"a.icon\" :size=\"14\" aria-hidden=\"true\" />\n </button>\n </template>\n <DropdownMenuRoot v-if=\"overflow.length\">\n <DropdownMenuTrigger as-child>\n <button\n type=\"button\"\n class=\"dt-cell-action\"\n tabindex=\"-1\"\n :aria-label=\"i18n.t('common.more')\"\n :data-dt-tip=\"i18n.t('common.more')\"\n >\n <PhDotsThree :size=\"14\" weight=\"bold\" aria-hidden=\"true\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent class=\"dt-menu dt-menu-cell\" align=\"end\" :side-offset=\"4\">\n <DropdownMenuItem\n v-for=\"m in overflow\"\n :key=\"m.id\"\n class=\"dt-menu-item\"\n :class=\"{ 'is-destructive': m.destructive }\"\n :disabled=\"!!disabledOf(m)\"\n @select=\"run(m)\"\n >\n <component :is=\"m.icon\" :size=\"16\" aria-hidden=\"true\" />\n {{ m.label }}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n </span>\n</template>\n","<script setup lang=\"ts\" generic=\"Row extends object\">\n// Hücre aksiyonları overlay'i (03 · actions, T7): sağ kenarda ≤ 2 düğme, fazlası ⋯ menüsünde; metin yerleşimi değişmez.\nimport { PhDotsThree } from '@phosphor-icons/vue'\nimport {\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuTrigger,\n} from 'reka-ui'\nimport { computed, toRaw } from 'vue'\nimport type { CellAction } from '../../types/columns'\nimport { useDataTableContext } from '../plugin'\n\nconst props = defineProps<{ actions: Array<CellAction<Row>>; row: Row }>()\nconst { i18n } = useDataTableContext()\n\ntype Item = Omit<CellAction<Row>, 'reveal' | 'menu'> & { menu?: Array<Omit<CellAction<Row>, 'reveal' | 'menu'>> }\n\nconst visible = computed(() => props.actions.filter((a) => a.when?.(props.row) ?? true))\nconst always = computed(() => visible.value.some((a) => a.reveal === 'always'))\n/** 2'den çoksa: ilk aksiyon + ⋯ (kalanlar menüde). Tek aksiyonun kendi `menu`'sü ⋯ olarak çizilir. */\nconst buttons = computed<Item[]>(() => (visible.value.length > 2 ? visible.value.slice(0, 1) : visible.value))\nconst overflow = computed<Item[]>(() => (visible.value.length > 2 ? visible.value.slice(1) : []))\n\nconst disabledOf = (a: Item): string | boolean => a.disabled?.(props.row) ?? false\nconst tipOf = (a: Item): string => {\n const d = disabledOf(a)\n return typeof d === 'string' ? `${a.label} — ${d}` : a.label\n}\nconst run = (a: Item) => {\n if (disabledOf(a)) return\n void a.run?.(toRaw(props.row))\n}\n</script>\n\n<template>\n <span v-if=\"visible.length\" class=\"dt-cell-actions\" :class=\"{ 'is-always': always }\">\n <template v-for=\"a in buttons\" :key=\"a.id\">\n <DropdownMenuRoot v-if=\"a.menu?.length\">\n <DropdownMenuTrigger as-child>\n <button\n type=\"button\"\n class=\"dt-cell-action\"\n :class=\"{ 'is-destructive': a.destructive }\"\n tabindex=\"-1\"\n :aria-label=\"a.label\"\n :data-dt-tip=\"a.label\"\n >\n <component :is=\"a.icon\" :size=\"14\" aria-hidden=\"true\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent class=\"dt-menu dt-menu-cell\" align=\"end\" :side-offset=\"4\">\n <DropdownMenuItem\n v-for=\"m in a.menu\"\n :key=\"m.id\"\n class=\"dt-menu-item\"\n :class=\"{ 'is-destructive': m.destructive }\"\n :disabled=\"!!disabledOf(m)\"\n @select=\"run(m)\"\n >\n <component :is=\"m.icon\" :size=\"16\" aria-hidden=\"true\" />\n {{ m.label }}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n <button\n v-else\n type=\"button\"\n class=\"dt-cell-action\"\n :class=\"{ 'is-destructive': a.destructive }\"\n tabindex=\"-1\"\n :aria-label=\"a.label\"\n :aria-disabled=\"disabledOf(a) ? 'true' : undefined\"\n :data-dt-tip=\"tipOf(a)\"\n @click=\"run(a)\"\n >\n <component :is=\"a.icon\" :size=\"14\" aria-hidden=\"true\" />\n </button>\n </template>\n <DropdownMenuRoot v-if=\"overflow.length\">\n <DropdownMenuTrigger as-child>\n <button\n type=\"button\"\n class=\"dt-cell-action\"\n tabindex=\"-1\"\n :aria-label=\"i18n.t('common.more')\"\n :data-dt-tip=\"i18n.t('common.more')\"\n >\n <PhDotsThree :size=\"14\" weight=\"bold\" aria-hidden=\"true\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent class=\"dt-menu dt-menu-cell\" align=\"end\" :side-offset=\"4\">\n <DropdownMenuItem\n v-for=\"m in overflow\"\n :key=\"m.id\"\n class=\"dt-menu-item\"\n :class=\"{ 'is-destructive': m.destructive }\"\n :disabled=\"!!disabledOf(m)\"\n @select=\"run(m)\"\n >\n <component :is=\"m.icon\" :size=\"16\" aria-hidden=\"true\" />\n {{ m.label }}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n </span>\n</template>\n","<script setup lang=\"ts\">\n// Satır menüsü (05 §4, handoff 03 §8, T6-03; 268 px): Open ↵ (gerçek <a href>) · Open in new tab · Copy {birincil} · ─ ·\n// uygulamanın `rowActions`'ı (pasif olan gerekçesiyle iki satır; yıkıcı en altta, kırmızı). `run` beklenmez (D20).\nimport { PhDotsThree } from '@phosphor-icons/vue'\nimport {\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from 'reka-ui'\nimport { computed, toRaw } from 'vue'\nimport type { RowAction } from '../../types/list'\nimport { useDataTableContext } from '../plugin'\nimport { inlineActionsOf } from './inlineActions'\n\nconst props = defineProps<{\n row: object\n /** Birincil hücre metni (aria etiketleri). */\n label: string\n /** Birincil sütun başlığı: \"Copy Order no.\"; yoksa Copy öğesi yok. */\n primaryHeader?: string\n href?: string\n actions: RowAction[]\n open: boolean\n}>()\nconst emit = defineEmits<{ 'update:open': [open: boolean]; open: [event: MouseEvent]; copy: [] }>()\nconst { i18n } = useDataTableContext()\n\n/** `when(row)` false olan gösterilmez (yetki; D34); satırda inline çizilen de menüde yoktur (D36); yıkıcılar en altta. */\nconst ordered = computed(() => {\n const inline = new Set(inlineActionsOf(props.actions, props.row))\n const shown = props.actions.filter((a) => !inline.has(a) && (!a.when || a.when(props.row)))\n return [...shown.filter((a) => !a.destructive), ...shown.filter((a) => a.destructive)]\n})\n/** Menüde hiçbir şey yoksa ⋯ çizilmez; hizalama için yeri boş kalır. */\nconst hasItems = computed(() => !!props.href || !!props.primaryHeader || ordered.value.length > 0)\nconst firstDestructive = computed(() => ordered.value.findIndex((a) => a.destructive))\n/** İkinci satır: `disabled` gerekçesi varsa o, yoksa `description` (D36). */\nconst subOf = (a: RowAction): string | null => {\n const d = a.disabled?.(props.row)\n return typeof d === 'string' ? d : (a.description ?? null)\n}\nconst isDisabled = (a: RowAction) => !!a.disabled?.(props.row)\nconst run = (a: RowAction) => {\n if (!isDisabled(a)) void a.run(toRaw(props.row))\n}\n/** Düz sol tık `row-open`; ⌘/Ctrl, orta ve sağ tık tarayıcıya kalır (D6). */\nconst onOpen = (e: MouseEvent) => {\n if (e.button === 0 && !e.metaKey && !e.ctrlKey && !e.shiftKey && !e.altKey) emit('open', e)\n}\n</script>\n\n<template>\n <span v-if=\"!hasItems\" class=\"dt-row-more-space\" aria-hidden=\"true\" />\n <DropdownMenuRoot v-else :open=\"open\" @update:open=\"(o) => emit('update:open', o)\">\n <DropdownMenuTrigger as-child>\n <button\n type=\"button\"\n class=\"dt-row-more\"\n tabindex=\"-1\"\n :aria-label=\"i18n.t('row.actionsAria', { id: label })\"\n @keydown.enter.space.stop\n >\n <PhDotsThree :size=\"16\" weight=\"bold\" aria-hidden=\"true\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent class=\"dt-menu dt-row-menu\" align=\"end\" :side-offset=\"4\">\n <template v-if=\"href\">\n <DropdownMenuItem as-child class=\"dt-menu-item\">\n <a :href=\"href\" @click=\"onOpen\">\n {{ i18n.t('row.open') }}\n <kbd class=\"dt-kbd\">↵</kbd>\n </a>\n </DropdownMenuItem>\n <DropdownMenuItem as-child class=\"dt-menu-item\">\n <a :href=\"href\" target=\"_blank\" rel=\"noopener\">{{ i18n.t('row.openNewTab') }}</a>\n </DropdownMenuItem>\n </template>\n <DropdownMenuItem v-if=\"primaryHeader\" class=\"dt-menu-item\" @select=\"emit('copy')\">\n {{ i18n.t('row.copyId', { column: primaryHeader }) }}\n </DropdownMenuItem>\n <DropdownMenuSeparator v-if=\"(href || primaryHeader) && ordered.length\" class=\"dt-menu-sep\" />\n <template v-for=\"(a, i) in ordered\" :key=\"a.id\">\n <DropdownMenuSeparator v-if=\"a.separatorBefore || i === firstDestructive\" class=\"dt-menu-sep\" />\n <DropdownMenuItem\n class=\"dt-menu-item\"\n :class=\"{ 'is-destructive': a.destructive, 'is-two-line': subOf(a) }\"\n :disabled=\"isDisabled(a)\"\n @select=\"run(a)\"\n >\n <component :is=\"a.icon\" v-if=\"a.icon\" :size=\"16\" aria-hidden=\"true\" />\n <span class=\"dt-menu-text\">\n <span>{{ a.label }}</span>\n <span v-if=\"subOf(a)\" class=\"dt-menu-sub\">{{ subOf(a) }}</span>\n </span>\n <kbd v-if=\"a.shortcut\" class=\"dt-kbd\">{{ a.shortcut }}</kbd>\n </DropdownMenuItem>\n </template>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n</template>\n","<script setup lang=\"ts\">\n// Satır menüsü (05 §4, handoff 03 §8, T6-03; 268 px): Open ↵ (gerçek <a href>) · Open in new tab · Copy {birincil} · ─ ·\n// uygulamanın `rowActions`'ı (pasif olan gerekçesiyle iki satır; yıkıcı en altta, kırmızı). `run` beklenmez (D20).\nimport { PhDotsThree } from '@phosphor-icons/vue'\nimport {\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuPortal,\n DropdownMenuRoot,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from 'reka-ui'\nimport { computed, toRaw } from 'vue'\nimport type { RowAction } from '../../types/list'\nimport { useDataTableContext } from '../plugin'\nimport { inlineActionsOf } from './inlineActions'\n\nconst props = defineProps<{\n row: object\n /** Birincil hücre metni (aria etiketleri). */\n label: string\n /** Birincil sütun başlığı: \"Copy Order no.\"; yoksa Copy öğesi yok. */\n primaryHeader?: string\n href?: string\n actions: RowAction[]\n open: boolean\n}>()\nconst emit = defineEmits<{ 'update:open': [open: boolean]; open: [event: MouseEvent]; copy: [] }>()\nconst { i18n } = useDataTableContext()\n\n/** `when(row)` false olan gösterilmez (yetki; D34); satırda inline çizilen de menüde yoktur (D36); yıkıcılar en altta. */\nconst ordered = computed(() => {\n const inline = new Set(inlineActionsOf(props.actions, props.row))\n const shown = props.actions.filter((a) => !inline.has(a) && (!a.when || a.when(props.row)))\n return [...shown.filter((a) => !a.destructive), ...shown.filter((a) => a.destructive)]\n})\n/** Menüde hiçbir şey yoksa ⋯ çizilmez; hizalama için yeri boş kalır. */\nconst hasItems = computed(() => !!props.href || !!props.primaryHeader || ordered.value.length > 0)\nconst firstDestructive = computed(() => ordered.value.findIndex((a) => a.destructive))\n/** İkinci satır: `disabled` gerekçesi varsa o, yoksa `description` (D36). */\nconst subOf = (a: RowAction): string | null => {\n const d = a.disabled?.(props.row)\n return typeof d === 'string' ? d : (a.description ?? null)\n}\nconst isDisabled = (a: RowAction) => !!a.disabled?.(props.row)\nconst run = (a: RowAction) => {\n if (!isDisabled(a)) void a.run(toRaw(props.row))\n}\n/** Düz sol tık `row-open`; ⌘/Ctrl, orta ve sağ tık tarayıcıya kalır (D6). */\nconst onOpen = (e: MouseEvent) => {\n if (e.button === 0 && !e.metaKey && !e.ctrlKey && !e.shiftKey && !e.altKey) emit('open', e)\n}\n</script>\n\n<template>\n <span v-if=\"!hasItems\" class=\"dt-row-more-space\" aria-hidden=\"true\" />\n <DropdownMenuRoot v-else :open=\"open\" @update:open=\"(o) => emit('update:open', o)\">\n <DropdownMenuTrigger as-child>\n <button\n type=\"button\"\n class=\"dt-row-more\"\n tabindex=\"-1\"\n :aria-label=\"i18n.t('row.actionsAria', { id: label })\"\n @keydown.enter.space.stop\n >\n <PhDotsThree :size=\"16\" weight=\"bold\" aria-hidden=\"true\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent class=\"dt-menu dt-row-menu\" align=\"end\" :side-offset=\"4\">\n <template v-if=\"href\">\n <DropdownMenuItem as-child class=\"dt-menu-item\">\n <a :href=\"href\" @click=\"onOpen\">\n {{ i18n.t('row.open') }}\n <kbd class=\"dt-kbd\">↵</kbd>\n </a>\n </DropdownMenuItem>\n <DropdownMenuItem as-child class=\"dt-menu-item\">\n <a :href=\"href\" target=\"_blank\" rel=\"noopener\">{{ i18n.t('row.openNewTab') }}</a>\n </DropdownMenuItem>\n </template>\n <DropdownMenuItem v-if=\"primaryHeader\" class=\"dt-menu-item\" @select=\"emit('copy')\">\n {{ i18n.t('row.copyId', { column: primaryHeader }) }}\n </DropdownMenuItem>\n <DropdownMenuSeparator v-if=\"(href || primaryHeader) && ordered.length\" class=\"dt-menu-sep\" />\n <template v-for=\"(a, i) in ordered\" :key=\"a.id\">\n <DropdownMenuSeparator v-if=\"a.separatorBefore || i === firstDestructive\" class=\"dt-menu-sep\" />\n <DropdownMenuItem\n class=\"dt-menu-item\"\n :class=\"{ 'is-destructive': a.destructive, 'is-two-line': subOf(a) }\"\n :disabled=\"isDisabled(a)\"\n @select=\"run(a)\"\n >\n <component :is=\"a.icon\" v-if=\"a.icon\" :size=\"16\" aria-hidden=\"true\" />\n <span class=\"dt-menu-text\">\n <span>{{ a.label }}</span>\n <span v-if=\"subOf(a)\" class=\"dt-menu-sub\">{{ subOf(a) }}</span>\n </span>\n <kbd v-if=\"a.shortcut\" class=\"dt-kbd\">{{ a.shortcut }}</kbd>\n </DropdownMenuItem>\n </template>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenuRoot>\n</template>\n","// Satır + hücreler: render fonksiyonu (sanal listede yüzlerce örnek; şablon derleyicisi yerine düz h()).\n// Kabuk burada: hizalama, kesme, sabit sütun sticky'si, --dt-row-bg, ikinci satır, aksiyon overlay'i (05 §4, 03);\n// seçim hücresi (40 px, sol sabit), birincil hücrede expand chevron'u, sağ sabit ⋯ hücresi (56 px) (05 §6–7, D6, D28).\nimport { PhCaretRight, PhWarningCircle } from '@phosphor-icons/vue'\nimport { defineComponent, h, onMounted, onUpdated, toRaw, type PropType, type VNodeChild } from 'vue'\nimport type { RowAction } from '../../types/list'\nimport CellActions from '../cells/CellActions.vue'\nimport { cellFillStyle, renderCellContent, type RenderEnv } from '../cells/renderCell'\nimport { alignOf, isNumericType } from '../cells/specs'\nimport type { LayoutColumn } from '../columns/useColumnLayout'\nimport { INTERACTIVE_SELECTOR, isInteractive } from '../interaction/isInteractive'\nimport { inlineActionsOf } from './inlineActions'\nimport RowMenu from './RowMenu.vue'\n\nexport default defineComponent({\n name: 'DtRow',\n props: {\n row: { type: Object as PropType<object>, required: true },\n index: { type: Number, required: true },\n rowIndex: { type: Number, required: true },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- accessor/cell parametreleri karşıt değişken; satır tipi üstten gelir\n columns: { type: Array as PropType<Array<LayoutColumn<any>>>, required: true },\n env: { type: Object as PropType<RenderEnv>, required: true },\n focused: { type: Boolean, default: false },\n keyboardFocus: { type: Boolean, default: false },\n /** Comfortable: `secondary` görünür (02 · Yoğunluk). */\n secondaryVisible: { type: Boolean, default: false },\n /** Birincil hücre metni: aria etiketleri ve Copy. */\n label: { type: String, default: '' },\n selectable: { type: Boolean, default: false },\n selected: { type: Boolean, default: false },\n /** Sol sabit sütun yokken seçim hücresi kenar gölgesini taşır. */\n selectEdge: { type: Boolean, default: false },\n expandable: { type: Boolean, default: false },\n canExpand: { type: Boolean, default: false },\n expanded: { type: Boolean, default: false },\n subrowId: { type: String, default: undefined },\n /** ⋯ hücresi (satır menüsü). */\n menu: { type: Boolean, default: false },\n menuOpen: { type: Boolean, default: false },\n menuEdge: { type: Boolean, default: false },\n rowActions: { type: Array as PropType<RowAction[]>, default: () => [] },\n /** Satır hatası mesajları (05 §4, D35); boş = yok. */\n error: { type: Array as PropType<string[]>, default: () => [] },\n /** Satıra özgü id öneki (GridRoot uid + satır anahtarı): hata ikonu ve inline açıklamaları için. */\n uid: { type: String, default: '' },\n href: { type: String, default: undefined },\n primaryHeader: { type: String, default: undefined },\n style: { type: Object as PropType<Record<string, string>>, default: undefined },\n },\n emits: ['select', 'expand', 'menu-open', 'open', 'copy'],\n setup(props, { emit }) {\n let el: HTMLElement | null = null\n // Hücre içi widget'lar Tab durağı değildir (08 §2): uygulamanın `cell` içeriği dahil, her güncellemede tabindex=-1.\n const demote = () => {\n if (!el) return\n for (const w of el.querySelectorAll<HTMLElement>(INTERACTIVE_SELECTOR)) if (w.tabIndex !== -1) w.tabIndex = -1\n }\n onMounted(demote)\n onUpdated(demote)\n const t = (key: string, params?: Record<string, string>) => props.env.i18n.t(key, params)\n\n /** Satır hatası ikonu (05 §4, D35): ⋯ hücresinde; ⋯ yoksa ilk görünür hücrede (sabit genişlikli birincil id'yi kesmesin). */\n const errorTip = () => props.error.join('\\n')\n const errorId = () => `${props.uid}-err`\n const errorIcon = () =>\n h(\n 'span',\n { id: errorId(), class: 'dt-row-error', role: 'img', 'aria-label': errorTip(), 'data-dt-tip': errorTip() },\n [h(PhWarningCircle, { size: 14, weight: 'fill', 'aria-hidden': 'true' })],\n )\n /** Inline satır aksiyonu (D36): ⋯ ile aynı 28 px düğme; label aria'da, açıklama tooltip'te ve gizli span'da. */\n const inlineButton = (a: RowAction) => {\n const d = a.disabled?.(props.row)\n const reason = typeof d === 'string' ? d : null\n const descId = a.description ? `${props.uid}-${a.id}` : undefined\n return h('span', { class: 'dt-row-inline-wrap' }, [\n h(\n 'button',\n {\n type: 'button',\n class: 'dt-row-inline',\n tabindex: -1,\n disabled: !!d,\n 'aria-label': a.label,\n 'aria-describedby': descId,\n 'data-dt-tip': reason ?? (a.description ? `${a.label} — ${a.description}` : a.label),\n onClick: () => void a.run(toRaw(props.row)),\n onKeydown: (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') e.stopPropagation()\n },\n },\n [h(a.icon!, { size: 16, 'aria-hidden': 'true' })],\n ),\n descId ? h('span', { id: descId, class: 'dt-sr-only' }, a.description) : null,\n ])\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const renderCell = (col: LayoutColumn<any>): VNodeChild => {\n const def = col.def\n const value = def.accessor ? def.accessor(props.row) : readPathFast(props.row, col.id)\n const align = alignOf(def)\n let content = renderCellContent(def, props.row, value, props.env)\n const href = def.primary && def.type !== 'id' && def.type !== 'ajax' ? def.href?.(props.row) : undefined\n if (href) content = h('a', { class: 'dt-link dt-primary-link', href, tabindex: -1 }, [content])\n const actions = def.actions\n const main = h('span', { class: 'dt-cell-content' }, [content])\n const secondary =\n props.secondaryVisible && def.secondary\n ? h('span', { class: 'dt-secondary' }, def.secondary(props.row) ?? '')\n : null\n const overlay = actions?.length ? h(CellActions, { actions, row: props.row }) : null\n const withExpand = def.primary && props.expandable\n const lead = props.error.length && !props.menu && col.id === props.columns[0]?.id ? errorIcon() : null\n const children: VNodeChild[] = withExpand\n ? [\n props.canExpand\n ? h(\n 'button',\n {\n type: 'button',\n class: ['dt-expand', { 'is-open': props.expanded }],\n tabindex: -1,\n 'aria-expanded': props.expanded ? 'true' : 'false',\n 'aria-controls': props.subrowId,\n 'aria-label': t('expand.showAria', { id: props.label }),\n onClick: () => emit('expand'),\n },\n [h(PhCaretRight, { size: 14, 'aria-hidden': 'true' })],\n )\n : h('span', { class: 'dt-expand-space', 'aria-hidden': 'true' }),\n lead,\n h('span', { class: 'dt-cell-main' }, [main, secondary]),\n overlay,\n ]\n : lead\n ? [lead, h('span', { class: 'dt-cell-main' }, [main, secondary]), overlay]\n : [main, secondary, overlay]\n return h(\n 'div',\n {\n class: [\n 'dt-cell',\n `is-${align}`,\n {\n 'is-numeric': isNumericType(def.type),\n 'is-primary': def.primary,\n 'has-expand': withExpand || !!lead,\n 'is-pinned-start': col.pinned === 'start',\n 'is-pinned-end': col.pinned === 'end',\n 'is-pin-edge': col.pinEdge,\n },\n ],\n style: {\n ...(col.pinned === 'start'\n ? { left: `var(${col.offsetVar})` }\n : col.pinned === 'end'\n ? { right: `var(${col.offsetVar})` }\n : null),\n ...cellFillStyle(def, value),\n },\n role: 'gridcell',\n 'data-col': col.id,\n },\n children,\n )\n }\n\n /** Seçim hücresi (05 §6, T5-01): 40 px'in tamamı tıklanır; ⇧ aralık GridRoot'ta. */\n const selectCell = () =>\n h(\n 'label',\n {\n class: ['dt-cell', 'dt-cell-select', 'is-pinned-start', { 'is-pin-edge': props.selectEdge }],\n style: { left: '0px' },\n role: 'gridcell',\n },\n [\n h('input', {\n type: 'checkbox',\n class: 'dt-checkbox dt-select-box',\n checked: props.selected,\n tabindex: -1,\n 'aria-label': t('row.selectAria', { id: props.label }),\n // Native toggle engellenmez: Chrome iptal edilen tıklamayı Vue'nun patch'inden sonra geri alırdı; durum üstten eşlenir.\n onClick: (e: MouseEvent) => emit('select', !props.selected, e.shiftKey),\n }),\n ],\n )\n const menuCell = () =>\n h(\n 'div',\n {\n class: ['dt-cell', 'dt-cell-menu', 'is-pinned-end', { 'is-pin-edge': props.menuEdge }],\n style: { right: '0px' },\n role: 'gridcell',\n },\n [\n props.error.length ? errorIcon() : null,\n ...inlineActionsOf(props.rowActions, props.row).map(inlineButton),\n h(RowMenu, {\n row: props.row,\n label: props.label,\n primaryHeader: props.primaryHeader,\n href: props.href,\n actions: props.rowActions,\n open: props.menuOpen,\n 'onUpdate:open': (o: boolean) => emit('menu-open', o),\n onOpen: (e: MouseEvent) => emit('open', e),\n onCopy: () => emit('copy'),\n }),\n ],\n )\n /** Sağ tık satır menüsünü açar; link/düğme üstünde tarayıcının menüsü kalır (D6). */\n const onContextmenu = (e: MouseEvent) => {\n if (!el || isInteractive(e.target, el)) return\n e.preventDefault()\n emit('menu-open', true)\n }\n\n return () =>\n h(\n 'div',\n {\n ref: (r) => (el = r as HTMLElement | null),\n class: [\n 'dt-row',\n {\n 'is-focus': props.focused && props.keyboardFocus,\n 'is-selected': props.selected,\n 'is-expanded': props.expanded,\n 'is-error': props.error.length > 0,\n },\n ],\n role: 'row',\n 'aria-rowindex': props.rowIndex,\n 'aria-describedby': props.error.length ? errorId() : undefined,\n // Satırın tamamı tooltip anchor'ı: hatalı satırda nereye gelinirse gelinsin mesaj görünür (05 §4).\n 'data-dt-tip': props.error.length ? errorTip() : undefined,\n 'aria-selected': props.selectable ? (props.selected ? 'true' : 'false') : undefined,\n tabindex: props.focused ? 0 : -1,\n 'data-index': props.index,\n style: props.style,\n onContextmenu: props.menu ? onContextmenu : undefined,\n },\n [\n props.selectable ? selectCell() : null,\n ...withFill(props.columns, renderCell),\n props.menu ? menuCell() : null,\n ],\n )\n },\n})\n\n/** Orta ile sağ sabit sütunlar arasındaki `auto` dolgu track'ini tutan boş hücre (useColumnLayout.colsVar). */\nexport const fillCell = () => h('div', { class: 'dt-cell dt-cell-fill', role: 'presentation', 'aria-hidden': 'true' })\nexport function withFill(\n columns: Array<LayoutColumn<object>>,\n render: (col: LayoutColumn<object>) => VNodeChild,\n): VNodeChild[] {\n const at = columns.findIndex((c) => c.pinned === 'end')\n const i = at < 0 ? columns.length : at\n return [...columns.slice(0, i).map(render), fillCell(), ...columns.slice(i).map(render)]\n}\n\nfunction readPathFast(row: object, path: string): unknown {\n let v: unknown = row\n for (const key of path.split('.')) {\n if (v === null || v === undefined) return undefined\n v = (v as Record<string, unknown>)[key]\n }\n return v\n}\n","// İlk yükleme iskeleti (03 · Skeleton, T8-02): tipe göre biçim; metin çubuğu satırdan satıra %55–80 arası değişir.\nimport { defineComponent, h, type PropType } from 'vue'\nimport { TYPE_SPECS, alignOf } from '../cells/specs'\nimport type { LayoutColumn } from '../columns/useColumnLayout'\nimport { withFill } from './Row'\n\nconst WIDTHS = [72, 58, 80, 64, 55, 76, 61, 69]\n\nexport default defineComponent({\n name: 'DtSkeletonRow',\n props: {\n index: { type: Number, required: true },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: { type: Array as PropType<Array<LayoutColumn<any>>>, required: true },\n style: { type: Object as PropType<Record<string, string>>, default: undefined },\n /** DataSheet: solda 56 px gutter hücresi (kısa çubuk). */\n gutter: { type: Boolean, default: false },\n },\n setup(props) {\n const gutterCell = () =>\n h('div', { class: 'dt-cell dt-gutter is-pinned-start', style: { left: '0px' }, role: 'rowheader' }, [\n h('span', { class: 'dt-sk dt-sk-bar', style: { width: '24px' } }),\n ])\n return () =>\n h('div', { class: 'dt-row dt-row-skeleton', role: 'row', 'aria-hidden': 'true', style: props.style }, [\n props.gutter ? gutterCell() : null,\n ...withFill(props.columns, (col) => {\n const i = props.columns.indexOf(col)\n const shape = TYPE_SPECS[col.def.type].skeleton\n const width = `${WIDTHS[(props.index + i) % WIDTHS.length]}%`\n return h(\n 'div',\n {\n class: [\n 'dt-cell',\n `is-${alignOf(col.def)}`,\n {\n 'is-pinned-start': col.pinned === 'start',\n 'is-pinned-end': col.pinned === 'end',\n 'is-pin-edge': col.pinEdge,\n },\n ],\n style:\n col.pinned === 'start'\n ? { left: `var(${col.offsetVar})` }\n : col.pinned === 'end'\n ? { right: `var(${col.offsetVar})` }\n : undefined,\n role: 'gridcell',\n },\n shape === 'person'\n ? [h('span', { class: 'dt-sk dt-sk-circle' }), h('span', { class: 'dt-sk dt-sk-bar', style: { width } })]\n : shape === 'badge'\n ? h('span', { class: 'dt-sk dt-sk-pill' })\n : shape === 'number'\n ? h('span', { class: 'dt-sk dt-sk-bar dt-sk-num' })\n : h('span', { class: 'dt-sk dt-sk-bar', style: { width } }),\n )\n }),\n ])\n },\n})\n","// Tek tooltip, delegasyonla (02 · Tooltip 400 ms): kesilmiş hücre metni ve `data-dt-tip` taşıyan öğeler.\n// Hücre başına reka Tooltip örneği 500 satırda ağır olurdu; kökte tek dinleyici + tek DOM düğümü.\nimport { onBeforeUnmount, onMounted, ref, type Ref } from 'vue'\n\nconst DELAY = 400\n\nexport function useDelegatedTooltip(root: Ref<HTMLElement | null>) {\n const text = ref('')\n const style = ref<Record<string, string>>({})\n const open = ref(false)\n let timer: ReturnType<typeof setTimeout> | undefined\n let anchor: HTMLElement | null = null\n\n const tipOf = (target: Element | null): { el: HTMLElement; text: string } | null => {\n const tipped = target?.closest<HTMLElement>('[data-dt-tip]')\n if (tipped && tipped.dataset.dtTip) return { el: tipped, text: tipped.dataset.dtTip }\n const content = target?.closest<HTMLElement>('.dt-cell-content, .dt-head-label')\n if (content && content.scrollWidth > content.clientWidth + 1)\n return { el: content, text: content.textContent?.trim() ?? '' }\n return null\n }\n\n const hide = () => {\n clearTimeout(timer)\n timer = undefined\n anchor = null\n open.value = false\n }\n\n const show = (el: HTMLElement, t: string, x?: number) => {\n const r = el.getBoundingClientRect()\n text.value = t\n // Geniş anchor'da (hatalı satır) imlecin altında, dar anchor'da ortada.\n const left = x !== undefined && r.width > 320 ? x : r.left + r.width / 2\n style.value = { left: `${Math.round(left)}px`, top: `${Math.round(r.bottom + 6)}px` }\n open.value = true\n }\n\n const onOver = (e: Event) => {\n const hit = tipOf(e.target as Element)\n if (!hit) return\n if (hit.el === anchor) return\n hide()\n anchor = hit.el\n const x = (e as MouseEvent).clientX\n timer = setTimeout(() => show(hit.el, hit.text, x), DELAY)\n }\n const onOut = (e: MouseEvent) => {\n if (anchor && !anchor.contains(e.relatedTarget as Node | null)) hide()\n }\n const onFocusin = (e: FocusEvent) => {\n const hit = tipOf(e.target as Element)\n if (hit) {\n hide()\n anchor = hit.el\n show(hit.el, hit.text)\n }\n }\n\n onMounted(() => {\n const el = root.value\n if (!el) return\n el.addEventListener('mouseover', onOver)\n el.addEventListener('mouseout', onOut)\n el.addEventListener('focusin', onFocusin)\n el.addEventListener('focusout', hide)\n el.addEventListener('scroll', hide, true)\n el.addEventListener('mousedown', hide)\n })\n onBeforeUnmount(() => {\n const el = root.value\n hide()\n el?.removeEventListener('mouseover', onOver)\n el?.removeEventListener('mouseout', onOut)\n el?.removeEventListener('focusin', onFocusin)\n el?.removeEventListener('focusout', hide)\n el?.removeEventListener('scroll', hide, true)\n el?.removeEventListener('mousedown', hide)\n })\n\n return { open, text, style, hide }\n}\n","// Kişisel tercihler (05 §9, 04 §8, D5): yoğunluk, dikey çizgiler, sayfa boyutu, varsayılan görünüm — görünüme değil, tableId\n// başına tercihe yazılır.\n// Adapter yoksa oturumluk; adapter varsa `get` (senkron ya da Promise) uygulanır, her değişiklik `set` ile gider.\nimport { reactive, toValue, type MaybeRefOrGetter } from 'vue'\nimport type { Density, TableId } from '../../types/core'\nimport type { Preferences, PreferencesAdapter } from '../../types/views'\n\nexport interface PreferenceDefaults {\n density: Density\n verticalLines: boolean\n pageSize: number\n defaultViewId: string | null\n}\n\nexport function usePreferences(\n tableId: MaybeRefOrGetter<TableId>,\n adapter: PreferencesAdapter | null,\n defaults: PreferenceDefaults,\n) {\n const prefs = reactive<PreferenceDefaults>({ ...defaults })\n const id = () => toValue(tableId)\n\n const apply = (p: Partial<Preferences> | undefined) => {\n if (!p) return\n if (p.density) prefs.density = p.density\n if (typeof p.verticalLines === 'boolean') prefs.verticalLines = p.verticalLines\n if (typeof p.pageSize === 'number') prefs.pageSize = p.pageSize\n if ('defaultViewId' in p) prefs.defaultViewId = p.defaultViewId ?? null\n }\n let ready: Promise<void> = Promise.resolve()\n if (adapter) {\n const got = adapter.get(id())\n if (got instanceof Promise) ready = got.then(apply).catch(() => {})\n else apply(got)\n }\n\n const set = (patch: Partial<PreferenceDefaults>) => {\n Object.assign(prefs, patch)\n if (adapter) void Promise.resolve(adapter.set(id(), patch)).catch(() => {})\n }\n\n return {\n prefs,\n set,\n /** Display › Reset: ekran ayarları; varsayılan görünüm seçimi kalır (görünüm menüsünden yönetilir). */\n reset: () => set({ density: defaults.density, verticalLines: defaults.verticalLines, pageSize: defaults.pageSize }),\n /** Adapter'ın `get`'i çözülünce (senkron adapter'da hemen). */\n ready,\n /** Arayüz \"Saved for you only\" notunu yalnızca kalıcı depoda gösterir. */\n persistent: adapter !== null,\n }\n}\n","<script setup lang=\"ts\">\n// Durum mesajı bloğu (handoff 02-ortak §9, T9): gövdenin ortasında, en fazla 440 px; ikon kutusu 40, başlık 15/600, satırlar 13.\nimport { PhFile, PhFunnel, PhMagnifyingGlass, PhPackage, PhWarningCircle } from '@phosphor-icons/vue'\n\nconst props = defineProps<{\n kind: 'empty' | 'noResults' | 'noResultsSearch' | 'error' | 'noRowsOnPage'\n title: string\n lines?: string[]\n}>()\nconst ICONS = {\n empty: PhPackage,\n noResults: PhFunnel,\n noResultsSearch: PhMagnifyingGlass,\n error: PhWarningCircle,\n noRowsOnPage: PhFile,\n}\nconst icon = ICONS[props.kind]\n</script>\n\n<template>\n <div class=\"dt-state\" :class=\"`is-${kind}`\" :role=\"kind === 'error' ? 'alert' : 'status'\">\n <span class=\"dt-state-icon\" aria-hidden=\"true\"><component :is=\"icon\" :size=\"20\" /></span>\n <strong class=\"dt-state-title\">{{ title }}</strong>\n <p v-for=\"line in lines ?? []\" :key=\"line\" class=\"dt-state-line\">{{ line }}</p>\n <div v-if=\"$slots.default\" class=\"dt-state-actions\"><slot /></div>\n <slot name=\"after\" />\n </div>\n</template>\n","<script setup lang=\"ts\">\n// Durum mesajı bloğu (handoff 02-ortak §9, T9): gövdenin ortasında, en fazla 440 px; ikon kutusu 40, başlık 15/600, satırlar 13.\nimport { PhFile, PhFunnel, PhMagnifyingGlass, PhPackage, PhWarningCircle } from '@phosphor-icons/vue'\n\nconst props = defineProps<{\n kind: 'empty' | 'noResults' | 'noResultsSearch' | 'error' | 'noRowsOnPage'\n title: string\n lines?: string[]\n}>()\nconst ICONS = {\n empty: PhPackage,\n noResults: PhFunnel,\n noResultsSearch: PhMagnifyingGlass,\n error: PhWarningCircle,\n noRowsOnPage: PhFile,\n}\nconst icon = ICONS[props.kind]\n</script>\n\n<template>\n <div class=\"dt-state\" :class=\"`is-${kind}`\" :role=\"kind === 'error' ? 'alert' : 'status'\">\n <span class=\"dt-state-icon\" aria-hidden=\"true\"><component :is=\"icon\" :size=\"20\" /></span>\n <strong class=\"dt-state-title\">{{ title }}</strong>\n <p v-for=\"line in lines ?? []\" :key=\"line\" class=\"dt-state-line\">{{ line }}</p>\n <div v-if=\"$slots.default\" class=\"dt-state-actions\"><slot /></div>\n <slot name=\"after\" />\n </div>\n</template>\n","<script setup lang=\"ts\">\n// Columns paneli (05 §5; Display › Columns ve telefon ⋯ sayfası): bul · Pinned (kilitli) · Shown (↑ ↓ gizle) · Hidden (göster) · Reset.\nimport { PhArrowDown, PhArrowUp, PhEye, PhEyeSlash, PhLock, PhMagnifyingGlass } from '@phosphor-icons/vue'\nimport { computed, ref } from 'vue'\nimport type { ColumnDef } from '../../types/columns'\nimport { useDataTableContext } from '../plugin'\n\nexport interface PanelColumn {\n id: string\n def: ColumnDef\n visible: boolean\n pinned: 'start' | 'end' | null\n canHide: boolean\n}\n\nconst props = defineProps<{ columns: PanelColumn[] }>()\nconst emit = defineEmits<{\n 'column-visible': [id: string, visible: boolean]\n 'column-move': [id: string, delta: -1 | 1]\n 'columns-all': [visible: boolean]\n 'columns-reset': []\n}>()\nconst { i18n } = useDataTableContext()\nconst find = ref('')\nconst matches = (c: PanelColumn) =>\n !find.value || c.def.header.toLocaleLowerCase().includes(find.value.toLocaleLowerCase())\nconst pinnedCols = computed(() => props.columns.filter((c) => c.pinned && c.visible && matches(c)))\nconst shownCols = computed(() => props.columns.filter((c) => !c.pinned && c.visible && matches(c)))\nconst hiddenCols = computed(() => props.columns.filter((c) => !c.visible && matches(c)))\n</script>\n\n<template>\n <label class=\"dt-input has-icon dt-pop-find\">\n <span class=\"dt-input-icon\"><PhMagnifyingGlass :size=\"14\" aria-hidden=\"true\" /></span>\n <input v-model=\"find\" type=\"search\" :placeholder=\"i18n.t('columns.find')\" :aria-label=\"i18n.t('columns.find')\" />\n </label>\n <template v-if=\"pinnedCols.length\">\n <div class=\"dt-pop-label\">\n {{ i18n.t('columns.pinned') }}\n <span>{{ i18n.t('columns.alwaysShown') }}</span>\n </div>\n <div v-for=\"c in pinnedCols\" :key=\"c.id\" class=\"dt-col-row\">\n <span class=\"dt-col-name\">\n <span>{{ c.def.header }}</span>\n <span v-if=\"c.def.description\" class=\"dt-col-desc\">{{ c.def.description }}</span>\n </span>\n <PhLock :size=\"14\" class=\"dt-col-lock\" aria-hidden=\"true\" />\n </div>\n </template>\n <div class=\"dt-pop-label\">\n {{ i18n.t('columns.shown') }}\n <button type=\"button\" class=\"dt-pop-action\" @click=\"emit('columns-all', false)\">\n {{ i18n.t('columns.hideAll') }}\n </button>\n </div>\n <div v-for=\"(c, i) in shownCols\" :key=\"c.id\" class=\"dt-col-row\">\n <span class=\"dt-col-name\">\n <span>{{ c.def.header }}</span>\n <span v-if=\"c.def.description\" class=\"dt-col-desc\">{{ c.def.description }}</span>\n </span>\n <button\n type=\"button\"\n class=\"dt-icon-btn-xs\"\n :disabled=\"i === 0\"\n :aria-label=\"i18n.t('columns.moveUp')\"\n @click=\"emit('column-move', c.id, -1)\"\n >\n <PhArrowUp :size=\"14\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"dt-icon-btn-xs\"\n :disabled=\"i === shownCols.length - 1\"\n :aria-label=\"i18n.t('columns.moveDown')\"\n @click=\"emit('column-move', c.id, 1)\"\n >\n <PhArrowDown :size=\"14\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"dt-icon-btn-sm\"\n :disabled=\"!c.canHide\"\n :aria-label=\"i18n.t('header.hide')\"\n @click=\"emit('column-visible', c.id, false)\"\n >\n <PhEye :size=\"16\" aria-hidden=\"true\" />\n </button>\n </div>\n <div class=\"dt-pop-label\">\n {{ i18n.t('columns.hidden') }}\n <button type=\"button\" class=\"dt-pop-action\" @click=\"emit('columns-all', true)\">\n {{ i18n.t('columns.showAll') }}\n </button>\n </div>\n <div v-for=\"c in hiddenCols\" :key=\"c.id\" class=\"dt-col-row is-hidden\">\n <span class=\"dt-col-name\">\n <span>{{ c.def.header }}</span>\n <span v-if=\"c.def.description\" class=\"dt-col-desc\">{{ c.def.description }}</span>\n </span>\n <button\n type=\"button\"\n class=\"dt-icon-btn-sm\"\n :aria-label=\"i18n.t('columns.shown')\"\n @click=\"emit('column-visible', c.id, true)\"\n >\n <PhEyeSlash :size=\"16\" aria-hidden=\"true\" />\n </button>\n </div>\n <div class=\"dt-pop-foot\">\n <span />\n <button type=\"button\" class=\"dt-pop-action\" @click=\"emit('columns-reset')\">{{ i18n.t('common.reset') }}</button>\n </div>\n</template>\n","<script setup lang=\"ts\">\n// Columns paneli (05 §5; Display › Columns ve telefon ⋯ sayfası): bul · Pinned (kilitli) · Shown (↑ ↓ gizle) · Hidden (göster) · Reset.\nimport { PhArrowDown, PhArrowUp, PhEye, PhEyeSlash, PhLock, PhMagnifyingGlass } from '@phosphor-icons/vue'\nimport { computed, ref } from 'vue'\nimport type { ColumnDef } from '../../types/columns'\nimport { useDataTableContext } from '../plugin'\n\nexport interface PanelColumn {\n id: string\n def: ColumnDef\n visible: boolean\n pinned: 'start' | 'end' | null\n canHide: boolean\n}\n\nconst props = defineProps<{ columns: PanelColumn[] }>()\nconst emit = defineEmits<{\n 'column-visible': [id: string, visible: boolean]\n 'column-move': [id: string, delta: -1 | 1]\n 'columns-all': [visible: boolean]\n 'columns-reset': []\n}>()\nconst { i18n } = useDataTableContext()\nconst find = ref('')\nconst matches = (c: PanelColumn) =>\n !find.value || c.def.header.toLocaleLowerCase().includes(find.value.toLocaleLowerCase())\nconst pinnedCols = computed(() => props.columns.filter((c) => c.pinned && c.visible && matches(c)))\nconst shownCols = computed(() => props.columns.filter((c) => !c.pinned && c.visible && matches(c)))\nconst hiddenCols = computed(() => props.columns.filter((c) => !c.visible && matches(c)))\n</script>\n\n<template>\n <label class=\"dt-input has-icon dt-pop-find\">\n <span class=\"dt-input-icon\"><PhMagnifyingGlass :size=\"14\" aria-hidden=\"true\" /></span>\n <input v-model=\"find\" type=\"search\" :placeholder=\"i18n.t('columns.find')\" :aria-label=\"i18n.t('columns.find')\" />\n </label>\n <template v-if=\"pinnedCols.length\">\n <div class=\"dt-pop-label\">\n {{ i18n.t('columns.pinned') }}\n <span>{{ i18n.t('columns.alwaysShown') }}</span>\n </div>\n <div v-for=\"c in pinnedCols\" :key=\"c.id\" class=\"dt-col-row\">\n <span class=\"dt-col-name\">\n <span>{{ c.def.header }}</span>\n <span v-if=\"c.def.description\" class=\"dt-col-desc\">{{ c.def.description }}</span>\n </span>\n <PhLock :size=\"14\" class=\"dt-col-lock\" aria-hidden=\"true\" />\n </div>\n </template>\n <div class=\"dt-pop-label\">\n {{ i18n.t('columns.shown') }}\n <button type=\"button\" class=\"dt-pop-action\" @click=\"emit('columns-all', false)\">\n {{ i18n.t('columns.hideAll') }}\n </button>\n </div>\n <div v-for=\"(c, i) in shownCols\" :key=\"c.id\" class=\"dt-col-row\">\n <span class=\"dt-col-name\">\n <span>{{ c.def.header }}</span>\n <span v-if=\"c.def.description\" class=\"dt-col-desc\">{{ c.def.description }}</span>\n </span>\n <button\n type=\"button\"\n class=\"dt-icon-btn-xs\"\n :disabled=\"i === 0\"\n :aria-label=\"i18n.t('columns.moveUp')\"\n @click=\"emit('column-move', c.id, -1)\"\n >\n <PhArrowUp :size=\"14\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"dt-icon-btn-xs\"\n :disabled=\"i === shownCols.length - 1\"\n :aria-label=\"i18n.t('columns.moveDown')\"\n @click=\"emit('column-move', c.id, 1)\"\n >\n <PhArrowDown :size=\"14\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"dt-icon-btn-sm\"\n :disabled=\"!c.canHide\"\n :aria-label=\"i18n.t('header.hide')\"\n @click=\"emit('column-visible', c.id, false)\"\n >\n <PhEye :size=\"16\" aria-hidden=\"true\" />\n </button>\n </div>\n <div class=\"dt-pop-label\">\n {{ i18n.t('columns.hidden') }}\n <button type=\"button\" class=\"dt-pop-action\" @click=\"emit('columns-all', true)\">\n {{ i18n.t('columns.showAll') }}\n </button>\n </div>\n <div v-for=\"c in hiddenCols\" :key=\"c.id\" class=\"dt-col-row is-hidden\">\n <span class=\"dt-col-name\">\n <span>{{ c.def.header }}</span>\n <span v-if=\"c.def.description\" class=\"dt-col-desc\">{{ c.def.description }}</span>\n </span>\n <button\n type=\"button\"\n class=\"dt-icon-btn-sm\"\n :aria-label=\"i18n.t('columns.shown')\"\n @click=\"emit('column-visible', c.id, true)\"\n >\n <PhEyeSlash :size=\"16\" aria-hidden=\"true\" />\n </button>\n </div>\n <div class=\"dt-pop-foot\">\n <span />\n <button type=\"button\" class=\"dt-pop-action\" @click=\"emit('columns-reset')\">{{ i18n.t('common.reset') }}</button>\n </div>\n</template>\n","<script setup lang=\"ts\">\n// Sort paneli (04 §6; Display › Sort ve telefon ⋯ sayfası): sıra numarası · sütun · yön · kaldır; altta ipucu + Clear sort.\nimport { PhArrowDown, PhArrowUp, PhX } from '@phosphor-icons/vue'\nimport type { SortRule } from '../../types/query'\nimport { useDataTableContext } from '../plugin'\n\ndefineProps<{ sort: SortRule[]; headerOf: (id: string) => string }>()\nconst emit = defineEmits<{\n 'sort-dir': [column: string, dir: 'asc' | 'desc']\n 'sort-remove': [column: string]\n 'sort-clear': []\n}>()\nconst { i18n } = useDataTableContext()\n</script>\n\n<template>\n <div v-for=\"(s, i) in sort\" :key=\"s.column\" class=\"dt-col-row dt-sort-row\">\n <span class=\"dt-head-sort-index\">{{ i + 1 }}</span>\n <span class=\"dt-col-name\">{{ headerOf(s.column) }}</span>\n <button\n type=\"button\"\n class=\"dt-btn dt-btn-xs has-icon\"\n @click=\"emit('sort-dir', s.column, s.dir === 'asc' ? 'desc' : 'asc')\"\n >\n <component :is=\"s.dir === 'asc' ? PhArrowUp : PhArrowDown\" :size=\"12\" aria-hidden=\"true\" />\n {{ i18n.t(s.dir === 'asc' ? 'sr.asc' : 'sr.desc') }}\n </button>\n <button\n type=\"button\"\n class=\"dt-icon-btn-sm\"\n :aria-label=\"i18n.t('header.clearSort')\"\n @click=\"emit('sort-remove', s.column)\"\n >\n <PhX :size=\"14\" aria-hidden=\"true\" />\n </button>\n </div>\n <div class=\"dt-pop-foot\">\n <span>{{ i18n.t('sort.addHint') }}</span>\n <button type=\"button\" class=\"dt-pop-action\" :disabled=\"!sort.length\" @click=\"emit('sort-clear')\">\n {{ i18n.t('header.clearSort') }}\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\n// Sort paneli (04 §6; Display › Sort ve telefon ⋯ sayfası): sıra numarası · sütun · yön · kaldır; altta ipucu + Clear sort.\nimport { PhArrowDown, PhArrowUp, PhX } from '@phosphor-icons/vue'\nimport type { SortRule } from '../../types/query'\nimport { useDataTableContext } from '../plugin'\n\ndefineProps<{ sort: SortRule[]; headerOf: (id: string) => string }>()\nconst emit = defineEmits<{\n 'sort-dir': [column: string, dir: 'asc' | 'desc']\n 'sort-remove': [column: string]\n 'sort-clear': []\n}>()\nconst { i18n } = useDataTableContext()\n</script>\n\n<template>\n <div v-for=\"(s, i) in sort\" :key=\"s.column\" class=\"dt-col-row dt-sort-row\">\n <span class=\"dt-head-sort-index\">{{ i + 1 }}</span>\n <span class=\"dt-col-name\">{{ headerOf(s.column) }}</span>\n <button\n type=\"button\"\n class=\"dt-btn dt-btn-xs has-icon\"\n @click=\"emit('sort-dir', s.column, s.dir === 'asc' ? 'desc' : 'asc')\"\n >\n <component :is=\"s.dir === 'asc' ? PhArrowUp : PhArrowDown\" :size=\"12\" aria-hidden=\"true\" />\n {{ i18n.t(s.dir === 'asc' ? 'sr.asc' : 'sr.desc') }}\n </button>\n <button\n type=\"button\"\n class=\"dt-icon-btn-sm\"\n :aria-label=\"i18n.t('header.clearSort')\"\n @click=\"emit('sort-remove', s.column)\"\n >\n <PhX :size=\"14\" aria-hidden=\"true\" />\n </button>\n </div>\n <div class=\"dt-pop-foot\">\n <span>{{ i18n.t('sort.addHint') }}</span>\n <button type=\"button\" class=\"dt-pop-action\" :disabled=\"!sort.length\" @click=\"emit('sort-clear')\">\n {{ i18n.t('header.clearSort') }}\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\n// Display popover'ı (05 §3, §5; T3-06, T4-04/05): Density · Columns › · Sort › · Vertical grid lines · Saved for you only + Reset.\n// Telefonda yerini ⋯ alt sayfası (PhoneMoreSheet) alır. Columns ve Sort panelleri ortak (ColumnsPanel / SortPanel).\nimport { PhCaretLeft, PhCaretRight, PhSlidersHorizontal } from '@phosphor-icons/vue'\nimport {\n PopoverContent,\n PopoverPortal,\n PopoverRoot,\n PopoverTrigger,\n SwitchRoot,\n SwitchThumb,\n ToggleGroupItem,\n ToggleGroupRoot,\n} from 'reka-ui'\nimport { computed, ref, watch } from 'vue'\nimport type { Density } from '../../types/core'\nimport type { SortRule } from '../../types/query'\nimport { useDataTableContext } from '../plugin'\nimport ColumnsPanel, { type PanelColumn } from './ColumnsPanel.vue'\nimport SortPanel from './SortPanel.vue'\n\nconst props = defineProps<{\n density: Density\n verticalLines: boolean\n columns: PanelColumn[]\n counts: { shown: number; total: number }\n /** Verilmezse Sort › satırı yok (DataSheet: header tıklaması yeterli, 07 §2). */\n sort?: SortRule[]\n /** Tercih deposu varsa \"Saved for you only\". */\n persistent: boolean\n iconOnly?: boolean\n}>()\nconst emit = defineEmits<{\n 'update:density': [density: Density]\n 'update:verticalLines': [on: boolean]\n 'column-visible': [id: string, visible: boolean]\n 'column-move': [id: string, delta: -1 | 1]\n 'columns-all': [visible: boolean]\n 'columns-reset': []\n 'sort-dir': [column: string, dir: 'asc' | 'desc']\n 'sort-remove': [column: string]\n 'sort-clear': []\n reset: []\n}>()\nconst open = defineModel<boolean>('open', { default: false })\n\nconst { i18n } = useDataTableContext()\nconst DENSITIES: Density[] = ['comfortable', 'standard', 'compact']\nconst view = ref<'main' | 'columns' | 'sort'>('main')\nwatch(open, (o) => {\n if (!o) view.value = 'main'\n})\nconst headerOf = (id: string) => props.columns.find((c) => c.id === id)?.def.header ?? id\nconst sortSummary = computed(() => {\n const first = props.sort?.[0]\n if (!first) return '—'\n const more = props.sort!.length > 1 ? ` +${props.sort!.length - 1}` : ''\n return `${headerOf(first.column)} ${first.dir === 'asc' ? '↑' : '↓'}${more}`\n})\n</script>\n\n<template>\n <PopoverRoot v-model:open=\"open\">\n <PopoverTrigger as-child>\n <button\n type=\"button\"\n class=\"dt-btn has-icon\"\n :class=\"{ 'dt-btn-icon': iconOnly }\"\n :aria-label=\"iconOnly ? i18n.t('toolbar.display') : undefined\"\n :data-dt-tip=\"iconOnly ? i18n.t('toolbar.display') : undefined\"\n >\n <PhSlidersHorizontal :size=\"16\" aria-hidden=\"true\" />\n <span v-if=\"!iconOnly\">{{ i18n.t('toolbar.display') }}</span>\n </button>\n </PopoverTrigger>\n <PopoverPortal>\n <PopoverContent class=\"dt-pop dt-display\" :class=\"`is-${view}`\" align=\"end\" :side-offset=\"4\">\n <template v-if=\"view === 'main'\">\n <div class=\"dt-pop-label\">{{ i18n.t('display.density') }}</div>\n <ToggleGroupRoot\n class=\"dt-seg dt-seg-sm dt-display-density\"\n type=\"single\"\n :model-value=\"density\"\n @update:model-value=\"(v) => v && emit('update:density', v as Density)\"\n >\n <ToggleGroupItem v-for=\"d in DENSITIES\" :key=\"d\" class=\"dt-seg-item\" :value=\"d\">\n {{ i18n.t(`display.${d}`) }}\n </ToggleGroupItem>\n </ToggleGroupRoot>\n <div class=\"dt-pop-sep\" />\n <button type=\"button\" class=\"dt-pop-item\" @click=\"view = 'columns'\">\n {{ i18n.t('display.columns') }}\n <span class=\"dt-pop-value\">{{ i18n.t('columns.shownOf', counts) }}</span>\n <PhCaretRight :size=\"14\" aria-hidden=\"true\" />\n </button>\n <button v-if=\"sort\" type=\"button\" class=\"dt-pop-item\" @click=\"view = 'sort'\">\n {{ i18n.t('display.sort') }}\n <span class=\"dt-pop-value\">{{ sortSummary }}</span>\n <PhCaretRight :size=\"14\" aria-hidden=\"true\" />\n </button>\n <label class=\"dt-pop-item\">\n {{ i18n.t('display.verticalLines') }}\n <SwitchRoot\n class=\"dt-switch dt-pop-end\"\n :model-value=\"verticalLines\"\n @update:model-value=\"(v) => emit('update:verticalLines', v)\"\n >\n <SwitchThumb class=\"dt-switch-thumb\" />\n </SwitchRoot>\n </label>\n <div class=\"dt-pop-foot\">\n <span>{{ persistent ? i18n.t('display.savedForYou') : '' }}</span>\n <button type=\"button\" class=\"dt-pop-action\" @click=\"emit('reset')\">{{ i18n.t('common.reset') }}</button>\n </div>\n </template>\n\n <template v-else>\n <div class=\"dt-pop-head\">\n <button type=\"button\" class=\"dt-icon-btn-sm\" :aria-label=\"i18n.t('common.back')\" @click=\"view = 'main'\">\n <PhCaretLeft :size=\"16\" aria-hidden=\"true\" />\n </button>\n <strong>{{ i18n.t(view === 'columns' ? 'display.columns' : 'display.sort') }}</strong>\n <span v-if=\"view === 'columns'\" class=\"dt-pop-value\">{{ i18n.t('columns.shownOf', counts) }}</span>\n </div>\n <ColumnsPanel\n v-if=\"view === 'columns'\"\n :columns=\"columns\"\n @column-visible=\"(id, v) => emit('column-visible', id, v)\"\n @column-move=\"(id, d) => emit('column-move', id, d)\"\n @columns-all=\"(v) => emit('columns-all', v)\"\n @columns-reset=\"emit('columns-reset')\"\n />\n <SortPanel\n v-else\n :sort=\"sort ?? []\"\n :header-of=\"headerOf\"\n @sort-dir=\"(c, d) => emit('sort-dir', c, d)\"\n @sort-remove=\"(c) => emit('sort-remove', c)\"\n @sort-clear=\"emit('sort-clear')\"\n />\n </template>\n </PopoverContent>\n </PopoverPortal>\n </PopoverRoot>\n</template>\n","<script setup lang=\"ts\">\n// Display popover'ı (05 §3, §5; T3-06, T4-04/05): Density · Columns › · Sort › · Vertical grid lines · Saved for you only + Reset.\n// Telefonda yerini ⋯ alt sayfası (PhoneMoreSheet) alır. Columns ve Sort panelleri ortak (ColumnsPanel / SortPanel).\nimport { PhCaretLeft, PhCaretRight, PhSlidersHorizontal } from '@phosphor-icons/vue'\nimport {\n PopoverContent,\n PopoverPortal,\n PopoverRoot,\n PopoverTrigger,\n SwitchRoot,\n SwitchThumb,\n ToggleGroupItem,\n ToggleGroupRoot,\n} from 'reka-ui'\nimport { computed, ref, watch } from 'vue'\nimport type { Density } from '../../types/core'\nimport type { SortRule } from '../../types/query'\nimport { useDataTableContext } from '../plugin'\nimport ColumnsPanel, { type PanelColumn } from './ColumnsPanel.vue'\nimport SortPanel from './SortPanel.vue'\n\nconst props = defineProps<{\n density: Density\n verticalLines: boolean\n columns: PanelColumn[]\n counts: { shown: number; total: number }\n /** Verilmezse Sort › satırı yok (DataSheet: header tıklaması yeterli, 07 §2). */\n sort?: SortRule[]\n /** Tercih deposu varsa \"Saved for you only\". */\n persistent: boolean\n iconOnly?: boolean\n}>()\nconst emit = defineEmits<{\n 'update:density': [density: Density]\n 'update:verticalLines': [on: boolean]\n 'column-visible': [id: string, visible: boolean]\n 'column-move': [id: string, delta: -1 | 1]\n 'columns-all': [visible: boolean]\n 'columns-reset': []\n 'sort-dir': [column: string, dir: 'asc' | 'desc']\n 'sort-remove': [column: string]\n 'sort-clear': []\n reset: []\n}>()\nconst open = defineModel<boolean>('open', { default: false })\n\nconst { i18n } = useDataTableContext()\nconst DENSITIES: Density[] = ['comfortable', 'standard', 'compact']\nconst view = ref<'main' | 'columns' | 'sort'>('main')\nwatch(open, (o) => {\n if (!o) view.value = 'main'\n})\nconst headerOf = (id: string) => props.columns.find((c) => c.id === id)?.def.header ?? id\nconst sortSummary = computed(() => {\n const first = props.sort?.[0]\n if (!first) return '—'\n const more = props.sort!.length > 1 ? ` +${props.sort!.length - 1}` : ''\n return `${headerOf(first.column)} ${first.dir === 'asc' ? '↑' : '↓'}${more}`\n})\n</script>\n\n<template>\n <PopoverRoot v-model:open=\"open\">\n <PopoverTrigger as-child>\n <button\n type=\"button\"\n class=\"dt-btn has-icon\"\n :class=\"{ 'dt-btn-icon': iconOnly }\"\n :aria-label=\"iconOnly ? i18n.t('toolbar.display') : undefined\"\n :data-dt-tip=\"iconOnly ? i18n.t('toolbar.display') : undefined\"\n >\n <PhSlidersHorizontal :size=\"16\" aria-hidden=\"true\" />\n <span v-if=\"!iconOnly\">{{ i18n.t('toolbar.display') }}</span>\n </button>\n </PopoverTrigger>\n <PopoverPortal>\n <PopoverContent class=\"dt-pop dt-display\" :class=\"`is-${view}`\" align=\"end\" :side-offset=\"4\">\n <template v-if=\"view === 'main'\">\n <div class=\"dt-pop-label\">{{ i18n.t('display.density') }}</div>\n <ToggleGroupRoot\n class=\"dt-seg dt-seg-sm dt-display-density\"\n type=\"single\"\n :model-value=\"density\"\n @update:model-value=\"(v) => v && emit('update:density', v as Density)\"\n >\n <ToggleGroupItem v-for=\"d in DENSITIES\" :key=\"d\" class=\"dt-seg-item\" :value=\"d\">\n {{ i18n.t(`display.${d}`) }}\n </ToggleGroupItem>\n </ToggleGroupRoot>\n <div class=\"dt-pop-sep\" />\n <button type=\"button\" class=\"dt-pop-item\" @click=\"view = 'columns'\">\n {{ i18n.t('display.columns') }}\n <span class=\"dt-pop-value\">{{ i18n.t('columns.shownOf', counts) }}</span>\n <PhCaretRight :size=\"14\" aria-hidden=\"true\" />\n </button>\n <button v-if=\"sort\" type=\"button\" class=\"dt-pop-item\" @click=\"view = 'sort'\">\n {{ i18n.t('display.sort') }}\n <span class=\"dt-pop-value\">{{ sortSummary }}</span>\n <PhCaretRight :size=\"14\" aria-hidden=\"true\" />\n </button>\n <label class=\"dt-pop-item\">\n {{ i18n.t('display.verticalLines') }}\n <SwitchRoot\n class=\"dt-switch dt-pop-end\"\n :model-value=\"verticalLines\"\n @update:model-value=\"(v) => emit('update:verticalLines', v)\"\n >\n <SwitchThumb class=\"dt-switch-thumb\" />\n </SwitchRoot>\n </label>\n <div class=\"dt-pop-foot\">\n <span>{{ persistent ? i18n.t('display.savedForYou') : '' }}</span>\n <button type=\"button\" class=\"dt-pop-action\" @click=\"emit('reset')\">{{ i18n.t('common.reset') }}</button>\n </div>\n </template>\n\n <template v-else>\n <div class=\"dt-pop-head\">\n <button type=\"button\" class=\"dt-icon-btn-sm\" :aria-label=\"i18n.t('common.back')\" @click=\"view = 'main'\">\n <PhCaretLeft :size=\"16\" aria-hidden=\"true\" />\n </button>\n <strong>{{ i18n.t(view === 'columns' ? 'display.columns' : 'display.sort') }}</strong>\n <span v-if=\"view === 'columns'\" class=\"dt-pop-value\">{{ i18n.t('columns.shownOf', counts) }}</span>\n </div>\n <ColumnsPanel\n v-if=\"view === 'columns'\"\n :columns=\"columns\"\n @column-visible=\"(id, v) => emit('column-visible', id, v)\"\n @column-move=\"(id, d) => emit('column-move', id, d)\"\n @columns-all=\"(v) => emit('columns-all', v)\"\n @columns-reset=\"emit('columns-reset')\"\n />\n <SortPanel\n v-else\n :sort=\"sort ?? []\"\n :header-of=\"headerOf\"\n @sort-dir=\"(c, d) => emit('sort-dir', c, d)\"\n @sort-remove=\"(c) => emit('sort-remove', c)\"\n @sort-clear=\"emit('sort-clear')\"\n />\n </template>\n </PopoverContent>\n </PopoverPortal>\n </PopoverRoot>\n</template>\n","<script setup lang=\"ts\">\n// Toolbar araması (04 §5, D3): çip üretmez; 250 ms debounce; Esc önce temizler, ikinci Esc odaktan çıkar; `/` dışarıdan odaklar.\nimport { PhMagnifyingGlass, PhX, PhXCircle } from '@phosphor-icons/vue'\nimport { onBeforeUnmount, ref, watch } from 'vue'\nimport { useDataTableContext } from '../plugin'\n\n/** `phone`: telefon toolbar araması (T13-03) — 40 px, ikon 18, dolu XCircle temizleme, kısayol rozeti yok. */\nconst props = defineProps<{\n modelValue: string\n placeholder: string\n collapsed?: boolean\n kbd?: string\n phone?: boolean\n}>()\nconst emit = defineEmits<{ 'update:modelValue': [value: string] }>()\nconst { i18n } = useDataTableContext()\n\nconst input = ref<HTMLInputElement | null>(null)\nconst draft = ref(props.modelValue)\nlet timer: ReturnType<typeof setTimeout> | undefined\nwatch(\n () => props.modelValue,\n (v) => (draft.value = v),\n)\nconst commit = (value: string, immediate = false) => {\n draft.value = value\n clearTimeout(timer)\n if (immediate) emit('update:modelValue', value)\n else timer = setTimeout(() => emit('update:modelValue', value), 250)\n}\nonBeforeUnmount(() => clearTimeout(timer))\n\nconst onKeydown = (e: KeyboardEvent) => {\n if (e.key !== 'Escape') return\n e.preventDefault()\n if (draft.value) commit('', true)\n else input.value?.blur()\n}\ndefineExpose({ focus: () => input.value?.focus() })\n</script>\n\n<template>\n <label class=\"dt-input dt-search has-icon\" :class=\"{ 'is-collapsed': collapsed && !draft }\">\n <span class=\"dt-input-icon\"><PhMagnifyingGlass :size=\"phone ? 18 : 16\" aria-hidden=\"true\" /></span>\n <input\n ref=\"input\"\n type=\"search\"\n :value=\"draft\"\n :placeholder=\"placeholder\"\n :aria-label=\"placeholder\"\n autocomplete=\"off\"\n @input=\"commit(($event.target as HTMLInputElement).value)\"\n @keydown=\"onKeydown\"\n />\n <span class=\"dt-input-end\">\n <button\n v-if=\"draft\"\n type=\"button\"\n class=\"dt-input-clear\"\n :aria-label=\"i18n.t('common.clear')\"\n @click=\"commit('', true)\"\n >\n <PhXCircle v-if=\"phone\" :size=\"20\" weight=\"fill\" aria-hidden=\"true\" />\n <PhX v-else :size=\"14\" aria-hidden=\"true\" />\n </button>\n <kbd v-else-if=\"!phone\" class=\"dt-kbd\" aria-hidden=\"true\">{{ kbd ?? '/' }}</kbd>\n </span>\n </label>\n</template>\n","<script setup lang=\"ts\">\n// Toolbar araması (04 §5, D3): çip üretmez; 250 ms debounce; Esc önce temizler, ikinci Esc odaktan çıkar; `/` dışarıdan odaklar.\nimport { PhMagnifyingGlass, PhX, PhXCircle } from '@phosphor-icons/vue'\nimport { onBeforeUnmount, ref, watch } from 'vue'\nimport { useDataTableContext } from '../plugin'\n\n/** `phone`: telefon toolbar araması (T13-03) — 40 px, ikon 18, dolu XCircle temizleme, kısayol rozeti yok. */\nconst props = defineProps<{\n modelValue: string\n placeholder: string\n collapsed?: boolean\n kbd?: string\n phone?: boolean\n}>()\nconst emit = defineEmits<{ 'update:modelValue': [value: string] }>()\nconst { i18n } = useDataTableContext()\n\nconst input = ref<HTMLInputElement | null>(null)\nconst draft = ref(props.modelValue)\nlet timer: ReturnType<typeof setTimeout> | undefined\nwatch(\n () => props.modelValue,\n (v) => (draft.value = v),\n)\nconst commit = (value: string, immediate = false) => {\n draft.value = value\n clearTimeout(timer)\n if (immediate) emit('update:modelValue', value)\n else timer = setTimeout(() => emit('update:modelValue', value), 250)\n}\nonBeforeUnmount(() => clearTimeout(timer))\n\nconst onKeydown = (e: KeyboardEvent) => {\n if (e.key !== 'Escape') return\n e.preventDefault()\n if (draft.value) commit('', true)\n else input.value?.blur()\n}\ndefineExpose({ focus: () => input.value?.focus() })\n</script>\n\n<template>\n <label class=\"dt-input dt-search has-icon\" :class=\"{ 'is-collapsed': collapsed && !draft }\">\n <span class=\"dt-input-icon\"><PhMagnifyingGlass :size=\"phone ? 18 : 16\" aria-hidden=\"true\" /></span>\n <input\n ref=\"input\"\n type=\"search\"\n :value=\"draft\"\n :placeholder=\"placeholder\"\n :aria-label=\"placeholder\"\n autocomplete=\"off\"\n @input=\"commit(($event.target as HTMLInputElement).value)\"\n @keydown=\"onKeydown\"\n />\n <span class=\"dt-input-end\">\n <button\n v-if=\"draft\"\n type=\"button\"\n class=\"dt-input-clear\"\n :aria-label=\"i18n.t('common.clear')\"\n @click=\"commit('', true)\"\n >\n <PhXCircle v-if=\"phone\" :size=\"20\" weight=\"fill\" aria-hidden=\"true\" />\n <PhX v-else :size=\"14\" aria-hidden=\"true\" />\n </button>\n <kbd v-else-if=\"!phone\" class=\"dt-kbd\" aria-hidden=\"true\">{{ kbd ?? '/' }}</kbd>\n </span>\n </label>\n</template>\n","<script setup lang=\"ts\">\n// Onay dialog'u (brief §5.7, handoff 02 §6, 08): `alertdialog`, 460 px, ilk odak güvenli buton (Cancel), yıkıcı buton kırmızı.\nimport {\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogRoot,\n AlertDialogTitle,\n} from 'reka-ui'\nimport { useDataTableContext } from '../plugin'\n\ndefineProps<{ title: string; body?: string; confirmLabel: string; cancelLabel?: string; danger?: boolean }>()\nconst emit = defineEmits<{ confirm: [] }>()\nconst open = defineModel<boolean>('open', { default: false })\nconst { i18n } = useDataTableContext()\n/** Önce onay, sonra kapanış: kapanış dinleyicisi (update:open) onaydan önce çalışıp bağlamı silmesin. */\nconst confirm = () => {\n emit('confirm')\n open.value = false\n}\n</script>\n\n<template>\n <AlertDialogRoot v-model:open=\"open\">\n <AlertDialogPortal>\n <AlertDialogOverlay class=\"dt-scrim\" />\n <AlertDialogContent class=\"dt-dialog dt-dialog-confirm\">\n <AlertDialogTitle class=\"dt-dialog-title\">{{ title }}</AlertDialogTitle>\n <AlertDialogDescription v-if=\"body\" class=\"dt-dialog-body\">{{ body }}</AlertDialogDescription>\n <div class=\"dt-dialog-actions\">\n <AlertDialogCancel class=\"dt-btn\">{{ cancelLabel ?? i18n.t('common.cancel') }}</AlertDialogCancel>\n <button type=\"button\" class=\"dt-btn\" :class=\"danger ? 'dt-btn-danger' : 'dt-btn-primary'\" @click=\"confirm\">\n {{ confirmLabel }}\n </button>\n </div>\n </AlertDialogContent>\n </AlertDialogPortal>\n </AlertDialogRoot>\n</template>\n","<script setup lang=\"ts\">\n// Onay dialog'u (brief §5.7, handoff 02 §6, 08): `alertdialog`, 460 px, ilk odak güvenli buton (Cancel), yıkıcı buton kırmızı.\nimport {\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogRoot,\n AlertDialogTitle,\n} from 'reka-ui'\nimport { useDataTableContext } from '../plugin'\n\ndefineProps<{ title: string; body?: string; confirmLabel: string; cancelLabel?: string; danger?: boolean }>()\nconst emit = defineEmits<{ confirm: [] }>()\nconst open = defineModel<boolean>('open', { default: false })\nconst { i18n } = useDataTableContext()\n/** Önce onay, sonra kapanış: kapanış dinleyicisi (update:open) onaydan önce çalışıp bağlamı silmesin. */\nconst confirm = () => {\n emit('confirm')\n open.value = false\n}\n</script>\n\n<template>\n <AlertDialogRoot v-model:open=\"open\">\n <AlertDialogPortal>\n <AlertDialogOverlay class=\"dt-scrim\" />\n <AlertDialogContent class=\"dt-dialog dt-dialog-confirm\">\n <AlertDialogTitle class=\"dt-dialog-title\">{{ title }}</AlertDialogTitle>\n <AlertDialogDescription v-if=\"body\" class=\"dt-dialog-body\">{{ body }}</AlertDialogDescription>\n <div class=\"dt-dialog-actions\">\n <AlertDialogCancel class=\"dt-btn\">{{ cancelLabel ?? i18n.t('common.cancel') }}</AlertDialogCancel>\n <button type=\"button\" class=\"dt-btn\" :class=\"danger ? 'dt-btn-danger' : 'dt-btn-primary'\" @click=\"confirm\">\n {{ confirmLabel }}\n </button>\n </div>\n </AlertDialogContent>\n </AlertDialogPortal>\n </AlertDialogRoot>\n</template>\n","// Tipe göre sıralama karşılaştırıcısı (04 §6): boş değer \"en büyük\" (artanda sonda, azalanda başta — PostgreSQL varsayılanı).\n// Liste (useListTable) ve sheet (yerel sıralama, 07 §10) aynı kuralı kullanır.\nimport type { ColumnDef } from '../../types/columns'\nimport { getFormat } from '../format'\nimport { TYPE_SPECS } from './specs'\n\nconst isEmpty = (v: unknown) => v === null || v === undefined || v === ''\n\nexport function comparator(def: ColumnDef, locale: string): (a: unknown, b: unknown) => number {\n const empty = (a: unknown, b: unknown): number | null => {\n const ea = isEmpty(a)\n const eb = isEmpty(b)\n if (ea && eb) return 0\n if (ea) return 1\n if (eb) return -1\n return null\n }\n const spec = TYPE_SPECS[def.type]\n if (spec.numeric || def.type === 'boolean' || def.type === 'star') {\n return (a, b) => empty(a, b) ?? Number(a) - Number(b)\n }\n if (def.type === 'date' || def.type === 'datetime') {\n return (a, b) => empty(a, b) ?? new Date(a as string).getTime() - new Date(b as string).getTime()\n }\n const collator = getFormat(locale).collator()\n return (a, b) => empty(a, b) ?? collator.compare(String(a), String(b))\n}\n","// api-draft.ts §3'ten türetildi: filtre, sıralama, sütun düzeni.\nimport type { IsoDate } from './core'\n\n/** 18 operatör (04). Çok değerli hücrelerde (multiselect) `in` \"şunlardan birini içerir\" anlamındadır. */\nexport type FilterOp =\n | 'is_empty'\n | 'is_not_empty'\n | 'eq'\n | 'neq'\n | 'contains'\n | 'not_contains'\n | 'starts_with'\n | 'ends_with'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'between'\n | 'in'\n | 'not_in'\n | 'before'\n | 'after'\n | 'within'\n\nexport type DatePreset =\n 'today' | 'this_week' | 'next_7_days' | 'this_month' | 'last_30_days' | 'this_quarter' | 'overdue'\n\n/** `user` filtrelerinde oturumdaki kullanıcı. Sunucuda çözülür. */\nexport const ME = '@me' as const\n\n/** Operatöre göre ayrışan koşul. `currency` sütununda değer düz sayıdır; para birimi `currency` alanıyla gelir. */\nexport type FilterCondition =\n | { column: string; op: 'is_empty' | 'is_not_empty' }\n | { column: string; op: 'eq' | 'neq'; value: string | number | boolean }\n | { column: string; op: 'contains' | 'not_contains' | 'starts_with' | 'ends_with'; value: string }\n | { column: string; op: 'gt' | 'gte' | 'lt' | 'lte'; value: number; currency?: string }\n /** Uçlar dahil; tek taraflıysa biri null. */\n | { column: string; op: 'between'; value: [number | null, number | null]; currency?: string }\n | { column: string; op: 'in' | 'not_in'; value: Array<string | number> }\n | { column: string; op: 'before' | 'after'; value: IsoDate | { preset: 'today' } }\n | { column: string; op: 'within'; value: { preset: DatePreset } | { from: IsoDate; to: IsoDate } }\n\nexport interface SortRule {\n column: string\n dir: 'asc' | 'desc'\n}\n\nexport interface TableQuery {\n search: string\n filters: FilterCondition[]\n /** Öncelik sırasıyla, en fazla 3. */\n sort: SortRule[]\n /** Sayfa numarası 1'den başlar (Laravel simplePaginate ile aynı). */\n page: { number: number; size: number }\n /** Görünür sütun id'leri. */\n columns: string[]\n /** Sunucudan istenen alan yolları: görünür sütunların yolları + sütunların `fields`'i + tablonun `fields` prop'u. */\n fields: string[]\n}\n\nexport type QueryWithoutPage = Omit<TableQuery, 'page'>\n\nexport type RequestReason = 'initial' | 'query' | 'page' | 'columns' | 'refresh'\n\n/**\n * `@request` olayının yükü. Paket veri çekmez: uygulama bu sorguyla kendi HTTP'sini atar ve\n * `rows`, `hasMore`, `loading`, `error` prop'larını günceller. Her yeni talepte öncekinin `signal`'i abort edilir.\n */\nexport interface TableRequest {\n query: TableQuery\n reason: RequestReason\n signal: AbortSignal\n}\n\n/** `countable` tablolarda \"Count total\" → `@count`; uygulama `total` prop'unu verir. */\nexport interface CountRequest {\n query: QueryWithoutPage\n signal: AbortSignal\n}\n\n/** `true` genel hata; string mesaj; nesne: mesaj + hata kimliği (\"Copy error ID\"). */\nexport type TableError = boolean | string | { message?: string; id?: string }\n\nexport interface ColumnLayout {\n /** Görünür + gizli tüm sütunların sırası. */\n order: string[]\n /** Tanımlıysa beyaz liste: burada olmayan (sonradan eklenen) sütun gizlidir. */\n visible: string[]\n /** Yalnızca varsayılandan farklı genişlikler. */\n widths: Record<string, number>\n pinned: { left: string[]; right: string[] }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* shadcn-vue köprüsü (Tailwind v3: değişkenler HSL üçlüsü, ör. "0 0% 100%"). tokens.css'ten SONRA yükleyin.
|
|
2
|
+
Eşleme shadcn-bridge.css ile aynıdır; her değişken hsl(var(--x)) ile sarılır. */
|
|
3
|
+
:root,
|
|
4
|
+
.dark,
|
|
5
|
+
[data-theme='light'],
|
|
6
|
+
[data-theme='dark'] {
|
|
7
|
+
--dt-canvas: hsl(var(--background));
|
|
8
|
+
--dt-surface: hsl(var(--card));
|
|
9
|
+
--dt-surface-2: color-mix(in oklab, hsl(var(--muted)) 45%, hsl(var(--card)));
|
|
10
|
+
--dt-surface-3: hsl(var(--muted));
|
|
11
|
+
--dt-line: hsl(var(--border));
|
|
12
|
+
--dt-line-2: hsl(var(--input));
|
|
13
|
+
--dt-line-3: color-mix(in oklab, hsl(var(--muted-foreground)) 45%, hsl(var(--border)));
|
|
14
|
+
--dt-text: hsl(var(--foreground));
|
|
15
|
+
--dt-text-2: color-mix(in oklab, hsl(var(--foreground)) 70%, hsl(var(--muted-foreground)));
|
|
16
|
+
--dt-text-3: hsl(var(--muted-foreground));
|
|
17
|
+
--dt-ink: hsl(var(--primary));
|
|
18
|
+
--dt-on-ink: hsl(var(--primary-foreground));
|
|
19
|
+
--dt-focus: hsl(var(--ring));
|
|
20
|
+
--dt-r-dot: hsl(var(--destructive));
|
|
21
|
+
--dt-r-fg: hsl(var(--destructive));
|
|
22
|
+
}
|