@coffer-org/sdk 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/color-names.d.ts +7 -0
  2. package/dist/color-names.d.ts.map +1 -0
  3. package/dist/color-names.js +463 -0
  4. package/dist/color-names.js.map +1 -0
  5. package/dist/condition.d.ts +38 -0
  6. package/dist/condition.d.ts.map +1 -0
  7. package/dist/condition.js +109 -0
  8. package/dist/condition.js.map +1 -0
  9. package/dist/countries.d.ts +8 -0
  10. package/dist/countries.d.ts.map +1 -0
  11. package/dist/countries.js +197 -0
  12. package/dist/countries.js.map +1 -0
  13. package/dist/currencies.d.ts +14 -0
  14. package/dist/currencies.d.ts.map +1 -0
  15. package/dist/currencies.js +39 -0
  16. package/dist/currencies.js.map +1 -0
  17. package/dist/extend.d.ts +46 -0
  18. package/dist/extend.d.ts.map +1 -0
  19. package/dist/extend.js +35 -0
  20. package/dist/extend.js.map +1 -0
  21. package/dist/field-helpers.d.ts +9 -0
  22. package/dist/field-helpers.d.ts.map +1 -0
  23. package/dist/field-helpers.js +30 -0
  24. package/dist/field-helpers.js.map +1 -0
  25. package/dist/field-presets.d.ts +278 -0
  26. package/dist/field-presets.d.ts.map +1 -0
  27. package/dist/field-presets.js +303 -0
  28. package/dist/field-presets.js.map +1 -0
  29. package/dist/fields.d.ts +817 -0
  30. package/dist/fields.d.ts.map +1 -0
  31. package/dist/fields.js +911 -0
  32. package/dist/fields.js.map +1 -0
  33. package/dist/index.d.ts +16 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +16 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/module.d.ts +164 -0
  38. package/dist/module.d.ts.map +1 -0
  39. package/dist/module.js +244 -0
  40. package/dist/module.js.map +1 -0
  41. package/dist/package.d.ts +30 -0
  42. package/dist/package.d.ts.map +1 -0
  43. package/dist/package.js +31 -0
  44. package/dist/package.js.map +1 -0
  45. package/dist/plugin.d.ts +77 -0
  46. package/dist/plugin.d.ts.map +1 -0
  47. package/dist/plugin.js +57 -0
  48. package/dist/plugin.js.map +1 -0
  49. package/dist/settings.d.ts +9 -0
  50. package/dist/settings.d.ts.map +1 -0
  51. package/dist/settings.js +4 -0
  52. package/dist/settings.js.map +1 -0
  53. package/dist/units.d.ts +24 -0
  54. package/dist/units.d.ts.map +1 -0
  55. package/dist/units.js +125 -0
  56. package/dist/units.js.map +1 -0
  57. package/dist/vault.d.ts +18 -0
  58. package/dist/vault.d.ts.map +1 -0
  59. package/dist/vault.js +4 -0
  60. package/dist/vault.js.map +1 -0
  61. package/package.json +27 -0
@@ -0,0 +1,817 @@
1
+ /**
2
+ * Система типів полів — серце платформи. Чистий, ізоморфний модуль.
3
+ * Один опис поля → три споживачі:
4
+ * 1. `zod` — валідація (однакова на сервері й клієнті)
5
+ * 2. `column` — тип колонки в БД
6
+ * 3. `prim`/`kind` — ключі для резолву рендера (див. web/render/registry)
7
+ */
8
+ import { z } from 'zod';
9
+ /**
10
+ * Базові примітиви-рендери (storage-родина). Кожна фабрика ставить один `prim` —
11
+ * гарантований fallback-рендер. Семантичні обгортки задають свій `kind` (рядок),
12
+ * який має пріоритет; якщо для `kind` рендера немає — тихий відкат на `prim`.
13
+ *
14
+ * `(string & {})` лишає автодоповнення CorePrim-літералів, але дозволяє плагінам
15
+ * оголошувати власні prim (напр. 'service-links') — типи полів виносяться у плагіни.
16
+ */
17
+ export type CorePrim = 'text' | 'number' | 'date' | 'time' | 'datetime' | 'checkbox' | 'select' | 'json' | 'checklist' | 'measured' | 'relation' | 'file' | 'per-weekday' | 'key-value' | 'lookup';
18
+ export type Prim = CorePrim | (string & {});
19
+ export type ColumnType = 'text' | 'integer' | 'real' | 'boolean' | 'date' | 'time' | 'datetime';
20
+ /**
21
+ * Іконка опції — візуальний лідер у списку. Дискримінований за kind:
22
+ * swatch — кольоровий кружок ('#rrggbb')
23
+ * icon — <Icon> ('flag:ua' | lucide-ім'я | emoji)
24
+ * image — аватар-картинка (url)
25
+ */
26
+ export type OptionIcon = {
27
+ kind: 'swatch';
28
+ value: string;
29
+ } | {
30
+ kind: 'icon';
31
+ value: string;
32
+ } | {
33
+ kind: 'image';
34
+ value: string;
35
+ };
36
+ /**
37
+ * Опція вибору. `value` — storage-ключ (обов'язковий). Трійка відображення:
38
+ * icon — візуальний лідер (опц.)
39
+ * title — основна мітка (i18n-ключ або текст)
40
+ * subtitle — технічне значення праворуч (опц.; ISO-код, hex, …)
41
+ */
42
+ export interface OptionItem {
43
+ value: string;
44
+ title: string;
45
+ icon?: OptionIcon;
46
+ subtitle?: string;
47
+ }
48
+ /**
49
+ * Phantom-бренд: лише фабрики `field.*({ key })` повертають FieldItem.
50
+ * Не існує в runtime — суто типовий маркер, щоб TS відхиляв ручні `{ key, type }`
51
+ * літерали у `fields`. Будуй елементи через `field.*({ key, … })`.
52
+ */
53
+ declare const __fieldItemBrand: unique symbol;
54
+ /** Поле: key = ім'я колонки БД, type = FieldMeta. Будується через field.*({key:'x',...}). */
55
+ export interface FieldItem {
56
+ key: string;
57
+ type: FieldMeta;
58
+ readonly [__fieldItemBrand]: typeof __fieldItemBrand;
59
+ }
60
+ /** Статичне поле: тільки display-режим. value — вже розпарсений об'єкт. */
61
+ export interface StaticEl {
62
+ el: 'static';
63
+ type: FieldMeta;
64
+ value: unknown;
65
+ }
66
+ /** Псевдо-елементи: не зберігаються, не валідуються. */
67
+ export interface DividerEl {
68
+ el: 'divider';
69
+ }
70
+ export interface InfoEl {
71
+ el: 'info';
72
+ text: string;
73
+ }
74
+ export interface ButtonEl {
75
+ el: 'button';
76
+ label: string;
77
+ value: string;
78
+ icon?: string;
79
+ variant?: 'default' | 'outline' | 'destructive';
80
+ }
81
+ export interface GroupEl {
82
+ el: 'group';
83
+ /** Storage-режим: ім'я колонки (embedded) / child-таблиці (collection). Без key → layout. */
84
+ key?: string;
85
+ /** collection (масив рядків → child-таблиця). Лише зі storage key. */
86
+ multiple?: boolean;
87
+ /** Storage: чи обов'язковий (collection → ≥1 рядок; embedded → непорожній). */
88
+ required?: boolean;
89
+ /** collection: sub-ключі з UNIQUE(parent_id, …) на child-таблиці. */
90
+ unique?: string[];
91
+ label?: string;
92
+ icon?: string;
93
+ fields: (FieldItem | StaticEl | PseudoEl)[];
94
+ }
95
+ export type PseudoEl = DividerEl | InfoEl | ButtonEl;
96
+ export type LayoutEl = FieldItem | StaticEl | GroupEl | PseudoEl;
97
+ export declare const isField: (x: LayoutEl) => x is FieldItem;
98
+ export declare const isStatic: (x: LayoutEl) => x is StaticEl;
99
+ export declare const isGroup: (x: LayoutEl) => x is GroupEl;
100
+ export declare const isDivider: (x: LayoutEl) => x is DividerEl;
101
+ export declare const isInfo: (x: LayoutEl) => x is InfoEl;
102
+ export declare const isButton: (x: LayoutEl) => x is ButtonEl;
103
+ /** Серіалізовна частина поля (безпечно віддавати клієнту). */
104
+ export interface FieldClient {
105
+ /** Семантичний рендер-ключ (пріоритет). За замовчуванням === prim. */
106
+ kind: string;
107
+ label: string;
108
+ required: boolean;
109
+ /** Базовий примітив-рендер (storage-родина) — гарантований fallback. */
110
+ prim: Prim;
111
+ hints: Record<string, unknown>;
112
+ options?: OptionItem[];
113
+ relation?: {
114
+ vault: string;
115
+ type: string;
116
+ };
117
+ /** Якщо true — поле не зберігається в БД і не включається у zod-схему. */
118
+ virtual?: boolean;
119
+ /** Опційна підказка ширини в 12-кол гріді (1–12). Рендер — фінальна інстанція, може ігнорувати. */
120
+ span?: number;
121
+ }
122
+ /**
123
+ * Візуальна або storage-група полів (один рівень вкладеності — груп усередині груп нема).
124
+ * Без `key` → layout-група (не зберігається). З `key` → storage:
125
+ * - embedded (key, без multiple): зберігається як колонка або вкладений об'єкт.
126
+ * - collection (key + multiple): child-таблиця (масив рядків).
127
+ * Storage-група вимагає `label` і лише `FieldItem`-нащадків (зі storage key).
128
+ */
129
+ export declare function group(o: {
130
+ key?: string;
131
+ multiple?: boolean;
132
+ required?: boolean;
133
+ unique?: string[];
134
+ label?: string;
135
+ icon?: string;
136
+ fields: (FieldItem | StaticEl | PseudoEl)[];
137
+ }): GroupEl;
138
+ export declare const isStorageGroup: (g: GroupEl) => boolean;
139
+ export declare const isCollectionGroup: (g: GroupEl) => boolean;
140
+ export declare const isEmbeddedGroup: (g: GroupEl) => boolean;
141
+ /** Горизонтальний розділювач. */
142
+ export declare function divider(): DividerEl;
143
+ /** Довідковий markdown-блок за i18n-ключем. */
144
+ export declare function info(textKey: string): InfoEl;
145
+ /** Кнопка-дія: викликає обробник, зареєстрований у actionRegistry під ключем `value`. */
146
+ export declare function button(o: {
147
+ label: string;
148
+ value: string;
149
+ icon?: string;
150
+ variant?: ButtonEl['variant'];
151
+ }): ButtonEl;
152
+ /** Валідація/поведінка поля (не перемикає віджет). */
153
+ export interface FieldConfig {
154
+ min?: number;
155
+ max?: number;
156
+ step?: number;
157
+ pattern?: string;
158
+ messageKey?: string;
159
+ granularity?: 'minute' | 'hour' | 'day' | 'month' | 'year' | 'second';
160
+ language?: string;
161
+ }
162
+ /** Джерело варіантів/одиниць: іменоване (string) або inline (array). */
163
+ export type FieldOptions = string | unknown[];
164
+ /** Спільні opts для всіх фабрик. key → FieldItem, value → StaticEl, обидва відсутні → FieldMeta. */
165
+ export interface FieldCoreOpts {
166
+ /** Ім'я колонки БД. Якщо вказано — фабрика повертає FieldItem. */
167
+ key?: string;
168
+ /** Статичне значення (вже розпарсений об'єкт). Якщо вказано — повертає StaticEl. */
169
+ value?: unknown;
170
+ /** Валідація/поведінка поля (не перемикає віджет). */
171
+ config?: FieldConfig;
172
+ /** Підказка ширини поля в 12-кол гріді (1–12). Рендер може відкинути. */
173
+ span?: number;
174
+ /** Прибрати per-field кнопки edit/save/cancel; редагування — лише через editAll/group. */
175
+ noEditControl?: boolean;
176
+ }
177
+ /** Обгортає FieldMeta у FieldItem/StaticEl залежно від opts.key/opts.value. */
178
+ export declare function wrapKey(opts: {
179
+ key?: string;
180
+ value?: unknown;
181
+ span?: number;
182
+ noEditControl?: boolean;
183
+ }, meta: FieldMeta): FieldItem | StaticEl | FieldMeta;
184
+ export interface FieldMeta extends FieldClient {
185
+ column: ColumnType;
186
+ zod: z.ZodTypeAny;
187
+ }
188
+ /** Усі мови ISO 639-1 (native-назви як label). Джерело — пакет `iso-639-1`. */
189
+ export declare const LANGUAGES: {
190
+ code: string;
191
+ name: string;
192
+ }[];
193
+ /** Стать — спільний optionList 'sex' (реєструє plugin-core). i18n: core.sex.*. */
194
+ export declare const SEX_OPTIONS: [{
195
+ readonly value: "M";
196
+ readonly title: "core.sex.M";
197
+ }, {
198
+ readonly value: "F";
199
+ readonly title: "core.sex.F";
200
+ }, {
201
+ readonly value: "other";
202
+ readonly title: "core.sex.other";
203
+ }];
204
+ /** Структуроване повідомлення для zod: JSON {code, params}. Декодує mutate.ts. */
205
+ export declare function vmsg(code: string, params?: Record<string, unknown>): string;
206
+ /** Контекст zod v4 error-map (звужений до потрібних полів). */
207
+ type ZErrCtx = {
208
+ input?: unknown;
209
+ code?: string;
210
+ };
211
+ /** v4 error-map: повідомлення для відсутнього значення (колишній required_error). */
212
+ export declare function reqErr(code?: string): {
213
+ error: (iss: ZErrCtx) => string | undefined;
214
+ };
215
+ /** v4 error-map: повідомлення для невалідного типу (колишній invalid_type_error). */
216
+ export declare function typeErr(code?: string): {
217
+ error: (iss: ZErrCtx) => string | undefined;
218
+ };
219
+ /** v4 error-map: required + invalid_type разом (колишні required_error + invalid_type_error). */
220
+ export declare function reqTypeErr(): {
221
+ error: (iss: ZErrCtx) => string | undefined;
222
+ };
223
+ /**
224
+ * Спільна фабрика для полів, що зберігають JSON-рядок і валідуються вкладеною
225
+ * zod-схемою: parse → inner.safeParse → при невдачі issue з кодом `code`,
226
+ * при невалідному JSON — код 'json'. Уникає дублювання try/parse/superRefine.
227
+ */
228
+ export declare function jsonRefined(inner: z.ZodTypeAny, code: string): z.ZodTypeAny;
229
+ export declare function optionalize(schema: z.ZodTypeAny, required: boolean): z.ZodTypeAny;
230
+ export declare function applyMultiple(base: FieldMeta, multiple: boolean): FieldMeta;
231
+ export interface StringOpts extends FieldCoreOpts {
232
+ label?: string;
233
+ required?: boolean;
234
+ multiple?: boolean;
235
+ }
236
+ /** Однорядковий текст. Довільний pattern/messageKey — через `config`. Багаторядковий — `text()`. */
237
+ export declare function string(o: StringOpts & {
238
+ key: string;
239
+ }): FieldItem;
240
+ export declare function string(o: StringOpts & {
241
+ value: unknown;
242
+ key?: undefined;
243
+ }): StaticEl;
244
+ export declare function string(o: StringOpts & {
245
+ key?: undefined;
246
+ value?: undefined;
247
+ }): FieldMeta;
248
+ /** Багаторядковий текст (kind 'textarea'). Однорядковий — `string()`. Без `multiple`. */
249
+ export interface TextOpts extends FieldCoreOpts {
250
+ label?: string;
251
+ required?: boolean;
252
+ /** @deprecated use config.min */
253
+ min?: number;
254
+ /** @deprecated use config.max */
255
+ max?: number;
256
+ }
257
+ export declare function text(o: TextOpts & {
258
+ key: string;
259
+ }): FieldItem;
260
+ export declare function text(o: TextOpts & {
261
+ value: unknown;
262
+ key?: undefined;
263
+ }): StaticEl;
264
+ export declare function text(o: TextOpts & {
265
+ key?: undefined;
266
+ value?: undefined;
267
+ }): FieldMeta;
268
+ export interface RealOpts extends FieldCoreOpts {
269
+ label?: string;
270
+ required?: boolean;
271
+ multiple?: boolean;
272
+ }
273
+ /** Дійсне число (column 'real'). min/max/step — через `config`. */
274
+ export declare function real(o: RealOpts & {
275
+ key: string;
276
+ }): FieldItem;
277
+ export declare function real(o: RealOpts & {
278
+ value: unknown;
279
+ key?: undefined;
280
+ }): StaticEl;
281
+ export declare function real(o: RealOpts & {
282
+ key?: undefined;
283
+ value?: undefined;
284
+ }): FieldMeta;
285
+ export interface IntOpts extends FieldCoreOpts {
286
+ label?: string;
287
+ required?: boolean;
288
+ multiple?: boolean;
289
+ }
290
+ /** Ціле число (column 'integer'). min/max/step — через `config`. */
291
+ export declare function int(o: IntOpts & {
292
+ key: string;
293
+ }): FieldItem;
294
+ export declare function int(o: IntOpts & {
295
+ value: unknown;
296
+ key?: undefined;
297
+ }): StaticEl;
298
+ export declare function int(o: IntOpts & {
299
+ key?: undefined;
300
+ value?: undefined;
301
+ }): FieldMeta;
302
+ export interface DateOpts extends FieldCoreOpts {
303
+ label?: string;
304
+ required?: boolean;
305
+ min?: string;
306
+ max?: string;
307
+ multiple?: boolean;
308
+ }
309
+ export declare function date(o: DateOpts & {
310
+ key: string;
311
+ }): FieldItem;
312
+ export declare function date(o: DateOpts & {
313
+ value: unknown;
314
+ key?: undefined;
315
+ }): StaticEl;
316
+ export declare function date(o: DateOpts & {
317
+ key?: undefined;
318
+ value?: undefined;
319
+ }): FieldMeta;
320
+ export interface TimeOpts extends FieldCoreOpts {
321
+ label?: string;
322
+ required?: boolean;
323
+ multiple?: boolean;
324
+ }
325
+ export declare function time(o: TimeOpts & {
326
+ key: string;
327
+ }): FieldItem;
328
+ export declare function time(o: TimeOpts & {
329
+ value: unknown;
330
+ key?: undefined;
331
+ }): StaticEl;
332
+ export declare function time(o: TimeOpts & {
333
+ key?: undefined;
334
+ value?: undefined;
335
+ }): FieldMeta;
336
+ export interface DateTimeOpts extends FieldCoreOpts {
337
+ label?: string;
338
+ required?: boolean;
339
+ multiple?: boolean;
340
+ }
341
+ export declare function datetime(o: DateTimeOpts & {
342
+ key: string;
343
+ }): FieldItem;
344
+ export declare function datetime(o: DateTimeOpts & {
345
+ value: unknown;
346
+ key?: undefined;
347
+ }): StaticEl;
348
+ export declare function datetime(o: DateTimeOpts & {
349
+ key?: undefined;
350
+ value?: undefined;
351
+ }): FieldMeta;
352
+ export interface BooleanOpts extends FieldCoreOpts {
353
+ label?: string;
354
+ }
355
+ export declare function boolean(o: BooleanOpts & {
356
+ key: string;
357
+ }): FieldItem;
358
+ export declare function boolean(o: BooleanOpts & {
359
+ value: unknown;
360
+ key?: undefined;
361
+ }): StaticEl;
362
+ export declare function boolean(o: BooleanOpts & {
363
+ key?: undefined;
364
+ value?: undefined;
365
+ }): FieldMeta;
366
+ export interface TriStateOpts extends FieldCoreOpts {
367
+ label?: string;
368
+ required?: boolean;
369
+ }
370
+ export declare function triState(o: TriStateOpts & {
371
+ key: string;
372
+ }): FieldItem;
373
+ export declare function triState(o: TriStateOpts & {
374
+ value: unknown;
375
+ key?: undefined;
376
+ }): StaticEl;
377
+ export declare function triState(o: TriStateOpts & {
378
+ key?: undefined;
379
+ value?: undefined;
380
+ }): FieldMeta;
381
+ export interface SelectOpts extends FieldCoreOpts {
382
+ label?: string;
383
+ required?: boolean;
384
+ /**
385
+ * Джерело варіантів: рядок (іменований список з PluginManifest.optionLists)
386
+ * або inline-масив OptionItem (для невеликих статичних списків).
387
+ * Рядок → hints.source (UI отримує з реєстру); масив → inline enum.
388
+ * Для прив'язки до записів модуля використовуй `relation({ vault, module })`.
389
+ */
390
+ options?: FieldOptions;
391
+ multiple?: boolean;
392
+ }
393
+ export declare function select(o: SelectOpts & {
394
+ key: string;
395
+ }): FieldItem;
396
+ export declare function select(o: SelectOpts & {
397
+ value: unknown;
398
+ key?: undefined;
399
+ }): StaticEl;
400
+ export declare function select(o: SelectOpts & {
401
+ key?: undefined;
402
+ value?: undefined;
403
+ }): FieldMeta;
404
+ export interface RelationOpts extends FieldCoreOpts {
405
+ label?: string;
406
+ required?: boolean;
407
+ /** Цільовий модуль записів. */
408
+ vault: string;
409
+ module: string;
410
+ /** `true` → кілька id (JSON-масив); інакше один uuid. */
411
+ multiple?: boolean;
412
+ /** Поле-мітка цілі (fallback, коли немає views.inline). За замовч. `name`. */
413
+ displayKey?: string;
414
+ }
415
+ /**
416
+ * Прив'язка до записів іншого модуля (`{vault, module}`). Зберігає uuid (single)
417
+ * або JSON-масив uuid (multiple). Рендериться як RecordInline + пікер записів.
418
+ * Раніше це була record-гілка `select()`; винесено в окремий примітив, щоб select
419
+ * лишився суто enum/source-списком.
420
+ */
421
+ export declare function relation(o: RelationOpts & {
422
+ key: string;
423
+ }): FieldItem;
424
+ export declare function relation(o: RelationOpts & {
425
+ value: unknown;
426
+ key?: undefined;
427
+ }): StaticEl;
428
+ export declare function relation(o: RelationOpts & {
429
+ key?: undefined;
430
+ value?: undefined;
431
+ }): FieldMeta;
432
+ /**
433
+ * Compose-time: підв'язати enum-валідацію source-селекту до значень списку.
434
+ * Factory не знає вмісту optionList (списки збираються лише в composeRegistry),
435
+ * тому zod source-полів спочатку z.string(); реєстр викликає це для кожного
436
+ * такого поля, щоб сервер відхиляв значення поза списком.
437
+ * Відтворює повний ланцюг модифікаторів: enum → multiple.
438
+ */
439
+ export declare function bindSelectSourceZod(field: FieldMeta, values: string[]): void;
440
+ export interface JsonOpts extends FieldCoreOpts {
441
+ label?: string;
442
+ required?: boolean;
443
+ }
444
+ export declare function json(o: JsonOpts & {
445
+ key: string;
446
+ }): FieldItem;
447
+ export declare function json(o: JsonOpts & {
448
+ value: unknown;
449
+ key?: undefined;
450
+ }): StaticEl;
451
+ export declare function json(o: JsonOpts & {
452
+ key?: undefined;
453
+ value?: undefined;
454
+ }): FieldMeta;
455
+ /**
456
+ * Чекліст — масив пунктів `[{ done: boolean, text: string }]`.
457
+ * Для списків справ/покупок/зборів: галочка + текст у кожному рядку.
458
+ * multiple: кілька чеклістів в одному полі (масив JSON-рядків, як applyMultiple).
459
+ */
460
+ export interface ChecklistOpts extends FieldCoreOpts {
461
+ label?: string;
462
+ required?: boolean;
463
+ multiple?: boolean;
464
+ }
465
+ export declare function checklist(o: ChecklistOpts & {
466
+ key: string;
467
+ }): FieldItem;
468
+ export declare function checklist(o: ChecklistOpts & {
469
+ value: unknown;
470
+ key?: undefined;
471
+ }): StaticEl;
472
+ export declare function checklist(o: ChecklistOpts & {
473
+ key?: undefined;
474
+ value?: undefined;
475
+ }): FieldMeta;
476
+ export interface MeasuredOpts extends FieldCoreOpts {
477
+ label?: string;
478
+ required?: boolean;
479
+ /**
480
+ * Набір одиниць: рядок (іменований пресет з UnitsPreset, напр. 'currency') або
481
+ * inline-масив UnitOption. min/max/step/int — через `config`.
482
+ */
483
+ options: FieldOptions;
484
+ multiple?: boolean;
485
+ }
486
+ export declare function measured(o: MeasuredOpts & {
487
+ key: string;
488
+ }): FieldItem;
489
+ export declare function measured(o: MeasuredOpts & {
490
+ value: unknown;
491
+ key?: undefined;
492
+ }): StaticEl;
493
+ export declare function measured(o: MeasuredOpts & {
494
+ key?: undefined;
495
+ value?: undefined;
496
+ }): FieldMeta;
497
+ export interface MoneyOpts extends FieldCoreOpts {
498
+ label?: string;
499
+ required?: boolean;
500
+ multiple?: boolean;
501
+ config?: FieldConfig & {
502
+ defaultCurrency?: string;
503
+ min?: number;
504
+ max?: number;
505
+ };
506
+ }
507
+ export declare function money(o: MoneyOpts & {
508
+ key: string;
509
+ }): FieldItem;
510
+ export declare function money(o: MoneyOpts & {
511
+ value: unknown;
512
+ key?: undefined;
513
+ }): StaticEl;
514
+ export declare function money(o: MoneyOpts & {
515
+ key?: undefined;
516
+ value?: undefined;
517
+ }): FieldMeta;
518
+ export interface CodeFieldOpts extends FieldCoreOpts {
519
+ label?: string;
520
+ required?: boolean;
521
+ config?: FieldConfig & {
522
+ defaultLang?: string;
523
+ };
524
+ }
525
+ export declare function code(o: CodeFieldOpts & {
526
+ key: string;
527
+ }): FieldItem;
528
+ export declare function code(o: CodeFieldOpts & {
529
+ value: unknown;
530
+ key?: undefined;
531
+ }): StaticEl;
532
+ export declare function code(o: CodeFieldOpts & {
533
+ key?: undefined;
534
+ value?: undefined;
535
+ }): FieldMeta;
536
+ export interface GeoOpts extends FieldCoreOpts {
537
+ label?: string;
538
+ required?: boolean;
539
+ }
540
+ export declare function geo(o: GeoOpts & {
541
+ key: string;
542
+ }): FieldItem;
543
+ export declare function geo(o: GeoOpts & {
544
+ value: unknown;
545
+ key?: undefined;
546
+ }): StaticEl;
547
+ export declare function geo(o: GeoOpts & {
548
+ key?: undefined;
549
+ value?: undefined;
550
+ }): FieldMeta;
551
+ export interface PerWeekdayOpts extends FieldCoreOpts {
552
+ label?: string;
553
+ required?: boolean;
554
+ }
555
+ export declare function perWeekday(o: PerWeekdayOpts & {
556
+ key: string;
557
+ }): FieldItem;
558
+ export declare function perWeekday(o: PerWeekdayOpts & {
559
+ value: unknown;
560
+ key?: undefined;
561
+ }): StaticEl;
562
+ export declare function perWeekday(o: PerWeekdayOpts & {
563
+ key?: undefined;
564
+ value?: undefined;
565
+ }): FieldMeta;
566
+ /** Серіалізований сабфілд для клієнта (period/group): key + повний FieldClient. */
567
+ export type RowSubField = FieldClient & {
568
+ key: string;
569
+ };
570
+ /**
571
+ * Віртуальний індикатор у композитних полях (group/period): показує поля related-запису
572
+ * сусіднього relation-сабфілда (`from`) і, опційно, порівнює measured-значення.
573
+ * Не зберігається, не валідується, у формі не редагується.
574
+ */
575
+ export interface LookupOpts extends FieldCoreOpts {
576
+ label?: string;
577
+ /** Ключ сусіднього relation-сабфілда в рядку. */
578
+ from: string;
579
+ /** Поля related-запису для відображення. */
580
+ pick: string[];
581
+ /** Сусідній measured-ключ → бейдж ✓/✗/частково (порівняння з pick[0]). */
582
+ compareWith?: string;
583
+ }
584
+ export declare function lookup(o: LookupOpts & {
585
+ key: string;
586
+ }): FieldItem;
587
+ export declare function lookup(o: LookupOpts & {
588
+ value: unknown;
589
+ key?: undefined;
590
+ }): StaticEl;
591
+ export declare function lookup(o: LookupOpts & {
592
+ key?: undefined;
593
+ value?: undefined;
594
+ }): FieldMeta;
595
+ /**
596
+ * Відновлює FieldMeta з клієнтського FieldClient (для рекурсивного рендеру
597
+ * сабфілдів групових полів через FieldInput/FieldValue). zod тут не потрібен —
598
+ * валідація відбувається на рівні схеми батьківського поля.
599
+ */
600
+ export declare function clientToMeta(fc: FieldClient): FieldMeta;
601
+ /**
602
+ * Період дат {from, until}. multiple → масив періодів.
603
+ * Самодостатній JSON-композит (раніше будувався на field.row, тепер незалежний).
604
+ * Storage: `[{from,until}]`.
605
+ */
606
+ type PeriodOpts = {
607
+ label?: string;
608
+ required?: boolean;
609
+ multiple?: boolean;
610
+ granularity?: 'month' | 'day' | 'datetime';
611
+ } & FieldCoreOpts;
612
+ export declare function period(o: PeriodOpts & {
613
+ key: string;
614
+ }): FieldItem;
615
+ export declare function period(o: PeriodOpts & {
616
+ value: unknown;
617
+ key?: undefined;
618
+ }): StaticEl;
619
+ export declare function period(o: PeriodOpts & {
620
+ key?: undefined;
621
+ value?: undefined;
622
+ }): FieldMeta;
623
+ /** Файл/медіа — спільний інтерфейс для всієї file-родини. */
624
+ export interface FileOpts extends FieldCoreOpts {
625
+ label?: string;
626
+ required?: boolean;
627
+ multiple?: boolean;
628
+ }
629
+ /** @deprecated Use FileOpts */
630
+ export type ImageOpts = FileOpts;
631
+ export declare function file(o: FileOpts & {
632
+ key: string;
633
+ }): FieldItem;
634
+ export declare function file(o: FileOpts & {
635
+ value: unknown;
636
+ key?: undefined;
637
+ }): StaticEl;
638
+ export declare function file(o: FileOpts & {
639
+ key?: undefined;
640
+ value?: undefined;
641
+ }): FieldMeta;
642
+ export declare function document(o: FileOpts & {
643
+ key: string;
644
+ }): FieldItem;
645
+ export declare function document(o: FileOpts & {
646
+ value: unknown;
647
+ key?: undefined;
648
+ }): StaticEl;
649
+ export declare function document(o: FileOpts & {
650
+ key?: undefined;
651
+ value?: undefined;
652
+ }): FieldMeta;
653
+ export declare function audio(o: FileOpts & {
654
+ key: string;
655
+ }): FieldItem;
656
+ export declare function audio(o: FileOpts & {
657
+ value: unknown;
658
+ key?: undefined;
659
+ }): StaticEl;
660
+ export declare function audio(o: FileOpts & {
661
+ key?: undefined;
662
+ value?: undefined;
663
+ }): FieldMeta;
664
+ export declare function video(o: FileOpts & {
665
+ key: string;
666
+ }): FieldItem;
667
+ export declare function video(o: FileOpts & {
668
+ value: unknown;
669
+ key?: undefined;
670
+ }): StaticEl;
671
+ export declare function video(o: FileOpts & {
672
+ key?: undefined;
673
+ value?: undefined;
674
+ }): FieldMeta;
675
+ export declare function image(o: FileOpts & {
676
+ key: string;
677
+ }): FieldItem;
678
+ export declare function image(o: FileOpts & {
679
+ value: unknown;
680
+ key?: undefined;
681
+ }): StaticEl;
682
+ export declare function image(o: FileOpts & {
683
+ key?: undefined;
684
+ value?: undefined;
685
+ }): FieldMeta;
686
+ export declare function media(o: FileOpts & {
687
+ key: string;
688
+ }): FieldItem;
689
+ export declare function media(o: FileOpts & {
690
+ value: unknown;
691
+ key?: undefined;
692
+ }): StaticEl;
693
+ export declare function media(o: FileOpts & {
694
+ key?: undefined;
695
+ value?: undefined;
696
+ }): FieldMeta;
697
+ /**
698
+ * Загальний тип «ключ/значення».
699
+ * Зберігає JSON-масив `[{ key, value }]`.
700
+ * - multiple=false → UI обмежує до однієї пари (масив усе одно).
701
+ * - option → вкладене поле-визначення для типу VALUE (FieldMeta).
702
+ * Default: plain string. Задає віджет/маскування значення.
703
+ * Приклад: field.keyValue({ option: field.password() }) — маскування.
704
+ *
705
+ * Приклад: secrets: field.keyValue({ label: 'Секрети', multiple: true, option: field.password() })
706
+ */
707
+ export interface KeyValueOpts extends FieldCoreOpts {
708
+ label?: string;
709
+ required?: boolean;
710
+ /** Дозволити більше однієї пари (default: true). */
711
+ multiple?: boolean;
712
+ /** Тип value-комірки (будь-який FieldMeta). Default: string. */
713
+ option?: FieldMeta;
714
+ /** Підписи колонок у формі. */
715
+ keyLabel?: string;
716
+ valueLabel?: string;
717
+ }
718
+ export declare function keyValue(o: KeyValueOpts & {
719
+ key: string;
720
+ }): FieldItem;
721
+ export declare function keyValue(o: KeyValueOpts & {
722
+ value: unknown;
723
+ key?: undefined;
724
+ }): StaticEl;
725
+ export declare function keyValue(o: KeyValueOpts & {
726
+ key?: undefined;
727
+ value?: undefined;
728
+ }): FieldMeta;
729
+ export interface RangeOpts extends FieldCoreOpts {
730
+ label?: string;
731
+ required?: boolean;
732
+ config?: FieldConfig & {
733
+ min?: number;
734
+ max?: number;
735
+ step?: number;
736
+ };
737
+ }
738
+ export declare function numberRange(o: RangeOpts & {
739
+ key: string;
740
+ }): FieldItem;
741
+ export declare function numberRange(o: RangeOpts & {
742
+ value: unknown;
743
+ key?: undefined;
744
+ }): StaticEl;
745
+ export declare function numberRange(o: RangeOpts & {
746
+ key?: undefined;
747
+ value?: undefined;
748
+ }): FieldMeta;
749
+ export declare function realRange(o: RangeOpts & {
750
+ key: string;
751
+ }): FieldItem;
752
+ export declare function realRange(o: RangeOpts & {
753
+ value: unknown;
754
+ key?: undefined;
755
+ }): StaticEl;
756
+ export declare function realRange(o: RangeOpts & {
757
+ key?: undefined;
758
+ value?: undefined;
759
+ }): FieldMeta;
760
+ export declare const field: {
761
+ string: typeof string;
762
+ text: typeof text;
763
+ real: typeof real;
764
+ int: typeof int;
765
+ date: typeof date;
766
+ time: typeof time;
767
+ datetime: typeof datetime;
768
+ boolean: typeof boolean;
769
+ triState: typeof triState;
770
+ select: typeof select;
771
+ relation: typeof relation;
772
+ json: typeof json;
773
+ checklist: typeof checklist;
774
+ measured: typeof measured;
775
+ money: typeof money;
776
+ code: typeof code;
777
+ geo: typeof geo;
778
+ lookup: typeof lookup;
779
+ perWeekday: typeof perWeekday;
780
+ period: typeof period;
781
+ file: typeof file;
782
+ document: typeof document;
783
+ audio: typeof audio;
784
+ video: typeof video;
785
+ image: typeof image;
786
+ media: typeof media;
787
+ keyValue: typeof keyValue;
788
+ numberRange: typeof numberRange;
789
+ realRange: typeof realRange;
790
+ group: typeof group;
791
+ divider: typeof divider;
792
+ info: typeof info;
793
+ button: typeof button;
794
+ } & {
795
+ email: typeof import("./field-presets.js").email;
796
+ url: typeof import("./field-presets.js").url;
797
+ tel: typeof import("./field-presets.js").tel;
798
+ slug: typeof import("./field-presets.js").slug;
799
+ color: typeof import("./field-presets.js").color;
800
+ colorname: typeof import("./field-presets.js").colorname;
801
+ title: typeof import("./field-presets.js").title;
802
+ password: typeof import("./field-presets.js").password;
803
+ tags: typeof import("./field-presets.js").tags;
804
+ imei: typeof import("./field-presets.js").imei;
805
+ mac: typeof import("./field-presets.js").mac;
806
+ iban: typeof import("./field-presets.js").iban;
807
+ markdown: typeof import("./field-presets.js").markdown;
808
+ snippet: typeof import("./field-presets.js").snippet;
809
+ rating: typeof import("./field-presets.js").rating;
810
+ duration: typeof import("./field-presets.js").duration;
811
+ percent: typeof import("./field-presets.js").percent;
812
+ year: typeof import("./field-presets.js").year;
813
+ country: typeof import("./field-presets.js").country;
814
+ };
815
+ export declare function toClient(field: FieldMeta): FieldClient;
816
+ export {};
817
+ //# sourceMappingURL=fields.d.ts.map