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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,22 @@
1
+ /* shadcn-vue köprüsü (Tailwind v3: değişkenler HSL üçlüsü, ör. "0 0% 100%"). tokens.css'ten SONRA yükleyin.
2
+ Eşleme shadcn-bridge.css ile aynıdır; her değişken hsl(var(--x)) ile sarılır. */
3
+ :root,
4
+ .dark,
5
+ [data-theme='light'],
6
+ [data-theme='dark'] {
7
+ --dt-canvas: hsl(var(--background));
8
+ --dt-surface: hsl(var(--card));
9
+ --dt-surface-2: color-mix(in oklab, hsl(var(--muted)) 45%, hsl(var(--card)));
10
+ --dt-surface-3: hsl(var(--muted));
11
+ --dt-line: hsl(var(--border));
12
+ --dt-line-2: hsl(var(--input));
13
+ --dt-line-3: color-mix(in oklab, hsl(var(--muted-foreground)) 45%, hsl(var(--border)));
14
+ --dt-text: hsl(var(--foreground));
15
+ --dt-text-2: color-mix(in oklab, hsl(var(--foreground)) 70%, hsl(var(--muted-foreground)));
16
+ --dt-text-3: hsl(var(--muted-foreground));
17
+ --dt-ink: hsl(var(--primary));
18
+ --dt-on-ink: hsl(var(--primary-foreground));
19
+ --dt-focus: hsl(var(--ring));
20
+ --dt-r-dot: hsl(var(--destructive));
21
+ --dt-r-fg: hsl(var(--destructive));
22
+ }
@@ -0,0 +1,23 @@
1
+ /* shadcn-vue köprüsü (Tailwind v4: değişkenler tam renk, ör. oklch(...)). tokens.css'ten SONRA yükleyin.
2
+ Yalnızca yüzey, çizgi, metin, birincil buton, odak ve yıkıcı renkler devralınır; accent ve tonlar paketin kendi değerleridir (02).
3
+ shadcn'in --accent değişkeni hover grisidir, --dt-accent ona bağlanmaz. */
4
+ :root,
5
+ .dark,
6
+ [data-theme='light'],
7
+ [data-theme='dark'] {
8
+ --dt-canvas: var(--background);
9
+ --dt-surface: var(--card);
10
+ --dt-surface-2: color-mix(in oklab, var(--muted) 45%, var(--card));
11
+ --dt-surface-3: var(--muted);
12
+ --dt-line: var(--border);
13
+ --dt-line-2: var(--input);
14
+ --dt-line-3: color-mix(in oklab, var(--muted-foreground) 45%, var(--border));
15
+ --dt-text: var(--foreground);
16
+ --dt-text-2: color-mix(in oklab, var(--foreground) 70%, var(--muted-foreground));
17
+ --dt-text-3: var(--muted-foreground);
18
+ --dt-ink: var(--primary);
19
+ --dt-on-ink: var(--primary-foreground);
20
+ --dt-focus: var(--ring);
21
+ --dt-r-dot: var(--destructive);
22
+ --dt-r-fg: var(--destructive);
23
+ }
@@ -0,0 +1,623 @@
1
+ import { Component } from 'vue';
2
+ import { ComputedRef } from 'vue';
3
+ import { PublicProps } from 'vue';
4
+ import { ShallowUnwrapRef } from 'vue';
5
+ import { VNode } from 'vue';
6
+ import { VNodeChild } from 'vue';
7
+
8
+ declare const __VLS_export: <Row extends object>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
9
+ props: PublicProps & __VLS_PrettifyLocal<{
10
+ tableId: TableId;
11
+ columns: Array<ColumnDef<Row>>;
12
+ rows: Row[];
13
+ rowKey?: string;
14
+ /** Verilmezse tercihten (Display › Density), o da yoksa compact (02 · Yoğunluk). */
15
+ density?: Density;
16
+ entityName?: Plural;
17
+ /** Upsert anahtarı olan sütun (ör. "sku"). Yüklenmiş satırlarda salt okunur; `rowKey`'den ayrıdır. */
18
+ keyColumn: string;
19
+ /** Uygulama satırları yüklerken; sayaç verilirse "Loading… 6,200 of 10,000". Düzenleme false olunca açılır. */
20
+ loading?: Progress;
21
+ /** `@save` sonrası uygulama kaydederken: grid salt okunur, ilerleme şeridi (07 §14). */
22
+ saving?: Progress;
23
+ /** Add row ile oluşan satırın başlangıç değerleri. */
24
+ newRowDefaults?: () => Partial<Row>;
25
+ /** Import: dosyayı uygulama ayrıştırır ve ham satırları verir (07 §13). Verilmezse paketin okuyucusu (.xlsx, .csv; D46). */
26
+ parseFile?: (file: File) => Promise<ParsedWorkbook>;
27
+ /** Import düğmesi (D46). Varsayılan açık. */
28
+ importable?: boolean;
29
+ /** Export menüsü (D46). Varsayılan açık; `false` gizler (ör. yetki). */
30
+ exportable?: boolean;
31
+ /** Aşılırsa ilk `maxRows` satır kullanılır ve şerit uyarır (07 §15); yapıştırma ve ekleme bu sınırı aşamaz. */
32
+ maxRows?: number;
33
+ /** Bu genişliğin altında veya yalnızca dokunmatikte salt okunur (D14); karar açılışta. */
34
+ readOnlyBelow?: number;
35
+ } & {
36
+ onSave?: ((changes: SheetChanges) => any) | undefined;
37
+ onExport?: ((payload: {
38
+ format: "csv" | "xlsx";
39
+ scope: "all" | "visible";
40
+ columns: string[];
41
+ rows: Row[];
42
+ }) => any) | undefined;
43
+ }> & (typeof globalThis extends {
44
+ __VLS_PROPS_FALLBACK: infer P;
45
+ } ? P : {});
46
+ expose: (exposed: ShallowUnwrapRef<{
47
+ status: ComputedRef<SheetStatus>;
48
+ isDirty: () => boolean;
49
+ getChanges: () => SheetChanges;
50
+ applyResult: (results: Array<SheetRowResult<Row>>) => void;
51
+ reset: () => void;
52
+ undo: () => void;
53
+ redo: () => void;
54
+ goToNextError: () => void;
55
+ }>) => void;
56
+ attrs: any;
57
+ slots: {
58
+ empty?: () => unknown;
59
+ };
60
+ emit: ((evt: "save", changes: SheetChanges) => void) & ((evt: "export", payload: {
61
+ format: "csv" | "xlsx";
62
+ scope: "all" | "visible";
63
+ columns: string[];
64
+ rows: Row[];
65
+ }) => void);
66
+ }>) => VNode & {
67
+ __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
68
+ };
69
+
70
+ declare type __VLS_PrettifyLocal<T> = (T extends any ? {
71
+ [K in keyof T]: T[K];
72
+ } : {
73
+ [K in keyof T as K]: T[K];
74
+ }) & {};
75
+
76
+ export declare interface BaseColumn<Row, V = unknown> {
77
+ /** Kararlı kimlik; `accessor` verilmezse değer bu yoldan okunur ('customer.title' → row.customer?.title). */
78
+ id: Path<Row> | string;
79
+ /** Header metni (uygulama i18n'den verir). */
80
+ header: string;
81
+ /** Dar alanlarda (telefon) kısa header. */
82
+ headerShort?: string;
83
+ /** Sütun açıklaması: header tooltip'inde ad altında ikinci satır, Columns dialog'unda ad altında; hücrede gösterilmez. */
84
+ description?: string;
85
+ /** Hesaplanan değer. Verilirse `fields` ile sunucudan istenecek alanlar bildirilir. */
86
+ accessor?: (row: Row) => V;
87
+ fields?: string[];
88
+ /** string → header'da soluk son ek ("pcs", "d"). Fonksiyon → hücrede, satır bazında. */
89
+ unit?: string | ((row: Row) => string);
90
+ align?: 'left' | 'right' | 'center';
91
+ /** px. Varsayılan tipe göre (05 · Sütun genişlikleri). Sabit sütunlar her zaman px. */
92
+ width?: number;
93
+ /** px. Varsayılan 80. */
94
+ minWidth?: number;
95
+ maxWidth?: number;
96
+ hidden?: boolean;
97
+ /** Gizlenemez. Birincil ve `required` sütun için otomatik true. */
98
+ alwaysVisible?: boolean;
99
+ /** Birincil hücre: gerçek <a href> (D6); her zaman sola sabit (D45). Tabloda en fazla bir tane. */
100
+ primary?: boolean;
101
+ /** Birincil hücre veya `id`/`ajax` tipi için kayıt linki. */
102
+ href?: (row: Row) => string | undefined;
103
+ /** İkinci satır (yalnızca Comfortable). */
104
+ secondary?: (row: Row) => string | null | undefined;
105
+ /** Boş değer metni. Varsayılan "—". */
106
+ emptyText?: string;
107
+ sortable?: boolean;
108
+ filterable?: boolean;
109
+ filter?: ColumnFilterOptions;
110
+ searchable?: boolean;
111
+ suggested?: boolean;
112
+ filterNoun?: Plural;
113
+ priority?: number;
114
+ cell?: CellRender<Row, V>;
115
+ actions?: Array<CellAction<Row>>;
116
+ editable?: boolean | ((row: Row, ctx: {
117
+ isNew: boolean;
118
+ }) => boolean);
119
+ editor?: CellEditor;
120
+ required?: boolean;
121
+ validate?: Validator<Row>;
122
+ warn?: Validator<Row>;
123
+ importAliases?: string[];
124
+ hint?: string;
125
+ }
126
+
127
+ /** Toplu aksiyon. Seçim sayfa kapsamlıdır (D19): `rows` o anda seçili, yüklü satırlardır. */
128
+ export declare interface BulkAction<Row = any> {
129
+ id: string;
130
+ label: string;
131
+ /** Bar düğmesinde tooltip, ⋯ menüsünde ikinci satır (gerekçe varsa o) (D36). */
132
+ description?: string;
133
+ icon?: Component;
134
+ /** Bar'da görünür; değilse ⋯ menüsünde. Bar'da en fazla 3. */
135
+ inBar?: boolean;
136
+ destructive?: boolean;
137
+ /** Yetkiye bağlı: false → bar'da ve menüde yok (D36). Duruma bağlı pasiflik için `disabled`. */
138
+ when?: (rows: Row[]) => boolean;
139
+ disabled?: (rows: Row[]) => boolean | string;
140
+ run: (rows: Row[]) => void | Promise<void>;
141
+ }
142
+
143
+ /** Hücre aksiyonu: paket sağ kenarda overlay olarak çizer (metin yerleşimi değişmez), ≤ 2 ikon + ⋯ menüsü. */
144
+ export declare interface CellAction<Row> {
145
+ id: string;
146
+ label: string;
147
+ icon: Component;
148
+ /** 'hover': hover ve focus-within'de görünür (varsayılan). 'always': her zaman. */
149
+ reveal?: 'hover' | 'always';
150
+ /** Değere bağlı aksiyon: false → gösterilmez. */
151
+ when?: (row: Row) => boolean;
152
+ disabled?: (row: Row) => boolean | string;
153
+ destructive?: boolean;
154
+ /** Alt menü (⋯ olarak çizilir). */
155
+ menu?: Array<Omit<CellAction<Row>, 'reveal' | 'menu'>>;
156
+ run?: (row: Row) => void | Promise<void>;
157
+ }
158
+
159
+ /** Özel hücre içeriğine verilen bağlam. `value` tipe göre daralır (int → number | null, select → string | number | null …). */
160
+ export declare interface CellContext<Row, V = unknown> {
161
+ row: Row;
162
+ value: V;
163
+ /** Tipin varsayılan biçimlendirmesi ("12,400", "Oct 24"); özel içerik bunu sarabilir. */
164
+ formatted: string;
165
+ column: {
166
+ id: string;
167
+ type: ColumnType;
168
+ };
169
+ density: Density;
170
+ }
171
+
172
+ /** Özel editör (DataSheet). Sözleşme: props { modelValue, row, column }, emit 'update:modelValue'; portallı içeriğin kökü `dt-sheet-layer` (07 §5). */
173
+ export declare type CellEditor = Component;
174
+
175
+ /**
176
+ * Özel hücre içeriği: yalnızca fonksiyon formu. Bileşen `h(Comp, props)` ile verilir.
177
+ * Tipin kabuğu (hizalama, kesme, boş değer, yoğunluk, hover) korunur; yalnızca içerik değişir.
178
+ */
179
+ export declare type CellRender<Row, V = unknown> = (ctx: CellContext<Row, V>) => VNodeChild;
180
+
181
+ export declare type ColumnDef<Row = any> = (BaseColumn<Row, number | null> & {
182
+ type: 'int';
183
+ }) | (BaseColumn<Row, number | null> & {
184
+ type: 'float';
185
+ decimalPlaces?: number;
186
+ }) | (BaseColumn<Row, number | null> & {
187
+ type: 'percentage';
188
+ display?: 'text' | 'bar';
189
+ decimalPlaces?: number;
190
+ }) | (BaseColumn<Row, number | null> & {
191
+ type: 'star';
192
+ max?: number;
193
+ }) | (BaseColumn<Row, number | null> & {
194
+ type: 'currency';
195
+ /** Sabit ISO kodu veya satırdan okuma. */
196
+ currency: string | ((row: Row) => string);
197
+ decimalPlaces?: number;
198
+ }) | (BaseColumn<Row, string | null> & {
199
+ type: 'string' | 'text' | 'uppercase' | 'lowercase' | 'email' | 'url' | 'id';
200
+ }) | (BaseColumn<Row, string | null> & {
201
+ type: 'phone';
202
+ }) | (BaseColumn<Row, string | null> & {
203
+ type: 'color';
204
+ display?: 'swatch' | 'fill';
205
+ palette?: string[];
206
+ }) | (BaseColumn<Row, boolean | null> & {
207
+ type: 'boolean';
208
+ falseTone?: 'neutral' | 'destructive';
209
+ }) | (BaseColumn<Row, string | number | null> & {
210
+ type: 'select';
211
+ options: OptionDef[];
212
+ optionEnabled?: OptionEnabled<Row>;
213
+ }) | (BaseColumn<Row, Array<string | number> | null> & {
214
+ type: 'multiselect';
215
+ options: OptionDef[];
216
+ optionEnabled?: OptionEnabled<Row>;
217
+ }) | (BaseColumn<Row, string | number | null> & {
218
+ type: 'ajax';
219
+ remote: RemoteOptions;
220
+ }) | (BaseColumn<Row, string | number | Array<string | number> | null> & {
221
+ type: 'user';
222
+ remote?: RemoteOptions<UserOption>;
223
+ options?: UserOption[];
224
+ /** Birden çok kişi (avatar yığını). */
225
+ multiple?: boolean;
226
+ }) | (BaseColumn<Row, IsoDate | Date | null> & {
227
+ type: 'date';
228
+ overdue?: boolean | ((row: Row) => boolean);
229
+ }) | (BaseColumn<Row, IsoDate | Date | null> & {
230
+ type: 'datetime';
231
+ relative?: boolean;
232
+ overdue?: boolean | ((row: Row) => boolean);
233
+ }) | (BaseColumn<Row, unknown> & {
234
+ type: 'object';
235
+ summary?: (value: unknown, row: Row) => string;
236
+ }) | (BaseColumn<Row, unknown[] | null> & {
237
+ type: 'array';
238
+ itemType?: 'string' | 'int' | 'float' | 'id';
239
+ });
240
+
241
+ export declare interface ColumnFilterOptions {
242
+ /** Tipin listesinden alt küme. */
243
+ operators?: FilterOp[];
244
+ defaultOperator?: FilterOp;
245
+ }
246
+
247
+ export declare interface ColumnLayout {
248
+ /** Görünür + gizli tüm sütunların sırası. */
249
+ order: string[];
250
+ /** Tanımlıysa beyaz liste: burada olmayan (sonradan eklenen) sütun gizlidir. */
251
+ visible: string[];
252
+ /** Yalnızca varsayılandan farklı genişlikler. */
253
+ widths: Record<string, number>;
254
+ pinned: {
255
+ left: string[];
256
+ right: string[];
257
+ };
258
+ }
259
+
260
+ /** 23 tip. `type` zorunludur; veriden çıkarsama yoktur. */
261
+ export declare type ColumnType = 'int' | 'float' | 'percentage' | 'star' | 'currency' | 'string' | 'text' | 'uppercase' | 'lowercase' | 'phone' | 'color' | 'email' | 'url' | 'id' | 'boolean' | 'select' | 'multiselect' | 'ajax' | 'user' | 'date' | 'datetime' | 'object' | 'array';
262
+
263
+ /** `countable` tablolarda "Count total" → `@count`; uygulama `total` prop'unu verir. */
264
+ export declare interface CountRequest {
265
+ query: QueryWithoutPage;
266
+ signal: AbortSignal;
267
+ }
268
+
269
+ export declare const DataSheet: typeof __VLS_export;
270
+
271
+ /** useTemplateRef<DataSheetHandle>('sheet'). */
272
+ export declare interface DataSheetHandle {
273
+ status: Readonly<SheetStatus>;
274
+ /** Yönlendirici koruması için. */
275
+ isDirty: () => boolean;
276
+ /** `@save` ile aynı yük; uygulamanın kendi kaydetme düğmesi için. */
277
+ getChanges: () => SheetChanges;
278
+ /**
279
+ * Kayıt sonuçlarını işler (parça parça çağrılabilir): created/updated → işaretler kalkar, `row` verildiyse değerler onunla
280
+ * güncellenir; error → değişiklikler kalır, hatalar hücrelere yazılır. Undo/redo yığını temizlenir.
281
+ */
282
+ applyResult: (results: Array<SheetRowResult<unknown>>) => void;
283
+ /** Discard: tüm satırlar yüklendiği hale döner; yığın temizlenir. */
284
+ reset: () => void;
285
+ undo: () => void;
286
+ redo: () => void;
287
+ /** F8 ile aynı. */
288
+ goToNextError: () => void;
289
+ }
290
+
291
+ /** Uygulama genelinde bir kez: app.use(createDataTable({ … })) */
292
+ export declare interface DataTableOptions {
293
+ /** Varsayılan navigator.language. Sayı/tarih biçimi ve metin karşılaştırması bu locale ile. */
294
+ locale?: string;
295
+ messages?: Partial<Messages>;
296
+ /** Yoksa yalnızca `views` prop'undaki görünümler; kaydetme yok. */
297
+ viewsAdapter?: ViewsAdapter;
298
+ /** Yoksa tercihler oturumluk (kalıcı değil) ve arayüz bunu "kaydedildi" gibi sunmaz. */
299
+ preferences?: PreferencesAdapter;
300
+ }
301
+
302
+ export declare type DatePreset = 'today' | 'this_week' | 'next_7_days' | 'this_month' | 'last_30_days' | 'this_quarter' | 'overdue';
303
+
304
+ export declare type Density = 'comfortable' | 'standard' | 'compact';
305
+
306
+ /**
307
+ * Başlık satırı: ilk 20 satır içinde, boş olmayan hücre sayısı en yüksek ve hücrelerinin çoğu metin olan ilk satır;
308
+ * eşitlikte ilk boş olmayan satır. Hiç aday yoksa 0.
309
+ */
310
+ export declare function detectHeaderRow(rows: unknown[][]): number;
311
+
312
+ export declare interface ExpandOptions<Row = any> {
313
+ /** Bu satırın detayı var mı? Yoksa chevron yerinde boşluk kalır. */
314
+ canExpand?: (row: Row) => boolean;
315
+ }
316
+
317
+ /** Operatöre göre ayrışan koşul. `currency` sütununda değer düz sayıdır; para birimi `currency` alanıyla gelir. */
318
+ export declare type FilterCondition = {
319
+ column: string;
320
+ op: 'is_empty' | 'is_not_empty';
321
+ } | {
322
+ column: string;
323
+ op: 'eq' | 'neq';
324
+ value: string | number | boolean;
325
+ } | {
326
+ column: string;
327
+ op: 'contains' | 'not_contains' | 'starts_with' | 'ends_with';
328
+ value: string;
329
+ } | {
330
+ column: string;
331
+ op: 'gt' | 'gte' | 'lt' | 'lte';
332
+ value: number;
333
+ currency?: string;
334
+ }
335
+ /** Uçlar dahil; tek taraflıysa biri null. */
336
+ | {
337
+ column: string;
338
+ op: 'between';
339
+ value: [number | null, number | null];
340
+ currency?: string;
341
+ } | {
342
+ column: string;
343
+ op: 'in' | 'not_in';
344
+ value: Array<string | number>;
345
+ } | {
346
+ column: string;
347
+ op: 'before' | 'after';
348
+ value: IsoDate | {
349
+ preset: 'today';
350
+ };
351
+ } | {
352
+ column: string;
353
+ op: 'within';
354
+ value: {
355
+ preset: DatePreset;
356
+ } | {
357
+ from: IsoDate;
358
+ to: IsoDate;
359
+ };
360
+ };
361
+
362
+ /** 18 operatör (04). Çok değerli hücrelerde (multiselect) `in` "şunlardan birini içerir" anlamındadır. */
363
+ export declare type FilterOp = 'is_empty' | 'is_not_empty' | 'eq' | 'neq' | 'contains' | 'not_contains' | 'starts_with' | 'ends_with' | 'gt' | 'gte' | 'lt' | 'lte' | 'between' | 'in' | 'not_in' | 'before' | 'after' | 'within';
364
+
365
+ /** ISO tarih ("2026-10-24") veya tarih-saat ("2026-10-24T09:42:00Z"). */
366
+ export declare type IsoDate = string;
367
+
368
+ /**
369
+ * Otomatik eşleme: başlık normalize edilerek sütunun `header`, `id` ya da `importAliases` değerlerinden biriyle aynıysa
370
+ * ve yalnızca tek bir sütuna uyuyorsa. Eşleşmeyen ya da birden fazla sütuna uyan başlık haritada yoktur.
371
+ */
372
+ export declare function matchColumns(headers: string[], columns: Array<Pick<ColumnDef<any>, 'id' | 'header' | 'importAliases'>>): Record<number, string>;
373
+
374
+ /** `user` filtrelerinde oturumdaki kullanıcı. Sunucuda çözülür. */
375
+ export declare const ME: "@me";
376
+
377
+ export declare type Messages = Record<string, MessageValue>;
378
+
379
+ /** Parametreli metinler fonksiyon olabilir. */
380
+ export declare type MessageValue = string | ((params: Record<string, string | number>) => string);
381
+
382
+ export declare const normalizeHeader: (s: string) => string;
383
+
384
+ export declare interface OptionDef {
385
+ value: string | number;
386
+ label: string;
387
+ /** Hazır ton veya tema başına açık renk. Verilmezse 'gray'. */
388
+ tone?: Tone | {
389
+ light: string;
390
+ dark: string;
391
+ };
392
+ description?: string;
393
+ }
394
+
395
+ /**
396
+ * Satıra göre kapalı seçenek (DataSheet). `options` tam liste kalır (etiket, filtre, dışa aktarma); kapalı seçenekler
397
+ * editör listesinde görünmez, yapıştırma/doldurma ile gelirse "isn't an option" hatası — yalnızca **değişen** hücrede
398
+ * (mevcut değer kural değişince hata olmaz). Satırın taslak halini alır.
399
+ */
400
+ export declare type OptionEnabled<Row> = (option: OptionDef, row: Row) => boolean;
401
+
402
+ /** `parseFile` sonucu: biçimden bağımsız ham satırlar; başlık tespiti ve eşleme paketindir (07 §13). */
403
+ export declare interface ParsedWorkbook {
404
+ sheets: Array<{
405
+ name: string;
406
+ rows: unknown[][];
407
+ }>;
408
+ }
409
+
410
+ /** Nokta yolu: 'customer.title'. Gerçek koşullu tip Faz 2'de (api-draft: src/types/path.ts). */
411
+ export declare type Path<Row> = string & {
412
+ __row?: Row;
413
+ };
414
+
415
+ /** Çoğul biçimli metin: { one: 'status', other: 'statuses' } */
416
+ export declare interface Plural {
417
+ one: string;
418
+ other: string;
419
+ }
420
+
421
+ export declare interface Preferences {
422
+ density: Density;
423
+ verticalLines: boolean;
424
+ pageSize: number;
425
+ /** Kullanıcının "Set as default" seçtiği görünüm (system veya personal). */
426
+ defaultViewId: string | null;
427
+ }
428
+
429
+ export declare interface PreferencesAdapter {
430
+ get: (tableId: TableId) => Partial<Preferences> | Promise<Partial<Preferences>>;
431
+ set: (tableId: TableId, prefs: Partial<Preferences>) => void | Promise<void>;
432
+ }
433
+
434
+ /** İlerleme: boolean ya da sayaç ("Loading products… 6,200 of 10,000"). */
435
+ export declare type Progress = boolean | {
436
+ done: number;
437
+ total: number;
438
+ };
439
+
440
+ export declare type QueryWithoutPage = Omit<TableQuery, 'page'>;
441
+
442
+ /** `ajax` ve `user` sütunlarının seçenek kaynağı (sütunun kendi verisi; metin filtresi önerisi değildir). */
443
+ export declare interface RemoteOptions<O extends OptionDef = OptionDef> {
444
+ /** Yazdıkça arama. Varsayılan sayfa boyutu 20. */
445
+ search: (q: string, page: number, ctx: {
446
+ signal: AbortSignal;
447
+ }) => Promise<{
448
+ items: O[];
449
+ hasMore: boolean;
450
+ }>;
451
+ /** Kayıtlı filtre değerlerinin, yapıştırılan değerlerin ve hücre değerlerinin etiketlerini çözer. */
452
+ resolve: (values: Array<string | number>, ctx: {
453
+ signal: AbortSignal;
454
+ }) => Promise<O[]>;
455
+ pageSize?: number;
456
+ }
457
+
458
+ export declare type RequestReason = 'initial' | 'query' | 'page' | 'columns' | 'refresh';
459
+
460
+ export declare interface RowAction<Row = any> {
461
+ id: string;
462
+ label: string;
463
+ /** Menüde etiketin altında ikinci satır (gerekçe varsa o gösterilir); inline düğmede tooltip "Label — description" (D36). */
464
+ description?: string;
465
+ icon?: Component;
466
+ /** Gösterim için ("⌘↵"); paket kısayol bağlamaz, yalnızca Open yerleşiktir. */
467
+ shortcut?: string;
468
+ /** Yetkiye bağlı: false → ne menüde ne inline (D34). Duruma bağlı pasiflik için `disabled`. */
469
+ when?: (row: Row) => boolean;
470
+ /** ⋯'nın solunda 28 px ikon düğmesi olarak çizilir (`icon` zorunlu); çizildiği satırın menüsünde yer almaz. Satır başına ilk 2 (D36). */
471
+ inline?: boolean;
472
+ /** true veya gerekçe metni ("Already running") → pasif, gerekçe ikinci satırda. */
473
+ disabled?: (row: Row) => boolean | string;
474
+ destructive?: boolean;
475
+ /** Menüde üstündeki ayırıcı. */
476
+ separatorBefore?: boolean;
477
+ /** Onay, toast ve refresh uygulamanın işidir; paket sonucu beklemez (D20). */
478
+ run: (row: Row) => void | Promise<void>;
479
+ }
480
+
481
+ /** Satır gövdesine tıklama. Varsayılan 'none': metin seçilip kopyalanabilir, seçim ve açma yapmaz (D6). */
482
+ export declare type RowClickMode = 'none' | 'open' | 'expand';
483
+
484
+ export declare type RowKey = string | number;
485
+
486
+ /** `@save` yükündeki bir satır. */
487
+ export declare interface SheetChangeRow {
488
+ /** Paketin satıra verdiği geçici kimlik; `applyResult` bununla eşleşir. */
489
+ clientId: string;
490
+ /** Anahtar sütunun değeri (ör. SKU). */
491
+ key: string;
492
+ /**
493
+ * Değişen alanlar + `required` sütunlar + anahtar (sütun id'leriyle). Eklenen satırda boş değer gitmez. Sunucu anahtara
494
+ * göre upsert eder (D11, D47); paket kaydın sunucuda olup olmadığını bilmez.
495
+ */
496
+ values: Record<string, unknown>;
497
+ }
498
+
499
+ export declare interface SheetChanges {
500
+ /** Yalnızca yeni + değişmiş satırlar; hatalı satırlar ve listeden çıkarılanlar yoktur (D11, D12). */
501
+ rows: SheetChangeRow[];
502
+ }
503
+
504
+ export declare type SheetFilterMode = 'all' | 'changed' | 'errors';
505
+
506
+ export declare interface SheetRowResult<Row> {
507
+ clientId: string;
508
+ status: 'created' | 'updated' | 'error';
509
+ /** Sütun id → mesaj. Hücrede kırmızı gösterilir. */
510
+ fieldErrors?: Record<string, string>;
511
+ /** Belirli bir alana bağlanamayan hata: satır başında gösterilir. */
512
+ rowError?: string;
513
+ /** Sunucunun kaydettiği hali; verilirse satır bununla güncellenir. */
514
+ row?: Row;
515
+ }
516
+
517
+ export declare interface SheetStatus {
518
+ phase: 'loading' | 'ready' | 'saving' | 'saved' | 'partly-saved';
519
+ changedCells: number;
520
+ changedRows: number;
521
+ newRows: number;
522
+ errorRows: number;
523
+ warningRows: number;
524
+ }
525
+
526
+ export declare interface SortRule {
527
+ column: string;
528
+ dir: 'asc' | 'desc';
529
+ }
530
+
531
+ /** `true` genel hata; string mesaj; nesne: mesaj + hata kimliği ("Copy error ID"). */
532
+ export declare type TableError = boolean | string | {
533
+ message?: string;
534
+ id?: string;
535
+ };
536
+
537
+ /** Tablo örneğinin kalıcı kimliği: görünümler ve tercihler bununla saklanır (ör. "production-orders"). */
538
+ export declare type TableId = string;
539
+
540
+ export declare interface TableQuery {
541
+ search: string;
542
+ filters: FilterCondition[];
543
+ /** Öncelik sırasıyla, en fazla 3. */
544
+ sort: SortRule[];
545
+ /** Sayfa numarası 1'den başlar (Laravel simplePaginate ile aynı). */
546
+ page: {
547
+ number: number;
548
+ size: number;
549
+ };
550
+ /** Görünür sütun id'leri. */
551
+ columns: string[];
552
+ /** Sunucudan istenen alan yolları: görünür sütunların yolları + sütunların `fields`'i + tablonun `fields` prop'u. */
553
+ fields: string[];
554
+ }
555
+
556
+ /**
557
+ * `@request` olayının yükü. Paket veri çekmez: uygulama bu sorguyla kendi HTTP'sini atar ve
558
+ * `rows`, `hasMore`, `loading`, `error` prop'larını günceller. Her yeni talepte öncekinin `signal`'i abort edilir.
559
+ */
560
+ export declare interface TableRequest {
561
+ query: TableQuery;
562
+ reason: RequestReason;
563
+ signal: AbortSignal;
564
+ }
565
+
566
+ export declare type Tone = 'gray' | 'blue' | 'green' | 'amber' | 'red' | 'violet' | 'pink' | 'teal';
567
+
568
+ export declare interface UserOption extends OptionDef {
569
+ avatarUrl?: string;
570
+ /** Avatar yoksa gösterilecek baş harfler; verilmezse label'dan üretilir. */
571
+ initials?: string;
572
+ }
573
+
574
+ export declare interface ValidationContext<Row> {
575
+ row: Row;
576
+ isNew: boolean;
577
+ original: unknown;
578
+ }
579
+
580
+ /** null/undefined/'' → geçerli; string → hata veya uyarı metni (i18n'lenmiş). */
581
+ export declare type Validator<Row> = (value: unknown, ctx: ValidationContext<Row>) => string | null | undefined;
582
+
583
+ /** Tek görünüm tipi (D4, D30). system: kodla tanımlı, değiştirilemez (Duplicate, Set as default). personal: yalnızca sahibine. */
584
+ export declare interface View {
585
+ id: string;
586
+ name: string;
587
+ kind: 'system' | 'personal';
588
+ state: ViewPatch;
589
+ /** Ekranın varsayılanı (system içinde en fazla bir tane). Kullanıcı varsayılanı tercihlerde (`defaultViewId`). */
590
+ default?: boolean;
591
+ updatedAt?: IsoDate;
592
+ /** Sunucu sürüm numarası (çakışma tespiti için, opsiyonel). */
593
+ v?: number;
594
+ }
595
+
596
+ /** Kısmi görünüm (system view tanımı ve adapter'dan gelen kayıtlar). Eksik alanlar tablonun varsayılanlarıyla tamamlanır. */
597
+ export declare interface ViewPatch {
598
+ filters?: FilterCondition[];
599
+ sort?: SortRule[];
600
+ columns?: Partial<ColumnLayout>;
601
+ }
602
+
603
+ export declare interface ViewsAdapter {
604
+ list: (tableId: TableId) => Promise<View[]>;
605
+ create: (tableId: TableId, input: {
606
+ name: string;
607
+ state: ViewState;
608
+ }) => Promise<View>;
609
+ update: (tableId: TableId, id: string, patch: {
610
+ name?: string;
611
+ state?: ViewState;
612
+ }) => Promise<View>;
613
+ remove: (tableId: TableId, id: string) => Promise<void>;
614
+ }
615
+
616
+ /** D5: görünüm = filtre + sıralama + sütun düzeni. Arama, yoğunluk, tema, sayfa yazılmaz. Kaydedilen tam snapshot. */
617
+ export declare interface ViewState {
618
+ filters: FilterCondition[];
619
+ sort: SortRule[];
620
+ columns: ColumnLayout;
621
+ }
622
+
623
+ export { }