@marianmeres/stuic 3.181.0 → 3.182.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 (32) hide show
  1. package/README.md +1 -1
  2. package/dist/components/FieldsBuilder/FieldsBuilder.svelte +101 -150
  3. package/dist/components/FieldsBuilder/FieldsBuilder.svelte.d.ts +10 -1
  4. package/dist/components/FieldsBuilder/README.md +82 -3
  5. package/dist/components/FieldsBuilder/_internal/ColumnsEditor.svelte +624 -0
  6. package/dist/components/FieldsBuilder/_internal/ColumnsEditor.svelte.d.ts +41 -0
  7. package/dist/components/FieldsBuilder/_internal/ExtrasEditor.svelte +174 -0
  8. package/dist/components/FieldsBuilder/_internal/ExtrasEditor.svelte.d.ts +20 -0
  9. package/dist/components/FieldsBuilder/_internal/column-meta.d.ts +27 -0
  10. package/dist/components/FieldsBuilder/_internal/column-meta.js +15 -0
  11. package/dist/components/FieldsBuilder/i18n-sk.js +17 -0
  12. package/dist/components/FieldsBuilder/i18n.d.ts +17 -0
  13. package/dist/components/FieldsBuilder/i18n.js +17 -0
  14. package/dist/components/FieldsBuilder/index.css +20 -0
  15. package/dist/components/FieldsBuilder/index.d.ts +2 -2
  16. package/dist/components/FieldsBuilder/types.d.ts +39 -0
  17. package/dist/components/FieldsBuilder/utils.d.ts +36 -1
  18. package/dist/components/FieldsBuilder/utils.js +180 -55
  19. package/dist/components/Input/FieldTable.svelte +907 -0
  20. package/dist/components/Input/FieldTable.svelte.d.ts +98 -0
  21. package/dist/components/Input/README.md +251 -0
  22. package/dist/components/Input/field-table-i18n-sk.d.ts +21 -0
  23. package/dist/components/Input/field-table-i18n-sk.js +41 -0
  24. package/dist/components/Input/field-table-i18n.d.ts +60 -0
  25. package/dist/components/Input/field-table-i18n.js +66 -0
  26. package/dist/components/Input/field-table-number.d.ts +48 -0
  27. package/dist/components/Input/field-table-number.js +86 -0
  28. package/dist/components/Input/index.css +597 -0
  29. package/dist/components/Input/index.d.ts +4 -0
  30. package/dist/components/Input/index.js +4 -0
  31. package/docs/domains/components.md +24 -18
  32. package/package.json +1 -1
@@ -18,6 +18,10 @@ export { default as FieldTextarea, } from "./FieldTextarea.svelte";
18
18
  export { default as FieldInputLocalized, } from "./FieldInputLocalized.svelte";
19
19
  export { default as FieldKeyValues, } from "./FieldKeyValues.svelte";
20
20
  export { default as FieldObject, } from "./FieldObject.svelte";
21
+ export { default as FieldTable, } from "./FieldTable.svelte";
22
+ export { createFieldTableT, FIELD_TABLE_MESSAGES_EN, } from "./field-table-i18n.js";
23
+ export { FIELD_TABLE_MESSAGES_SK } from "./field-table-i18n-sk.js";
24
+ export { parseCellNumber, formatCellNumber, } from "./field-table-number.js";
21
25
  export { default as FieldPhoneNumber, } from "./FieldPhoneNumber.svelte";
22
26
  export { default as FieldCountry, } from "./FieldCountry.svelte";
23
27
  export { validatePhoneNumber } from "./phone-validation.js";
@@ -73,6 +73,7 @@
73
73
  | CronInput | Cron expression editor with presets and validation |
74
74
  | Fieldset | Field grouping with legend |
75
75
  | FieldKeyValues | Key-value pair editor |
76
+ | FieldTable | Rows × typed columns editor (text/number/select/checkbox/date/url cells, container layout) |
76
77
  | FieldsBuilder | Field-definition list editor ("what properties does a thing have?") |
77
78
  | FieldAssets | File/asset management |
78
79
  | LoginForm, LoginFormModal | Standalone login form with optional modal variant |
@@ -157,7 +158,7 @@ Use `validate={false}` to bypass stuic's validation entirely.
157
158
 
158
159
  > **Why default-on?** Hidden-input field components (`FieldPhoneNumber`,
159
160
  > `FieldCountry`, `FieldObject`, `FieldAssets`, `FieldInputLocalized`,
160
- > `FieldKeyValues`, `FieldLikeButton`, `FieldDate`, `FieldDateRange`, `Rating`) _must_ be default-on because hidden
161
+ > `FieldKeyValues`, `FieldTable`, `FieldLikeButton`, `FieldDate`, `FieldDateRange`, `Rating`) _must_ be default-on because hidden
161
162
  > inputs are excluded from native browser constraint validation — without the
162
163
  > stuic action enforcing `required` in a `customValidator`, the attribute is a
163
164
  > silent no-op. Plain-input field components were harmonized to the same
@@ -167,7 +168,7 @@ Use `validate={false}` to bypass stuic's validation entirely.
167
168
 
168
169
  Available on `FieldInput`, `FieldMoney`, `FieldTextarea`, `FieldCheckbox`,
169
170
  `FieldSelect`, `FieldFile`, `FieldObject`, `FieldAssets`, `FieldInputLocalized`,
170
- `FieldKeyValues`, `FieldPhoneNumber`, `FieldCountry`, `FieldLikeButton`,
171
+ `FieldKeyValues`, `FieldTable`, `FieldPhoneNumber`, `FieldCountry`, `FieldLikeButton`,
171
172
  `FieldRadios`, `FieldSwitch`, `FieldOptions`, `FieldDate`, `FieldDateRange`, and
172
173
  `Switch`:
173
174
 
@@ -563,8 +564,10 @@ the list is the consumer's job, server-side. Own directory: `components/FieldsBu
563
564
  | `FieldDef` | type | One field definition (the value unit) |
564
565
  | `FieldLock` | type | Per-field edit locks |
565
566
  | `FieldOptionDef` | type | Choice-type option `{ value, label }` |
567
+ | `FieldColumnDef` | type | One column of a `supportsColumns` field |
566
568
  | `FieldTypeDef` | type | Palette entry |
567
- | `FieldTypeExtraDef` | type | Palette-declared boolean extra |
569
+ | `FieldTypeExtraDef` | type | Palette-declared boolean / string / select extra |
570
+ | `FieldColumnErrors`, `FieldDefRowErrors` | types | `validateFieldDefs` result shapes |
568
571
  | `LocalizedText` | type | `string \| Record<language, string>` |
569
572
  | `FIELDS_BUILDER_DEFAULT_TYPES` | constant | Starter palette (text/longtext/number/checkbox/select/date) |
570
573
  | `FIELDS_BUILDER_DEFAULT_KEY_PATTERN` | constant | `/^[a-z][a-z0-9_]{0,62}$/` |
@@ -572,26 +575,29 @@ the list is the consumer's job, server-side. Own directory: `components/FieldsBu
572
575
 
573
576
  ### Key Props
574
577
 
575
- | Prop | Type | Default | Description |
576
- | -------------------- | ---------------------------------------------- | -------- | ------------------------------------------------ |
577
- | `value` | `FieldDef[]` | required | Bindable ordered field list |
578
- | `name` | `string` | required | Hidden-input name |
579
- | `types` | `FieldTypeDef[]` | required | The type palette |
580
- | `languages` | `string[]` | — | Multi-language labels/descriptions/options |
581
- | `keysImmutable` | `boolean` | `true` | Freeze keys loaded from `value` |
582
- | `deriveKeyFromLabel` | `boolean \| (label) => string` | `true` | Live slug derivation (diacritics transliterated) |
583
- | `reservedKeys` | `string[] \| (key) => boolean` | — | Forbidden keys (derivation auto-avoids them) |
584
- | `deleteMode` | `"mark" \| "immediate"` | `"mark"` | Mark+undo vs outright removal |
585
- | `onBeforeDelete` | `(field) => void \| false \| Promise` | — | Delete veto (Tree `onMove`-style) |
586
- | `onBeforeTypeChange` | `(field, newType) => void \| false \| Promise` | — | Type-change veto for pre-existing fields |
587
- | `preview` | `Snippet<[{ fields }]>` | — | Live preview pane (side-by-side when wide) |
588
- | `maxFields` | `number` | — | Add-limit |
578
+ | Prop | Type | Default | Description |
579
+ | -------------------------------------------------- | ---------------------------------------------- | -------- | ------------------------------------------------ |
580
+ | `value` | `FieldDef[]` | required | Bindable ordered field list |
581
+ | `name` | `string` | required | Hidden-input name |
582
+ | `types` | `FieldTypeDef[]` | required | The type palette |
583
+ | `languages` | `string[]` | — | Multi-language labels/descriptions/options |
584
+ | `keysImmutable` | `boolean` | `true` | Freeze keys loaded from `value` |
585
+ | `deriveKeyFromLabel` | `boolean \| (label) => string` | `true` | Live slug derivation (diacritics transliterated) |
586
+ | `reservedKeys` | `string[] \| (key) => boolean` | — | Forbidden keys (derivation auto-avoids them) |
587
+ | `deleteMode` | `"mark" \| "immediate"` | `"mark"` | Mark+undo vs outright removal |
588
+ | `onBeforeDelete` | `(field) => void \| false \| Promise` | — | Delete veto (Tree `onMove`-style) |
589
+ | `onBeforeTypeChange` | `(field, newType) => void \| false \| Promise` | — | Type-change veto for pre-existing fields |
590
+ | `onBeforeColumnDelete`, `onBeforeColumnTypeChange` | `(field, column[, newType]) => …` | — | Column veto hooks (stored columns only) |
591
+ | `preview` | `Snippet<[{ fields }]>` | — | Live preview pane (side-by-side when wide) |
592
+ | `maxFields` | `number` | — | Add-limit |
589
593
 
590
594
  Features: collapsed rows (label + key + type chip) expanding to the full editor;
591
595
  drag reorder + Move up/down buttons with aria-live announcements; `lock.*` per-field
592
596
  locks (label/description always editable); unknown-type rows render degraded
593
597
  read-only and round-trip untouched; per-row inline validation with
594
- focus-first-offender `validate()`.
598
+ focus-first-offender `validate()`; `supportsOptions` types get an option editor,
599
+ `supportsColumns` types a column editor (each column: label / type from `columnTypes` /
600
+ key, plus that column type's options and extras), capped by `maxColumns`.
595
601
 
596
602
  ### CSS Tokens
597
603
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marianmeres/stuic",
3
- "version": "3.181.0",
3
+ "version": "3.182.0",
4
4
  "packageManager": "pnpm@11.5.0",
5
5
  "scripts": {
6
6
  "dev": "vite dev",