@medyat/vue-data-table 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/dist/ColumnsDialog-dngip-aF.js +251 -0
- package/dist/ColumnsDialog-dngip-aF.js.map +1 -0
- package/dist/{DateEditor-BTIZMwf1.js → DateEditor-C2zzyoPQ.js} +2 -2
- package/dist/{DateEditor-BTIZMwf1.js.map → DateEditor-C2zzyoPQ.js.map} +1 -1
- package/dist/FiltersSheet-C3zOlbkN.js +284 -0
- package/dist/{FiltersSheet-o2HaQuhq.js.map → FiltersSheet-C3zOlbkN.js.map} +1 -1
- package/dist/PhoneMoreSheet-66OdIZrl.js +266 -0
- package/dist/PhoneMoreSheet-66OdIZrl.js.map +1 -0
- package/dist/{TextEditor-DPqiiRau.js → TextEditor-CHLM6u-l.js} +24 -25
- package/dist/{TextEditor-DPqiiRau.js.map → TextEditor-CHLM6u-l.js.map} +1 -1
- package/dist/index.d.ts +11 -6
- package/dist/index.js +1423 -1568
- package/dist/index.js.map +1 -1
- package/dist/query-CGNWUi2E.js +2904 -0
- package/dist/query-CGNWUi2E.js.map +1 -0
- package/dist/sheet.d.ts +15 -14
- package/dist/sheet.js +1754 -1816
- package/dist/sheet.js.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +24 -17
- package/dist/FiltersSheet-o2HaQuhq.js +0 -285
- package/dist/PhoneMoreSheet-gfkH96RR.js +0 -227
- package/dist/PhoneMoreSheet-gfkH96RR.js.map +0 -1
- package/dist/plugin-DhgcjEdi.js +0 -813
- package/dist/plugin-DhgcjEdi.js.map +0 -1
- package/dist/query-DQWMlX0m.js +0 -2121
- package/dist/query-DQWMlX0m.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-CGNWUi2E.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","_openBlock","_createElementBlock","_createBlock","_unref","_withCtx","_createVNode","_createElementVNode","_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","_useModel","_openBlock","_createElementBlock","_Fragment","_createVNode","_unref","_withCtx","_createElementVNode","_normalizeClass","_toDisplayString","_createCommentVNode","_renderList","_createTextVNode","_createBlock","_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","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","plainText","patterns","datePattern","parts","CODE","x","decimals","wallClock","xlsxCell","code","day","text","listOptions","HEADER","FONT_PT","sheetName","widthOf","w","t","texts","l","toCsv","sep","job","esc","c","r","toXlsx","writeXlsxFile","util","data","columns","rows","sample","widths","listed","values","i","optionsName","ref","validations","col","j","optionRows","optionsData","feature","xml","order","markup","main","download","a","blob","fileName","exportFile","features","tableFeatures","trackCss","trackMin","offsetVarName","alwaysShown","useColumnLayout","defs","computed","toValue","defById","rowKey","layout","fixed","trackFor","k","minOf","clampWidth","px","tanstackColumns","known","stateOf","fx","start","end","visibility","sizing","initialState","table","useTable","headerById","h","toLayoutColumn","phone","isPrimary","startCols","centerCols","endCols","isPinnedCol","all","center","trackOf","resized","pinned","colsVar","offsetVars","out","left","minWidth","sum","panel","rank","b","counts","move","ordered","at","me","region","delta","other","apply","arrange","free","state","reset","visible","en","builtinMessages","defaultLocale","lookup","head","rest","params","interpolate","flatten","k2","v2","createI18n","plural","form","msg","DATA_TABLE_KEY","createContext","createDataTable","fallback","useDataTableContext","inject","toneClass","tone","toneStyle","AVATAR_TONES","avatarTone","hash","ch","initialsOf","label","badge","icon","more","cls","tip","count","mono","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","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","min","needle","item","wanted","shortNum","summarize","unit","from","to","toText","labels","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","_hoisted_1$5","_hoisted_2$4","_hoisted_3$4","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$4","_hoisted_2$3","_hoisted_3$3","_hoisted_4$3","_hoisted_5$2","_hoisted_6$1","_hoisted_7","RowMenu_default","__emit","emit","inline","hasItems","firstDestructive","subOf","isDisabled","onOpen","_cache","DropdownMenuSeparator","Row_default","promote","onMounted","onUpdated","errorTip","errorId","errorIcon","PhWarningCircle","inlineButton","reason","descId","renderCell","readPathFast","align","content","secondary","overlay","withExpand","lead","PhCaretRight","selectCell","e","menuCell","withFill","fillCell","render","WIDTHS","SkeletonRow_default","gutterCell","width","DELAY","useDelegatedTooltip","open","timer","anchor","tipped","hide","show","onOver","onOut","onFocusin","root","onBeforeUnmount","usePreferences","prefs","reactive","defaults","tableId","ready","adapter","got","set","patch","_hoisted_1$3","_hoisted_2$2","_hoisted_3$2","_hoisted_4$2","StateMessage_default","PhPackage","PhFunnel","PhMagnifyingGlass","PhFile","line","_ctx","renderSlot","_hoisted_1$2","_hoisted_2$1","_hoisted_3$1","_hoisted_4$1","_hoisted_5$1","_hoisted_6","DisplayPopover_default","\"open\"","\"openModifiers\"","ColumnsDialog","defineAsyncComponent","columnsUsed","useModel","DENSITIES","columnsOpen","trigger","openColumns","focusTrigger","PopoverRoot","$event","PopoverTrigger","PhSlidersHorizontal","PopoverPortal","PopoverContent","ToggleGroupRoot","ToggleGroupItem","SwitchRoot","SwitchThumb","_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","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/export/cells.ts","../src/core/export/write.ts","../src/core/columns/useColumnLayout.ts","../src/core/i18n/en.ts","../src/core/i18n/tr.ts","../src/core/i18n/index.ts","../src/core/plugin.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/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","// Dışa aktarma ve pano için hücre değeri (05 §3, 07 §7, 07 §13, D46). Saf fonksiyonlar; kütüphaneye bağlı değil.\nimport type { ColumnDef } from '../../types/columns'\nimport { formatCell, isEmptyValue, optionLabel, type FormatEnv } from '../cells/format'\nimport { toDate } from '../format'\n\n/**\n * Düz metin: görüntülenen biçim, ama geri yapıştırılabilir/içe aktarılabilir (07 §7). Para kodu ve \"—\" yok,\n * tarihler ISO, listeler `; ` ile. Pano ve CSV bunu kullanır.\n */\nexport function plainText<Row extends object>(def: ColumnDef<Row>, row: Row, value: unknown, env: FormatEnv): string {\n if (isEmptyValue(value)) return ''\n switch (def.type) {\n case 'currency':\n return env.fmt.decimal(Number(value), def.decimalPlaces ?? 2)\n case 'date':\n case 'datetime':\n return value instanceof Date ? value.toISOString() : String(value)\n case 'multiselect':\n return (value as unknown[]).map((v) => optionLabel(def.options, v)).join('; ')\n case 'string':\n case 'text':\n case 'uppercase':\n case 'lowercase':\n case 'email':\n case 'url':\n case 'phone':\n case 'id':\n return String(value)\n default:\n return formatCell(def, row, value, env)\n }\n}\n\n/** write-excel-file hücresi (stil hariç). */\nexport interface XlsxCell {\n value: string | number | Date | null\n type?: StringConstructor | NumberConstructor | DateConstructor\n format?: string\n}\n\n/** Yerel ayarın gün/ay/yıl sırası Excel biçimi olarak: tr → `dd.mm.yyyy`, en → `mm/dd/yyyy`. Yerel ayar başına bir kez. */\nconst patterns = new Map<string, string>()\nexport function datePattern(locale: string): string {\n let p = patterns.get(locale)\n if (p === undefined) {\n const parts = new Intl.DateTimeFormat(locale, { year: 'numeric', month: '2-digit', day: '2-digit' }).formatToParts(\n new Date(2026, 9, 24),\n )\n const CODE: Partial<Record<Intl.DateTimeFormatPartTypes, string>> = { year: 'yyyy', month: 'mm', day: 'dd' }\n p = parts.map((x) => CODE[x.type] ?? x.value).join('')\n patterns.set(locale, p)\n }\n return p\n}\n\nconst decimals = (dp: number) => (dp > 0 ? `#,##0.${'0'.repeat(dp)}` : '#,##0')\n\n/**\n * Excel kütüphanesi Date'i UTC'den seri sayıya çevirir; hücrenin duvar saatini korumak için yerel bileşenler UTC'ye\n * yazılır (aksi halde UTC+3'te 24 Ekim gece yarısı 23 Ekim olur).\n */\nconst wallClock = (d: Date) =>\n new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds()))\n\n/**\n * Excel hücresi: sayılar ve tarihler tipli (Excel'de hesaplanabilir, biçimi Excel verir), seçenekler etiketiyle,\n * boolean Yes/No; geri içe aktarılınca aynı değere döner (07 §13).\n */\nexport function xlsxCell<Row extends object>(def: ColumnDef<Row>, row: Row, value: unknown, env: FormatEnv): XlsxCell {\n if (isEmptyValue(value)) return { value: null }\n switch (def.type) {\n case 'int':\n case 'star':\n return { value: Number(value), type: Number, format: '#,##0' }\n case 'float':\n return { value: Number(value), type: Number, format: decimals(def.decimalPlaces ?? 2) }\n case 'percentage':\n // Değer 20 = %20 (03); geri içe aktarılınca 20 kalsın diye bölünmez, işaret biçimde.\n return { value: Number(value), type: Number, format: `${decimals(def.decimalPlaces ?? 0)}\"%\"` }\n case 'currency': {\n const code = typeof def.currency === 'string' ? ` \"${def.currency}\"` : ''\n return { value: Number(value), type: Number, format: decimals(def.decimalPlaces ?? 2) + code }\n }\n case 'date':\n case 'datetime': {\n const d = toDate(value as string | Date)\n if (Number.isNaN(d.getTime())) return { value: String(value), type: String }\n const day = datePattern(env.i18n.locale)\n return { value: wallClock(d), type: Date, format: def.type === 'date' ? day : `${day} hh:mm` }\n }\n default: {\n const text = plainText(def, row, value, env)\n return { value: text === '' ? null : text, type: String }\n }\n }\n}\n\n/** Seçenek listesi Excel'de açılır liste olur (seçenek sayfasından, D46): yalnızca tek değerli, sabit seçenekli sütunlar. */\nexport function listOptions<Row extends object>(def: ColumnDef<Row>, env: FormatEnv): string[] | null {\n if (def.type === 'select') return def.options.map((o) => o.label)\n if (def.type === 'boolean') return [env.i18n.t('common.yes'), env.i18n.t('common.no')]\n return null\n}\n","// Yerleşik dışa aktarma (D46): .xlsx `write-excel-file` ile (peer, ilk kullanımda yüklenir), .csv elle. Paket ekranda\n// görünen sütun ve satırları yazar; uygulama `@export` dinlerse bu yol hiç çalışmaz.\nimport type { ColumnDef } from '../../types/columns'\nimport type { FormatEnv } from '../cells/format'\nimport { listOptions, plainText, xlsxCell } from './cells'\n\nexport interface ExportJob<Row extends object> {\n format: 'csv' | 'xlsx'\n columns: Array<ColumnDef<Row>>\n rows: Row[]\n /** Hücre değeri (liste: satırdan; sheet: taslak uygulanmış). */\n read: (row: Row, def: ColumnDef<Row>) => unknown\n env: FormatEnv\n /** Dosya ve sayfa adı (uzantısız). */\n name: string\n}\n\n// 02 · Dışa aktarma (Excel): dosya her zaman açık temada.\nconst HEADER = {\n fontWeight: 'bold',\n textColor: '#15171C',\n backgroundColor: '#E8EAEE',\n borderColor: '#B4B9C2',\n borderStyle: 'thin',\n alignVertical: 'center',\n} as const\n\n/** Yazı boyutu (pt), tüm hücreler; Excel varsayılanı 11. Genişlik hesabı buna göre ölçeklenir. */\nconst FONT_PT = 16\n\n/** Excel sayfa adı: en çok 31 karakter, `[]:*?/\\` yok. */\nexport const sheetName = (s: string) => s.replace(/[[\\]:*?/\\\\]/g, ' ').slice(0, 31) || 'Sheet1'\n\n/**\n * Sütun genişliği: başlık ve ilk 200 satırın en uzunu, 8–60 karakter. Excel genişliği 11 pt karakter cinsinden\n * ölçtüğü için yazı boyutu oranında büyütülür.\n */\nfunction widthOf(texts: string[]): number {\n let w = 0\n for (const t of texts) w = Math.max(w, ...t.split('\\n').map((l) => l.length))\n return Math.round(Math.min(60, Math.max(8, w + 2)) * (FONT_PT / 11))\n}\n\nexport function toCsv<Row extends object>(job: ExportJob<Row>): string {\n // Ondalık ayırıcı virgülse (tr, de …) Excel `;` bekler.\n const sep = job.env.fmt.decimal(1.5, 1).includes(',') ? ';' : ','\n const esc = (t: string) => (t.includes(sep) || /[\"\\r\\n]/.test(t) ? `\"${t.replace(/\"/g, '\"\"')}\"` : t)\n const lines = [\n job.columns.map((c) => esc(c.header)),\n ...job.rows.map((r) => job.columns.map((c) => esc(plainText(c, r, job.read(r, c), job.env)))),\n ]\n return lines.map((l) => l.join(sep)).join('\\r\\n')\n}\n\nexport async function toXlsx<Row extends object>(job: ExportJob<Row>): Promise<Blob> {\n const [{ default: writeXlsxFile }, util] = await Promise.all([\n import('write-excel-file/browser'),\n import('write-excel-file/utility'),\n ])\n const { columns, rows, env } = job\n const data = [\n columns.map((c) => ({ value: c.header, ...HEADER })),\n ...rows.map((r) => columns.map((c) => xlsxCell(c, r, job.read(r, c), env))),\n ]\n const sample = rows.slice(0, 200)\n const widths = columns.map((c) => ({\n width: widthOf([c.header, ...sample.map((r) => plainText(c, r, job.read(r, c), env))]),\n }))\n\n // Seçimli sütunlar: seçenekler ikinci sayfada birer sütun (görünür); içerik sayfasında hücre o listeden seçilir.\n const listed = columns.flatMap((c, i) => {\n const values = listOptions(c, env)\n return values ? [{ column: i + 1, header: c.header, values }] : []\n })\n const optionsName = sheetName(env.i18n.t('export.optionsSheet'))\n const ref = `'${optionsName.replace(/'/g, \"''\")}'`\n const validations = rows.length\n ? listed.map((l, j) => {\n const col = util.getCellAddress(0, j).replace(/\\d+$/, '')\n const range = util.getCellAddress(1, l.column - 1) + ':' + util.getCellAddress(rows.length, l.column - 1)\n return (\n `<dataValidation type=\"list\" allowBlank=\"1\" showErrorMessage=\"1\" sqref=\"${range}\">` +\n `<formula1>${util.sanitizeTextContent(`${ref}!$${col}$2:$${col}$${l.values.length + 1}`)}</formula1>` +\n `</dataValidation>`\n )\n })\n : []\n const optionRows = Math.max(0, ...listed.map((l) => l.values.length))\n const optionsData = [\n listed.map((l) => ({ value: l.header, ...HEADER })),\n ...Array.from({ length: optionRows }, (_, i) => listed.map((l) => ({ value: l.values[i] ?? null }))),\n ]\n\n const feature = {\n files: {\n transform: {\n 'xl/worksheets/sheet{id}.xml': {\n transform: (xml: string, _o: unknown, p: { sheetIndex: number }) => {\n if (p.sheetIndex !== 0 || !validations.length) return xml\n const order = util.getOrderOfSiblings('xl/worksheets/sheet{id}.xml', 'worksheet')!\n const markup = `<dataValidations count=\"${validations.length}\">${validations.join('')}</dataValidations>`\n return util.insertElementMarkupAccordingToOrderOfSiblings(xml, markup, order, 'worksheet')\n },\n },\n },\n },\n }\n\n const main = { sheet: sheetName(job.name), data, columns: widths, stickyRowsCount: 1 }\n const sheets = listed.length\n ? [\n main,\n {\n sheet: optionsName,\n data: optionsData,\n columns: listed.map((l) => ({ width: widthOf([l.header, ...l.values]) })),\n },\n ]\n : [main]\n // Kütüphanenin tipleri dar (stil birleşimi, feature imzası); yapı README'deki sözleşmeye uyar.\n return writeXlsxFile(sheets as never, { features: [feature], fontSize: FONT_PT } as never).toBlob()\n}\n\nfunction download(blob: Blob, fileName: string) {\n const a = document.createElement('a')\n a.href = URL.createObjectURL(blob)\n a.download = fileName\n a.click()\n setTimeout(() => URL.revokeObjectURL(a.href), 1000)\n}\n\nexport async function exportFile<Row extends object>(job: ExportJob<Row>): Promise<void> {\n const blob =\n job.format === 'csv'\n ? // BOM: Excel UTF-8'i (Türkçe karakterler) ancak böyle tanır.\n new Blob(['' + toCsv(job)], { type: 'text/csv;charset=utf-8' })\n : await toXlsx(job)\n download(blob, `${job.name}.${job.format}`)\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 /** Her zaman sola sabit sütunlar (D45); verilmezse birincil sütun. DataSheet anahtar + birincil verir. */\n fixedStart?: MaybeRefOrGetter<string[]>\n /** DataSheet (07 §3): sola sabit son sütun (birincil ad) px değil minmax ile esner; ofseti kimseye gerekmez. */\n flexLastStart?: boolean\n /** Varsayılan genişliklerin çarpanı (02 · Ölçek): hücre yazısı 13 px'ten büyükse sütunlar da o oranda genişler. Elle verilen genişlik etkilenmez. */\n scale?: MaybeRefOrGetter<number>\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\n/** Gizlenemeyen sütun: `alwaysVisible`, birincil ve `required` (DataSheet: zorunlu alan görünmeden doldurulamaz). */\nconst alwaysShown = (d: ColumnDef): boolean => !!(d.alwaysVisible || d.primary || d.required)\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 fixed = computed(\n () => toValue(options.fixedStart) ?? defs.value.filter((d) => d.primary).map((d) => d.id as string),\n )\n const trackFor = (d: ColumnDef<Row>): Track => {\n const t = defaultTrack(d)\n const k = toValue(options.scale) ?? 1\n return typeof t === 'number' ? Math.round(t * k) : { ...t, min: Math.round(t.min * k) }\n }\n const minOf = (d: ColumnDef<Row>): number => Math.min(d.minWidth ?? MIN_COLUMN_WIDTH, trackMin(trackFor(d)))\n /** Kaydedilen / uygulanan genişlik sütunun min–max aralığında (05 · Resize: min 80). */\n const clampWidth = (id: string, px: number): number => {\n const def = defById.value.get(id)\n return Math.min(def?.maxWidth ?? Infinity, Math.max(def ? minOf(def) : MIN_COLUMN_WIDTH, Math.round(px)))\n }\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(trackFor(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: !alwaysShown(d),\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 fx = fixed.value.filter((id) => defById.value.has(id))\n const start = [...fx, ...(known(l?.pinned?.left) ?? []).filter((id) => !fx.includes(id))]\n const end = (known(l?.pinned?.right) ?? []).filter((id) => !fx.includes(id))\n const visibility: Record<string, boolean> = {}\n for (const d of defs.value) {\n const id = d.id as string\n visibility[id] = alwaysShown(d) || (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] = clampWidth(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 // Ham columnSizing sürüklerken min/max'ı aşabilir; getSize() kırpar (min 80, 05 · Resize).\n const resized = table.atoms.columnSizing.get()[col.id] !== undefined\n return pinned || resized ? col.getSize() : trackFor(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 dialog'u (05 §5, D45): tüm yaprak sütunlar ekrandaki sırada (sol sabitler · orta · sağ sabitler). */\n const panel = computed(() => {\n const rank = (c: Column<Features, Row, unknown>) => {\n const p = c.getIsPinned()\n return p === 'start' ? 0 : p === 'end' ? 2 : 1\n }\n return [...table.getOrderColumnsFn()(table.getAllLeafColumns())]\n .sort((a, b) => rank(a) - rank(b))\n .map((c) => {\n const pinned = c.getIsPinned()\n return {\n id: c.id,\n def: defById.value.get(c.id)!,\n visible: c.getIsVisible(),\n pinned: pinned === false ? null : pinned,\n canHide: c.getCanHide(),\n fixed: fixed.value.includes(c.id),\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 /** Dialog taslağı (D45): sabitleme konumsaldır — sabitlerden sonraki ilk `start` ve son `end` görünür sütun. */\n const arrange = (d: { order: string[]; visible: string[]; start: number; end: number }) => {\n const free = d.order.filter((id) => d.visible.includes(id) && !fixed.value.includes(id))\n const left = free.slice(0, d.start)\n apply({\n order: d.order,\n visible: d.visible,\n widths: state.value.widths,\n pinned: { left, right: d.end ? free.slice(left.length).slice(-d.end) : [] },\n })\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: Object.fromEntries(\n Object.entries(table.atoms.columnSizing.get()).map(([id, w]) => [id, clampWidth(id, w)]),\n ),\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 arrange,\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) => table.setColumnSizing((s) => ({ ...s, [id]: clampWidth(id, px) })),\n resetWidth: (id: string) => table.getColumn(id)?.resetSize(),\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","// Üretilmiş dosya: scripts/i18n-from-docs.ts ← docs/data-table/09-i18n.md. Elle düzenlemeyin; dokümanı değiştirip `pnpm gen:docs` çalıştırın.\nexport const en: Record<string, string> = {\n \"common.cancel\": \"Cancel\",\n \"common.apply\": \"Apply\",\n \"common.clear\": \"Clear\",\n \"common.reset\": \"Reset\",\n \"common.retry\": \"Retry\",\n \"common.close\": \"Close\",\n \"common.done\": \"Done\",\n \"common.undo\": \"Undo\",\n \"common.redo\": \"Redo\",\n \"common.dismiss\": \"Dismiss\",\n \"common.back\": \"Back\",\n \"common.more\": \"More\",\n \"common.loading\": \"Loading…\",\n \"common.yes\": \"Yes\",\n \"common.no\": \"No\",\n \"common.me\": \"Me\",\n \"common.unassigned\": \"Unassigned\",\n \"common.any\": \"Any\",\n \"common.empty\": \"—\",\n \"common.plusMore\": \"+{count}\",\n \"common.copyLink\": \"Copy link\",\n \"common.save\": \"Save\",\n \"kbd.mod\": \"⌘ / Ctrl\",\n \"toolbar.search\": \"Search {entity.other}…\",\n \"toolbar.filter\": \"Filter\",\n \"toolbar.display\": \"Display\",\n \"toolbar.more\": \"More actions\",\n \"toolbar.export.one\": \"Export {count} row\",\n \"toolbar.export.other\": \"Export {count} rows\",\n \"toolbar.exportSelected.one\": \"Export {count} selected row\",\n \"toolbar.exportSelected.other\": \"Export {count} selected rows\",\n \"toolbar.csv\": \"CSV\",\n \"toolbar.xlsx\": \"Excel (.xlsx)\",\n \"export.optionsSheet\": \"Options\",\n \"toolbar.import\": \"Import…\",\n \"toolbar.print\": \"Print\",\n \"toolbar.refresh\": \"Refresh\",\n \"toolbar.autoRefresh\": \"Auto-refresh\",\n \"toolbar.live\": \"Live\",\n \"toolbar.updatedJustNow\": \"Updated just now\",\n \"toolbar.updatedAgo\": \"Updated {time}\",\n \"filter.addFilter\": \"Add filter\",\n \"filter.clearAll\": \"Clear all\",\n \"filter.selectValue\": \"Select…\",\n \"filter.removeAria\": \"Remove {column} filter\",\n \"filter.valueAria\": \"{column} {op} {value}. Edit value\",\n \"filter.chooseValueAria\": \"{column}: choose a value\",\n \"filter.sheetNote\": \"Filters only change what you see — hidden rows keep their edits.\",\n \"picker.search\": \"Filter by…\",\n \"picker.filtered\": \"Filtered\",\n \"picker.filteredHint\": \"opens its chip\",\n \"picker.suggested\": \"Suggested\",\n \"picker.allColumns\": \"All columns\",\n \"picker.noMatch\": \"No columns match\",\n \"type.number\": \"Number\",\n \"type.percentage\": \"Percentage\",\n \"type.rating\": \"Rating\",\n \"type.currency\": \"Currency\",\n \"type.text\": \"Text\",\n \"type.longText\": \"Long text\",\n \"type.phone\": \"Phone\",\n \"type.colour\": \"Colour\",\n \"type.email\": \"Email\",\n \"type.link\": \"Link\",\n \"type.id\": \"Record ID\",\n \"type.boolean\": \"Yes / No\",\n \"type.option\": \"Option\",\n \"type.options\": \"Options\",\n \"type.relation\": \"Relation\",\n \"type.person\": \"Person\",\n \"type.date\": \"Date\",\n \"type.datetime\": \"Date & time\",\n \"type.object\": \"Object\",\n \"type.list\": \"List\",\n \"op.eq\": \"is\",\n \"op.neq\": \"is not\",\n \"op.gt\": \"is greater than\",\n \"op.gte\": \"is at least\",\n \"op.lt\": \"is less than\",\n \"op.lte\": \"is at most\",\n \"op.between\": \"is between\",\n \"op.contains\": \"contains\",\n \"op.not_contains\": \"doesn't contain\",\n \"op.starts_with\": \"starts with\",\n \"op.ends_with\": \"ends with\",\n \"op.in.one\": \"is\",\n \"op.in.other\": \"is any of\",\n \"op.not_in.one\": \"is not\",\n \"op.not_in.other\": \"is none of\",\n \"op.before\": \"is before\",\n \"op.after\": \"is after\",\n \"op.within\": \"is within\",\n \"op.is_empty\": \"is empty\",\n \"op.is_not_empty\": \"is not empty\",\n \"op.isMe\": \"is me\",\n \"op.star.gte\": \"at least\",\n \"op.star.lte\": \"at most\",\n \"date.today\": \"Today\",\n \"date.this_week\": \"This week\",\n \"date.next_7_days\": \"Next 7 days\",\n \"date.this_month\": \"This month\",\n \"date.last_30_days\": \"Last 30 days\",\n \"date.this_quarter\": \"This quarter\",\n \"date.overdue\": \"Overdue\",\n \"date.customRange\": \"Custom range\",\n \"date.from\": \"From\",\n \"date.to\": \"To\",\n \"date.presetsRelative\": \"Presets stay relative — “This month” rolls over by itself.\",\n \"number.and\": \"and\",\n \"number.boundsIncluded\": \"Bounds included\",\n \"number.min\": \"Min\",\n \"number.max\": \"Max\",\n \"option.search\": \"Search options…\",\n \"option.searchNoun\": \"Search {noun.other}\",\n \"option.only\": \"Only\",\n \"option.selected.one\": \"{count} selected\",\n \"option.selected.other\": \"{count} selected\",\n \"remote.searching\": \"Searching…\",\n \"remote.noResults\": \"No results\",\n \"remote.loadMore\": \"Load more\",\n \"chip.values\": \"{count} values\",\n \"chip.noun\": \"{count} {noun.other}\",\n \"chip.people\": \"{count} people\",\n \"views.title\": \"Views\",\n \"views.find\": \"Find a view…\",\n \"views.system\": \"System views\",\n \"views.builtIn\": \"Built in\",\n \"views.mine\": \"My views\",\n \"views.onlyYou\": \"Only you\",\n \"views.default\": \"Default\",\n \"views.edited\": \"Edited\",\n \"views.new\": \"New view\",\n \"views.rename\": \"Rename\",\n \"views.duplicate\": \"Duplicate\",\n \"views.setDefault\": \"Set as default\",\n \"views.delete\": \"Delete\",\n \"views.delete.title\": \"Delete “{name}”?\",\n \"views.delete.body\": \"This can't be undone.\",\n \"views.systemNote\": \"System views offer only Duplicate and Set as default.\",\n \"views.saveChanges\": \"Save changes\",\n \"views.updates\": \"Updates “{name}”\",\n \"views.saveAsNew\": \"Save as new view…\",\n \"views.keepsUnchanged\": \"Keeps “{name}” unchanged\",\n \"views.discard\": \"Discard changes\",\n \"views.saveAsMine\": \"Save as my view…\",\n \"views.editedName\": \"“{name}” edited\",\n \"views.dialogTitle\": \"Save as new view\",\n \"views.dialogBody\": \"It appears under My views. Only you can see it.\",\n \"views.name\": \"Name\",\n \"views.filters\": \"Filters\",\n \"views.sort\": \"Sort\",\n \"views.columns\": \"Columns\",\n \"views.columnsSummary\": \"{shown} of {total}\",\n \"views.pinnedSummary\": \"{name} pinned\",\n \"views.makeDefault\": \"Make this my default view\",\n \"views.save\": \"Save view\",\n \"views.copyName\": \"{name} copy\",\n \"views.err.required\": \"Enter a name.\",\n \"views.err.taken\": \"You already have a view with this name.\",\n \"views.err.tooLong\": \"Use 60 characters or fewer.\",\n \"views.noMatch\": \"No views match\",\n \"display.density\": \"Density\",\n \"display.comfortable\": \"Comfortable\",\n \"display.standard\": \"Standard\",\n \"display.compact\": \"Compact\",\n \"display.columns\": \"Columns\",\n \"display.sort\": \"Sort\",\n \"display.verticalLines\": \"Vertical grid lines\",\n \"display.savedForYou\": \"Saved for you only\",\n \"columns.shownOf\": \"{shown} of {total} shown\",\n \"columns.pinned\": \"Pinned\",\n \"columns.alwaysShown\": \"Always shown\",\n \"columns.hideAll\": \"Hide all\",\n \"columns.showAll\": \"Show all\",\n \"columns.reorder\": \"Reorder {column}\",\n \"columns.dragInstructions\": \"Press space to pick up a column, use the up and down arrow keys to move it, then press space again to drop it. Press escape to cancel.\",\n \"columns.dragStart\": \"Picked up {column}. Position {position} of {total}.\",\n \"columns.dragOver\": \"{column} moved to position {position} of {total}.\",\n \"columns.dragEnd\": \"{column} dropped at position {position} of {total}.\",\n \"columns.dragCancel\": \"Reordering cancelled. {column} returned to its place.\",\n \"columns.find\": \"Find a column\",\n \"columns.title\": \"Column preferences\",\n \"columns.desc\": \"Show, hide and reorder the table's columns.\",\n \"columns.pin.start.title\": \"Pin first columns\",\n \"columns.pin.start.desc\": \"Keep the first columns in view while scrolling sideways.\",\n \"columns.pin.start.0\": \"None\",\n \"columns.pin.start.1\": \"First column\",\n \"columns.pin.start.2\": \"First two columns\",\n \"columns.pin.end.title\": \"Pin last columns\",\n \"columns.pin.end.desc\": \"Keep the last columns in view while scrolling sideways.\",\n \"columns.pin.end.0\": \"None\",\n \"columns.pin.end.1\": \"Last column\",\n \"columns.pin.end.2\": \"Last two columns\",\n \"header.sortAsc\": \"Sort ascending\",\n \"header.sortDesc\": \"Sort descending\",\n \"header.clearSort\": \"Clear sort\",\n \"sort.addHint\": \"⇧ + click a header to add · up to 3\",\n \"header.filterBy\": \"Filter by this column…\",\n \"header.moveLeft\": \"Move left\",\n \"header.moveRight\": \"Move right\",\n \"header.hide\": \"Hide column\",\n \"header.optionsAria\": \"{column} column options\",\n \"row.open\": \"Open\",\n \"row.openNewTab\": \"Open in new tab\",\n \"row.actionsAria\": \"Actions for {id}\",\n \"row.selectAria\": \"Select {id}\",\n \"row.selectPageAria\": \"Select all rows on this page\",\n \"row.copyId\": \"Copy {column}\",\n \"selection.selected\": \"{count} selected\",\n \"selection.clear\": \"Clear selection\",\n \"expand.showAria\": \"Show details for {id}\",\n \"page.rows\": \"Rows {from}–{to}\",\n \"page.of\": \"of {total}\",\n \"page.countTotal\": \"Count total\",\n \"page.counting\": \"Counting…\",\n \"page.counted\": \"counted {time}\",\n \"page.end\": \"end of results\",\n \"page.zero\": \"0 rows\",\n \"page.none\": \"No rows\",\n \"page.noneOnPage\": \"No rows on this page\",\n \"page.previousPage\": \"Go to previous page\",\n \"page.perPage\": \"Rows per page\",\n \"page.previous\": \"Previous\",\n \"page.next\": \"Next\",\n \"page.scrollPos\": \"Rows {from}–{to}\",\n \"page.nav\": \"Pages\",\n \"state.emptyTitle\": \"No {entity.other} yet\",\n \"state.noResults.one\": \"No {entity.other} match this filter\",\n \"state.noResults.other\": \"No {entity.other} match these {count} filters\",\n \"state.noResultsSearch\": \"No {entity.other} match “{q}”\",\n \"state.noResultsBoth\": \"No {entity.other} match “{q}” and {count} filters\",\n \"state.removeFilter\": \"Remove “{column}”\",\n \"state.clearAllFilters\": \"Clear all filters\",\n \"state.clearSearch\": \"Clear search\",\n \"state.errorTitle\": \"Couldn't load {entity.other}\",\n \"state.errorKept\": \"Your filters are kept.\",\n \"state.tryAgain\": \"Try again\",\n \"state.copyErrorId\": \"Copy error ID\",\n \"state.stale\": \"Couldn't refresh. Showing data from {time}.\",\n \"state.updating\": \"Updating…\",\n \"state.stillLoading\": \"Still loading…\",\n \"cell.late\": \"{count}d late\",\n \"cell.rating\": \"{value} of {max}\",\n \"cell.fields\": \"{count} fields\",\n \"cell.copy\": \"Copy\",\n \"cell.copied\": \"Copied\",\n \"cell.expandText\": \"Show full text\",\n \"bulk.moreAria\": \"More bulk actions\",\n \"bulk.aria\": \"Bulk actions\",\n \"sheet.find\": \"Find in grid\",\n \"sheet.findCount\": \"{index} of {total}\",\n \"sheet.all\": \"All\",\n \"sheet.changed\": \"Changed\",\n \"sheet.errors\": \"Errors\",\n \"sheet.addRow\": \"Add row\",\n \"sheet.import\": \"Import Excel\",\n \"sheet.export\": \"Export\",\n \"sheet.exportAll\": \"Export all rows ({count})\",\n \"sheet.exportVisible\": \"Export visible rows ({count})\",\n \"sheet.changes\": \"{cells} changes in {rows} rows\",\n \"sheet.newRows.one\": \"{count} new row\",\n \"sheet.newRows.other\": \"{count} new rows\",\n \"sheet.newShort\": \"{count} new\",\n \"sheet.noChanges\": \"No changes\",\n \"sheet.rows\": \"{count} rows\",\n \"sheet.errorsGoTo.one\": \"{count} error — go to\",\n \"sheet.errorsGoTo.other\": \"{count} errors — go to\",\n \"sheet.discard\": \"Discard\",\n \"sheet.save\": \"Save changes\",\n \"sheet.agg.count\": \"Count\",\n \"sheet.agg.sum\": \"Sum\",\n \"sheet.agg.avg\": \"Average\",\n \"sheet.cells\": \"{rows} × {cols} cells\",\n \"sheet.keyTooltip\": \"Match key — an existing {key} updates that record, a new {key} creates one\",\n \"sheet.addedRow\": \"Added row\",\n \"sheet.required\": \"Required\",\n \"sheet.notANumber\": \"Enter a number\",\n \"sheet.notADate\": \"Enter a date\",\n \"sheet.hasErrors\": \"Has errors\",\n \"sheet.valueAria\": \"Value of {column} for {key}\",\n \"sheet.statusAria\": \"Sheet status\",\n \"sheet.was\": \"Was {value}\",\n \"sheet.duplicateKey\": \"{key} is already in row {row}\",\n \"sheet.notAnOption\": \"“{value}” isn't an option\",\n \"sheet.useOption\": \"Use {option}\",\n \"sheet.noFormulas\": \"Formulas aren't supported\",\n \"sheet.notMatchFilter\": \"Doesn't match filters\",\n \"sheet.menu.cut\": \"Cut\",\n \"sheet.menu.copy\": \"Copy\",\n \"sheet.menu.paste\": \"Paste\",\n \"sheet.menu.fillDown\": \"Fill down\",\n \"sheet.menu.clear\": \"Clear contents\",\n \"sheet.menu.insertAbove\": \"Insert row above\",\n \"sheet.menu.insertBelow\": \"Insert row below\",\n \"sheet.menu.remove\": \"Remove from list\",\n \"sheet.menu.open\": \"Open {entity.one}\",\n \"sheet.removed.one\": \"Row {row} removed from this list. The {entity.one} isn't deleted.\",\n \"sheet.removed.other\": \"{count} rows removed from this list. The {entity.other} aren't deleted.\",\n \"sheet.pasted\": \"Pasted {rows} rows × {cols} columns\",\n \"sheet.pasteIssues.one\": \"{count} value isn't an option\",\n \"sheet.pasteIssues.other\": \"{count} values aren't options\",\n \"sheet.pasteErrors.one\": \"{count} cell has an error\",\n \"sheet.pasteErrors.other\": \"{count} cells have errors\",\n \"sheet.review\": \"Review\",\n \"sheet.fillPreview\": \"Fill {count} cells with {value}\",\n \"sheet.limitPaste\": \"This paste would make {count} rows. The limit is {max}.\",\n \"sheet.limitFile\": \"This file would make {count} rows. The limit is {max}.\",\n \"sheet.nextError\": \"Next error (F8)\",\n \"sheet.prevError\": \"Previous error (⇧F8)\",\n \"sheet.nextErrorHidden\": \"Next error is hidden by filters\",\n \"sheet.showIt\": \"Show it\",\n \"sheet.loading\": \"Loading {entity.other}…\",\n \"sheet.loadingCount\": \"{loaded} of {total}\",\n \"sheet.firstN\": \"Showing the first {max} {entity.other}. Narrow the selection to edit the rest.\",\n \"sheet.saving\": \"Saving… {sent} of {total} rows\",\n \"sheet.savingIndeterminate\": \"Saving…\",\n \"sheet.savingButton\": \"Saving…\",\n \"sheet.savingReadOnly\": \"Read-only while saving\",\n \"sheet.saveChanges\": \"Save changes\",\n \"sheet.discardButton\": \"Discard\",\n \"sheet.saved\": \"{count} rows saved\",\n \"sheet.savedDetail\": \"{created} created · {updated} updated\",\n \"sheet.partly.title\": \"{count} rows couldn't be saved.\",\n \"sheet.partly.body\": \"{count} rows were saved.\",\n \"sheet.copyErrors\": \"Copy errors\",\n \"sheet.err.row\": \"Row\",\n \"sheet.err.column\": \"Column\",\n \"sheet.err.message\": \"Message\",\n \"sheet.selectionSummary\": \"Selection summary\",\n \"sheet.showRows\": \"Show rows\",\n \"sheet.errDialog.title.one\": \"{count} row has errors\",\n \"sheet.errDialog.title.other\": \"{count} rows have errors\",\n \"sheet.errDialog.body\": \"It won't be sent. The other {count} changed rows will be saved.\",\n \"sheet.errDialog.fix\": \"Fix first\",\n \"sheet.errDialog.save\": \"Save {count} rows\",\n \"sheet.leave.title\": \"Leave without saving?\",\n \"sheet.leave.body\": \"{cells} changes in {rows} rows will be lost.\",\n \"sheet.leave.stay\": \"Stay\",\n \"sheet.leave.discard\": \"Discard changes\",\n \"sheet.discard.title\": \"Discard {cells} changes in {rows} rows?\",\n \"sheet.discard.body\": \"The sheet goes back to how it was loaded. This can't be undone.\",\n \"sheet.discard.keep\": \"Keep editing\",\n \"sheet.readOnly.title\": \"Editing needs a larger screen.\",\n \"sheet.readOnly.body\": \"You can search and look at {entity.other} here; changes are made on a computer.\",\n \"sheet.readOnly.badge\": \"Read-only\",\n \"sheet.readOnly.total\": \"{count} {entity.other}\",\n \"import.title\": \"Import from Excel\",\n \"import.body\": \"Rows are matched by {key}: a known {key} updates its {entity.one}, a new {key} becomes a new row. Everything lands in the grid for review first.\",\n \"import.failed\": \"Couldn't read the file\",\n \"import.drop\": \"Drop an .xlsx or .csv file, or choose one\",\n \"import.xlsxOnly\": \"Only .xlsx and .csv files can be read. Save an old .xls file as .xlsx in Excel first.\",\n \"import.sheetInfo\": \"Sheet “{sheet}” · {count} rows\",\n \"import.headerRow\": \"Header row\",\n \"import.headerRowN\": \"Row {n}\",\n \"import.replace\": \"Replace file\",\n \"import.matchBy\": \"Match rows by\",\n \"import.excelColumn\": \"Excel column\",\n \"import.field\": \"Field\",\n \"import.firstValue\": \"First value\",\n \"import.matchKey\": \"match key\",\n \"import.skip\": \"Don't import\",\n \"import.chooseField\": \"Choose a field\",\n \"import.summary\": \"{updates} rows in the list will be updated · {news} {key}s not in the list\",\n \"import.seeNew\": \"See {key}s not in the list\",\n \"import.addNew\": \"Add the {count} {key}s not in the list as rows\",\n \"import.apply\": \"Apply to grid\",\n \"import.keyRequired\": \"Choose the column that holds {key}.\",\n \"import.done\": \"Imported {count} rows · {updated} updated · {news} added\",\n \"mobile.filters\": \"Filters\",\n \"mobile.showResults\": \"Show results\",\n \"mobile.sort\": \"Sort\",\n \"mobile.chipAria\": \"{summary}. Open filters\",\n \"mobile.backToFilters\": \"Back to filters\",\n \"mobile.operator\": \"Operator\",\n \"sr.loaded\": \"{count} rows loaded\",\n \"sr.total\": \"{count} {entity.other}\",\n \"sr.sorted\": \"Sorted by {column}, {dir}\",\n \"sr.asc\": \"ascending\",\n \"sr.desc\": \"descending\",\n \"sr.filterAdded\": \"Filter added: {summary}\",\n \"sr.filterRemoved\": \"{column} filter removed\",\n \"sr.view\": \"View {name}\",\n \"sr.viewEdited\": \"View {name}, edited\",\n \"sr.expanded\": \"{label} expanded, {count} rows\",\n \"sr.savingPercent\": \"Saving, {percent} percent\",\n \"sr.loadingPercent\": \"Loading, {percent} percent\",\n \"sr.pasted\": \"Pasted {rows} rows by {cols} columns.\",\n}\n","// Üretilmiş dosya: scripts/i18n-from-docs.ts ← docs/data-table/09-i18n.md. Elle düzenlemeyin; dokümanı değiştirip `pnpm gen:docs` çalıştırın.\nexport const tr: Record<string, string> = {\n \"common.cancel\": \"Vazgeç\",\n \"common.apply\": \"Uygula\",\n \"common.clear\": \"Temizle\",\n \"common.reset\": \"Sıfırla\",\n \"common.retry\": \"Tekrar dene\",\n \"common.close\": \"Kapat\",\n \"common.done\": \"Bitti\",\n \"common.undo\": \"Geri al\",\n \"common.redo\": \"Yinele\",\n \"common.dismiss\": \"Kapat\",\n \"common.back\": \"Geri\",\n \"common.more\": \"Daha fazla\",\n \"common.loading\": \"Yükleniyor…\",\n \"common.yes\": \"Evet\",\n \"common.no\": \"Hayır\",\n \"common.me\": \"Ben\",\n \"common.unassigned\": \"Atanmamış\",\n \"common.any\": \"Tümü\",\n \"common.empty\": \"—\",\n \"common.plusMore\": \"+{count}\",\n \"common.copyLink\": \"Bağlantıyı kopyala\",\n \"common.save\": \"Kaydet\",\n \"kbd.mod\": \"⌘ / Ctrl\",\n \"toolbar.search\": \"Ara: {entity.other}…\",\n \"toolbar.filter\": \"Filtrele\",\n \"toolbar.display\": \"Görünüm ayarları\",\n \"toolbar.more\": \"Diğer işlemler\",\n \"toolbar.export.one\": \"{count} satırı dışa aktar\",\n \"toolbar.export.other\": \"{count} satırı dışa aktar\",\n \"toolbar.exportSelected.one\": \"Seçili {count} satırı dışa aktar\",\n \"toolbar.exportSelected.other\": \"Seçili {count} satırı dışa aktar\",\n \"toolbar.csv\": \"CSV\",\n \"toolbar.xlsx\": \"Excel (.xlsx)\",\n \"export.optionsSheet\": \"Seçenekler\",\n \"toolbar.import\": \"İçe aktar…\",\n \"toolbar.print\": \"Yazdır\",\n \"toolbar.refresh\": \"Yenile\",\n \"toolbar.autoRefresh\": \"Otomatik yenile\",\n \"toolbar.live\": \"Canlı\",\n \"toolbar.updatedJustNow\": \"Az önce güncellendi\",\n \"toolbar.updatedAgo\": \"{time} güncellendi\",\n \"filter.addFilter\": \"Filtre ekle\",\n \"filter.clearAll\": \"Tümünü temizle\",\n \"filter.selectValue\": \"Seçin…\",\n \"filter.removeAria\": \"{column} filtresini kaldır\",\n \"filter.valueAria\": \"{column} {op} {value}. Değeri düzenle\",\n \"filter.chooseValueAria\": \"{column}: bir değer seçin\",\n \"filter.sheetNote\": \"Filtreler yalnızca görüneni değiştirir; gizlenen satırlardaki düzenlemeler korunur.\",\n \"picker.search\": \"Filtrelenecek alan…\",\n \"picker.filtered\": \"Filtrelenen\",\n \"picker.filteredHint\": \"çipini açar\",\n \"picker.suggested\": \"Önerilen\",\n \"picker.allColumns\": \"Tüm sütunlar\",\n \"picker.noMatch\": \"Eşleşen sütun yok\",\n \"type.number\": \"Sayı\",\n \"type.percentage\": \"Yüzde\",\n \"type.rating\": \"Puan\",\n \"type.currency\": \"Para\",\n \"type.text\": \"Metin\",\n \"type.longText\": \"Uzun metin\",\n \"type.phone\": \"Telefon\",\n \"type.colour\": \"Renk\",\n \"type.email\": \"E-posta\",\n \"type.link\": \"Bağlantı\",\n \"type.id\": \"Kayıt no\",\n \"type.boolean\": \"Evet / Hayır\",\n \"type.option\": \"Seçenek\",\n \"type.options\": \"Seçenekler\",\n \"type.relation\": \"İlişki\",\n \"type.person\": \"Kişi\",\n \"type.date\": \"Tarih\",\n \"type.datetime\": \"Tarih ve saat\",\n \"type.object\": \"Nesne\",\n \"type.list\": \"Liste\",\n \"op.eq\": \"eşittir\",\n \"op.neq\": \"eşit değil\",\n \"op.gt\": \"büyüktür\",\n \"op.gte\": \"en az\",\n \"op.lt\": \"küçüktür\",\n \"op.lte\": \"en çok\",\n \"op.between\": \"arasında\",\n \"op.contains\": \"içerir\",\n \"op.not_contains\": \"içermez\",\n \"op.starts_with\": \"ile başlar\",\n \"op.ends_with\": \"ile biter\",\n \"op.in.one\": \"eşittir\",\n \"op.in.other\": \"şunlardan biri\",\n \"op.not_in.one\": \"eşit değil\",\n \"op.not_in.other\": \"şunlardan hiçbiri\",\n \"op.before\": \"öncesinde\",\n \"op.after\": \"sonrasında\",\n \"op.within\": \"aralığında\",\n \"op.is_empty\": \"boş\",\n \"op.is_not_empty\": \"boş değil\",\n \"op.isMe\": \"ben\",\n \"op.star.gte\": \"en az\",\n \"op.star.lte\": \"en çok\",\n \"date.today\": \"Bugün\",\n \"date.this_week\": \"Bu hafta\",\n \"date.next_7_days\": \"Önümüzdeki 7 gün\",\n \"date.this_month\": \"Bu ay\",\n \"date.last_30_days\": \"Son 30 gün\",\n \"date.this_quarter\": \"Bu çeyrek\",\n \"date.overdue\": \"Gecikmiş\",\n \"date.customRange\": \"Özel aralık\",\n \"date.from\": \"Başlangıç\",\n \"date.to\": \"Bitiş\",\n \"date.presetsRelative\": \"Hazır aralıklar göreli kalır: “Bu ay” ay değişince kendiliğinden kayar.\",\n \"number.and\": \"ile\",\n \"number.boundsIncluded\": \"Uçlar dahil\",\n \"number.min\": \"En az\",\n \"number.max\": \"En çok\",\n \"option.search\": \"Seçeneklerde ara…\",\n \"option.searchNoun\": \"Ara: {noun.other}\",\n \"option.only\": \"Yalnızca\",\n \"option.selected.one\": \"{count} seçili\",\n \"option.selected.other\": \"{count} seçili\",\n \"remote.searching\": \"Aranıyor…\",\n \"remote.noResults\": \"Sonuç yok\",\n \"remote.loadMore\": \"Daha fazla yükle\",\n \"chip.values\": \"{count} değer\",\n \"chip.noun\": \"{count} {noun.one}\",\n \"chip.people\": \"{count} kişi\",\n \"views.title\": \"Görünümler\",\n \"views.find\": \"Görünüm bul…\",\n \"views.system\": \"Sistem görünümleri\",\n \"views.builtIn\": \"Hazır\",\n \"views.mine\": \"Görünümlerim\",\n \"views.onlyYou\": \"Yalnızca siz\",\n \"views.default\": \"Varsayılan\",\n \"views.edited\": \"Değişti\",\n \"views.new\": \"Yeni görünüm\",\n \"views.rename\": \"Yeniden adlandır\",\n \"views.duplicate\": \"Kopyala\",\n \"views.setDefault\": \"Varsayılan yap\",\n \"views.delete\": \"Sil\",\n \"views.delete.title\": \"“{name}” silinsin mi?\",\n \"views.delete.body\": \"Bu işlem geri alınamaz.\",\n \"views.systemNote\": \"Sistem görünümlerinde yalnızca Kopyala ve Varsayılan yap var.\",\n \"views.saveChanges\": \"Değişiklikleri kaydet\",\n \"views.updates\": \"“{name}” güncellenir\",\n \"views.saveAsNew\": \"Yeni görünüm olarak kaydet…\",\n \"views.keepsUnchanged\": \"“{name}” olduğu gibi kalır\",\n \"views.discard\": \"Değişiklikleri at\",\n \"views.saveAsMine\": \"Görünümüm olarak kaydet…\",\n \"views.editedName\": \"“{name}” değişti\",\n \"views.dialogTitle\": \"Yeni görünüm olarak kaydet\",\n \"views.dialogBody\": \"Görünümlerim altında yer alır. Yalnızca siz görürsünüz.\",\n \"views.name\": \"Ad\",\n \"views.filters\": \"Filtreler\",\n \"views.sort\": \"Sıralama\",\n \"views.columns\": \"Sütunlar\",\n \"views.columnsSummary\": \"{total} sütundan {shown}\",\n \"views.pinnedSummary\": \"{name} sabit\",\n \"views.makeDefault\": \"Varsayılan görünümüm olsun\",\n \"views.save\": \"Görünümü kaydet\",\n \"views.copyName\": \"{name} kopyası\",\n \"views.err.required\": \"Bir ad girin.\",\n \"views.err.taken\": \"Bu adda bir görünümünüz zaten var.\",\n \"views.err.tooLong\": \"En fazla 60 karakter kullanın.\",\n \"views.noMatch\": \"Eşleşen görünüm yok\",\n \"display.density\": \"Yoğunluk\",\n \"display.comfortable\": \"Rahat\",\n \"display.standard\": \"Standart\",\n \"display.compact\": \"Sıkı\",\n \"display.columns\": \"Sütunlar\",\n \"display.sort\": \"Sıralama\",\n \"display.verticalLines\": \"Dikey çizgiler\",\n \"display.savedForYou\": \"Yalnızca sizin için kaydedilir\",\n \"columns.shownOf\": \"{total} sütundan {shown} görünür\",\n \"columns.pinned\": \"Sabit\",\n \"columns.alwaysShown\": \"Her zaman görünür\",\n \"columns.hideAll\": \"Tümünü gizle\",\n \"columns.showAll\": \"Tümünü göster\",\n \"columns.reorder\": \"{column} sütununu taşı\",\n \"columns.dragInstructions\": \"Sütunu almak için boşluk tuşuna basın, yukarı ve aşağı ok tuşlarıyla taşıyın, bırakmak için yeniden boşluk tuşuna basın. İptal için Escape'e basın.\",\n \"columns.dragStart\": \"{column} alındı. Sıra {position} / {total}.\",\n \"columns.dragOver\": \"{column} {position} / {total} sırasına taşındı.\",\n \"columns.dragEnd\": \"{column} {position} / {total} sırasına bırakıldı.\",\n \"columns.dragCancel\": \"Taşıma iptal edildi. {column} yerine döndü.\",\n \"columns.find\": \"Sütun bul\",\n \"columns.title\": \"Sütun tercihleri\",\n \"columns.desc\": \"Tablodaki sütunları gösterin, gizleyin ve sıralayın.\",\n \"columns.pin.start.title\": \"İlk sütunları sabitle\",\n \"columns.pin.start.desc\": \"Yatay kaydırırken ilk sütunlar görünür kalsın.\",\n \"columns.pin.start.0\": \"Hiçbiri\",\n \"columns.pin.start.1\": \"İlk sütun\",\n \"columns.pin.start.2\": \"İlk iki sütun\",\n \"columns.pin.end.title\": \"Son sütunları sabitle\",\n \"columns.pin.end.desc\": \"Yatay kaydırırken son sütunlar görünür kalsın.\",\n \"columns.pin.end.0\": \"Hiçbiri\",\n \"columns.pin.end.1\": \"Son sütun\",\n \"columns.pin.end.2\": \"Son iki sütun\",\n \"header.sortAsc\": \"Artan sırala\",\n \"header.sortDesc\": \"Azalan sırala\",\n \"header.clearSort\": \"Sıralamayı kaldır\",\n \"sort.addHint\": \"Eklemek için ⇧ + başlığa tıklayın · en çok 3\",\n \"header.filterBy\": \"Bu sütuna göre filtrele…\",\n \"header.moveLeft\": \"Sola taşı\",\n \"header.moveRight\": \"Sağa taşı\",\n \"header.hide\": \"Sütunu gizle\",\n \"header.optionsAria\": \"{column} sütun seçenekleri\",\n \"row.open\": \"Aç\",\n \"row.openNewTab\": \"Yeni sekmede aç\",\n \"row.actionsAria\": \"{id} işlemleri\",\n \"row.selectAria\": \"{id} seç\",\n \"row.selectPageAria\": \"Bu sayfadaki tüm satırları seç\",\n \"row.copyId\": \"{column} kopyala\",\n \"selection.selected\": \"{count} seçili\",\n \"selection.clear\": \"Seçimi temizle\",\n \"expand.showAria\": \"{id} detaylarını göster\",\n \"page.rows\": \"Satır {from}–{to}\",\n \"page.of\": \"/ {total}\",\n \"page.countTotal\": \"Toplamı say\",\n \"page.counting\": \"Sayılıyor…\",\n \"page.counted\": \"{time} sayıldı\",\n \"page.end\": \"sonuçların sonu\",\n \"page.zero\": \"0 satır\",\n \"page.none\": \"Satır yok\",\n \"page.noneOnPage\": \"Bu sayfada satır yok\",\n \"page.previousPage\": \"Önceki sayfaya git\",\n \"page.perPage\": \"Sayfa başına satır\",\n \"page.previous\": \"Önceki\",\n \"page.next\": \"Sonraki\",\n \"page.scrollPos\": \"Satır {from}–{to}\",\n \"page.nav\": \"Sayfalar\",\n \"state.emptyTitle\": \"Henüz kayıt yok: {entity.other}\",\n \"state.noResults.one\": \"Bu filtreye uyan {entity.one} yok\",\n \"state.noResults.other\": \"Bu {count} filtreye uyan {entity.one} yok\",\n \"state.noResultsSearch\": \"“{q}” ile eşleşen {entity.one} yok\",\n \"state.noResultsBoth\": \"“{q}” ve {count} filtreyle eşleşen {entity.one} yok\",\n \"state.removeFilter\": \"“{column}” filtresini kaldır\",\n \"state.clearAllFilters\": \"Tüm filtreleri temizle\",\n \"state.clearSearch\": \"Aramayı temizle\",\n \"state.errorTitle\": \"Yüklenemedi: {entity.other}\",\n \"state.errorKept\": \"Filtreleriniz korunuyor.\",\n \"state.tryAgain\": \"Tekrar dene\",\n \"state.copyErrorId\": \"Hata kimliğini kopyala\",\n \"state.stale\": \"Yenilenemedi. {time} verisi gösteriliyor.\",\n \"state.updating\": \"Güncelleniyor…\",\n \"state.stillLoading\": \"Hâlâ yükleniyor…\",\n \"cell.late\": \"{count} gün gecikti\",\n \"cell.rating\": \"{max} üzerinden {value}\",\n \"cell.fields\": \"{count} alan\",\n \"cell.copy\": \"Kopyala\",\n \"cell.copied\": \"Kopyalandı\",\n \"cell.expandText\": \"Tam metni göster\",\n \"bulk.moreAria\": \"Diğer toplu işlemler\",\n \"bulk.aria\": \"Toplu işlemler\",\n \"sheet.find\": \"Tabloda bul\",\n \"sheet.findCount\": \"{index} / {total}\",\n \"sheet.all\": \"Tümü\",\n \"sheet.changed\": \"Değişen\",\n \"sheet.errors\": \"Hatalı\",\n \"sheet.addRow\": \"Satır ekle\",\n \"sheet.import\": \"Excel'den al\",\n \"sheet.export\": \"Dışa aktar\",\n \"sheet.exportAll\": \"Tüm satırları dışa aktar ({count})\",\n \"sheet.exportVisible\": \"Görünen satırları dışa aktar ({count})\",\n \"sheet.changes\": \"{rows} satırda {cells} değişiklik\",\n \"sheet.newRows.one\": \"{count} yeni satır\",\n \"sheet.newRows.other\": \"{count} yeni satır\",\n \"sheet.newShort\": \"{count} yeni\",\n \"sheet.noChanges\": \"Değişiklik yok\",\n \"sheet.rows\": \"{count} satır\",\n \"sheet.errorsGoTo.one\": \"{count} hata — git\",\n \"sheet.errorsGoTo.other\": \"{count} hata — git\",\n \"sheet.discard\": \"Vazgeç\",\n \"sheet.save\": \"Değişiklikleri kaydet\",\n \"sheet.agg.count\": \"Adet\",\n \"sheet.agg.sum\": \"Toplam\",\n \"sheet.agg.avg\": \"Ortalama\",\n \"sheet.cells\": \"{rows} × {cols} hücre\",\n \"sheet.keyTooltip\": \"Eşleşme anahtarı — var olan {key} o kaydı günceller, yeni {key} yeni kayıt oluşturur\",\n \"sheet.addedRow\": \"Eklenen satır\",\n \"sheet.required\": \"Zorunlu\",\n \"sheet.notANumber\": \"Sayı girin\",\n \"sheet.notADate\": \"Tarih girin\",\n \"sheet.hasErrors\": \"Hata var\",\n \"sheet.valueAria\": \"{key} için {column} değeri\",\n \"sheet.statusAria\": \"Tablo durumu\",\n \"sheet.was\": \"Önceki: {value}\",\n \"sheet.duplicateKey\": \"{key} zaten {row}. satırda\",\n \"sheet.notAnOption\": \"“{value}” bir seçenek değil\",\n \"sheet.useOption\": \"{option} kullan\",\n \"sheet.noFormulas\": \"Formül desteklenmiyor\",\n \"sheet.notMatchFilter\": \"Filtrelere uymuyor\",\n \"sheet.menu.cut\": \"Kes\",\n \"sheet.menu.copy\": \"Kopyala\",\n \"sheet.menu.paste\": \"Yapıştır\",\n \"sheet.menu.fillDown\": \"Aşağı doldur\",\n \"sheet.menu.clear\": \"İçeriği temizle\",\n \"sheet.menu.insertAbove\": \"Üste satır ekle\",\n \"sheet.menu.insertBelow\": \"Alta satır ekle\",\n \"sheet.menu.remove\": \"Listeden çıkar\",\n \"sheet.menu.open\": \"{entity.one} aç\",\n \"sheet.removed.one\": \"{row}. satır listeden çıkarıldı. Kayıt silinmedi.\",\n \"sheet.removed.other\": \"{count} satır listeden çıkarıldı. Kayıtlar silinmedi.\",\n \"sheet.pasted\": \"{rows} satır × {cols} sütun yapıştırıldı\",\n \"sheet.pasteIssues.one\": \"{count} değer seçeneklerde yok\",\n \"sheet.pasteIssues.other\": \"{count} değer seçeneklerde yok\",\n \"sheet.pasteErrors.one\": \"{count} hücrede hata var\",\n \"sheet.pasteErrors.other\": \"{count} hücrede hata var\",\n \"sheet.review\": \"İncele\",\n \"sheet.fillPreview\": \"{count} hücreyi {value} ile doldur\",\n \"sheet.limitPaste\": \"Bu yapıştırmayla {count} satır olur. Sınır {max}.\",\n \"sheet.limitFile\": \"Bu dosyayla {count} satır olur. Sınır {max}.\",\n \"sheet.nextError\": \"Sonraki hata (F8)\",\n \"sheet.prevError\": \"Önceki hata (⇧F8)\",\n \"sheet.nextErrorHidden\": \"Sonraki hata filtreler yüzünden gizli\",\n \"sheet.showIt\": \"Göster\",\n \"sheet.loading\": \"Yükleniyor: {entity.other}…\",\n \"sheet.loadingCount\": \"{total} kayıttan {loaded}\",\n \"sheet.firstN\": \"İlk {max} kayıt gösteriliyor. Kalanları düzenlemek için seçimi daraltın.\",\n \"sheet.saving\": \"Kaydediliyor… {total} satırdan {sent}\",\n \"sheet.savingIndeterminate\": \"Kaydediliyor…\",\n \"sheet.savingButton\": \"Kaydediliyor…\",\n \"sheet.savingReadOnly\": \"Kaydedilirken salt okunur\",\n \"sheet.saveChanges\": \"Değişiklikleri kaydet\",\n \"sheet.discardButton\": \"Vazgeç\",\n \"sheet.saved\": \"{count} satır kaydedildi\",\n \"sheet.savedDetail\": \"{created} oluşturuldu · {updated} güncellendi\",\n \"sheet.partly.title\": \"{count} satır kaydedilemedi.\",\n \"sheet.partly.body\": \"{count} satır kaydedildi.\",\n \"sheet.copyErrors\": \"Hataları kopyala\",\n \"sheet.err.row\": \"Satır\",\n \"sheet.err.column\": \"Sütun\",\n \"sheet.err.message\": \"Mesaj\",\n \"sheet.selectionSummary\": \"Seçim özeti\",\n \"sheet.showRows\": \"Gösterilen satırlar\",\n \"sheet.errDialog.title.one\": \"{count} satırda hata var\",\n \"sheet.errDialog.title.other\": \"{count} satırda hata var\",\n \"sheet.errDialog.body\": \"Bu satır gönderilmeyecek. Değişen diğer {count} satır kaydedilecek.\",\n \"sheet.errDialog.fix\": \"Önce düzelt\",\n \"sheet.errDialog.save\": \"{count} satırı kaydet\",\n \"sheet.leave.title\": \"Kaydetmeden çıkılsın mı?\",\n \"sheet.leave.body\": \"{rows} satırdaki {cells} değişiklik kaybolacak.\",\n \"sheet.leave.stay\": \"Kal\",\n \"sheet.leave.discard\": \"Değişiklikleri at\",\n \"sheet.discard.title\": \"{rows} satırdaki {cells} değişiklik atılsın mı?\",\n \"sheet.discard.body\": \"Tablo yüklendiği hâline döner. Bu geri alınamaz.\",\n \"sheet.discard.keep\": \"Düzenlemeye devam et\",\n \"sheet.readOnly.title\": \"Düzenleme için daha büyük bir ekran gerekiyor.\",\n \"sheet.readOnly.body\": \"Burada arayıp kayıtlara bakabilirsiniz; değişiklikler bilgisayardan yapılır.\",\n \"sheet.readOnly.badge\": \"Salt okunur\",\n \"sheet.readOnly.total\": \"{count} {entity.one}\",\n \"import.title\": \"Excel'den içe aktar\",\n \"import.body\": \"Satırlar {key} ile eşleşir: bilinen {key} kaydını günceller, yeni {key} yeni satır olur. Her şey önce incelemeniz için tabloya gelir.\",\n \"import.failed\": \"Dosya okunamadı\",\n \"import.drop\": \".xlsx veya .csv dosyasını bırakın ya da seçin\",\n \"import.xlsxOnly\": \"Yalnızca .xlsx ve .csv dosyaları okunabilir. Eski .xls dosyasını önce Excel'de .xlsx olarak kaydedin.\",\n \"import.sheetInfo\": \"“{sheet}” sayfası · {count} satır\",\n \"import.headerRow\": \"Başlık satırı\",\n \"import.headerRowN\": \"{n}. satır\",\n \"import.replace\": \"Dosyayı değiştir\",\n \"import.matchBy\": \"Satırları eşleştir\",\n \"import.excelColumn\": \"Excel sütunu\",\n \"import.field\": \"Alan\",\n \"import.firstValue\": \"İlk değer\",\n \"import.matchKey\": \"eşleşme anahtarı\",\n \"import.skip\": \"Alma\",\n \"import.chooseField\": \"Alan seçin\",\n \"import.summary\": \"Listedeki {updates} satır güncellenir · listede olmayan {news} {key}\",\n \"import.seeNew\": \"Listede olmayan {key} değerlerini gör\",\n \"import.addNew\": \"Listede olmayan {count} {key} satır olarak eklensin\",\n \"import.apply\": \"Tabloya uygula\",\n \"import.keyRequired\": \"{key} değerlerini içeren sütunu seçin.\",\n \"import.done\": \"{count} satır alındı · {updated} güncellendi · {news} eklendi\",\n \"mobile.filters\": \"Filtreler\",\n \"mobile.showResults\": \"Sonuçları göster\",\n \"mobile.sort\": \"Sıralama\",\n \"mobile.chipAria\": \"{summary}. Filtreleri aç\",\n \"mobile.backToFilters\": \"Filtrelere dön\",\n \"mobile.operator\": \"Operatör\",\n \"sr.loaded\": \"{count} satır yüklendi\",\n \"sr.total\": \"{count} {entity.one}\",\n \"sr.sorted\": \"{column} sütununa göre {dir} sıralandı\",\n \"sr.asc\": \"artan\",\n \"sr.desc\": \"azalan\",\n \"sr.filterAdded\": \"Filtre eklendi: {summary}\",\n \"sr.filterRemoved\": \"{column} filtresi kaldırıldı\",\n \"sr.view\": \"Görünüm: {name}\",\n \"sr.viewEdited\": \"Görünüm: {name}, değişti\",\n \"sr.expanded\": \"{label} açıldı, {count} satır\",\n \"sr.savingPercent\": \"Kaydediliyor, yüzde {percent}\",\n \"sr.loadingPercent\": \"Yükleniyor, yüzde {percent}\",\n \"sr.pasted\": \"{rows} satır × {cols} sütun yapıştırıldı.\",\n}\n","import type { Plural } from '../../types/core'\nimport type { MessageValue, Messages } from '../../types/i18n'\nimport { en } from './en'\nimport { tr } from './tr'\n\n/** `{name}` düz değer, `{entity.one}` nokta yolu (09 · kurallar). `count` çoğul seçimini de yönetir. */\nexport type MessageParams = Record<\n string,\n string | number | boolean | null | undefined | Record<string, string> | Plural\n>\n\nexport interface I18n {\n readonly locale: string\n /** Anahtar yoksa anahtarın kendisini döndürür; geliştirme modunda bir kez uyarır. */\n t: (key: string, params?: MessageParams) => string\n has: (key: string) => boolean\n}\n\nexport const builtinMessages: Readonly<Record<string, Record<string, string>>> = { en, tr }\n\nconst defaultLocale = (): string => (typeof navigator !== 'undefined' && navigator.language) || 'en'\n\nconst lookup = (params: MessageParams, path: string): string | undefined => {\n const [head, ...rest] = path.split('.')\n let v: unknown = params[head!]\n for (const p of rest) v = v && typeof v === 'object' ? (v as Record<string, unknown>)[p] : undefined\n return v === undefined || v === null || typeof v === 'object' ? undefined : String(v)\n}\n\nconst interpolate = (text: string, params: MessageParams): string =>\n text.replace(/\\{([A-Za-z0-9_.]+)\\}/g, (m, path: string) => lookup(params, path) ?? m)\n\n/** Fonksiyon mesajlar düz sözlük alır: `{ 'entity.one': 'order', count: 3 }`. */\nconst flatten = (params: MessageParams): Record<string, string | number> => {\n const out: Record<string, string | number> = {}\n for (const [k, v] of Object.entries(params)) {\n if (v && typeof v === 'object') for (const [k2, v2] of Object.entries(v)) out[`${k}.${k2}`] = v2\n else if (typeof v === 'string' || typeof v === 'number') out[k] = v\n }\n return out\n}\n\nexport function createI18n(options: { locale?: string; messages?: Partial<Messages> } = {}): I18n {\n const locale = options.locale ?? defaultLocale()\n const lang = locale.split('-')[0]!.toLowerCase()\n const table: Messages = { ...(builtinMessages[lang] ?? en) }\n for (const [k, v] of Object.entries(options.messages ?? {})) if (v !== undefined) table[k] = v\n const plural = new Intl.PluralRules(locale)\n const warned = new Set<string>()\n\n const t = (key: string, params: MessageParams = {}): string => {\n let k = key\n if (typeof params.count === 'number') {\n const form = plural.select(params.count) === 'one' ? 'one' : 'other'\n if (`${key}.${form}` in table) k = `${key}.${form}`\n }\n const msg: MessageValue | undefined = table[k]\n if (msg === undefined) {\n if (import.meta.env?.DEV && !warned.has(k)) {\n warned.add(k)\n console.warn(`[data-table] i18n: eksik anahtar \"${k}\" (${locale})`)\n }\n return key\n }\n return interpolate(typeof msg === 'function' ? msg(flatten(params)) : msg, params)\n }\n\n return { locale, t, has: (key) => key in table }\n}\n","import { inject, type App, type InjectionKey, type Plugin } from 'vue'\nimport type { DataTableOptions } from '../types/plugin'\nimport type { PreferencesAdapter, ViewsAdapter } from '../types/views'\nimport { createI18n, type I18n } from './i18n'\n\nexport interface DataTableContext {\n locale: string\n i18n: I18n\n /** null → yalnızca `views` prop'undaki görünümler, kaydetme yok (01 · plugin). */\n viewsAdapter: ViewsAdapter | null\n /** null → tercihler oturumluk; arayüz \"kaydedildi\" demez. */\n preferences: PreferencesAdapter | null\n}\n\nexport const DATA_TABLE_KEY: InjectionKey<DataTableContext> = Symbol('medyat:data-table')\n\nexport function createContext(options: DataTableOptions = {}): DataTableContext {\n const i18n = createI18n({ locale: options.locale, messages: options.messages })\n return {\n locale: i18n.locale,\n i18n,\n viewsAdapter: options.viewsAdapter ?? null,\n preferences: options.preferences ?? null,\n }\n}\n\n/** app.use(createDataTable({ locale: 'tr', viewsAdapter, preferences })) */\nexport function createDataTable(options: DataTableOptions = {}): Plugin {\n return {\n install(app: App) {\n app.provide(DATA_TABLE_KEY, createContext(options))\n },\n }\n}\n\nlet fallback: DataTableContext | undefined\n\n/** Bileşen içinden bağlam. Plugin kurulmamışsa varsayılanlar: navigator.language, paket metinleri, adapter yok. */\nexport function useDataTableContext(): DataTableContext {\n return inject(DATA_TABLE_KEY, null) ?? (fallback ??= createContext())\n}\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 type=\"button\" class=\"dt-row-more\" :aria-label=\"i18n.t('row.actionsAria', { id: label })\">\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 type=\"button\" class=\"dt-row-more\" :aria-label=\"i18n.t('row.actionsAria', { id: label })\">\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 { 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 /** 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 doğal Tab durağıdır (08 §2, D38). Ortak hücre render'ları DataSheet için tabindex=-1 verir; listede kalkar.\n const promote = () => {\n if (!el) return\n for (const w of el.querySelectorAll<HTMLElement>('[tabindex=\"-1\"]')) w.removeAttribute('tabindex')\n }\n onMounted(promote)\n onUpdated(promote)\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 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 },\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 }, [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 '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: 'cell',\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: 'cell',\n },\n [\n h('input', {\n type: 'checkbox',\n class: 'dt-checkbox dt-select-box',\n checked: props.selected,\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: 'cell',\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\n return () =>\n h(\n 'div',\n {\n ref: (r) => (el = r as HTMLElement | null),\n class: [\n 'dt-row',\n {\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 'data-index': props.index,\n style: props.style,\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// Display popover'ı (05 §3, §5; T3-06, T4-04/05): Density · Vertical grid lines · Columns › · Saved for you only + Reset.\n// Telefonda yerini ⋯ alt sayfası (PhoneMoreSheet) alır. Columns › dialog'u açar (D45). Sort › yok: sıralama header'dan.\nimport { 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 { defineAsyncComponent, ref } from 'vue'\nimport type { Density } from '../../types/core'\nimport { useDataTableContext } from '../plugin'\nimport type { ColumnsDraft, PanelColumn } from './ColumnsDialog.vue'\n\n// Dialog ve @dnd-kit yalnızca Columns ilk açılışta yüklenir; sonra bağlı kalır (odak dönüşü).\nconst ColumnsDialog = defineAsyncComponent(() => import('./ColumnsDialog.vue'))\nconst columnsUsed = ref(false)\n\ndefineProps<{\n density: Density\n verticalLines: boolean\n columns: PanelColumn[]\n counts: { shown: number; total: number }\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 'columns-save': [draft: ColumnsDraft]\n reset: []\n}>()\nconst open = defineModel<boolean>('open', { default: false })\n\nconst { i18n } = useDataTableContext()\nconst DENSITIES: Density[] = ['comfortable', 'standard', 'compact']\nconst columnsOpen = ref(false)\nconst trigger = ref<HTMLButtonElement | null>(null)\nconst openColumns = () => {\n open.value = false\n columnsUsed.value = true\n columnsOpen.value = true\n}\n/** Popover kapandığı için odak Display düğmesine döner. */\nconst focusTrigger = (e: Event) => {\n e.preventDefault()\n trigger.value?.focus()\n}\n</script>\n\n<template>\n <PopoverRoot v-model:open=\"open\">\n <PopoverTrigger as-child>\n <button\n ref=\"trigger\"\n type=\"button\"\n class=\"dt-btn has-icon\"\n :class=\"{ 'dt-btn-icon': iconOnly }\"\n :aria-label=\"i18n.t('toolbar.display')\"\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\" align=\"end\" :side-offset=\"4\">\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 <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-sep\" />\n <button type=\"button\" class=\"dt-pop-item\" @click=\"openColumns\">\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 <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 </PopoverContent>\n </PopoverPortal>\n </PopoverRoot>\n <ColumnsDialog\n v-if=\"columnsUsed\"\n v-model:open=\"columnsOpen\"\n :columns=\"columns\"\n @save=\"(d) => emit('columns-save', d)\"\n @close-auto-focus=\"focusTrigger\"\n />\n</template>\n","<script setup lang=\"ts\">\n// Display popover'ı (05 §3, §5; T3-06, T4-04/05): Density · Vertical grid lines · Columns › · Saved for you only + Reset.\n// Telefonda yerini ⋯ alt sayfası (PhoneMoreSheet) alır. Columns › dialog'u açar (D45). Sort › yok: sıralama header'dan.\nimport { 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 { defineAsyncComponent, ref } from 'vue'\nimport type { Density } from '../../types/core'\nimport { useDataTableContext } from '../plugin'\nimport type { ColumnsDraft, PanelColumn } from './ColumnsDialog.vue'\n\n// Dialog ve @dnd-kit yalnızca Columns ilk açılışta yüklenir; sonra bağlı kalır (odak dönüşü).\nconst ColumnsDialog = defineAsyncComponent(() => import('./ColumnsDialog.vue'))\nconst columnsUsed = ref(false)\n\ndefineProps<{\n density: Density\n verticalLines: boolean\n columns: PanelColumn[]\n counts: { shown: number; total: number }\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 'columns-save': [draft: ColumnsDraft]\n reset: []\n}>()\nconst open = defineModel<boolean>('open', { default: false })\n\nconst { i18n } = useDataTableContext()\nconst DENSITIES: Density[] = ['comfortable', 'standard', 'compact']\nconst columnsOpen = ref(false)\nconst trigger = ref<HTMLButtonElement | null>(null)\nconst openColumns = () => {\n open.value = false\n columnsUsed.value = true\n columnsOpen.value = true\n}\n/** Popover kapandığı için odak Display düğmesine döner. */\nconst focusTrigger = (e: Event) => {\n e.preventDefault()\n trigger.value?.focus()\n}\n</script>\n\n<template>\n <PopoverRoot v-model:open=\"open\">\n <PopoverTrigger as-child>\n <button\n ref=\"trigger\"\n type=\"button\"\n class=\"dt-btn has-icon\"\n :class=\"{ 'dt-btn-icon': iconOnly }\"\n :aria-label=\"i18n.t('toolbar.display')\"\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\" align=\"end\" :side-offset=\"4\">\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 <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-sep\" />\n <button type=\"button\" class=\"dt-pop-item\" @click=\"openColumns\">\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 <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 </PopoverContent>\n </PopoverPortal>\n </PopoverRoot>\n <ColumnsDialog\n v-if=\"columnsUsed\"\n v-model:open=\"columnsOpen\"\n :columns=\"columns\"\n @save=\"(d) => emit('columns-save', d)\"\n @close-auto-focus=\"focusTrigger\"\n />\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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"}
|