@object-ui/components 6.2.2 → 7.0.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 (198) hide show
  1. package/CHANGELOG.md +184 -0
  2. package/README.md +0 -13
  3. package/dist/SchemaRenderer.d.ts +4 -0
  4. package/dist/{packages/components/src/custom → custom}/action-param-dialog.d.ts +1 -1
  5. package/dist/{packages/components/src/custom → custom}/button-group.d.ts +3 -3
  6. package/dist/{packages/components/src/custom → custom}/combobox.d.ts +2 -1
  7. package/dist/{packages/components/src/custom → custom}/config-field-renderer.d.ts +9 -1
  8. package/dist/{packages/components/src/custom → custom}/config-panel-renderer.d.ts +1 -1
  9. package/dist/{packages/components/src/custom → custom}/config-row.d.ts +1 -1
  10. package/dist/{packages/components/src/custom → custom}/date-picker.d.ts +2 -1
  11. package/dist/{packages/components/src/custom → custom}/empty.d.ts +7 -7
  12. package/dist/{packages/components/src/custom → custom}/export-progress-dialog.d.ts +20 -1
  13. package/dist/{packages/components/src/custom → custom}/filter-builder.d.ts +3 -2
  14. package/dist/{packages/components/src/custom → custom}/grouping-editor.d.ts +2 -1
  15. package/dist/{packages/components/src/custom → custom}/item.d.ts +10 -10
  16. package/dist/{packages/components/src/custom → custom}/kbd.d.ts +2 -2
  17. package/dist/{packages/components/src/custom → custom}/section-header.d.ts +1 -1
  18. package/dist/{packages/components/src/custom → custom}/shimmer-skeleton.d.ts +1 -1
  19. package/dist/{packages/components/src/custom → custom}/sort-builder.d.ts +2 -1
  20. package/dist/{packages/components/src/custom → custom}/spinner.d.ts +1 -1
  21. package/dist/{packages/components/src/custom → custom}/view-skeleton.d.ts +6 -6
  22. package/dist/{packages/components/src/custom → custom}/view-states.d.ts +3 -3
  23. package/dist/{packages/components/src/debug → debug}/DebugPanel.d.ts +2 -2
  24. package/dist/{packages/components/src/hooks → hooks}/related-count-store.d.ts +1 -0
  25. package/dist/{packages/components/src/hooks → hooks}/use-export-job.d.ts +1 -1
  26. package/dist/index.css +275 -163
  27. package/dist/index.d.ts +19 -2
  28. package/dist/index.js +3405 -2725
  29. package/dist/index.umd.cjs +6 -6
  30. package/dist/{packages/components/src/renderers → renderers}/action/action-bar.d.ts +1 -1
  31. package/dist/{packages/components/src/renderers → renderers}/action/action-button.d.ts +1 -1
  32. package/dist/{packages/components/src/renderers → renderers}/action/action-group.d.ts +1 -1
  33. package/dist/{packages/components/src/renderers → renderers}/action/action-icon.d.ts +1 -1
  34. package/dist/{packages/components/src/renderers → renderers}/action/action-menu.d.ts +1 -1
  35. package/dist/renderers/basic/data-list.d.ts +19 -0
  36. package/dist/renderers/basic/metadata-viewer.d.ts +23 -0
  37. package/dist/renderers/data-display/table.d.ts +2 -0
  38. package/dist/{packages/components/src/renderers → renderers}/layout/page.d.ts +1 -1
  39. package/dist/renderers/placeholders.d.ts +3 -0
  40. package/dist/{packages/components/src/share → share}/ShareDialog.d.ts +2 -2
  41. package/dist/{packages/components/src/ui → ui}/alert-dialog.d.ts +2 -2
  42. package/dist/{packages/components/src/ui → ui}/badge.d.ts +1 -1
  43. package/dist/{packages/components/src/ui → ui}/breadcrumb.d.ts +2 -2
  44. package/dist/{packages/components/src/ui → ui}/calendar.d.ts +2 -2
  45. package/dist/{packages/components/src/ui → ui}/chart.d.ts +1 -1
  46. package/dist/{packages/components/src/ui → ui}/command.d.ts +22 -2
  47. package/dist/{packages/components/src/ui → ui}/context-menu.d.ts +1 -1
  48. package/dist/{packages/components/src/ui → ui}/dialog.d.ts +2 -2
  49. package/dist/{packages/components/src/ui → ui}/drawer.d.ts +3 -3
  50. package/dist/{packages/components/src/ui → ui}/dropdown-menu.d.ts +1 -1
  51. package/dist/{packages/components/src/ui → ui}/form.d.ts +6 -4
  52. package/dist/{packages/components/src/ui → ui}/menubar.d.ts +6 -6
  53. package/dist/{packages/components/src/ui → ui}/pagination.d.ts +5 -5
  54. package/dist/{packages/components/src/ui → ui}/resizable.d.ts +2 -2
  55. package/dist/{packages/components/src/ui → ui}/sheet.d.ts +2 -2
  56. package/dist/{packages/components/src/ui → ui}/skeleton.d.ts +1 -1
  57. package/dist/{packages/components/src/ui → ui}/sonner.d.ts +3 -3
  58. package/package.json +41 -48
  59. package/dist/packages/components/src/SchemaRenderer.d.ts +0 -3
  60. package/dist/packages/components/src/index.d.ts +0 -19
  61. package/dist/packages/components/src/renderers/data-display/table.d.ts +0 -8
  62. package/dist/packages/components/src/renderers/placeholders.d.ts +0 -9
  63. /package/dist/{packages/components/src/custom → custom}/RecordTitleChip.d.ts +0 -0
  64. /package/dist/{packages/components/src/custom → custom}/field.d.ts +0 -0
  65. /package/dist/{packages/components/src/custom → custom}/index.d.ts +0 -0
  66. /package/dist/{packages/components/src/custom → custom}/input-group.d.ts +0 -0
  67. /package/dist/{packages/components/src/custom → custom}/mobile-dialog-content.d.ts +0 -0
  68. /package/dist/{packages/components/src/custom → custom}/native-select.d.ts +0 -0
  69. /package/dist/{packages/components/src/custom → custom}/navigation-overlay.d.ts +0 -0
  70. /package/dist/{packages/components/src/custom → custom}/refresh-indicator.d.ts +0 -0
  71. /package/dist/{packages/components/src/debug → debug}/index.d.ts +0 -0
  72. /package/dist/{packages/components/src/hooks → hooks}/use-config-draft.d.ts +0 -0
  73. /package/dist/{packages/components/src/hooks → hooks}/use-mobile.d.ts +0 -0
  74. /package/dist/{packages/components/src/hooks → hooks}/use-resize-observer.d.ts +0 -0
  75. /package/dist/{packages/components/src/lib → lib}/lazy-icon.d.ts +0 -0
  76. /package/dist/{packages/components/src/lib → lib}/use-sync-external-store-shim.d.ts +0 -0
  77. /package/dist/{packages/components/src/lib → lib}/use-sync-external-store-with-selector-shim.d.ts +0 -0
  78. /package/dist/{packages/components/src/lib → lib}/utils.d.ts +0 -0
  79. /package/dist/{packages/components/src/renderers → renderers}/action/index.d.ts +0 -0
  80. /package/dist/{packages/components/src/renderers → renderers}/action/resolve-icon.d.ts +0 -0
  81. /package/dist/{packages/components/src/renderers → renderers}/basic/button-group.d.ts +0 -0
  82. /package/dist/{packages/components/src/renderers → renderers}/basic/div.d.ts +0 -0
  83. /package/dist/{packages/components/src/renderers → renderers}/basic/elements.d.ts +0 -0
  84. /package/dist/{packages/components/src/renderers → renderers}/basic/html.d.ts +0 -0
  85. /package/dist/{packages/components/src/renderers → renderers}/basic/icon.d.ts +0 -0
  86. /package/dist/{packages/components/src/renderers → renderers}/basic/image.d.ts +0 -0
  87. /package/dist/{packages/components/src/renderers → renderers}/basic/index.d.ts +0 -0
  88. /package/dist/{packages/components/src/renderers → renderers}/basic/navigation-menu.d.ts +0 -0
  89. /package/dist/{packages/components/src/renderers → renderers}/basic/pagination.d.ts +0 -0
  90. /package/dist/{packages/components/src/renderers → renderers}/basic/separator.d.ts +0 -0
  91. /package/dist/{packages/components/src/renderers → renderers}/basic/span.d.ts +0 -0
  92. /package/dist/{packages/components/src/renderers → renderers}/basic/text.d.ts +0 -0
  93. /package/dist/{packages/components/src/renderers → renderers}/complex/carousel.d.ts +0 -0
  94. /package/dist/{packages/components/src/renderers → renderers}/complex/data-table.d.ts +0 -0
  95. /package/dist/{packages/components/src/renderers → renderers}/complex/filter-builder.d.ts +0 -0
  96. /package/dist/{packages/components/src/renderers → renderers}/complex/index.d.ts +0 -0
  97. /package/dist/{packages/components/src/renderers → renderers}/complex/resizable.d.ts +0 -0
  98. /package/dist/{packages/components/src/renderers → renderers}/complex/scroll-area.d.ts +0 -0
  99. /package/dist/{packages/components/src/renderers → renderers}/complex/table.d.ts +0 -0
  100. /package/dist/{packages/components/src/renderers → renderers}/data-display/alert.d.ts +0 -0
  101. /package/dist/{packages/components/src/renderers → renderers}/data-display/avatar.d.ts +0 -0
  102. /package/dist/{packages/components/src/renderers → renderers}/data-display/badge.d.ts +0 -0
  103. /package/dist/{packages/components/src/renderers → renderers}/data-display/breadcrumb.d.ts +0 -0
  104. /package/dist/{packages/components/src/renderers → renderers}/data-display/index.d.ts +0 -0
  105. /package/dist/{packages/components/src/renderers → renderers}/data-display/kbd.d.ts +0 -0
  106. /package/dist/{packages/components/src/renderers → renderers}/data-display/list.d.ts +0 -0
  107. /package/dist/{packages/components/src/renderers → renderers}/data-display/statistic.d.ts +0 -0
  108. /package/dist/{packages/components/src/renderers → renderers}/data-display/tree-view.d.ts +0 -0
  109. /package/dist/{packages/components/src/renderers → renderers}/disclosure/accordion.d.ts +0 -0
  110. /package/dist/{packages/components/src/renderers → renderers}/disclosure/collapsible.d.ts +0 -0
  111. /package/dist/{packages/components/src/renderers → renderers}/disclosure/index.d.ts +0 -0
  112. /package/dist/{packages/components/src/renderers → renderers}/disclosure/toggle-group.d.ts +0 -0
  113. /package/dist/{packages/components/src/renderers → renderers}/feedback/empty.d.ts +0 -0
  114. /package/dist/{packages/components/src/renderers → renderers}/feedback/index.d.ts +0 -0
  115. /package/dist/{packages/components/src/renderers → renderers}/feedback/loading.d.ts +0 -0
  116. /package/dist/{packages/components/src/renderers → renderers}/feedback/progress.d.ts +0 -0
  117. /package/dist/{packages/components/src/renderers → renderers}/feedback/skeleton.d.ts +0 -0
  118. /package/dist/{packages/components/src/renderers → renderers}/feedback/sonner.d.ts +0 -0
  119. /package/dist/{packages/components/src/renderers → renderers}/feedback/spinner.d.ts +0 -0
  120. /package/dist/{packages/components/src/renderers → renderers}/feedback/toast.d.ts +0 -0
  121. /package/dist/{packages/components/src/renderers → renderers}/feedback/toaster.d.ts +0 -0
  122. /package/dist/{packages/components/src/renderers → renderers}/form/button.d.ts +0 -0
  123. /package/dist/{packages/components/src/renderers → renderers}/form/calendar.d.ts +0 -0
  124. /package/dist/{packages/components/src/renderers → renderers}/form/checkbox.d.ts +0 -0
  125. /package/dist/{packages/components/src/renderers → renderers}/form/combobox.d.ts +0 -0
  126. /package/dist/{packages/components/src/renderers → renderers}/form/command.d.ts +0 -0
  127. /package/dist/{packages/components/src/renderers → renderers}/form/date-picker.d.ts +0 -0
  128. /package/dist/{packages/components/src/renderers → renderers}/form/file-upload.d.ts +0 -0
  129. /package/dist/{packages/components/src/renderers → renderers}/form/form.d.ts +0 -0
  130. /package/dist/{packages/components/src/renderers → renderers}/form/index.d.ts +0 -0
  131. /package/dist/{packages/components/src/renderers → renderers}/form/input-otp.d.ts +0 -0
  132. /package/dist/{packages/components/src/renderers → renderers}/form/input.d.ts +0 -0
  133. /package/dist/{packages/components/src/renderers → renderers}/form/label.d.ts +0 -0
  134. /package/dist/{packages/components/src/renderers → renderers}/form/radio-group.d.ts +0 -0
  135. /package/dist/{packages/components/src/renderers → renderers}/form/select.d.ts +0 -0
  136. /package/dist/{packages/components/src/renderers → renderers}/form/slider.d.ts +0 -0
  137. /package/dist/{packages/components/src/renderers → renderers}/form/switch.d.ts +0 -0
  138. /package/dist/{packages/components/src/renderers → renderers}/form/textarea.d.ts +0 -0
  139. /package/dist/{packages/components/src/renderers → renderers}/form/toggle.d.ts +0 -0
  140. /package/dist/{packages/components/src/renderers → renderers}/index.d.ts +0 -0
  141. /package/dist/{packages/components/src/renderers → renderers}/layout/aspect-ratio.d.ts +0 -0
  142. /package/dist/{packages/components/src/renderers → renderers}/layout/card.d.ts +0 -0
  143. /package/dist/{packages/components/src/renderers → renderers}/layout/container.d.ts +0 -0
  144. /package/dist/{packages/components/src/renderers → renderers}/layout/containers.d.ts +0 -0
  145. /package/dist/{packages/components/src/renderers → renderers}/layout/flex.d.ts +0 -0
  146. /package/dist/{packages/components/src/renderers → renderers}/layout/grid.d.ts +0 -0
  147. /package/dist/{packages/components/src/renderers → renderers}/layout/index.d.ts +0 -0
  148. /package/dist/{packages/components/src/renderers → renderers}/layout/semantic.d.ts +0 -0
  149. /package/dist/{packages/components/src/renderers → renderers}/layout/stack.d.ts +0 -0
  150. /package/dist/{packages/components/src/renderers → renderers}/layout/tabs.d.ts +0 -0
  151. /package/dist/{packages/components/src/renderers → renderers}/navigation/header-bar.d.ts +0 -0
  152. /package/dist/{packages/components/src/renderers → renderers}/navigation/index.d.ts +0 -0
  153. /package/dist/{packages/components/src/renderers → renderers}/navigation/sidebar.d.ts +0 -0
  154. /package/dist/{packages/components/src/renderers → renderers}/overlay/alert-dialog.d.ts +0 -0
  155. /package/dist/{packages/components/src/renderers → renderers}/overlay/context-menu.d.ts +0 -0
  156. /package/dist/{packages/components/src/renderers → renderers}/overlay/dialog.d.ts +0 -0
  157. /package/dist/{packages/components/src/renderers → renderers}/overlay/drawer.d.ts +0 -0
  158. /package/dist/{packages/components/src/renderers → renderers}/overlay/dropdown-menu.d.ts +0 -0
  159. /package/dist/{packages/components/src/renderers → renderers}/overlay/hover-card.d.ts +0 -0
  160. /package/dist/{packages/components/src/renderers → renderers}/overlay/index.d.ts +0 -0
  161. /package/dist/{packages/components/src/renderers → renderers}/overlay/menubar.d.ts +0 -0
  162. /package/dist/{packages/components/src/renderers → renderers}/overlay/popover.d.ts +0 -0
  163. /package/dist/{packages/components/src/renderers → renderers}/overlay/sheet.d.ts +0 -0
  164. /package/dist/{packages/components/src/renderers → renderers}/overlay/tooltip.d.ts +0 -0
  165. /package/dist/{packages/components/src/share → share}/index.d.ts +0 -0
  166. /package/dist/{packages/components/src/types → types}/config-panel.d.ts +0 -0
  167. /package/dist/{packages/components/src/ui → ui}/accordion.d.ts +0 -0
  168. /package/dist/{packages/components/src/ui → ui}/alert.d.ts +0 -0
  169. /package/dist/{packages/components/src/ui → ui}/aspect-ratio.d.ts +0 -0
  170. /package/dist/{packages/components/src/ui → ui}/avatar.d.ts +0 -0
  171. /package/dist/{packages/components/src/ui → ui}/button.d.ts +0 -0
  172. /package/dist/{packages/components/src/ui → ui}/card.d.ts +0 -0
  173. /package/dist/{packages/components/src/ui → ui}/carousel.d.ts +0 -0
  174. /package/dist/{packages/components/src/ui → ui}/checkbox.d.ts +0 -0
  175. /package/dist/{packages/components/src/ui → ui}/collapsible.d.ts +0 -0
  176. /package/dist/{packages/components/src/ui → ui}/hover-card.d.ts +0 -0
  177. /package/dist/{packages/components/src/ui → ui}/index.d.ts +0 -0
  178. /package/dist/{packages/components/src/ui → ui}/input-otp.d.ts +0 -0
  179. /package/dist/{packages/components/src/ui → ui}/input.d.ts +0 -0
  180. /package/dist/{packages/components/src/ui → ui}/label.d.ts +0 -0
  181. /package/dist/{packages/components/src/ui → ui}/navigation-menu.d.ts +0 -0
  182. /package/dist/{packages/components/src/ui → ui}/popover.d.ts +0 -0
  183. /package/dist/{packages/components/src/ui → ui}/progress.d.ts +0 -0
  184. /package/dist/{packages/components/src/ui → ui}/radio-group.d.ts +0 -0
  185. /package/dist/{packages/components/src/ui → ui}/scroll-area.d.ts +0 -0
  186. /package/dist/{packages/components/src/ui → ui}/select.d.ts +0 -0
  187. /package/dist/{packages/components/src/ui → ui}/separator.d.ts +0 -0
  188. /package/dist/{packages/components/src/ui → ui}/sidebar.d.ts +0 -0
  189. /package/dist/{packages/components/src/ui → ui}/slider.d.ts +0 -0
  190. /package/dist/{packages/components/src/ui → ui}/switch.d.ts +0 -0
  191. /package/dist/{packages/components/src/ui → ui}/table.d.ts +0 -0
  192. /package/dist/{packages/components/src/ui → ui}/tabs.d.ts +0 -0
  193. /package/dist/{packages/components/src/ui → ui}/textarea.d.ts +0 -0
  194. /package/dist/{packages/components/src/ui → ui}/toast.d.ts +0 -0
  195. /package/dist/{packages/components/src/ui → ui}/toggle-group.d.ts +0 -0
  196. /package/dist/{packages/components/src/ui → ui}/toggle.d.ts +0 -0
  197. /package/dist/{packages/components/src/ui → ui}/tooltip.d.ts +0 -0
  198. /package/dist/{packages/components/src/ui → ui}/typography.d.ts +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,189 @@
1
1
  # @object-ui/components
2
2
 
3
+ ## 7.0.0
4
+
5
+ ### Minor Changes
6
+
7
+ - a00e16d: feat: evaluate CEL `disabled` on action buttons + record-page Undo wiring
8
+
9
+ - **components (page header)**: the `record_header` action toolbar now evaluates
10
+ a CEL `disabled` predicate against the record (boolean was the only honoured
11
+ form before), mirroring its existing `visible` evaluation. An action can now
12
+ grey out conditionally (e.g. "Reassign" on a converted lead) instead of only
13
+ hiding via `visible`.
14
+ - **plugin-grid (row menu)**: `RowActionMenu` items likewise evaluate `disabled`
15
+ (boolean or CEL against the row), and skip the click when disabled.
16
+ - **components (action-button)**: forward `undoable` / `recordIdField` when
17
+ executing, so undoable update actions keep their Undo affordance through the
18
+ `action:button` path.
19
+ - **app-shell (RecordDetailView)**: mount `useGlobalUndo` and wire the record
20
+ action runtime's success toast to offer "Undo" for `undoable` actions
21
+ (capturing the changed fields' prior values from the loaded record).
22
+ - **plugin-detail (record:quick_actions)**: the widget's buttons now evaluate a
23
+ CEL `disabled` and show a spinner + disable while running.
24
+
25
+ - 90acb7f: Master-detail subform + lightweight list primitives (SDUI).
26
+
27
+ - `MasterDetailForm` (`object-master-detail-form`): enter a parent record and its child line items together; client-orchestrated transactional create (parent → FK → bulk children → rollup → cleanup). Enterprise-convention layout (header on top, line grid, single Save bar at the bottom).
28
+ - `LineItemsField` editable child grid (line numbers, right-aligned numerics, running total) and `LineItemsPanel` (`record:line_items`) for detail-page inline edit.
29
+ - `element:definition-list` and `element:repeater` — lightweight, low-chrome list primitives for simple data.
30
+
31
+ ### Patch Changes
32
+
33
+ - ddbe4a2: B2 step 3: client-side field-level conditional rules (`visibleWhen` / `readonlyWhen` / `requiredWhen`). The form renderer now evaluates these CEL predicates reactively against the live record and gates each field's visibility, read-only state, and required-ness accordingly. Evaluation delegates to the canonical `@objectstack/formula` `ExpressionEngine` — the _same_ dialect the server enforces (`requiredWhen` in the rule-validator, `readonlyWhen` in `stripReadonlyWhenFields`) — so the UX and the persisted verdict always agree. New core helpers `evalFieldPredicate` / `resolveFieldRuleState` (zero-React, fail-open). `FormField` gains `visibleWhen` / `readonlyWhen` / `requiredWhen` (+ deprecated `conditionalRequired` alias), and `ObjectForm` carries them through from object metadata.
34
+ - 2d47e94: B2 follow-ups (A): field conditional rules in inline grids + submit-time enforcement.
35
+
36
+ - **Grids**: a line-item column's `readonlyWhen` / `requiredWhen` CEL rule is now honored per row — `deriveMasterDetail` carries the props onto the `GridColumn` and `GridField` evaluates them against each row via `resolveFieldRuleState` (a `readonlyWhen`-TRUE cell locks; a `requiredWhen`-TRUE empty cell flags inline-invalid). Rules are row-scoped (`record.*`); the core helpers gained an optional `scope` (and `GridField` a `contextRecord` prop) so a future header-driven lock can bind `parent.*` — that wiring is deferred (it needs the master-detail header's re-renders isolated).
37
+ - **Submit enforcement**: `requiredWhen` already drove react-hook-form's `required` rule, so submit is blocked with a field error when the predicate is TRUE and the value is empty. Added a reactive cleanup so a stale _required_ error clears when the predicate flips FALSE (and all errors clear when a field is hidden by `visibleWhen`).
38
+
39
+ - 6c0c92c: fix(app-shell): command palette idempotent open + stable locators (ADR-0054 Phase 1)
40
+
41
+ The top-bar "Search… ⌘K" button now opens the command palette directly via a
42
+ shared, idempotent `openCommandPalette()` instead of re-dispatching a synthetic
43
+ `⌘K` `KeyboardEvent` — so it works under automation and in ⌘K-reserving
44
+ browsers. Open state is URL-addressable (`?palette=1`, `?cmdk=1` alias), making
45
+ the palette deep-linkable and restore-on-reload. The dialog and header trigger
46
+ emit stable `data-testid` locators (`overlay:command-palette`,
47
+ `action:command-palette:open`) plus an ARIA name. New `useCommandPalette()` hook
48
+ and `CommandPaletteProvider`; `CommandDialog` gains a `contentProps` passthrough
49
+ for the dialog locator/ARIA. Implements invariants C1/C3/C4 of the UI
50
+ testability contract.
51
+
52
+ - ad8ade6: feat(components): metadata-derived field locators on generated forms (ADR-0054 Phase 4)
53
+
54
+ The form renderer now emits a stable `data-testid="field:{objectName}.{field}"`
55
+ (plus `data-field`) on every field wrapper, derived from the form's `objectName`
56
+ and each field's name — closing the locator gap at the source so every generated
57
+ form (`ObjectForm`/`ModalForm`/`DrawerForm`/`SplitForm`/`WizardForm`) inherits
58
+ testable fields with zero per-app work (ADR-0054 C4). `FormSchema` gains an
59
+ optional `objectName`; the object prefix is omitted (`field:{field}`) when a form
60
+ has none. `FormItem` now accepts `data-*` attributes.
61
+
62
+ - 2eb3096: fix(form): stop `form.reset()` from wiping user input on re-render
63
+
64
+ The form renderer reset react-hook-form whenever the `defaultValues` **object
65
+ identity** changed:
66
+
67
+ ```ts
68
+ useEffect(() => {
69
+ form.reset(defaultValues);
70
+ }, [defaultValues]);
71
+ ```
72
+
73
+ Callers commonly pass a freshly-built `defaultValues` object every render, so an
74
+ unrelated parent re-render reset the form and discarded whatever the user had
75
+ typed. This broke master-detail "Create": a re-render between the submit click
76
+ and the (deferred) `requestSubmit` blanked the form, so RHF then failed
77
+ required-field validation on the now-empty fields and nothing was submitted —
78
+ the "click Create, nothing happens" report.
79
+
80
+ The effect now resets only when `defaultValues` actually **changes by value**
81
+ (JSON-compared), so a genuine change (e.g. an edit-mode record finishing
82
+ loading) still resets while identity churn is ignored.
83
+
84
+ - 7913390: fix(master-detail): never silent on save — feedback, reset, and a duplicate-submit guard
85
+
86
+ `MasterDetailForm`'s "Create" submitted successfully but gave **no feedback**: no toast, no form reset, no navigation. A successful create looked broken, and re-clicking created duplicate records.
87
+
88
+ - On success: a `toast.success`, and on create the form clears (line items reset + parent `<ObjectForm>` remounts) ready for the next entry. A page-supplied `onSuccess` still runs afterwards (e.g. to navigate).
89
+ - On failure (validation / network / atomic rollback): a `toast.error` surfaces the message instead of failing silently.
90
+ - In-flight guard: the Create button shows "Saving…" and is disabled while a submit is running, preventing duplicate submissions, with a safety release if client-side validation blocks the submit.
91
+ - `@object-ui/components` now re-exports `toast` (alongside `Toaster`) from its sonner wrapper.
92
+
93
+ Tests: two new `MasterDetailForm` tests assert success → toast + form clear, and failure → error toast.
94
+
95
+ - bd8b054: fix(currency): resolve the tenant default currency across the long-tail renderers
96
+
97
+ Phase 2b of the currency-resolution work (ADR-0053). The cell/field renderers
98
+ already funnelled through `resolveFieldCurrency` + `useLocalization` (#1856),
99
+ but the rest of the renderers still hard-coded `USD` or read only one of
100
+ `currency`/`defaultCurrency`. They now share the same resolution chain — explicit
101
+ field currency -> `currencyConfig.defaultCurrency` -> legacy `defaultCurrency` ->
102
+ tenant `localization.currency` -> plain number:
103
+
104
+ - `plugin-dashboard` `ObjectMetricWidget` (inferred currency), `ObjectDataTable`
105
+ (symbol-format fallback).
106
+ - `plugin-grid` `useColumnSummary` (footer agrees with the cells) and
107
+ `ObjectGrid` (compact amount + name-inferred currency cells).
108
+ - `plugin-detail` `DetailView` summary metrics.
109
+ - `plugin-gantt` `ObjectGantt` currency tooltips.
110
+ - `components` `element:number` (`format: 'currency'`) — tenant default instead
111
+ of a baked-in `USD`, and renders with the tenant locale.
112
+
113
+ `resolveFieldCurrency` now lives in `@object-ui/i18n` (co-located with
114
+ `useLocalization`, which supplies the tenant default); `@object-ui/fields`
115
+ re-exports it, so the existing import path is unchanged. No behavior change when
116
+ no tenant currency is configured — a field that declares its own currency, or a
117
+ deployment with no `localization.currency`, renders exactly as before.
118
+
119
+ - 2270239: feat: scoped style-object rendering (ADR-0065)
120
+
121
+ A metadata node may carry `responsiveStyles` (per-breakpoint CSS-property maps);
122
+ `SchemaRenderer` compiles it to **id-scoped CSS** injected as a `<style>` tag and
123
+ appends a scope class to the node. Build-independent (arbitrary values + design
124
+ tokens pass through verbatim — no Tailwind JIT), collision-free (per-node scope,
125
+ unlayered so it beats base utilities), responsive-correct (model breakpoint maps
126
+ → generated `@media`, never `md:` variant classes). Adds `compileScopedStyles`/
127
+ `scopeClassFor`/`hasResponsiveStyles` to `@object-ui/core` and an SDUI design-token
128
+ palette (`--space-*`, `--surface`, `--brand`, …) to the theme. Mirrors Builder.io.
129
+
130
+ - 8d1195d: Fix `type: 'url'` actions so they actually reach the backend in split-origin dev setups, and so reveal-once result dialogs render.
131
+
132
+ - `ActionRunner.executeUrl`: when context provides `apiBase`, relative `/api/...`, `/_auth/...`, and `/_account/...` URLs are now promoted to absolute (`${apiBase}${path}`) before navigation. Same-origin API paths (with or without `apiBase`) trigger a full-page `window.location.href` rather than React-Router push — this is required for server-side OAuth redirect dances (e.g. better-auth `/sign-in/social`) that React Router would otherwise swallow into the SPA's fallback route.
133
+ - `ActionRunner.buildInterpolationContext`: surfaces `ctx.apiBase` for action targets that want to template it explicitly.
134
+ - `ObjectView`: passes `apiBase: import.meta.env.VITE_SERVER_URL` into the toolbar `ActionProvider` context so the above resolves.
135
+ - `action-button` and `action-menu` renderers now forward `resultDialog` when invoking the runner. Previously this field was silently dropped by an explicit whitelist, breaking every "show once, then hide" flow (2FA QR/backup codes, OAuth client_secret, regenerated tokens).
136
+
137
+ - Updated dependencies [5976ba3]
138
+ - Updated dependencies [eaccefd]
139
+ - Updated dependencies [f7f325d]
140
+ - Updated dependencies [c12986e]
141
+ - Updated dependencies [71d7ce0]
142
+ - Updated dependencies [053c948]
143
+ - Updated dependencies [89e113c]
144
+ - Updated dependencies [ddbe4a2]
145
+ - Updated dependencies [2d47e94]
146
+ - Updated dependencies [9049bbe]
147
+ - Updated dependencies [77cc6bb]
148
+ - Updated dependencies [97c6831]
149
+ - Updated dependencies [cb2fdb1]
150
+ - Updated dependencies [c3749eb]
151
+ - Updated dependencies [c09f44e]
152
+ - Updated dependencies [6cfa330]
153
+ - Updated dependencies [ad8ade6]
154
+ - Updated dependencies [d54346c]
155
+ - Updated dependencies [3870c20]
156
+ - Updated dependencies [b88c560]
157
+ - Updated dependencies [0ad72a6]
158
+ - Updated dependencies [3fa23a7]
159
+ - Updated dependencies [18d0339]
160
+ - Updated dependencies [59b6bbb]
161
+ - Updated dependencies [d16566f]
162
+ - Updated dependencies [1394e34]
163
+ - Updated dependencies [e95cc25]
164
+ - Updated dependencies [abe8ebc]
165
+ - Updated dependencies [300d755]
166
+ - Updated dependencies [bd8b054]
167
+ - Updated dependencies [4eb9cb6]
168
+ - Updated dependencies [7c239fd]
169
+ - Updated dependencies [858ad94]
170
+ - Updated dependencies [2270239]
171
+ - Updated dependencies [2f31406]
172
+ - Updated dependencies [8d1195d]
173
+ - @object-ui/core@7.0.0
174
+ - @object-ui/react@7.0.0
175
+ - @object-ui/i18n@7.0.0
176
+ - @object-ui/types@7.0.0
177
+
178
+ ## 6.2.3
179
+
180
+ ### Patch Changes
181
+
182
+ - @object-ui/types@6.2.3
183
+ - @object-ui/core@6.2.3
184
+ - @object-ui/i18n@6.2.3
185
+ - @object-ui/react@6.2.3
186
+
3
187
  ## 6.2.2
4
188
 
5
189
  ### Patch Changes
package/README.md CHANGED
@@ -10,21 +10,8 @@ Standard UI component library for Object UI, built with Shadcn UI + Tailwind CSS
10
10
  - ♿ **Accessible** - WCAG compliant components
11
11
  - 🎯 **Type-Safe** - Full TypeScript support
12
12
  - 🔌 **Extensible** - Easy to customize and extend
13
- - � **Storybook** - Interactive component showcase and development environment
14
13
  - 🔄 **Sync Tools** - Scripts to keep components updated with latest Shadcn
15
14
 
16
- ## Development
17
-
18
- We use Storybook for component development and testing.
19
-
20
- ```bash
21
- # Start Storybook
22
- pnpm storybook
23
-
24
- # Build Storybook
25
- pnpm build-storybook
26
- ```
27
-
28
15
  ## Keeping Components Updated
29
16
 
30
17
  ObjectUI provides tools to sync components with the latest Shadcn UI versions:
@@ -0,0 +1,4 @@
1
+ import { default as React } from 'react';
2
+ export declare const SchemaRenderer: ({ schema }: {
3
+ schema: any;
4
+ }) => React.JSX.Element | null;
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- import { ActionParamDef } from '../../../core/src';
2
+ import { ActionParamDef } from '@object-ui/core';
3
3
  export interface ActionParamDialogProps {
4
4
  /** The param definitions to render */
5
5
  params: ActionParamDef[];
@@ -3,9 +3,9 @@ import { Separator } from '../ui/separator';
3
3
  declare const buttonGroupVariants: (props?: ({
4
4
  orientation?: "horizontal" | "vertical" | null | undefined;
5
5
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
6
- declare function ButtonGroup({ className, orientation, ...props }: React.ComponentProps<"div"> & VariantProps<typeof buttonGroupVariants>): import("react/jsx-runtime").JSX.Element;
6
+ declare function ButtonGroup({ className, orientation, ...props }: React.ComponentProps<"div"> & VariantProps<typeof buttonGroupVariants>): import("react").JSX.Element;
7
7
  declare function ButtonGroupText({ className, asChild, ...props }: React.ComponentProps<"div"> & {
8
8
  asChild?: boolean;
9
- }): import("react/jsx-runtime").JSX.Element;
10
- declare function ButtonGroupSeparator({ className, orientation, ...props }: React.ComponentProps<typeof Separator>): import("react/jsx-runtime").JSX.Element;
9
+ }): import("react").JSX.Element;
10
+ declare function ButtonGroupSeparator({ className, orientation, ...props }: React.ComponentProps<typeof Separator>): import("react").JSX.Element;
11
11
  export { ButtonGroup, ButtonGroupSeparator, ButtonGroupText, buttonGroupVariants, };
@@ -5,6 +5,7 @@
5
5
  * This source code is licensed under the MIT license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
+ import * as React from "react";
8
9
  export interface ComboboxOption {
9
10
  value: string;
10
11
  label: string;
@@ -19,4 +20,4 @@ export interface ComboboxProps {
19
20
  className?: string;
20
21
  disabled?: boolean;
21
22
  }
22
- export declare function Combobox({ options, value, onValueChange, placeholder, searchPlaceholder, emptyText, className, disabled, }: ComboboxProps): import("react/jsx-runtime").JSX.Element;
23
+ export declare function Combobox({ options, value, onValueChange, placeholder, searchPlaceholder, emptyText, className, disabled, }: ComboboxProps): React.JSX.Element;
@@ -1,4 +1,12 @@
1
1
  import { ConfigField } from '../types/config-panel';
2
+ /**
3
+ * ObjectUI
4
+ * Copyright (c) 2024-present ObjectStack Inc.
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ */
9
+ import * as React from 'react';
2
10
  export interface ConfigFieldRendererProps {
3
11
  /** Field schema */
4
12
  field: ConfigField;
@@ -18,4 +26,4 @@ export interface ConfigFieldRendererProps {
18
26
  * filter/sort/field-picker are rendered as placeholders that consumers can
19
27
  * override with type='custom' when full sub-editor integration is needed.
20
28
  */
21
- export declare function ConfigFieldRenderer({ field, value, onChange, draft, objectDef: _objectDef, }: ConfigFieldRendererProps): import("react/jsx-runtime").JSX.Element | null;
29
+ export declare function ConfigFieldRenderer({ field, value, onChange, draft, objectDef: _objectDef, }: ConfigFieldRendererProps): React.JSX.Element | null;
@@ -80,4 +80,4 @@ export interface ConfigPanelRendererProps {
80
80
  * Each concrete panel (Dashboard, Form, Page…) only needs to provide
81
81
  * a schema and wire up `useConfigDraft`.
82
82
  */
83
- export declare function ConfigPanelRenderer({ open, onClose, schema, draft, isDirty, onFieldChange, onSave, onDiscard, headerExtra, objectDef, className, style, saveLabel, discardLabel, panelRef, role, ariaLabel, tabIndex, testId, closeTitle, footerTestId, saveTestId, discardTestId, expandedSections, onUndo, onRedo, canUndo, canRedo, undoLabel, redoLabel, }: ConfigPanelRendererProps): import("react/jsx-runtime").JSX.Element | null;
83
+ export declare function ConfigPanelRenderer({ open, onClose, schema, draft, isDirty, onFieldChange, onSave, onDiscard, headerExtra, objectDef, className, style, saveLabel, discardLabel, panelRef, role, ariaLabel, tabIndex, testId, closeTitle, footerTestId, saveTestId, discardTestId, expandedSections, onUndo, onRedo, canUndo, canRedo, undoLabel, redoLabel, }: ConfigPanelRendererProps): React.JSX.Element | null;
@@ -23,5 +23,5 @@ export interface ConfigRowProps {
23
23
  * Renders as a `<button>` when `onClick` is provided, otherwise as a `<div>`.
24
24
  * Shows label on the left and either custom children or a text value on the right.
25
25
  */
26
- declare function ConfigRow({ label, value, onClick, children, className }: ConfigRowProps): import("react/jsx-runtime").JSX.Element;
26
+ declare function ConfigRow({ label, value, onClick, children, className }: ConfigRowProps): import("react").JSX.Element;
27
27
  export { ConfigRow };
@@ -5,6 +5,7 @@
5
5
  * This source code is licensed under the MIT license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
+ import * as React from "react";
8
9
  export interface DatePickerProps {
9
10
  date?: Date;
10
11
  onDateChange?: (date: Date | undefined) => void;
@@ -12,4 +13,4 @@ export interface DatePickerProps {
12
13
  className?: string;
13
14
  disabled?: boolean;
14
15
  }
15
- export declare function DatePicker({ date, onDateChange, placeholder, className, disabled, }: DatePickerProps): import("react/jsx-runtime").JSX.Element;
16
+ export declare function DatePicker({ date, onDateChange, placeholder, className, disabled, }: DatePickerProps): React.JSX.Element;
@@ -1,13 +1,13 @@
1
1
  import { VariantProps } from 'class-variance-authority';
2
- declare function Empty({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
3
- declare function EmptyHeader({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
2
+ declare function Empty({ className, ...props }: React.ComponentProps<"div">): import("react").JSX.Element;
3
+ declare function EmptyHeader({ className, ...props }: React.ComponentProps<"div">): import("react").JSX.Element;
4
4
  declare const emptyMediaVariants: (props?: ({
5
5
  variant?: "default" | "icon" | null | undefined;
6
6
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
- declare function EmptyMedia({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof emptyMediaVariants>): import("react/jsx-runtime").JSX.Element;
8
- declare function EmptyTitle({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
9
- declare function EmptyDescription({ className, ...props }: React.ComponentProps<"p">): import("react/jsx-runtime").JSX.Element;
10
- declare function EmptyContent({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
7
+ declare function EmptyMedia({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof emptyMediaVariants>): import("react").JSX.Element;
8
+ declare function EmptyTitle({ className, ...props }: React.ComponentProps<"div">): import("react").JSX.Element;
9
+ declare function EmptyDescription({ className, ...props }: React.ComponentProps<"p">): import("react").JSX.Element;
10
+ declare function EmptyContent({ className, ...props }: React.ComponentProps<"div">): import("react").JSX.Element;
11
11
  /**
12
12
  * EmptyValue — universal inline placeholder for missing cell/field values.
13
13
  *
@@ -18,5 +18,5 @@ declare function EmptyContent({ className, ...props }: React.ComponentProps<"div
18
18
  */
19
19
  declare function EmptyValue({ className, glyph, ...props }: React.ComponentProps<"span"> & {
20
20
  glyph?: string;
21
- }): import("react/jsx-runtime").JSX.Element;
21
+ }): import("react").JSX.Element;
22
22
  export { Empty, EmptyHeader, EmptyTitle, EmptyDescription, EmptyContent, EmptyMedia, EmptyValue, };
@@ -1,4 +1,23 @@
1
1
  import { UseExportJobReturn } from '../hooks/use-export-job';
2
+ /**
3
+ * ObjectUI
4
+ * Copyright (c) 2024-present ObjectStack Inc.
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ */
9
+ /**
10
+ * ExportProgressDialog — UI for the async export job lifecycle.
11
+ *
12
+ * Pair with `useExportJob` to render a progress bar (determinate when the
13
+ * server reports `percentComplete`, indeterminate otherwise), a Cancel button
14
+ * while the job is in flight, and a Download button when it completes.
15
+ *
16
+ * The dialog is fully controlled by the `job` returned from `useExportJob`;
17
+ * pass `open`/`onOpenChange` to control its visibility (typically opened by
18
+ * the same handler that calls `job.start(...)`).
19
+ */
20
+ import * as React from 'react';
2
21
  export interface ExportProgressDialogProps {
3
22
  /** Visibility, controlled. */
4
23
  open: boolean;
@@ -21,4 +40,4 @@ export interface ExportProgressDialogProps {
21
40
  /** Auto-close the dialog this many ms after a successful download. */
22
41
  closeAfterDownloadMs?: number;
23
42
  }
24
- export declare function ExportProgressDialog({ open, onOpenChange, job, title, description, filename, allowCloseWhileRunning, className, onAfterDownload, closeAfterDownloadMs, }: ExportProgressDialogProps): import("react/jsx-runtime").JSX.Element;
43
+ export declare function ExportProgressDialog({ open, onOpenChange, job, title, description, filename, allowCloseWhileRunning, className, onAfterDownload, closeAfterDownloadMs, }: ExportProgressDialogProps): React.JSX.Element;
@@ -5,6 +5,7 @@
5
5
  * This source code is licensed under the MIT license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
+ import * as React from "react";
8
9
  export interface FilterCondition {
9
10
  id: string;
10
11
  field: string;
@@ -37,7 +38,7 @@ export interface FilterBuilderProps {
37
38
  className?: string;
38
39
  showClearAll?: boolean;
39
40
  }
40
- declare function FilterBuilder({ fields, value, onChange, className, showClearAll, }: FilterBuilderProps): import("react/jsx-runtime").JSX.Element;
41
+ declare function FilterBuilder({ fields, value, onChange, className, showClearAll, }: FilterBuilderProps): React.JSX.Element;
41
42
  declare namespace FilterBuilder {
42
43
  var displayName: string;
43
44
  }
@@ -54,5 +55,5 @@ interface LookupValuePickerProps {
54
55
  multiple: boolean;
55
56
  onChange: (value: FilterCondition["value"]) => void;
56
57
  }
57
- declare function LookupValuePicker({ field, value, multiple, onChange }: LookupValuePickerProps): import("react/jsx-runtime").JSX.Element;
58
+ declare function LookupValuePicker({ field, value, multiple, onChange }: LookupValuePickerProps): React.JSX.Element;
58
59
  export { FilterBuilder, LookupValuePicker };
@@ -5,6 +5,7 @@
5
5
  * This source code is licensed under the MIT license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
+ import * as React from "react";
8
9
  export interface GroupingFieldEntry {
9
10
  field: string;
10
11
  order: 'asc' | 'desc';
@@ -47,4 +48,4 @@ export interface GroupingEditorProps {
47
48
  * at a time. The current row's selected field stays in its own dropdown so the
48
49
  * user sees the active selection.
49
50
  */
50
- export declare function GroupingEditor({ value, onChange, fieldOptions, maxLevels, className, labels, }: GroupingEditorProps): import("react/jsx-runtime").JSX.Element;
51
+ export declare function GroupingEditor({ value, onChange, fieldOptions, maxLevels, className, labels, }: GroupingEditorProps): React.JSX.Element;
@@ -8,23 +8,23 @@ import { Separator } from '../ui/separator';
8
8
  * LICENSE file in the root directory of this source tree.
9
9
  */
10
10
  import * as React from "react";
11
- declare function ItemGroup({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
12
- declare function ItemSeparator({ className, ...props }: React.ComponentProps<typeof Separator>): import("react/jsx-runtime").JSX.Element;
11
+ declare function ItemGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
12
+ declare function ItemSeparator({ className, ...props }: React.ComponentProps<typeof Separator>): React.JSX.Element;
13
13
  declare const itemVariants: (props?: ({
14
14
  variant?: "default" | "outline" | "muted" | null | undefined;
15
15
  size?: "default" | "sm" | null | undefined;
16
16
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
17
17
  declare function Item({ className, variant, size, asChild, ...props }: React.ComponentProps<"div"> & VariantProps<typeof itemVariants> & {
18
18
  asChild?: boolean;
19
- }): import("react/jsx-runtime").JSX.Element;
19
+ }): React.JSX.Element;
20
20
  declare const itemMediaVariants: (props?: ({
21
21
  variant?: "image" | "default" | "icon" | null | undefined;
22
22
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
23
- declare function ItemMedia({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof itemMediaVariants>): import("react/jsx-runtime").JSX.Element;
24
- declare function ItemContent({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
25
- declare function ItemTitle({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
26
- declare function ItemDescription({ className, ...props }: React.ComponentProps<"p">): import("react/jsx-runtime").JSX.Element;
27
- declare function ItemActions({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
28
- declare function ItemHeader({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
29
- declare function ItemFooter({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
23
+ declare function ItemMedia({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof itemMediaVariants>): React.JSX.Element;
24
+ declare function ItemContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
25
+ declare function ItemTitle({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
26
+ declare function ItemDescription({ className, ...props }: React.ComponentProps<"p">): React.JSX.Element;
27
+ declare function ItemActions({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
28
+ declare function ItemHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
29
+ declare function ItemFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
30
30
  export { Item, ItemMedia, ItemContent, ItemActions, ItemGroup, ItemSeparator, ItemTitle, ItemDescription, ItemHeader, ItemFooter, };
@@ -5,6 +5,6 @@
5
5
  * This source code is licensed under the MIT license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
- declare function Kbd({ className, ...props }: React.ComponentProps<"kbd">): import("react/jsx-runtime").JSX.Element;
9
- declare function KbdGroup({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
8
+ declare function Kbd({ className, ...props }: React.ComponentProps<"kbd">): import("react").JSX.Element;
9
+ declare function KbdGroup({ className, ...props }: React.ComponentProps<"div">): import("react").JSX.Element;
10
10
  export { Kbd, KbdGroup };
@@ -27,5 +27,5 @@ export interface SectionHeaderProps {
27
27
  * Renders as a `<button>` when collapsible, with a chevron icon
28
28
  * indicating the expand/collapse state. Uses `aria-expanded` for accessibility.
29
29
  */
30
- declare function SectionHeader({ title, icon, collapsible, collapsed, onToggle, testId, className }: SectionHeaderProps): import("react/jsx-runtime").JSX.Element;
30
+ declare function SectionHeader({ title, icon, collapsible, collapsed, onToggle, testId, className }: SectionHeaderProps): import("react").JSX.Element;
31
31
  export { SectionHeader };
@@ -29,4 +29,4 @@ import * as React from "react";
29
29
  */
30
30
  export interface ShimmerSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {
31
31
  }
32
- export declare function ShimmerSkeleton({ className, ...props }: ShimmerSkeletonProps): import("react/jsx-runtime").JSX.Element;
32
+ export declare function ShimmerSkeleton({ className, ...props }: ShimmerSkeletonProps): React.JSX.Element;
@@ -5,6 +5,7 @@
5
5
  * This source code is licensed under the MIT license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
+ import * as React from "react";
8
9
  export interface SortItem {
9
10
  id: string;
10
11
  field: string;
@@ -19,4 +20,4 @@ export interface SortBuilderProps {
19
20
  onChange?: (value: SortItem[]) => void;
20
21
  className?: string;
21
22
  }
22
- export declare function SortBuilder({ fields, value, onChange, className, }: SortBuilderProps): import("react/jsx-runtime").JSX.Element;
23
+ export declare function SortBuilder({ fields, value, onChange, className, }: SortBuilderProps): React.JSX.Element;
@@ -6,5 +6,5 @@
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
8
  import * as React from "react";
9
- declare function Spinner({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
9
+ declare function Spinner({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
10
10
  export { Spinner };
@@ -14,17 +14,17 @@ export interface GridSkeletonProps extends ViewSkeletonProps {
14
14
  /** Number of columns to render */
15
15
  columns?: number;
16
16
  }
17
- declare function GridSkeleton({ rows, columns, className, ...props }: GridSkeletonProps): import("react/jsx-runtime").JSX.Element;
17
+ declare function GridSkeleton({ rows, columns, className, ...props }: GridSkeletonProps): React.JSX.Element;
18
18
  export interface KanbanSkeletonProps extends ViewSkeletonProps {
19
19
  /** Number of kanban columns to render */
20
20
  columns?: number;
21
21
  /** Number of cards per column */
22
22
  cardsPerColumn?: number;
23
23
  }
24
- declare function KanbanSkeleton({ columns, cardsPerColumn, className, ...props }: KanbanSkeletonProps): import("react/jsx-runtime").JSX.Element;
25
- declare function FormSkeleton({ rows, className, ...props }: ViewSkeletonProps): import("react/jsx-runtime").JSX.Element;
26
- declare function ListSkeleton({ rows, className, ...props }: ViewSkeletonProps): import("react/jsx-runtime").JSX.Element;
27
- declare function ChartSkeleton({ className, ...props }: Omit<ViewSkeletonProps, "rows">): import("react/jsx-runtime").JSX.Element;
24
+ declare function KanbanSkeleton({ columns, cardsPerColumn, className, ...props }: KanbanSkeletonProps): React.JSX.Element;
25
+ declare function FormSkeleton({ rows, className, ...props }: ViewSkeletonProps): React.JSX.Element;
26
+ declare function ListSkeleton({ rows, className, ...props }: ViewSkeletonProps): React.JSX.Element;
27
+ declare function ChartSkeleton({ className, ...props }: Omit<ViewSkeletonProps, "rows">): React.JSX.Element;
28
28
  export type ViewSkeletonVariant = "grid" | "kanban" | "form" | "list" | "chart";
29
29
  export interface ViewSkeletonDispatchProps extends ViewSkeletonProps {
30
30
  variant: ViewSkeletonVariant;
@@ -33,5 +33,5 @@ export interface ViewSkeletonDispatchProps extends ViewSkeletonProps {
33
33
  /** Cards per column (kanban only) */
34
34
  cardsPerColumn?: number;
35
35
  }
36
- declare function ViewSkeleton({ variant, ...props }: ViewSkeletonDispatchProps): import("react/jsx-runtime").JSX.Element;
36
+ declare function ViewSkeleton({ variant, ...props }: ViewSkeletonDispatchProps): React.JSX.Element;
37
37
  export { ViewSkeleton, GridSkeleton, KanbanSkeleton, FormSkeleton, ListSkeleton, ChartSkeleton, };
@@ -10,7 +10,7 @@ interface DataLoadingStateProps extends React.ComponentProps<"div"> {
10
10
  /** Message displayed below the spinner */
11
11
  message?: string;
12
12
  }
13
- declare function DataLoadingState({ className, message, ...props }: DataLoadingStateProps): import("react/jsx-runtime").JSX.Element;
13
+ declare function DataLoadingState({ className, message, ...props }: DataLoadingStateProps): React.JSX.Element;
14
14
  interface DataEmptyStateProps extends React.ComponentProps<"div"> {
15
15
  /** Icon rendered above the title */
16
16
  icon?: React.ReactNode;
@@ -44,7 +44,7 @@ interface DataEmptyStateProps extends React.ComponentProps<"div"> {
44
44
  /** Optional action rendered below the description */
45
45
  action?: React.ReactNode;
46
46
  }
47
- declare function DataEmptyState({ className, icon, illustration, showIcon, iconWrapperClassName, title, description, action, children, ...props }: DataEmptyStateProps): import("react/jsx-runtime").JSX.Element;
47
+ declare function DataEmptyState({ className, icon, illustration, showIcon, iconWrapperClassName, title, description, action, children, ...props }: DataEmptyStateProps): React.JSX.Element;
48
48
  interface DataErrorStateProps extends React.ComponentProps<"div"> {
49
49
  title?: string;
50
50
  /** Error message or description */
@@ -54,5 +54,5 @@ interface DataErrorStateProps extends React.ComponentProps<"div"> {
54
54
  /** Label for the retry button */
55
55
  retryLabel?: string;
56
56
  }
57
- declare function DataErrorState({ className, title, message, onRetry, retryLabel, children, ...props }: DataErrorStateProps): import("react/jsx-runtime").JSX.Element;
57
+ declare function DataErrorState({ className, title, message, onRetry, retryLabel, children, ...props }: DataErrorStateProps): React.JSX.Element;
58
58
  export { DataLoadingState, DataEmptyState, DataEmptyState as EmptyState, DataErrorState, type DataLoadingStateProps, type DataEmptyStateProps, type DataEmptyStateProps as EmptyStateProps, type DataErrorStateProps, };
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- import { DebugFlags } from '../../../core/src';
2
+ import { DebugFlags } from '@object-ui/core';
3
3
  export interface DebugPanelTab {
4
4
  id: string;
5
5
  label: string;
@@ -36,4 +36,4 @@ export interface DebugPanelProps {
36
36
  *
37
37
  * Plugins can inject additional tabs via the `extraTabs` prop.
38
38
  */
39
- export declare function DebugPanel({ open, onClose, flags, schema, dataContext, extraTabs, className, }: DebugPanelProps): import("react/jsx-runtime").JSX.Element | null;
39
+ export declare function DebugPanel({ open, onClose, flags, schema, dataContext, extraTabs, className, }: DebugPanelProps): React.JSX.Element | null;
@@ -25,6 +25,7 @@ interface ProbeFn {
25
25
  (objectName: string, query: {
26
26
  $filter?: Record<string, unknown>;
27
27
  $top?: number;
28
+ $count?: boolean;
28
29
  }): Promise<{
29
30
  total?: number;
30
31
  data?: unknown[];
@@ -1,4 +1,4 @@
1
- import { DataSource, CreateExportJobRequest, ExportJobProgressInfo } from '../../../types/src';
1
+ import { DataSource, CreateExportJobRequest, ExportJobProgressInfo } from '@object-ui/types';
2
2
  export interface UseExportJobOptions {
3
3
  /** Data source providing the optional export-job methods. Required. */
4
4
  dataSource?: DataSource;