@shamar/core 0.1.6 → 0.2.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 (71) hide show
  1. package/README.md +35 -5
  2. package/dist/actions.d.ts +9 -2
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/actions.js +21 -8
  5. package/dist/actions.js.map +1 -1
  6. package/dist/content-max-width.d.ts +11 -4
  7. package/dist/content-max-width.d.ts.map +1 -1
  8. package/dist/content-max-width.js +27 -7
  9. package/dist/content-max-width.js.map +1 -1
  10. package/dist/default-per-page.d.ts +16 -0
  11. package/dist/default-per-page.d.ts.map +1 -0
  12. package/dist/default-per-page.js +31 -0
  13. package/dist/default-per-page.js.map +1 -0
  14. package/dist/field-registry.d.ts +55 -0
  15. package/dist/field-registry.d.ts.map +1 -0
  16. package/dist/field-registry.js +393 -0
  17. package/dist/field-registry.js.map +1 -0
  18. package/dist/field-values.d.ts +28 -0
  19. package/dist/field-values.d.ts.map +1 -0
  20. package/dist/field-values.js +193 -0
  21. package/dist/field-values.js.map +1 -0
  22. package/dist/fields.d.ts +112 -0
  23. package/dist/fields.d.ts.map +1 -0
  24. package/dist/fields.js +251 -0
  25. package/dist/fields.js.map +1 -0
  26. package/dist/form.d.ts +57 -9
  27. package/dist/form.d.ts.map +1 -1
  28. package/dist/form.js +122 -2
  29. package/dist/form.js.map +1 -1
  30. package/dist/index.d.ts +8 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +8 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/infolist.d.ts +3 -1
  35. package/dist/infolist.d.ts.map +1 -1
  36. package/dist/infolist.js +44 -0
  37. package/dist/infolist.js.map +1 -1
  38. package/dist/media.d.ts +110 -0
  39. package/dist/media.d.ts.map +1 -0
  40. package/dist/media.js +6 -0
  41. package/dist/media.js.map +1 -0
  42. package/dist/page-content.d.ts +92 -0
  43. package/dist/page-content.d.ts.map +1 -0
  44. package/dist/page-content.js +128 -0
  45. package/dist/page-content.js.map +1 -0
  46. package/dist/page-registry.d.ts +16 -0
  47. package/dist/page-registry.d.ts.map +1 -0
  48. package/dist/page-registry.js +45 -0
  49. package/dist/page-registry.js.map +1 -0
  50. package/dist/page.d.ts +132 -0
  51. package/dist/page.d.ts.map +1 -0
  52. package/dist/page.js +222 -0
  53. package/dist/page.js.map +1 -0
  54. package/dist/panel.d.ts +46 -2
  55. package/dist/panel.d.ts.map +1 -1
  56. package/dist/panel.js +65 -2
  57. package/dist/panel.js.map +1 -1
  58. package/dist/registry.d.ts.map +1 -1
  59. package/dist/registry.js +2 -0
  60. package/dist/registry.js.map +1 -1
  61. package/dist/resource.d.ts +8 -1
  62. package/dist/resource.d.ts.map +1 -1
  63. package/dist/resource.js +10 -1
  64. package/dist/resource.js.map +1 -1
  65. package/dist/types.d.ts +77 -8
  66. package/dist/types.d.ts.map +1 -1
  67. package/dist/validation.d.ts +5 -0
  68. package/dist/validation.d.ts.map +1 -1
  69. package/dist/validation.js +91 -10
  70. package/dist/validation.js.map +1 -1
  71. package/package.json +1 -1
@@ -0,0 +1,393 @@
1
+ import { asBoolean, asNumber, asRepeaterItems, dehydrateStringList, fieldInputRaw, keyValuePairsToRecord, parseCurrencyInput, parseJsonValue, toFormDateInputValue, toKeyValuePairs, } from './field-values.js';
2
+ /** Omit this key from the dehydrated payload (field was not in the request). */
3
+ export const FIELD_ABSENT = Symbol('shamar.fieldAbsent');
4
+ /** Omit this key from Alpine form state (another widget owns it). */
5
+ export const FIELD_SKIP = Symbol('shamar.fieldSkip');
6
+ const definitions = new Map();
7
+ /** Register or replace a field type (built-in or host-defined). Merges with any existing definition. */
8
+ export function registerFieldType(definition) {
9
+ const type = String(definition.type ?? '').trim();
10
+ if (!type)
11
+ throw new Error('registerFieldType: type is required');
12
+ const existing = definitions.get(type);
13
+ definitions.set(type, { ...existing, ...definition, type });
14
+ }
15
+ export function getFieldType(type) {
16
+ return definitions.get(type);
17
+ }
18
+ export function listFieldTypes() {
19
+ return [...definitions.values()];
20
+ }
21
+ export function fieldValueKind(type) {
22
+ return getFieldType(type)?.valueKind ?? 'scalar';
23
+ }
24
+ export function isArrayFieldType(type) {
25
+ const kind = fieldValueKind(type);
26
+ return kind === 'array' || kind === 'nested';
27
+ }
28
+ export function isJsonFieldType(type) {
29
+ const kind = fieldValueKind(type);
30
+ return kind === 'json' || kind === 'nested' || kind === 'record';
31
+ }
32
+ function widgetNumber(field, key) {
33
+ const value = field.widget?.[key];
34
+ return typeof value === 'number' ? value : undefined;
35
+ }
36
+ function isArrayValued(field) {
37
+ if (field.multiple)
38
+ return true;
39
+ const kind = fieldValueKind(field.type);
40
+ if (kind === 'array' || kind === 'nested')
41
+ return true;
42
+ if (field.relation && field.relation.kind !== 'belongsTo')
43
+ return true;
44
+ return false;
45
+ }
46
+ function dehydrateIfPresent(field, input) {
47
+ const { present, raw } = fieldInputRaw(field, input);
48
+ return present ? raw : FIELD_ABSENT;
49
+ }
50
+ function dehydrateList(field, input, commaSplit = false) {
51
+ const { present, raw } = fieldInputRaw(field, input);
52
+ if (!present)
53
+ return FIELD_ABSENT;
54
+ return dehydrateStringList(raw, commaSplit);
55
+ }
56
+ function hydrateNumericRange(value, field) {
57
+ const fallback = typeof field.minValue === 'number' ? field.minValue : Number(field.minValue ?? 0);
58
+ const min = Number.isFinite(fallback) ? fallback : 0;
59
+ if (value == null || value === '')
60
+ return min;
61
+ const num = typeof value === 'number' ? value : Number(value);
62
+ return Number.isFinite(num) ? num : min;
63
+ }
64
+ function hydrateNumber(value, field) {
65
+ if (field.currency) {
66
+ if (value == null || value === '')
67
+ return '';
68
+ const num = typeof value === 'number' ? value : Number(value);
69
+ return Number.isFinite(num) ? num : value;
70
+ }
71
+ if (value == null || value === '')
72
+ return '';
73
+ const num = typeof value === 'number' ? value : Number(value);
74
+ return Number.isFinite(num) ? num : value;
75
+ }
76
+ function dehydrateNumber(field, input) {
77
+ const { present, raw } = fieldInputRaw(field, input);
78
+ if (!present)
79
+ return FIELD_ABSENT;
80
+ if (field.currency)
81
+ return parseCurrencyInput(raw);
82
+ return asNumber(raw);
83
+ }
84
+ function dehydrateBoolean(field, input) {
85
+ const { raw } = fieldInputRaw(field, input);
86
+ return asBoolean(raw);
87
+ }
88
+ function dehydrateNested(field, input) {
89
+ const { present, raw } = fieldInputRaw(field, input);
90
+ if (!present)
91
+ return FIELD_ABSENT;
92
+ return asRepeaterItems(parseJsonValue(raw) ?? raw);
93
+ }
94
+ function dehydrateRecord(field, input) {
95
+ const { present, raw } = fieldInputRaw(field, input);
96
+ if (!present)
97
+ return FIELD_ABSENT;
98
+ return keyValuePairsToRecord(parseJsonValue(raw) ?? raw);
99
+ }
100
+ function dehydrateJson(field, input) {
101
+ const { present, raw } = fieldInputRaw(field, input);
102
+ if (!present)
103
+ return FIELD_ABSENT;
104
+ return parseJsonValue(raw) ?? raw;
105
+ }
106
+ function hydrateSelect(value, field) {
107
+ if (!field.multiple)
108
+ return value;
109
+ if (Array.isArray(value))
110
+ return value.map((item) => String(item));
111
+ if (value == null || value === '')
112
+ return [];
113
+ return [String(value)];
114
+ }
115
+ function hydrateArray(value) {
116
+ if (value == null || value === '')
117
+ return [];
118
+ if (Array.isArray(value))
119
+ return value;
120
+ return [value];
121
+ }
122
+ function emptyRepeater(field) {
123
+ const count = widgetNumber(field, 'defaultItems') ?? 0;
124
+ const schema = field.widget?.schema;
125
+ if (count > 0 && schema && Array.isArray(schema.fields)) {
126
+ return Array.from({ length: count }, () => emptyRepeaterItem(schema));
127
+ }
128
+ return [];
129
+ }
130
+ function emptyRelation(field) {
131
+ if (field.relation?.kind === 'belongsTo')
132
+ return FIELD_SKIP;
133
+ if (isArrayValued(field))
134
+ return [];
135
+ return '';
136
+ }
137
+ function dehydrateRelation(field, input) {
138
+ if (isArrayValued(field))
139
+ return dehydrateList(field, input);
140
+ return dehydrateIfPresent(field, input);
141
+ }
142
+ function dehydrateByKind(field, input, kind) {
143
+ if (field.currency) {
144
+ const { present, raw } = fieldInputRaw(field, input);
145
+ if (!present)
146
+ return FIELD_ABSENT;
147
+ return parseCurrencyInput(raw);
148
+ }
149
+ if (field.multiple || kind === 'array')
150
+ return dehydrateList(field, input, field.type === 'tags');
151
+ if (kind === 'boolean')
152
+ return dehydrateBoolean(field, input);
153
+ if (kind === 'number')
154
+ return dehydrateNumber(field, input);
155
+ if (kind === 'nested')
156
+ return dehydrateNested(field, input);
157
+ if (kind === 'record')
158
+ return dehydrateRecord(field, input);
159
+ if (kind === 'json')
160
+ return dehydrateJson(field, input);
161
+ return dehydrateIfPresent(field, input);
162
+ }
163
+ function hydrateByKind(value, field, kind) {
164
+ if (field.currency)
165
+ return hydrateNumber(value, field);
166
+ if (kind === 'number')
167
+ return hydrateNumber(value, field);
168
+ if (kind === 'nested')
169
+ return asRepeaterItems(value);
170
+ if (kind === 'record')
171
+ return toKeyValuePairs(value);
172
+ if (kind === 'array' || field.multiple)
173
+ return hydrateArray(value);
174
+ return value;
175
+ }
176
+ function emptyByKind(field, kind) {
177
+ if (kind === 'boolean')
178
+ return false;
179
+ if (kind === 'number')
180
+ return '';
181
+ if (kind === 'nested' || kind === 'record' || kind === 'array' || field.multiple)
182
+ return [];
183
+ return '';
184
+ }
185
+ /** Stored / adapter value → Alpine form state. */
186
+ export function hydrateField(field, value) {
187
+ const definition = getFieldType(field.type);
188
+ if (definition?.hydrate)
189
+ return definition.hydrate(value, field);
190
+ return hydrateByKind(value, field, definition?.valueKind ?? 'scalar');
191
+ }
192
+ /**
193
+ * Request body → stored value.
194
+ * Returns {@link FIELD_ABSENT} when the field should be omitted from the payload.
195
+ */
196
+ export function dehydrateField(field, input) {
197
+ if (field.currency) {
198
+ const { present, raw } = fieldInputRaw(field, input);
199
+ if (!present)
200
+ return FIELD_ABSENT;
201
+ return parseCurrencyInput(raw);
202
+ }
203
+ const definition = getFieldType(field.type);
204
+ if (definition?.dehydrate)
205
+ return definition.dehydrate(field, input);
206
+ return dehydrateByKind(field, input, definition?.valueKind ?? 'scalar');
207
+ }
208
+ /** Empty form state when there is no record value or static default. */
209
+ export function emptyFieldValue(field) {
210
+ const definition = getFieldType(field.type);
211
+ if (definition?.empty)
212
+ return definition.empty(field);
213
+ return emptyByKind(field, definition?.valueKind ?? 'scalar');
214
+ }
215
+ /**
216
+ * Seed Alpine state for one field from a record (or filled page data).
217
+ * Returns {@link FIELD_SKIP} when the field should not be written.
218
+ */
219
+ export function fieldFormState(field, source) {
220
+ if (source && field.name in source) {
221
+ return hydrateField(field, source[field.name]);
222
+ }
223
+ if (field.default !== undefined && typeof field.default !== 'function') {
224
+ return hydrateField(field, field.default);
225
+ }
226
+ return emptyFieldValue(field);
227
+ }
228
+ export function assignFieldFormState(state, field, source) {
229
+ const value = fieldFormState(field, source);
230
+ if (value !== FIELD_SKIP)
231
+ state[field.name] = value;
232
+ }
233
+ export function emptyRepeaterItem(schema) {
234
+ const item = {};
235
+ for (const field of schema.fields) {
236
+ const value = emptyFieldValue(field);
237
+ if (value !== FIELD_SKIP)
238
+ item[field.name] = value;
239
+ }
240
+ return item;
241
+ }
242
+ function define(type, extra = {}) {
243
+ registerFieldType({ type, ...extra });
244
+ }
245
+ define('text', { label: 'Text' });
246
+ define('textarea', { label: 'Textarea' });
247
+ define('number', {
248
+ label: 'Number',
249
+ valueKind: 'number',
250
+ inputType: 'number',
251
+ hydrate: hydrateNumber,
252
+ dehydrate: dehydrateNumber,
253
+ empty: () => '',
254
+ });
255
+ define('boolean', {
256
+ label: 'Toggle',
257
+ valueKind: 'boolean',
258
+ dehydrate: dehydrateBoolean,
259
+ empty: () => false,
260
+ });
261
+ define('checkbox', {
262
+ label: 'Checkbox',
263
+ valueKind: 'boolean',
264
+ dehydrate: dehydrateBoolean,
265
+ empty: () => false,
266
+ });
267
+ define('date', {
268
+ label: 'Date',
269
+ inputType: 'date',
270
+ hydrate: (value) => toFormDateInputValue(value, 'date'),
271
+ });
272
+ define('datetime', {
273
+ label: 'Date & time',
274
+ inputType: 'datetime-local',
275
+ hydrate: (value) => toFormDateInputValue(value, 'datetime'),
276
+ });
277
+ define('time', {
278
+ label: 'Time',
279
+ inputType: 'time',
280
+ hydrate: (value) => toFormDateInputValue(value, 'time'),
281
+ });
282
+ define('week', {
283
+ label: 'Week',
284
+ inputType: 'date',
285
+ hydrate: (value) => toFormDateInputValue(value, 'date'),
286
+ });
287
+ define('month', {
288
+ label: 'Month',
289
+ inputType: 'month',
290
+ hydrate: (value) => {
291
+ if (value == null || value === '')
292
+ return '';
293
+ const str = String(value).trim();
294
+ const ym = /^(\d{4})-(\d{2})$/.exec(str);
295
+ if (ym)
296
+ return `${ym[1]}-${ym[2]}`;
297
+ const date = toFormDateInputValue(value, 'date');
298
+ return date.length >= 7 ? date.slice(0, 7) : date;
299
+ },
300
+ dehydrate: (field, input) => {
301
+ const { present, raw } = fieldInputRaw(field, input);
302
+ if (!present)
303
+ return FIELD_ABSENT;
304
+ const str = String(raw ?? '').trim();
305
+ if (!str)
306
+ return FIELD_ABSENT;
307
+ const ym = /^(\d{4})-(\d{2})$/.exec(str);
308
+ if (ym)
309
+ return `${ym[1]}-${ym[2]}-01`;
310
+ const date = toFormDateInputValue(str, 'date');
311
+ return date || str;
312
+ },
313
+ });
314
+ define('select', {
315
+ label: 'Select',
316
+ hydrate: hydrateSelect,
317
+ dehydrate: (field, input) => field.multiple ? dehydrateList(field, input) : dehydrateIfPresent(field, input),
318
+ empty: (field) => (field.multiple ? [] : ''),
319
+ });
320
+ define('relation', {
321
+ label: 'Relation',
322
+ dehydrate: dehydrateRelation,
323
+ empty: emptyRelation,
324
+ });
325
+ define('email', { label: 'Email', inputType: 'email' });
326
+ define('password', { label: 'Password', inputType: 'password' });
327
+ define('tel', { label: 'Phone', inputType: 'tel' });
328
+ define('url', { label: 'URL' });
329
+ define('file', { label: 'File', inputType: 'file' });
330
+ define('image', { label: 'Image', inputType: 'file' });
331
+ define('filePicker', { label: 'Media picker' });
332
+ define('hidden', { label: 'Hidden', inputType: 'hidden' });
333
+ define('radio', { label: 'Radio' });
334
+ define('color', {
335
+ label: 'Color',
336
+ inputType: 'color',
337
+ hydrate: (value) => (value == null || value === '' ? '#000000' : value),
338
+ empty: () => '#000000',
339
+ });
340
+ define('tags', {
341
+ label: 'Tags',
342
+ valueKind: 'array',
343
+ hydrate: hydrateArray,
344
+ dehydrate: (field, input) => dehydrateList(field, input, true),
345
+ empty: () => [],
346
+ });
347
+ define('checkboxList', {
348
+ label: 'Checkbox list',
349
+ valueKind: 'array',
350
+ hydrate: hydrateArray,
351
+ dehydrate: (field, input) => dehydrateList(field, input),
352
+ empty: () => [],
353
+ });
354
+ define('relationTable', {
355
+ label: 'Relation table',
356
+ valueKind: 'array',
357
+ hydrate: hydrateArray,
358
+ dehydrate: (field, input) => dehydrateList(field, input),
359
+ empty: () => [],
360
+ });
361
+ define('richEditor', { label: 'Rich editor', valueKind: 'html' });
362
+ define('markdownEditor', { label: 'Markdown editor' });
363
+ define('codeEditor', { label: 'Code editor' });
364
+ define('repeater', {
365
+ label: 'Repeater',
366
+ valueKind: 'nested',
367
+ hydrate: (value) => asRepeaterItems(value),
368
+ dehydrate: dehydrateNested,
369
+ empty: emptyRepeater,
370
+ });
371
+ define('keyValue', {
372
+ label: 'Key-value',
373
+ valueKind: 'record',
374
+ hydrate: (value) => toKeyValuePairs(value),
375
+ dehydrate: dehydrateRecord,
376
+ empty: () => [],
377
+ });
378
+ define('slider', {
379
+ label: 'Slider',
380
+ valueKind: 'number',
381
+ inputType: 'range',
382
+ hydrate: hydrateNumericRange,
383
+ dehydrate: dehydrateNumber,
384
+ empty: (field) => hydrateNumericRange(null, field),
385
+ });
386
+ define('rating', {
387
+ label: 'Rating',
388
+ valueKind: 'number',
389
+ hydrate: hydrateNumericRange,
390
+ dehydrate: dehydrateNumber,
391
+ empty: (field) => hydrateNumericRange(null, field),
392
+ });
393
+ //# sourceMappingURL=field-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-registry.js","sourceRoot":"","sources":["../src/field-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Shared codecs for field hydrate (stored → form) and dehydrate (request → stored).
3
+ * Field types register their own lifecycle; these helpers keep that logic DRY.
4
+ */
5
+ export declare function fieldInputRaw(field: {
6
+ name: string;
7
+ }, input: Record<string, unknown>): {
8
+ present: boolean;
9
+ raw: unknown;
10
+ };
11
+ export declare function parseJsonValue(raw: unknown): unknown;
12
+ export declare function asNumber(raw: unknown): number | '';
13
+ /** Parse currency-ish user input into a finite number (or empty string). */
14
+ export declare function parseCurrencyInput(value: unknown): number | '';
15
+ export declare function asBoolean(raw: unknown): boolean;
16
+ export declare function sanitizeStringList(values: unknown): string[];
17
+ export declare function dehydrateStringList(raw: unknown, commaSplit?: boolean): string[];
18
+ export declare function asRepeaterItems(value: unknown): unknown[];
19
+ export declare function toKeyValuePairs(value: unknown): Array<{
20
+ key: string;
21
+ value: string;
22
+ }>;
23
+ export declare function keyValuePairsToRecord(value: unknown): Record<string, string>;
24
+ /** Parse Date, ISO strings, YYYY-MM-DD, epoch ms, and Luxon-like objects. */
25
+ export declare function parseDateValue(value: unknown): Date | null;
26
+ /** Normalize stored dates for native `date` / `datetime-local` / `time` inputs. */
27
+ export declare function toFormDateInputValue(value: unknown, mode: 'date' | 'datetime' | 'time'): string;
28
+ //# sourceMappingURL=field-values.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-values.d.ts","sourceRoot":"","sources":["../src/field-values.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,aAAa,CAC3B,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAKpC;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CASpD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,EAAE,CAIlD;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,EAAE,CAO9D;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAE/C;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAU5D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,UAAQ,GAAG,MAAM,EAAE,CAO9E;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,CAYzD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBrF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmB5E;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CA8C1D;AAED,mFAAmF;AACnF,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,GACjC,MAAM,CAwBR"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Shared codecs for field hydrate (stored → form) and dehydrate (request → stored).
3
+ * Field types register their own lifecycle; these helpers keep that logic DRY.
4
+ */
5
+ export function fieldInputRaw(field, input) {
6
+ if (field.name in input)
7
+ return { present: true, raw: input[field.name] };
8
+ const aliased = `${field.name}[]`;
9
+ if (aliased in input)
10
+ return { present: true, raw: input[aliased] };
11
+ return { present: false, raw: undefined };
12
+ }
13
+ export function parseJsonValue(raw) {
14
+ if (typeof raw !== 'string')
15
+ return raw;
16
+ const trimmed = raw.trim();
17
+ if (!trimmed)
18
+ return null;
19
+ try {
20
+ return JSON.parse(trimmed);
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ export function asNumber(raw) {
27
+ if (raw == null || raw === '')
28
+ return '';
29
+ const num = typeof raw === 'number' ? raw : Number(raw);
30
+ return Number.isFinite(num) ? num : '';
31
+ }
32
+ /** Parse currency-ish user input into a finite number (or empty string). */
33
+ export function parseCurrencyInput(value) {
34
+ if (value == null || value === '')
35
+ return '';
36
+ if (typeof value === 'number')
37
+ return Number.isFinite(value) ? value : '';
38
+ const cleaned = String(value).replace(/[^\d.-]/g, '');
39
+ if (!cleaned || cleaned === '-' || cleaned === '.' || cleaned === '-.')
40
+ return '';
41
+ const num = Number(cleaned);
42
+ return Number.isFinite(num) ? num : '';
43
+ }
44
+ export function asBoolean(raw) {
45
+ return raw === true || raw === '1' || raw === 'on' || raw === 'true';
46
+ }
47
+ export function sanitizeStringList(values) {
48
+ if (!Array.isArray(values))
49
+ return [];
50
+ const out = new Set();
51
+ for (const id of values) {
52
+ if (id == null)
53
+ continue;
54
+ const value = String(id).trim();
55
+ if (!value || value === 'null' || value === 'undefined')
56
+ continue;
57
+ out.add(value);
58
+ }
59
+ return [...out];
60
+ }
61
+ export function dehydrateStringList(raw, commaSplit = false) {
62
+ if (Array.isArray(raw))
63
+ return sanitizeStringList(raw);
64
+ if (typeof raw === 'string' && raw.trim()) {
65
+ const parts = commaSplit ? raw.split(',') : [raw];
66
+ return sanitizeStringList(parts);
67
+ }
68
+ return [];
69
+ }
70
+ export function asRepeaterItems(value) {
71
+ if (Array.isArray(value))
72
+ return value;
73
+ if (value && typeof value === 'object') {
74
+ const record = value;
75
+ const keys = Object.keys(record);
76
+ if (keys.length > 0 && keys.every((key) => /^\d+$/.test(key))) {
77
+ return keys
78
+ .sort((a, b) => Number(a) - Number(b))
79
+ .map((key) => record[key]);
80
+ }
81
+ }
82
+ return [];
83
+ }
84
+ export function toKeyValuePairs(value) {
85
+ if (Array.isArray(value)) {
86
+ return value.map((item) => {
87
+ if (item && typeof item === 'object' && !Array.isArray(item)) {
88
+ const row = item;
89
+ return { key: String(row.key ?? ''), value: row.value == null ? '' : String(row.value) };
90
+ }
91
+ return { key: '', value: item == null ? '' : String(item) };
92
+ });
93
+ }
94
+ if (value && typeof value === 'object') {
95
+ if (value instanceof Map) {
96
+ return [...value.entries()].map(([key, val]) => ({
97
+ key: String(key),
98
+ value: val == null ? '' : String(val),
99
+ }));
100
+ }
101
+ return Object.entries(value).map(([key, val]) => ({
102
+ key,
103
+ value: val == null ? '' : String(val),
104
+ }));
105
+ }
106
+ return [];
107
+ }
108
+ export function keyValuePairsToRecord(value) {
109
+ const out = {};
110
+ if (Array.isArray(value)) {
111
+ for (const item of value) {
112
+ if (!item || typeof item !== 'object' || Array.isArray(item))
113
+ continue;
114
+ const key = String(item.key ?? '').trim();
115
+ if (!key)
116
+ continue;
117
+ const raw = item.value;
118
+ out[key] = raw == null ? '' : String(raw);
119
+ }
120
+ return out;
121
+ }
122
+ if (value && typeof value === 'object') {
123
+ for (const [key, raw] of Object.entries(value)) {
124
+ if (!key.trim())
125
+ continue;
126
+ out[key] = raw == null ? '' : String(raw);
127
+ }
128
+ }
129
+ return out;
130
+ }
131
+ /** Parse Date, ISO strings, YYYY-MM-DD, epoch ms, and Luxon-like objects. */
132
+ export function parseDateValue(value) {
133
+ if (value instanceof Date) {
134
+ return Number.isNaN(value.getTime()) ? null : value;
135
+ }
136
+ if (typeof value === 'number' && Number.isFinite(value)) {
137
+ const date = new Date(value);
138
+ return Number.isNaN(date.getTime()) ? null : date;
139
+ }
140
+ if (typeof value === 'string') {
141
+ const trimmed = value.trim();
142
+ if (!trimmed)
143
+ return null;
144
+ const dateOnly = /^(\d{4})-(\d{2})-(\d{2})$/.exec(trimmed);
145
+ if (dateOnly) {
146
+ const date = new Date(Number(dateOnly[1]), Number(dateOnly[2]) - 1, Number(dateOnly[3]));
147
+ return Number.isNaN(date.getTime()) ? null : date;
148
+ }
149
+ const date = new Date(trimmed);
150
+ return Number.isNaN(date.getTime()) ? null : date;
151
+ }
152
+ if (value && typeof value === 'object') {
153
+ const object = value;
154
+ if (typeof object.toJSDate === 'function') {
155
+ return parseDateValue(object.toJSDate());
156
+ }
157
+ if (typeof object.toISO === 'function') {
158
+ return parseDateValue(object.toISO());
159
+ }
160
+ if (typeof object.toISOString === 'function') {
161
+ return parseDateValue(object.toISOString());
162
+ }
163
+ }
164
+ return null;
165
+ }
166
+ /** Normalize stored dates for native `date` / `datetime-local` / `time` inputs. */
167
+ export function toFormDateInputValue(value, mode) {
168
+ if (mode === 'time') {
169
+ if (value == null || value === '')
170
+ return '';
171
+ const raw = String(value).trim();
172
+ const timeOnly = raw.match(/^(\d{1,2}):(\d{2})(?::(\d{2}))?$/);
173
+ if (timeOnly) {
174
+ const hh = timeOnly[1].padStart(2, '0');
175
+ const mm = timeOnly[2];
176
+ return timeOnly[3] ? `${hh}:${mm}:${timeOnly[3]}` : `${hh}:${mm}`;
177
+ }
178
+ }
179
+ const date = parseDateValue(value);
180
+ if (!date)
181
+ return '';
182
+ const y = date.getFullYear();
183
+ const m = String(date.getMonth() + 1).padStart(2, '0');
184
+ const d = String(date.getDate()).padStart(2, '0');
185
+ if (mode === 'date')
186
+ return `${y}-${m}-${d}`;
187
+ const hh = String(date.getHours()).padStart(2, '0');
188
+ const mm = String(date.getMinutes()).padStart(2, '0');
189
+ if (mode === 'time')
190
+ return `${hh}:${mm}`;
191
+ return `${y}-${m}-${d}T${hh}:${mm}`;
192
+ }
193
+ //# sourceMappingURL=field-values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-values.js","sourceRoot":"","sources":["../src/field-values.ts"],"names":[],"mappings":"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"}