@asteby/metacore-runtime-react 17.0.0 → 17.0.2

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 (73) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/action-modal-dispatcher.d.ts +1 -1
  3. package/dist/action-modal-dispatcher.d.ts.map +1 -1
  4. package/dist/addon-layout-context.d.ts +1 -1
  5. package/dist/addon-layout-context.d.ts.map +1 -1
  6. package/dist/addon-loader.d.ts +1 -1
  7. package/dist/addon-loader.d.ts.map +1 -1
  8. package/dist/api-context.d.ts +2 -2
  9. package/dist/api-context.d.ts.map +1 -1
  10. package/dist/capability-gate.d.ts +2 -2
  11. package/dist/capability-gate.d.ts.map +1 -1
  12. package/dist/dialogs/_primitives.d.ts +4 -4
  13. package/dist/dialogs/_primitives.d.ts.map +1 -1
  14. package/dist/dialogs/create-record-dialog.d.ts +1 -1
  15. package/dist/dialogs/create-record-dialog.d.ts.map +1 -1
  16. package/dist/dialogs/dynamic-record.d.ts +1 -1
  17. package/dist/dialogs/dynamic-record.d.ts.map +1 -1
  18. package/dist/dialogs/dynamic-record.js +4 -1
  19. package/dist/dialogs/export.d.ts +1 -1
  20. package/dist/dialogs/export.d.ts.map +1 -1
  21. package/dist/dialogs/import.d.ts +1 -1
  22. package/dist/dialogs/import.d.ts.map +1 -1
  23. package/dist/dialogs/view-record-dialog.d.ts +1 -1
  24. package/dist/dialogs/view-record-dialog.d.ts.map +1 -1
  25. package/dist/dynamic-columns-helpers.d.ts +21 -0
  26. package/dist/dynamic-columns-helpers.d.ts.map +1 -0
  27. package/dist/dynamic-columns-helpers.js +59 -0
  28. package/dist/dynamic-columns.d.ts.map +1 -1
  29. package/dist/dynamic-columns.js +12 -6
  30. package/dist/dynamic-crud-page.d.ts +1 -1
  31. package/dist/dynamic-crud-page.d.ts.map +1 -1
  32. package/dist/dynamic-date-field.d.ts +1 -1
  33. package/dist/dynamic-date-field.d.ts.map +1 -1
  34. package/dist/dynamic-form.d.ts +1 -1
  35. package/dist/dynamic-form.d.ts.map +1 -1
  36. package/dist/dynamic-icon.d.ts +1 -1
  37. package/dist/dynamic-icon.d.ts.map +1 -1
  38. package/dist/dynamic-line-items.d.ts +1 -1
  39. package/dist/dynamic-line-items.d.ts.map +1 -1
  40. package/dist/dynamic-relation-helpers.d.ts +2 -0
  41. package/dist/dynamic-relation-helpers.d.ts.map +1 -1
  42. package/dist/dynamic-relation-helpers.js +69 -0
  43. package/dist/dynamic-relation.d.ts +2 -2
  44. package/dist/dynamic-relation.d.ts.map +1 -1
  45. package/dist/dynamic-relation.js +6 -12
  46. package/dist/dynamic-relations.d.ts +1 -1
  47. package/dist/dynamic-relations.d.ts.map +1 -1
  48. package/dist/dynamic-select-field.d.ts +1 -1
  49. package/dist/dynamic-select-field.d.ts.map +1 -1
  50. package/dist/dynamic-table.d.ts +1 -1
  51. package/dist/dynamic-table.d.ts.map +1 -1
  52. package/dist/i18n-provider.d.ts +1 -1
  53. package/dist/i18n-provider.d.ts.map +1 -1
  54. package/dist/index.d.ts +1 -0
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +1 -0
  57. package/dist/model-action-toolbar.d.ts +1 -1
  58. package/dist/model-action-toolbar.d.ts.map +1 -1
  59. package/dist/navigation-builder.d.ts +1 -1
  60. package/dist/navigation-builder.d.ts.map +1 -1
  61. package/dist/slot.d.ts +1 -1
  62. package/dist/slot.d.ts.map +1 -1
  63. package/dist/upload-field.d.ts +1 -1
  64. package/dist/upload-field.d.ts.map +1 -1
  65. package/package.json +3 -3
  66. package/src/__tests__/dynamic-relation.test.ts +65 -0
  67. package/src/__tests__/humanize-token.test.ts +58 -0
  68. package/src/dialogs/dynamic-record.tsx +4 -1
  69. package/src/dynamic-columns-helpers.ts +58 -0
  70. package/src/dynamic-columns.tsx +13 -7
  71. package/src/dynamic-relation-helpers.ts +70 -0
  72. package/src/dynamic-relation.tsx +11 -12
  73. package/src/index.ts +1 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # @asteby/metacore-runtime-react
2
2
 
3
+ ## 17.0.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 3e45754: Humanize unmatched enum/status/option tokens as a scalable fallback. When a
8
+ column value has no matching declared `option`, dynamic cells (table, record
9
+ detail, relation rows) now render a humanized label (`in_progress` → "In
10
+ Progress", `pos` → "POS") instead of the raw token. A matched `option.label`
11
+ (the addon-localized source of truth) still wins; this only affects the
12
+ previously-raw fallback.
13
+
14
+ ## 17.0.1
15
+
16
+ ### Patch Changes
17
+
18
+ - 957b024: Resolve pro siblings in `DynamicRelation` line-item cells. The relation
19
+ sub-tables on a detail view (e.g. a sales order's lines) rendered raw values
20
+ where the parent table already renders nicely: a `*_id` FK showed the raw uuid,
21
+ a resolved relation/user object (`{ value, label }` / `created_by = { name }`)
22
+ was `JSON.stringify`'d, and the unset nil/zero UUID leaked as a string of zeros.
23
+
24
+ `formatCell` is replaced by the pure, tested `formatRelationCell(row, col)` (in
25
+ `dynamic-relation-helpers`) which: prefers the backend-resolved FK sibling keyed
26
+ by the column key with the trailing `_id` stripped (`product_id` → `row.product`),
27
+ shows a value-object's `label`/`name`/`title` instead of raw JSON, and maps the
28
+ nil UUID (via the shared `isNilUuid`) to the empty marker "—". Domain-agnostic —
29
+ benefits every addon that renders relation panels.
30
+
3
31
  ## 17.0.0
4
32
 
5
33
  ### Patch Changes
@@ -1,4 +1,4 @@
1
1
  import { type ActionMetadata, type ActionModalProps } from '@asteby/metacore-sdk';
2
2
  export type { ActionMetadata, ActionModalProps };
3
- export declare function ActionModalDispatcher({ open, onOpenChange, action, model, record, endpoint, onSuccess, }: ActionModalProps): import("react/jsx-runtime").JSX.Element | null;
3
+ export declare function ActionModalDispatcher({ open, onOpenChange, action, model, record, endpoint, onSuccess, }: ActionModalProps): import("react").JSX.Element | null;
4
4
  //# sourceMappingURL=action-modal-dispatcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"action-modal-dispatcher.d.ts","sourceRoot":"","sources":["../src/action-modal-dispatcher.tsx"],"names":[],"mappings":"AA+CA,OAAO,EACH,KAAK,cAAc,EACnB,KAAK,gBAAgB,EAExB,MAAM,sBAAsB,CAAA;AAE7B,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAA;AAEhD,wBAAgB,qBAAqB,CAAC,EAClC,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,KAAK,EACL,MAAM,EACN,QAAQ,EACR,SAAS,GACZ,EAAE,gBAAgB,kDAiDlB"}
1
+ {"version":3,"file":"action-modal-dispatcher.d.ts","sourceRoot":"","sources":["../src/action-modal-dispatcher.tsx"],"names":[],"mappings":"AA+CA,OAAO,EACH,KAAK,cAAc,EACnB,KAAK,gBAAgB,EAExB,MAAM,sBAAsB,CAAA;AAE7B,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAA;AAEhD,wBAAgB,qBAAqB,CAAC,EAClC,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,KAAK,EACL,MAAM,EACN,QAAQ,EACR,SAAS,GACZ,EAAE,gBAAgB,sCAiDlB"}
@@ -21,7 +21,7 @@ export interface AddonLayoutProviderProps {
21
21
  * currently-active layout in state; addon-loader and `useDeclareAddonLayout`
22
22
  * mutate it from below.
23
23
  */
24
- export declare function AddonLayoutProvider({ initial, children, }: AddonLayoutProviderProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare function AddonLayoutProvider({ initial, children, }: AddonLayoutProviderProps): import("react").JSX.Element;
25
25
  /**
26
26
  * Read the currently-active layout. The host shell calls this and decides
27
27
  * whether to render its chrome. Returns `"shell"` when no provider is
@@ -1 +1 @@
1
- {"version":3,"file":"addon-layout-context.d.ts","sourceRoot":"","sources":["../src/addon-layout-context.tsx"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEvD,YAAY,EAAE,WAAW,EAAE,CAAA;AAE3B,UAAU,gBAAgB;IACtB,2DAA2D;IAC3D,MAAM,EAAE,WAAW,CAAA;IACnB;;;;;OAKG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;CAC3C;AAWD,MAAM,WAAW,wBAAwB;IACrC,0CAA0C;IAC1C,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAChC,OAAiB,EACjB,QAAQ,GACX,EAAE,wBAAwB,2CAW1B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,CAExD;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAY3E"}
1
+ {"version":3,"file":"addon-layout-context.d.ts","sourceRoot":"","sources":["../src/addon-layout-context.tsx"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEvD,YAAY,EAAE,WAAW,EAAE,CAAA;AAE3B,UAAU,gBAAgB;IACtB,2DAA2D;IAC3D,MAAM,EAAE,WAAW,CAAA;IACnB;;;;;OAKG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;CAC3C;AAWD,MAAM,WAAW,wBAAwB;IACrC,0CAA0C;IAC1C,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAChC,OAAiB,EACjB,QAAQ,GACX,EAAE,wBAAwB,+BAW1B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,CAExD;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAY3E"}
@@ -28,5 +28,5 @@ export interface AddonLoaderProps {
28
28
  layout?: AddonLayout;
29
29
  children?: React.ReactNode;
30
30
  }
31
- export declare function AddonLoader({ scope, url, module, api, fallback, onReady, onError, layout, children, }: AddonLoaderProps): import("react/jsx-runtime").JSX.Element;
31
+ export declare function AddonLoader({ scope, url, module, api, fallback, onReady, onError, layout, children, }: AddonLoaderProps): import("react").JSX.Element;
32
32
  //# sourceMappingURL=addon-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"addon-loader.d.ts","sourceRoot":"","sources":["../src/addon-loader.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGjE,MAAM,WAAW,gBAAgB;IAC7B,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAA;IACb,+EAA+E;IAC/E,GAAG,EAAE,MAAM,CAAA;IACX,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+DAA+D;IAC/D,GAAG,EAAE,QAAQ,CAAA;IACb,wCAAwC;IACxC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAA;IAC9B;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC7B;AAoFD,wBAAgB,WAAW,CAAC,EACxB,KAAK,EACL,GAAG,EACH,MAAqB,EACrB,GAAG,EACH,QAAe,EACf,OAAO,EACP,OAAO,EACP,MAAM,EACN,QAAQ,GACX,EAAE,gBAAgB,2CA8ClB"}
1
+ {"version":3,"file":"addon-loader.d.ts","sourceRoot":"","sources":["../src/addon-loader.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGjE,MAAM,WAAW,gBAAgB;IAC7B,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAA;IACb,+EAA+E;IAC/E,GAAG,EAAE,MAAM,CAAA;IACX,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+DAA+D;IAC/D,GAAG,EAAE,QAAQ,CAAA;IACb,wCAAwC;IACxC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAA;IAC9B;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC7B;AAoFD,wBAAgB,WAAW,CAAC,EACxB,KAAK,EACL,GAAG,EACH,MAAqB,EACrB,GAAG,EACH,QAAe,EACf,OAAO,EACP,OAAO,EACP,MAAM,EACN,QAAQ,GACX,EAAE,gBAAgB,+BA8ClB"}
@@ -22,7 +22,7 @@ export interface ApiProviderProps {
22
22
  client: ApiClient;
23
23
  children: React.ReactNode;
24
24
  }
25
- export declare function ApiProvider({ client, children }: ApiProviderProps): import("react/jsx-runtime").JSX.Element;
25
+ export declare function ApiProvider({ client, children }: ApiProviderProps): React.JSX.Element;
26
26
  /** Returns the host-injected api client. Throws if no <ApiProvider> is mounted. */
27
27
  export declare function useApi(): ApiClient;
28
28
  /** Optional branch context — hosts that support tenant branches can supply
@@ -35,6 +35,6 @@ export interface BranchProviderProps {
35
35
  branch: BranchState;
36
36
  children: React.ReactNode;
37
37
  }
38
- export declare function BranchProvider({ branch, children }: BranchProviderProps): import("react/jsx-runtime").JSX.Element;
38
+ export declare function BranchProvider({ branch, children }: BranchProviderProps): React.JSX.Element;
39
39
  export declare function useCurrentBranch(): BranchState;
40
40
  //# sourceMappingURL=api-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-context.d.ts","sourceRoot":"","sources":["../src/api-context.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAoC,MAAM,OAAO,CAAA;AAExD,uEAAuE;AACvE,MAAM,WAAW,SAAS;IACtB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC,CAAA;IACzE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC,CAAA;IACtF,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC,CAAA;IACrF,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC,CAAA;CAC/E;AAID,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,SAAS,CAAA;IACjB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CAEjE;AAED,mFAAmF;AACnF,wBAAgB,MAAM,IAAI,SAAS,CAMlC;AAED;;wEAEwE;AACxE,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CACzC;AAID,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,WAAW,CAAA;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAED,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CAEvE;AAED,wBAAgB,gBAAgB,IAAI,WAAW,CAE9C"}
1
+ {"version":3,"file":"api-context.d.ts","sourceRoot":"","sources":["../src/api-context.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAoC,MAAM,OAAO,CAAA;AAExD,uEAAuE;AACvE,MAAM,WAAW,SAAS;IACtB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC,CAAA;IACzE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC,CAAA;IACtF,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC,CAAA;IACrF,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC,CAAA;CAC/E;AAID,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,SAAS,CAAA;IACjB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,qBAEjE;AAED,mFAAmF;AACnF,wBAAgB,MAAM,IAAI,SAAS,CAMlC;AAED;;wEAEwE;AACxE,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CACzC;AAID,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,WAAW,CAAA;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAED,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,mBAAmB,qBAEvE;AAED,wBAAgB,gBAAgB,IAAI,WAAW,CAE9C"}
@@ -9,7 +9,7 @@ export interface CapabilityProviderProps {
9
9
  capabilities: CapabilitySet;
10
10
  children: React.ReactNode;
11
11
  }
12
- export declare function CapabilityProvider({ capabilities, children }: CapabilityProviderProps): import("react/jsx-runtime").JSX.Element;
12
+ export declare function CapabilityProvider({ capabilities, children }: CapabilityProviderProps): React.JSX.Element;
13
13
  export declare function useCapabilities(): CapabilityContextValue;
14
14
  export interface CapabilityGateProps {
15
15
  /** Single capability required to render children. */
@@ -24,6 +24,6 @@ export interface CapabilityGateProps {
24
24
  invert?: boolean;
25
25
  children: React.ReactNode;
26
26
  }
27
- export declare function CapabilityGate({ require, all, any, fallback, invert, children }: CapabilityGateProps): import("react/jsx-runtime").JSX.Element;
27
+ export declare function CapabilityGate({ require, all, any, fallback, invert, children }: CapabilityGateProps): React.JSX.Element;
28
28
  export {};
29
29
  //# sourceMappingURL=capability-gate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"capability-gate.d.ts","sourceRoot":"","sources":["../src/capability-gate.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA6C,MAAM,OAAO,CAAA;AAEjE,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEpF,UAAU,sBAAsB;IAC5B,GAAG,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAA;IACpC,GAAG,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,OAAO,CAAA;IACxC,GAAG,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,OAAO,CAAA;CAC3C;AAQD,MAAM,WAAW,uBAAuB;IACpC,YAAY,EAAE,aAAa,CAAA;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAQD,wBAAgB,kBAAkB,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,uBAAuB,2CAUrF;AAED,wBAAgB,eAAe,2BAE9B;AAED,MAAM,WAAW,mBAAmB;IAChC,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,sEAAsE;IACtE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAED,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,QAAe,EAAE,MAAc,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CAQnH"}
1
+ {"version":3,"file":"capability-gate.d.ts","sourceRoot":"","sources":["../src/capability-gate.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA6C,MAAM,OAAO,CAAA;AAEjE,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEpF,UAAU,sBAAsB;IAC5B,GAAG,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAA;IACpC,GAAG,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,OAAO,CAAA;IACxC,GAAG,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,OAAO,CAAA;CAC3C;AAQD,MAAM,WAAW,uBAAuB;IACpC,YAAY,EAAE,aAAa,CAAA;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAQD,wBAAgB,kBAAkB,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,uBAAuB,qBAUrF;AAED,wBAAgB,eAAe,2BAE9B;AAED,MAAM,WAAW,mBAAmB;IAChC,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,sEAAsE;IACtE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAED,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,QAAe,EAAE,MAAc,EAAE,QAAQ,EAAE,EAAE,mBAAmB,qBAQnH"}
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  export interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {
3
3
  value?: number;
4
4
  }
5
- export declare function Progress({ value, className, ...props }: ProgressProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function Progress({ value, className, ...props }: ProgressProps): React.JSX.Element;
6
6
  export interface RadioGroupProps {
7
7
  value: string;
8
8
  onValueChange: (value: string) => void;
@@ -10,14 +10,14 @@ export interface RadioGroupProps {
10
10
  children: React.ReactNode;
11
11
  name?: string;
12
12
  }
13
- export declare function RadioGroup({ value, onValueChange, className, children, name }: RadioGroupProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function RadioGroup({ value, onValueChange, className, children, name }: RadioGroupProps): React.JSX.Element;
14
14
  export interface RadioGroupItemProps {
15
15
  value: string;
16
16
  id?: string;
17
17
  className?: string;
18
18
  disabled?: boolean;
19
19
  }
20
- export declare function RadioGroupItem({ value, id, className, disabled }: RadioGroupItemProps): import("react/jsx-runtime").JSX.Element;
20
+ export declare function RadioGroupItem({ value, id, className, disabled }: RadioGroupItemProps): React.JSX.Element;
21
21
  export interface CalendarProps {
22
22
  mode?: 'single';
23
23
  selected?: Date;
@@ -25,5 +25,5 @@ export interface CalendarProps {
25
25
  locale?: any;
26
26
  className?: string;
27
27
  }
28
- export declare function Calendar({ selected, onSelect, className }: CalendarProps): import("react/jsx-runtime").JSX.Element;
28
+ export declare function Calendar({ selected, onSelect, className }: CalendarProps): React.JSX.Element;
29
29
  //# sourceMappingURL=_primitives.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_primitives.d.ts","sourceRoot":"","sources":["../../src/dialogs/_primitives.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACvE,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAS,EAAE,SAAc,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,2CAiB9E;AAWD,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,SAAc,EAAE,QAAQ,EAAE,IAAoB,EAAE,EAAE,eAAe,2CAMnH;AAED,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,SAAc,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CAgB1F;AAQD,MAAM,WAAW,aAAa;IAC1B,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,QAAQ,CAAC,EAAE,IAAI,CAAA;IACf,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,KAAK,IAAI,CAAA;IAC3C,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAc,EAAE,EAAE,aAAa,2CAkB7E"}
1
+ {"version":3,"file":"_primitives.d.ts","sourceRoot":"","sources":["../../src/dialogs/_primitives.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACvE,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAS,EAAE,SAAc,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,qBAiB9E;AAWD,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,SAAc,EAAE,QAAQ,EAAE,IAAoB,EAAE,EAAE,eAAe,qBAMnH;AAED,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,SAAc,EAAE,QAAQ,EAAE,EAAE,mBAAmB,qBAgB1F;AAQD,MAAM,WAAW,aAAa;IAC1B,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,QAAQ,CAAC,EAAE,IAAI,CAAA;IACf,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,KAAK,IAAI,CAAA;IAC3C,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAc,EAAE,EAAE,aAAa,qBAkB7E"}
@@ -1,3 +1,3 @@
1
1
  import type { CreateRecordDialogProps } from './types';
2
- export declare function CreateRecordDialog({ modelKey, open, onOpenChange, recordId, endpoint, schema, defaults, onCreate, onUpdate, onSaved, }: CreateRecordDialogProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function CreateRecordDialog({ modelKey, open, onOpenChange, recordId, endpoint, schema, defaults, onCreate, onUpdate, onSaved, }: CreateRecordDialogProps): import("react").JSX.Element;
3
3
  //# sourceMappingURL=create-record-dialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-record-dialog.d.ts","sourceRoot":"","sources":["../../src/dialogs/create-record-dialog.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAEtD,wBAAgB,kBAAkB,CAAC,EAC/B,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,OAAO,GACV,EAAE,uBAAuB,2CAiBzB"}
1
+ {"version":3,"file":"create-record-dialog.d.ts","sourceRoot":"","sources":["../../src/dialogs/create-record-dialog.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAEtD,wBAAgB,kBAAkB,CAAC,EAC/B,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,OAAO,GACV,EAAE,uBAAuB,+BAiBzB"}
@@ -44,5 +44,5 @@ export interface DynamicRecordDialogProps {
44
44
  */
45
45
  onEdit?: () => void;
46
46
  }
47
- export declare function DynamicRecordDialog({ open, onOpenChange, mode, model, recordId, endpoint, onSaved, onCreate, onUpdate, defaults, schema, onDelete, onEdit, }: DynamicRecordDialogProps): import("react/jsx-runtime").JSX.Element;
47
+ export declare function DynamicRecordDialog({ open, onOpenChange, mode, model, recordId, endpoint, onSaved, onCreate, onUpdate, defaults, schema, onDelete, onEdit, }: DynamicRecordDialogProps): import("react").JSX.Element;
48
48
  //# sourceMappingURL=dynamic-record.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-record.d.ts","sourceRoot":"","sources":["../../src/dialogs/dynamic-record.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAyF1C,MAAM,WAAW,wBAAwB;IACrC,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAA;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IAClF;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IACpG;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC9B;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AAwDD,wBAAgB,mBAAmB,CAAC,EAChC,IAAI,EACJ,YAAY,EACZ,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,MAAM,GACT,EAAE,wBAAwB,2CAsP1B"}
1
+ {"version":3,"file":"dynamic-record.d.ts","sourceRoot":"","sources":["../../src/dialogs/dynamic-record.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AA0F1C,MAAM,WAAW,wBAAwB;IACrC,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAA;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IAClF;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IACpG;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC9B;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AA0DD,wBAAgB,mBAAmB,CAAC,EAChC,IAAI,EACJ,YAAY,EACZ,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,MAAM,GACT,EAAE,wBAAwB,+BAsP1B"}
@@ -15,6 +15,7 @@ import { useApi } from '../api-context';
15
15
  import { DynamicSelectField } from '../dynamic-select-field';
16
16
  import { getFieldRef } from '../dynamic-form-schema';
17
17
  import { normalizeNilUuid } from '../nil-uuid';
18
+ import { humanizeToken } from '../dynamic-columns-helpers';
18
19
  function resolvePath(obj, path) {
19
20
  return path.split('.').reduce((acc, part) => acc?.[part], obj);
20
21
  }
@@ -37,7 +38,9 @@ function formatDisplayValue(rawValue, field) {
37
38
  }
38
39
  if (field.type === 'select' && field.options?.length) {
39
40
  const match = field.options.find(o => o.value === String(value));
40
- return match?.label ?? String(value);
41
+ // Matched option label wins (localized); humanize the raw token only
42
+ // when no declared option matches the value.
43
+ return match?.label ?? humanizeToken(value);
41
44
  }
42
45
  return String(value);
43
46
  }
@@ -7,6 +7,6 @@ interface ExportDialogProps {
7
7
  currentFilters?: Record<string, any>;
8
8
  hasActiveFilters?: boolean;
9
9
  }
10
- export declare function ExportDialog({ open, onOpenChange, model, metadata, currentFilters, hasActiveFilters, }: ExportDialogProps): import("react/jsx-runtime").JSX.Element;
10
+ export declare function ExportDialog({ open, onOpenChange, model, metadata, currentFilters, hasActiveFilters, }: ExportDialogProps): import("react").JSX.Element;
11
11
  export {};
12
12
  //# sourceMappingURL=export.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/dialogs/export.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAG7C,UAAU,iBAAiB;IACvB,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,aAAa,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACpC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,wBAAgB,YAAY,CAAC,EACzB,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,GACnB,EAAE,iBAAiB,2CA0SnB"}
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/dialogs/export.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAG7C,UAAU,iBAAiB;IACvB,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,aAAa,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACpC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,wBAAgB,YAAY,CAAC,EACzB,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,GACnB,EAAE,iBAAiB,+BA0SnB"}
@@ -6,6 +6,6 @@ interface ImportDialogProps {
6
6
  metadata: TableMetadata;
7
7
  onImported?: () => void;
8
8
  }
9
- export declare function ImportDialog({ open, onOpenChange, model, metadata, onImported, }: ImportDialogProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function ImportDialog({ open, onOpenChange, model, metadata, onImported, }: ImportDialogProps): import("react").JSX.Element;
10
10
  export {};
11
11
  //# sourceMappingURL=import.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/dialogs/import.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAG7C,UAAU,iBAAiB;IACvB,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,aAAa,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;CAC1B;AAoBD,wBAAgB,YAAY,CAAC,EACzB,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,UAAU,GACb,EAAE,iBAAiB,2CAwVnB"}
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/dialogs/import.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAG7C,UAAU,iBAAiB;IACvB,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,aAAa,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;CAC1B;AAoBD,wBAAgB,YAAY,CAAC,EACzB,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,UAAU,GACb,EAAE,iBAAiB,+BAwVnB"}
@@ -1,3 +1,3 @@
1
1
  import type { ViewRecordDialogProps } from './types';
2
- export declare function ViewRecordDialog({ modelKey, open, onOpenChange, recordId, endpoint, schema, onEdit, onDelete, }: ViewRecordDialogProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function ViewRecordDialog({ modelKey, open, onOpenChange, recordId, endpoint, schema, onEdit, onDelete, }: ViewRecordDialogProps): import("react").JSX.Element;
3
3
  //# sourceMappingURL=view-record-dialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"view-record-dialog.d.ts","sourceRoot":"","sources":["../../src/dialogs/view-record-dialog.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAEpD,wBAAgB,gBAAgB,CAAC,EAC7B,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,EACN,QAAQ,GACX,EAAE,qBAAqB,2CAcvB"}
1
+ {"version":3,"file":"view-record-dialog.d.ts","sourceRoot":"","sources":["../../src/dialogs/view-record-dialog.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAEpD,wBAAgB,gBAAgB,CAAC,EAC7B,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,EACN,QAAQ,GACX,EAAE,qBAAqB,+BAcvB"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Scalable safety net for enum/status/option values that have **no matching
3
+ * declared option**. Turns a raw machine token into a readable label so a cell
4
+ * never leaks `in_progress` / `out-of-stock` verbatim:
5
+ *
6
+ * - `in_progress` → `In Progress` (snake_case)
7
+ * - `out-of-stock` → `Out Of Stock` (kebab-case)
8
+ * - `payment.failed` → `Payment Failed` (dotted)
9
+ * - `sale` → `Sale` (single word)
10
+ * - `pos` → `POS`, `sku_count` → `SKU Count` (acronyms uppercased)
11
+ *
12
+ * This is a FALLBACK only. The localized source of truth is the `options` an
13
+ * addon declares; callers must prefer a matched `option.label` and only reach
14
+ * for `humanizeToken` when nothing matched.
15
+ *
16
+ * Values that don't look like an enum token are returned unchanged: anything
17
+ * already containing whitespace (free text), overly long strings, UUIDs, and
18
+ * non-strings. This keeps it safe to call on arbitrary cell values.
19
+ */
20
+ export declare function humanizeToken(value: unknown): string;
21
+ //# sourceMappingURL=dynamic-columns-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-columns-helpers.d.ts","sourceRoot":"","sources":["../src/dynamic-columns-helpers.ts"],"names":[],"mappings":"AAqBA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiBpD"}
@@ -0,0 +1,59 @@
1
+ // Pure, DOM-free helpers for the dynamic-column / record / relation renderers.
2
+ // Kept in their own module so they unit-test in node (no React, no
3
+ // metacore-ui primitives) and the same logic is shared across every cell
4
+ // renderer.
5
+ // Short, case-insensitive list of tokens that read better fully capitalized
6
+ // than Title-Cased. Intentionally tiny: this is a last-resort fallback, not a
7
+ // dictionary. Addons localize real labels via the column `options`.
8
+ const ACRONYMS = {
9
+ pos: 'POS',
10
+ sku: 'SKU',
11
+ id: 'ID',
12
+ url: 'URL',
13
+ api: 'API',
14
+ iva: 'IVA',
15
+ rfc: 'RFC',
16
+ };
17
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
18
+ /**
19
+ * Scalable safety net for enum/status/option values that have **no matching
20
+ * declared option**. Turns a raw machine token into a readable label so a cell
21
+ * never leaks `in_progress` / `out-of-stock` verbatim:
22
+ *
23
+ * - `in_progress` → `In Progress` (snake_case)
24
+ * - `out-of-stock` → `Out Of Stock` (kebab-case)
25
+ * - `payment.failed` → `Payment Failed` (dotted)
26
+ * - `sale` → `Sale` (single word)
27
+ * - `pos` → `POS`, `sku_count` → `SKU Count` (acronyms uppercased)
28
+ *
29
+ * This is a FALLBACK only. The localized source of truth is the `options` an
30
+ * addon declares; callers must prefer a matched `option.label` and only reach
31
+ * for `humanizeToken` when nothing matched.
32
+ *
33
+ * Values that don't look like an enum token are returned unchanged: anything
34
+ * already containing whitespace (free text), overly long strings, UUIDs, and
35
+ * non-strings. This keeps it safe to call on arbitrary cell values.
36
+ */
37
+ export function humanizeToken(value) {
38
+ if (typeof value !== 'string')
39
+ return value == null ? '' : String(value);
40
+ const raw = value;
41
+ const trimmed = raw.trim();
42
+ // Already human (has spaces), empty, or free-form long text → leave as-is.
43
+ if (trimmed === '' || /\s/.test(trimmed) || trimmed.length > 40)
44
+ return raw;
45
+ // UUIDs (unresolved FKs) contain dashes but are not enum tokens.
46
+ if (UUID_RE.test(trimmed))
47
+ return raw;
48
+ const parts = trimmed.split(/[_.\-]+/).filter(Boolean);
49
+ if (parts.length === 0)
50
+ return raw;
51
+ return parts
52
+ .map((part) => {
53
+ const lower = part.toLowerCase();
54
+ if (ACRONYMS[lower])
55
+ return ACRONYMS[lower];
56
+ return lower.charAt(0).toUpperCase() + lower.slice(1);
57
+ })
58
+ .join(' ');
59
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-columns.d.ts","sourceRoot":"","sources":["../src/dynamic-columns.tsx"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAAiB,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE9D,OAAO,KAAK,EAER,iBAAiB,EACpB,MAAM,wBAAwB,CAAA;AAE/B,qEAAqE;AACrE,MAAM,WAAW,qBAAqB;IAClC;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACtC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACtB;AAgGD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,0BAA0B,GAAI,QAAQ,GAAG,EAAE,KAAK,GAAG,KAAG,OAMlE,CAAA;AAwHD;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GAAI,KAAK,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,KAAG,MAGnE,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,gBAAgB,EAAE,KAAK,GAAG,KAAG,MAWtE,CAAA;AAiED;;;;GAIG;AACH,wBAAgB,4BAA4B,CACxC,OAAO,GAAE,qBAA0B,GACpC,iBAAiB,CAmmBnB;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,iBACL,CAAA"}
1
+ {"version":3,"file":"dynamic-columns.d.ts","sourceRoot":"","sources":["../src/dynamic-columns.tsx"],"names":[],"mappings":"AAgDA,OAAO,KAAK,EAAiB,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE9D,OAAO,KAAK,EAER,iBAAiB,EACpB,MAAM,wBAAwB,CAAA;AAE/B,qEAAqE;AACrE,MAAM,WAAW,qBAAqB;IAClC;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACtC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACtB;AAgGD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,0BAA0B,GAAI,QAAQ,GAAG,EAAE,KAAK,GAAG,KAAG,OAMlE,CAAA;AA0HD;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GAAI,KAAK,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,KAAG,MAGnE,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,gBAAgB,EAAE,KAAK,GAAG,KAAG,MAWtE,CAAA;AAiED;;;;GAIG;AACH,wBAAgB,4BAA4B,CACxC,OAAO,GAAE,qBAA0B,GACpC,iBAAiB,CAsmBnB;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,iBACL,CAAA"}
@@ -21,6 +21,7 @@ import { Avatar, AvatarFallback, AvatarImage, Badge, Button, Checkbox, DropdownM
21
21
  import { DataTableColumnHeader, FilterableColumnHeader, } from '@asteby/metacore-ui/data-table';
22
22
  import { generateBadgeStyles, getInitials, optionColor, relationChipStyles, } from '@asteby/metacore-ui/lib';
23
23
  import { Progress } from './dialogs/_primitives';
24
+ import { humanizeToken } from './dynamic-columns-helpers';
24
25
  import { OptionsContext } from './options-context';
25
26
  import { DynamicIcon } from './dynamic-icon';
26
27
  import { isNilUuid, normalizeNilUuid } from './nil-uuid';
@@ -184,7 +185,9 @@ const BadgeWithEndpointOptions = ({ endpoint, value }) => {
184
185
  const option = options.find((opt) => opt.value === value);
185
186
  if (option)
186
187
  return _jsx(OptionBadge, { option: option, fallback: String(value) });
187
- return _jsx(Badge, { variant: "outline", children: String(value) });
188
+ // No declared option matched humanize the raw token as a safety net so a
189
+ // cell never shows `in_progress` verbatim (option.label still wins above).
190
+ return _jsx(Badge, { variant: "outline", children: humanizeToken(value) });
188
191
  };
189
192
  /**
190
193
  * Resolves the relation sibling object a backend serves alongside an FK column.
@@ -315,16 +318,17 @@ export function makeDefaultGetDynamicColumns(helpers = {}) {
315
318
  const option = col.options.find((o) => o.value === String(value));
316
319
  if (option)
317
320
  return _jsx(OptionBadge, { option: option, fallback: String(value) });
318
- return _jsx(Badge, { variant: "outline", children: String(value) });
321
+ return _jsx(Badge, { variant: "outline", children: humanizeToken(value) });
319
322
  }
320
323
  if (renderAs === 'relation-badge-list') {
321
324
  return renderRelationBadges(value, col);
322
325
  }
323
- // Generic badge (no options/endpoint) — still pill it.
326
+ // Generic badge (no options/endpoint) — still pill it, and
327
+ // humanize raw enum tokens (no option exists to localize it).
324
328
  if (renderAs === 'badge') {
325
329
  if (!value && value !== 0)
326
330
  return _jsx(EmptyCell, {});
327
- return _jsx(Badge, { variant: "outline", children: String(value) });
331
+ return _jsx(Badge, { variant: "outline", children: humanizeToken(value) });
328
332
  }
329
333
  // Status — semantic color by value, options color wins.
330
334
  if (renderAs === 'status') {
@@ -337,7 +341,9 @@ export function makeDefaultGetDynamicColumns(helpers = {}) {
337
341
  const isDark = typeof document !== 'undefined' &&
338
342
  document.documentElement.classList.contains('dark');
339
343
  const styles = generateBadgeStyles(statusColorFor(sv), { isDark });
340
- return (_jsx(Badge, { variant: "outline", className: "border-0 capitalize", style: styles, children: sv }));
344
+ // No declared option humanize the status token so
345
+ // `in_progress` reads as "In Progress" instead of raw.
346
+ return (_jsx(Badge, { variant: "outline", className: "border-0", style: styles, children: humanizeToken(sv) }));
341
347
  }
342
348
  // Resolved FK relation chip. Triggers on an explicit
343
349
  // `cellStyle: 'relation'` or on any column carrying a `ref`
@@ -361,7 +367,7 @@ export function makeDefaultGetDynamicColumns(helpers = {}) {
361
367
  const option = col.options.find((o) => o.value === String(value));
362
368
  if (option)
363
369
  return _jsx(OptionBadge, { option: option, fallback: String(value) });
364
- return _jsx(Badge, { variant: "outline", children: String(value) });
370
+ return _jsx(Badge, { variant: "outline", children: humanizeToken(value) });
365
371
  }
366
372
  switch (renderAs) {
367
373
  case 'date': {
@@ -45,5 +45,5 @@ export interface DynamicCRUDPageProps {
45
45
  * `<DynamicCRUDPage model="..." />` per route and the SDK takes care of
46
46
  * metadata fetch, dialogs and toolbar.
47
47
  */
48
- export declare function DynamicCRUDPage(props: DynamicCRUDPageProps): import("react/jsx-runtime").JSX.Element;
48
+ export declare function DynamicCRUDPage(props: DynamicCRUDPageProps): React.JSX.Element;
49
49
  //# sourceMappingURL=dynamic-crud-page.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-crud-page.d.ts","sourceRoot":"","sources":["../src/dynamic-crud-page.tsx"],"names":[],"mappings":"AAwBA,OAAO,KAKN,MAAM,OAAO,CAAA;AAYd,MAAM,WAAW,sBAAsB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;mDAC+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AASD,MAAM,WAAW,sBAAsB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,oBAAoB;IACjC,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAA;IACb,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,sBAAsB,CAAA;IAC7B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC9B,8DAA8D;IAC9D,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC/B,sDAAsD;IACtD,OAAO,CAAC,EAAE,sBAAsB,CAAA;IAChC,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACxB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CA+L1D"}
1
+ {"version":3,"file":"dynamic-crud-page.d.ts","sourceRoot":"","sources":["../src/dynamic-crud-page.tsx"],"names":[],"mappings":"AAwBA,OAAO,KAKN,MAAM,OAAO,CAAA;AAYd,MAAM,WAAW,sBAAsB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;mDAC+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AASD,MAAM,WAAW,sBAAsB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,oBAAoB;IACjC,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAA;IACb,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,sBAAsB,CAAA;IAC7B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC9B,8DAA8D;IAC9D,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC/B,sDAAsD;IACtD,OAAO,CAAC,EAAE,sBAAsB,CAAA;IAChC,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACxB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,qBA+L1D"}
@@ -4,6 +4,6 @@ export interface DynamicDateFieldProps {
4
4
  value: any;
5
5
  onChange: (v: any) => void;
6
6
  }
7
- export declare function DynamicDateField({ field, value, onChange }: DynamicDateFieldProps): import("react/jsx-runtime").JSX.Element;
7
+ export declare function DynamicDateField({ field, value, onChange }: DynamicDateFieldProps): import("react").JSX.Element;
8
8
  export default DynamicDateField;
9
9
  //# sourceMappingURL=dynamic-date-field.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-date-field.d.ts","sourceRoot":"","sources":["../src/dynamic-date-field.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,MAAM,WAAW,qBAAqB;IAClC,KAAK,EAAE,cAAc,CAAA;IACrB,KAAK,EAAE,GAAG,CAAA;IACV,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;CAC7B;AA+BD,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,qBAAqB,2CAkCjF;AAED,eAAe,gBAAgB,CAAA"}
1
+ {"version":3,"file":"dynamic-date-field.d.ts","sourceRoot":"","sources":["../src/dynamic-date-field.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,MAAM,WAAW,qBAAqB;IAClC,KAAK,EAAE,cAAc,CAAA;IACrB,KAAK,EAAE,GAAG,CAAA;IACV,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;CAC7B;AA+BD,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,qBAAqB,+BAkCjF;AAED,eAAe,gBAAgB,CAAA"}
@@ -14,5 +14,5 @@ export interface DynamicFormProps {
14
14
  cancelLabel?: string;
15
15
  disabled?: boolean;
16
16
  }
17
- export declare function DynamicForm({ fields, initialValues, onSubmit, onCancel, submitLabel, cancelLabel, disabled, }: DynamicFormProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function DynamicForm({ fields, initialValues, onSubmit, onCancel, submitLabel, cancelLabel, disabled, }: DynamicFormProps): import("react").JSX.Element;
18
18
  //# sourceMappingURL=dynamic-form.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-form.d.ts","sourceRoot":"","sources":["../src/dynamic-form.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,EACH,cAAc,EACd,aAAa,EAGhB,MAAM,uBAAuB,CAAA;AAO9B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,CAAA;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/D,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,wBAAgB,WAAW,CAAC,EACxB,MAAM,EACN,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,WAAuB,EACvB,WAAwB,EACxB,QAAgB,GACnB,EAAE,gBAAgB,2CAkGlB"}
1
+ {"version":3,"file":"dynamic-form.d.ts","sourceRoot":"","sources":["../src/dynamic-form.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,EACH,cAAc,EACd,aAAa,EAGhB,MAAM,uBAAuB,CAAA;AAO9B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,CAAA;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/D,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,wBAAgB,WAAW,CAAC,EACxB,MAAM,EACN,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,WAAuB,EACvB,WAAwB,EACxB,QAAgB,GACnB,EAAE,gBAAgB,+BAkGlB"}
@@ -2,5 +2,5 @@ export interface DynamicIconProps {
2
2
  name: string;
3
3
  className?: string;
4
4
  }
5
- export declare function DynamicIcon({ name, className }: DynamicIconProps): import("react/jsx-runtime").JSX.Element | null;
5
+ export declare function DynamicIcon({ name, className }: DynamicIconProps): import("react").JSX.Element | null;
6
6
  //# sourceMappingURL=dynamic-icon.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-icon.d.ts","sourceRoot":"","sources":["../src/dynamic-icon.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,gBAAgB,kDAIhE"}
1
+ {"version":3,"file":"dynamic-icon.d.ts","sourceRoot":"","sources":["../src/dynamic-icon.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,gBAAgB,sCAIhE"}
@@ -5,5 +5,5 @@ export interface DynamicLineItemsProps {
5
5
  onChange: (rows: any[]) => void;
6
6
  disabled?: boolean;
7
7
  }
8
- export declare function DynamicLineItems({ field, value, onChange, disabled }: DynamicLineItemsProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function DynamicLineItems({ field, value, onChange, disabled }: DynamicLineItemsProps): import("react").JSX.Element;
9
9
  //# sourceMappingURL=dynamic-line-items.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-line-items.d.ts","sourceRoot":"","sources":["../src/dynamic-line-items.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAW7C,MAAM,WAAW,qBAAqB;IAClC,KAAK,EAAE,cAAc,CAAA;IACrB,KAAK,EAAE,GAAG,EAAE,GAAG,SAAS,CAAA;IACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAA;CACrB;AAkBD,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAgB,EAAE,EAAE,qBAAqB,2CAiJnG"}
1
+ {"version":3,"file":"dynamic-line-items.d.ts","sourceRoot":"","sources":["../src/dynamic-line-items.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAW7C,MAAM,WAAW,qBAAqB;IAClC,KAAK,EAAE,cAAc,CAAA;IACrB,KAAK,EAAE,GAAG,EAAE,GAAG,SAAS,CAAA;IACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAA;CACrB;AAkBD,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAgB,EAAE,EAAE,qBAAqB,+BAiJnG"}
@@ -1,5 +1,7 @@
1
1
  import type { ActionFieldDef, ColumnDefinition, TableMetadata } from './types';
2
2
  export type DynamicRelationKind = 'one_to_many' | 'many_to_many';
3
+ export declare function objectLabel(value: unknown): string | undefined;
4
+ export declare function formatRelationCell(row: Record<string, unknown>, col: ColumnDefinition): string;
3
5
  export interface PivotRowLike {
4
6
  id?: string | number | null;
5
7
  [k: string]: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-relation-helpers.d.ts","sourceRoot":"","sources":["../src/dynamic-relation-helpers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE9E,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,cAAc,CAAA;AAEhE,MAAM,WAAW,YAAY;IACzB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAC3B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC1B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAC3B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBxB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAChC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAGrB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACpC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,IAAI,GAAG,SAAS,EAC3D,UAAU,EAAE,MAAM,GACnB,cAAc,EAAE,CAoBlB;AAkBD;;;;GAIG;AACH,wBAAgB,cAAc,CAC1B,GAAG,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,SAAS,EAChD,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACnB,MAAM,CAKR;AAMD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAcrB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACpC,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,IAAI,GAAG,SAAS,EACzD,aAAa,EAAE,MAAM,GACtB,MAAM,EAAE,CASV;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,IAAI,GAAG,SAAS,EACzD,aAAa,EAAE,MAAM,GACtB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAU9B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CACzB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAC3B,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAC5B;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAYzC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC3B,GAAG,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,EACrC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,IAAI,GAAG,SAAS,GAC5D,MAAM,CAiBR"}
1
+ {"version":3,"file":"dynamic-relation-helpers.d.ts","sourceRoot":"","sources":["../src/dynamic-relation-helpers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAiB9E,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,cAAc,CAAA;AAMhE,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAK9D;AAUD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAkC9F;AAED,MAAM,WAAW,YAAY;IACzB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAC3B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC1B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAC3B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBxB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAChC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAGrB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACpC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,IAAI,GAAG,SAAS,EAC3D,UAAU,EAAE,MAAM,GACnB,cAAc,EAAE,CAoBlB;AAkBD;;;;GAIG;AACH,wBAAgB,cAAc,CAC1B,GAAG,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,SAAS,EAChD,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACnB,MAAM,CAKR;AAMD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAcrB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACpC,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,IAAI,GAAG,SAAS,EACzD,aAAa,EAAE,MAAM,GACtB,MAAM,EAAE,CASV;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,IAAI,GAAG,SAAS,EACzD,aAAa,EAAE,MAAM,GACtB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAU9B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CACzB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAC3B,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAC5B;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAYzC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC3B,GAAG,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,EACrC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,IAAI,GAAG,SAAS,GAC5D,MAAM,CAiBR"}
@@ -1,3 +1,72 @@
1
+ import { isNilUuid } from './nil-uuid';
2
+ import { humanizeToken } from './dynamic-columns-helpers';
3
+ // An enum-like column renders a single token value (status/select/option/badge)
4
+ // rather than free text, so an unmatched value should be humanized, not leaked.
5
+ function isEnumLikeColumn(col) {
6
+ const renderAs = col.cellStyle ?? col.type;
7
+ return (renderAs === 'select' ||
8
+ renderAs === 'option' ||
9
+ renderAs === 'status' ||
10
+ renderAs === 'badge' ||
11
+ !!col.options?.length);
12
+ }
13
+ // Pulls a human label off a resolved relation/user object a backend serves:
14
+ // `{ value, label }` (FK sibling), `{ name, … }` (user object such as
15
+ // created_by) or `{ title }`. Returns undefined for plain/empty objects so the
16
+ // caller falls through to its empty marker instead of leaking raw JSON.
17
+ export function objectLabel(value) {
18
+ if (!value || typeof value !== 'object' || Array.isArray(value))
19
+ return undefined;
20
+ const obj = value;
21
+ const label = obj.label ?? obj.name ?? obj.title;
22
+ return label != null && label !== '' ? String(label) : undefined;
23
+ }
24
+ // formatRelationCell renders one DynamicRelation row cell. Beyond coercing
25
+ // scalars it resolves the pro siblings a backend serves so a line-item shows
26
+ // "Test", not a raw uuid or `{"label":"Test",…}` JSON:
27
+ // 1. an FK column (`product_id`) → the sibling `row.product = { value, label }`
28
+ // (the key with the trailing `_id` stripped), preferring its label/name;
29
+ // 2. a value that is itself a resolved object (`{ value, label }` / a user
30
+ // `{ name }`) → its label/name, never `JSON.stringify`;
31
+ // 3. the nil/zero UUID (unset nullable FK) → the empty marker "—".
32
+ export function formatRelationCell(row, col) {
33
+ const value = row[col.key];
34
+ // Prefer the backend-resolved FK sibling keyed by the column key with the
35
+ // trailing `_id` stripped (`product_id` → `row.product`).
36
+ if (col.key.endsWith('_id')) {
37
+ const sibling = row[col.key.slice(0, -3)];
38
+ const siblingLabel = objectLabel(sibling) ??
39
+ (typeof sibling === 'string' && sibling !== '' && !isNilUuid(sibling) ? sibling : undefined);
40
+ if (siblingLabel !== undefined)
41
+ return siblingLabel;
42
+ }
43
+ if (value === null || value === undefined)
44
+ return '—';
45
+ if (isNilUuid(value))
46
+ return '—';
47
+ if (typeof value === 'boolean')
48
+ return value ? '✓' : '—';
49
+ // The cell value is itself a resolved relation/user object → its label/name.
50
+ const inlineLabel = objectLabel(value);
51
+ if (inlineLabel !== undefined)
52
+ return inlineLabel;
53
+ // An object with no usable label (would JSON.stringify) → empty marker.
54
+ if (typeof value === 'object')
55
+ return '—';
56
+ const text = String(value);
57
+ if (text === '')
58
+ return '—';
59
+ // Enum/status/option columns: prefer the declared option label (localized
60
+ // source of truth), then humanize the raw token as a fallback so a status
61
+ // never reads as `in_progress`. Plain text columns are left untouched.
62
+ if (isEnumLikeColumn(col)) {
63
+ const match = col.options?.find((o) => String(o.value) === text);
64
+ if (match)
65
+ return match.label;
66
+ return humanizeToken(text);
67
+ }
68
+ return text;
69
+ }
1
70
  /**
2
71
  * Builds the query params used by `<DynamicRelation kind="one_to_many">` to
3
72
  * scope a child list to a single parent record. Mirrors the